diff --git a/app/code/Magento/AdminNotification/Block/System/Messages.php b/app/code/Magento/AdminNotification/Block/System/Messages.php
index 949ba575abe85001a437eac510a5d30c7d83de9c..994d767e0d56f00a56d3b74d17b993eea8c99051 100644
--- a/app/code/Magento/AdminNotification/Block/System/Messages.php
+++ b/app/code/Magento/AdminNotification/Block/System/Messages.php
@@ -10,7 +10,7 @@ class Messages extends \Magento\Backend\Block\Template
     /**
      * Message list
      *
-     * @var \Magento\AdminNotification\Model\Resource\System\Message\Collection\Synchronized
+     * @var \Magento\AdminNotification\Model\ResourceModel\System\Message\Collection\Synchronized
      */
     protected $_messages;
 
@@ -21,13 +21,13 @@ class Messages extends \Magento\Backend\Block\Template
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\AdminNotification\Model\Resource\System\Message\Collection\Synchronized $messages
+     * @param \Magento\AdminNotification\Model\ResourceModel\System\Message\Collection\Synchronized $messages
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\AdminNotification\Model\Resource\System\Message\Collection\Synchronized $messages,
+        \Magento\AdminNotification\Model\ResourceModel\System\Message\Collection\Synchronized $messages,
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         array $data = []
     ) {
@@ -120,11 +120,8 @@ class Messages extends \Magento\Backend\Block\Template
         return $this->jsonHelper->jsonEncode(
             [
                 'systemMessageDialog' => [
-                    'autoOpen' => false,
-                    'width' => '75%',
-                    'modal' => true,
-                    'minHeight' => '0',
-                    'dialogClass' => 'ui-dialog-active ui-popup-message',
+                    'buttons' => [],
+                    'modalClass' => 'ui-dialog-active ui-popup-message modal-system-messages',
                     'ajaxUrl' => $this->_getMessagesUrl()
                 ],
             ]
diff --git a/app/code/Magento/AdminNotification/Block/System/Messages/UnreadMessagePopup.php b/app/code/Magento/AdminNotification/Block/System/Messages/UnreadMessagePopup.php
index 825ad2ec74196add12ef7d4886043407b9686458..ea6f06be6b542c9a9e9d225e25a2ca883aae25d8 100644
--- a/app/code/Magento/AdminNotification/Block/System/Messages/UnreadMessagePopup.php
+++ b/app/code/Magento/AdminNotification/Block/System/Messages/UnreadMessagePopup.php
@@ -22,18 +22,18 @@ class UnreadMessagePopup extends \Magento\Backend\Block\Template
     /**
      * System Message list
      *
-     * @var \Magento\AdminNotification\Model\Resource\System\Message\Collection
+     * @var \Magento\AdminNotification\Model\ResourceModel\System\Message\Collection
      */
     protected $_messages;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\AdminNotification\Model\Resource\System\Message\Collection\Synchronized $messages
+     * @param \Magento\AdminNotification\Model\ResourceModel\System\Message\Collection\Synchronized $messages
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\AdminNotification\Model\Resource\System\Message\Collection\Synchronized $messages,
+        \Magento\AdminNotification\Model\ResourceModel\System\Message\Collection\Synchronized $messages,
         array $data = []
     ) {
         parent::__construct($context, $data);
diff --git a/app/code/Magento/AdminNotification/Block/ToolbarEntry.php b/app/code/Magento/AdminNotification/Block/ToolbarEntry.php
index 589d318cf43953992036830c73c47399741a4989..8fa41a0bb080f4c13c2260af84009765a4377541 100644
--- a/app/code/Magento/AdminNotification/Block/ToolbarEntry.php
+++ b/app/code/Magento/AdminNotification/Block/ToolbarEntry.php
@@ -33,18 +33,18 @@ class ToolbarEntry extends \Magento\Backend\Block\Template
     /**
      * Collection of latest unread notifications
      *
-     * @var \Magento\AdminNotification\Model\Resource\Inbox\Collection
+     * @var \Magento\AdminNotification\Model\ResourceModel\Inbox\Collection
      */
     protected $_notificationList;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\AdminNotification\Model\Resource\Inbox\Collection\Unread $notificationList
+     * @param \Magento\AdminNotification\Model\ResourceModel\Inbox\Collection\Unread $notificationList
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\AdminNotification\Model\Resource\Inbox\Collection\Unread $notificationList,
+        \Magento\AdminNotification\Model\ResourceModel\Inbox\Collection\Unread $notificationList,
         array $data = []
     ) {
         parent::__construct($context, $data);
@@ -84,7 +84,7 @@ class ToolbarEntry extends \Magento\Backend\Block\Template
     /**
      * Retrieve the list of latest unread notifications
      *
-     * @return \Magento\AdminNotification\Model\Resource\Inbox\Collection
+     * @return \Magento\AdminNotification\Model\ResourceModel\Inbox\Collection
      */
     public function getLatestUnreadNotifications()
     {
diff --git a/app/code/Magento/AdminNotification/Block/Window.php b/app/code/Magento/AdminNotification/Block/Window.php
index 21db82ec373699bff183c8ee444503c3667c0100..676a55c932482a98ba2e07b1f47d78e0bac509f6 100644
--- a/app/code/Magento/AdminNotification/Block/Window.php
+++ b/app/code/Magento/AdminNotification/Block/Window.php
@@ -31,7 +31,7 @@ class Window extends \Magento\Backend\Block\Template
     /**
      * Critical messages collection
      *
-     * @var \Magento\AdminNotification\Model\Resource\Inbox\Collection
+     * @var \Magento\AdminNotification\Model\ResourceModel\Inbox\Collection
      */
     protected $_criticalCollection;
 
@@ -51,13 +51,13 @@ class Window extends \Magento\Backend\Block\Template
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Model\Auth\Session $authSession
-     * @param \Magento\AdminNotification\Model\Resource\Inbox\Collection\Critical $criticalCollection
+     * @param \Magento\AdminNotification\Model\ResourceModel\Inbox\Collection\Critical $criticalCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Model\Auth\Session $authSession,
-        \Magento\AdminNotification\Model\Resource\Inbox\Collection\Critical $criticalCollection,
+        \Magento\AdminNotification\Model\ResourceModel\Inbox\Collection\Critical $criticalCollection,
         array $data = []
     ) {
         parent::__construct($context, $data);
diff --git a/app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php b/app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php
index c40ff5a1659cc1512af4efef6c2185ae5f7f559c..4bf51c2df29028bc4db7247efa59dcad9840897c 100644
--- a/app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php
+++ b/app/code/Magento/AdminNotification/Controller/Adminhtml/System/Message/ListAction.php
@@ -14,7 +14,7 @@ class ListAction extends \Magento\Backend\App\AbstractAction
     protected $jsonHelper;
 
     /**
-     * @var \Magento\AdminNotification\Model\Resource\System\Message\Collection
+     * @var \Magento\AdminNotification\Model\ResourceModel\System\Message\Collection
      */
     protected $messageCollection;
 
@@ -23,12 +23,12 @@ class ListAction extends \Magento\Backend\App\AbstractAction
      *
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
-     * @param \Magento\AdminNotification\Model\Resource\System\Message\Collection $messageCollection
+     * @param \Magento\AdminNotification\Model\ResourceModel\System\Message\Collection $messageCollection
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         \Magento\Framework\Json\Helper\Data $jsonHelper,
-        \Magento\AdminNotification\Model\Resource\System\Message\Collection $messageCollection
+        \Magento\AdminNotification\Model\ResourceModel\System\Message\Collection $messageCollection
     ) {
         $this->jsonHelper = $jsonHelper;
         $this->messageCollection = $messageCollection;
diff --git a/app/code/Magento/AdminNotification/Model/Feed.php b/app/code/Magento/AdminNotification/Model/Feed.php
index 9fac96e1d230baca5a7ac20cb082575b0997b351..d6b90c44cff773533b2e3f6e01e28639f0a8ec72 100644
--- a/app/code/Magento/AdminNotification/Model/Feed.php
+++ b/app/code/Magento/AdminNotification/Model/Feed.php
@@ -72,7 +72,7 @@ class Feed extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\App\DeploymentConfig $deploymentConfig
      * @param \Magento\Framework\App\ProductMetadataInterface $productMetadata
      * @param \Magento\Framework\UrlInterface $urlBuilder
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -86,7 +86,7 @@ class Feed extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\App\DeploymentConfig $deploymentConfig,
         \Magento\Framework\App\ProductMetadataInterface $productMetadata,
         \Magento\Framework\UrlInterface $urlBuilder,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/AdminNotification/Model/Inbox.php b/app/code/Magento/AdminNotification/Model/Inbox.php
index 6bac69b76c77c7b193b6e1650a56d47b4f9b9338..550a351d11103ca240a497929e0a2455d2c2e767 100644
--- a/app/code/Magento/AdminNotification/Model/Inbox.php
+++ b/app/code/Magento/AdminNotification/Model/Inbox.php
@@ -12,8 +12,8 @@ use Magento\AdminNotification\Model\InboxInterface;
 /**
  * AdminNotification Inbox model
  *
- * @method \Magento\AdminNotification\Model\Resource\Inbox _getResource()
- * @method \Magento\AdminNotification\Model\Resource\Inbox getResource()
+ * @method \Magento\AdminNotification\Model\ResourceModel\Inbox _getResource()
+ * @method \Magento\AdminNotification\Model\ResourceModel\Inbox getResource()
  * @method int getSeverity()
  * @method \Magento\AdminNotification\Model\Inbox setSeverity(int $value)
  * @method string getDateAdded()
@@ -38,7 +38,7 @@ class Inbox extends \Magento\Framework\Model\AbstractModel implements NotifierIn
      */
     protected function _construct()
     {
-        $this->_init('Magento\AdminNotification\Model\Resource\Inbox');
+        $this->_init('Magento\AdminNotification\Model\ResourceModel\Inbox');
     }
 
     /**
diff --git a/app/code/Magento/AdminNotification/Model/Resource/Grid/Collection.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Grid/Collection.php
similarity index 67%
rename from app/code/Magento/AdminNotification/Model/Resource/Grid/Collection.php
rename to app/code/Magento/AdminNotification/Model/ResourceModel/Grid/Collection.php
index b8b70ad479bbcf2f26ac52096ae192942d23caf9..496e94ac27d9c33ce2179d73f93eeecdb69acdf0 100644
--- a/app/code/Magento/AdminNotification/Model/Resource/Grid/Collection.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Grid/Collection.php
@@ -11,14 +11,14 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\AdminNotification\Model\Resource\Grid;
+namespace Magento\AdminNotification\Model\ResourceModel\Grid;
 
-class Collection extends \Magento\AdminNotification\Model\Resource\Inbox\Collection
+class Collection extends \Magento\AdminNotification\Model\ResourceModel\Inbox\Collection
 {
     /**
      * Add remove filter
      *
-     * @return \Magento\AdminNotification\Model\Resource\Grid\Collection|\Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\AdminNotification\Model\ResourceModel\Grid\Collection|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected function _initSelect()
     {
diff --git a/app/code/Magento/AdminNotification/Model/Resource/Inbox.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox.php
similarity index 95%
rename from app/code/Magento/AdminNotification/Model/Resource/Inbox.php
rename to app/code/Magento/AdminNotification/Model/ResourceModel/Inbox.php
index 6e7db75590039f316a97aede395b5bedafaa62b7..44b5d1d0cca4fa27ff356dda520b482a40e76616 100644
--- a/app/code/Magento/AdminNotification/Model/Resource/Inbox.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\AdminNotification\Model\Resource;
+namespace Magento\AdminNotification\Model\ResourceModel;
 
 /**
  * AdminNotification Inbox model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Inbox extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Inbox extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * AdminNotification Resource initialization
diff --git a/app/code/Magento/AdminNotification/Model/Resource/Inbox/Collection.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection.php
similarity index 73%
rename from app/code/Magento/AdminNotification/Model/Resource/Inbox/Collection.php
rename to app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection.php
index 9139714cfdb02db40d42f6dea520fdf6a24c1f32..f9927bd12a59011b374faa22230b1436fbc6c885 100644
--- a/app/code/Magento/AdminNotification/Model/Resource/Inbox/Collection.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\AdminNotification\Model\Resource\Inbox;
+namespace Magento\AdminNotification\Model\ResourceModel\Inbox;
 
 /**
  * AdminNotification Inbox model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource collection initialization
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\AdminNotification\Model\Inbox', 'Magento\AdminNotification\Model\Resource\Inbox');
+        $this->_init('Magento\AdminNotification\Model\Inbox', 'Magento\AdminNotification\Model\ResourceModel\Inbox');
     }
 
     /**
diff --git a/app/code/Magento/AdminNotification/Model/Resource/Inbox/Collection/Critical.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Critical.php
similarity index 80%
rename from app/code/Magento/AdminNotification/Model/Resource/Inbox/Collection/Critical.php
rename to app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Critical.php
index e8b4c0e8fc7c1ade4291f5c58d0324cad4b78caa..bf145d654db8562c391c6415bcf6f223bbc081c5 100644
--- a/app/code/Magento/AdminNotification/Model/Resource/Inbox/Collection/Critical.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Critical.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\AdminNotification\Model\Resource\Inbox\Collection;
+namespace Magento\AdminNotification\Model\ResourceModel\Inbox\Collection;
 
-class Critical extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Critical extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource collection initialization
@@ -16,7 +16,7 @@ class Critical extends \Magento\Framework\Model\Resource\Db\Collection\AbstractC
      */
     protected function _construct()
     {
-        $this->_init('Magento\AdminNotification\Model\Inbox', 'Magento\AdminNotification\Model\Resource\Inbox');
+        $this->_init('Magento\AdminNotification\Model\Inbox', 'Magento\AdminNotification\Model\ResourceModel\Inbox');
     }
 
     /**
diff --git a/app/code/Magento/AdminNotification/Model/Resource/Inbox/Collection/Unread.php b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Unread.php
similarity index 66%
rename from app/code/Magento/AdminNotification/Model/Resource/Inbox/Collection/Unread.php
rename to app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Unread.php
index 715281b2d2b04dcaf955b69c08b2e0219b526c87..cd432033ff0a1ca5816d0e2f7788c2ea647db0a6 100644
--- a/app/code/Magento/AdminNotification/Model/Resource/Inbox/Collection/Unread.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/Unread.php
@@ -9,14 +9,14 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\AdminNotification\Model\Resource\Inbox\Collection;
+namespace Magento\AdminNotification\Model\ResourceModel\Inbox\Collection;
 
-class Unread extends \Magento\AdminNotification\Model\Resource\Inbox\Collection
+class Unread extends \Magento\AdminNotification\Model\ResourceModel\Inbox\Collection
 {
     /**
      * Init collection select
      *
-     * @return \Magento\AdminNotification\Model\Resource\Inbox\Collection\Unread
+     * @return \Magento\AdminNotification\Model\ResourceModel\Inbox\Collection\Unread
      */
     protected function _initSelect()
     {
diff --git a/app/code/Magento/AdminNotification/Model/Resource/System/Message.php b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message.php
similarity index 76%
rename from app/code/Magento/AdminNotification/Model/Resource/System/Message.php
rename to app/code/Magento/AdminNotification/Model/ResourceModel/System/Message.php
index 9888a8c70a59d2f3d67d02b60bb10ea0e3269551..a3b9aac4305449fb5738e002fee9f3a53cbf0caf 100644
--- a/app/code/Magento/AdminNotification/Model/Resource/System/Message.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\AdminNotification\Model\Resource\System;
+namespace Magento\AdminNotification\Model\ResourceModel\System;
 
-class Message extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Message extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Flag that notifies whether Primary key of table is auto-incremeted
diff --git a/app/code/Magento/AdminNotification/Model/Resource/System/Message/Collection.php b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection.php
similarity index 88%
rename from app/code/Magento/AdminNotification/Model/Resource/System/Message/Collection.php
rename to app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection.php
index 1c7a0372c2d3feb105eca9f0cc8c6fd27f99eed8..d8b8bfc2533326fa2f1a9b3bf209ccf3e504ce0b 100644
--- a/app/code/Magento/AdminNotification/Model/Resource/System/Message/Collection.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\AdminNotification\Model\Resource\System\Message;
+namespace Magento\AdminNotification\Model\ResourceModel\System\Message;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * System message list
@@ -28,7 +28,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Notification\MessageList $messageList
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -37,7 +37,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Notification\MessageList $messageList,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_messageList = $messageList;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
@@ -52,7 +52,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     {
         $this->_init(
             'Magento\AdminNotification\Model\System\Message',
-            'Magento\AdminNotification\Model\Resource\System\Message'
+            'Magento\AdminNotification\Model\ResourceModel\System\Message'
         );
     }
 
diff --git a/app/code/Magento/AdminNotification/Model/Resource/System/Message/Collection/Synchronized.php b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection/Synchronized.php
similarity index 90%
rename from app/code/Magento/AdminNotification/Model/Resource/System/Message/Collection/Synchronized.php
rename to app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection/Synchronized.php
index bbd824819924b99933e58dbe8fdf6eefae265582..2c070d3140f3bc7e18098b962ecc0b04f1ae4f80 100644
--- a/app/code/Magento/AdminNotification/Model/Resource/System/Message/Collection/Synchronized.php
+++ b/app/code/Magento/AdminNotification/Model/ResourceModel/System/Message/Collection/Synchronized.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\AdminNotification\Model\Resource\System\Message\Collection;
+namespace Magento\AdminNotification\Model\ResourceModel\System\Message\Collection;
 
-class Synchronized extends \Magento\AdminNotification\Model\Resource\System\Message\Collection
+class Synchronized extends \Magento\AdminNotification\Model\ResourceModel\System\Message\Collection
 {
     /**
      * Unread message list
@@ -17,7 +17,7 @@ class Synchronized extends \Magento\AdminNotification\Model\Resource\System\Mess
     /**
      * Store new messages in database and remove outdated messages
      *
-     * @return $this|\Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return $this|\Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function _afterLoad()
     {
diff --git a/app/code/Magento/AdminNotification/Model/System/Message.php b/app/code/Magento/AdminNotification/Model/System/Message.php
index 0d83486564c8b275521ea68978b112ed2991a148..f637439e22ec389b3257f4f9f3aa6f07c43cd5cc 100644
--- a/app/code/Magento/AdminNotification/Model/System/Message.php
+++ b/app/code/Magento/AdminNotification/Model/System/Message.php
@@ -15,7 +15,7 @@ class Message extends \Magento\Framework\Model\AbstractModel implements \Magento
      */
     protected function _construct()
     {
-        $this->_init('Magento\AdminNotification\Model\Resource\System\Message');
+        $this->_init('Magento\AdminNotification\Model\ResourceModel\System\Message');
     }
 
     /**
diff --git a/app/code/Magento/AdminNotification/Model/System/Message/Baseurl.php b/app/code/Magento/AdminNotification/Model/System/Message/Baseurl.php
index 46eb6b5f887a7fefd2dd08342339a8a494ee1dfe..48c7788421b82cf4353133d09ab841e91ce57b95 100644
--- a/app/code/Magento/AdminNotification/Model/System/Message/Baseurl.php
+++ b/app/code/Magento/AdminNotification/Model/System/Message/Baseurl.php
@@ -65,7 +65,7 @@ class Baseurl implements \Magento\Framework\Notification\MessageInterface
         ) {
             $output = $this->_urlBuilder->getUrl('adminhtml/system_config/edit', ['section' => 'web']);
         } else {
-            /** @var $dataCollection \Magento\Config\Model\Resource\Config\Data\Collection */
+            /** @var $dataCollection \Magento\Config\Model\ResourceModel\Config\Data\Collection */
             $dataCollection = $this->_configValueFactory->create()->getCollection();
             $dataCollection->addValueFilter(\Magento\Store\Model\Store::BASE_URL_PLACEHOLDER);
 
diff --git a/app/code/Magento/AdminNotification/Test/Unit/Block/ToolbarEntryTest.php b/app/code/Magento/AdminNotification/Test/Unit/Block/ToolbarEntryTest.php
index a2671e3fa123b37f3cb02d324ddafc17d2689bc6..e2d777662f606a6f1b27b931df0142af567077a9 100644
--- a/app/code/Magento/AdminNotification/Test/Unit/Block/ToolbarEntryTest.php
+++ b/app/code/Magento/AdminNotification/Test/Unit/Block/ToolbarEntryTest.php
@@ -24,7 +24,7 @@ class ToolbarEntryTest extends \PHPUnit_Framework_TestCase
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         // mock collection of unread notifications
         $notificationList = $this->getMock(
-            'Magento\AdminNotification\Model\Resource\Inbox\Collection\Unread',
+            'Magento\AdminNotification\Model\ResourceModel\Inbox\Collection\Unread',
             ['getSize', 'setCurPage', 'setPageSize'],
             [],
             '',
@@ -52,7 +52,7 @@ class ToolbarEntryTest extends \PHPUnit_Framework_TestCase
         $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
         // 1. Create mocks
-        $notificationList = $this->getMockBuilder('Magento\AdminNotification\Model\Resource\Inbox\Collection\Unread')
+        $notificationList = $this->getMockBuilder('Magento\AdminNotification\Model\ResourceModel\Inbox\Collection\Unread')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/BaseurlTest.php b/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/BaseurlTest.php
index 855652ee3a75ca416baff3fee543d888fc62ecae..96c98bae08f974dac80a429b5784537217ddf47c 100644
--- a/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/BaseurlTest.php
+++ b/app/code/Magento/AdminNotification/Test/Unit/Model/System/Message/BaseurlTest.php
@@ -66,7 +66,7 @@ class BaseurlTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->_dataCollectionMock = $this->getMock(
-            'Magento\Config\Model\Resource\Config\Data\Collection',
+            'Magento\Config\Model\ResourceModel\Config\Data\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/AdminNotification/etc/adminhtml/events.xml b/app/code/Magento/AdminNotification/etc/adminhtml/events.xml
index c63c602ed4279ffeb443f9628d9b7e776ae8d144..b17de13236b87234934bac60411973ddabe5401a 100644
--- a/app/code/Magento/AdminNotification/etc/adminhtml/events.xml
+++ b/app/code/Magento/AdminNotification/etc/adminhtml/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="controller_action_predispatch">
-        <observer name="adminnotification" instance="Magento\AdminNotification\Observer\PredispathAdminActionControllerObserver" method="execute" />
+        <observer name="adminnotification" instance="Magento\AdminNotification\Observer\PredispathAdminActionControllerObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/layout/adminhtml_notification_block.xml b/app/code/Magento/AdminNotification/view/adminhtml/layout/adminhtml_notification_block.xml
index 0d3b6979ea92679dd4306d14cccb6359c272296a..d2102bc323ba772b0130ec39eb78422d80bdd4fb 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/layout/adminhtml_notification_block.xml
+++ b/app/code/Magento/AdminNotification/view/adminhtml/layout/adminhtml_notification_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.notification.container.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">notificationGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\AdminNotification\Model\Resource\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\AdminNotification\Model\ResourceModel\Grid\Collection</argument>
                     <argument name="default_dir" xsi:type="string">DESC</argument>
                     <argument name="default_sort" xsi:type="string">date_added</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml
index 589c26fa8c3734da1a7770f3b589e18b92cc2944..5df9af8b4cce5ea1e900014e15c03a1b733c5506 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml
+++ b/app/code/Magento/AdminNotification/view/adminhtml/templates/system/messages/popup.phtml
@@ -9,8 +9,8 @@
 ?>
 <?php /** @var $block \Magento\AdminNotification\Block\System\Messages\UnreadMessagePopup */ ?>
 
-<div id="system_messages_list" title="<?php echo $block->escapeHtml($block->getPopupTitle()); ?>">
-    <ul class="message-system-list">
+<div style="display:none" id="system_messages_list" data-role="system_messages_list" title="<?php echo $block->escapeHtml($block->getPopupTitle()); ?>">
+    <ul class="message-system-list messages">
         <?php foreach ($block->getUnreadMessages() as $message): ?>
             <li class="message message-warning <?php /* @escapeNotVerified */ echo $block->getItemClass($message);?>">
                 <?php /* @escapeNotVerified */ echo $message->getText();?>
@@ -22,29 +22,17 @@
 <script>
 require([
     "jquery",
-    "jquery/ui"
+    "Magento_Ui/js/modal/modal"
 ], function($){
-
-    $(function() {
-        $("#system_messages_list").dialog({
-            autoOpen: true,
-            resizable: false,
-            width: '75%',
-            modal: true,
-            minHeight: '0',
-            dialogClass: 'ui-popup-message',
-            position: {
-                my: 'left+12.5% top',
-                at: 'center top',
-                of: 'body'
-            },
-            open: function() {
-                $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 10;
-                $(this).closest('.ui-dialog').css('margin-top', topMargin);
-            }
+    if (this.modal) {
+        this.modal.html($('[data-role="system_messages_list"]').html());
+    } else {
+        this.modal = $('[data-role="system_messages_list"]').modal({
+            modalClass: 'modal-system-messages ui-popup-message',
+            type: 'popup',
+            buttons: []
         });
-    });
+    }
+    this.modal.modal('openModal');
 });
 </script>
diff --git a/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js b/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
index 95a228c6fa99c671f144664535cc076d6923ff4b..8b5cf5b0476c6b006bf384aa5891c33d3fc40e6a 100644
--- a/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
+++ b/app/code/Magento/AdminNotification/view/adminhtml/web/system/notification.js
@@ -5,12 +5,14 @@
 define([
     'jquery',
     'mage/template',
-    'jquery/ui'
+    'jquery/ui',
+    'Magento_Ui/js/modal/modal'
 ], function ($, mageTemplate) {
     'use strict';
 
-    $.widget('mage.systemMessageDialog', $.ui.dialog, {
+    $.widget('mage.systemMessageDialog', $.mage.modal, {
         options: {
+            modalClass: 'modal-system-messages',
             systemMessageTemplate:
                 '<% _.each(data.items, function(item) { %>' +
                     '<li class="message message-warning <% if (item.severity == 1) { %>error<% } else { %>warning<% } %>">' +
@@ -19,8 +21,14 @@ define([
                 '<% }); %>'
         },
 
-        open: function (severity) {
+        _create: function() {
+            this.options.title = $('#message-system-all').attr('title');
+            this._super();
+        },
+
+        openModal: function (severity) {
             var superMethod = $.proxy(this._super, this);
+            //this.modal.options
 
             $.ajax({
                 url: this.options.ajaxUrl,
@@ -47,16 +55,19 @@ define([
             }, this));
 
             return this;
+        },
+        closeModal: function () {
+            this._super();
         }
     });
 
     $(document).ready(function () {
         $('#system_messages .message-system-short .error').on('click', function () {
-            $('#message-system-all').systemMessageDialog('open', 1);
+            $('#message-system-all').systemMessageDialog('openModal', 1);
         });
 
         $('#system_messages .message-system-short .warning').on('click', function () {
-            $('#message-system-all').systemMessageDialog('open', 2);
+            $('#message-system-all').systemMessageDialog('openModal', 2);
         });
     });
 
diff --git a/app/code/Magento/AdvancedPricingImportExport/Model/Export/AdvancedPricing.php b/app/code/Magento/AdvancedPricingImportExport/Model/Export/AdvancedPricing.php
index 8d3fc32ba7f27b824b5fbd8ccec542a181801a8e..2ca6fdc5b4083df5a8b194ba004e00c7ef13c8a0 100644
--- a/app/code/Magento/AdvancedPricingImportExport/Model/Export/AdvancedPricing.php
+++ b/app/code/Magento/AdvancedPricingImportExport/Model/Export/AdvancedPricing.php
@@ -38,7 +38,7 @@ class AdvancedPricing extends \Magento\CatalogImportExport\Model\Export\Product
     protected $_entityTypeCode;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
@@ -81,17 +81,17 @@ class AdvancedPricing extends \Magento\CatalogImportExport\Model\Export\Product
     /**
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Eav\Model\Config $config
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Psr\Log\LoggerInterface $logger
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory
      * @param \Magento\ImportExport\Model\Export\ConfigInterface $exportConfig
-     * @param \Magento\Catalog\Model\Resource\ProductFactory $productFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFactory
-     * @param \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryColFactory
-     * @param \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory $itemFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Option\CollectionFactory $optionColFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeColFactory
+     * @param \Magento\Catalog\Model\ResourceModel\ProductFactory $productFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryColFactory
+     * @param \Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory $itemFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Option\CollectionFactory $optionColFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeColFactory
      * @param \Magento\CatalogImportExport\Model\Export\Product\Type\Factory $_typeFactory
      * @param \Magento\Catalog\Model\Product\LinkTypeProvider $linkTypeProvider
      * @param \Magento\CatalogImportExport\Model\Export\RowCustomizerInterface $rowCustomizer
@@ -103,17 +103,17 @@ class AdvancedPricing extends \Magento\CatalogImportExport\Model\Export\Product
     public function __construct(
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Eav\Model\Config $config,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Psr\Log\LoggerInterface $logger,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $collectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory,
         \Magento\ImportExport\Model\Export\ConfigInterface $exportConfig,
-        \Magento\Catalog\Model\Resource\ProductFactory $productFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFactory,
-        \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryColFactory,
-        \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory $itemFactory,
-        \Magento\Catalog\Model\Resource\Product\Option\CollectionFactory $optionColFactory,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeColFactory,
+        \Magento\Catalog\Model\ResourceModel\ProductFactory $productFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFactory,
+        \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryColFactory,
+        \Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory $itemFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Option\CollectionFactory $optionColFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeColFactory,
         \Magento\CatalogImportExport\Model\Export\Product\Type\Factory $_typeFactory,
         \Magento\Catalog\Model\Product\LinkTypeProvider $linkTypeProvider,
         \Magento\CatalogImportExport\Model\Export\RowCustomizerInterface $rowCustomizer,
@@ -218,10 +218,10 @@ class AdvancedPricing extends \Magento\CatalogImportExport\Model\Export\Product
     /**
      * Clean up attribute collection.
      *
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Collection $collection
-     * @return \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $collection
+     * @return \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
      */
-    public function filterAttributeCollection(\Magento\Eav\Model\Resource\Entity\Attribute\Collection $collection)
+    public function filterAttributeCollection(\Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $collection)
     {
         $collection->load();
 
diff --git a/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing.php b/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing.php
index 59334a6f43164476274468ed0f82b0a16bde045e..82c88eea68af698488720d95336693c0d1f14c58 100644
--- a/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing.php
+++ b/app/code/Magento/AdvancedPricingImportExport/Model/Import/AdvancedPricing.php
@@ -8,7 +8,7 @@ namespace Magento\AdvancedPricingImportExport\Model\Import;
 use Magento\CatalogImportExport\Model\Import\Product as ImportProduct;
 use Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface as ValidatorInterface;
 use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Class AdvancedPricing
@@ -89,7 +89,7 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
     protected $logInHistory = true;
 
     /**
-     * @var \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceFactory
+     * @var \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModelFactory
      */
     protected $_resourceFactory;
 
@@ -151,14 +151,14 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
      * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
      * @param \Magento\ImportExport\Helper\Data $importExportData
-     * @param \Magento\ImportExport\Model\Resource\Import\Data $importData
+     * @param \Magento\ImportExport\Model\ResourceModel\Import\Data $importData
      * @param \Magento\Eav\Model\Config $config
-     * @param \Magento\Framework\App\Resource $resource
-     * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Framework\App\ResourceConnection $resource
+     * @param \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param ProcessingErrorAggregatorInterface $errorAggregator
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
-     * @param \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceFactory $resourceFactory
+     * @param \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModelFactory $resourceFactory
      * @param \Magento\Catalog\Model\Product $productModel
      * @param \Magento\Catalog\Helper\Data $catalogData
      * @param ImportProduct\StoreResolver $storeResolver
@@ -171,14 +171,14 @@ class AdvancedPricing extends \Magento\ImportExport\Model\Import\Entity\Abstract
     public function __construct(
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         \Magento\ImportExport\Helper\Data $importExportData,
-        \Magento\ImportExport\Model\Resource\Import\Data $importData,
+        \Magento\ImportExport\Model\ResourceModel\Import\Data $importData,
         \Magento\Eav\Model\Config $config,
-        \Magento\Framework\App\Resource $resource,
-        \Magento\ImportExport\Model\Resource\Helper $resourceHelper,
+        \Magento\Framework\App\ResourceConnection $resource,
+        \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Stdlib\StringUtils $string,
         ProcessingErrorAggregatorInterface $errorAggregator,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
-        \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceFactory $resourceFactory,
+        \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModelFactory $resourceFactory,
         \Magento\Catalog\Model\Product $productModel,
         \Magento\Catalog\Helper\Data $catalogData,
         \Magento\CatalogImportExport\Model\Import\Product\StoreResolver $storeResolver,
diff --git a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Export/AdvancedPricingTest.php b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Export/AdvancedPricingTest.php
index 82a892d1b61810efb61f0e030fe963feb876db0f..4f81c63e7e54b1a66e5bf9c70d89f218a2191e8e 100644
--- a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Export/AdvancedPricingTest.php
+++ b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Export/AdvancedPricingTest.php
@@ -23,7 +23,7 @@ class AdvancedPricingTest extends \PHPUnit_Framework_TestCase
     protected $config;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -38,7 +38,7 @@ class AdvancedPricingTest extends \PHPUnit_Framework_TestCase
     protected $logger;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collection;
 
@@ -53,32 +53,32 @@ class AdvancedPricingTest extends \PHPUnit_Framework_TestCase
     protected $exportConfig;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\ProductFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\ProductFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $productFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $attrSetColFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $categoryColFactory;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $itemFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Option\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $optionColFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $attributeColFactory;
 
@@ -150,7 +150,7 @@ class AdvancedPricingTest extends \PHPUnit_Framework_TestCase
         );
         $this->config->expects($this->once())->method('getEntityType')->willReturn($type);
         $this->resource = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -171,7 +171,7 @@ class AdvancedPricingTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->collection = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\CollectionFactory',
+            '\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory',
             [],
             [],
             '',
@@ -200,7 +200,7 @@ class AdvancedPricingTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->productFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\ProductFactory',
+            'Magento\Catalog\Model\ResourceModel\ProductFactory',
             [
                 'create',
                 'getTypeId',
@@ -210,7 +210,7 @@ class AdvancedPricingTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->attrSetColFactory = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory',
             [
                 'create',
                 'setEntityTypeFilter',
@@ -220,7 +220,7 @@ class AdvancedPricingTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->categoryColFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Category\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Category\CollectionFactory',
             [
                 'create',
                 'addNameToResult',
@@ -230,21 +230,21 @@ class AdvancedPricingTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->itemFactory = $this->getMock(
-            'Magento\CatalogInventory\Model\Resource\Stock\ItemFactory',
+            'Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory',
             [],
             [],
             '',
             false
         );
         $this->optionColFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Option\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Option\CollectionFactory',
             [],
             [],
             '',
             false
         );
         $this->attributeColFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory',
             [],
             [],
             '',
diff --git a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/TierPriceTest.php b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/TierPriceTest.php
index 42cd38395955e395c701022fae5d321e2414055e..45512fef9f27911d4f5d6c0ca9aa13492ad5f30b 100644
--- a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/TierPriceTest.php
+++ b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricing/Validator/TierPriceTest.php
@@ -157,10 +157,10 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase
             [
                 '\Magento\Framework\Json\Helper\Data',
                 '\Magento\ImportExport\Helper\Data',
-                '\Magento\ImportExport\Model\Resource\Import\Data',
+                '\Magento\ImportExport\Model\ResourceModel\Import\Data',
                 '\Magento\Eav\Model\Config',
-                '\Magento\Framework\App\Resource',
-                '\Magento\ImportExport\Model\Resource\Helper',
+                '\Magento\Framework\App\ResourceConnection',
+                '\Magento\ImportExport\Model\ResourceModel\Helper',
                 '\Magento\Framework\Stdlib\StringUtils',
                 'ProcessingErrorAggregatorInterface',
             ],
diff --git a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricingTest.php b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricingTest.php
index 7471ef81011c2956c927c1b505eb88b0c34cb392..7665cacb7d157f72aaba0c89e87c3ff34e69353c 100644
--- a/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricingTest.php
+++ b/app/code/Magento/AdvancedPricingImportExport/Test/Unit/Model/Import/AdvancedPricingTest.php
@@ -7,7 +7,7 @@
 namespace Magento\AdvancedPricingImportExport\Test\Unit\Model\Import;
 
 use \Magento\AdvancedPricingImportExport\Model\Import\AdvancedPricing as AdvancedPricing;
-use \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceFactory as ResourceFactory;
+use \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModelFactory as ResourceFactory;
 use \Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface as RowValidatorInterface;
 
 /**
@@ -57,7 +57,7 @@ class AdvancedPricingTest extends \Magento\ImportExport\Test\Unit\Model\Import\A
     protected $tierPriceValidator;
 
     /**
-     * @var \Magento\ImportExport\Model\Resource\Helper |\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\ImportExport\Model\ResourceModel\Helper |\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceHelper;
 
@@ -67,7 +67,7 @@ class AdvancedPricingTest extends \Magento\ImportExport\Test\Unit\Model\Import\A
     protected $connection;
 
     /**
-     * @var \Magento\ImportExport\Model\Resource\Import\Data|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\ImportExport\Model\ResourceModel\Import\Data|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $dataSourceModel;
 
@@ -82,7 +82,7 @@ class AdvancedPricingTest extends \Magento\ImportExport\Test\Unit\Model\Import\A
     protected $localeDate;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -112,7 +112,7 @@ class AdvancedPricingTest extends \Magento\ImportExport\Test\Unit\Model\Import\A
     protected $advancedPricing;
 
     /**
-     * @var \Magento\Framework\Stdlib\String
+     * @var \Magento\Framework\Stdlib\StringUtils
      */
     protected $stringObject;
 
@@ -140,14 +140,14 @@ class AdvancedPricingTest extends \Magento\ImportExport\Test\Unit\Model\Import\A
             false
         );
         $this->resourceHelper = $this->getMock(
-            '\Magento\ImportExport\Model\Resource\Helper',
+            '\Magento\ImportExport\Model\ResourceModel\Helper',
             [],
             [],
             '',
             false
         );
         $this->resource = $this->getMock(
-            '\Magento\Framework\App\Resource',
+            '\Magento\Framework\App\ResourceConnection',
             ['getConnection'],
             [],
             '',
@@ -161,7 +161,7 @@ class AdvancedPricingTest extends \Magento\ImportExport\Test\Unit\Model\Import\A
         );
         $this->resource->expects($this->any())->method('getConnection')->willReturn($this->connection);
         $this->dataSourceModel = $this->getMock(
-            '\Magento\ImportExport\Model\Resource\Import\Data',
+            '\Magento\ImportExport\Model\ResourceModel\Import\Data',
             [],
             [],
             '',
@@ -184,7 +184,7 @@ class AdvancedPricingTest extends \Magento\ImportExport\Test\Unit\Model\Import\A
         $entityType->method('getEntityTypeId')->willReturn('');
         $this->eavConfig->method('getEntityType')->willReturn($entityType);
         $this->resourceFactory = $this->getMock(
-            '\Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceFactory',
+            '\Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModelFactory',
             ['create', 'getTable'],
             [],
             '',
diff --git a/app/code/Magento/Authorization/Model/Acl/AclRetriever.php b/app/code/Magento/Authorization/Model/Acl/AclRetriever.php
index b9ace2435556665553c45d6cadfe8c4b8c7afc6e..4668ee5aefcbb8250b74944c3fda8a3980cc4a0d 100644
--- a/app/code/Magento/Authorization/Model/Acl/AclRetriever.php
+++ b/app/code/Magento/Authorization/Model/Acl/AclRetriever.php
@@ -6,8 +6,8 @@
 
 namespace Magento\Authorization\Model\Acl;
 
-use Magento\Authorization\Model\Resource\Role\CollectionFactory as RoleCollectionFactory;
-use Magento\Authorization\Model\Resource\Rules\CollectionFactory as RulesCollectionFactory;
+use Magento\Authorization\Model\ResourceModel\Role\CollectionFactory as RoleCollectionFactory;
+use Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory as RulesCollectionFactory;
 use Magento\Authorization\Model\Role;
 use Magento\Authorization\Model\UserContextInterface;
 use Magento\Framework\Acl\Builder as AclBuilder;
diff --git a/app/code/Magento/Authorization/Model/Acl/Loader/Role.php b/app/code/Magento/Authorization/Model/Acl/Loader/Role.php
index 668120a4604f9d97f08d2f6f4a7c92c460e6cf14..d529cc5576810673f12c9c2ae0f51b3edf7ee308 100644
--- a/app/code/Magento/Authorization/Model/Acl/Loader/Role.php
+++ b/app/code/Magento/Authorization/Model/Acl/Loader/Role.php
@@ -7,12 +7,12 @@ namespace Magento\Authorization\Model\Acl\Loader;
 
 use Magento\Authorization\Model\Acl\Role\Group as RoleGroup;
 use Magento\Authorization\Model\Acl\Role\User as RoleUser;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class Role implements \Magento\Framework\Acl\LoaderInterface
 {
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
@@ -29,12 +29,12 @@ class Role implements \Magento\Framework\Acl\LoaderInterface
     /**
      * @param \Magento\Authorization\Model\Acl\Role\GroupFactory $groupFactory
      * @param \Magento\Authorization\Model\Acl\Role\UserFactory $roleFactory
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
     public function __construct(
         \Magento\Authorization\Model\Acl\Role\GroupFactory $groupFactory,
         \Magento\Authorization\Model\Acl\Role\UserFactory $roleFactory,
-        \Magento\Framework\App\Resource $resource
+        \Magento\Framework\App\ResourceConnection $resource
     ) {
         $this->_resource = $resource;
         $this->_groupFactory = $groupFactory;
diff --git a/app/code/Magento/Authorization/Model/Acl/Loader/Rule.php b/app/code/Magento/Authorization/Model/Acl/Loader/Rule.php
index 68e0c291a1292e802e1f334edaaab08a72eb1230..ded540b1aef94d80088be702e4c28d4c019bb23c 100644
--- a/app/code/Magento/Authorization/Model/Acl/Loader/Rule.php
+++ b/app/code/Magento/Authorization/Model/Acl/Loader/Rule.php
@@ -5,24 +5,24 @@
  */
 namespace Magento\Authorization\Model\Acl\Loader;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class Rule implements \Magento\Framework\Acl\LoaderInterface
 {
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
     /**
      * @param \Magento\Framework\Acl\RootResource $rootResource
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param array $data
      * @SuppressWarnings(PHPMD.UnusedFormalParameter):
      */
     public function __construct(
         \Magento\Framework\Acl\RootResource $rootResource,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         array $data = []
     ) {
         $this->_resource = $resource;
diff --git a/app/code/Magento/Authorization/Model/Resource/Permissions/Collection.php b/app/code/Magento/Authorization/Model/ResourceModel/Permissions/Collection.php
similarity index 65%
rename from app/code/Magento/Authorization/Model/Resource/Permissions/Collection.php
rename to app/code/Magento/Authorization/Model/ResourceModel/Permissions/Collection.php
index e01a78a66f88536b7187a7f3084728e01ab94604..604493daa0807b86ad976996dafb8a48e1013beb 100644
--- a/app/code/Magento/Authorization/Model/Resource/Permissions/Collection.php
+++ b/app/code/Magento/Authorization/Model/ResourceModel/Permissions/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Authorization\Model\Resource\Permissions;
+namespace Magento\Authorization\Model\ResourceModel\Permissions;
 
 /**
  * Admin permissions collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource
@@ -19,6 +19,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Authorization\Model\Rules', 'Magento\Authorization\Model\Resource\Rules');
+        $this->_init('Magento\Authorization\Model\Rules', 'Magento\Authorization\Model\ResourceModel\Rules');
     }
 }
diff --git a/app/code/Magento/Authorization/Model/Resource/Role.php b/app/code/Magento/Authorization/Model/ResourceModel/Role.php
similarity index 92%
rename from app/code/Magento/Authorization/Model/Resource/Role.php
rename to app/code/Magento/Authorization/Model/ResourceModel/Role.php
index f4b6a385ddd823b7600be5ac9a1a33f40ce644cd..5621e0c75392cb9930ee6803095049f49906d955 100644
--- a/app/code/Magento/Authorization/Model/Resource/Role.php
+++ b/app/code/Magento/Authorization/Model/ResourceModel/Role.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Authorization\Model\Resource;
+namespace Magento\Authorization\Model\ResourceModel;
 
 use Magento\Authorization\Model\Acl\Role\User as RoleUser;
 
 /**
  * Admin role resource model
  */
-class Role extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Role extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Rule table
@@ -32,13 +32,13 @@ class Role extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\App\CacheInterface $cache
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\App\CacheInterface $cache,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
@@ -111,6 +111,7 @@ class Role extends \Magento\Framework\Model\Resource\Db\AbstractDb
      *
      * @param \Magento\Framework\Model\AbstractModel $role
      * @return $this
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     protected function _afterSave(\Magento\Framework\Model\AbstractModel $role)
     {
diff --git a/app/code/Magento/Authorization/Model/Resource/Role/Collection.php b/app/code/Magento/Authorization/Model/ResourceModel/Role/Collection.php
similarity index 84%
rename from app/code/Magento/Authorization/Model/Resource/Role/Collection.php
rename to app/code/Magento/Authorization/Model/ResourceModel/Role/Collection.php
index f4c0328cd44f46e9e11c03a046aa46c332622c1f..f5f47176a85e5bc758ff45a70f17403eb584cdf4 100644
--- a/app/code/Magento/Authorization/Model/Resource/Role/Collection.php
+++ b/app/code/Magento/Authorization/Model/ResourceModel/Role/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Authorization\Model\Resource\Role;
+namespace Magento\Authorization\Model\ResourceModel\Role;
 
 use Magento\Authorization\Model\Acl\Role\Group as RoleGroup;
 
 /**
  * Admin role collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource model
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Authorization\Model\Role', 'Magento\Authorization\Model\Resource\Role');
+        $this->_init('Magento\Authorization\Model\Role', 'Magento\Authorization\Model\ResourceModel\Role');
     }
 
     /**
diff --git a/app/code/Magento/Authorization/Model/Resource/Role/Grid/Collection.php b/app/code/Magento/Authorization/Model/ResourceModel/Role/Grid/Collection.php
similarity index 75%
rename from app/code/Magento/Authorization/Model/Resource/Role/Grid/Collection.php
rename to app/code/Magento/Authorization/Model/ResourceModel/Role/Grid/Collection.php
index a8839129174681be2c90dd03825ed868b6ac13dd..688bc1cd852f1828e21be5343861246d46b27424 100644
--- a/app/code/Magento/Authorization/Model/Resource/Role/Grid/Collection.php
+++ b/app/code/Magento/Authorization/Model/ResourceModel/Role/Grid/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Authorization\Model\Resource\Role\Grid;
+namespace Magento\Authorization\Model\ResourceModel\Role\Grid;
 
 use Magento\Authorization\Model\Acl\Role\Group as RoleGroup;
 
 /**
  * Admin role data grid collection
  */
-class Collection extends \Magento\Authorization\Model\Resource\Role\Collection
+class Collection extends \Magento\Authorization\Model\ResourceModel\Role\Collection
 {
     /**
      * Prepare select for load
diff --git a/app/code/Magento/Authorization/Model/Resource/Rules.php b/app/code/Magento/Authorization/Model/ResourceModel/Rules.php
similarity index 91%
rename from app/code/Magento/Authorization/Model/Resource/Rules.php
rename to app/code/Magento/Authorization/Model/ResourceModel/Rules.php
index 509f04679677c0f5aa3ebd40a9680faeeb9f00c2..e888c6e4755d470a4c5fd92e7b004f4296c88dd5 100644
--- a/app/code/Magento/Authorization/Model/Resource/Rules.php
+++ b/app/code/Magento/Authorization/Model/ResourceModel/Rules.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Authorization\Model\Resource;
+namespace Magento\Authorization\Model\ResourceModel;
 
 /**
  * Admin rule resource model
  */
-class Rules extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Rules extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Root ACL resource
@@ -38,7 +38,7 @@ class Rules extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_logger;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Acl\Builder $aclBuilder
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Acl\RootResource $rootResource
@@ -46,7 +46,7 @@ class Rules extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Acl\Builder $aclBuilder,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Acl\RootResource $rootResource,
@@ -104,7 +104,7 @@ class Rules extends \Magento\Framework\Model\Resource\Db\AbstractDb
                     $connection->insert($this->getMainTable(), $insertData);
                 } else {
                     $acl = $this->_aclBuilder->getAcl();
-                    /** @var $resource \Magento\Framework\Acl\Resource */
+                    /** @var $resource \Magento\Framework\Acl\AclResource */
                     foreach ($acl->getResources() as $resourceId) {
                         $row['permission'] = in_array($resourceId, $postedResources) ? 'allow' : 'deny';
                         $row['resource_id'] = $resourceId;
diff --git a/app/code/Magento/Authorization/Model/Resource/Rules/Collection.php b/app/code/Magento/Authorization/Model/ResourceModel/Rules/Collection.php
similarity index 83%
rename from app/code/Magento/Authorization/Model/Resource/Rules/Collection.php
rename to app/code/Magento/Authorization/Model/ResourceModel/Rules/Collection.php
index fac0e0d1dd3b39050a059ebed12ee71d44443e88..6d8d56633658efcc97108c2293f86eee8eedb37c 100644
--- a/app/code/Magento/Authorization/Model/Resource/Rules/Collection.php
+++ b/app/code/Magento/Authorization/Model/ResourceModel/Rules/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Authorization\Model\Resource\Rules;
+namespace Magento\Authorization\Model\ResourceModel\Rules;
 
 /**
  * Rules collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource model
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Authorization\Model\Rules', 'Magento\Authorization\Model\Resource\Rules');
+        $this->_init('Magento\Authorization\Model\Rules', 'Magento\Authorization\Model\ResourceModel\Rules');
     }
 
     /**
diff --git a/app/code/Magento/Authorization/Model/Role.php b/app/code/Magento/Authorization/Model/Role.php
index edc72769b8797373fb65081b30e00f7e038ccb51..974cd64c5dbc850f71faf21072b5240bf3b287c1 100644
--- a/app/code/Magento/Authorization/Model/Role.php
+++ b/app/code/Magento/Authorization/Model/Role.php
@@ -8,8 +8,8 @@ namespace Magento\Authorization\Model;
 /**
  * Admin Role Model
  *
- * @method \Magento\Authorization\Model\Resource\Role _getResource()
- * @method \Magento\Authorization\Model\Resource\Role getResource()
+ * @method \Magento\Authorization\Model\ResourceModel\Role _getResource()
+ * @method \Magento\Authorization\Model\ResourceModel\Role getResource()
  * @method int getParentId()
  * @method \Magento\Authorization\Model\Role setParentId(int $value)
  * @method int getTreeLevel()
@@ -35,15 +35,15 @@ class Role extends \Magento\Framework\Model\AbstractModel
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Authorization\Model\Resource\Role $resource
-     * @param \Magento\Authorization\Model\Resource\Role\Collection $resourceCollection
+     * @param \Magento\Authorization\Model\ResourceModel\Role $resource
+     * @param \Magento\Authorization\Model\ResourceModel\Role\Collection $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Authorization\Model\Resource\Role $resource,
-        \Magento\Authorization\Model\Resource\Role\Collection $resourceCollection,
+        \Magento\Authorization\Model\ResourceModel\Role $resource,
+        \Magento\Authorization\Model\ResourceModel\Role\Collection $resourceCollection,
         array $data = []
     ) {
         parent::__construct($context, $registry, $resource, $resourceCollection, $data);
@@ -65,8 +65,8 @@ class Role extends \Magento\Framework\Model\AbstractModel
     {
         parent::__wakeup();
         $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
-        $this->_resource = $objectManager->get('Magento\Authorization\Model\Resource\Role');
-        $this->_resourceCollection = $objectManager->get('Magento\Authorization\Model\Resource\Role\Collection');
+        $this->_resource = $objectManager->get('Magento\Authorization\Model\ResourceModel\Role');
+        $this->_resourceCollection = $objectManager->get('Magento\Authorization\Model\ResourceModel\Role\Collection');
     }
 
     /**
@@ -76,7 +76,7 @@ class Role extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Authorization\Model\Resource\Role');
+        $this->_init('Magento\Authorization\Model\ResourceModel\Role');
     }
 
     /**
diff --git a/app/code/Magento/Authorization/Model/Rules.php b/app/code/Magento/Authorization/Model/Rules.php
index 1adb6a6797aa8400620130c4363aad89498bc04a..51a03c1b85aad39fd687853190484cbe32c2ac55 100644
--- a/app/code/Magento/Authorization/Model/Rules.php
+++ b/app/code/Magento/Authorization/Model/Rules.php
@@ -9,8 +9,8 @@ namespace Magento\Authorization\Model;
 /**
  * Admin Rules Model
  *
- * @method \Magento\Authorization\Model\Resource\Rules _getResource()
- * @method \Magento\Authorization\Model\Resource\Rules getResource()
+ * @method \Magento\Authorization\Model\ResourceModel\Rules _getResource()
+ * @method \Magento\Authorization\Model\ResourceModel\Rules getResource()
  * @method int getRoleId()
  * @method \Magento\Authorization\Model\Rules setRoleId(int $value)
  * @method string getResourceId()
@@ -29,15 +29,15 @@ class Rules extends \Magento\Framework\Model\AbstractModel
      *
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Authorization\Model\Resource\Rules $resource
-     * @param \Magento\Authorization\Model\Resource\Permissions\Collection $resourceCollection
+     * @param \Magento\Authorization\Model\ResourceModel\Rules $resource
+     * @param \Magento\Authorization\Model\ResourceModel\Permissions\Collection $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Authorization\Model\Resource\Rules $resource,
-        \Magento\Authorization\Model\Resource\Permissions\Collection $resourceCollection,
+        \Magento\Authorization\Model\ResourceModel\Rules $resource,
+        \Magento\Authorization\Model\ResourceModel\Permissions\Collection $resourceCollection,
         array $data = []
     ) {
         parent::__construct($context, $registry, $resource, $resourceCollection, $data);
@@ -50,7 +50,7 @@ class Rules extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Authorization\Model\Resource\Rules');
+        $this->_init('Magento\Authorization\Model\ResourceModel\Rules');
     }
 
     /**
diff --git a/app/code/Magento/Authorization/Setup/AuthorizationFactory.php b/app/code/Magento/Authorization/Setup/AuthorizationFactory.php
index ce290788d0ed4cbcb94f9102e2d645402679d1b3..c055a757a0101a72969cb9faea407fb99fb9c163 100644
--- a/app/code/Magento/Authorization/Setup/AuthorizationFactory.php
+++ b/app/code/Magento/Authorization/Setup/AuthorizationFactory.php
@@ -43,14 +43,14 @@ class AuthorizationFactory
     /**
      * Init
      *
-     * @param \Magento\Authorization\Model\Resource\Role\CollectionFactory $roleCollectionFactory
-     * @param \Magento\Authorization\Model\Resource\Rules\CollectionFactory $rulesCollectionFactory
+     * @param \Magento\Authorization\Model\ResourceModel\Role\CollectionFactory $roleCollectionFactory
+     * @param \Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory $rulesCollectionFactory
      * @param \Magento\Authorization\Model\RoleFactory $roleFactory
      * @param \Magento\Authorization\Model\RulesFactory $rulesFactory
      */
     public function __construct(
-        \Magento\Authorization\Model\Resource\Role\CollectionFactory $roleCollectionFactory,
-        \Magento\Authorization\Model\Resource\Rules\CollectionFactory $rulesCollectionFactory,
+        \Magento\Authorization\Model\ResourceModel\Role\CollectionFactory $roleCollectionFactory,
+        \Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory $rulesCollectionFactory,
         \Magento\Authorization\Model\RoleFactory $roleFactory,
         \Magento\Authorization\Model\RulesFactory $rulesFactory
     ) {
@@ -63,7 +63,7 @@ class AuthorizationFactory
     /**
      * Creates role collection
      *
-     * @return \Magento\Authorization\Model\Resource\Role\Collection
+     * @return \Magento\Authorization\Model\ResourceModel\Role\Collection
      */
     public function createRoleCollection()
     {
@@ -73,7 +73,7 @@ class AuthorizationFactory
     /**
      * Creates rules collection
      *
-     * @return \Magento\Authorization\Model\Resource\Rules\Collection
+     * @return \Magento\Authorization\Model\ResourceModel\Rules\Collection
      */
     public function createRulesCollection()
     {
diff --git a/app/code/Magento/Authorization/Test/Unit/Model/Acl/AclRetrieverTest.php b/app/code/Magento/Authorization/Test/Unit/Model/Acl/AclRetrieverTest.php
index 620c3bbee68bc7bc17aaec6c9b063ac8b71be520..3cd3506013cabcfc99fbf23f4ca744904b46f420 100644
--- a/app/code/Magento/Authorization/Test/Unit/Model/Acl/AclRetrieverTest.php
+++ b/app/code/Magento/Authorization/Test/Unit/Model/Acl/AclRetrieverTest.php
@@ -8,10 +8,10 @@ namespace Magento\Authorization\Test\Unit\Model\Acl;
 
 use \Magento\Authorization\Model\Acl\AclRetriever;
 
-use Magento\Authorization\Model\Resource\Role\Collection as RoleCollection;
-use Magento\Authorization\Model\Resource\Role\CollectionFactory as RoleCollectionFactory;
-use Magento\Authorization\Model\Resource\Rules\Collection as RulesCollection;
-use Magento\Authorization\Model\Resource\Rules\CollectionFactory as RulesCollectionFactory;
+use Magento\Authorization\Model\ResourceModel\Role\Collection as RoleCollection;
+use Magento\Authorization\Model\ResourceModel\Role\CollectionFactory as RoleCollectionFactory;
+use Magento\Authorization\Model\ResourceModel\Rules\Collection as RulesCollection;
+use Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory as RulesCollectionFactory;
 use Magento\Authorization\Model\Role;
 use Magento\Authorization\Model\UserContextInterface;
 
@@ -87,7 +87,7 @@ class AclRetrieverTest extends \PHPUnit_Framework_TestCase
 
         /** @var \PHPUnit_Framework_MockObject_MockObject|RoleCollection $roleCollectionMock */
         $roleCollectionMock = $this->getMock(
-            'Magento\Authorization\Model\Resource\Role\Collection',
+            'Magento\Authorization\Model\ResourceModel\Role\Collection',
             ['setUserFilter', 'getFirstItem'],
             [],
             '',
@@ -98,7 +98,7 @@ class AclRetrieverTest extends \PHPUnit_Framework_TestCase
 
         /** @var \PHPUnit_Framework_MockObject_MockObject|RoleCollectionFactory $roleCollectionFactoryMock */
         $roleCollectionFactoryMock = $this->getMock(
-            'Magento\Authorization\Model\Resource\Role\CollectionFactory',
+            'Magento\Authorization\Model\ResourceModel\Role\CollectionFactory',
             ['create'],
             [],
             '',
@@ -131,7 +131,7 @@ class AclRetrieverTest extends \PHPUnit_Framework_TestCase
 
         /** @var \PHPUnit_Framework_MockObject_MockObject|RulesCollection $rulesCollectionMock */
         $rulesCollectionMock = $this->getMock(
-            'Magento\Authorization\Model\Resource\Rules\Collection',
+            'Magento\Authorization\Model\ResourceModel\Rules\Collection',
             ['getByRoles', 'load', 'getItems'],
             [],
             '',
@@ -145,7 +145,7 @@ class AclRetrieverTest extends \PHPUnit_Framework_TestCase
 
         /** @var \PHPUnit_Framework_MockObject_MockObject|RulesCollectionFactory $rulesCollectionFactoryMock */
         $rulesCollectionFactoryMock = $this->getMock(
-            'Magento\Authorization\Model\Resource\Rules\CollectionFactory',
+            'Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Authorization/Test/Unit/Model/Acl/Loader/RoleTest.php b/app/code/Magento/Authorization/Test/Unit/Model/Acl/Loader/RoleTest.php
index aea0b8be857b1a2099d21ebf72366105048974c4..af029c46f756528995f3023c8bdad60d7f0a30af 100644
--- a/app/code/Magento/Authorization/Test/Unit/Model/Acl/Loader/RoleTest.php
+++ b/app/code/Magento/Authorization/Test/Unit/Model/Acl/Loader/RoleTest.php
@@ -34,7 +34,7 @@ class RoleTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false, false);
+        $this->_resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false, false);
         $this->_groupFactoryMock = $this->getMock(
             'Magento\Authorization\Model\Acl\Role\GroupFactory',
             ['create'],
diff --git a/app/code/Magento/Authorization/Test/Unit/Model/Acl/Loader/RuleTest.php b/app/code/Magento/Authorization/Test/Unit/Model/Acl/Loader/RuleTest.php
index c064cd6f116501d54412b7c288e9dbfd3f1b3f44..753441e1e555b94693aeb1d39c4a4774a218f55b 100644
--- a/app/code/Magento/Authorization/Test/Unit/Model/Acl/Loader/RuleTest.php
+++ b/app/code/Magento/Authorization/Test/Unit/Model/Acl/Loader/RuleTest.php
@@ -24,7 +24,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false, false);
+        $this->_resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false, false);
         $this->_rootResourceMock = new \Magento\Framework\Acl\RootResource('Magento_Backend::all');
         $this->_model = new \Magento\Authorization\Model\Acl\Loader\Rule(
             $this->_rootResourceMock,
diff --git a/app/code/Magento/Authorization/etc/di.xml b/app/code/Magento/Authorization/etc/di.xml
index 094b43dddcc7a089dcf3d976ce479638ecfdafde..ae80e09c28a5903b38dca6890d1720d9cad14365 100644
--- a/app/code/Magento/Authorization/etc/di.xml
+++ b/app/code/Magento/Authorization/etc/di.xml
@@ -7,7 +7,7 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <type name="Magento\Authorization\Model\Role" shared="false" />
-    <type name="Magento\Authorization\Model\Resource\Rules">
+    <type name="Magento\Authorization\Model\ResourceModel\Rules">
         <arguments>
             <argument name="rootResource" xsi:type="object">Magento\Framework\Acl\RootResource\Proxy</argument>
             <argument name="aclCache" xsi:type="object">Magento\Framework\Acl\Cache\Proxy</argument>
diff --git a/app/code/Magento/Authorizenet/Model/Authorizenet.php b/app/code/Magento/Authorizenet/Model/Authorizenet.php
index c97dd05be20ce82ba5abf7d610a4148bc28d9568..b35e4f4c39911df89d553ef98ad77eba768ccf3c 100644
--- a/app/code/Magento/Authorizenet/Model/Authorizenet.php
+++ b/app/code/Magento/Authorizenet/Model/Authorizenet.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Authorizenet\Model;
 
-use Magento\Payment\Model\Method\Logger;
+use Magento\Authorizenet\Model\TransactionService;
 
 /**
  * @SuppressWarnings(PHPMD.TooManyFields)
@@ -19,11 +19,6 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
      */
     const CGI_URL = 'https://secure.authorize.net/gateway/transact.dll';
 
-    /**
-     * Transaction Details gateway url
-     */
-    const CGI_URL_TD = 'https://apitest.authorize.net/xml/v1/request.api';
-
     const REQUEST_METHOD_CC = 'CC';
 
     const REQUEST_TYPE_AUTH_CAPTURE = 'AUTH_CAPTURE';
@@ -56,8 +51,6 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
 
     const RESPONSE_REASON_CODE_PENDING_REVIEW_DECLINED = 254;
 
-    const PAYMENT_UPDATE_STATUS_CODE_SUCCESS = 'Ok';
-
     /**
      * Transaction fraud state key
      */
@@ -93,22 +86,17 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
     protected $responseFactory;
 
     /**
-     * Stored information about transaction
-     *
-     * @var array
+     * @var \Magento\Authorizenet\Model\TransactionService;
      */
-    protected $transactionDetails = [];
+    protected $transactionService;
 
     /**
-     * {@inheritdoc}
+     * Fields that should be replaced in debug with '***'
+     *
+     * @var array
      */
     protected $_debugReplacePrivateDataKeys = ['merchantAuthentication', 'x_login'];
 
-    /**
-     * @var \Magento\Framework\Xml\Security
-     */
-    protected $xmlSecurityHelper;
-
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
@@ -122,8 +110,8 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
      * @param \Magento\Authorizenet\Helper\Data $dataHelper
      * @param \Magento\Authorizenet\Model\Request\Factory $requestFactory
      * @param \Magento\Authorizenet\Model\Response\Factory $responseFactory
-     * @param \Magento\Framework\Xml\Security $xmlSecurityHelper
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Authorizenet\Model\TransactionService $transactionService
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -141,15 +129,15 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
         \Magento\Authorizenet\Helper\Data $dataHelper,
         \Magento\Authorizenet\Model\Request\Factory $requestFactory,
         \Magento\Authorizenet\Model\Response\Factory $responseFactory,
-        \Magento\Framework\Xml\Security $xmlSecurityHelper,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        TransactionService $transactionService,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         $this->dataHelper = $dataHelper;
         $this->requestFactory = $requestFactory;
         $this->responseFactory = $responseFactory;
-        $this->xmlSecurityHelper = $xmlSecurityHelper;
+        $this->transactionService = $transactionService;
 
         parent::__construct(
             $context,
@@ -216,7 +204,7 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
      */
     public function fetchTransactionFraudDetails($transactionId)
     {
-        $responseXmlDocument = $this->getTransactionDetails($transactionId);
+        $responseXmlDocument = $this->transactionService->getTransactionDetails($this, $transactionId);
         $response = new \Magento\Framework\DataObject();
 
         if (empty($responseXmlDocument->transaction->FDSFilters->FDSFilter)) {
@@ -443,114 +431,4 @@ abstract class Authorizenet extends \Magento\Payment\Model\Method\Cc
     {
         return $payment->getAdditionalInformation(self::GATEWAY_ACTIONS_LOCKED_STATE_KEY);
     }
-
-    /**
-     * This function returns full transaction details for a specified transaction ID.
-     *
-     * @param string $transactionId
-     * @return \Magento\Framework\DataObject
-     * @throws \Magento\Framework\Exception\LocalizedException
-     * @link http://www.authorize.net/support/ReportingGuide_XML.pdf
-     * @link http://developer.authorize.net/api/transaction_details/
-     */
-    protected function getTransactionResponse($transactionId)
-    {
-        $responseXmlDocument = $this->getTransactionDetails($transactionId);
-
-        $response = new \Magento\Framework\DataObject();
-        $response->setXResponseCode((string)$responseXmlDocument->transaction->responseCode)
-            ->setXResponseReasonCode((string)$responseXmlDocument->transaction->responseReasonCode)
-            ->setTransactionStatus((string)$responseXmlDocument->transaction->transactionStatus);
-
-        return $response;
-    }
-
-    /**
-     * Load transaction details
-     *
-     * @param string $transactionId
-     * @return \Magento\Framework\Simplexml\Element
-     * @throws \Magento\Framework\Exception\LocalizedException
-     */
-    protected function loadTransactionDetails($transactionId)
-    {
-        $requestBody = sprintf(
-            '<?xml version="1.0" encoding="utf-8"?>' .
-            '<getTransactionDetailsRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">' .
-            '<merchantAuthentication><name>%s</name><transactionKey>%s</transactionKey></merchantAuthentication>' .
-            '<transId>%s</transId>' .
-            '</getTransactionDetailsRequest>',
-            $this->getConfigData('login'),
-            $this->getConfigData('trans_key'),
-            $transactionId
-        );
-
-        $client = new \Magento\Framework\HTTP\ZendClient();
-        $url = $this->getConfigData('cgi_url_td') ?: self::CGI_URL_TD;
-        $client->setUri($url);
-        $client->setConfig(['timeout' => 45]);
-        $client->setHeaders(['Content-Type: text/xml']);
-        $client->setMethod(\Zend_Http_Client::POST);
-        $client->setRawData($requestBody);
-
-        $debugData = ['url' => $url, 'request' => $this->removePrivateDataFromXml($requestBody)];
-
-        try {
-            $responseBody = $client->request()->getBody();
-            if (!$this->xmlSecurityHelper->scan($responseBody)) {
-                $this->_logger->critical('Attempt loading of external XML entities in response from Authorizenet.');
-                throw new \Exception();
-            }
-            $debugData['response'] = $responseBody;
-            libxml_use_internal_errors(true);
-            $responseXmlDocument = new \Magento\Framework\Simplexml\Element($responseBody);
-            libxml_use_internal_errors(false);
-        } catch (\Exception $e) {
-            throw new \Magento\Framework\Exception\LocalizedException(
-                __('Unable to get transaction details. Try again later.')
-            );
-        } finally {
-            $this->_debug($debugData);
-        }
-
-        if (!isset($responseXmlDocument->messages->resultCode)
-            || $responseXmlDocument->messages->resultCode != static::PAYMENT_UPDATE_STATUS_CODE_SUCCESS
-        ) {
-            throw new \Magento\Framework\Exception\LocalizedException(
-                __('Unable to get transaction details. Try again later.')
-            );
-        }
-
-        $this->transactionDetails[$transactionId] = $responseXmlDocument;
-        return $responseXmlDocument;
-    }
-
-    /**
-     * Get transaction information
-     *
-     * @param string $transactionId
-     * @return \Magento\Framework\Simplexml\Element
-     */
-    protected function getTransactionDetails($transactionId)
-    {
-        return isset($this->transactionDetails[$transactionId])
-            ? $this->transactionDetails[$transactionId]
-            : $this->loadTransactionDetails($transactionId);
-    }
-
-    /**
-     * Remove nodes with private data from XML string
-     *
-     * Uses values from $_debugReplacePrivateDataKeys property
-     *
-     * @param string $xml
-     * @return string
-     */
-    protected function removePrivateDataFromXml($xml)
-    {
-        foreach ($this->getDebugReplacePrivateDataKeys() as $key) {
-            $xml = preg_replace(sprintf('~(?<=<%s>).*?(?=</%s>)~', $key, $key), Logger::DEBUG_KEYS_MASK, $xml);
-        }
-        return $xml;
-    }
 }
diff --git a/app/code/Magento/Authorizenet/Model/Debug.php b/app/code/Magento/Authorizenet/Model/Debug.php
index 4cde70deb0fd684478c1e6b4c096ecbc405a54fb..d272e57509537c5970b7f551146cdf95c75c9441 100644
--- a/app/code/Magento/Authorizenet/Model/Debug.php
+++ b/app/code/Magento/Authorizenet/Model/Debug.php
@@ -6,8 +6,8 @@
 namespace Magento\Authorizenet\Model;
 
 /**
- * @method \Magento\Authorizenet\Model\Resource\Debug _getResource()
- * @method \Magento\Authorizenet\Model\Resource\Debug getResource()
+ * @method \Magento\Authorizenet\Model\ResourceModel\Debug _getResource()
+ * @method \Magento\Authorizenet\Model\ResourceModel\Debug getResource()
  * @method string getRequestBody()
  * @method \Magento\Authorizenet\Model\Debug setRequestBody(string $value)
  * @method string getResponseBody()
@@ -28,6 +28,6 @@ class Debug extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Authorizenet\Model\Resource\Debug');
+        $this->_init('Magento\Authorizenet\Model\ResourceModel\Debug');
     }
 }
diff --git a/app/code/Magento/Authorizenet/Model/Directpost.php b/app/code/Magento/Authorizenet/Model/Directpost.php
index fe98d75ecc06aed173d0ace27d475810b60ebb1d..bbfcd0f7d6e128fb7d0e5d0740223ef42282c469 100644
--- a/app/code/Magento/Authorizenet/Model/Directpost.php
+++ b/app/code/Magento/Authorizenet/Model/Directpost.php
@@ -5,6 +5,7 @@
  */
 namespace Magento\Authorizenet\Model;
 
+use Magento\Authorizenet\Model\TransactionService;
 use Magento\Payment\Model\Method\ConfigInterface;
 use Magento\Payment\Model\Method\TransparentInterface;
 use Magento\Sales\Model\Order\Email\Sender\OrderSender;
@@ -128,15 +129,15 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
      * @param \Magento\Framework\Module\ModuleListInterface $moduleList
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Authorizenet\Helper\Data $dataHelper
-     * @param \Magento\Authorizenet\Model\Directpost\Request\Factory $requestFactory
-     * @param \Magento\Authorizenet\Model\Directpost\Response\Factory $responseFactory
-     * @param \Magento\Framework\Xml\Security $xmlSecurityHelper
+     * @param Directpost\Request\Factory $requestFactory
+     * @param Directpost\Response\Factory $responseFactory
+     * @param \Magento\Authorizenet\Model\TransactionService $transactionService
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Quote\Model\QuoteRepository $quoteRepository
-     * @param \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender
+     * @param OrderSender $orderSender
      * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -154,13 +155,13 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
         \Magento\Authorizenet\Helper\Data $dataHelper,
         \Magento\Authorizenet\Model\Directpost\Request\Factory $requestFactory,
         \Magento\Authorizenet\Model\Directpost\Response\Factory $responseFactory,
-        \Magento\Framework\Xml\Security $xmlSecurityHelper,
+        TransactionService $transactionService,
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Quote\Model\QuoteRepository $quoteRepository,
         \Magento\Sales\Model\Order\Email\Sender\OrderSender $orderSender,
         \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -185,7 +186,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
             $dataHelper,
             $requestFactory,
             $responseFactory,
-            $xmlSecurityHelper,
+            $transactionService,
             $resource,
             $resourceCollection,
             $data
@@ -884,6 +885,8 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
         if ($response->getXResponseCode() == self::RESPONSE_CODE_APPROVED) {
             if ($response->getTransactionStatus() == 'voided') {
                 $payment->setIsTransactionDenied(true);
+                $payment->setIsTransactionClosed(true);
+                $transaction->close();
             } else {
                 $transaction->setAdditionalInformation(self::TRANSACTION_FRAUD_STATE_KEY, false);
                 $payment->setIsTransactionApproved(true);
@@ -892,7 +895,7 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
             $payment->setIsTransactionDenied(true);
         }
         $this->addStatusCommentOnUpdate($payment, $response, $transactionId);
-        return parent::fetchTransactionInfo($payment, $transactionId);
+        return [];
     }
 
     /**
@@ -947,4 +950,25 @@ class Directpost extends \Magento\Authorizenet\Model\Authorizenet implements Tra
     public function setPathPattern($pathPattern)
     {
     }
+
+    /**
+     * This function returns full transaction details for a specified transaction ID.
+     *
+     * @param string $transactionId
+     * @return \Magento\Framework\DataObject
+     * @throws \Magento\Framework\Exception\LocalizedException
+     * @link http://www.authorize.net/support/ReportingGuide_XML.pdf
+     * @link http://developer.authorize.net/api/transaction_details/
+     */
+    protected function getTransactionResponse($transactionId)
+    {
+        $responseXmlDocument = $this->transactionService->getTransactionDetails($this, $transactionId);
+
+        $response = new \Magento\Framework\DataObject();
+        $response->setXResponseCode((string)$responseXmlDocument->transaction->responseCode)
+            ->setXResponseReasonCode((string)$responseXmlDocument->transaction->responseReasonCode)
+            ->setTransactionStatus((string)$responseXmlDocument->transaction->transactionStatus);
+
+        return $response;
+    }
 }
diff --git a/app/code/Magento/Authorizenet/Model/Resource/Debug.php b/app/code/Magento/Authorizenet/Model/ResourceModel/Debug.php
similarity index 72%
rename from app/code/Magento/Authorizenet/Model/Resource/Debug.php
rename to app/code/Magento/Authorizenet/Model/ResourceModel/Debug.php
index db5ab62c9b8745565ad797167e19c3100a4ac639..e28ce1f6e6632ed3d68b6aab1844a6197762de49 100644
--- a/app/code/Magento/Authorizenet/Model/Resource/Debug.php
+++ b/app/code/Magento/Authorizenet/Model/ResourceModel/Debug.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Authorizenet\Model\Resource;
+namespace Magento\Authorizenet\Model\ResourceModel;
 
 /**
  * Resource Authorize.net debug model
  */
-class Debug extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Debug extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Authorizenet/Model/Resource/Debug/Collection.php b/app/code/Magento/Authorizenet/Model/ResourceModel/Debug/Collection.php
similarity index 63%
rename from app/code/Magento/Authorizenet/Model/Resource/Debug/Collection.php
rename to app/code/Magento/Authorizenet/Model/ResourceModel/Debug/Collection.php
index 39ea6789279f825e240b42645a441420774f28bf..472120a49eddc650915151ccec978c2beab5184a 100644
--- a/app/code/Magento/Authorizenet/Model/Resource/Debug/Collection.php
+++ b/app/code/Magento/Authorizenet/Model/ResourceModel/Debug/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Authorizenet\Model\Resource\Debug;
+namespace Magento\Authorizenet\Model\ResourceModel\Debug;
 
 /**
  * Resource Authorize.net debug collection model
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     {
         $this->_init(
             'Magento\Authorizenet\Model\Debug',
-            'Magento\Authorizenet\Model\Resource\Debug'
+            'Magento\Authorizenet\Model\ResourceModel\Debug'
         );
     }
 }
diff --git a/app/code/Magento/Authorizenet/Model/TransactionService.php b/app/code/Magento/Authorizenet/Model/TransactionService.php
new file mode 100644
index 0000000000000000000000000000000000000000..f15996974d24548093879d65a20ee73a8f968677
--- /dev/null
+++ b/app/code/Magento/Authorizenet/Model/TransactionService.php
@@ -0,0 +1,179 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Authorizenet\Model;
+
+use Magento\Framework\Exception\LocalizedException;
+use Magento\Framework\HTTP\ZendClientFactory;
+use Magento\Framework\Simplexml\Element;
+use Magento\Framework\Xml\Security;
+use Magento\Authorizenet\Model\Authorizenet;
+use Magento\Payment\Model\Method\Logger;
+
+/**
+ * Class TransactionService
+ * @package Magento\Authorizenet\Model
+ */
+class TransactionService
+{
+    /**
+     * Transaction Details gateway url
+     */
+    const CGI_URL_TD = 'https://apitest.authorize.net/xml/v1/request.api';
+
+    const PAYMENT_UPDATE_STATUS_CODE_SUCCESS = 'Ok';
+
+    const CONNECTION_TIMEOUT = 45;
+
+    /**
+     * Stored information about transaction
+     *
+     * @var array
+     */
+    protected $transactionDetails = [];
+
+    /**
+     * @var \Magento\Framework\Xml\Security
+     */
+    protected $xmlSecurityHelper;
+
+    /**
+     * @var \Magento\Payment\Model\Method\Logger
+     */
+    protected $logger;
+
+    /**
+     * @var \Magento\Framework\HTTP\ZendClientFactory
+     */
+    protected $httpClientFactory;
+
+    /**
+     * Fields that should be replaced in debug with '***'
+     *
+     * @var array
+     */
+    protected $debugReplacePrivateDataKeys = ['merchantAuthentication', 'x_login'];
+
+    /**
+     * @param Security $xmlSecurityHelper
+     * @param Logger $logger
+     * @param ZendClientFactory $httpClientFactory
+     */
+    public function __construct(
+        Security $xmlSecurityHelper,
+        Logger $logger,
+        ZendClientFactory $httpClientFactory
+    ) {
+        $this->xmlSecurityHelper = $xmlSecurityHelper;
+        $this->logger = $logger;
+        $this->httpClientFactory = $httpClientFactory;
+    }
+
+    /**
+     * Get transaction information
+     * @param \Magento\Authorizenet\Model\Authorizenet $context
+     * @param string $transactionId
+     * @return \Magento\Framework\Simplexml\Element
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function getTransactionDetails(Authorizenet $context, $transactionId)
+    {
+        return isset($this->transactionDetails[$transactionId])
+            ? $this->transactionDetails[$transactionId]
+            : $this->loadTransactionDetails($context, $transactionId);
+    }
+
+    /**
+     * Load transaction details
+     *
+     * @param \Magento\Authorizenet\Model\Authorizenet $context
+     * @param string $transactionId
+     * @return \Magento\Framework\Simplexml\Element
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    protected function loadTransactionDetails(Authorizenet $context, $transactionId)
+    {
+
+        $requestBody = $this->getRequestBody(
+            $context->getConfigData('login'),
+            $context->getConfigData('trans_key'),
+            $transactionId
+        );
+
+        /** @var \Magento\Framework\HTTP\ZendClient $client */
+        $client = $this->httpClientFactory->create();
+        $url = $context->getConfigData('cgi_url_td') ?: self::CGI_URL_TD;
+        $client->setUri($url);
+        $client->setConfig(['timeout' => self::CONNECTION_TIMEOUT]);
+        $client->setHeaders(['Content-Type: text/xml']);
+        $client->setMethod(\Zend_Http_Client::POST);
+        $client->setRawData($requestBody);
+
+        $debugData = ['url' => $url, 'request' => $this->removePrivateDataFromXml($requestBody)];
+
+        try {
+            $responseBody = $client->request()->getBody();
+            if (!$this->xmlSecurityHelper->scan($responseBody)) {
+                $this->logger->critical('Attempt loading of external XML entities in response from Authorizenet.');
+                throw new \Exception();
+            }
+            $debugData['response'] = $responseBody;
+            libxml_use_internal_errors(true);
+            $responseXmlDocument = new Element($responseBody);
+            libxml_use_internal_errors(false);
+        } catch (\Exception $e) {
+            throw new LocalizedException(__('Unable to get transaction details. Try again later.'));
+        } finally {
+            $context->debugData($debugData);
+        }
+
+        if (!isset($responseXmlDocument->messages->resultCode)
+            || $responseXmlDocument->messages->resultCode != static::PAYMENT_UPDATE_STATUS_CODE_SUCCESS
+        ) {
+            throw new LocalizedException(__('Unable to get transaction details. Try again later.'));
+        }
+
+        $this->transactionDetails[$transactionId] = $responseXmlDocument;
+        return $responseXmlDocument;
+    }
+
+    /**
+     * Create request body to get transaction details
+     * @param string $login
+     * @param string $transactionKey
+     * @param string $transactionId
+     * @return string
+     */
+    private function getRequestBody($login, $transactionKey, $transactionId)
+    {
+        $requestBody = sprintf(
+            '<?xml version="1.0" encoding="utf-8"?>' .
+            '<getTransactionDetailsRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">' .
+            '<merchantAuthentication><name>%s</name><transactionKey>%s</transactionKey></merchantAuthentication>' .
+            '<transId>%s</transId>' .
+            '</getTransactionDetailsRequest>',
+            $login,
+            $transactionKey,
+            $transactionId
+        );
+        return $requestBody;
+    }
+
+    /**
+     * Remove nodes with private data from XML string
+     *
+     * Uses values from $_debugReplacePrivateDataKeys property
+     *
+     * @param string $xml
+     * @return string
+     */
+    private function removePrivateDataFromXml($xml)
+    {
+        foreach ($this->debugReplacePrivateDataKeys as $key) {
+            $xml = preg_replace(sprintf('~(?<=<%s>).*?(?=</%s>)~', $key, $key), Logger::DEBUG_KEYS_MASK, $xml);
+        }
+        return $xml;
+    }
+}
diff --git a/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php b/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php
index edfade031c792728831eaff0d4024a885d04fcbb..3247ed2cb9329f86e0efda4e07aeae938515f05b 100644
--- a/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php
+++ b/app/code/Magento/Authorizenet/Test/Unit/Model/DirectpostTest.php
@@ -5,8 +5,11 @@
  */
 namespace Magento\Authorizenet\Test\Unit\Model;
 
+use Magento\Framework\Simplexml\Element;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 use Magento\Authorizenet\Model\Directpost;
+use Magento\Authorizenet\Model\TransactionService;
+use Magento\Sales\Model\Order\Payment\Transaction\Repository as TransactionRepository;
 
 /**
  * Class DirectpostTest
@@ -38,45 +41,59 @@ class DirectpostTest extends \PHPUnit_Framework_TestCase
      */
     protected $responseFactoryMock;
 
+    /**
+     * @var TransactionRepository|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $transactionRepositoryMock;
+
     /**
      * @var \Magento\Authorizenet\Model\Directpost\Response|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $responseMock;
 
+    /**
+     * @var TransactionService|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $transactionServiceMock;
+
     protected function setUp()
     {
         $this->scopeConfigMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
             ->getMock();
-        $this->paymentMock = $this->getMockBuilder('Magento\Payment\Model\InfoInterface')
+        $this->paymentMock = $this->getMockBuilder('Magento\Sales\Model\Order\Payment')
+            ->disableOriginalConstructor()
+            ->setMethods([
+                'getOrder', 'getId', 'setAdditionalInformation', 'getAdditionalInformation',
+                'setIsTransactionDenied', 'setIsTransactionClosed'
+            ])
             ->getMock();
         $this->dataHelperMock = $this->getMockBuilder('Magento\Authorizenet\Helper\Data')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->responseFactoryMock = $this->getMockBuilder('Magento\Authorizenet\Model\Directpost\Response\Factory')
+
+        $this->initResponseFactoryMock();
+
+        $this->transactionRepositoryMock = $this->getMockBuilder(
+            'Magento\Sales\Model\Order\Payment\Transaction\Repository'
+        )
             ->disableOriginalConstructor()
+            ->setMethods(['getByTransactionId'])
             ->getMock();
-        $this->responseMock = $this->getMockBuilder('Magento\Authorizenet\Model\Directpost\Response')
-            ->setMethods(
-                [
-                    'setData', 'isValidHash', 'getXTransId',
-                    'getXResponseCode', 'getXResponseReasonText',
-                    'getXAmount'
-                ]
-            )
+
+        $this->transactionServiceMock = $this->getMockBuilder('Magento\Authorizenet\Model\TransactionService')
             ->disableOriginalConstructor()
+            ->setMethods(['getTransactionDetails'])
             ->getMock();
 
-        $this->responseFactoryMock->expects($this->any())
-            ->method('create')
-            ->willReturn($this->responseMock);
-
         $helper = new ObjectManagerHelper($this);
         $this->directpost = $helper->getObject(
             'Magento\Authorizenet\Model\Directpost',
             [
                 'scopeConfig' => $this->scopeConfigMock,
                 'dataHelper' => $this->dataHelperMock,
-                'responseFactory' => $this->responseFactoryMock
+                'responseFactory' => $this->responseFactoryMock,
+                'transactionRepository' => $this->transactionRepositoryMock,
+                'transactionService' => $this->transactionServiceMock
             ]
         );
     }
@@ -357,4 +374,160 @@ class DirectpostTest extends \PHPUnit_Framework_TestCase
             ['isGatewayActionsLocked' => true, 'canCapture' => false]
         ];
     }
+
+    /**
+     * @covers \Magento\Authorizenet\Model\Directpost::fetchTransactionInfo
+     *
+     * @param $transactionId
+     * @param $resultStatus
+     * @param $responseStatus
+     * @param $responseCode
+     * @return void
+     *
+     * @dataProvider dataProviderTransaction
+     */
+    public function testFetchVoidedTransactionInfo($transactionId, $resultStatus, $responseStatus, $responseCode)
+    {
+        $paymentId = 36;
+        $orderId = 36;
+
+        $this->paymentMock->expects(static::once())
+            ->method('getId')
+            ->willReturn($paymentId);
+
+        $orderMock = $this->getMockBuilder('Magento\Sales\Model\Order')
+            ->disableOriginalConstructor()
+            ->setMethods(['getId', '__wakeup'])
+            ->getMock();
+        $orderMock->expects(static::once())
+            ->method('getId')
+            ->willReturn($orderId);
+
+        $this->paymentMock->expects(static::once())
+            ->method('getOrder')
+            ->willReturn($orderMock);
+
+        $transactionMock = $this->getMockBuilder('Magento\Sales\Model\Order\Payment\Transaction')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->transactionRepositoryMock->expects(static::once())
+            ->method('getByTransactionId')
+            ->with($transactionId, $paymentId, $orderId)
+            ->willReturn($transactionMock);
+
+        $document = $this->getTransactionXmlDocument(
+            $transactionId,
+            TransactionService::PAYMENT_UPDATE_STATUS_CODE_SUCCESS,
+            $resultStatus,
+            $responseStatus,
+            $responseCode
+        );
+        $this->transactionServiceMock->expects(static::once())
+            ->method('getTransactionDetails')
+            ->with($this->directpost, $transactionId)
+            ->willReturn($document);
+
+        // transaction should be closed
+        $this->paymentMock->expects(static::once())
+            ->method('setIsTransactionDenied')
+            ->with(true);
+        $this->paymentMock->expects(static::once())
+            ->method('setIsTransactionClosed')
+            ->with(true);
+        $transactionMock->expects(static::once())
+            ->method('close');
+
+        $this->directpost->fetchTransactionInfo($this->paymentMock, $transactionId);
+    }
+
+    /**
+     * Get data for tests
+     * @return array
+     */
+    public function dataProviderTransaction()
+    {
+        return [
+            [
+                'transactionId' => '9941997799',
+                'resultStatus' => 'Successful.',
+                'responseStatus' => 'voided',
+                'responseCode' => 1
+            ]
+        ];
+    }
+
+    /**
+     * Create mock for response factory
+     * @return void
+     */
+    private function initResponseFactoryMock()
+    {
+        $this->responseFactoryMock = $this->getMockBuilder('Magento\Authorizenet\Model\Directpost\Response\Factory')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->responseMock = $this->getMockBuilder('Magento\Authorizenet\Model\Directpost\Response')
+            ->setMethods(
+                [
+                    'setData', 'isValidHash', 'getXTransId',
+                    'getXResponseCode', 'getXResponseReasonText',
+                    'getXAmount'
+                ]
+            )
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->responseFactoryMock->expects($this->any())
+            ->method('create')
+            ->willReturn($this->responseMock);
+    }
+
+    /**
+     * Get transaction data
+     * @param $transactionId
+     * @param $resultCode
+     * @param $resultStatus
+     * @param $responseStatus
+     * @param $responseCode
+     * @return Element
+     */
+    private function getTransactionXmlDocument(
+        $transactionId,
+        $resultCode,
+        $resultStatus,
+        $responseStatus,
+        $responseCode
+    ) {
+        $body = sprintf(
+            '<?xml version="1.0" encoding="utf-8"?>
+            <getTransactionDetailsResponse
+                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+                    xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
+                <messages>
+                    <resultCode>%s</resultCode>
+                    <message>
+                        <code>I00001</code>
+                        <text>%s</text>
+                    </message>
+                </messages>
+                <transaction>
+                    <transId>%s</transId>
+                    <transactionType>authOnlyTransaction</transactionType>
+                    <transactionStatus>%s</transactionStatus>
+                    <responseCode>%s</responseCode>
+                    <responseReasonCode>%s</responseReasonCode>
+                </transaction>
+            </getTransactionDetailsResponse>',
+            $resultCode,
+            $resultStatus,
+            $transactionId,
+            $responseStatus,
+            $responseCode,
+            $responseCode
+        );
+        libxml_use_internal_errors(true);
+        $document = new Element($body);
+        libxml_use_internal_errors(false);
+        return $document;
+    }
 }
diff --git a/app/code/Magento/Authorizenet/Test/Unit/Model/TransactionServiceTest.php b/app/code/Magento/Authorizenet/Test/Unit/Model/TransactionServiceTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..9b4646a0a7976c98d5a5565b0e4f49c87042d4e9
--- /dev/null
+++ b/app/code/Magento/Authorizenet/Test/Unit/Model/TransactionServiceTest.php
@@ -0,0 +1,164 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Authorizenet\Test\Unit\Model;
+
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Framework\Simplexml\Element;
+use Magento\Authorizenet\Model\TransactionService;
+
+class TransactionServiceTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Framework\HTTP\ZendClient|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $httpClientMock;
+
+    /**
+     * @var \Magento\Authorizenet\Model\Authorizenet|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $authorizenetMock;
+
+    /**
+     * @var \Magento\Authorizenet\Model\TransactionService
+     */
+    protected $transactionService;
+
+    protected function setUp()
+    {
+        $httpClientFactoryMock = $this->getHttpClientFactoryMock();
+
+        $this->authorizenetMock = $this->getMockBuilder('Magento\Authorizenet\Model\Directpost')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->authorizenetMock->method('getConfigData')
+            ->willReturnMap([
+                ['login', 'test login'],
+                ['trans_key', 'test key'],
+                ['cgi_url_td', 'https://apitest.authorize.net/xml/v1/request.api']
+            ]);
+
+        $objectManagerHelper = new ObjectManager($this);
+        $xmlSecurity = $objectManagerHelper->getObject('Magento\Framework\Xml\Security');
+        $this->transactionService = $objectManagerHelper->getObject('\Magento\Authorizenet\Model\TransactionService', [
+            'xmlSecurityHelper' => $xmlSecurity,
+            'httpClientFactory' => $httpClientFactoryMock
+        ]);
+    }
+
+    /**
+     * @covers \Magento\Authorizenet\Model\TransactionService::loadTransactionDetails
+     * @param $transactionId
+     * @param $resultStatus
+     * @param $responseStatus
+     * @param $responseCode
+     * @return void
+     *
+     * @dataProvider dataProviderTransaction
+     */
+    public function testLoadVoidedTransactionDetails($transactionId, $resultStatus, $responseStatus, $responseCode)
+    {
+        $document = $this->getResponseBody(
+            $transactionId,
+            TransactionService::PAYMENT_UPDATE_STATUS_CODE_SUCCESS,
+            $resultStatus,
+            $responseStatus,
+            $responseCode
+        );
+        $this->httpClientMock->expects(static::once())
+            ->method('getBody')
+            ->willReturn($document);
+
+        $result = $this->transactionService->getTransactionDetails($this->authorizenetMock, $transactionId);
+
+        static::assertEquals($responseCode, (string)$result->transaction->responseCode);
+        static::assertEquals($responseCode, (string)$result->transaction->responseReasonCode);
+        static::assertEquals($responseStatus, (string)$result->transaction->transactionStatus);
+    }
+
+    /**
+     * Get data for tests
+     * @return array
+     */
+    public function dataProviderTransaction()
+    {
+        return [
+            [
+                'transactionId' => '9941997799',
+                'resultStatus' => 'Successful.',
+                'responseStatus' => 'voided',
+                'responseCode' => 1
+            ]
+        ];
+    }
+
+    /**
+     * Create and return mock for http client factory
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    private function getHttpClientFactoryMock()
+    {
+        $this->httpClientMock = $this->getMockBuilder('Magento\Framework\HTTP\ZendClient')
+            ->disableOriginalConstructor()
+            ->setMethods(['request', 'getBody', '__wakeup'])
+            ->getMock();
+
+        $this->httpClientMock->expects(static::once())
+            ->method('request')
+            ->willReturnSelf();
+
+        $httpClientFactoryMock = $this->getMockBuilder('Magento\Framework\HTTP\ZendClientFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $httpClientFactoryMock->expects(static::once())
+            ->method('create')
+            ->willReturn($this->httpClientMock);
+        return $httpClientFactoryMock;
+    }
+
+    /**
+     * Get body for xml request
+     * @param string $transactionId
+     * @param int $resultCode
+     * @param string $resultStatus
+     * @param string $responseStatus
+     * @param string $responseCode
+     * @return string
+     */
+    private function getResponseBody($transactionId, $resultCode, $resultStatus, $responseStatus, $responseCode)
+    {
+        return sprintf(
+            '<?xml version="1.0" encoding="utf-8"?>
+            <getTransactionDetailsResponse
+                    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+                    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+                    xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
+                <messages>
+                    <resultCode>%s</resultCode>
+                    <message>
+                        <code>I00001</code>
+                        <text>%s</text>
+                    </message>
+                </messages>
+                <transaction>
+                    <transId>%s</transId>
+                    <transactionType>authOnlyTransaction</transactionType>
+                    <transactionStatus>%s</transactionStatus>
+                    <responseCode>%s</responseCode>
+                    <responseReasonCode>%s</responseReasonCode>
+                </transaction>
+            </getTransactionDetailsResponse>',
+            $resultCode,
+            $resultStatus,
+            $transactionId,
+            $responseStatus,
+            $responseCode,
+            $responseCode
+        );
+    }
+}
diff --git a/app/code/Magento/Authorizenet/etc/adminhtml/events.xml b/app/code/Magento/Authorizenet/etc/adminhtml/events.xml
index 6af0e3cc979df6ea8ec77e6dda85a9fb8670ae97..002e06922e3993f69569134ea7059c1c4890c1d8 100644
--- a/app/code/Magento/Authorizenet/etc/adminhtml/events.xml
+++ b/app/code/Magento/Authorizenet/etc/adminhtml/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="checkout_submit_all_after">
-        <observer name="directpost_update_all_edit_increments" instance="Magento\Authorizenet\Observer\UpdateAllEditIncrementsObserver" method="execute" />
+        <observer name="directpost_update_all_edit_increments" instance="Magento\Authorizenet\Observer\UpdateAllEditIncrementsObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Authorizenet/etc/frontend/events.xml b/app/code/Magento/Authorizenet/etc/frontend/events.xml
index 6bdc45a80e3892f856fa6278ff750f4ebbbf50ed..16c05e8cba914b5cd49a27bee4e609717cd75eff 100644
--- a/app/code/Magento/Authorizenet/etc/frontend/events.xml
+++ b/app/code/Magento/Authorizenet/etc/frontend/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="checkout_submit_all_after">
-        <observer name="directpost_save_order_after_submit" instance="Magento\Authorizenet\Observer\SaveOrderAfterSubmitObserver" method="execute" />
+        <observer name="directpost_save_order_after_submit" instance="Magento\Authorizenet\Observer\SaveOrderAfterSubmitObserver" />
     </event>
     <event name="checkout_directpost_placeOrder">
-        <observer name="directpost_save_order_onepage" instance="Magento\Authorizenet\Observer\AddFieldsToResponseObserver" method="execute" />
+        <observer name="directpost_save_order_onepage" instance="Magento\Authorizenet\Observer\AddFieldsToResponseObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Authorizenet/etc/frontend/sections.xml b/app/code/Magento/Authorizenet/etc/frontend/sections.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a4e4391b809f2f1631ea1445905e5847f2f318ff
--- /dev/null
+++ b/app/code/Magento/Authorizenet/etc/frontend/sections.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Customer:etc/sections.xsd">
+    <action name="authorizenet/directpost_payment/place">
+        <section name="cart"/>
+        <section name="checkout-data"/>
+    </action>
+</config>
diff --git a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/iframe.phtml b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/iframe.phtml
index 2712012849971486502a773f7b3c6e8dac9946e0..4d6cec725460eadf130614102162c00a5642f86d 100644
--- a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/iframe.phtml
+++ b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/iframe.phtml
@@ -16,15 +16,15 @@ $helper = $block->getHelper('adminhtml');
     <head>
         <script>
         <?php if (isset($params['redirect'])): ?>
-            window.location="<?php echo $block->escapeUrl($params['redirect']) ?>";
+            window.location="<?php echo $block->escapeUrl($params['redirect']); ?>";
         <?php endif; ?>
         <?php if (isset($params['redirect_parent'])): ?>
-            window.top.location="<?php echo $block->escapeUrl($params['redirect_parent']) ?>";
+            window.top.location="<?php echo $block->escapeUrl($params['redirect_parent']); ?>";
         <?php endif; ?>
         <?php if (isset($params['error_msg'])): ?>
-            window.top.directPostModel.showError(<?php /* @escapeNotVerified */ echo json_encode((array)$params['error_msg']) ?>);
+            window.top.directPostModel.showError(<?php /* @noEscape */ echo json_encode((array)$params['error_msg']); ?>);
             <?php if (isset($params['x_invoice_num'])): ?>
-                window.top.directPostModel.successUrl="<?php /* @escapeNotVerified */ echo $helper->getSuccessOrderUrl($params) ?>";
+                window.top.directPostModel.successUrl="<?php echo $block->escapeUrl($helper->getSuccessOrderUrl($params)); ?>";
             <?php endif; ?>
         <?php endif; ?>
         </script>
diff --git a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml
index adff03b5365c2be28e4a113d6e15dc815968c4d6..6c02076b5a7dbe55d9a81b7114599221c6c9f14e 100644
--- a/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml
+++ b/app/code/Magento/Authorizenet/view/adminhtml/templates/directpost/info.phtml
@@ -5,84 +5,98 @@
  */
 
 // @codingStandardsIgnoreFile
-
 /**
- * @see \Magento\Authorizenet\Block\Directpost\Form
+ * @var \Magento\Authorizenet\Block\Transparent\Iframe $block
+ * @see \Magento\Authorizenet\Block\Transparent\Iframe
  */
-?>
-<?php
-$_form = $block;
-$_code = $_form->getMethodCode();
-$_method = $_form->getMethod();
-$_controller = $block->getRequest()->getControllerName();
-$_orderUrl = $this->helper('Magento\Authorizenet\Helper\Backend\Data')->getPlaceOrderAdminUrl();
+$code = $block->getMethodCode();
+$method = $block->getMethod();
+$controller = $block->escapeHtml($block->getRequest()->getControllerName());
+$orderUrl = $block->escapeUrl($this->helper('Magento\Authorizenet\Helper\Backend\Data')->getPlaceOrderAdminUrl());
+$ccType = $block->getInfoData('cc_type');
+$ccExpMonth = $block->getInfoData('cc_exp_month');
+$ccExpYear = $block->getInfoData('cc_exp_year');
 ?>
 <!-- IFRAME for request to our server -->
-<iframe id="order-directpost-iframe" allowtransparency="true" frameborder="0" name="iframeSubmitOrder" style="display:none;width:100%;background-color:transparent" src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('blank.html') ?>"></iframe>
+<iframe id="order-directpost-iframe" allowtransparency="true" frameborder="0" name="iframeSubmitOrder"
+        style="display:none;width:100%;background-color:transparent"
+        src="<?php /* @noEscape */ echo $block->getViewFileUrl('blank.html'); ?>">
+</iframe>
 <!-- IFRAME for request to Authorize.net -->
-<iframe id="directpost-iframe" allowtransparency="true" frameborder="0"  name="iframeDirectPost" style="display:none;width:100%;background-color:transparent" src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('blank.html') ?>"></iframe>
-<fieldset class="admin__fieldset payment-method" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none;">
+<iframe id="directpost-iframe" allowtransparency="true" frameborder="0"  name="iframeDirectPost"
+        style="display:none;width:100%;background-color:transparent"
+        src="<?php /* @noEscape */ echo $block->getViewFileUrl('blank.html'); ?>">
+</iframe>
+<fieldset class="admin__fieldset payment-method" id="payment_form_<?php /* @noEscape */ echo $code; ?>"
+          style="display:none;">
     <div class="admin__field _required">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"
-               class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span></label>
+        <label for="<?php /* @noEscape */ echo $code; ?>_cc_type" class="admin__field-label">
+            <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span>
+        </label>
         <div class="admin__field-control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"
-                    name="payment[cc_type]"
+            <select id="<?php /* @noEscape */ echo $code; ?>_cc_type" name="payment[cc_type]"
                     class="required-entry validate-cc-type-select admin__control-select">
-                <?php $_ccType = $_form->getInfoData('cc_type') ?>
                 <option value=""></option>
-                <?php foreach ($_form->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
-                    <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"
-                            <?php if ($_typeCode == $_ccType): ?>selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option>
-                <?php endforeach ?>
+                <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?>
+                    <option value="<?php echo $block->escapeHtml($typeCode); ?>"
+                            <?php if ($typeCode == $ccType): ?>selected="selected"<?php endif; ?>>
+                        <?php echo $block->escapeHtml($typeName); ?>
+                    </option>
+                <?php endforeach; ?>
             </select>
         </div>
     </div>
     <div class="admin__field _required">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number"
-               class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span></label>
+        <label for="<?php /* @noEscape */ echo $code; ?>_cc_number" class="admin__field-label">
+            <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span>
+        </label>
 
         <div class="admin__field-control">
-            <input type="text" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number"
+            <input type="text" id="<?php /* @noEscape */ echo $code; ?>_cc_number"
                    name="payment[cc_number]"
                    class="input-text required-entry validate-cc-number admin__control-text"
-                   value="<?php /* @escapeNotVerified */ echo $block->getInfoData('cc_number') ?>"/>
+                   value="<?php /* @noEscape */ echo $block->getInfoData('cc_number'); ?>"/>
         </div>
     </div>
     <div class="admin__field _required">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_expiration"
-               class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span></label>
+        <label for="<?php /* @noEscape */ echo $code; ?>_expiration" class="admin__field-label">
+            <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span>
+        </label>
 
         <div class="admin__field-control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration"
+            <select id="<?php /* @noEscape */ echo $code; ?>_expiration"
                     name="payment[cc_exp_month]"
                     class="validate-cc-exp required-entry admin__control-select admin__control-select-month">
-                <?php $_ccExpMonth = $_form->getInfoData('cc_exp_month') ?>
-                <?php foreach ($_form->getCcMonths() as $k => $v): ?>
-                    <option value="<?php /* @escapeNotVerified */ echo $k ?>"
-                            <?php if ($k == $_ccExpMonth): ?>selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-                <?php endforeach ?>
+                <?php foreach ($block->getCcMonths() as $k => $v): ?>
+                    <option value="<?php echo $block->escapeHtml($k); ?>"
+                            <?php if ($k == $ccExpMonth): ?>selected="selected"<?php endif; ?>>
+                        <?php echo $block->escapeHtml($v); ?>
+                    </option>
+                <?php endforeach; ?>
             </select>
-            <?php $_ccExpYear = $_form->getInfoData('cc_exp_year') ?>
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr"
+            <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr"
                     name="payment[cc_exp_year]"
                     class="required-entry admin__control-select admin__control-select-year">
-                <?php foreach ($_form->getCcYears() as $k => $v): ?>
-                    <option value="<?php /* @escapeNotVerified */ echo $k ? $k : '' ?>"
-                            <?php if ($k == $_ccExpYear): ?>selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-                <?php endforeach ?>
+                <?php foreach ($block->getCcYears() as $k => $v): ?>
+                    <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>"
+                            <?php if ($k == $ccExpYear): ?>selected="selected"<?php endif; ?>>
+                        <?php echo $block->escapeHtml($v); ?>
+                    </option>
+                <?php endforeach; ?>
             </select>
         </div>
     </div>
-    <?php if ($_form->hasVerification()): ?>
+    <?php if ($block->hasVerification()): ?>
     <div class="admin__field _required">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid"><span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span></label>
+        <label for="<?php /* @noEscape */ echo $code; ?>_cc_cid">
+            <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span>
+        </label>
 
         <div class="admin__field-control">
             <input type="text"
                    class="required-entry input-text validate-cc-cvn admin__control-text"
-                   id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" name="payment[cc_cid]"
-                   value="<?php /* @escapeNotVerified */ echo $block->getInfoData('cc_cid') ?>"/>
+                   id="<?php /* @noEscape */ echo $code; ?>_cc_cid" name="payment[cc_cid]"
+                   value="<?php /* @noEscape */ echo $block->getInfoData('cc_cid') ?>"/>
         </div>
     </div>
     <?php endif; ?>
@@ -98,19 +112,21 @@ $_orderUrl = $this->helper('Magento\Authorizenet\Helper\Backend\Data')->getPlace
         /**
          * Disable card server validation in admin
          */
-        order.addExcludedPaymentMethod('<?php /* @escapeNotVerified */ echo $_code ?>');
+        order.addExcludedPaymentMethod('<?php /* @noEscape */ echo $code; ?>');
 
         <?php if (!$block->isAjaxRequest()): ?>
             document.observe('dom:loaded', function(){
         <?php endif; ?>
 
         directPostModel = new directPost(
-            '<?php /* @escapeNotVerified */ echo $_code ?>',
+            '<?php /* @noEscape */ echo $code; ?>',
             'directpost-iframe',
-            '<?php /* @escapeNotVerified */ echo $_controller ?>',
-            '<?php /* @escapeNotVerified */ echo $_orderUrl ?>',
-            '<?php /* @escapeNotVerified */ echo $_method->getCgiUrl() ?>',
-            '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/save', ['_secure' => $block->getRequest()->isSecure()]) ?>');
+            '<?php /* @noEscape */ echo $controller; ?>',
+            '<?php /* @noEscape */ echo $orderUrl; ?>',
+            '<?php echo $block->escapeUrl($method->getCgiUrl()); ?>',
+            '<?php /* @noEscape */ echo $block->getUrl('*/*/save', [
+                '_secure' => $block->getRequest()->isSecure()
+            ]);?>');
 
         <?php if (!$block->isAjaxRequest()): ?>
             });
diff --git a/app/code/Magento/Authorizenet/view/adminhtml/templates/order/view/info/fraud_details.phtml b/app/code/Magento/Authorizenet/view/adminhtml/templates/order/view/info/fraud_details.phtml
index b26a258c77f3cf25c8d1cb10da5e99d87f92949d..e281f3a777a06678c1abee0ba01a456f6f31afea 100644
--- a/app/code/Magento/Authorizenet/view/adminhtml/templates/order/view/info/fraud_details.phtml
+++ b/app/code/Magento/Authorizenet/view/adminhtml/templates/order/view/info/fraud_details.phtml
@@ -5,38 +5,51 @@
  */
 
 // @codingStandardsIgnoreFile
+/**
+ * @var \Magento\Authorizenet\Block\Adminhtml\Order\View\Info\FraudDetails $block
+ */
+$payment = $block->getPayment();
+$fraudDetails = $payment->getAdditionalInformation('fraud_details');
 ?>
 
-<?php $payment = $block->getPayment() ?>
-<?php $fraudDetails = $payment->getAdditionalInformation('fraud_details') ?>
-
 <?php if (!empty($fraudDetails)): ?>
     <div class="admin__page-section-item-title">
-        <span class="title"><?php /* @escapeNotVerified */ echo __('Fraud Detection ') ?></span>
+        <span class="title"><?php echo $block->escapeHtml(__('Fraud Detection ')); ?></span>
     </div>
 
     <div class="admin__page-section-item-content">
         <div class="order-payment-additional">
             <?php if(!empty($fraudDetails['fds_filter_action'])): ?>
-                <?php /* @escapeNotVerified */ echo __('FDS Filter Action') ?>: <?php /* @escapeNotVerified */ echo $fraudDetails['fds_filter_action'] ?></br>
+                <?php echo $block->escapeHtml(__('FDS Filter Action')); ?>:
+                <?php echo $block->escapeHtml($fraudDetails['fds_filter_action']); ?>
+                </br>
             <?php endif; ?>
 
             <?php if(!empty($fraudDetails['avs_response'])): ?>
-                <?php /* @escapeNotVerified */ echo __('AVS Response') ?>: <?php /* @escapeNotVerified */ echo $fraudDetails['avs_response'] ?></br>
+                <?php echo $block->escapeHtml(__('AVS Response')); ?>:
+                <?php echo $block->escapeHtml($fraudDetails['avs_response']); ?>
+                </br>
             <?php endif; ?>
 
             <?php if(!empty($fraudDetails['card_code_response'])): ?>
-                <?php /* @escapeNotVerified */ echo __('Card Code Response') ?>: <?php /* @escapeNotVerified */ echo $fraudDetails['card_code_response'] ?></br>
+                <?php echo $block->escapeHtml(__('Card Code Response')); ?>:
+                <?php echo $block->escapeHtml($fraudDetails['card_code_response']); ?>
+                </br>
             <?php endif; ?>
 
             <?php if(!empty($fraudDetails['cavv_response']) || ($fraudDetails['cavv_response'] === 0)): ?>
-                <?php /* @escapeNotVerified */ echo __('CAVV Response') ?>: <?php /* @escapeNotVerified */ echo $fraudDetails['cavv_response'] ?></br>
+                <?php echo $block->escapeHtml(__('CAVV Response')); ?>:
+                <?php echo $block->escapeHtml($fraudDetails['cavv_response']); ?>
+                </br>
             <?php endif; ?>
 
             <?php if(!empty($fraudDetails['fraud_filters'])): ?>
-                <b><?php /* @escapeNotVerified */ echo __('Fraud Filters') ?>:</b></br>
+                <b><?php echo $block->escapeHtml(__('Fraud Filters')); ?>:
+                </b></br>
                 <?php foreach($fraudDetails['fraud_filters'] as $filter): ?>
-                    <?php /* @escapeNotVerified */ echo $filter['name'] ?>: <?php /* @escapeNotVerified */ echo $filter['action'] ?></br>
+                    <?php echo $block->escapeHtml($filter['name']); ?>:
+                    <?php echo $block->escapeHtml($filter['action']); ?>
+                    </br>
                 <?php endforeach; ?>
             <?php endif; ?>
         </div>
diff --git a/app/code/Magento/Authorizenet/view/frontend/web/js/view/payment/method-renderer/authorizenet-directpost.js b/app/code/Magento/Authorizenet/view/frontend/web/js/view/payment/method-renderer/authorizenet-directpost.js
index 5d310915a42a2ae4e8d923f831f7af2159f0fce7..bf6978cfa365c38700830a02dcff602881af509d 100644
--- a/app/code/Magento/Authorizenet/view/frontend/web/js/view/payment/method-renderer/authorizenet-directpost.js
+++ b/app/code/Magento/Authorizenet/view/frontend/web/js/view/payment/method-renderer/authorizenet-directpost.js
@@ -2,17 +2,17 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-/*browser:true*/
-/*global define*/
 define(
     [
         'jquery',
         'Magento_Payment/js/view/payment/iframe',
         'Magento_Checkout/js/action/set-payment-information',
-        'Magento_Checkout/js/model/payment/additional-validators'
+        'Magento_Checkout/js/model/payment/additional-validators',
+        'Magento_Checkout/js/model/full-screen-loader'
     ],
-    function ($, Component, setPaymentInformationAction, additionalValidators) {
+    function ($, Component, setPaymentInformationAction, additionalValidators, fullScreenLoader) {
         'use strict';
+
         return Component.extend({
             defaults: {
                 template: 'Magento_Authorizenet/payment/authorizenet-directpost'
@@ -44,13 +44,23 @@ define(
                 return true;
             },
 
-            placeOrder: function() {
+            /**
+             * @override
+             */
+            placeOrder: function () {
                 var self = this;
+
                 if (this.validateHandler() && additionalValidators.validate()) {
+                    fullScreenLoader.startLoader();
                     this.isPlaceOrderActionAllowed(false);
-                    $.when(setPaymentInformationAction(this.messageContainer, {'method': self.getCode()})).done(function() {
-                        self.placeOrderHandler();
-                    }).fail(function() {
+                    $.when(setPaymentInformationAction(this.messageContainer, {
+                        'method': self.getCode()
+                    })).done(function () {
+                        self.placeOrderHandler().fail(function () {
+                            fullScreenLoader.stopLoader();
+                        });
+                    }).fail(function () {
+                        fullScreenLoader.stopLoader();
                         self.isPlaceOrderActionAllowed(true);
                     });
                 }
diff --git a/app/code/Magento/Backend/Block/Dashboard/AbstractDashboard.php b/app/code/Magento/Backend/Block/Dashboard/AbstractDashboard.php
index d4572d0e3c0cf9dd82154e4c7bfbc873d443bdf8..dd484e56c51f45906097254d95bc6cac958540e7 100644
--- a/app/code/Magento/Backend/Block/Dashboard/AbstractDashboard.php
+++ b/app/code/Magento/Backend/Block/Dashboard/AbstractDashboard.php
@@ -21,18 +21,18 @@ abstract class AbstractDashboard extends \Magento\Backend\Block\Widget
     protected $_dataHelper = null;
 
     /**
-     * @var \Magento\Reports\Model\Resource\Order\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Order\CollectionFactory
      */
     protected $_collectionFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory
+     * @param \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory,
+        \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_collectionFactory = $collectionFactory;
@@ -40,7 +40,7 @@ abstract class AbstractDashboard extends \Magento\Backend\Block\Widget
     }
 
     /**
-     * @return array|\Magento\Framework\Model\Resource\Db\Collection\AbstractCollection|\Magento\Eav\Model\Entity\Collection\Abstract
+     * @return array|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection|\Magento\Eav\Model\Entity\Collection\Abstract
      */
     public function getCollection()
     {
diff --git a/app/code/Magento/Backend/Block/Dashboard/Graph.php b/app/code/Magento/Backend/Block/Dashboard/Graph.php
index 176212e32f934804689a008b800c16c228cac9bd..ba311f2814df32054bd1b88a1b0e5ee7fd640026 100644
--- a/app/code/Magento/Backend/Block/Dashboard/Graph.php
+++ b/app/code/Magento/Backend/Block/Dashboard/Graph.php
@@ -101,13 +101,13 @@ class Graph extends \Magento\Backend\Block\Dashboard\AbstractDashboard
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory
+     * @param \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory
      * @param \Magento\Backend\Helper\Dashboard\Data $dashboardData
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory,
+        \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory,
         \Magento\Backend\Helper\Dashboard\Data $dashboardData,
         array $data = []
     ) {
diff --git a/app/code/Magento/Backend/Block/Dashboard/Orders/Grid.php b/app/code/Magento/Backend/Block/Dashboard/Orders/Grid.php
index 86152d6e38ccb494f2d1c4fe5dca71140c82ee66..b6e8c86617d63641f062605d07dc9b9b215b937e 100644
--- a/app/code/Magento/Backend/Block/Dashboard/Orders/Grid.php
+++ b/app/code/Magento/Backend/Block/Dashboard/Orders/Grid.php
@@ -14,7 +14,7 @@ namespace Magento\Backend\Block\Dashboard\Orders;
 class Grid extends \Magento\Backend\Block\Dashboard\Grid
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Order\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Order\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -27,14 +27,14 @@ class Grid extends \Magento\Backend\Block\Dashboard\Grid
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Framework\Module\Manager $moduleManager
-     * @param \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory
+     * @param \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Framework\Module\Manager $moduleManager,
-        \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory,
+        \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_moduleManager = $moduleManager;
diff --git a/app/code/Magento/Backend/Block/Dashboard/Sales.php b/app/code/Magento/Backend/Block/Dashboard/Sales.php
index d734e7657ffad7dc2994e8404d198006386fd380..93b9f8f6637084ba7721fd0f32748bb3a3fa1307 100644
--- a/app/code/Magento/Backend/Block/Dashboard/Sales.php
+++ b/app/code/Magento/Backend/Block/Dashboard/Sales.php
@@ -25,13 +25,13 @@ class Sales extends \Magento\Backend\Block\Dashboard\Bar
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory
+     * @param \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory,
+        \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory,
         \Magento\Framework\Module\Manager $moduleManager,
         array $data = []
     ) {
diff --git a/app/code/Magento/Backend/Block/Dashboard/Tab/Amounts.php b/app/code/Magento/Backend/Block/Dashboard/Tab/Amounts.php
index 239c99ceacb32acd4be489c0d50a709b0b6ccbce..1459c23b74d37eba58b112795fdd97a11e6b091f 100644
--- a/app/code/Magento/Backend/Block/Dashboard/Tab/Amounts.php
+++ b/app/code/Magento/Backend/Block/Dashboard/Tab/Amounts.php
@@ -15,14 +15,14 @@ class Amounts extends \Magento\Backend\Block\Dashboard\Graph
 {
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory
+     * @param \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory
      * @param \Magento\Backend\Helper\Dashboard\Data $dashboardData
      * @param \Magento\Backend\Helper\Dashboard\Order $dataHelper
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory,
+        \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory,
         \Magento\Backend\Helper\Dashboard\Data $dashboardData,
         \Magento\Backend\Helper\Dashboard\Order $dataHelper,
         array $data = []
diff --git a/app/code/Magento/Backend/Block/Dashboard/Tab/Customers/Most.php b/app/code/Magento/Backend/Block/Dashboard/Tab/Customers/Most.php
index bfba9ada27e4af5a410131576e925878fd74e4b2..822676f3ed076df9351bb85b5004220c5bd97725 100644
--- a/app/code/Magento/Backend/Block/Dashboard/Tab/Customers/Most.php
+++ b/app/code/Magento/Backend/Block/Dashboard/Tab/Customers/Most.php
@@ -14,20 +14,20 @@ namespace Magento\Backend\Block\Dashboard\Tab\Customers;
 class Most extends \Magento\Backend\Block\Dashboard\Grid
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Order\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Order\CollectionFactory
      */
     protected $_collectionFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory
+     * @param \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory,
+        \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_collectionFactory = $collectionFactory;
@@ -49,7 +49,7 @@ class Most extends \Magento\Backend\Block\Dashboard\Grid
     protected function _prepareCollection()
     {
         $collection = $this->_collectionFactory->create();
-        /* @var $collection \Magento\Reports\Model\Resource\Order\Collection */
+        /* @var $collection \Magento\Reports\Model\ResourceModel\Order\Collection */
         $collection->groupByCustomer()->addOrdersCount()->joinCustomerName();
 
         $storeFilter = 0;
diff --git a/app/code/Magento/Backend/Block/Dashboard/Tab/Customers/Newest.php b/app/code/Magento/Backend/Block/Dashboard/Tab/Customers/Newest.php
index f1f4623d41e994e49104ea03a7ece847ef2e4f42..7da9391265cbb514c155249d70f5d6f84f97f2d3 100644
--- a/app/code/Magento/Backend/Block/Dashboard/Tab/Customers/Newest.php
+++ b/app/code/Magento/Backend/Block/Dashboard/Tab/Customers/Newest.php
@@ -14,20 +14,20 @@ namespace Magento\Backend\Block\Dashboard\Tab\Customers;
 class Newest extends \Magento\Backend\Block\Dashboard\Grid
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Customer\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Customer\CollectionFactory
      */
     protected $_collectionFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Reports\Model\Resource\Customer\CollectionFactory $collectionFactory
+     * @param \Magento\Reports\Model\ResourceModel\Customer\CollectionFactory $collectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Reports\Model\Resource\Customer\CollectionFactory $collectionFactory,
+        \Magento\Reports\Model\ResourceModel\Customer\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_collectionFactory = $collectionFactory;
diff --git a/app/code/Magento/Backend/Block/Dashboard/Tab/Orders.php b/app/code/Magento/Backend/Block/Dashboard/Tab/Orders.php
index 1e849cae23d65450657263659c003964f225817a..8f459f8d60285053fa7d8f6b6e23f07a6cb927fd 100644
--- a/app/code/Magento/Backend/Block/Dashboard/Tab/Orders.php
+++ b/app/code/Magento/Backend/Block/Dashboard/Tab/Orders.php
@@ -15,14 +15,14 @@ class Orders extends \Magento\Backend\Block\Dashboard\Graph
 {
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory
+     * @param \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory
      * @param \Magento\Backend\Helper\Dashboard\Data $dashboardData
      * @param \Magento\Backend\Helper\Dashboard\Order $dataHelper
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory,
+        \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory,
         \Magento\Backend\Helper\Dashboard\Data $dashboardData,
         \Magento\Backend\Helper\Dashboard\Order $dataHelper,
         array $data = []
diff --git a/app/code/Magento/Backend/Block/Dashboard/Tab/Products/Ordered.php b/app/code/Magento/Backend/Block/Dashboard/Tab/Products/Ordered.php
index 6046b66a0b0ba9032c6e1ddf15755a633733858b..fbbfc6771ab6906062c88953abbea0a7d78a521b 100644
--- a/app/code/Magento/Backend/Block/Dashboard/Tab/Products/Ordered.php
+++ b/app/code/Magento/Backend/Block/Dashboard/Tab/Products/Ordered.php
@@ -14,7 +14,7 @@ namespace Magento\Backend\Block\Dashboard\Tab\Products;
 class Ordered extends \Magento\Backend\Block\Dashboard\Grid
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Report\Bestsellers\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Report\Bestsellers\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -27,14 +27,14 @@ class Ordered extends \Magento\Backend\Block\Dashboard\Grid
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Framework\Module\Manager $moduleManager
-     * @param \Magento\Sales\Model\Resource\Report\Bestsellers\CollectionFactory $collectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Report\Bestsellers\CollectionFactory $collectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Framework\Module\Manager $moduleManager,
-        \Magento\Sales\Model\Resource\Report\Bestsellers\CollectionFactory $collectionFactory,
+        \Magento\Sales\Model\ResourceModel\Report\Bestsellers\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_collectionFactory = $collectionFactory;
@@ -86,7 +86,8 @@ class Ordered extends \Magento\Backend\Block\Dashboard\Grid
     protected function _prepareColumns()
     {
         $this->addColumn(
-            'name', [
+            'name',
+            [
                 'header' => __('Product'),
                 'sortable' => false,
                 'index' => 'product_name',
diff --git a/app/code/Magento/Backend/Block/Dashboard/Tab/Products/Viewed.php b/app/code/Magento/Backend/Block/Dashboard/Tab/Products/Viewed.php
index bfd3740114ffbffec1387e72c603f9529a9cdadf..602b3634f1e8e81a142463cc2996e50ca62669ca 100644
--- a/app/code/Magento/Backend/Block/Dashboard/Tab/Products/Viewed.php
+++ b/app/code/Magento/Backend/Block/Dashboard/Tab/Products/Viewed.php
@@ -14,20 +14,20 @@ namespace Magento\Backend\Block\Dashboard\Tab\Products;
 class Viewed extends \Magento\Backend\Block\Dashboard\Grid
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_productsFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Reports\Model\Resource\Product\CollectionFactory $productsFactory
+     * @param \Magento\Reports\Model\ResourceModel\Product\CollectionFactory $productsFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Reports\Model\Resource\Product\CollectionFactory $productsFactory,
+        \Magento\Reports\Model\ResourceModel\Product\CollectionFactory $productsFactory,
         array $data = []
     ) {
         $this->_productsFactory = $productsFactory;
diff --git a/app/code/Magento/Backend/Block/Dashboard/Totals.php b/app/code/Magento/Backend/Block/Dashboard/Totals.php
index 4b8860128f68fb1e023261c8798416818d16afc9..717e91ef55b41991c735cea8e76827c490a2a095 100644
--- a/app/code/Magento/Backend/Block/Dashboard/Totals.php
+++ b/app/code/Magento/Backend/Block/Dashboard/Totals.php
@@ -26,13 +26,13 @@ class Totals extends \Magento\Backend\Block\Dashboard\Bar
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory
+     * @param \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Reports\Model\Resource\Order\CollectionFactory $collectionFactory,
+        \Magento\Reports\Model\ResourceModel\Order\CollectionFactory $collectionFactory,
         \Magento\Framework\Module\Manager $moduleManager,
         array $data = []
     ) {
@@ -57,7 +57,7 @@ class Totals extends \Magento\Backend\Block\Dashboard\Bar
         );
         $period = $this->getRequest()->getParam('period', '24h');
 
-        /* @var $collection \Magento\Reports\Model\Resource\Order\Collection */
+        /* @var $collection \Magento\Reports\Model\ResourceModel\Order\Collection */
         $collection = $this->_collectionFactory->create()->addCreateAtPeriodFilter(
             $period
         )->calculateTotals(
diff --git a/app/code/Magento/Backend/Block/Store/Switcher.php b/app/code/Magento/Backend/Block/Store/Switcher.php
index 5933b7431973fd7241590cb0f19117438e23efe5..60a6245ef49ba23c36a6eb89884f45c998f4c50b 100644
--- a/app/code/Magento/Backend/Block/Store/Switcher.php
+++ b/app/code/Magento/Backend/Block/Store/Switcher.php
@@ -132,7 +132,7 @@ class Switcher extends \Magento\Backend\Block\Template
     }
 
     /**
-     * @return \Magento\Store\Model\Resource\Website\Collection
+     * @return \Magento\Store\Model\ResourceModel\Website\Collection
      */
     public function getWebsiteCollection()
     {
@@ -218,7 +218,7 @@ class Switcher extends \Magento\Backend\Block\Template
 
     /**
      * @param int|\Magento\Store\Model\Website $website
-     * @return \Magento\Store\Model\Resource\Group\Collection
+     * @return \Magento\Store\Model\ResourceModel\Group\Collection
      */
     public function getGroupCollection($website)
     {
@@ -296,7 +296,7 @@ class Switcher extends \Magento\Backend\Block\Template
 
     /**
      * @param \Magento\Store\Model\Group|int $group
-     * @return \Magento\Store\Model\Resource\Store\Collection
+     * @return \Magento\Store\Model\ResourceModel\Store\Collection
      */
     public function getStoreCollection($group)
     {
diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Country.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Country.php
index eaacec7d96e6b9f1f04b3505efef748e61316efa..3d1d3dad537aa20d253cfe112438ef29170b3d68 100644
--- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Country.php
+++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Country.php
@@ -11,20 +11,20 @@ namespace Magento\Backend\Block\Widget\Grid\Column\Filter;
 class Country extends \Magento\Backend\Block\Widget\Grid\Column\Filter\Select
 {
     /**
-     * @var \Magento\Directory\Model\Resource\Country\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Country\CollectionFactory
      */
     protected $_directoriesFactory;
 
     /**
      * @param \Magento\Backend\Block\Context $context
      * @param \Magento\Framework\DB\Helper $resourceHelper
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $directoriesFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $directoriesFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Context $context,
         \Magento\Framework\DB\Helper $resourceHelper,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $directoriesFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $directoriesFactory,
         array $data = []
     ) {
         $this->_directoriesFactory = $directoriesFactory;
diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Store.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Store.php
index 6be55c02dba0883066ae46bc6a1d03539f098a45..5a1769562032bcc59ab133db77dcd801342aceb4 100644
--- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Store.php
+++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Filter/Store.php
@@ -48,7 +48,7 @@ class Store extends \Magento\Backend\Block\Widget\Grid\Column\Filter\AbstractFil
 
         $allShow = $this->getColumn()->getStoreAll();
 
-        $html = '<select name="' . $this->escapeHtml(
+        $html = '<select class="admin__control-select" name="' . $this->escapeHtml(
             $this->_getHtmlName()
         ) . '" ' . $this->getColumn()->getValidateClass() . $this->getUiId(
             'filter',
diff --git a/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/AbstractRenderer.php b/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/AbstractRenderer.php
index 0c28782435dc1d5e14b8f61fa3bd65731edc7122..e8b0ef6c89533fe8e8af7dfe025e1255a0cb7310 100644
--- a/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/AbstractRenderer.php
+++ b/app/code/Magento/Backend/Block/Widget/Grid/Column/Renderer/AbstractRenderer.php
@@ -51,10 +51,11 @@ abstract class AbstractRenderer extends \Magento\Backend\Block\AbstractBlock imp
     public function render(DataObject $row)
     {
         if ($this->getColumn()->getEditable()) {
-            $value = $this->_getValue($row);
-            return '<div class="admin__grid-control">' .
-            '<span class="admin__grid-control-value">' . $value . '</span>' .
-            $this->_getInputValueElement($row) . '</div>' ;
+            $result = '<div class="admin__grid-control">';
+            $result .= $this->getColumn()->getEditOnly() ? ''
+                : '<span class="admin__grid-control-value">' . $this->_getValue($row) . '</span>';
+
+            return $result . $this->_getInputValueElement($row) . '</div>' ;
         }
         return $this->_getValue($row);
     }
diff --git a/app/code/Magento/Backend/Helper/Dashboard/AbstractDashboard.php b/app/code/Magento/Backend/Helper/Dashboard/AbstractDashboard.php
index be7e5c68342f3888a60db26d22895b72d0a6476a..a17302f9b12c772b566eb7afa91d71b238bd0ec5 100644
--- a/app/code/Magento/Backend/Helper/Dashboard/AbstractDashboard.php
+++ b/app/code/Magento/Backend/Helper/Dashboard/AbstractDashboard.php
@@ -13,7 +13,7 @@ abstract class AbstractDashboard extends \Magento\Framework\App\Helper\AbstractH
     /**
      * Helper collection
      *
-     * @var \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection|array
+     * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection|array
      */
     protected $_collection;
 
@@ -25,7 +25,7 @@ abstract class AbstractDashboard extends \Magento\Framework\App\Helper\AbstractH
     protected $_params = [];
 
     /**
-     * @return array|\Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return array|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getCollection()
     {
diff --git a/app/code/Magento/Backend/Helper/Dashboard/Order.php b/app/code/Magento/Backend/Helper/Dashboard/Order.php
index df9396bbe32474d302f224fe17836f1bfd2d6f5e..ec6a5d3aeeabd37cf23d8a3b523276f8059ae84c 100644
--- a/app/code/Magento/Backend/Helper/Dashboard/Order.php
+++ b/app/code/Magento/Backend/Helper/Dashboard/Order.php
@@ -11,17 +11,17 @@ namespace Magento\Backend\Helper\Dashboard;
 class Order extends \Magento\Backend\Helper\Dashboard\AbstractDashboard
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Order\Collection
+     * @var \Magento\Reports\Model\ResourceModel\Order\Collection
      */
     protected $_orderCollection;
 
     /**
      * @param \Magento\Framework\App\Helper\Context $context
-     * @param \Magento\Reports\Model\Resource\Order\Collection $orderCollection
+     * @param \Magento\Reports\Model\ResourceModel\Order\Collection $orderCollection
      */
     public function __construct(
         \Magento\Framework\App\Helper\Context $context,
-        \Magento\Reports\Model\Resource\Order\Collection $orderCollection
+        \Magento\Reports\Model\ResourceModel\Order\Collection $orderCollection
     ) {
         $this->_orderCollection = $orderCollection;
         parent::__construct(
diff --git a/app/code/Magento/Backend/Model/Cache/Resource/Grid/Collection.php b/app/code/Magento/Backend/Model/Cache/ResourceModel/Grid/Collection.php
similarity index 95%
rename from app/code/Magento/Backend/Model/Cache/Resource/Grid/Collection.php
rename to app/code/Magento/Backend/Model/Cache/ResourceModel/Grid/Collection.php
index 0006b2f1be3ea0d0783256dedecf3494744a7fab..574174f6eb3bdd10e40fb50f9a4c18f518ff1331 100644
--- a/app/code/Magento/Backend/Model/Cache/Resource/Grid/Collection.php
+++ b/app/code/Magento/Backend/Model/Cache/ResourceModel/Grid/Collection.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Backend\Model\Cache\Resource\Grid;
+namespace Magento\Backend\Model\Cache\ResourceModel\Grid;
 
 class Collection extends \Magento\Framework\Data\Collection
 {
diff --git a/app/code/Magento/Backend/Model/Resource/Translate.php b/app/code/Magento/Backend/Model/ResourceModel/Translate.php
similarity index 75%
rename from app/code/Magento/Backend/Model/Resource/Translate.php
rename to app/code/Magento/Backend/Model/ResourceModel/Translate.php
index 55d562863e7531ce18d450975602c1f195977983..395416359937df5db114fc5c26eb0fdda281e257 100644
--- a/app/code/Magento/Backend/Model/Resource/Translate.php
+++ b/app/code/Magento/Backend/Model/ResourceModel/Translate.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Backend\Model\Resource;
+namespace Magento\Backend\Model\ResourceModel;
 
 /**
  * Backend translate resource model
  */
-class Translate extends \Magento\Translation\Model\Resource\Translate
+class Translate extends \Magento\Translation\Model\ResourceModel\Translate
 {
     /**
      * Get current store id
diff --git a/app/code/Magento/Backend/Model/Search/Order.php b/app/code/Magento/Backend/Model/Search/Order.php
index 678d98138dc2e8a26823171e0efc9bf16bc5a79d..6b9f2cd641d23313c96f5682151e319400e98b5a 100644
--- a/app/code/Magento/Backend/Model/Search/Order.php
+++ b/app/code/Magento/Backend/Model/Search/Order.php
@@ -20,16 +20,16 @@ class Order extends \Magento\Framework\DataObject
     protected $_adminhtmlData = null;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
      */
     protected $_collectionFactory;
 
     /**
-     * @param \Magento\Sales\Model\Resource\Order\CollectionFactory $collectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $collectionFactory
      * @param \Magento\Backend\Helper\Data $adminhtmlData
      */
     public function __construct(
-        \Magento\Sales\Model\Resource\Order\CollectionFactory $collectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $collectionFactory,
         \Magento\Backend\Helper\Data $adminhtmlData
     ) {
         $this->_collectionFactory = $collectionFactory;
diff --git a/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/Column/Renderer/AbstractRendererTest.php b/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/Column/Renderer/AbstractRendererTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2e7fe0c3b0e27264a4cb4169d42493f480705665
--- /dev/null
+++ b/app/code/Magento/Backend/Test/Unit/Block/Widget/Grid/Column/Renderer/AbstractRendererTest.php
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Backend\Test\Unit\Block\Widget\Grid\Column\Renderer;
+
+class AbstractRendererTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Backend\Block\Widget\Grid\Column|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $columnMock;
+
+    /**
+     * @var \Magento\Framework\DataObject|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $dataObjectMock;
+
+    /**
+     * @var \Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer
+     */
+    protected $renderer;
+
+    /**
+     * @return void
+     */
+    protected function setUp()
+    {
+        $this->dataObjectMock = $this->getMock('Magento\Framework\DataObject', ['getData'], [], '', false);
+        $this->columnMock = $this->getMockBuilder('Magento\Backend\Block\Widget\Grid\Column')
+            ->disableOriginalConstructor()
+            ->setMethods(['getEditable', 'getIndex', 'getEditOnly', 'getId'])
+            ->getMock();
+        $this->renderer = $this->getMockBuilder('Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer')
+            ->disableOriginalConstructor()
+            ->setMethods(null)
+            ->getMock();
+    }
+
+    /**
+     * @param bool $editable
+     * @param bool $onlyEdit
+     * @param string $expectedResult
+     * @return void
+     * @dataProvider renderDataProvider
+     */
+    public function testRender($editable, $onlyEdit, $expectedResult)
+    {
+        $value = 'some value';
+        $keyValue = 'key';
+
+        $this->columnMock->expects($this->once())
+            ->method('getEditable')
+            ->willReturn($editable);
+        $this->columnMock->expects($this->any())
+            ->method('getEditOnly')
+            ->willReturn($onlyEdit);
+        $this->columnMock->expects($this->any())
+            ->method('getIndex')
+            ->willReturn($keyValue);
+        $this->columnMock->expects($this->any())
+            ->method('getId')
+            ->willReturn('test');
+        $this->dataObjectMock->expects($this->any())
+            ->method('getData')
+            ->with($keyValue)
+            ->willReturn($value);
+        $this->renderer->setColumn($this->columnMock);
+
+        $this->assertEquals($expectedResult, $this->renderer->render($this->dataObjectMock));
+    }
+
+    /**
+     * @return array
+     */
+    public function renderDataProvider()
+    {
+        return [
+            [
+                'editable' => false,
+                'onlyEdit' => false,
+                'expectedResult' => 'some value'
+            ],
+            [
+                'editable' => false,
+                'onlyEdit' => true,
+                'expectedResult' => 'some value'
+            ],
+            [
+                'editable' => true,
+                'onlyEdit' => false,
+                'expectedResult' => '<div class="admin__grid-control">'
+                    . '<span class="admin__grid-control-value">some value</span>'
+                    . '<input type="text" class="input-text " name="test" value="some value"/>'
+                    . '</div>'
+            ],
+            [
+                'editable' => true,
+                'onlyEdit' => true,
+                'expectedResult' => '<div class="admin__grid-control">'
+                    . '<input type="text" class="input-text " name="test" value="some value"/>'
+                    . '</div>'
+            ],
+        ];
+    }
+}
diff --git a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/RefreshStatisticsTest.php b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/RefreshStatisticsTest.php
index e1ac51552586ab6edf311aa3d8d4bd2750ef143b..76d670fef543e0c13d0f1671a5116eff05b670a7 100644
--- a/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/RefreshStatisticsTest.php
+++ b/app/code/Magento/Backend/Test/Unit/Controller/Adminhtml/Dashboard/RefreshStatisticsTest.php
@@ -37,7 +37,7 @@ class RefreshStatisticsTest extends \PHPUnit_Framework_TestCase
     protected $messageManager;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Report\Order|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Report\Order|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $order;
 
@@ -59,7 +59,7 @@ class RefreshStatisticsTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $reportTypes = [
-            'sales' => 'Magento\Sales\Model\Resource\Report\Order'
+            'sales' => 'Magento\Sales\Model\ResourceModel\Report\Order'
         ];
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
@@ -84,7 +84,7 @@ class RefreshStatisticsTest extends \PHPUnit_Framework_TestCase
 
         $this->messageManager = $this->getMock('\Magento\Framework\Message\Manager', [], [], '', false);
 
-        $this->order = $this->getMock('Magento\Sales\Model\Resource\Report\Order', [], [], '', false);
+        $this->order = $this->getMock('Magento\Sales\Model\ResourceModel\Report\Order', [], [], '', false);
 
         $this->objectManager = $this->getMock('Magento\Framework\ObjectManagerInterface', [], [], '', false);
 
@@ -118,7 +118,7 @@ class RefreshStatisticsTest extends \PHPUnit_Framework_TestCase
 
         $this->objectManager->expects($this->any())
             ->method('create')
-            ->with('Magento\Sales\Model\Resource\Report\Order')
+            ->with('Magento\Sales\Model\ResourceModel\Report\Order')
             ->willReturn($this->order);
 
         $this->resultRedirect->expects($this->once())
diff --git a/app/code/Magento/Backend/etc/di.xml b/app/code/Magento/Backend/etc/di.xml
index 943d1846f8e3fa3750dd71387c9f97044eb2b355..c2ed807c5ead636093e3902bb9b5ec60b6ad5aef 100644
--- a/app/code/Magento/Backend/etc/di.xml
+++ b/app/code/Magento/Backend/etc/di.xml
@@ -73,20 +73,20 @@
     </type>
     <preference for="Magento\Framework\Authorization\RoleLocatorInterface" type="Magento\Backend\Model\Authorization\RoleLocator" />
     <preference for="Magento\Framework\Authorization\PolicyInterface" type="Magento\Framework\Authorization\Policy\Acl"/>
-    <preference for="Magento\Framework\Acl\Resource\ProviderInterface" type="Magento\Framework\Acl\Resource\Provider"/>
-    <type name="Magento\Framework\Acl\Resource\Config\Reader\Filesystem">
+    <preference for="Magento\Framework\Acl\AclResource\ProviderInterface" type="Magento\Framework\Acl\AclResource\Provider"/>
+    <type name="Magento\Framework\Acl\AclResource\Config\Reader\Filesystem">
         <arguments>
-            <argument name="converter" xsi:type="object">Magento\Framework\Acl\Resource\Config\Converter\Dom</argument>
+            <argument name="converter" xsi:type="object">Magento\Framework\Acl\AclResource\Config\Converter\Dom</argument>
         </arguments>
     </type>
-    <type name="Magento\Framework\Acl\Resource\Provider">
+    <type name="Magento\Framework\Acl\AclResource\Provider">
         <arguments>
-            <argument name="configReader" xsi:type="object">Magento\Framework\Acl\Resource\Config\Reader\Filesystem</argument>
+            <argument name="configReader" xsi:type="object">Magento\Framework\Acl\AclResource\Config\Reader\Filesystem</argument>
         </arguments>
     </type>
     <type name="Magento\Framework\Acl\Builder">
         <arguments>
-            <argument name="resourceLoader" xsi:type="object">Magento\Framework\Acl\Loader\Resource</argument>
+            <argument name="resourceLoader" xsi:type="object">Magento\Framework\Acl\Loader\ResourceLoader</argument>
         </arguments>
     </type>
     <type name="Magento\Framework\Acl\Cache">
diff --git a/app/code/Magento/Backend/view/adminhtml/layout/adminhtml_cache_block.xml b/app/code/Magento/Backend/view/adminhtml/layout/adminhtml_cache_block.xml
index f698cfe3f1a701f07b296597f6098d56387c5e81..6d5b1092fce01e402ea78220e3096770947abe76 100644
--- a/app/code/Magento/Backend/view/adminhtml/layout/adminhtml_cache_block.xml
+++ b/app/code/Magento/Backend/view/adminhtml/layout/adminhtml_cache_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.cache.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">cache_grid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Backend\Model\Cache\Resource\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Backend\Model\Cache\ResourceModel\Grid\Collection</argument>
                     <argument name="pager_visibility" xsi:type="string">0</argument>
                 </arguments>
                 <block class="Magento\Backend\Block\Widget\Grid\Massaction" name="adminhtml.cache.massaction" as="grid.massaction">
diff --git a/app/code/Magento/Backend/view/adminhtml/layout/adminhtml_system_design_grid_block.xml b/app/code/Magento/Backend/view/adminhtml/layout/adminhtml_system_design_grid_block.xml
index 5024f216cdf22a5645d77bb57147405f020dca6b..d9c544b159d962559427834d110180ae1e87377b 100644
--- a/app/code/Magento/Backend/view/adminhtml/layout/adminhtml_system_design_grid_block.xml
+++ b/app/code/Magento/Backend/view/adminhtml/layout/adminhtml_system_design_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.system.design.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">designGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Theme\Model\Resource\Design\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Theme\Model\ResourceModel\Design\Collection</argument>
                     <argument name="use_ajax" xsi:type="string">1</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
                     <argument name="grid_url" xsi:type="url" path="*/*/grid">
diff --git a/app/code/Magento/Backend/view/adminhtml/layout/adminhtml_system_store_grid_block.xml b/app/code/Magento/Backend/view/adminhtml/layout/adminhtml_system_store_grid_block.xml
index a0ccf18641151219212dd22f98e41376ce1feb68..20a9f824cbf8613a62a423dbc7a7201fb3077a2e 100644
--- a/app/code/Magento/Backend/view/adminhtml/layout/adminhtml_system_store_grid_block.xml
+++ b/app/code/Magento/Backend/view/adminhtml/layout/adminhtml_system_store_grid_block.xml
@@ -12,7 +12,7 @@
                 <arguments>
                     <argument name="id" xsi:type="string">storeGrid</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Store\Model\Resource\Website\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Store\Model\ResourceModel\Website\Grid\Collection</argument>
                 </arguments>
                 <block class="Magento\Backend\Block\Widget\Grid\ColumnSet" name="adminhtml.system.store.grid.columnSet" as="grid.columnSet">
                     <arguments>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml b/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml
index 5c9cf626e37f11d07b10cc5a3713308a8e33e06e..bd97edfa35b179c0e2b802932f9e42cba4882a15 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/dashboard/index.phtml
@@ -10,7 +10,10 @@
 
 <?php if (is_array($block->getChildBlock('diagrams')->getTabsIds())) : ?>
 <script>
-require(['prototype'], function(){
+require([
+    'Magento_Ui/js/modal/alert',
+    'prototype'
+], function(alert){
 
 window.changeDiagramsPeriod = function(periodObj) {
     periodParam = periodObj.value ? 'period/' + periodObj.value + '/' : '';
@@ -25,7 +28,9 @@ window.changeDiagramsPeriod = function(periodObj) {
                 if (transport.responseText.isJSON()) {
                     var response = transport.responseText.evalJSON()
                     if (response.error) {
-                        alert(response.message);
+                        alert({
+                            content: response.message
+                        });
                     }
                     if(response.ajaxExpired && response.ajaxRedirect) {
                         setLocation(response.ajaxRedirect);
@@ -47,9 +52,11 @@ window.changeDiagramsPeriod = function(periodObj) {
             tabContentElementId = 'dashboard_diagram_totals';
             try {
                 if (transport.responseText.isJSON()) {
-                    var response = transport.responseText.evalJSON()
+                    var response = transport.responseText.evalJSON();
                     if (response.error) {
-                        alert(response.message);
+                        alert({
+                            content: response.message
+                        });
                     }
                     if(response.ajaxExpired && response.ajaxRedirect) {
                         setLocation(response.ajaxRedirect);
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/media/uploader.phtml b/app/code/Magento/Backend/view/adminhtml/templates/media/uploader.phtml
index d6bd7de2f1c0c5df116a271b504e356aa1e5da0c..a876ad6c6e59911a96ba92f860b0b43fb7155f94 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/media/uploader.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/media/uploader.phtml
@@ -31,9 +31,10 @@
 require([
     "jquery",
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     "mage/translate",
     "jquery/file-uploader"
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
 
     $('#fileupload').fileupload({
         dataType: 'json',
@@ -75,7 +76,9 @@ require([
                 $('#' + data.fileId)
                     .delay(2000)
                     .hide('highlight');
-                alert($.mage.__('We don\'t recognize or support this file extension type.'));
+                alert({
+                   content: $.mage.__('We don\'t recognize or support this file extension type.')
+                });
             }
             $('#' + data.fileId).remove();
         },
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml b/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml
index fd4ac471185b88563e994bb12c3da1d3c1e6e8e4..03347fbcbe6953245b1b14cc3534c1894d173049 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/page/locale.phtml
@@ -11,16 +11,21 @@
     <label class="label" for="footer_interface_locale"><span><?php /* @escapeNotVerified */ echo __('Interface Locale'); ?></span></label>
     <?php /* @escapeNotVerified */ echo $block->getLocaleSelect(); ?>
     <script>
-        (function () {
-            'use strict';
+        require([
+                'mage/validation/url'
+            ],
+            function (urlValidator) {
+                'use strict';
 
-            var elem = document.getElementById('footer_interface_locale');
+                var elem = document.getElementById('footer_interface_locale');
 
-            function onChange() {
-                window.location.href = '<?php /* @escapeNotVerified */ echo $block->getChangeLocaleUrl() ?>locale/' + elem.value + '/<?php /* @escapeNotVerified */ echo $block->getUrlForReferer() ?>';
-            }
+                function onChange() {
+                    urlValidator.redirect('<?php /* @escapeNotVerified */ echo $block->getChangeLocaleUrl() ?>locale/' +
+                    elem.value +
+                    '/<?php /* @escapeNotVerified */ echo $block->getUrlForReferer() ?>');
+                }
 
-            elem.addEventListener('change', onChange);
-        })();
+                elem.addEventListener('change', onChange);
+            });
     </script>
 </div>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
index ad46dbeec25be6141c38a7bdba3503792fbb1df8..293733ae9d74e3390bb236fe5fc7189fcf77bdf6 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/store/switcher.phtml
@@ -130,7 +130,10 @@
 </div>
 
 <script>
-require(['jquery'], function(jQuery){
+require([
+    'jquery',
+    'Magento_Ui/js/modal/confirm'
+], function(jQuery, confirm){
 
     (function($) {
         var $storesList = $('[data-role=stores-list]');
@@ -171,11 +174,19 @@ require(['jquery'], function(jQuery){
         } else {
 
             <?php if ($block->getUseConfirm()): ?>
-            if (confirm("<?php /* @escapeNotVerified */ echo __('Please confirm scope switching. All data that hasn\'t been saved will be lost.') ?>")) {
-                reload();
-            } else {
-                obj.value = '<?php echo $block->escapeHtml($block->getStoreId()) ?>';
-            }
+
+            confirm({
+                content:  "<?php /* @escapeNotVerified */ echo __('Please confirm scope switching. All data that hasn\'t been saved will be lost.') ?>",
+                actions: {
+                    confirm: function() {
+                        reload();
+                    },
+                    cancel: function() {
+                        obj.value = '<?php echo $block->escapeHtml($block->getStoreId()) ?>';
+                    }
+                }
+            });
+
             <?php else: ?>
                 reload();
             <?php endif; ?>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset.phtml
index b8c14ed801a4b3a57d3eace5078a579f18c265df..fedec572af962a86661de9308ea78095fff09b64 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset.phtml
@@ -22,7 +22,7 @@ if (!isset($advancedLabel)) {
     $advancedLabel = __('Additional Settings');
 }
 
-$cssClass = ($isField) ? 'field ' . $element->getClass() : 'fieldset admin__fieldset ' . $element->getClass();
+$cssClass = ($isField) ? 'field ' . $element->getClass() : 'fieldset admin__fieldset' . $element->getClass();
 
 if ($isField) {
     $count = $element->getCountBasicChildren();
@@ -91,11 +91,11 @@ if ($isField) {
 
         <?php if ($element->hasAdvanced() && !$isField): ?>
             <?php echo(!$element->getNoContainer() && $advancedAfter)  ? '</fieldset>' : ''?>
-            <details data-mage-init='{"details": {}}' class="details" id="details<?php /* @escapeNotVerified */ echo $id ?>">
-                <summary class="details-summary" id="details-summary<?php /* @escapeNotVerified */ echo $id ?>">
+            <details data-mage-init='{"details": {}}' class="details admin__collapsible-block-wrapper" id="details<?php /* @escapeNotVerified */ echo $id ?>">
+                <summary class="details-summary admin__collapsible-title" id="details-summary<?php /* @escapeNotVerified */ echo $id ?>">
                     <span><?php /* @escapeNotVerified */ echo $advancedLabel ?></span>
                 </summary>
-                <div class="details-content" id="details-content<?php /* @escapeNotVerified */ echo $id ?>">
+                <div class="details-content admin__fieldset" id="details-content<?php /* @escapeNotVerified */ echo $id ?>">
                     <?php echo $element->getAdvancedChildrenHtml(); ?>
                 </div>
             </details>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml
index b09be9491f003ffc98c7657c283030f7f6640a4e..392f9378beb519ab225a9cab5db71fb0dfc2f804 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/form/renderer/fieldset/element.phtml
@@ -12,7 +12,7 @@
 $element = $block->getElement();
 $note = $element->getNote() ? '<div class="note" id="' . $element->getId() . '-note">' . $element->getNote() . '</div>' : '';
 $elementBeforeLabel = $element->getExtType() == 'checkbox admin__control-checkbox' || $element->getExtType() == 'radio admin__control-radio';
-$addOn = $element->getBeforeElementHtml() || $element->getAfterElementHtml();
+$addOn = ($element->getBeforeElementHtml() || $element->getAfterElementHtml()) && !$element->getNoWrapAsAddon();
 $fieldId = ($element->getHtmlContainerId()) ? ' id="' . $element->getHtmlContainerId() . '"' : '';
 $fieldClass = "admin__field field field-{$element->getId()} {$element->getCssClass()}";
 $fieldClass .= ($elementBeforeLabel) ? ' choice' : '';
@@ -38,7 +38,7 @@ $fieldAttributes = $fieldId . ' class="' . $fieldClass . '" '
         <?php else: ?>
             <?php echo $element->getLabelHtml() ?>
             <div class="admin__field-control control">
-                <?php /* @escapeNotVerified */ echo($addOn) ? '<div class="admin__field admin__field-option">' . $element->getElementHtml() . '</div>' : $element->getElementHtml(); ?>
+                <?php /* @escapeNotVerified */ echo($addOn) ? '<div class="admin__field">' . $element->getElementHtml() . '</div>' : $element->getElementHtml(); ?>
                 <?php /* @escapeNotVerified */ echo $note ?>
             </div>
         <?php endif; ?>
diff --git a/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/extended.phtml b/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/extended.phtml
index ddd9fa5f2f18ae565d365c090d2ad2c8dd35f55a..3fbc198921448e9b6994db3d7358bbd185ae1e28 100644
--- a/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/extended.phtml
+++ b/app/code/Magento/Backend/view/adminhtml/templates/widget/grid/extended.phtml
@@ -255,6 +255,12 @@ $numColumns = sizeof($block->getColumns());
 
     deps.push('mage/adminhtml/grid');
 
+    <?php if (is_array($block->getRequireJsDependencies())): ?>
+        <?php foreach ($block->getRequireJsDependencies() as $dependency): ?>
+            deps.push('<?php /* @escapeNotVerified */ echo $dependency; ?>');
+        <?php endforeach; ?>
+    <?php endif; ?>
+
     require(deps, function(<?php echo ($block->getDependencyJsObject() ? 'registry' : '') ?>){
         <?php //TODO: getJsObjectName and getRowClickCallback has unexpected behavior. Should be removed ?>
 
diff --git a/app/code/Magento/Backup/Controller/Adminhtml/Index/Rollback.php b/app/code/Magento/Backup/Controller/Adminhtml/Index/Rollback.php
index b2e8de61ed3ecff6308546fcba847e25d18afb8a..fdb4714f0ac8c57a484a241b74443bd47d6bf9e4 100644
--- a/app/code/Magento/Backup/Controller/Adminhtml/Index/Rollback.php
+++ b/app/code/Magento/Backup/Controller/Adminhtml/Index/Rollback.php
@@ -61,7 +61,7 @@ class Rollback extends \Magento\Backup\Controller\Adminhtml\Index
                 $backup->getName(),
                 false
             )->setResourceModel(
-                $this->_objectManager->create('Magento\Backup\Model\Resource\Db')
+                $this->_objectManager->create('Magento\Backup\Model\ResourceModel\Db')
             );
 
             $this->_coreRegistry->register('backup_manager', $backupManager);
diff --git a/app/code/Magento/Backup/Model/Config/Backend/Cron.php b/app/code/Magento/Backup/Model/Config/Backend/Cron.php
index 298b4e60ba4630033904f5022f423175e8f1beec..133e6ad8636ae2dfdcf36f92f067dbd470b49eb7 100644
--- a/app/code/Magento/Backup/Model/Config/Backend/Cron.php
+++ b/app/code/Magento/Backup/Model/Config/Backend/Cron.php
@@ -33,7 +33,7 @@ class Cron extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param string $runModelPath
      * @param array $data
@@ -43,7 +43,7 @@ class Cron extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         $runModelPath = '',
         array $data = []
diff --git a/app/code/Magento/Backup/Model/Db.php b/app/code/Magento/Backup/Model/Db.php
index b0bed96f52018af44772b237f32aa4327b365744..1928f1e12a6f1089e8eef7fe717a2cf49c5a71e0 100644
--- a/app/code/Magento/Backup/Model/Db.php
+++ b/app/code/Magento/Backup/Model/Db.php
@@ -21,24 +21,24 @@ class Db implements \Magento\Framework\Backup\Db\BackupDbInterface
     /**
      * Backup resource model
      *
-     * @var \Magento\Backup\Model\Resource\Db
+     * @var \Magento\Backup\Model\ResourceModel\Db
      */
     protected $_resourceDb = null;
 
     /**
      * Core resource model
      *
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource = null;
 
     /**
-     * @param \Magento\Backup\Model\Resource\Db $resourceDb
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Backup\Model\ResourceModel\Db $resourceDb
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
     public function __construct(
-        \Magento\Backup\Model\Resource\Db $resourceDb,
-        \Magento\Framework\App\Resource $resource
+        \Magento\Backup\Model\ResourceModel\Db $resourceDb,
+        \Magento\Framework\App\ResourceConnection $resource
     ) {
         $this->_resourceDb = $resourceDb;
         $this->_resource = $resource;
@@ -54,7 +54,7 @@ class Db implements \Magento\Framework\Backup\Db\BackupDbInterface
     /**
      * Retrieve resource model
      *
-     * @return \Magento\Backup\Model\Resource\Db
+     * @return \Magento\Backup\Model\ResourceModel\Db
      */
     public function getResource()
     {
diff --git a/app/code/Magento/Backup/Model/Resource/Db.php b/app/code/Magento/Backup/Model/ResourceModel/Db.php
similarity index 94%
rename from app/code/Magento/Backup/Model/Resource/Db.php
rename to app/code/Magento/Backup/Model/ResourceModel/Db.php
index 3365ec76abe1aef96d9234d6bd5bfa5c7b81561e..2dbc88248c1c5663b90bfe73b474a5925342c870 100644
--- a/app/code/Magento/Backup/Model/Resource/Db.php
+++ b/app/code/Magento/Backup/Model/ResourceModel/Db.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Backup\Model\Resource;
+namespace Magento\Backup\Model\ResourceModel;
 
 /**
  * Database backup resource model
@@ -28,19 +28,19 @@ class Db
     /**
      * Backup resource helper
      *
-     * @var \Magento\Backup\Model\Resource\Helper
+     * @var \Magento\Backup\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
     /**
      * Initialize Backup DB resource model
      *
-     * @param \Magento\Backup\Model\Resource\HelperFactory $resHelperFactory
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Backup\Model\ResourceModel\HelperFactory $resHelperFactory
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
     public function __construct(
-        \Magento\Backup\Model\Resource\HelperFactory $resHelperFactory,
-        \Magento\Framework\App\Resource $resource
+        \Magento\Backup\Model\ResourceModel\HelperFactory $resHelperFactory,
+        \Magento\Framework\App\ResourceConnection $resource
     ) {
         $this->_resourceHelper = $resHelperFactory->create();
         $this->connection = $resource->getConnection('backup');
diff --git a/app/code/Magento/Backup/Model/Resource/Helper.php b/app/code/Magento/Backup/Model/ResourceModel/Helper.php
similarity index 98%
rename from app/code/Magento/Backup/Model/Resource/Helper.php
rename to app/code/Magento/Backup/Model/ResourceModel/Helper.php
index 92ec67f11cb7b4565f9efe9b2cdf0950f01fa99b..42c3fc8bdf2c514b0e757163fe2e751358b6e0b1 100644
--- a/app/code/Magento/Backup/Model/Resource/Helper.php
+++ b/app/code/Magento/Backup/Model/ResourceModel/Helper.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Backup\Model\Resource;
+namespace Magento\Backup\Model\ResourceModel;
 
 class Helper extends \Magento\Framework\DB\Helper
 {
@@ -26,12 +26,12 @@ class Helper extends \Magento\Framework\DB\Helper
     protected $_coreDate;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param string $modulePrefix
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         $modulePrefix,
         \Magento\Framework\Stdlib\DateTime\DateTime $coreDate
     ) {
diff --git a/app/code/Magento/Backup/etc/di.xml b/app/code/Magento/Backup/etc/di.xml
index 8fa192d73d2b06697c876234512ce12311d2f76d..c667eb16ccf2d3e9df621ee0a361e833c43a6fdb 100644
--- a/app/code/Magento/Backup/etc/di.xml
+++ b/app/code/Magento/Backup/etc/di.xml
@@ -12,7 +12,7 @@
             <argument name="backupDbInstanceName" xsi:type="string">Magento\Backup\Model\Db</argument>
         </arguments>
     </type>
-    <type name="Magento\Backup\Model\Resource\Helper">
+    <type name="Magento\Backup\Model\ResourceModel\Helper">
         <arguments>
             <argument name="modulePrefix" xsi:type="string">backup</argument>
         </arguments>
diff --git a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
index b8e7ba06b8b9ee28b96feef769df14b3e6eaac7e..dc04861bece01c82873359970b919a2f78647b08 100644
--- a/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
+++ b/app/code/Magento/Backup/view/adminhtml/templates/backup/dialogs.phtml
@@ -62,42 +62,45 @@
             <div class="popup-content">
                 <div class="backup-messages" style="display: none;"><div class="messages"></div></div>
                 <div class="messages">
-                    <div class="message message-warning"><?php /* @escapeNotVerified */ echo __('Please specify backup creation option.')?></div>
+                    <div class="message message-warning">
+                        <?php /* @escapeNotVerified */ echo __('This may take a few moments.')?>
+                        <?php /* @escapeNotVerified */ echo __('Be sure your store is in maintenance mode during backup.')?></div>
                 </div>
                 <form action="" method="post" id="backup-form" class="form-inline">
-                    <fieldset class="fieldset form-list question">
-                        <div class="field">
-                            <label for="backup_name" class="label"><span><?php /* @escapeNotVerified */ echo __('Backup Name')?></span></label>
-                            <div class="control">
+                    <fieldset class="admin__fieldset form-list question">
+                        <div class="admin__field field _required">
+                            <label for="backup_name" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Backup Name')?></span></label>
+                            <div class="admin__field-control">
                                 <input type="text" name="backup_name" id="backup_name"
-                                       class="required-entry validate-alphanum-with-spaces validate-length maximum-length-50"
+                                       class="admin__control-text required-entry validate-alphanum-with-spaces validate-length maximum-length-50"
                                        maxlength="50" />
-                                <div class="note">
+                                <div class="admin__field-note">
                                     <?php /* @escapeNotVerified */ echo __('Please use only letters (a-z or A-Z), numbers (0-9) or spaces in this field.'); ?>
                                 </div>
                             </div>
                         </div>
 
-                        <div class="field maintenance-checkbox-container">
-                            <div class="control">
-                                <input type="checkbox" name="maintenance_mode" value="1" id="backup_maintenance_mode"/>
-                                <label for="backup_maintenance_mode"><?php /* @escapeNotVerified */ echo __('Please put your store into maintenance mode during backup.')?></label>
+                        <div class="admin__field field maintenance-checkbox-container">
+                            <label for="backup_maintenance_mode" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Maintenance mode')?></span></label>
+                            <div class="admin__field-control">
+                                <div class="admin__field-option">
+                                    <input class="admin__control-checkbox" type="checkbox" name="maintenance_mode" value="1" id="backup_maintenance_mode"/>
+                                    <label class="admin__field-label" for="backup_maintenance_mode"><?php /* @escapeNotVerified */ echo __('Please put your store into maintenance mode during backup.')?></label>
+                                </div>
                             </div>
                         </div>
 
-                        <div class="field maintenance-checkbox-container" id="exclude-media-checkbox-container" style="display: none;">
-                            <div class="control">
-                                <input type="checkbox" name="exclude_media" value="1" id="exclude_media"/>
-                                <label for="exclude_media"><?php /* @escapeNotVerified */ echo __('Exclude media folder from backup') ?></label>
+                        <div class="admin__field field maintenance-checkbox-container" id="exclude-media-checkbox-container" style="display: none;">
+                            <label for="exclude_media" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Exclude')?></span></label>
+                            <div class="admin__field-control">
+                                <div class="admin__field-option">
+                                    <input class="admin__control-checkbox" type="checkbox" name="exclude_media" value="1" id="exclude_media"/>
+                                    <label class="admin__field-label" for="exclude_media"><?php /* @escapeNotVerified */ echo __('Exclude media folder from backup') ?></label>
+                                </div>
                             </div>
                         </div>
                     </fieldset>
                 </form>
-
-                <div class="actions">
-                    <button type="button" class="action primary" data-mage-init='{"button":{"event":"submit","target":"#backup-form"}}'><?php /* @escapeNotVerified */ echo __('OK')?></button>
-                    <button type="button" class="action cancel" onclick="backup.hidePopups()"><?php /* @escapeNotVerified */ echo __('Cancel')?></button>
-                </div>
             </div>
         </div>
     </div>
@@ -158,11 +161,6 @@
                         </fieldset>
                     </div>
                 </form>
-
-                <div class="actions">
-                    <button type="button" class="action primary" data-mage-init='{"button":{"event":"submit","target":"#rollback-form"}}'><?php /* @escapeNotVerified */ echo __('OK')?></button>
-                    <button type="button" class="action cancel" onclick="backup.hidePopups()"><?php /* @escapeNotVerified */ echo __('Cancel')?></button>
-                </div>
             </div>
         </div>
     </div>
diff --git a/app/code/Magento/Braintree/Block/Adminhtml/Form/Field/Countries.php b/app/code/Magento/Braintree/Block/Adminhtml/Form/Field/Countries.php
index 11cecace220cc7ea8bc2f3dacdec6a820e532266..81244111e907dc122cb421df2eabfb11c58b0d15 100644
--- a/app/code/Magento/Braintree/Block/Adminhtml/Form/Field/Countries.php
+++ b/app/code/Magento/Braintree/Block/Adminhtml/Form/Field/Countries.php
@@ -20,7 +20,7 @@ class Countries extends \Magento\Framework\View\Element\Html\Select
     protected $countrySource;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Country\CollectionFactory
      */
     protected $countryCollectionFactory;
 
@@ -29,13 +29,13 @@ class Countries extends \Magento\Framework\View\Element\Html\Select
      *
      * @param \Magento\Framework\View\Element\Context $context
      * @param \Magento\Braintree\Model\System\Config\Source\Country $countrySource
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Context $context,
         \Magento\Braintree\Model\System\Config\Source\Country $countrySource,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
         array $data = []
     ) {
         parent::__construct($context, $data);
diff --git a/app/code/Magento/Braintree/Block/Creditcard/Management.php b/app/code/Magento/Braintree/Block/Creditcard/Management.php
index 15a9c10dcd92864d6d4d8ddf4bd4e406f9b302f1..6f5037cf4c5404b8904e3c2d67ccf178592229c8 100644
--- a/app/code/Magento/Braintree/Block/Creditcard/Management.php
+++ b/app/code/Magento/Braintree/Block/Creditcard/Management.php
@@ -37,7 +37,7 @@ class Management extends \Magento\Framework\View\Element\Template
     protected $customer;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
      */
     protected $regionCollectionFactory;
 
@@ -60,7 +60,7 @@ class Management extends \Magento\Framework\View\Element\Template
      * Constructor
      *
      * @param \Magento\Framework\View\Element\Template\Context $context
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
      * @param \Magento\Payment\Model\Config $paymentConfig
      * @param \Magento\Braintree\Model\Vault $vault
      * @param \Magento\Braintree\Model\Config\Cc $config
@@ -73,7 +73,7 @@ class Management extends \Magento\Framework\View\Element\Template
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
         \Magento\Payment\Model\Config $paymentConfig,
         \Magento\Braintree\Model\Vault $vault,
         \Magento\Braintree\Model\Config\Cc $config,
diff --git a/app/code/Magento/Braintree/Block/Directory/Data.php b/app/code/Magento/Braintree/Block/Directory/Data.php
index ad451b1b9626102258425df073f8e7aaa34ed358..86f7c2312a979076b61f0d7cdb775ccd9ea5dca4 100644
--- a/app/code/Magento/Braintree/Block/Directory/Data.php
+++ b/app/code/Magento/Braintree/Block/Directory/Data.php
@@ -27,8 +27,8 @@ class Data extends \Magento\Directory\Block\Data
      * @param \Magento\Directory\Helper\Data $directoryHelper
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
      * @param \Magento\Braintree\Helper\Data $braintreeHelper
      * @param \Magento\Braintree\Model\System\Config\Source\Country $countrySource
      * @param \Magento\Braintree\Model\Config\Cc $config
@@ -41,8 +41,8 @@ class Data extends \Magento\Directory\Block\Data
         \Magento\Directory\Helper\Data $directoryHelper,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
         \Magento\Framework\App\Cache\Type\Config $configCacheType,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
         \Magento\Braintree\Helper\Data $braintreeHelper,
         \Magento\Braintree\Model\System\Config\Source\Country $countrySource,
         \Magento\Braintree\Model\Config\Cc $config,
@@ -97,7 +97,7 @@ class Data extends \Magento\Directory\Block\Data
     /**
      * Loads country collection
      *
-     * @return \Magento\Directory\Model\Resource\Country\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     public function getCountryCollection()
     {
diff --git a/app/code/Magento/Braintree/Block/PayPal/Shortcut.php b/app/code/Magento/Braintree/Block/PayPal/Shortcut.php
index dfb20982e85ae27bc82e91dfea065d6d6708baaa..917265a948f7948aa86e1c1bd472c3176c9eacc6 100644
--- a/app/code/Magento/Braintree/Block/PayPal/Shortcut.php
+++ b/app/code/Magento/Braintree/Block/PayPal/Shortcut.php
@@ -15,6 +15,14 @@ use Magento\Braintree\Model\Config\PayPal as PayPalConfig;
  */
 class Shortcut extends \Magento\Framework\View\Element\Template implements CatalogBlock\ShortcutInterface
 {
+    /**
+     * Key for the flag of mini cart
+     */
+    const MINI_CART_FLAG_KEY = 'is_in_mini_cart';
+
+    /**
+     * Default template name
+     */
     const PAYPAL_SHORTCUT_TEMPLATE = 'PayPal/shortcut.phtml';
 
     /**
@@ -88,9 +96,17 @@ class Shortcut extends \Magento\Framework\View\Element\Template implements Catal
     /**
      * @return bool
      */
-    protected function isInMiniCart()
+    public function isInMiniCart()
+    {
+        return (bool)$this->getData(self::MINI_CART_FLAG_KEY);
+    }
+
+    /**
+     * @return string
+     */
+    public function getButtonDataUrl()
     {
-        return ($this->getContainer()->getModuleName() == 'Magento_Catalog');
+        return $this->_urlBuilder->getUrl('braintree/paypal/getbuttondata');
     }
 
     /**
diff --git a/app/code/Magento/Braintree/Controller/PayPal/GetButtonData.php b/app/code/Magento/Braintree/Controller/PayPal/GetButtonData.php
new file mode 100644
index 0000000000000000000000000000000000000000..4d070aa489d2cd0a0c944156625d175f9eca4950
--- /dev/null
+++ b/app/code/Magento/Braintree/Controller/PayPal/GetButtonData.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Braintree\Controller\PayPal;
+
+use Magento\Checkout\Model\Session;
+use Magento\Framework\App\Action\Context;
+use Magento\Framework\Controller\ResultFactory;
+use Magento\Framework\Controller\ResultInterface;
+use Magento\Framework\Exception\LocalizedException;
+
+/**
+ * Class GetButtonData
+ */
+class GetButtonData extends \Magento\Framework\App\Action\Action
+{
+    /**
+     * @var Session
+     */
+    private $checkoutSession;
+
+    /**
+     * Constructor
+     *
+     * @param Context $context
+     * @param Session $checkoutSession
+     */
+    public function __construct(Context $context, Session $checkoutSession)
+    {
+        parent::__construct($context);
+        $this->checkoutSession = $checkoutSession;
+    }
+
+    /**
+     * @return ResultInterface
+     * @throws LocalizedException
+     */
+    public function execute()
+    {
+        $isAjax = $this->_request->getParam('isAjax');
+
+        if (!$isAjax) {
+            throw new LocalizedException(__('Wrong type of request.'));
+        }
+
+        $items = $this->checkoutSession->getQuote()->getAllItems();
+        $response = [
+            'isEmpty' => 0 === count($items),
+            'amount' => $this->checkoutSession->getQuote()->getBaseGrandTotal(),
+            'currency' => $this->checkoutSession->getQuote()->getCurrency()->getBaseCurrencyCode(),
+        ];
+
+        /** @var \Magento\Framework\Controller\Result\Json $resultJson */
+        $resultJson = $this->resultFactory->create(ResultFactory::TYPE_JSON);
+        $resultJson->setData($response);
+
+        return $resultJson;
+    }
+}
diff --git a/app/code/Magento/Braintree/Model/Config/Cc.php b/app/code/Magento/Braintree/Model/Config/Cc.php
index 4aee3f4e0b9ef2449f902affbb4fa98cc6dbcad5..fcae6bb32a4622db09010defa4d3a073f63f9159 100644
--- a/app/code/Magento/Braintree/Model/Config/Cc.php
+++ b/app/code/Magento/Braintree/Model/Config/Cc.php
@@ -14,7 +14,7 @@ use \Braintree_Configuration;
 use \Braintree_Result_Successful;
 use \Braintree_ClientToken;
 use Magento\Framework\Exception\LocalizedException;
-use Magento\Sales\Model\Resource\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
 use Magento\Sales\Model\Order\Payment\Transaction as PaymentTransaction;
 use Magento\Payment\Model\InfoInterface;
 
@@ -48,7 +48,7 @@ class Cc extends \Magento\Braintree\Model\Config
     protected $customerFactory;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
      */
     protected $countryFactory;
 
diff --git a/app/code/Magento/Braintree/Model/PaymentMethod.php b/app/code/Magento/Braintree/Model/PaymentMethod.php
index e8c8627c5648755084836bd15f0c50333d907a44..8e14ed191e350097a62984c7570d667c149a077b 100644
--- a/app/code/Magento/Braintree/Model/PaymentMethod.php
+++ b/app/code/Magento/Braintree/Model/PaymentMethod.php
@@ -11,7 +11,7 @@ use \Braintree_Exception;
 use \Braintree_Transaction;
 use \Braintree_Result_Successful;
 use Magento\Framework\Exception\LocalizedException;
-use Magento\Sales\Model\Resource\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
 use Magento\Sales\Model\Order\Payment\Transaction as PaymentTransaction;
 use Magento\Payment\Model\InfoInterface;
 
@@ -161,6 +161,11 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
      */
     protected $braintreeCreditCard;
 
+    /**
+     * @var \Magento\Sales\Api\OrderRepositoryInterface
+     */
+    protected $orderRepository;
+
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
@@ -181,7 +186,8 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
      * @param TransactionCollectionFactory $salesTransactionCollectionFactory
      * @param \Magento\Framework\App\ProductMetadataInterface $productMetaData
      * @param \Magento\Directory\Model\RegionFactory $regionFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
+     * @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -206,7 +212,8 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
         TransactionCollectionFactory $salesTransactionCollectionFactory,
         \Magento\Framework\App\ProductMetadataInterface $productMetaData,
         \Magento\Directory\Model\RegionFactory $regionFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -234,6 +241,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
         $this->salesTransactionCollectionFactory = $salesTransactionCollectionFactory;
         $this->productMetaData = $productMetaData;
         $this->regionFactory = $regionFactory;
+        $this->orderRepository = $orderRepository;
     }
 
     /**
@@ -521,7 +529,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
 
     /**
      * @param InfoInterface $payment
-     * @param float $amount
+     * @param string $amount
      * @return $this
      * @throws LocalizedException
      */
@@ -574,13 +582,14 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
      * Captures specified amount
      *
      * @param InfoInterface $payment
-     * @param float $amount
+     * @param string $amount
      * @return $this
      * @throws LocalizedException
      */
     public function capture(InfoInterface $payment, $amount)
     {
         try {
+            /** @var \Magento\Sales\Model\Order\Payment $payment */
             if ($payment->getCcTransId()) {
                 $collection = $this->salesTransactionCollectionFactory->create()
                     ->addFieldToFilter('payment_id', $payment->getId())
@@ -592,8 +601,11 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
                     $this->_debug([$payment->getCcTransId().' - '.$amount]);
                     $this->_debug($this->_convertObjToArray($result));
                     if ($result->success) {
-                        $payment->setIsTransactionClosed(0)
+                        $payment->setIsTransactionClosed(false)
                             ->setShouldCloseParentTransaction(false);
+                        if ($this->isFinalCapture($payment->getParentId(), $amount)) {
+                            $payment->setShouldCloseParentTransaction(true);
+                        }
                     } else {
                         throw new LocalizedException($this->errorHelper->parseBraintreeError($result));
                     }
@@ -643,7 +655,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
                 : $this->braintreeTransaction->refund($transactionId, $amount);
             $this->_debug($this->_convertObjToArray($result));
             if ($result->success) {
-                $payment->setIsTransactionClosed(1);
+                $payment->setIsTransactionClosed(true);
             } else {
                 throw new LocalizedException($this->errorHelper->parseBraintreeError($result));
             }
@@ -733,7 +745,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
                 }
             }
             if ($match) {
-                $payment->setIsTransactionClosed(1);
+                $payment->setIsTransactionClosed(true);
             }
         }
         return $this;
@@ -872,7 +884,7 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
      *
      * @param \Magento\Framework\DataObject $payment
      * @param \Braintree_Result_Successful $result
-     * @param float $amount
+     * @param string $amount
      * @return \Magento\Framework\DataObject
      */
     protected function processSuccessResult(
@@ -880,15 +892,19 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
         \Braintree_Result_Successful $result,
         $amount
     ) {
+        /** @var \Magento\Sales\Model\Order\Payment $payment */
         $payment->setStatus(self::STATUS_APPROVED)
             ->setCcTransId($result->transaction->id)
             ->setLastTransId($result->transaction->id)
             ->setTransactionId($result->transaction->id)
-            ->setIsTransactionClosed(0)
+            ->setIsTransactionClosed(false)
             ->setCcLast4($result->transaction->creditCardDetails->last4)
             ->setAdditionalInformation($this->getExtraTransactionInformation($result->transaction))
             ->setAmount($amount)
             ->setShouldCloseParentTransaction(false);
+        if ($this->isFinalCapture($payment->getParentId(), $amount)) {
+            $payment->setShouldCloseParentTransaction(true);
+        }
         if (isset($result->transaction->creditCard['token']) && $result->transaction->creditCard['token']) {
             $payment->setTransactionAdditionalInfo('token', $result->transaction->creditCard['token']);
         }
@@ -945,4 +961,21 @@ class PaymentMethod extends \Magento\Payment\Model\Method\Cc
     {
         return json_decode(json_encode($data), true);
     }
+
+    /**
+     * Checks whether the capture is final
+     *
+     * @param string $orderId
+     * @param string $amount
+     * @return bool
+     */
+    protected function isFinalCapture($orderId, $amount)
+    {
+        if (!empty($orderId)) {
+            $order = $this->orderRepository->get($orderId);
+            return (float)$order->getTotalDue() === (float) $amount;
+        }
+
+        return false;
+    }
 }
diff --git a/app/code/Magento/Braintree/Model/PaymentMethod/PayPal.php b/app/code/Magento/Braintree/Model/PaymentMethod/PayPal.php
index 3c89c87077a0832294c5b5b6dbdbe0e3bc890950..50200468ff8560426fd3689436bcac8b01c1dcd2 100644
--- a/app/code/Magento/Braintree/Model/PaymentMethod/PayPal.php
+++ b/app/code/Magento/Braintree/Model/PaymentMethod/PayPal.php
@@ -14,7 +14,7 @@ use Magento\Framework\Exception\LocalizedException;
 use Magento\Braintree\Model\PaymentMethod;
 use Magento\Payment\Model\InfoInterface;
 use Magento\Braintree\Model\Vault;
-use Magento\Sales\Model\Resource\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
 
 /**
  * Class PayPal
@@ -66,9 +66,9 @@ class PayPal extends \Magento\Braintree\Model\PaymentMethod
      * @param TransactionCollectionFactory $salesTransactionCollectionFactory
      * @param \Magento\Framework\App\ProductMetadataInterface $productMetaData
      * @param \Magento\Directory\Model\RegionFactory $regionFactory
+     * @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository
      * @param \Magento\Braintree\Model\Config\PayPal $payPalConfig
-     * @param BraintreeTransaction $braintreeTransaction
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -93,8 +93,9 @@ class PayPal extends \Magento\Braintree\Model\PaymentMethod
         TransactionCollectionFactory $salesTransactionCollectionFactory,
         \Magento\Framework\App\ProductMetadataInterface $productMetaData,
         \Magento\Directory\Model\RegionFactory $regionFactory,
+        \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
         \Magento\Braintree\Model\Config\PayPal $payPalConfig,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -118,6 +119,7 @@ class PayPal extends \Magento\Braintree\Model\PaymentMethod
             $salesTransactionCollectionFactory,
             $productMetaData,
             $regionFactory,
+            $orderRepository,
             $resource,
             $resourceCollection,
             $data
@@ -232,7 +234,7 @@ class PayPal extends \Magento\Braintree\Model\PaymentMethod
             ->setCcTransId($result->transaction->id)
             ->setLastTransId($result->transaction->id)
             ->setTransactionId($result->transaction->id)
-            ->setIsTransactionClosed(0)
+            ->setIsTransactionClosed(false)
             ->setAdditionalInformation($additionalInformation)
             ->setAmount($amount)
             ->setShouldCloseParentTransaction(false);
@@ -288,13 +290,14 @@ class PayPal extends \Magento\Braintree\Model\PaymentMethod
     public function capture(InfoInterface $payment, $amount)
     {
         try {
+            /** @var \Magento\Sales\Model\Order\Payment $payment */
             if ($payment->getCcTransId()) {
                 $result = $this->braintreeTransaction->submitForSettlement($payment->getCcTransId(), $amount);
                 $this->_debug([$payment->getCcTransId().' - '.$amount]);
                 $this->_debug($this->_convertObjToArray($result));
                 if ($result->success) {
-                    $payment->setIsTransactionClosed(0)
-                        ->setShouldCloseParentTransaction(false);
+                    $payment->setIsTransactionClosed(false)
+                        ->setShouldCloseParentTransaction(true);
                 } else {
                     throw new LocalizedException($this->errorHelper->parseBraintreeError($result));
                 }
diff --git a/app/code/Magento/Braintree/Model/Plugin/Sales/Order/PaymentPlugin.php b/app/code/Magento/Braintree/Model/Plugin/Sales/Order/PaymentPlugin.php
index 792be46de674b1bd316e4def27b50d60d291b13e..0e48c848dc1474d2dd4c4c02c9cc35809f471985 100644
--- a/app/code/Magento/Braintree/Model/Plugin/Sales/Order/PaymentPlugin.php
+++ b/app/code/Magento/Braintree/Model/Plugin/Sales/Order/PaymentPlugin.php
@@ -7,7 +7,7 @@ namespace Magento\Braintree\Model\Plugin\Sales\Order;
 
 use Magento\Braintree\Model\PaymentMethod;
 use Magento\Sales\Model\Order\Payment;
-use Magento\Sales\Model\Resource\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
 use Magento\Sales\Model\Order\Payment\Transaction as PaymentTransaction;
 
 class PaymentPlugin
diff --git a/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php b/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php
index df785c506fdfb36485afb542d878835b900246f1..7e234209d001fe8b21439b3f755f2434e791678c 100644
--- a/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php
+++ b/app/code/Magento/Braintree/Model/System/Config/Backend/Countrycreditcard.php
@@ -17,7 +17,7 @@ class Countrycreditcard extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Math\Random $mathRandom
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -26,7 +26,7 @@ class Countrycreditcard extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Math\Random $mathRandom,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Braintree/Model/System/Config/Source/Country.php b/app/code/Magento/Braintree/Model/System/Config/Source/Country.php
index f1ab26a51a2cb003a342a7c53d8fab9e6415fc90..619c29752f57afac7d88a6eb8816122233b5578b 100644
--- a/app/code/Magento/Braintree/Model/System/Config/Source/Country.php
+++ b/app/code/Magento/Braintree/Model/System/Config/Source/Country.php
@@ -15,7 +15,7 @@ class Country implements \Magento\Framework\Option\ArrayInterface
     /**
      * Countries
      *
-     * @var \Magento\Directory\Model\Resource\Country\Collection
+     * @var \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     protected $countryCollection;
 
@@ -28,9 +28,9 @@ class Country implements \Magento\Framework\Option\ArrayInterface
     ];
 
     /**
-     * @param \Magento\Directory\Model\Resource\Country\Collection $countryCollection
+     * @param \Magento\Directory\Model\ResourceModel\Country\Collection $countryCollection
      */
-    public function __construct(\Magento\Directory\Model\Resource\Country\Collection $countryCollection)
+    public function __construct(\Magento\Directory\Model\ResourceModel\Country\Collection $countryCollection)
     {
         $this->countryCollection = $countryCollection;
     }
diff --git a/app/code/Magento/Braintree/Model/Vault.php b/app/code/Magento/Braintree/Model/Vault.php
index 1c57b6ec7882bb9b80dbacf0f59a6cb87bc1b0e0..c485f272d069f568aa39d4401f0b10c36887c61c 100644
--- a/app/code/Magento/Braintree/Model/Vault.php
+++ b/app/code/Magento/Braintree/Model/Vault.php
@@ -41,7 +41,7 @@ class Vault
     protected $customerFactory;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Country\CollectionFactory
      */
     protected $countryFactory;
 
@@ -86,7 +86,7 @@ class Vault
      * @param BraintreeCustomer $braintreeCustomer
      * @param BraintreeCreditCard $braintreeCreditCard
      * @param BraintreePaymentMethod $braintreePaymentMethod
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryFactory
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
@@ -100,7 +100,7 @@ class Vault
         BraintreeCustomer $braintreeCustomer,
         BraintreeCreditCard $braintreeCreditCard,
         BraintreePaymentMethod $braintreePaymentMethod,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryFactory
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryFactory
     ) {
         $this->config = $config;
         $this->braintreeHelper = $braintreeHelper;
diff --git a/app/code/Magento/Braintree/Observer/AddPaypalShortcuts.php b/app/code/Magento/Braintree/Observer/AddPaypalShortcuts.php
index 4edd4491b06786890dac745987b61f29dee8d41d..fb4efd7bf9b59e99ffde4c2519e3ed035e587918 100644
--- a/app/code/Magento/Braintree/Observer/AddPaypalShortcuts.php
+++ b/app/code/Magento/Braintree/Observer/AddPaypalShortcuts.php
@@ -6,6 +6,7 @@
 namespace Magento\Braintree\Observer;
 
 use Magento\Framework\Event\ObserverInterface;
+use Magento\Braintree\Block\PayPal\Shortcut;
 
 class AddPaypalShortcuts implements ObserverInterface
 {
@@ -43,21 +44,20 @@ class AddPaypalShortcuts implements ObserverInterface
     {
         //Don't display shortcut on product view page
         if (!$this->methodPayPal->isActive() ||
-            !$this->paypalConfig->isShortcutCheckoutEnabled() ||
-            $observer->getEvent()->getIsCatalogProduct()) {
+            !$this->paypalConfig->isShortcutCheckoutEnabled()) {
             return;
         }
 
         /** @var \Magento\Catalog\Block\ShortcutButtons $shortcutButtons */
         $shortcutButtons = $observer->getEvent()->getContainer();
 
-        /** @var \Magento\Braintree\Block\PayPal\Shortcut $shortcut */
+        /** @var Shortcut $shortcut */
         $shortcut = $shortcutButtons->getLayout()->createBlock(
             self::PAYPAL_SHORTCUT_BLOCK,
             '',
             [
                 'data' => [
-                    'container' => $shortcutButtons,
+                    Shortcut::MINI_CART_FLAG_KEY => !$observer->getEvent()->getIsCatalogProduct()
                 ]
             ]
         );
@@ -65,9 +65,7 @@ class AddPaypalShortcuts implements ObserverInterface
         if ($shortcut->skipShortcutForGuest()) {
             return;
         }
-        $shortcut->setShowOrPosition(
-            $observer->getEvent()->getOrPosition()
-        );
+        $shortcut->setShowOrPosition($observer->getEvent()->getOrPosition());
         $shortcutButtons->addShortcut($shortcut);
     }
 }
diff --git a/app/code/Magento/Braintree/Test/Unit/Block/Adminhtml/Form/Field/CountriesTest.php b/app/code/Magento/Braintree/Test/Unit/Block/Adminhtml/Form/Field/CountriesTest.php
index f28f026ea1c50e9fea01d1b78664a46e0e653b9c..68b4365f0a2871f48dffbd6f075362e0376635d9 100644
--- a/app/code/Magento/Braintree/Test/Unit/Block/Adminhtml/Form/Field/CountriesTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Block/Adminhtml/Form/Field/CountriesTest.php
@@ -15,12 +15,12 @@ class CountriesTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $countryCollectionFactoryMock = $this->getMockBuilder(
-            '\Magento\Directory\Model\Resource\Country\CollectionFactory'
+            '\Magento\Directory\Model\ResourceModel\Country\CollectionFactory'
         )->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
 
-        $countryCollectionMock = $this->getMockBuilder('\Magento\Directory\Model\Resource\Country\Collection')
+        $countryCollectionMock = $this->getMockBuilder('\Magento\Directory\Model\ResourceModel\Country\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['addFieldToFilter', 'loadData', 'toOptionArray'])
             ->getMock();
diff --git a/app/code/Magento/Braintree/Test/Unit/Block/Creditcard/ManagementTest.php b/app/code/Magento/Braintree/Test/Unit/Block/Creditcard/ManagementTest.php
index e232c6b43f0860f7acb0a6672f5d832cb3fa335f..f6727156bc34de0aa7229fc2b1a520e245bbb344 100644
--- a/app/code/Magento/Braintree/Test/Unit/Block/Creditcard/ManagementTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Block/Creditcard/ManagementTest.php
@@ -27,7 +27,7 @@ class ManagementTest extends \PHPUnit_Framework_TestCase
     protected $objectManagerHelper;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Region\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $regionCollectionFactoryMock;
 
@@ -79,7 +79,7 @@ class ManagementTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->regionCollectionFactoryMock = $this->getMockBuilder(
-            '\Magento\Directory\Model\Resource\Region\CollectionFactory'
+            '\Magento\Directory\Model\ResourceModel\Region\CollectionFactory'
         )->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -218,7 +218,7 @@ class ManagementTest extends \PHPUnit_Framework_TestCase
         $countryId = 'US';
         $regionId = 57;
 
-        $regionCollectionMock = $this->getMockBuilder('\Magento\Directory\Model\Resource\Region\Collection')
+        $regionCollectionMock = $this->getMockBuilder('\Magento\Directory\Model\ResourceModel\Region\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->regionCollectionFactoryMock->expects($this->once())
diff --git a/app/code/Magento/Braintree/Test/Unit/Block/Directory/DataTest.php b/app/code/Magento/Braintree/Test/Unit/Block/Directory/DataTest.php
index 465d8ddec120f4daee24730c9ee86fe8db39af69..46440a1e795a855ccde8d008efe9263eaeaf4c78 100644
--- a/app/code/Magento/Braintree/Test/Unit/Block/Directory/DataTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Block/Directory/DataTest.php
@@ -16,12 +16,12 @@ class DataTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $countryCollectionFactoryMock = $this->getMockBuilder(
-            '\Magento\Directory\Model\Resource\Country\CollectionFactory'
+            '\Magento\Directory\Model\ResourceModel\Country\CollectionFactory'
         )->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
 
-        $countryCollectionMock = $this->getMockBuilder('\Magento\Directory\Model\Resource\Country\Collection')
+        $countryCollectionMock = $this->getMockBuilder('\Magento\Directory\Model\ResourceModel\Country\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['addFieldToFilter', 'loadByStore'])
             ->getMock();
diff --git a/app/code/Magento/Braintree/Test/Unit/Block/PayPal/ShortcutTest.php b/app/code/Magento/Braintree/Test/Unit/Block/PayPal/ShortcutTest.php
index 0f137cc65cf43de4a8dfd3fa44825d70129074af..a7392181a1a9b2d1ffa0032dc527a55d1188d42f 100644
--- a/app/code/Magento/Braintree/Test/Unit/Block/PayPal/ShortcutTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Block/PayPal/ShortcutTest.php
@@ -5,6 +5,11 @@
  */
 namespace Magento\Braintree\Test\Unit\Block\PayPal;
 
+use Magento\Braintree\Block\PayPal\Shortcut;
+
+/**
+ * Class ShortcutTest
+ */
 class ShortcutTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -48,7 +53,7 @@ class ShortcutTest extends \PHPUnit_Framework_TestCase
     protected $container;
 
     /**
-     * @var \Magento\Braintree\Block\PayPal\Shortcut
+     * @var Shortcut
      */
     protected $block;
 
@@ -256,11 +261,7 @@ class ShortcutTest extends \PHPUnit_Framework_TestCase
             'Magento\Braintree\Block\PayPal\Shortcut',
             [
                 'data' => [
-                    'container' => new \Magento\Framework\DataObject(
-                        [
-                            'module_name' => 'Magento_Catalog',
-                        ]
-                    )
+                    Shortcut::MINI_CART_FLAG_KEY => 1
                 ]
             ]
         );
@@ -283,11 +284,7 @@ class ShortcutTest extends \PHPUnit_Framework_TestCase
             [
                 'mathRandom' => $this->mathRandomMock,
                 'data' => [
-                    'container' => new \Magento\Framework\DataObject(
-                        [
-                            'module_name' => 'Magento_Checkout',
-                        ]
-                    )
+                    Shortcut::MINI_CART_FLAG_KEY => 0
                 ]
             ]
         );
diff --git a/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/GetButtonDataTest.php b/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/GetButtonDataTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..75718aa2f9c35289a65a7230161848539d2db14b
--- /dev/null
+++ b/app/code/Magento/Braintree/Test/Unit/Controller/PayPal/GetButtonDataTest.php
@@ -0,0 +1,190 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Braintree\Test\Unit\Controller\PayPal;
+
+use Magento\Checkout\Model\Session;
+use Magento\Framework\App\Action\Context;
+use Magento\Framework\App\RequestInterface;
+use Magento\Framework\Controller\ResultFactory;
+use Magento\Braintree\Controller\PayPal\GetButtonData;
+
+/**
+ * Class GetButtonDataTest
+ *
+ * @see \Magento\Braintree\Controller\PayPal\GetButtonData
+ */
+class GetButtonDataTest extends \PHPUnit_Framework_TestCase
+{
+    const AMOUNT = 10;
+
+    const CURRENCY = 'USD';
+
+    /**
+     * @var Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $contextMock;
+
+    /**
+     * @var Session|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $checkoutSessionMock;
+
+    /**
+     * Run test for execute method
+     *
+     * @param array $response
+     * @param array $data
+     * @return void
+     *
+     * @dataProvider dataProviderTestExecute
+     */
+    public function testExecute(array $response, array $data)
+    {
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\App\Action\Context')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->contextMock->expects(static::once())
+            ->method('getRequest')
+            ->willReturn($this->getRequestMock(true));
+        $this->contextMock->expects(static::once())
+            ->method('getResultFactory')
+            ->willReturn($this->getResultFactoryMock($response));
+
+        $this->checkoutSessionMock = $this->getMockBuilder('Magento\Checkout\Model\Session')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $quoteMock = $this->getMockBuilder('Magento\Quote\Model\Quote')
+            ->setMethods(['getBaseGrandTotal', 'getAllItems', 'getCurrency'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->checkoutSessionMock->expects(static::exactly(3))
+            ->method('getQuote')
+            ->willReturn($quoteMock);
+
+        $quoteMock->expects(static::once())
+            ->method('getAllItems')
+            ->willReturn($data['items']);
+        $quoteMock->expects(static::once())
+            ->method('getBaseGrandTotal')
+            ->willReturn($data['amount']);
+
+        $currencyMock = $this->getMockBuilder('Magento\Quote\Api\Data\CurrencyInterface')
+            ->getMockForAbstractClass();
+
+        $quoteMock->expects(static::once())
+            ->method('getCurrency')
+            ->willReturn($currencyMock);
+
+        $currencyMock->expects(static::once())
+            ->method('getBaseCurrencyCode')
+            ->willReturn($data['currency']);
+
+        $getButtonData = new GetButtonData($this->contextMock, $this->checkoutSessionMock);
+        $getButtonData->execute();
+    }
+
+    /**
+     * @return array
+     */
+    public function dataProviderTestExecute()
+    {
+        return [
+            [
+                'response' => [
+                    'isEmpty' => false,
+                    'amount' => self::AMOUNT,
+                    'currency' => self::CURRENCY,
+                ],
+                'data' => [
+                    'items' => [1,2,3],
+                    'amount' => self::AMOUNT,
+                    'currency' => self::CURRENCY,
+                ]
+            ],
+            [
+                'response' => [
+                    'isEmpty' => true,
+                    'amount' => 0,
+                    'currency' => self::CURRENCY,
+                ],
+                'data' => [
+                    'items' => [],
+                    'amount' => 0,
+                    'currency' => self::CURRENCY,
+                ]
+            ]
+        ];
+    }
+
+    /**
+     * @param array $response
+     * @return ResultFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    public function getResultFactoryMock(array $response)
+    {
+        $resultFactoryMock = $this->getMockBuilder('Magento\Framework\Controller\ResultFactory')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $resultJsonMock = $this->getMockBuilder('Magento\Framework\Controller\Result\Json')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $resultFactoryMock->expects(static::once())
+            ->method('create')
+            ->with(ResultFactory::TYPE_JSON)
+            ->willReturn($resultJsonMock);
+
+        $resultJsonMock->expects(static::once())
+            ->method('setData')
+            ->with($response);
+
+        return $resultFactoryMock;
+    }
+
+    /**
+     * Run test for execute method (exception)
+     *
+     * @expectedException \Magento\Framework\Exception\LocalizedException
+     * @expectedExceptionMessage Wrong type of request.
+     */
+    public function testExecuteException()
+    {
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\App\Action\Context')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects(static::once())
+            ->method('getRequest')
+            ->willReturn($this->getRequestMock(false));
+
+        $this->checkoutSessionMock = $this->getMockBuilder('Magento\Checkout\Model\Session')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->checkoutSessionMock->expects(static::never())
+        ->method('getQuote');
+
+        $getButtonData = new GetButtonData($this->contextMock, $this->checkoutSessionMock);
+        $getButtonData->execute();
+    }
+
+    /**
+     * @param bool $result
+     * @return RequestInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    public function getRequestMock($result)
+    {
+        $requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface')
+            ->getMockForAbstractClass();
+
+        $requestMock->expects(static::once())
+            ->method('getParam')
+            ->with('isAjax')
+            ->willReturn($result);
+
+        return $requestMock;
+    }
+}
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethod/PayPalTest.php b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethod/PayPalTest.php
index 5b1dd02ca7b9fbee34313c6b808ab86c81a3dbd3..15a689c8663a0819986f0051996d903297b8848e 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethod/PayPalTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethod/PayPalTest.php
@@ -8,7 +8,7 @@ namespace Magento\Braintree\Test\Unit\Model\PaymentMethod;
 
 use Magento\Braintree\Model\PaymentMethod;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
-use \Magento\Sales\Model\Resource\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
+use \Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
 use Magento\Framework\Exception\LocalizedException;
 use \Braintree_Result_Successful;
 use \Braintree_Result_Error;
@@ -141,7 +141,7 @@ class PayPalTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $this->salesTransactionCollectionFactoryMock = $this->getMockBuilder(
-            '\Magento\Sales\Model\Resource\Order\Payment\Transaction\CollectionFactory'
+            '\Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory'
         )->disableOriginalConstructor()
             ->getMock();
         $this->productMetaDataMock = $this->getMockBuilder('\Magento\Framework\App\ProductMetadataInterface')
@@ -761,8 +761,8 @@ class PayPalTest extends \PHPUnit_Framework_TestCase
             ->method('critical');
 
         $this->model->capture($paymentObject, $amount);
-        $this->assertEquals(0, $paymentObject->getIsTransactionClosed());
-        $this->assertFalse($paymentObject->getShouldCloseParentTransaction());
+        $this->assertEquals(false, $paymentObject->getIsTransactionClosed());
+        $this->assertEquals(true, $paymentObject->getShouldCloseParentTransaction());
     }
 
     /**
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php
index 50d0261aa46e8b25f6591999e15b4d813d8c1045..f8f0494c128672811a883a0f832ae464b5f663dc 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/PaymentMethodTest.php
@@ -8,7 +8,7 @@ namespace Magento\Braintree\Test\Unit\Model;
 
 use Magento\Braintree\Model\PaymentMethod;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
-use \Magento\Sales\Model\Resource\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
+use \Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
 use Magento\Framework\Exception\LocalizedException;
 use \Braintree_Result_Successful;
 use \Braintree_Result_Error;
@@ -119,6 +119,14 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
      */
     protected $appStateMock;
 
+    /**
+     * @var \Magento\Sales\Api\OrderRepositoryInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $orderRepository;
+
+    /**
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
     protected function setUp()
     {
         $this->contextMock = $this->getMockBuilder('\Magento\Framework\Model\Context')
@@ -134,7 +142,7 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $this->salesTransactionCollectionFactoryMock = $this->getMockBuilder(
-            '\Magento\Sales\Model\Resource\Order\Payment\Transaction\CollectionFactory'
+            '\Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory'
         )->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -169,6 +177,8 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
         $this->contextMock->expects($this->any())
             ->method('getAppState')
             ->willReturn($this->appStateMock);
+        $this->orderRepository = $this->getMockBuilder('Magento\Sales\Api\OrderRepositoryInterface')
+            ->getMockForAbstractClass();
         $this->objectManagerHelper = new ObjectManagerHelper($this);
         $this->model = $this->objectManagerHelper->getObject(
             'Magento\Braintree\Model\PaymentMethod',
@@ -185,6 +195,7 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
                 'logger' => $this->loggerMock,
                 'braintreeTransaction' => $this->braintreeTransactionMock,
                 'braintreeCreditCard' => $this->braintreeCreditCardMock,
+                'orderRepository' => $this->orderRepository
             ]
         );
         $this->infoInstanceMock = $this->getMockForAbstractClass(
@@ -785,6 +796,16 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
                 ->willReturn($appState);
         }
 
+        $paymentObject->setParentId('1');
+        $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface')
+            ->getMockForAbstractClass();
+        $order->expects($this->once())
+            ->method('getTotalDue')
+            ->willReturn(10.02);
+        $this->orderRepository->expects($this->once())
+            ->method('get')
+            ->willReturn($order);
+
         $this->assertEquals($this->model, $this->model->authorize($paymentObject, $amount));
         foreach ($expectedPaymentFields as $key => $value) {
             if ($key == 'getTransactionAdditionalInfo') {
@@ -1699,7 +1720,7 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
         $numberOfTransactions
     ) {
         $transactionCollectionMock = $this->getMockBuilder(
-            'Magento\Sales\Model\Resource\Order\Payment\Transaction\Collection'
+            'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection'
         )->disableOriginalConstructor()
             ->getMock();
         $transactionCollectionMock->expects($this->at(0))
@@ -1751,6 +1772,16 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
         $this->psrLoggerMock->expects($this->never())
             ->method('critical');
 
+        $paymentObject->setParentId('1');
+        $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface')
+            ->getMockForAbstractClass();
+        $order->expects($this->once())
+            ->method('getTotalDue')
+            ->willReturn(10.02);
+        $this->orderRepository->expects($this->once())
+            ->method('get')
+            ->willReturn($order);
+
         $this->model->capture($paymentObject, $amount);
         $this->assertEquals(0, $paymentObject->getIsTransactionClosed());
         $this->assertFalse($paymentObject->getShouldCloseParentTransaction());
@@ -1793,7 +1824,7 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
         $authTransaction
     ) {
         $authTransactionCollectionMock = $this->getMockBuilder(
-            'Magento\Sales\Model\Resource\Order\Payment\Transaction\Collection'
+            'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection'
         )->disableOriginalConstructor()
             ->getMock();
         $authTransactionCollectionMock->expects($this->once())
@@ -1893,6 +1924,16 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
             ->method('sale')
             ->willReturn($result);
 
+        $paymentObject->setParentId('1');
+        $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface')
+            ->getMockForAbstractClass();
+        $order->expects($this->once())
+            ->method('getTotalDue')
+            ->willReturn(10.02);
+        $this->orderRepository->expects($this->once())
+            ->method('get')
+            ->willReturn($order);
+
         $this->model->capture($paymentObject, $amount);
         $this->assertEquals(0, $paymentObject->getIsTransactionClosed());
         $this->assertFalse($paymentObject->getShouldCloseParentTransaction());
@@ -2075,6 +2116,16 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
                 ]
             )->willReturn($resultSuccess);
 
+        $paymentObject->setParentId('1');
+        $order = $this->getMockBuilder('Magento\Sales\Api\Data\OrderInterface')
+            ->getMockForAbstractClass();
+        $order->expects($this->once())
+            ->method('getTotalDue')
+            ->willReturn(10.02);
+        $this->orderRepository->expects($this->once())
+            ->method('get')
+            ->willReturn($order);
+
         $this->model->capture($paymentObject, $amount);
         $this->assertEquals(PaymentMethod::STATUS_APPROVED, $paymentObject->getStatus());
         $this->assertEquals($amount, $paymentObject->getAmount());
@@ -2379,7 +2430,7 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
     protected function setupTransactionIds($orderId, $transactionIds)
     {
         $transactionCollectionMock = $this->getMockBuilder(
-            '\Magento\Sales\Model\Resource\Order\Payment\Transaction\Collection'
+            '\Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection'
         )->disableOriginalConstructor()
             ->getMock();
         $transactionCollectionMock->expects($this->once())
@@ -2471,7 +2522,7 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
         $index = 1;
         foreach (array_keys($transactions) as $id) {
             $transactionCollectionMock = $this->getMockBuilder(
-                '\Magento\Sales\Model\Resource\Order\Payment\Transaction\Collection'
+                '\Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection'
             )->disableOriginalConstructor()
                 ->getMock();
             $transactionCollectionMock->expects($this->at(0))
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/Plugin/Sales/Order/PaymentPluginTest.php b/app/code/Magento/Braintree/Test/Unit/Model/Plugin/Sales/Order/PaymentPluginTest.php
index 29ff6d56454cbcf9250fac4bd2df47df80ea9f33..8ee3b2f738c0a52825ddd1b33d7f45f74a8d6d4c 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/Plugin/Sales/Order/PaymentPluginTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/Plugin/Sales/Order/PaymentPluginTest.php
@@ -8,7 +8,7 @@ namespace Magento\Braintree\Test\Unit\Model\Plugin\Sales\Order;
 
 use Magento\Braintree\Model\PaymentMethod;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
-use Magento\Sales\Model\Resource\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory as TransactionCollectionFactory;
 
 /**
  * Class PaymentPluginTest
@@ -50,7 +50,7 @@ class PaymentPluginTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $this->transactionCollectionFactoryMock = $this->getMockBuilder(
-            'Magento\Sales\Model\Resource\Order\Payment\Transaction\CollectionFactory'
+            'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory'
         )->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -118,7 +118,8 @@ class PaymentPluginTest extends \PHPUnit_Framework_TestCase
             ->with($transactionId)
             ->willReturn($transactionId);
 
-        $collectionMock = $this->getMockBuilder('\Magento\Sales\Model\Resource\Order\Payment\Transaction\Collection')
+        $collectionMock =
+            $this->getMockBuilder('\Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->transactionCollectionFactoryMock->expects($this->once())
@@ -179,7 +180,8 @@ class PaymentPluginTest extends \PHPUnit_Framework_TestCase
             ->with($transactionId)
             ->willReturn($transactionId);
 
-        $collectionMock = $this->getMockBuilder('\Magento\Sales\Model\Resource\Order\Payment\Transaction\Collection')
+        $collectionMock =
+            $this->getMockBuilder('\Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->transactionCollectionFactoryMock->expects($this->once())
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Backend/CountrycreditcardTest.php b/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Backend/CountrycreditcardTest.php
index 4cada8680208b1e5464afe9af44871067cf148e2..e970b41d856f8f6c9e08cf340f666f99819c61fc 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Backend/CountrycreditcardTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Backend/CountrycreditcardTest.php
@@ -38,7 +38,7 @@ class CountrycreditcardTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->resourceMock = $this->getMockForAbstractClass('\Magento\Framework\Model\Resource\AbstractResource');
+        $this->resourceMock = $this->getMockForAbstractClass('\Magento\Framework\Model\ResourceModel\AbstractResource');
         $this->mathRandomMock = $this->getMockBuilder(
             '\Magento\Framework\Math\Random'
         )->disableOriginalConstructor()
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Source/CountryTest.php b/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Source/CountryTest.php
index ad235e1f51885f423a9e4639c2df4160824def5e..184e1abd83046c0783adc29ab0837919c0973f8d 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Source/CountryTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/System/Config/Source/CountryTest.php
@@ -22,7 +22,7 @@ class CountryTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Directory\Model\ResourceModel\Country\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $countryCollectionMock;
 
@@ -34,7 +34,7 @@ class CountryTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->countryCollectionMock = $this->getMockBuilder(
-            '\Magento\Directory\Model\Resource\Country\Collection'
+            '\Magento\Directory\Model\ResourceModel\Country\Collection'
         )->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Braintree/Test/Unit/Model/VaultTest.php b/app/code/Magento/Braintree/Test/Unit/Model/VaultTest.php
index 0afbc0a3a7f9bc9b51ae15516533affa4d60b9c0..b4027ed550a269df2fe7c6e0c8fe1f921f0c4ba5 100644
--- a/app/code/Magento/Braintree/Test/Unit/Model/VaultTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Model/VaultTest.php
@@ -51,7 +51,7 @@ class VaultTest extends \PHPUnit_Framework_TestCase
     protected $helperMock;
 
     /**
-     * @var  \Magento\Directory\Model\Resource\Country\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var  \Magento\Directory\Model\ResourceModel\Country\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $countryFactoryMock;
 
@@ -113,7 +113,7 @@ class VaultTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $this->salesTransactionCollectionFactoryMock = $this->getMockBuilder(
-            '\Magento\Sales\Model\Resource\Order\Payment\Transaction\CollectionFactory'
+            '\Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory'
         )->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -126,7 +126,8 @@ class VaultTest extends \PHPUnit_Framework_TestCase
         $this->errorHelperMock = $this->getMockBuilder('\Magento\Braintree\Helper\Error')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->countryFactoryMock = $this->getMockBuilder('\Magento\Directory\Model\Resource\Country\CollectionFactory')
+        $this->countryFactoryMock =
+            $this->getMockBuilder('\Magento\Directory\Model\ResourceModel\Country\CollectionFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -421,7 +422,7 @@ class VaultTest extends \PHPUnit_Framework_TestCase
             ->method('getCustomerId')
             ->willReturn($params['customerId']);
 
-        $countryCollectionMock = $this->getMockBuilder('\Magento\Directory\Model\Resource\Country\Collection')
+        $countryCollectionMock = $this->getMockBuilder('\Magento\Directory\Model\ResourceModel\Country\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Braintree/Test/Unit/Observer/AddPaypalShortcutsTest.php b/app/code/Magento/Braintree/Test/Unit/Observer/AddPaypalShortcutsTest.php
index 1fd4c902eaf0ed8d2d99d0d939018bc178171eef..0182982ce8a1e9302a1ad2ce5ec1032230e6c4e7 100644
--- a/app/code/Magento/Braintree/Test/Unit/Observer/AddPaypalShortcutsTest.php
+++ b/app/code/Magento/Braintree/Test/Unit/Observer/AddPaypalShortcutsTest.php
@@ -6,6 +6,7 @@
 
 namespace Magento\Braintree\Test\Unit\Observer;
 
+use Magento\Braintree\Block\PayPal\Shortcut;
 use Magento\Braintree\Observer\AddPaypalShortcuts;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
@@ -53,7 +54,13 @@ class AddPaypalShortcutsTest extends \PHPUnit_Framework_TestCase
         );
     }
 
-    public function testAddPaypalShortcuts()
+    /**
+     * @param bool $isCatalogProduct
+     * @param bool $isInMiniCart
+     *
+     * @dataProvider dataProviderTestAddPaypalShortcuts
+     */
+    public function testAddPaypalShortcuts($isCatalogProduct, $isInMiniCart)
     {
         $orPosition = 'before';
 
@@ -63,7 +70,7 @@ class AddPaypalShortcutsTest extends \PHPUnit_Framework_TestCase
 
         $event = new \Magento\Framework\DataObject(
             [
-                'is_catalog_product' => false,
+                'is_catalog_product' => $isCatalogProduct,
                 'container' => $containerMock,
                 'or_position' => $orPosition,
             ]
@@ -100,7 +107,7 @@ class AddPaypalShortcutsTest extends \PHPUnit_Framework_TestCase
                 '',
                 [
                     'data' => [
-                        'container' => $containerMock,
+                        Shortcut::MINI_CART_FLAG_KEY => $isInMiniCart,
                     ]
                 ]
             )->willReturn($shortcutMock);
@@ -116,6 +123,17 @@ class AddPaypalShortcutsTest extends \PHPUnit_Framework_TestCase
         $this->addPaypalShortcutsObserver->execute($observer);
     }
 
+    /**
+     * @return array
+     */
+    public function dataProviderTestAddPaypalShortcuts()
+    {
+        return [
+            ['isCatalogProduct' => true, 'isInMiniCart' => false],
+            ['isCatalogProduct' => false, 'isInMiniCart' => true],
+        ];
+    }
+
     public function testAddPaypalShortcutsNotActive()
     {
         $observer = new \Magento\Framework\Event\Observer(
@@ -166,38 +184,4 @@ class AddPaypalShortcutsTest extends \PHPUnit_Framework_TestCase
 
         $this->addPaypalShortcutsObserver->execute($observer);
     }
-
-    public function testAddPaypalShortcutsSkipProductView()
-    {
-        $orPosition = 'before';
-
-        $containerMock = $this->getMockBuilder('\Magento\Catalog\Block\ShortcutButtons')
-            ->disableOriginalConstructor()
-            ->getMock();
-
-        $event = new \Magento\Framework\DataObject(
-            [
-                'is_catalog_product' => true,
-                'container' => $containerMock,
-                'or_position' => $orPosition,
-            ]
-        );
-        $observer = new \Magento\Framework\Event\Observer(
-            [
-                'event' => $event,
-            ]
-        );
-
-        $this->paypalMethodMock->expects($this->once())
-            ->method('isActive')
-            ->willReturn(true);
-        $this->paypalConfigMock->expects($this->once())
-            ->method('isShortcutCheckoutEnabled')
-            ->willReturn(true);
-
-        $containerMock->expects($this->never())
-            ->method('getLayout');
-
-        $this->addPaypalShortcutsObserver->execute($observer);
-    }
 }
diff --git a/app/code/Magento/Braintree/etc/events.xml b/app/code/Magento/Braintree/etc/events.xml
index 843cf78f7cf0cd2d6c7d74e1ef36d86cb3bc9509..835d6b407b01484554470ae8a606dff6cdedb20a 100644
--- a/app/code/Magento/Braintree/etc/events.xml
+++ b/app/code/Magento/Braintree/etc/events.xml
@@ -7,12 +7,12 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_order_shipment_save_after">
-        <observer name="braintree" instance="Magento\Braintree\Observer\ProcessBraintreePayment" method="execute" />
+        <observer name="braintree" instance="Magento\Braintree\Observer\ProcessBraintreePayment" />
     </event>
     <event name="customer_delete_commit_after">
-        <observer name="braintree" instance="Magento\Braintree\Observer\DeleteBraintreeCustomer" method="execute" />
+        <observer name="braintree" instance="Magento\Braintree\Observer\DeleteBraintreeCustomer" />
     </event>
     <event name="checkout_submit_before">
-        <observer name="braintree" instance="Magento\Braintree\Observer\ProcessBraintreeAddress" method="execute" />
+        <observer name="braintree" instance="Magento\Braintree\Observer\ProcessBraintreeAddress" />
     </event>
 </config>
diff --git a/app/code/Magento/Braintree/etc/frontend/di.xml b/app/code/Magento/Braintree/etc/frontend/di.xml
index ddc18722e8df532bf34fb3e30b4122e24e4e8445..83dc6607ed3160f5719646521ffcb74b8a822c34 100644
--- a/app/code/Magento/Braintree/etc/frontend/di.xml
+++ b/app/code/Magento/Braintree/etc/frontend/di.xml
@@ -21,4 +21,11 @@
             </argument>
         </arguments>
     </type>
+    <type name="Magento\Framework\Url\SecurityInfo">
+        <arguments>
+            <argument name="secureUrlList" xsi:type="array">
+                <item name="braintree" xsi:type="string">/braintree/</item>
+            </argument>
+        </arguments>
+    </type>
 </config>
diff --git a/app/code/Magento/Braintree/etc/frontend/events.xml b/app/code/Magento/Braintree/etc/frontend/events.xml
index c9afec78aa4a43feb8841274ba8dd6dcc7a6e47c..6e7b06bf0c86e1a60bd062a3c9168e27ccca15f7 100644
--- a/app/code/Magento/Braintree/etc/frontend/events.xml
+++ b/app/code/Magento/Braintree/etc/frontend/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="shortcut_buttons_container">
-        <observer name="braintree_paypal_shortcuts" instance="Magento\Braintree\Observer\AddPaypalShortcuts" method="execute" />
+        <observer name="braintree_paypal_shortcuts" instance="Magento\Braintree\Observer\AddPaypalShortcuts" />
     </event>
 </config>
diff --git a/app/code/Magento/Braintree/view/adminhtml/templates/data_js.phtml b/app/code/Magento/Braintree/view/adminhtml/templates/data_js.phtml
index cbfe3dcda5f9f52c183a7382e9cf4c33d5a50811..70634e81b0992114ed262c1781c46dd5c4f1fb07 100644
--- a/app/code/Magento/Braintree/view/adminhtml/templates/data_js.phtml
+++ b/app/code/Magento/Braintree/view/adminhtml/templates/data_js.phtml
@@ -7,21 +7,20 @@
 /**
  * @var $block \Magento\Braintree\Block\Datajs
  */
-?>
-<?php
+
 $arrayData = [
     "kountId" => $this->helper('Magento\Braintree\Helper\Data')->getKountId() ?
         $this->helper('Magento\Braintree\Helper\Data')->getKountId() : false,
     "formId" =>$block->getFormId(),
     "merchantId" => $block->getMerchantId(),
-    "braintreeDataJs" => $block->getJsSrc(),
+    "braintreeDataJs" => $block->escapeUrl($block->getJsSrc()),
 ];
 $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($arrayData);
 ?>
 <script type="text/x-magento-init">
     {
         "body": {
-             "braintreeDataJs": <?php /* @escapeNotVerified */ echo $serializedFormData ?>
+             "braintreeDataJs": <?php /* @noEscape */ echo $serializedFormData ?>
         }
     }
 </script>
diff --git a/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml b/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml
index f13f2d77b1c086e288bf87d21556e231f379c0b8..c27901cd4e8704fc7fdf044e47b8cc40db1a7e40 100644
--- a/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml
+++ b/app/code/Magento/Braintree/view/adminhtml/templates/form.phtml
@@ -7,110 +7,143 @@
 // @codingStandardsIgnoreFile
 
 /** @var \Magento\Braintree\Block\Form $block */
-$_form = $block;
-$_code = $_form->getMethodCode();
-$_storedCards = $this->helper('\Magento\Braintree\Helper\Createorder')->getLoggedInCustomerCards();
-$_useVault = $block->useVault();
-$_useCvv = $block->useCvv();
-$clientToken = $block->getClientToken();
+$code = $block->getMethodCode();
+$storedCards = $this->helper('\Magento\Braintree\Helper\Createorder')->getLoggedInCustomerCards();
+$useVault = $block->useVault();
+$useCvv = $block->useCvv();
+$clientToken = $block->escapeHtml($block->getClientToken());
 $isFraudDetectionEnabled = $block->isFraudDetectionEnabled();
 $braintreeDataJs = $block->getBraintreeDataJs();
 $formData = [
-    "useVault" => $_useVault,
-    "useCvv"  => $_useCvv,
+    "useVault" => $useVault,
+    "useCvv"  => $useCvv,
     "clientToken" => $clientToken,
-    "code" => $_code,
+    "code" => $code,
     "isFraudDetectionEnabled" => $isFraudDetectionEnabled,
     "braintreeDataJs"=> $braintreeDataJs,
 ];
 $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData);
+$ccType = $block->getInfoData('cc_type');
+$ccExpMonth = $block->getInfoData('cc_exp_month');
+$ccExpYear = $block->getInfoData('cc_exp_year');
 ?>
-<input id="<?php /* @escapeNotVerified */ echo $_code ?>_payment_method" type="hidden" name="payment[method]" value="<?php /* @escapeNotVerified */ echo $_code ?>" />
-<div id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" class="admin__page-section-item" style="display:none;"
-    data-mage-init='{"braintreeCcForm":<?php /* @escapeNotVerified */ echo $serializedFormData ?>}'
+<input id="<?php /* @noEscape */ echo $code; ?>_payment_method" type="hidden" name="payment[method]"
+       value="<?php /* @noEscape */ echo $code; ?>" />
+<div id="payment_form_<?php /* @noEscape */ echo $code; ?>" class="admin__page-section-item" style="display:none;"
+    data-mage-init='{"braintreeCcForm":<?php /* @noEscape */ echo $serializedFormData; ?>}'
     >
     <input type="hidden" name="payment[payment_method_nonce]" id="braintree_nonce" value="" />
     <input type="hidden" name="payment[cc_last4]" id="cc_last4" value="" />
     <?php if ($isFraudDetectionEnabled): ?>
-    <input type="hidden" name="payment[device_data]" id="braintree_device_id" value="" />
+        <input type="hidden" name="payment[device_data]" id="braintree_device_id" value="" />
     <?php endif; ?>
-    <?php if ($_storedCards): ?>
-    <fieldset class="admin__fieldset">
-        <div class="admin__field" id="<?php /* @escapeNotVerified */ echo $_code ?>_token_selector">
-            <label class="admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_token"><?php /* @escapeNotVerified */ echo __('Payment Information') ?></label>
-            <div class="admin__field-control control">
-                <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_token" name="payment[cc_token]" class="select admin__control-select">
-                    <?php foreach ($_storedCards as $creditCard): ?>
-                        <option value="<?php /* @escapeNotVerified */ echo $creditCard->token?>" <?php echo $creditCard->default ? 'selected="selected"' : '' ?>>
-                            <?php /* @escapeNotVerified */ echo $creditCard->maskedNumber  . ' - ' . $creditCard->cardType ?>
-                        </option>
-                    <?php endforeach; ?>
-                        <option value=''><?php /* @escapeNotVerified */ echo __('Add new card') ?></option>
-                </select>
+    <?php if ($storedCards): ?>
+        <fieldset class="admin__fieldset">
+            <div class="admin__field" id="<?php /* @noEscape */ echo $code; ?>_token_selector">
+                <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_token">
+                    <?php echo $block->escapeHtml(__('Payment Information')); ?>
+                </label>
+                <div class="admin__field-control control">
+                    <select id="<?php /* @noEscape */ echo $code; ?>_cc_token" name="payment[cc_token]"
+                            class="select admin__control-select">
+                        <?php foreach ($storedCards as $creditCard): ?>
+                            <option value="<?php echo $block->escapeHtml($creditCard->token); ?>"
+                                <?php /* @noEscape */ echo $creditCard->default ? ' selected="selected"' : ''; ?>>
+                                <?php echo $block->escapeHtml($creditCard->maskedNumber); ?> - <?php echo $block->escapeHtml($creditCard->cardType); ?>
+                            </option>
+                        <?php endforeach; ?>
+                        <option value=''><?php echo $block->escapeHtml(__('Add new card')); ?></option>
+                    </select>
+                </div>
             </div>
-        </div>
-    </fieldset>
+        </fieldset>
     <?php endif; ?>
     <fieldset class="admin__fieldset hide_if_token_selected">
     <div class="admin__field">
-        <label class="label admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" ><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?><span class="required">*</span></label>
+        <label class="label admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_type" >
+            <?php echo $block->escapeHtml(__('Credit Card Type')); ?><span class="required">*</span>
+        </label>
         <div class="admin__field-control control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" name="payment[cc_type]" class="required-entry _required select admin__control-select validate-cc-type-select">
-                <option value="">--<?php /* @escapeNotVerified */ echo __('Please Select')?>--</option>
-            <?php $_ccType = $_form->getInfoData('cc_type') ?>
-            <?php foreach ($_form->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
-                <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"<?php if($_typeCode==$_ccType): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option>
-            <?php endforeach ?>
+            <select id="<?php /* @noEscape */ echo $code; ?>_cc_type" name="payment[cc_type]"
+                    class="required-entry _required select admin__control-select validate-cc-type-select">
+                <option value="">--<?php echo $block->escapeHtml(__('Please Select')); ?>--</option>
+            <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?>
+                <option value="<?php echo $block->escapeHtml($typeCode); ?>"
+                    <?php if($typeCode == $ccType): ?> selected="selected"<?php endif; ?>>
+                    <?php echo $block->escapeHtml($typeName); ?>
+                </option>
+            <?php endforeach; ?>
             </select>
         </div>
     </div>
     </fieldset>
     <fieldset class="admin__fieldset hide_if_token_selected">
     <div class="admin__field">
-        <label class="label admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number"><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?><span class="required">*</span></label>
+        <label class="label admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_number">
+            <?php echo $block->escapeHtml(__('Credit Card Number')); ?><span class="required">*</span>
+        </label>
         <div class="admin__field-control control">
-            <input type="text" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" data-encrypted-name="payment[cc_number]"  title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" class="input-text admin__control-text validate-cc-number validate-cc-type" value="" />
+            <input type="text" id="<?php /* @noEscape */ echo $code; ?>_cc_number" data-encrypted-name="payment[cc_number]"
+                   title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>"
+                   class="input-text admin__control-text validate-cc-number validate-cc-type" value="" />
         </div>
     </div>
     </fieldset>
     <fieldset class="admin__fieldset hide_if_token_selected">
-    <div id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_exp_div" class="admin__field">
-        <label class="label admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" ><?php /* @escapeNotVerified */ echo __('Expiration Date') ?><span class="required">*</span></label>
+    <div id="<?php /* @noEscape */ echo $code; ?>_cc_type_exp_div" class="admin__field">
+        <label class="label admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_expiration">
+            <?php echo $block->escapeHtml(__('Expiration Date')); ?><span class="required">*</span>
+        </label>
         <div class="admin__field-control control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" name="payment[cc_exp_month]" class="month validate-cc-exp required-entry _required select admin__control-select">
-            <?php $_ccExpMonth = $_form->getInfoData('cc_exp_month') ?>
-            <?php foreach ($_form->getCcMonths() as $k=>$v): ?>
-                <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccExpMonth): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-            <?php endforeach ?>
+            <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]"
+                    class="month validate-cc-exp required-entry _required select admin__control-select">
+                <?php foreach ($block->getCcMonths() as $k=>$v): ?>
+                    <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>"
+                        <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>>
+                        <?php echo $block->escapeHtml($v); ?></option>
+                <?php endforeach; ?>
             </select>
-            <?php $_ccExpYear = $_form->getInfoData('cc_exp_year') ?>
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr" name="payment[cc_exp_year]" class="year required-entry _required select admin__control-select">
-            <?php foreach ($_form->getCcYears() as $k=>$v): ?>
-                <option value="<?php echo $k?$k:'' ?>"<?php if($k==$_ccExpYear): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
+            <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]"
+                    class="year required-entry _required select admin__control-select">
+            <?php foreach ($block->getCcYears() as $k => $v): ?>
+                <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>"
+                    <?php if ($k == $ccExpYear): ?> selected="selected"<?php endif; ?>>
+                    <?php echo $block->escapeHtml($v); ?>
+                </option>
             <?php endforeach ?>
             </select>
         </div>
     </div>
     </fieldset>
-    <?php echo $_form->getChildHtml() ?>
-    <?php if($_form->hasVerification()): ?>
-    <fieldset class="admin__fieldset hide_if_token_selected">
-        <div id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_cvv_div" class="admin__field">
-            <label class="label admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" ><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?><span class="required">*</span></label>
-            <div class="admin__field-control control">
-                <div class="v-fix">
-                    <input type="text" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" class="input-text admin__control-text cvv required-entry validate-cc-cvn" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" data-encrypted-name="payment[cc_cid]" value="" />
+    <?php echo $block->getChildHtml(); ?>
+    <?php if ($block->hasVerification()): ?>
+        <fieldset class="admin__fieldset hide_if_token_selected">
+            <div id="<?php /* @noEscape */ echo $code; ?>_cc_type_cvv_div" class="admin__field">
+                <label class="label admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_cid">
+                    <?php echo $block->escapeHtml(__('Card Verification Number')); ?><span class="required">*</span>
+                </label>
+
+                <div class="admin__field-control control">
+                    <div class="v-fix">
+                        <input type="text" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>"
+                               class="input-text admin__control-text cvv required-entry validate-cc-cvn"
+                               id="<?php /* @noEscape */ echo $code; ?>_cc_cid" data-encrypted-name="payment[cc_cid]" value=""/>
+                    </div>
                 </div>
             </div>
-        </div>
-    </fieldset>
+        </fieldset>
     <?php endif; ?>
     <?php if($_useVault): ?>
-    <fieldset class="admin__fieldset hide_if_token_selected">
-        <div id="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault_div" style="text-align:left;" class="">
-            <input type="checkbox" title="<?php /* @escapeNotVerified */ echo __('Save this card for future use') ?>" class="input-checkbox" id="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault" name="payment[store_in_vault]" value="1" />
-            <label for="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault" style="float:none;"><?php /* @escapeNotVerified */ echo __('Save this card for future use') ?></label>
-        </div>
-    </fieldset>
+        <fieldset class="admin__fieldset hide_if_token_selected">
+            <div id="<?php /* @noEscape */ echo $code; ?>_store_in_vault_div" style="text-align:left;" class="">
+                <input type="checkbox" title="<?php echo $block->escapeHtml(__('Save this card for future use')); ?>"
+                       class="input-checkbox" id="<?php /* @noEscape */ echo $code; ?>_store_in_vault"
+                       name="payment[store_in_vault]" value="1"/>
+                <label for="<?php /* @noEscape */ echo $code; ?>_store_in_vault" style="float:none;">
+                    <?php echo $block->escapeHtml(__('Save this card for future use')); ?>
+
+                </label>
+            </div>
+        </fieldset>
     <?php endif; ?>
 </div>
\ No newline at end of file
diff --git a/app/code/Magento/Braintree/view/frontend/requirejs-config.js b/app/code/Magento/Braintree/view/frontend/requirejs-config.js
index 648712b448fd9e8c3e73985d2ade0b05c840edd4..3282418cf1c1b600afd84fab5a560a0dac0e4d3c 100644
--- a/app/code/Magento/Braintree/view/frontend/requirejs-config.js
+++ b/app/code/Magento/Braintree/view/frontend/requirejs-config.js
@@ -10,7 +10,8 @@ var config = {
             braintreeDataJs:            'Magento_Braintree/js/cc-data',
             braintreeForm:              'Magento_Braintree/js/cc-form',
             braintreeEditForm:          'Magento_Braintree/js/cc-edit-form',
-            braintreePayPalShortcut:    'Magento_Braintree/js/braintree-paypal-shortcut',
+            braintreePayPalMinicart:    'Magento_Braintree/js/button/braintree-paypal-minicart',
+            braintreePayPal:            'Magento_Braintree/js/button/braintree-paypal',
             transparent:                'Magento_Payment/transparent'
         }
     }
diff --git a/app/code/Magento/Braintree/view/frontend/templates/PayPal/shortcut.phtml b/app/code/Magento/Braintree/view/frontend/templates/PayPal/shortcut.phtml
index 88b9a8397782dd282dea81cb933a0e8ed23730ea..267a6fede0644551bf2e45c5027bf2aebc9effe4 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/PayPal/shortcut.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/PayPal/shortcut.phtml
@@ -4,39 +4,45 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 /** @var \Magento\Braintree\Block\PayPal\Shortcut $block */
+
 $containerId = $block->getContainerId();
-$submitFormId = $block->getSubmitFormId();
-$paymentMethodNonceId = $block->getPaymentMethodNonceId();
-$paymentDetailsId = $block->getPaymentDetailsId();
+$formId = $block->getSubmitFormId();
+$paymentId = $block->getPaymentMethodNonceId();
+$detailsId = $block->getPaymentDetailsId();
+$isMiniCart = (bool)(int)$block->isInMiniCart();
+
+$widgetName = $isMiniCart ? 'braintreePayPalMinicart' : 'braintreePayPal';
+
+$config = [
+    $widgetName => [
+        'url' => $block->getButtonDataUrl(),
+        'isMiniCart' => $isMiniCart,
+        'formAction' => $block->escapeUrl($block->getReviewPageUrl()),
+        'clientToken' => $block->escapeHtml($block->getClientToken()),
+        'containerId' => ('#' . $containerId),
+        'formId' => ('#' . $formId),
+        'paymentId' => ('#' . $paymentId),
+        'detailsId' => ('#' . $detailsId),
+        'options' => [
+            'amount' => $block->getAmount(),
+            'currency' => $block->getCurrency(),
+            'container' => $containerId,
+            'singleUse' => true,
+            'enableShippingAddress' => true,
+            'enableBillingAddress' => $block->enableBillingAddress(),
+            'locale' => $block->getLocale(),
+            'merchantName' => $block->escapeHtml($block->getMerchantName()),
+        ],
+    ]
+];
+
 ?>
 <div data-label="<?php echo $block->escapeHtml(__('or')); ?>"
      class="paypal checkout <?php echo $block->escapeHtml($block->getShowOrPosition()) ?> paypal-logo"
     >
-    <fieldset class="fieldset paypal items" id="braintree_paypal_shortcut">
-        <div
-            id="<?php /* @noEscape */ echo $containerId ?>"
-            data-mage-init='{
-                "braintreePayPalShortcut":{
-                    "clientToken":"<?php echo $block->escapeHtml($block->getClientToken()) ?>",
-                    "amount":"<?php /* @noEscape */ echo $block->getAmount() ?>",
-                    "currency":"<?php /* @noEscape */ echo $block->getCurrency() ?>",
-                    "locale":"<?php /* @noEscape */ echo $block->getLocale() ?>",
-                    "merchantName":"<?php echo $block->escapeHtml($block->getMerchantName()) ?>",
-                    "container":"<?php /* @noEscape */ echo $containerId ?>",
-                    "submitFormId":"<?php /* @noEscape */ echo $submitFormId ?>",
-                    "enableBillingAddress":"<?php /* @noEscape */ echo $block->enableBillingAddress() ?>",
-                    "paymentMethodNonceId":"<?php /* @noEscape */ echo $paymentMethodNonceId ?>",
-                    "paymentDetailsId":"<?php /* @noEscape */ echo $paymentDetailsId ?>"
-                }
-            }'
-            >
-        </div>
-        <form id="<?php /* @noEscape */ echo $submitFormId ?>" action="<?php echo $block->escapeUrl($block->getReviewPageUrl()) ?>" method="post" >
-            <input id="<?php /* @noEscape */ echo $paymentMethodNonceId ?>" type="hidden" name="payment_method_nonce" />
-            <input id="<?php /* @noEscape */ echo $paymentDetailsId ?>" type="hidden" name="details" />
-        </form>
+    <fieldset class="fieldset paypal items">
+        <div id="<?php /* @noEscape */ echo $containerId ?>"
+             data-mage-init='<?php /* @noEscape */ echo json_encode($config); ?>'></div>
     </fieldset>
-</div>
\ No newline at end of file
+</div>
diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/delete.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/delete.phtml
index b9011bdd4f54e009622789aa2992d42cd89f1fe9..cba8e56e5aa3366172f42663999757bfce6b5448 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/delete.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/delete.phtml
@@ -6,46 +6,54 @@
 
 // @codingStandardsIgnoreFile
 
-    $creditCard = $block->creditCard();
-    $token = $creditCard->token;
+/**
+ * @var \Magento\Braintree\Block\Creditcard\Management $block
+ */
+$creditCard = $block->creditCard();
+$token = $block->escapeHtml($creditCard->token);
 ?>
 <?php echo $block->getLayout()->getMessagesBlock()->getGroupedHtml();?>
-<form action="<?php /* @escapeNotVerified */ echo $block->getDeleteConfirmUrl() ?>" method="post" id="delete-form"
+<form action="<?php echo $block->escapeUrl($block->getDeleteConfirmUrl()); ?>" method="post" id="delete-form"
       xmlns="http://www.w3.org/1999/html">
     <fieldset class="fieldset info">
-        <legend class="legend"><?php /* @escapeNotVerified */ echo __('Please confirm that you want to delete this credit card') ?></legend>
+        <legend class="legend">
+            <?php echo $block->escapeHtml(__('Please confirm that you want to delete this credit card')); ?>
+        </legend>
         <div class="field">
             <ul>
                 <li>
-                    <b><?php /* @escapeNotVerified */ echo __('Credit Card Number');?></b>
+                    <b><?php echo $block->escapeHtml(__('Credit Card Number'));?></b>
                 </li>
                 <li>
-                    <?php /* @escapeNotVerified */ echo $creditCard->maskedNumber;?>
+                    <?php echo $block->escapeHtml($creditCard->maskedNumber);?>
                 </li>
                 <li>
-                    <b><?php /* @escapeNotVerified */ echo __('Expiration Date');?></b>
+                    <b><?php echo $block->escapeHtml(__('Expiration Date'));?></b>
                 </li>
                 <li>
-                    <?php /* @escapeNotVerified */ echo $creditCard->expirationDate; ?>
+                    <?php echo $block->escapeHtml($creditCard->expirationDate); ?>
                 </li>
                 <li>
-                    <b><?php /* @escapeNotVerified */ echo __('Cardholder Name');?></b>
+                    <b><?php echo $block->escapeHtml(__('Cardholder Name'));?></b>
                 </li>
                 <li>
-                    <?php /* @escapeNotVerified */ echo $creditCard->cardholderName;?>
+                    <?php echo $block->escapeHtml($creditCard->cardholderName);?>
                 </li>
             </ul>
         </div>
     </fieldset>
-    <input type="hidden" name="token" value="<?php /* @escapeNotVerified */ echo $token ?>">
+    <input type="hidden" name="token" value="<?php /* @noEscape */ echo $token; ?>">
     <div class="actions-toolbar">
         <div class="primary">
             <button type="submit" id="opc-submit" data-role="opc-submit" class="action save primary"
-                    title="<?php /* @escapeNotVerified */ echo __('Delete') ?>" ><?php /* @escapeNotVerified */ echo __('Delete') ?></span></button>
+                    title="<?php echo $block->escapeHtml(__('Delete')); ?>" >
+                <?php echo $block->escapeHtml(__('Delete')); ?>
+            </button>
         </div>
         <div class="secondary">
-            <a class="action back" href="<?php /* @escapeNotVerified */ echo $block->getBackUrl() ?>"><span><span><small>&laquo; </small>
-                        <?php /* @escapeNotVerified */ echo __('Back') ?></span></a>
+            <a class="action back" href="<?php echo $block->escapeUrl($block->getBackUrl()); ?>">
+                <span><small>&laquo; </small><?php echo $block->escapeHtml(__('Back')); ?></span>
+            </a>
         </div>
     </div>
 
diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
index 073009c4c6eb6de718c3d85c41270ebedfedfa85..6fcac2eae9c411929472c7b79ef1038836646183 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/edit.phtml
@@ -53,21 +53,37 @@ if ($block->isEditMode()) {
     $defaultPostalCode = '';
     $defaultCountryCodeAlpha2 = '';
 }
+$streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street');
+$default = $defaultCountryCodeAlpha2;
+
+$clientToken = $block->getClientToken();
+$formData = [
+    "clientToken" => $clientToken,
+    'ajaxSaveUrl' => $block->escapeUrl($block->getAjaxSaveUrl()),
+    'isEditMode' => $block->isEditMode() ? true : false,
+    'cardToken' => $block->isEditMode() ? $block->escapeHtml($creditCard->token) : '',
+    'backUrl' => $block->escapeUrl($block->getBackUrl()),
+    'hasVerification' => $block->hasVerification(),
+    "countrySpecificCardTypes" => $countrySpecificCardTypeConfig,
+    "applicableCardTypes" => $applicableCardTypeConfig,
+    "cardTypes" => $block->getCcAvailableTypes(),
+    "isFraudDetectionEnabled" => $block->isFraudDetectionEnabled()
+];
+$serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData);
 ?>
 <form
-    class="form form-edit-credit-card"
-    action='<?php /* @escapeNotVerified */ echo $block->getFormAction() ?>'
+    class="form form-edit-credit-card"  action="<?php echo $block->escapeUrl($block->getFormAction()); ?>"
     method="post" id="form-validate" data-mage-init='{"validation":{}}'>
     <?php echo $block->getBlockHtml('formkey'); ?>
-    <fieldset class="fieldset info" data-hasrequired="<?php /* @escapeNotVerified */ echo __('* Required Fields') ?>">
+    <fieldset class="fieldset info" data-hasrequired="<?php echo $block->escapeHtml(__('* Required Fields')); ?>">
         <legend class="legend">
-            <span><?php /* @escapeNotVerified */ echo __('Credit Card') ?></span>
+            <span><?php echo $block->escapeHtml(__('Credit Card')); ?></span>
         </legend>
         <br>
 
         <div class="field name required">
             <label for="credit_card_cardholder_name" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('Cardholder Name') ?></span>
+                <span><?php echo $block->escapeHtml(__('Cardholder Name')); ?></span>
             </label>
 
             <div class="control">
@@ -75,40 +91,32 @@ if ($block->isEditMode()) {
                     type="text"
                     class="input-text required-entry"
                     id="credit_card_cardholder_name"
-                    value="<?php /* @escapeNotVerified */ echo $defaultCardholder ?>"
+                    value="<?php echo $block->escapeHtml($defaultCardholder); ?>"
                     data-validate="{required:true}">
             </div>
         </div>
         <div class="field required type">
             <label for="credit_card_type" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span>
+                <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span>
             </label>
 
             <div class="control">
                 <select name="credit_card_type" id="credit_card_type" data-container="credit_card_type"
                         data-validate='{required:true, "validate-cc-type-select":"#credit_card_number"}'>
-                    <option value=""><?php /* @escapeNotVerified */ echo __('--Please Select--') ?></option>
-                    <?php
-                    foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName) :
-                        ?>
-                        <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"
-                            <?php
-                            if (stripos($_typeName, $defaultCcType) !== false) :
-                                ?> selected="selected"
-                            <?php
-                            endif;
-                            ?>>
-                            <?php /* @escapeNotVerified */ echo $_typeName ?>
+                    <option value=""><?php echo $block->escapeHtml(__('--Please Select--')); ?></option>
+                    <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?>
+                        <option value="<?php echo $block->escapeHtml($typeCode); ?>"
+                            <?php if (stripos($typeName, $defaultCcType) !== false): ?> selected="selected"<?php endif; ?>>
+                            <?php echo $block->escapeHtml($typeName); ?>
                         </option>
-                    <?php
-                    endforeach;
+                    <?php endforeach;
                     ?>
                 </select>
             </div>
         </div>
         <div class="field name required">
-            <label for="credit_card_number" class="label"><span>
-                        <?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span>
+            <label for="credit_card_number" class="label">
+                <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span>
             </label>
 
             <div class="control">
@@ -118,19 +126,13 @@ if ($block->isEditMode()) {
                        class="input-text required-entry validate-cc-number"
                        id="credit_card_number"
                        autocomplete="off"
-                    <?php
-                    if ($block->isEditMode()) :
-                        ?>
-                        placeholder="<?php /* @escapeNotVerified */ echo $maskedNumber ?>"
-                    <?php
-                    endif;
-                    ?>
+                    <?php if ($block->isEditMode()): ?> placeholder="<?php echo $block->escapeHtml($maskedNumber); ?>"<?php endif; ?>
                        data-validate="{'required-number':true, 'validate-cc-number':'#credit_card_number', 'validate-cc-type':'#credit_card_type'}">
             </div>
         </div>
         <div class="field sp-methods required">
             <label for="credit_card_expiration_date" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span>
+                <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span>
             </label>
 
             <div class="control">
@@ -143,14 +145,12 @@ if ($block->isEditMode()) {
                                 id="credit_card_expiration"
                                 class="month validate-cc-exp required-entry"
                                 data-validate="{'required-number':true, 'validate-cc-exp':'#credit_card_expiration_yr'}">
-                                <?php
-                                foreach ($block->getCcMonths() as $k => $v) :
-                                    ?>
-                                    <option
-                                        value="<?php echo $k ? $k : '' ?>"<?php if ($k == $defaultExpMonth) : ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-                                <?php
-                                endforeach;
-                                ?>
+                                <?php foreach ($block->getCcMonths() as $k => $v): ?>
+                                    <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>"
+                                        <?php if ($k == $defaultExpMonth): ?> selected="selected"<?php endif; ?>>
+                                        <?php echo $block->escapeHtml($v); ?>
+                                    </option>
+                                <?php endforeach; ?>
                             </select>
                         </div>
                     </div>
@@ -163,22 +163,12 @@ if ($block->isEditMode()) {
                                 id="credit_card_expiration_yr"
                                 class="year required-entry"
                                 data-validate="{required:true}">
-                                <?php
-                                foreach ($block->getCcYears() as $k => $v) :
-                                    ?>
-                                    <option
-                                        value="<?php echo $k ? $k : ''; ?>"
-                                        <?php
-                                        if ($k == $defaultExpYear) :
-                                            ?> selected="selected"
-                                        <?php
-                                        endif;
-                                        ?>>
-                                        <?php /* @escapeNotVerified */ echo $v ?>
+                                <?php foreach ($block->getCcYears() as $k => $v): ?>
+                                    <option value="<?php /* @noEscape */ echo $k ? $k : ''; ?>"
+                                        <?php if ($k == $defaultExpYear): ?> selected="selected"<?php endif; ?>>
+                                        <?php echo $block->escapeHtml($v); ?>
                                     </option>
-                                <?php
-                                endforeach;
-                                ?>
+                                <?php endforeach; ?>
                             </select>
                         </div>
                     </div>
@@ -189,13 +179,13 @@ if ($block->isEditMode()) {
         <?php if ($block->hasVerification()): ?>
         <div class="field sp-methods required">
             <label for="credit_card_cvv" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('CVV') ?></span>
+                <span><?php echo $block->escapeHtml(__('CVV')); ?></span>
             </label>
 
             <div class="control">
                 <input
                     type="text"
-                    title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>"
+                    title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>"
                     class="input-text cvv required-entry validate-cc-cvn validate-cc-cvn-autodetect"
                     name="credit_card_cvv"
                     data-container="credit_card_cvv"
@@ -203,14 +193,14 @@ if ($block->isEditMode()) {
                     value=""
                     autocomplete="off"
                     data-validate="{'required-number':true, 'validate-cc-cvn':'#credit_card_type'}">
-                <?php $_content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') .
-                    '\" alt=\"' . __('Card Verification Number Visual Reference') . '\" title=\"' .
-                    __('Card Verification Number Visual Reference') . '\" />'; ?>
+                <?php $content = '<img src=\"' . $block->escapeUrl($block->getViewFileUrl('Magento_Checkout::cvv.png')) .
+                    '\" alt=\"' . $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" title=\"' .
+                    $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" />'; ?>
                 <div class="note">
                     <a href="#" id="credit_card-cvv-what-is-this" class="action cvv"
                        title="<?php echo $block->escapeHtml(__('What is this?')); ?>"
-                       data-mage-init='{"tooltip": {"content": "<?php /* @escapeNotVerified */ echo $_content ?>"}}'>
-                        <span><?php /* @escapeNotVerified */ echo __('What is this?') ?></span>
+                       data-mage-init='{"tooltip": {"content": "<?php /* @noEscape */ echo $content; ?>"}}'>
+                        <span><?php echo $block->escapeHtml(__('What is this?')); ?></span>
                     </a>
                 </div>
             </div>
@@ -224,58 +214,61 @@ if ($block->isEditMode()) {
 
             <div class="control">
                 <input type="checkbox" name="credit_card[options][make_default]" id="credit_card_options_make_default"
-                       value="1" <?php /* @escapeNotVerified */ echo $isCCDefault ? "checked" : "" ?>>
+                       value="1" <?php /* @noEscape */ echo $isCCDefault ? "checked" : "" ?>>
                 <label for="credit_card_options_make_default" class="label">
-                    <span><?php /* @escapeNotVerified */ echo __('Make Default') ?></span>
+                    <span><?php echo $block->escapeHtml(__('Make Default')); ?></span>
                 </label>
             </div>
         </div>
     </fieldset>
     <fieldset class="fieldset info">
         <legend class="legend">
-            <span><?php /* @escapeNotVerified */ echo __('Billing Address') ?></span>
+            <span><?php echo $block->escapeHtml(__('Billing Address')); ?></span>
         </legend>
         <div class="field name billing_address_first_name required">
             <label for="billing_address_first_name" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('First Name') ?></span>
+                <span><?php echo $block->escapeHtml(__('First Name')); ?></span>
             </label>
 
             <div class="control">
                 <input type="text" class="input-text required-entry " name="credit_card[billing_address][first_name]"
                        id="billing_address_first_name"
-                       value="<?php /* @escapeNotVerified */ echo $defaultFirstName ?>"
+                       value="<?php echo $block->escapeHtml($defaultFirstName); ?>"
                        data-validate="{required:true}">
             </div>
         </div>
         <div class="field name billing_address_last_name required">
-            <label for="billing_address_last_name" class="label"><span><?php /* @escapeNotVerified */ echo __('Last Name') ?></span></label>
+            <label for="billing_address_last_name" class="label">
+                <span><?php echo $block->escapeHtml(__('Last Name')); ?></span>
+            </label>
 
             <div class="control">
                 <input type="text" class="input-text required-entry " name="credit_card[billing_address][last_name]"
                        id="billing_address_last_name"
-                       value="<?php /* @escapeNotVerified */ echo $defaultLastName ?>"
+                       value="<?php echo $block->escapeHtml($defaultLastName); ?>"
                        data-validate="{required:true}">
             </div>
         </div>
         <div class="field name billing_address_company">
-            <label for="billing_address_company" class="label"><span><?php /* @escapeNotVerified */ echo __('Company') ?></span></label>
+            <label for="billing_address_company" class="label">
+                <span><?php echo $block->escapeHtml(__('Company')); ?></span>
+            </label>
 
             <div class="control">
                 <input type="text" class="input-text " name="credit_card[billing_address][company]"
                        id="billing_address_company"
-                       value="<?php /* @escapeNotVerified */ echo $defaultCompany ?>">
+                       value="<?php echo $block->escapeHtml($defaultCompany); ?>">
             </div>
         </div>
-        <?php $_streetValidationClass = $this->helper('Magento\Customer\Helper\Address')->getAttributeValidationClass('street'); ?>
         <div class="field name billing_address_street_address required">
             <label for="billing_address_street_address" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('Address') ?></span>
+                <span><?php echo $block->escapeHtml(__('Address')); ?></span>
             </label>
 
             <div class="control">
                 <input type="text" class="input-text required-entry "
                        name="credit_card[billing_address][street_address]" id="billing_address_street_address"
-                       value="<?php /* @escapeNotVerified */ echo $defaultStreetAddress ?>"
+                       value="<?php echo $block->escapeHtml($defaultStreetAddress); ?>"
                        data-validate="{required:true}">
             </div>
         </div>
@@ -287,95 +280,78 @@ if ($block->isEditMode()) {
             <div class="control">
                 <input type="text" class="input-text " name="credit_card[billing_address][extended_address]"
                        id="billing_address_extended_address"
-                       value="<?php /* @escapeNotVerified */ echo $defaultExtendedAddress ?>">
+                       value="<?php echo $block->escapeHtml($defaultExtendedAddress); ?>">
             </div>
         </div>
         <div class="field name billing_address_locality required">
             <label for="billing_address_locality" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('City') ?></span>
+                <span><?php echo $block->escapeHtml(__('City')); ?></span>
             </label>
 
             <div class="control">
                 <input type="text" class="input-text required-entry " name="credit_card[billing_address][locality]"
                        id="billing_address_locality"
-                       value="<?php /* @escapeNotVerified */ echo $defaultLocality ?>"
+                       value="<?php echo $block->escapeHtml($defaultLocality); ?>"
                        data-validate="{required:true}">
             </div>
         </div>
         <div class="field region billing_address_region required">
             <label for="billing_address_region" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('State/Province') ?></span>
+                <span><?php echo $block->escapeHtml(__('State/Province')); ?></span>
             </label>
 
             <div class="control">
                 <select id="billing_address_region_id" name="credit_card[billing_address][region_id]"
-                        title="<?php /* @escapeNotVerified */ echo __('State/Province') ?>" class="validate-select" style="display:none;"
+                        title="<?php echo $block->escapeHtml(__('State/Province')); ?>" class="validate-select" style="display:none;"
                         data-validate="{'validate-select':true}">
-                    <option value=""><?php /* @escapeNotVerified */ echo __('Please select region, state or province') ?></option>
+                    <option value=""><?php echo $block->escapeHtml(__('Please select region, state or province')); ?></option>
                 </select>
                 <input type="text" class="input-text " name="credit_card[billing_address][region]"
                        id="billing_address_region"
-                       value="<?php /* @escapeNotVerified */ echo $block->getPostParam('customer.creditCard.billingAddress.region', $defaultRegion) ?>">
+                       value="<?php echo $block->escapeHtml($block->getPostParam('customer.creditCard.billingAddress.region', $defaultRegion)); ?>">
             </div>
         </div>
         <div class="field zip billing_address_postal_code required">
             <label for="billing_address_postal_code" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('Zip/Postal Code') ?></span>
+                <span><?php echo $block->escapeHtml(__('Zip/Postal Code')); ?></span>
             </label>
             <div class="control">
                 <input type="text" class="input-text required-entry validate-zip-international "
                        name="credit_card[billing_address][postal_code]" id="billing_address_postal_code"
-                       value="<?php /* @escapeNotVerified */ echo $defaultPostalCode ?>"
+                       value="<?php echo $block->escapeHtml($defaultPostalCode); ?>"
                        data-validate="{required:true, 'validate-zip-international':true}">
             </div>
         </div>
         <div class="field name billing_address_country required">
             <label for="billing_address_country" class="label">
-                <span><?php /* @escapeNotVerified */ echo __('Country') ?></span>
+                <span><?php echo $block->escapeHtml(__('Country')); ?></span>
             </label>
 
             <div class="control">
-                <?php $default = $defaultCountryCodeAlpha2 ?>
-                <?php /* @escapeNotVerified */ echo $block->countrySelect('credit_card' . '[billing_address][country_code_alpha2]', 'billing_address_country', $default) ?>
+                <?php echo $block->escapeHtml($block->countrySelect('credit_card[billing_address][country_code_alpha2]', 'billing_address_country', $default)); ?>
             </div>
         </div>
     </fieldset>
     <div class="actions-toolbar">
         <div class="primary">
             <button type="submit" id="opc-submit" data-role="opc-submit" class="action save primary"
-                    title="<?php /* @escapeNotVerified */ echo __('Submit') ?>">
-                <span><?php /* @escapeNotVerified */ echo __('Submit') ?></span>
+                    title="<?php echo $block->escapeHtml(__('Submit')); ?>">
+                <span><?php echo $block->escapeHtml(__('Submit')); ?></span>
             </button>
         </div>
         <div class="secondary">
-            <a class="action back" href="<?php /* @escapeNotVerified */ echo $block->getBackUrl() ?>">
-                <span><span><small>&laquo; </small><?php /* @escapeNotVerified */ echo __('Back') ?></span>
+            <a class="action back" href="<?php echo $block->escapeUrl($block->getBackUrl()); ?>">
+                <span><span><small>&laquo; </small><?php echo $block->escapeUrl(__('Back')); ?></span>
             </a>
         </div>
     </div>
 </form>
 
-<?php
-$clientToken = $block->getClientToken();
-$formData = [
-    "clientToken" => $clientToken,
-    'ajaxSaveUrl' => $block->getAjaxSaveUrl(),
-    'isEditMode' => $block->isEditMode() ? true : false,
-    'cardToken' => $block->isEditMode() ? $creditCard->token : '',
-    'backUrl' => $block->getBackUrl(),
-    'hasVerification' => $block->hasVerification(),
-    "countrySpecificCardTypes" => $countrySpecificCardTypeConfig,
-    "applicableCardTypes" => $applicableCardTypeConfig,
-    "cardTypes" => $block->getCcAvailableTypes(),
-    "isFraudDetectionEnabled" => $block->isFraudDetectionEnabled()
-];
-$serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData);
-?>
 <script type="text/x-magento-init">
     {
         "#form-validate": {
             "validation": {},
-             "braintreeEditForm": <?php /* @escapeNotVerified */ echo $serializedFormData ?>
+             "braintreeEditForm": <?php /* @noEscape */ echo $serializedFormData; ?>
         },
         "#billing_address_country": {
             "regionUpdater": {
@@ -384,13 +360,11 @@ $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonE
                 "regionInputId": "#billing_address_region",
                 "postcodeId": "#billing_address_region",
                 "form": "#form-validate",
-                "regionJson": <?php /* @escapeNotVerified */ echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson() ?>,
-                "defaultRegion": "<?php /* @escapeNotVerified */ echo $defaultRegionId ?>",
+                "regionJson": <?php /* @noEscape */ echo $this->helper('Magento\Directory\Helper\Data')->getRegionJson(); ?>,
+                "defaultRegion": "<?php echo $block->escapeHtml($defaultRegionId); ?>",
                 "countriesWithOptionalZip":
-                <?php /* @escapeNotVerified */ echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true) ?>
+                <?php /* @noEscape */ echo $this->helper('Magento\Directory\Helper\Data')->getCountriesWithOptionalZip(true); ?>
             }
         }
     }
-
-
 </script>
\ No newline at end of file
diff --git a/app/code/Magento/Braintree/view/frontend/templates/creditcard/index.phtml b/app/code/Magento/Braintree/view/frontend/templates/creditcard/index.phtml
index f4cef98141bd9a4f549dff973874bd8a63a706a3..fd9ee17028bb6eae399fe70103f3f8e82933681f 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/creditcard/index.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/creditcard/index.phtml
@@ -7,14 +7,18 @@
 // @codingStandardsIgnoreFile
 
 /** @var $block \Magento\Braintree\Block\Creditcard\Management */
-    $_storedCards = $block->getCurrentCustomerStoredCards();
+$storedCards = $block->getCurrentCustomerStoredCards();
 ?>
 <div class="page-title title-buttons">
     <?php if ($block->getUsesVault()): ?>
-        <button type="button" title="<?php /* @escapeNotVerified */ echo __('Add Credit Card') ?>" class="action subscribe primary" onclick="window.location='<?php /* @escapeNotVerified */ echo $block->getAddUrl() ?>';"><span><span><?php /* @escapeNotVerified */ echo __('Add Credit Card') ?></span></span></button>
-    <?php endif ?>
+        <button type="button" title="<?php echo $block->escapeHtml(__('Add Credit Card')); ?>"
+                class="action subscribe primary"
+                onclick="window.location='<?php echo $block->escapeUrl($block->getAddUrl()) ?>';">
+            <span><span><?php echo $block->escapeHtml(__('Add Credit Card')); ?></span></span>
+        </button>
+    <?php endif; ?>
 </div>
-<?php echo $block->getLayout()->getMessagesBlock()->getGroupedHtml() ?>
+<?php echo $block->getLayout()->getMessagesBlock()->getGroupedHtml(); ?>
 <?php if (count($_storedCards)): ?>
     <table class="data-table" id="my-quotes-table">
         <col width="1" />
@@ -24,23 +28,27 @@
         <col width="1" />
         <thead>
             <tr>
-                <th><?php /* @escapeNotVerified */ echo __('Type') ?></th>
-                <th><?php /* @escapeNotVerified */ echo __('Card Number') ?></th>
-                <th><?php /* @escapeNotVerified */ echo __('Is Default') ?></th>
-                <th colspan="2"><?php /* @escapeNotVerified */ echo __('Actions') ?></th>
+                <th><?php echo $block->escapeHtml(__('Type')); ?></th>
+                <th><?php echo $block->escapeHtml(__('Card Number')); ?></th>
+                <th><?php echo $block->escapeHtml(__('Is Default')); ?></th>
+                <th colspan="2"><?php echo $block->escapeHtml(__('Actions')); ?></th>
             </tr>
         </thead>
         <tbody>
-            <?php foreach ($_storedCards as $card):?>
+            <?php foreach ($storedCards as $card):?>
                 <tr>
-                    <td><?php /* @escapeNotVerified */ echo $card->cardType ?></td>
-                    <td><?php /* @escapeNotVerified */ echo $card->maskedNumber ?></td>
-                    <td><?php /* @escapeNotVerified */ echo ($card->default) ? __('Yes') : __('No') ?></td>
+                    <td><?php echo $block->escapeHtml($card->cardType); ?></td>
+                    <td><?php echo $block->escapeHtml($card->maskedNumber); ?></td>
+                    <td><?php /* @noEscape */ echo ($card->default) ? $block->escapeHtml(__('Yes')) : $block->escapeHtml(__('No')); ?></td>
                     <td>
-                        <a href="<?php /* @escapeNotVerified */ echo $block->getEditUrl($card->token) ?>"><?php /* @escapeNotVerified */ echo __('Edit')?></a>
+                        <a href="<?php echo $block->escapeUrl($block->getEditUrl($card->token)); ?>">
+                            <?php echo $block->escapeHtml(__('Edit')); ?>
+                        </a>
                     </td>
                     <td>
-                        <a href="<?php /* @escapeNotVerified */ echo $block->getDeleteUrl($card->token) ?>"><?php /* @escapeNotVerified */ echo __('Delete')?></a>
+                        <a href="<?php echo $block->escapeUrl($block->getDeleteUrl($card->token)); ?>">
+                            <?php echo $block->escapeHtml(__('Delete'));?>
+                        </a>
                     </td>
                 </tr>
             <?php endforeach; ?>
diff --git a/app/code/Magento/Braintree/view/frontend/templates/data_js.phtml b/app/code/Magento/Braintree/view/frontend/templates/data_js.phtml
index cbfe3dcda5f9f52c183a7382e9cf4c33d5a50811..14579540152c5ac6e53839cf17dfdd861f564d89 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/data_js.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/data_js.phtml
@@ -14,14 +14,14 @@ $arrayData = [
         $this->helper('Magento\Braintree\Helper\Data')->getKountId() : false,
     "formId" =>$block->getFormId(),
     "merchantId" => $block->getMerchantId(),
-    "braintreeDataJs" => $block->getJsSrc(),
+    "braintreeDataJs" => $block->escapeUrl($block->getJsSrc()),
 ];
 $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($arrayData);
 ?>
 <script type="text/x-magento-init">
     {
         "body": {
-             "braintreeDataJs": <?php /* @escapeNotVerified */ echo $serializedFormData ?>
+             "braintreeDataJs": <?php /* @noEscape */ echo $serializedFormData; ?>
         }
     }
 </script>
diff --git a/app/code/Magento/Braintree/view/frontend/templates/form.phtml b/app/code/Magento/Braintree/view/frontend/templates/form.phtml
index f740ad803b188d5c3c7b53b31021d2e2b8f0edde..459a61568cff7fa67f19d3146b1a2f7e0fb5ff5d 100644
--- a/app/code/Magento/Braintree/view/frontend/templates/form.phtml
+++ b/app/code/Magento/Braintree/view/frontend/templates/form.phtml
@@ -7,75 +7,112 @@
 // @codingStandardsIgnoreFile
 
 /** @var \Magento\Braintree\Block\Form $block */
-$_code = $block->getMethodCode();
-$_loggedIn = $block->isCustomerLoggedIn();
-$_storedCards = $block->getStoredCards();
-$_useVault = $_loggedIn && $block->useVault() && count($_storedCards);
-$_autoDetection = $block->isCcDetectionEnabled();
-$clientToken = $block->getClientToken();
+$code = $block->getMethodCode();
+$loggedIn = $block->isCustomerLoggedIn();
+$storedCards = $block->getStoredCards();
+$useVault = $loggedIn && $block->useVault() && count($storedCards);
+$autoDetection = $block->isCcDetectionEnabled();
+$clientToken = $block->escapeHtml($block->getClientToken());
+$formData = [
+    "useVault" => $useVault,
+    "clientToken" => $clientToken,
+    "autoDetection" => $autoDetection,
+    "loggedIn" => $loggedIn,
+];
+$serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData);
+$ccType = $block->getInfoData('cc_type');
+$ccExpMonth = $block->getInfoData('cc_exp_month');
+$ccExpYear = $block->getInfoData('cc_exp_year');
 ?>
-<fieldset class="fieldset items braintree" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none;">
+<fieldset class="fieldset items braintree" id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;">
     <input type="hidden" name="payment[payment_method_nonce]" id="braintree_nonce" value="" />
-    <input type="hidden" name="payment[cc_last4]" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_last4" value="" />
-    <?php if ($_autoDetection) : ?>
+    <input type="hidden" name="payment[cc_last4]" id="<?php /* @noEscape */ echo $code; ?>_cc_last4" value="" />
+    <?php if ($autoDetection) : ?>
         <input type="hidden" id="card_type_autoselect" value="" />
     <?php endif; ?>
-    <?php if ($_useVault): ?>
-        <li id="<?php /* @escapeNotVerified */ echo $_code ?>_token_selector">
-            <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_token"><?php /* @escapeNotVerified */ echo __('Payment Information') ?></label>
+    <?php if ($useVault): ?>
+        <li id="<?php /* @noEscape */ echo $code; ?>_token_selector">
+            <label for="<?php /* @noEscape */ echo $code; ?>_cc_token">
+                <?php echo $block->escapeHtml(__('Payment Information')); ?>
+            </label>
             <div class="input-box">
-                <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_token" name="payment[cc_token]">
-                    <?php foreach ($_storedCards as $creditCard): ?>
-                        <option value="<?php /* @escapeNotVerified */ echo $creditCard->token?>" <?php echo $creditCard->default ? 'selected="selected"' : '' ?>>
-                            <?php /* @escapeNotVerified */ echo $creditCard->maskedNumber . ' - ' . $creditCard->cardType; ?>
+                <select id="<?php /* @noEscape */ echo $code; ?>_cc_token" name="payment[cc_token]">
+                    <?php foreach ($storedCards as $creditCard): ?>
+                        <option value="<?php echo $block->escapeHtml($creditCard->token); ?>"
+                            <?php /* @noEscape */ echo $creditCard->default ? ' selected="selected"' : ''; ?>>
+                            <?php echo $block->escapeHtml($creditCard->maskedNumber); ?> - <?php echo $block->escapeHtml($creditCard->cardType); ?>
                         </option>
                     <?php endforeach; ?>
-                        <option value=''><?php /* @escapeNotVerified */ echo __('Add new card') ?></option>
+                        <option value=''><?php echo $block->escapeHtml(__('Add new card')); ?></option>
                 </select>
             </div>
         </li>
     <?php endif; ?>
     <div class="field type required hide_if_token_selected">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span></label>
+        <label for="<?php /* @noEscape */ echo $code; ?>_cc_type" class="label">
+            <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span>
+        </label>
         <div class="control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"
-                    data-mage-init='{"creditCardType":{"creditCardTypeContainer":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div"}}'
-                    name="payment[cc_type]" data-validate='{required:true, "validate-cc-type-select":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_number"}' class="select">
-                <option value=""><?php /* @escapeNotVerified */ echo __('--Please Select--')?></option>
-                <?php $_ccType = $block->getInfoData('cc_type') ?>
-                <?php foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
-                    <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"<?php if ($_typeCode == $_ccType): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option>
+            <select id="<?php /* @noEscape */ echo $code; ?>_cc_type"
+                    data-mage-init='{"creditCardType":{"creditCardTypeContainer":"#<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div"}}'
+                    name="payment[cc_type]" data-validate='{
+                        required:true,
+                        "validate-cc-type-select":"#<?php /* @noEscape */ echo $code; ?>_cc_number"
+                    }' class="select">
+                <option value=""><?php echo $block->escapeHtml(__('--Please Select--')); ?></option>
+                <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?>
+                    <option value="<?php echo $block->escapeHtml($typeCode); ?>"
+                        <?php if ($typeCode == $ccType): ?> selected="selected"<?php endif; ?>>
+                        <?php echo $block->escapeHtml($typeName); ?>
+                    </option>
                 <?php endforeach ?>
             </select>
         </div>
     </div>
     <div class="field number required hide_if_token_selected">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span></label>
+        <label for="<?php /* @noEscape */ echo $code; ?>_cc_number" class="label">
+            <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span>
+        </label>
         <div class="control">
-            <input type="number" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" name="payment[cc_number]" title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" class="input-text" value="" data-validate='{"required-number":true, "validate-cc-number":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type", "validate-cc-type":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"}'/>
+            <input type="number" id="<?php /* @noEscape */ echo $code; ?>_cc_number" name="payment[cc_number]"
+                   title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>" class="input-text" value=""
+                   data-validate='{
+                       "required-number":true,
+                       "validate-cc-number":"#<?php /* @noEscape */ echo $code; ?>_cc_type",
+                       "validate-cc-type":"#<?php /* @noEscape */ echo $code; ?>_cc_type"
+                   }'/>
         </div>
     </div>
-    <div class="field date required hide_if_token_selected" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_exp_div">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" class="label"><span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span></label>
+    <div class="field date required hide_if_token_selected" id="<?php /* @noEscape */ echo $code; ?>_cc_type_exp_div">
+        <label for="<?php /* @noEscape */ echo $code; ?>_expiration" class="label">
+            <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span>
+        </label>
         <div class="control">
             <div class="fields group group-2">
                 <div class="field no-label month">
                     <div class="control">
-                        <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" name="payment[cc_exp_month]" class="select month" data-validate='{required:true, "validate-cc-exp":"#<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr"}'>
-                            <?php $_ccExpMonth = $block->getInfoData('cc_exp_month') ?>
+                        <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]"
+                                class="select month" data-validate='{
+                                    required:true, "validate-cc-exp":"#<?php /* @noEscape */ echo $code; ?>_expiration_yr"
+                                }'>
                             <?php foreach ($block->getCcMonths() as $k => $v): ?>
-                                <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpMonth): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-                            <?php endforeach ?>
+                                <option value="<?php echo $k ? $block->escapeHtml($k) : ''; ?>"
+                                    <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>>
+                                    <?php echo $block->escapeHtml($v); ?>
+                                </option>
+                            <?php endforeach; ?>
                         </select>
                     </div>
                 </div>
                 <div class="field no-label year">
                     <div class="control">
-                        <?php $_ccExpYear = $block->getInfoData('cc_exp_year') ?>
-                        <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr" name="payment[cc_exp_year]" class="select year" data-validate='{required:true}'>
+                        <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]" class="select year" data-validate='{required:true}'>
                             <?php foreach ($block->getCcYears() as $k => $v): ?>
-                                <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpYear): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-                            <?php endforeach ?>
+                                <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>"
+                                    <?php if ($k == $ccExpYear): ?> selected="selected"<?php endif; ?>>
+                                    <?php echo $block->escapeHtml($v); ?>
+                                </option>
+                            <?php endforeach; ?>
                         </select>
                     </div>
                 </div>
@@ -83,39 +120,44 @@ $clientToken = $block->getClientToken();
         </div>
     </div>
     <?php if ($block->hasVerification()): ?>
-        <div class="field cvv required hide_if_token_selected" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_cvv_div">
-            <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" class="label"><span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span></label>
+        <div class="field cvv required hide_if_token_selected" id="<?php /* @noEscape */ echo $code; ?>_cc_type_cvv_div">
+            <label for="<?php /* @noEscape */ echo $code; ?>_cc_cid" class="label">
+                <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span>
+            </label>
             <div class="control">
-                <input type="number" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" class="input-text cvv" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" name="payment[cc_cid]" value="" data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"}' />
-                <?php $_content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' . __('Card Verification Number Visual Reference') . '\" title=\"' . __('Card Verification Number Visual Reference') . '\" />'; ?>
+                <input type="number" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>"
+                       class="input-text cvv"
+                       id="<?php /* @noEscape */ echo $code; ?>_cc_cid" name="payment[cc_cid]" value=""
+                       data-validate='{
+                           "required-number":true, "validate-cc-cvn":"#<?php /* @noEscape */ echo $code; ?>_cc_type"
+                       }' />
+                <?php $content = '<img src=\"' . $block->escapeUrl($block->getViewFileUrl('Magento_Checkout::cvv.png')) .
+                    '\" alt=\"' . $block->escapeHtml(__('Card Verification Number Visual Reference')) .
+                    '\" title=\"' . $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" />'; ?>
                 <div class="note">
-                    <a href="#" class="action cvv" title="<?php /* @escapeNotVerified */ echo __('What is this?') ?>" data-mage-init='{"tooltip": {"content": "<?php /* @escapeNotVerified */ echo $_content ?>"}}'><span><?php /* @escapeNotVerified */ echo __('What is this?') ?></span></a>
+                    <a href="#" class="action cvv" title="<?php echo $block->escapeHtml(__('What is this?')); ?>"
+                       data-mage-init='{"tooltip": {"content": "<?php /* @noEscape */ echo $content; ?>"}}'>
+                        <span><?php echo $block->escapeHtml(__('What is this?')); ?></span>
+                    </a>
                 </div>
             </div>
         </div>
     <?php endif; ?>
 
     <?php if($block->canSaveCard()): ?>
-        <li id="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault_div" style="text-align:left;" class="hide_if_token_selected">
-            <input type="checkbox" title="<?php /* @escapeNotVerified */ echo __('Save this card for future use') ?>" class="input-checkbox" id="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault" checked="checked" name="payment[store_in_vault]" value="1" />
-            <label for="<?php /* @escapeNotVerified */ echo $_code ?>_store_in_vault" class="required" style="float:none;"><?php /* @escapeNotVerified */ echo __('Save this card for future use') ?></label>
+        <li id="<?php /* @noEscape */ echo $code; ?>_store_in_vault_div" style="text-align:left;" class="hide_if_token_selected">
+            <input type="checkbox" title="<?php echo $block->escapeHtml(__('Save this card for future use')); ?>" class="input-checkbox"
+                   id="<?php /* @noEscape */ echo $code; ?>_store_in_vault" checked="checked" name="payment[store_in_vault]" value="1" />
+            <label for="<?php /* @noEscape */ echo $code; ?>_store_in_vault" class="required" style="float:none;">
+                <?php echo $block->escapeHtml(__('Save this card for future use')); ?>
+            </label>
         </li>
     <?php endif; ?>
 </fieldset>
-
-<?php
-    $formData = [
-        "useVault" => $_useVault,
-        "clientToken" => $clientToken,
-        "autoDetection" => $_autoDetection,
-        "loggedIn" => $_loggedIn,
-    ];
-    $serializedFormData = $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($formData);
-?>
 <script type="text/x-magento-init">
     {
         "#payment_form_braintree": {
-            "braintreeForm": <?php /* @escapeNotVerified */ echo $serializedFormData ?>
+            "braintreeForm": <?php /* @noEscape */ echo $serializedFormData ?>
         }
     }
 </script>
diff --git a/app/code/Magento/Braintree/view/frontend/web/js/braintree-paypal-shortcut.js b/app/code/Magento/Braintree/view/frontend/web/js/braintree-paypal-shortcut.js
deleted file mode 100644
index 8880c65fd87bc3dea825691c9578efb337a6e604..0000000000000000000000000000000000000000
--- a/app/code/Magento/Braintree/view/frontend/web/js/braintree-paypal-shortcut.js
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint jquery:true*/
-define([
-    "jquery",
-    "braintree",
-    "jquery/ui"
-], function($, braintree){
-    "use strict";
-
-    $.widget('mage.braintreePayPalShortcut', {
-        options: {
-            clientToken : "",
-            currency : 'USD',
-            amount : 0,
-            locale: 'en_US',
-            merchantName: null,
-            container: '',
-            submitFormId: null,
-            enableBillingAddress: false,
-            paymentMethodNonceId: null,
-            paymentDetailsId: null
-        },
-
-        _create: function() {
-            var clientToken = this.options.clientToken;
-            var paymentDetailsId = this.options.paymentDetailsId;
-            var submitFormId = this.options.submitFormId;
-            var self = this;
-            var $container = $('#'.concat(this.options.container));
-            $container.empty();
-
-            // braintree setup should be called only once,
-            // but widget._create() called twice (related to minicart observable attributes implementation)
-            if ($container.data('rendered')) {
-                return;
-            }
-            $container.data('rendered', true);
-
-
-            braintree.setup(clientToken, "paypal", {
-                container: this.options.container,
-                singleUse: true,
-                amount: this.options.amount,
-                currency: this.options.currency,
-                enableShippingAddress: true,
-                enableBillingAddress: this.options.enableBillingAddress,
-                locale: this.options.locale,
-                displayName: this.options.merchantName,
-                onPaymentMethodReceived: function (obj) {
-                    var nonce = obj.nonce;
-                    var details = JSON.stringify(obj.details);
-                    $('#'.concat(self.options.paymentMethodNonceId)).val(nonce);
-                    $('#'.concat(paymentDetailsId)).val(details);
-                    var hiddenForm = $('#'.concat(submitFormId))[0];
-                    hiddenForm.submit();
-                }
-            });
-        }
-    });
-
-    return $.mage.braintreePayPalShortcut;
-});
diff --git a/app/code/Magento/Braintree/view/frontend/web/js/button/action/get-data.js b/app/code/Magento/Braintree/view/frontend/web/js/button/action/get-data.js
new file mode 100644
index 0000000000000000000000000000000000000000..564c5b7695028cc917077780fb2f59154c858e98
--- /dev/null
+++ b/app/code/Magento/Braintree/view/frontend/web/js/button/action/get-data.js
@@ -0,0 +1,38 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'jquery'
+], function ($) {
+    'use strict';
+
+    var when;
+
+    return {
+
+        /**
+         * @param {String} url
+         * @returns {*}
+         */
+        when: function (url) {
+            if (!when) {
+                when = $.when($.get(url, {
+                    isAjax: true
+                }));
+            }
+
+            return when;
+        },
+
+        /**
+         * @param {String} url
+         * @returns {*}
+         */
+        request: function (url) {
+            return $.get(url, {
+                isAjax: true
+            });
+        }
+    };
+});
diff --git a/app/code/Magento/Braintree/view/frontend/web/js/button/braintree-paypal-minicart.js b/app/code/Magento/Braintree/view/frontend/web/js/button/braintree-paypal-minicart.js
new file mode 100644
index 0000000000000000000000000000000000000000..c26f3536f6a3bd607476e4824d5c43cd759e263d
--- /dev/null
+++ b/app/code/Magento/Braintree/view/frontend/web/js/button/braintree-paypal-minicart.js
@@ -0,0 +1,35 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'jquery',
+    'Magento_Braintree/js/button/builder',
+    'Magento_Ui/js/lib/view/utils/dom-observer',
+    'mage/apply/main'
+], function ($, builder, domObserver, mage) {
+    'use strict';
+
+    return function (config) {
+        var $container = $(config.containerId);
+
+        domObserver.off(config.containerId);
+        domObserver.get(config.containerId, function () {
+            mage.apply();
+        });
+
+        if ($container.data('is_rendered')) {
+            return;
+        }
+        $container.data('is_rendered', true);
+
+        builder.setClientToken(config.clientToken)
+            .setOptions(config.options)
+            .setName('paypal')
+            .setContainer(config.containerId)
+            .setPayment(config.paymentId)
+            .setDetails(config.detailsId)
+            .setFormAction(config.formAction)
+            .build();
+    };
+});
diff --git a/app/code/Magento/Braintree/view/frontend/web/js/button/braintree-paypal.js b/app/code/Magento/Braintree/view/frontend/web/js/button/braintree-paypal.js
new file mode 100644
index 0000000000000000000000000000000000000000..beb220e2f2c6f0a6f864b3f4fe357c50f0d0fe5b
--- /dev/null
+++ b/app/code/Magento/Braintree/view/frontend/web/js/button/braintree-paypal.js
@@ -0,0 +1,114 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'jquery',
+    'Magento_Braintree/js/button/builder',
+    'Magento_Braintree/js/button/action/get-data',
+    'Magento_Customer/js/customer-data',
+    'Magento_Ui/js/lib/view/utils/dom-observer'
+], function ($, builder, actionGetData, customerData, domObserver) {
+    'use strict';
+
+    return function (config) {
+
+        var button = {
+            isClick: false,
+
+            isAfterClick: false,
+
+            isRendered: false,
+
+            /**
+             * @returns
+             */
+            afterClickAction: function () {
+                var paypalButton = config.containerId + ' .paypal-button';
+
+                $('body').trigger('processStart');
+
+                domObserver.get(paypalButton, function () {
+                    domObserver.off(paypalButton);
+
+                    if (this.isRendered) {
+                        this.isRendered = false;
+
+                        return;
+                    }
+                    $('body').trigger('processStop');
+                    this.isAfterClick = true;
+                    $(paypalButton).click();
+                }.bind(this));
+            },
+
+            /**
+             * @param {*} response
+             * @returns
+             */
+            update: function (response) {
+                config.options.amount = response.isEmpty ? 1 : response.amount;
+                config.options.currency = response.isEmpty ? 'USD' : response.currency;
+
+                if (this.isClick) {
+                    this.isRendered = true;
+                    this.afterClickAction();
+                }
+                builder.setClientToken(config.clientToken)
+                    .setOptions(config.options)
+                    .setName('paypal')
+                    .setContainer(config.containerId)
+                    .setPayment(config.paymentId)
+                    .setDetails(config.detailsId)
+                    .setFormAction(config.formAction)
+                    .build();
+            },
+
+            /**
+             * @param {*} event
+             * @returns
+             */
+            mousedown: function (event) {
+                this.isClick = true;
+                event.preventDefault();
+                event.stopPropagation();
+
+                $(config.containerId).parents('form:first')
+                    .find('.action.primary:first')
+                    .click();
+            },
+
+            /**
+             * @param {*} event
+             * @returns
+             */
+            click: function (event) {
+
+                if (this.isAfterClick) {
+                    this.isAfterClick = false;
+                    this.isClick = false;
+
+                    return;
+                }
+
+                event.preventDefault();
+                event.stopPropagation();
+            }
+        };
+
+        $(config.containerId).on('mousedown', button.mousedown.bind(button));
+        $(config.containerId).on('click', button.click.bind(button));
+
+        customerData.get('cart')
+            .subscribe(function () {
+                if (this.isClick) {
+                    actionGetData.request(config.url)
+                        .done(this.update.bind(this));
+                }
+            }.bind(button));
+
+        actionGetData.when(config.url)
+            .promise()
+            .done(button.update.bind(button));
+    };
+});
diff --git a/app/code/Magento/Braintree/view/frontend/web/js/button/builder.js b/app/code/Magento/Braintree/view/frontend/web/js/button/builder.js
new file mode 100644
index 0000000000000000000000000000000000000000..75d4568e8968d20291e762c8c69a1c1c1ea77c90
--- /dev/null
+++ b/app/code/Magento/Braintree/view/frontend/web/js/button/builder.js
@@ -0,0 +1,170 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'jquery',
+    'braintree',
+    'underscore',
+    'mage/template'
+], function ($, braintree, _, mageTemplate) {
+    'use strict';
+
+    // private
+    var payment = {
+        form: {
+
+            /**
+             * @param {*} formData
+             * @returns {jQuery}
+             */
+            build: function (formData) {
+                var formTmpl = mageTemplate('<form action="<%= data.action %>"' +
+                    ' method="POST" hidden enctype="multipart/form-data">' +
+                    '<% _.each(data.fields, function(val, key){ %>' +
+                    '<input value=\'<%= val %>\' name="<%= key %>" type="hidden">' +
+                    '<% }); %>' +
+                    '</form>');
+
+                return $(formTmpl({
+                    data: {
+                        action: formData.action,
+                        fields: formData.fields
+                    }
+                })).appendTo($('[data-container="body"]'));
+            }
+        },
+
+        /**
+         * @param {*} allow
+         * @returns {*}
+         */
+        prepare: function (allow) {
+            var self = this,
+                config = {
+
+                    /**
+                     * @param {*} paymentResult
+                     * @returns
+                     */
+                    onPaymentMethodReceived: function (paymentResult) {
+                        self.form.build(
+                            {
+                                action: self.formAction,
+                                fields: {
+                                    'payment_method_nonce': paymentResult.nonce,
+                                    'details': JSON.stringify(paymentResult.details)
+                                }
+                            }
+                        ).submit();
+                    }
+                };
+
+            _.each(this.options, function (option, name) {
+                if (option !== null && _.indexOf(allow, name) !== -1) {
+                    config[name] = option;
+                }
+            });
+
+            return config;
+        },
+
+        /**
+         * @returns {*}
+         */
+        getConfig: function () {
+            return this.prepare([
+                'merchantName',
+                'locale',
+                'enableBillingAddress',
+                'currency',
+                'amount',
+                'container',
+                'singleUse',
+                'enableShippingAddress'
+            ]);
+        }
+    };
+
+    // public
+    return {
+
+        /**
+         * @param {String} clientToken
+         * @returns {*}
+         */
+        setClientToken: function (clientToken) {
+            payment.clientToken = clientToken;
+
+            return this;
+        },
+
+        /**
+         * @param {*} options
+         * @returns {*}
+         */
+        setOptions: function (options) {
+            payment.options = options;
+
+            return this;
+        },
+
+        /**
+         * @param {String} name
+         * @returns {*}
+         */
+        setName: function (name) {
+            payment.name = name;
+
+            return this;
+        },
+
+        /**
+         * @param {String} containerId
+         * @returns {*}
+         */
+        setContainer: function (containerId) {
+            payment.containerId = containerId;
+
+            return this;
+        },
+
+        /**
+         * @param {String} paymentId
+         * @returns {*}
+         */
+        setPayment: function (paymentId) {
+            payment.paymentId = paymentId;
+
+            return this;
+        },
+
+        /**
+         * @param {String} detailsId
+         * @returns {*}
+         */
+        setDetails: function (detailsId) {
+            payment.detailsId = detailsId;
+
+            return this;
+        },
+
+        /**
+         * @param {String} formAction
+         * @returns {*}
+         */
+        setFormAction: function (formAction) {
+            payment.formAction = formAction;
+
+            return this;
+        },
+
+        /**
+         * @returns
+         */
+        build: function () {
+            $(payment.containerId).empty();
+            braintree.setup(payment.clientToken, payment.name, payment.getConfig());
+        }
+    };
+});
diff --git a/app/code/Magento/Braintree/view/frontend/web/js/cc-edit-form.js b/app/code/Magento/Braintree/view/frontend/web/js/cc-edit-form.js
index 075a6418ab8ebc81099cbe1ff05f16108a14ff54..3d8e561448c4698cae2a2a044782fac59638a1de 100644
--- a/app/code/Magento/Braintree/view/frontend/web/js/cc-edit-form.js
+++ b/app/code/Magento/Braintree/view/frontend/web/js/cc-edit-form.js
@@ -7,8 +7,9 @@ define([
     "jquery",
     "braintree",
     'mage/translate',
+    'Magento_Ui/js/modal/alert',
     "jquery/ui"
-], function ($, braintree, $t) {
+], function ($, braintree, $t, alert) {
     'use strict';
 
     $.widget('mage.braintreeEditForm', {
@@ -199,13 +200,17 @@ define([
                                 }
                             },
                             error: function (response) {
-                                alert($t('There was error during saving card data'));
+                                alert({
+                                    content: $t('There was error during saving card data')
+                                });
                             }
                         });
                     } else {
                         //handle error
                         $('body').trigger('processStop');
-                        alert($t('There was error during saving card data'));
+                        alert({
+                            content: $t('There was error during saving card data')
+                        });
                     }
                 });
             }
diff --git a/app/code/Magento/Braintree/view/frontend/web/js/cc-form.js b/app/code/Magento/Braintree/view/frontend/web/js/cc-form.js
index 303ead9b6546b14874f31a50681e0daf706e7e36..a922038eae6c0e2e299fb776587ced1d13ec1afa 100644
--- a/app/code/Magento/Braintree/view/frontend/web/js/cc-form.js
+++ b/app/code/Magento/Braintree/view/frontend/web/js/cc-form.js
@@ -7,8 +7,9 @@ define([
     "jquery",
     "braintree",
     'mage/translate',
+    'Magento_Ui/js/modal/alert',
     "jquery/ui"
-], function($, braintree, $t) {
+], function($, braintree, $t, alert) {
     "use strict";
 
     $.widget('mage.braintreeForm', {
@@ -92,7 +93,9 @@ define([
                                 var form = $(self.options.formSelector)[0];
                                 form.submit();
                             } else {
-                                alert($t("An error occured with payment processing."));
+                                alert({
+                                    content: $t("An error occured with payment processing.")
+                                });
                             }
                         }
                     );
diff --git a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/braintree-paypal.js b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/braintree-paypal.js
index 3b5ea0e29bbb9ba0575c68d6a723dd9841585d9e..78cd0c4f0c8d256d8c514fe335b8964e8da09f72 100644
--- a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/braintree-paypal.js
+++ b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/braintree-paypal.js
@@ -47,11 +47,6 @@ define(
                 return {
                     'method': this.item.method,
                     'po_number': null,
-                    'cc_owner': null,
-                    'cc_number': null,
-                    'cc_type': null,
-                    'cc_exp_year': null,
-                    'cc_exp_month': null,
                     'additional_data': {
                         'payment_method_nonce': this.paymentMethodNonce()
                     }
@@ -93,7 +88,7 @@ define(
                         singleUse: true,
                         amount: totals.base_grand_total,
                         currency: totals.base_currency_code,
-                        displayName: this.merchantName,
+                        displayName: this.merchantName || '',
                         locale: this.locale,
                         onPaymentMethodReceived: function (response) {
                             self.paymentMethodNonce(response.nonce);
diff --git a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js
index ba203615d426260d4a37dc32b94c90dd3e9594c8..303c535e1b17a5fd2292ffc85a524e4127ec3cd1 100644
--- a/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js
+++ b/app/code/Magento/Braintree/view/frontend/web/js/view/payment/method-renderer/cc-form.js
@@ -173,15 +173,15 @@ define(
             getData: function () {
                 return {
                     'method': this.item.method,
-                    'cc_type': this.creditCardType(),
-                    'cc_exp_year': this.creditCardExpYear(),
-                    'cc_exp_month': this.creditCardExpMonth(),
                     'additional_data': {
                         'cc_last4': this.creditCardNumber().slice(-4),
                         'store_in_vault': this.storeInVault(),
                         'payment_method_nonce': this.paymentMethodNonce(),
                         'cc_token': this.selectedCardToken(),
-                        'device_data': this.deviceData
+                        'device_data': this.deviceData,
+                        'cc_type': this.creditCardType(),
+                        'cc_exp_year': this.creditCardExpYear(),
+                        'cc_exp_month': this.creditCardExpMonth()
                     }
                 };
             },
diff --git a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php
index 1c2c1ed85fac6b09e240ecb1e15c52fe67a07507..20bbd1c6a8d850b6c819c7ffe50d76e520c7552d 100644
--- a/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php
+++ b/app/code/Magento/Bundle/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php
@@ -215,7 +215,7 @@ class Option extends \Magento\Backend\Block\Widget
     public function getOptions()
     {
         if (!$this->_options) {
-            /** @var \Magento\Bundle\Model\Resource\Option\Collection $optionCollection */
+            /** @var \Magento\Bundle\Model\ResourceModel\Option\Collection $optionCollection */
             $optionCollection = $this->getProduct()->getTypeInstance()->getOptionsCollection($this->getProduct());
 
             $selectionCollection = $this->getProduct()->getTypeInstance()->getSelectionsCollection(
diff --git a/app/code/Magento/Bundle/Helper/Catalog/Product/Configuration.php b/app/code/Magento/Bundle/Helper/Catalog/Product/Configuration.php
index 55a9f0c6724e56b5b9c52a931e97185fc7a4d002..76c89da4539ee73f67432d154e27e4b250091643 100644
--- a/app/code/Magento/Bundle/Helper/Catalog/Product/Configuration.php
+++ b/app/code/Magento/Bundle/Helper/Catalog/Product/Configuration.php
@@ -115,7 +115,7 @@ class Configuration extends AbstractHelper implements ConfigurationInterface
         $optionsQuoteItemOption = $item->getOptionByCode('bundle_option_ids');
         $bundleOptionsIds = $optionsQuoteItemOption ? unserialize($optionsQuoteItemOption->getValue()) : [];
         if ($bundleOptionsIds) {
-            /** @var \Magento\Bundle\Model\Resource\Option\Collection $optionsCollection */
+            /** @var \Magento\Bundle\Model\ResourceModel\Option\Collection $optionsCollection */
             $optionsCollection = $typeInstance->getOptionsByIds($bundleOptionsIds, $product);
 
             // get and add bundle selections collection
diff --git a/app/code/Magento/Bundle/Model/LinkManagement.php b/app/code/Magento/Bundle/Model/LinkManagement.php
index eee6f3b66e4739a8596bd385275e5f34c873cfe3..da0842ef8536b8a405cd49504ad648ca54a1acef 100644
--- a/app/code/Magento/Bundle/Model/LinkManagement.php
+++ b/app/code/Magento/Bundle/Model/LinkManagement.php
@@ -26,7 +26,7 @@ class LinkManagement implements \Magento\Bundle\Api\ProductLinkManagementInterfa
     protected $linkFactory;
 
     /**
-     * @var \Magento\Bundle\Model\Resource\BundleFactory
+     * @var \Magento\Bundle\Model\ResourceModel\BundleFactory
      */
     protected $bundleFactory;
 
@@ -36,7 +36,7 @@ class LinkManagement implements \Magento\Bundle\Api\ProductLinkManagementInterfa
     protected $bundleSelection;
 
     /**
-     * @var Resource\Option\CollectionFactory
+     * @var \Magento\Bundle\Model\ResourceModel\Option\CollectionFactory
      */
     protected $optionCollection;
 
@@ -48,9 +48,9 @@ class LinkManagement implements \Magento\Bundle\Api\ProductLinkManagementInterfa
     /**
      * @param ProductRepositoryInterface $productRepository
      * @param \Magento\Bundle\Api\Data\LinkInterfaceFactory $linkFactory
-     * @param \Magento\Bundle\Model\Resource\BundleFactory $bundleFactory
+     * @param \Magento\Bundle\Model\ResourceModel\BundleFactory $bundleFactory
      * @param \Magento\Bundle\Model\SelectionFactory $bundleSelection
-     * @param \Magento\Bundle\Model\Resource\Option\CollectionFactory $optionCollection
+     * @param \Magento\Bundle\Model\ResourceModel\Option\CollectionFactory $optionCollection
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
      */
@@ -58,8 +58,8 @@ class LinkManagement implements \Magento\Bundle\Api\ProductLinkManagementInterfa
         ProductRepositoryInterface $productRepository,
         \Magento\Bundle\Api\Data\LinkInterfaceFactory $linkFactory,
         \Magento\Bundle\Model\SelectionFactory $bundleSelection,
-        \Magento\Bundle\Model\Resource\BundleFactory $bundleFactory,
-        \Magento\Bundle\Model\Resource\Option\CollectionFactory $optionCollection,
+        \Magento\Bundle\Model\ResourceModel\BundleFactory $bundleFactory,
+        \Magento\Bundle\Model\ResourceModel\Option\CollectionFactory $optionCollection,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
     ) {
@@ -221,7 +221,7 @@ class LinkManagement implements \Magento\Bundle\Api\ProductLinkManagementInterfa
             );
         }
 
-        /* @var $resource \Magento\Bundle\Model\Resource\Bundle */
+        /* @var $resource \Magento\Bundle\Model\ResourceModel\Bundle */
         $resource = $this->bundleFactory->create();
         $selections = $resource->getSelectionsData($product->getId());
         /** @var \Magento\Catalog\Model\Product $linkProductModel */
@@ -291,7 +291,7 @@ class LinkManagement implements \Magento\Bundle\Api\ProductLinkManagementInterfa
                 __('Requested bundle option product doesn\'t exist')
             );
         }
-        /* @var $resource \Magento\Bundle\Model\Resource\Bundle */
+        /* @var $resource \Magento\Bundle\Model\ResourceModel\Bundle */
         $resource = $this->bundleFactory->create();
         $resource->dropAllUnneededSelections($product->getId(), $excludeSelectionIds);
         $resource->saveProductRelations($product->getId(), array_unique($usedProductIds));
diff --git a/app/code/Magento/Bundle/Model/Option.php b/app/code/Magento/Bundle/Model/Option.php
index 9b7e1029606c65133e418cc9fa3fb415e7a587bc..6fdf4a2569ad2840a9a2a0356949de681f7a6e16 100644
--- a/app/code/Magento/Bundle/Model/Option.php
+++ b/app/code/Magento/Bundle/Model/Option.php
@@ -41,7 +41,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Bundle\Model\Resource\Option');
+        $this->_init('Magento\Bundle\Model\ResourceModel\Option');
         parent::_construct();
     }
 
diff --git a/app/code/Magento/Bundle/Model/OptionRepository.php b/app/code/Magento/Bundle/Model/OptionRepository.php
index 85d81e61b2b404bf044d1327dc0fe70c04abe8cd..31667241fc6e3c414c481b83ad0e0696e5d4fde6 100644
--- a/app/code/Magento/Bundle/Model/OptionRepository.php
+++ b/app/code/Magento/Bundle/Model/OptionRepository.php
@@ -31,7 +31,7 @@ class OptionRepository implements \Magento\Bundle\Api\ProductOptionRepositoryInt
     protected $optionFactory;
 
     /**
-     * @var Resource\Option
+     * @var \Magento\Bundle\Model\ResourceModel\Option
      */
     protected $optionResource;
 
@@ -64,7 +64,7 @@ class OptionRepository implements \Magento\Bundle\Api\ProductOptionRepositoryInt
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
      * @param Product\Type $type
      * @param \Magento\Bundle\Api\Data\OptionInterfaceFactory $optionFactory
-     * @param Resource\Option $optionResource
+     * @param \Magento\Bundle\Model\ResourceModel\Option $optionResource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Bundle\Api\ProductLinkManagementInterface $linkManagement
      * @param Product\OptionList $productOptionList
@@ -75,7 +75,7 @@ class OptionRepository implements \Magento\Bundle\Api\ProductOptionRepositoryInt
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
         \Magento\Bundle\Model\Product\Type $type,
         \Magento\Bundle\Api\Data\OptionInterfaceFactory $optionFactory,
-        \Magento\Bundle\Model\Resource\Option $optionResource,
+        \Magento\Bundle\Model\ResourceModel\Option $optionResource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Bundle\Api\ProductLinkManagementInterface $linkManagement,
         \Magento\Bundle\Model\Product\OptionList $productOptionList,
diff --git a/app/code/Magento/Bundle/Model/Product/Attribute/Source/Price/View.php b/app/code/Magento/Bundle/Model/Product/Attribute/Source/Price/View.php
index 721feb4b46d9098a9df97f0b320d2eeef19e0231..8f822600b35c24d185a290ef247e22f650e17dc4 100644
--- a/app/code/Magento/Bundle/Model/Product/Attribute/Source/Price/View.php
+++ b/app/code/Magento/Bundle/Model/Product/Attribute/Source/Price/View.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Bundle\Model\Product\Attribute\Source\Price;
 
-use Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory;
 use Magento\Framework\DB\Ddl\Table;
 
 /**
diff --git a/app/code/Magento/Bundle/Model/Product/Price.php b/app/code/Magento/Bundle/Model/Product/Price.php
index 4a1a21d27bd0c0365decbb2875109b51f5f27ac4..d7dd23bc8931e46a74cc4eb728eaa4858522fa0d 100644
--- a/app/code/Magento/Bundle/Model/Product/Price.php
+++ b/app/code/Magento/Bundle/Model/Product/Price.php
@@ -42,7 +42,7 @@ class Price extends \Magento\Catalog\Model\Product\Type\Price
     /**
      * Price constructor.
      *
-     * @param \Magento\CatalogRule\Model\Resource\RuleFactory $ruleFactory
+     * @param \Magento\CatalogRule\Model\ResourceModel\RuleFactory $ruleFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Customer\Model\Session $customerSession
@@ -56,7 +56,7 @@ class Price extends \Magento\Catalog\Model\Product\Type\Price
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
-        \Magento\CatalogRule\Model\Resource\RuleFactory $ruleFactory,
+        \Magento\CatalogRule\Model\ResourceModel\RuleFactory $ruleFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Customer\Model\Session $customerSession,
@@ -348,7 +348,7 @@ class Price extends \Magento\Catalog\Model\Product\Type\Price
      * Get Options with attached Selections collection
      *
      * @param \Magento\Catalog\Model\Product $product
-     * @return \Magento\Bundle\Model\Resource\Option\Collection
+     * @return \Magento\Bundle\Model\ResourceModel\Option\Collection
      */
     public function getOptions($product)
     {
diff --git a/app/code/Magento/Bundle/Model/Product/Type.php b/app/code/Magento/Bundle/Model/Product/Type.php
index a22f16616a88687282e694665bc720630804d832..65742f76f261fc8d391bc992d7d56db848307148 100644
--- a/app/code/Magento/Bundle/Model/Product/Type.php
+++ b/app/code/Magento/Bundle/Model/Product/Type.php
@@ -100,7 +100,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType
     protected $_bundleOption;
 
     /**
-     * @var \Magento\Bundle\Model\Resource\Selection
+     * @var \Magento\Bundle\Model\ResourceModel\Selection
      */
     protected $_bundleSelection;
 
@@ -110,12 +110,12 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType
     protected $_config;
 
     /**
-     * @var \Magento\Bundle\Model\Resource\Selection\CollectionFactory
+     * @var \Magento\Bundle\Model\ResourceModel\Selection\CollectionFactory
      */
     protected $_bundleCollection;
 
     /**
-     * @var \Magento\Bundle\Model\Resource\BundleFactory
+     * @var \Magento\Bundle\Model\ResourceModel\BundleFactory
      */
     protected $_bundleFactory;
 
@@ -152,10 +152,10 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType
      * @param \Magento\Catalog\Helper\Product $catalogProduct
      * @param \Magento\Catalog\Helper\Data $catalogData
      * @param \Magento\Bundle\Model\SelectionFactory $bundleModelSelection
-     * @param \Magento\Bundle\Model\Resource\BundleFactory $bundleFactory
-     * @param \Magento\Bundle\Model\Resource\Selection\CollectionFactory $bundleCollection
+     * @param \Magento\Bundle\Model\ResourceModel\BundleFactory $bundleFactory
+     * @param \Magento\Bundle\Model\ResourceModel\Selection\CollectionFactory $bundleCollection
      * @param \Magento\Catalog\Model\Config $config
-     * @param \Magento\Bundle\Model\Resource\Selection $bundleSelection
+     * @param \Magento\Bundle\Model\ResourceModel\Selection $bundleSelection
      * @param \Magento\Bundle\Model\OptionFactory $bundleOption
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param PriceCurrencyInterface $priceCurrency
@@ -177,10 +177,10 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType
         \Magento\Catalog\Helper\Product $catalogProduct,
         \Magento\Catalog\Helper\Data $catalogData,
         \Magento\Bundle\Model\SelectionFactory $bundleModelSelection,
-        \Magento\Bundle\Model\Resource\BundleFactory $bundleFactory,
-        \Magento\Bundle\Model\Resource\Selection\CollectionFactory $bundleCollection,
+        \Magento\Bundle\Model\ResourceModel\BundleFactory $bundleFactory,
+        \Magento\Bundle\Model\ResourceModel\Selection\CollectionFactory $bundleCollection,
         \Magento\Catalog\Model\Config $config,
-        \Magento\Bundle\Model\Resource\Selection $bundleSelection,
+        \Magento\Bundle\Model\ResourceModel\Selection $bundleSelection,
         \Magento\Bundle\Model\OptionFactory $bundleOption,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         PriceCurrencyInterface $priceCurrency,
@@ -394,7 +394,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType
     public function save($product)
     {
         parent::save($product);
-        /* @var $resource \Magento\Bundle\Model\Resource\Bundle */
+        /* @var $resource \Magento\Bundle\Model\ResourceModel\Bundle */
         $resource = $this->_bundleFactory->create();
 
         $options = $product->getBundleOptionsData();
@@ -492,12 +492,12 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType
      * Retrieve bundle option collection
      *
      * @param \Magento\Catalog\Model\Product $product
-     * @return \Magento\Bundle\Model\Resource\Option\Collection
+     * @return \Magento\Bundle\Model\ResourceModel\Option\Collection
      */
     public function getOptionsCollection($product)
     {
         if (!$product->hasData($this->_keyOptionsCollection)) {
-            /** @var \Magento\Bundle\Model\Resource\Option\Collection $optionsCollection */
+            /** @var \Magento\Bundle\Model\ResourceModel\Option\Collection $optionsCollection */
             $optionsCollection = $this->_bundleOption->create()
                 ->getResourceCollection();
             $optionsCollection->setProductIdFilter($product->getId());
@@ -520,7 +520,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType
      *
      * @param array $optionIds
      * @param \Magento\Catalog\Model\Product $product
-     * @return \Magento\Bundle\Model\Resource\Selection\Collection
+     * @return \Magento\Bundle\Model\ResourceModel\Selection\Collection
      */
     public function getSelectionsCollection($optionIds, $product)
     {
@@ -861,7 +861,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType
      *
      * @param array $selectionIds
      * @param \Magento\Catalog\Model\Product $product
-     * @return \Magento\Bundle\Model\Resource\Selection\Collection
+     * @return \Magento\Bundle\Model\ResourceModel\Selection\Collection
      */
     public function getSelectionsByIds($selectionIds, $product)
     {
@@ -906,7 +906,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType
      *
      * @param array $optionIds
      * @param \Magento\Catalog\Model\Product $product
-     * @return \Magento\Bundle\Model\Resource\Option\Collection
+     * @return \Magento\Bundle\Model\ResourceModel\Option\Collection
      */
     public function getOptionsByIds($optionIds, $product)
     {
@@ -1266,7 +1266,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType
     /**
      * @param \Magento\Catalog\Model\Product $product
      * @param bool $isStrictProcessMode
-     * @param \Magento\Bundle\Model\Resource\Option\Collection $optionsCollection
+     * @param \Magento\Bundle\Model\ResourceModel\Option\Collection $optionsCollection
      * @param int[] $options
      * @return void
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -1283,9 +1283,9 @@ class Type extends \Magento\Catalog\Model\Product\Type\AbstractType
     }
 
     /**
-     * @param \Magento\Bundle\Model\Resource\Selection\Collection $selections
+     * @param \Magento\Bundle\Model\ResourceModel\Selection\Collection $selections
      * @param bool $skipSaleableCheck
-     * @param \Magento\Bundle\Model\Resource\Option\Collection $optionsCollection
+     * @param \Magento\Bundle\Model\ResourceModel\Option\Collection $optionsCollection
      * @param int[] $options
      * @return void
      * @throws \Magento\Framework\Exception\LocalizedException
diff --git a/app/code/Magento/Bundle/Model/Resource/Bundle.php b/app/code/Magento/Bundle/Model/ResourceModel/Bundle.php
similarity index 83%
rename from app/code/Magento/Bundle/Model/Resource/Bundle.php
rename to app/code/Magento/Bundle/Model/ResourceModel/Bundle.php
index f24b7eac55dceb712aae1896c37ade716202897a..b748c4419ea3fcfa829bcc3c85aa7bc844678c6c 100644
--- a/app/code/Magento/Bundle/Model/Resource/Bundle.php
+++ b/app/code/Magento/Bundle/Model/ResourceModel/Bundle.php
@@ -3,35 +3,35 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Bundle\Model\Resource;
+namespace Magento\Bundle\Model\ResourceModel;
 
 /**
  * Bundle Resource Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Bundle extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Bundle extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Relation
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Relation
      */
     protected $_productRelation;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote
+     * @var \Magento\Quote\Model\ResourceModel\Quote
      */
     protected $quoteResource;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
-     * @param \Magento\Catalog\Model\Resource\Product\Relation $productRelation
-     * @param \Magento\Quote\Model\Resource\Quote $quoteResource
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Relation $productRelation
+     * @param \Magento\Quote\Model\ResourceModel\Quote $quoteResource
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
-        \Magento\Catalog\Model\Resource\Product\Relation $productRelation,
-        \Magento\Quote\Model\Resource\Quote $quoteResource,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
+        \Magento\Catalog\Model\ResourceModel\Product\Relation $productRelation,
+        \Magento\Quote\Model\ResourceModel\Quote $quoteResource,
         $connectionName = null
     ) {
         parent::__construct($context, $connectionName);
diff --git a/app/code/Magento/Bundle/Model/Resource/Indexer/Price.php b/app/code/Magento/Bundle/Model/ResourceModel/Indexer/Price.php
similarity index 99%
rename from app/code/Magento/Bundle/Model/Resource/Indexer/Price.php
rename to app/code/Magento/Bundle/Model/ResourceModel/Indexer/Price.php
index a766f993cddcc295ef46539c645dbd3b40e53eff..da13c1e5f74e563ff70cadc11d2059e145dc74a2 100644
--- a/app/code/Magento/Bundle/Model/Resource/Indexer/Price.php
+++ b/app/code/Magento/Bundle/Model/ResourceModel/Indexer/Price.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Bundle\Model\Resource\Indexer;
+namespace Magento\Bundle\Model\ResourceModel\Indexer;
 
 /**
  * Bundle products Price indexer resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Price extends \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice
+class Price extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice
 {
     /**
      * Reindex temporary (price result data) for all products
diff --git a/app/code/Magento/Bundle/Model/Resource/Indexer/Stock.php b/app/code/Magento/Bundle/Model/ResourceModel/Indexer/Stock.php
similarity index 97%
rename from app/code/Magento/Bundle/Model/Resource/Indexer/Stock.php
rename to app/code/Magento/Bundle/Model/ResourceModel/Indexer/Stock.php
index 388e7982ed660fe465750cf6c53d94b8c774d30a..2b2a29616bbf280ddd608dc41254462fce0ae239 100644
--- a/app/code/Magento/Bundle/Model/Resource/Indexer/Stock.php
+++ b/app/code/Magento/Bundle/Model/ResourceModel/Indexer/Stock.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Bundle\Model\Resource\Indexer;
+namespace Magento\Bundle\Model\ResourceModel\Indexer;
 
 /**
  * Bundle Stock Status Indexer Resource Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Stock extends \Magento\CatalogInventory\Model\Resource\Indexer\Stock\DefaultStock
+class Stock extends \Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock\DefaultStock
 {
     /**
      * Reindex temporary (price result data) for defined product(s)
diff --git a/app/code/Magento/Bundle/Model/Resource/Option.php b/app/code/Magento/Bundle/Model/ResourceModel/Option.php
similarity index 94%
rename from app/code/Magento/Bundle/Model/Resource/Option.php
rename to app/code/Magento/Bundle/Model/ResourceModel/Option.php
index 5a7f12f4125365ce481c1279754940273a5d6f2c..7ef4bda626e835e661a83069c9f3a004f07a34fb 100644
--- a/app/code/Magento/Bundle/Model/Resource/Option.php
+++ b/app/code/Magento/Bundle/Model/ResourceModel/Option.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Bundle\Model\Resource;
+namespace Magento\Bundle\Model\ResourceModel;
 
 /**
  * Bundle Option Resource Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Option extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Bundle\Model\Option\Validator
@@ -18,12 +18,12 @@ class Option extends \Magento\Framework\Model\Resource\Db\AbstractDb
     private $validator;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Bundle\Model\Option\Validator $validator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Bundle\Model\Option\Validator $validator,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Bundle/Model/Resource/Option/Collection.php b/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php
similarity index 94%
rename from app/code/Magento/Bundle/Model/Resource/Option/Collection.php
rename to app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php
index ca49c03f014bbedabf1a9486cc2301fd0620e42d..dee20a0d83ad6cf37f50a12a0eedb0986cb4314f 100644
--- a/app/code/Magento/Bundle/Model/Resource/Option/Collection.php
+++ b/app/code/Magento/Bundle/Model/ResourceModel/Option/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Bundle\Model\Resource\Option;
+namespace Magento\Bundle\Model\ResourceModel\Option;
 
 /**
  * Bundle Options Resource Collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * All item ids cache
@@ -31,7 +31,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Bundle\Model\Option', 'Magento\Bundle\Model\Resource\Option');
+        $this->_init('Magento\Bundle\Model\Option', 'Magento\Bundle\Model\ResourceModel\Option');
     }
 
     /**
@@ -98,7 +98,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * stripBefore - indicates to reload
      * appendAll - indicates do we need to filter by saleable and required custom options
      *
-     * @param \Magento\Bundle\Model\Resource\Selection\Collection $selectionsCollection
+     * @param \Magento\Bundle\Model\ResourceModel\Selection\Collection $selectionsCollection
      * @param bool $stripBefore
      * @param bool $appendAll
      * @return \Magento\Framework\DataObject[]
diff --git a/app/code/Magento/Bundle/Model/Resource/Selection.php b/app/code/Magento/Bundle/Model/ResourceModel/Selection.php
similarity index 96%
rename from app/code/Magento/Bundle/Model/Resource/Selection.php
rename to app/code/Magento/Bundle/Model/ResourceModel/Selection.php
index b132873d8669ec76e1790e328067e269d55a6675..22283c5ff323138bcb8f50b6aab72fa1e6efbd83 100644
--- a/app/code/Magento/Bundle/Model/Resource/Selection.php
+++ b/app/code/Magento/Bundle/Model/ResourceModel/Selection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Bundle\Model\Resource;
+namespace Magento\Bundle\Model\ResourceModel;
 
 /**
  * Bundle Selection Resource Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Selection extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Selection extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table and id field
diff --git a/app/code/Magento/Bundle/Model/Resource/Selection/Collection.php b/app/code/Magento/Bundle/Model/ResourceModel/Selection/Collection.php
similarity index 96%
rename from app/code/Magento/Bundle/Model/Resource/Selection/Collection.php
rename to app/code/Magento/Bundle/Model/ResourceModel/Selection/Collection.php
index cae23797e315afe4462ac91148ee5809234da842..a198bf992a094574d40e02a8f509af8200371d9c 100644
--- a/app/code/Magento/Bundle/Model/Resource/Selection/Collection.php
+++ b/app/code/Magento/Bundle/Model/ResourceModel/Selection/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Bundle\Model\Resource\Selection;
+namespace Magento\Bundle\Model\ResourceModel\Selection;
 
 /**
  * Bundle Selections Resource Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
+class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
 {
     /**
      * Selection table name
diff --git a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php
index c0dce741b7292bff09284f196da0174af99abee5..2b50f3f1683572ab227ac6cad8cad462bf986f9b 100644
--- a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php
+++ b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Creditmemo.php
@@ -24,7 +24,7 @@ class Creditmemo extends AbstractItems
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -35,7 +35,7 @@ class Creditmemo extends AbstractItems
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php
index 39e28dc29f12b56c9731a71bb6eaec03e809c8c6..c4bcdb7616b9eb8df984d23bc510541aee273d2c 100644
--- a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php
+++ b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Invoice.php
@@ -25,7 +25,7 @@ class Invoice extends AbstractItems
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\Stdlib\StringUtils $coreString
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -36,7 +36,7 @@ class Invoice extends AbstractItems
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\Stdlib\StringUtils $coreString,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php
index 69161623b76f3693d09df8e9d1504291dc23b1ce..4a8e83fd3cd19d866edbb28c14cddc2974a22142 100644
--- a/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php
+++ b/app/code/Magento/Bundle/Model/Sales/Order/Pdf/Items/Shipment.php
@@ -22,7 +22,7 @@ class Shipment extends AbstractItems
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -33,7 +33,7 @@ class Shipment extends AbstractItems
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Bundle/Model/Selection.php b/app/code/Magento/Bundle/Model/Selection.php
index ca6031a62e6511c63951bcd3144762eb35f8d8e8..a135bc3a66e1fc01fd777fef8855171635a659bb 100644
--- a/app/code/Magento/Bundle/Model/Selection.php
+++ b/app/code/Magento/Bundle/Model/Selection.php
@@ -42,7 +42,7 @@ class Selection extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Catalog\Helper\Data $catalogData
-     * @param \Magento\Bundle\Model\Resource\Selection $resource
+     * @param \Magento\Bundle\Model\ResourceModel\Selection $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -50,7 +50,7 @@ class Selection extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Catalog\Helper\Data $catalogData,
-        \Magento\Bundle\Model\Resource\Selection $resource,
+        \Magento\Bundle\Model\ResourceModel\Selection $resource,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -65,7 +65,7 @@ class Selection extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Bundle\Model\Resource\Selection');
+        $this->_init('Magento\Bundle\Model\ResourceModel\Selection');
         parent::_construct();
     }
 
diff --git a/app/code/Magento/Bundle/Model/Source/Option/Type.php b/app/code/Magento/Bundle/Model/Source/Option/Type.php
index 2072308cbfd18e7dd1904f7bb0f14ac95a2ce63e..7269a9473d9f93f0c40d99b6296e6e52b0f299d7 100644
--- a/app/code/Magento/Bundle/Model/Source/Option/Type.php
+++ b/app/code/Magento/Bundle/Model/Source/Option/Type.php
@@ -37,7 +37,7 @@ class Type extends \Magento\Framework\Model\AbstractExtensibleModel implements
      * @param ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param array $options
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -47,7 +47,7 @@ class Type extends \Magento\Framework\Model\AbstractExtensibleModel implements
         ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         array $options,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Bundle/Observer/AppendUpsellProductsObserver.php b/app/code/Magento/Bundle/Observer/AppendUpsellProductsObserver.php
index 42241a09b380b7cc91a7c2e6b00bf9f5d0f71b23..1e495ba43ed28c87925f7b294c229671ad9bcad7 100644
--- a/app/code/Magento/Bundle/Observer/AppendUpsellProductsObserver.php
+++ b/app/code/Magento/Bundle/Observer/AppendUpsellProductsObserver.php
@@ -17,7 +17,7 @@ class AppendUpsellProductsObserver implements ObserverInterface
     protected $bundleData;
 
     /**
-     * @var \Magento\Bundle\Model\Resource\Selection
+     * @var \Magento\Bundle\Model\ResourceModel\Selection
      */
     protected $bundleSelection;
 
@@ -35,13 +35,13 @@ class AppendUpsellProductsObserver implements ObserverInterface
      * @param \Magento\Bundle\Helper\Data $bundleData
      * @param \Magento\Catalog\Model\Product\Visibility $productVisibility
      * @param \Magento\Catalog\Model\Config $config
-     * @param \Magento\Bundle\Model\Resource\Selection $bundleSelection
+     * @param \Magento\Bundle\Model\ResourceModel\Selection $bundleSelection
      */
     public function __construct(
         \Magento\Bundle\Helper\Data $bundleData,
         \Magento\Catalog\Model\Product\Visibility $productVisibility,
         \Magento\Catalog\Model\Config $config,
-        \Magento\Bundle\Model\Resource\Selection $bundleSelection
+        \Magento\Bundle\Model\ResourceModel\Selection $bundleSelection
     ) {
         $this->bundleData = $bundleData;
         $this->productVisibility = $productVisibility;
@@ -69,7 +69,7 @@ class AppendUpsellProductsObserver implements ObserverInterface
             return $this;
         }
 
-        /* @var $collection \Magento\Catalog\Model\Resource\Product\Link\Product\Collection */
+        /* @var $collection \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection */
         $collection = $observer->getEvent()->getCollection();
         $limit = $observer->getEvent()->getLimit();
         if (is_array($limit)) {
@@ -80,7 +80,7 @@ class AppendUpsellProductsObserver implements ObserverInterface
             }
         }
 
-        /* @var $resource \Magento\Bundle\Model\Resource\Selection */
+        /* @var $resource \Magento\Bundle\Model\ResourceModel\Selection */
         $resource = $this->bundleSelection;
 
         $productIds = array_keys($collection->getItems());
@@ -97,7 +97,7 @@ class AppendUpsellProductsObserver implements ObserverInterface
             return $this;
         }
 
-        /* @var $bundleCollection \Magento\Catalog\Model\Resource\Product\Collection */
+        /* @var $bundleCollection \Magento\Catalog\Model\ResourceModel\Product\Collection */
         $bundleCollection = $product->getCollection()->addAttributeToSelect(
             $this->config->getProductAttributes()
         )->addStoreFilter()->addMinimalPrice()->addFinalPrice()->addTaxPercents()->setVisibility(
diff --git a/app/code/Magento/Bundle/Observer/LoadProductOptionsObserver.php b/app/code/Magento/Bundle/Observer/LoadProductOptionsObserver.php
index 20744c37ad2f5bc01cb2fe4425ffaf1df2741c97..1eae1772fa9f8f8c5b3e4c556f121993bbcd23e6 100644
--- a/app/code/Magento/Bundle/Observer/LoadProductOptionsObserver.php
+++ b/app/code/Magento/Bundle/Observer/LoadProductOptionsObserver.php
@@ -19,7 +19,7 @@ class LoadProductOptionsObserver implements ObserverInterface
     public function execute(\Magento\Framework\Event\Observer $observer)
     {
         $collection = $observer->getEvent()->getCollection();
-        /* @var $collection \Magento\Catalog\Model\Resource\Product\Collection */
+        /* @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
         $collection->addPriceData();
 
         return $this;
diff --git a/app/code/Magento/Bundle/Pricing/Adjustment/Calculator.php b/app/code/Magento/Bundle/Pricing/Adjustment/Calculator.php
index f3f59155be87ea4ecd4ffec0992b39eac5279b9c..84b877b837b4c18270c4cc6625fe41d0d1fef9e5 100644
--- a/app/code/Magento/Bundle/Pricing/Adjustment/Calculator.php
+++ b/app/code/Magento/Bundle/Pricing/Adjustment/Calculator.php
@@ -12,7 +12,7 @@ use Magento\Bundle\Pricing\Price\BundleSelectionFactory;
 use Magento\Catalog\Model\Product;
 use Magento\Framework\Pricing\Adjustment\Calculator as CalculatorBase;
 use Magento\Framework\Pricing\Amount\AmountFactory;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\PriceCurrencyInterface;
 use Magento\Store\Model\Store;
 use Magento\Tax\Api\TaxCalculationInterface;
@@ -245,7 +245,7 @@ class Calculator implements BundleCalculatorInterface
      * Get bundle options
      *
      * @param Product $saleableItem
-     * @return \Magento\Bundle\Model\Resource\Option\Collection
+     * @return \Magento\Bundle\Model\ResourceModel\Option\Collection
      */
     protected function getBundleOptions(Product $saleableItem)
     {
diff --git a/app/code/Magento/Bundle/Pricing/Price/BundleOptionPrice.php b/app/code/Magento/Bundle/Pricing/Price/BundleOptionPrice.php
index 5aa82bd756989c6eefc9a452ff98cdd60a14947c..975e349329866964b49dade1270993f021cf00e7 100644
--- a/app/code/Magento/Bundle/Pricing/Price/BundleOptionPrice.php
+++ b/app/code/Magento/Bundle/Pricing/Price/BundleOptionPrice.php
@@ -80,7 +80,7 @@ class BundleOptionPrice extends AbstractPrice implements BundleOptionPriceInterf
     /**
      * Get Options with attached Selections collection
      *
-     * @return \Magento\Bundle\Model\Resource\Option\Collection
+     * @return \Magento\Bundle\Model\ResourceModel\Option\Collection
      */
     public function getOptions()
     {
@@ -89,7 +89,7 @@ class BundleOptionPrice extends AbstractPrice implements BundleOptionPriceInterf
         $typeInstance = $bundleProduct->getTypeInstance();
         $typeInstance->setStoreFilter($bundleProduct->getStoreId(), $bundleProduct);
 
-        /** @var \Magento\Bundle\Model\Resource\Option\Collection $optionCollection */
+        /** @var \Magento\Bundle\Model\ResourceModel\Option\Collection $optionCollection */
         $optionCollection = $typeInstance->getOptionsCollection($bundleProduct);
 
         $selectionCollection = $typeInstance->getSelectionsCollection(
diff --git a/app/code/Magento/Bundle/Pricing/Price/BundleSelectionPrice.php b/app/code/Magento/Bundle/Pricing/Price/BundleSelectionPrice.php
index 6b5ede60719f51ca23d563444196f7cbc6f44177..a482b6affae5ab643bf391b4cb0d61d0bb211b8a 100644
--- a/app/code/Magento/Bundle/Pricing/Price/BundleSelectionPrice.php
+++ b/app/code/Magento/Bundle/Pricing/Price/BundleSelectionPrice.php
@@ -11,7 +11,7 @@ use Magento\Catalog\Pricing\Price as CatalogPrice;
 use Magento\Framework\Event\ManagerInterface;
 use Magento\Framework\Pricing\Adjustment\CalculatorInterface;
 use Magento\Framework\Pricing\Amount\AmountInterface;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Price\AbstractPrice;
 
 /**
diff --git a/app/code/Magento/Bundle/Pricing/Price/ConfiguredPrice.php b/app/code/Magento/Bundle/Pricing/Price/ConfiguredPrice.php
index 863e6dd1ac5576c042a73a5bf7fa4a52189e0bc9..011257eb5513f48333d8dab95de7aab28a9759ac 100644
--- a/app/code/Magento/Bundle/Pricing/Price/ConfiguredPrice.php
+++ b/app/code/Magento/Bundle/Pricing/Price/ConfiguredPrice.php
@@ -27,11 +27,6 @@ class ConfiguredPrice extends CatalogPrice\FinalPrice implements ConfiguredPrice
      */
     protected $calculator;
 
-    /**
-     * @var DiscountCalculator
-     */
-    protected $discountCalculator;
-
     /**
      * @var null|ItemInterface
      */
@@ -42,7 +37,6 @@ class ConfiguredPrice extends CatalogPrice\FinalPrice implements ConfiguredPrice
      * @param float $quantity
      * @param BundleCalculatorInterface $calculator
      * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
-     * @param DiscountCalculator $discountCalculator
      * @param ItemInterface $item
      */
     public function __construct(
@@ -50,7 +44,6 @@ class ConfiguredPrice extends CatalogPrice\FinalPrice implements ConfiguredPrice
         $quantity,
         BundleCalculatorInterface $calculator,
         \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
-        DiscountCalculator $discountCalculator,
         ItemInterface $item = null
     ) {
         $this->item = $item;
@@ -70,7 +63,7 @@ class ConfiguredPrice extends CatalogPrice\FinalPrice implements ConfiguredPrice
     /**
      * Get Options with attached Selections collection
      *
-     * @return array|\Magento\Bundle\Model\Resource\Option\Collection
+     * @return array|\Magento\Bundle\Model\ResourceModel\Option\Collection
      */
     public function getOptions()
     {
@@ -83,7 +76,7 @@ class ConfiguredPrice extends CatalogPrice\FinalPrice implements ConfiguredPrice
         $optionsQuoteItemOption = $this->item->getOptionByCode('bundle_option_ids');
         $bundleOptionsIds = $optionsQuoteItemOption ? unserialize($optionsQuoteItemOption->getValue()) : [];
         if ($bundleOptionsIds) {
-            /** @var \Magento\Bundle\Model\Resource\Option\Collection $optionsCollection */
+            /** @var \Magento\Bundle\Model\ResourceModel\Option\Collection $optionsCollection */
             $optionsCollection = $typeInstance->getOptionsByIds($bundleOptionsIds, $bundleProduct);
             // get and add bundle selections collection
             $selectionsQuoteItemOption = $this->item->getOptionByCode('bundle_selection_ids');
diff --git a/app/code/Magento/Bundle/Setup/InstallData.php b/app/code/Magento/Bundle/Setup/InstallData.php
index 16a1409304e42c20cd2ea892c30ff24295f5782e..0df0acd57343b9129ee933c707b98f537dd62076 100644
--- a/app/code/Magento/Bundle/Setup/InstallData.php
+++ b/app/code/Magento/Bundle/Setup/InstallData.php
@@ -86,7 +86,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
                 'visible' => true,
                 'required' => true,
                 'user_defined' => false,
@@ -112,7 +112,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
                 'visible' => false,
                 'required' => true,
                 'user_defined' => false,
@@ -137,7 +137,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
                 'visible' => false,
                 'required' => true,
                 'user_defined' => false,
@@ -164,7 +164,7 @@ class InstallData implements InstallDataInterface
                 'input' => 'select',
                 'class' => '',
                 'source' => 'Magento\Bundle\Model\Product\Attribute\Source\Price\View',
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
                 'visible' => true,
                 'required' => true,
                 'user_defined' => false,
@@ -190,7 +190,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
                 'visible' => false,
                 'required' => true,
                 'user_defined' => false,
diff --git a/app/code/Magento/Bundle/Test/Unit/Block/Catalog/Product/View/Type/BundleTest.php b/app/code/Magento/Bundle/Test/Unit/Block/Catalog/Product/View/Type/BundleTest.php
index be11cf9564bda23d5b9451e5a99e21dd8fd07256..49f69928bcc6df3f0726595701f77e65b8803b78 100644
--- a/app/code/Magento/Bundle/Test/Unit/Block/Catalog/Product/View/Type/BundleTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Block/Catalog/Product/View/Type/BundleTest.php
@@ -243,7 +243,7 @@ class BundleTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $eventManager->expects($this->any())->method('dispatch')->will($this->returnValue(true));
 
-        $optionCollection = $this->getMockBuilder('\Magento\Bundle\Model\Resource\Option\Collection')
+        $optionCollection = $this->getMockBuilder('\Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $optionCollection->expects($this->any())
diff --git a/app/code/Magento/Bundle/Test/Unit/Helper/Catalog/Product/ConfigurationTest.php b/app/code/Magento/Bundle/Test/Unit/Helper/Catalog/Product/ConfigurationTest.php
index 78685f8da844d414d10f0d3410b06e37ca3e650f..d75045a141564cb72ab444e5820dac2bceff59b6 100644
--- a/app/code/Magento/Bundle/Test/Unit/Helper/Catalog/Product/ConfigurationTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Helper/Catalog/Product/ConfigurationTest.php
@@ -107,7 +107,7 @@ class ConfigurationTest extends \PHPUnit_Framework_TestCase
     {
         $optionIds = 'a:1:{i:0;i:1;}';
 
-        $collection = $this->getMock('Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false);
         $product = $this->getMock('Magento\Catalog\Model\Product', ['getTypeInstance', '__wakeup'], [], '', false);
         $typeInstance = $this->getMock('Magento\Bundle\Model\Product\Type', ['getOptionsByIds'], [], '', false);
         $selectionOption =
@@ -157,10 +157,10 @@ class ConfigurationTest extends \PHPUnit_Framework_TestCase
         $selectionOption =
             $this->getMock('\Magento\Catalog\Model\Product\Configuration\Item\Option\OptionInterface', ['getValue']);
         $collection =
-            $this->getMock('Magento\Bundle\Model\Resource\Option\Collection', ['appendSelections'], [], '', false);
+            $this->getMock('Magento\Bundle\Model\ResourceModel\Option\Collection', ['appendSelections'], [], '', false);
         $itemOption =
             $this->getMock('\Magento\Catalog\Model\Product\Configuration\Item\Option\OptionInterface', ['getValue']);
-        $collection2 = $this->getMock('Magento\Bundle\Model\Resource\Selection\Collection', [], [], '', false);
+        $collection2 = $this->getMock('Magento\Bundle\Model\ResourceModel\Selection\Collection', [], [], '', false);
 
         $this->escaper->expects($this->once())->method('escapeHtml')->with('name')->will($this->returnValue('name'));
         $this->pricingHelper->expects($this->once())->method('currency')->with(15)
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/LinkManagementTest.php b/app/code/Magento/Bundle/Test/Unit/Model/LinkManagementTest.php
index a7c1ac5af2c66c0ef9e633e1893155e382e92d64..c34c739a543a7966295e5abda047d26a32153afa 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/LinkManagementTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/LinkManagementTest.php
@@ -44,12 +44,12 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
     protected $productType;
 
     /**
-     * @var \Magento\Bundle\Model\Resource\Option\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Bundle\Model\ResourceModel\Option\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $optionCollection;
 
     /**
-     * @var \Magento\Bundle\Model\Resource\Selection\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Bundle\Model\ResourceModel\Selection\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $selectionCollection;
 
@@ -64,12 +64,12 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
     protected $bundleSelectionMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Bundle\Model\Resource\BundleFactory
+     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Bundle\Model\ResourceModel\BundleFactory
      */
     protected $bundleFactoryMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Bundle\Model\Resource\Option\CollectionFactory
+     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Bundle\Model\ResourceModel\Option\CollectionFactory
      */
     protected $optionCollectionFactoryMock;
 
@@ -114,11 +114,11 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['getSelections', 'getOptionId', '__wakeup'])
             ->disableOriginalConstructor()
             ->getMock();
-        $this->optionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Option\Collection')
+        $this->optionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->setMethods(['appendSelections'])
             ->disableOriginalConstructor()
             ->getMock();
-        $this->selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Selection\Collection')
+        $this->selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->product = $this->getMockBuilder('Magento\Catalog\Model\Product')
@@ -136,10 +136,10 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
             '\Magento\Bundle\Model\SelectionFactory', ['create'], [], '', false
         );
         $this->bundleFactoryMock = $this->getMock(
-            '\Magento\Bundle\Model\Resource\BundleFactory', ['create'], [], '', false
+            '\Magento\Bundle\Model\ResourceModel\BundleFactory', ['create'], [], '', false
         );
         $this->optionCollectionFactoryMock = $this->getMock(
-            '\Magento\Bundle\Model\Resource\Option\CollectionFactory', ['create'], [], '', false
+            '\Magento\Bundle\Model\ResourceModel\Option\CollectionFactory', ['create'], [], '', false
         );
         $this->storeManagerMock = $this->getMock('\Magento\Store\Model\StoreManagerInterface', [], [], '', false);
 
@@ -290,7 +290,7 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue(null));
 
         $optionsCollectionMock = $this->getMock(
-            '\Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false
+            '\Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false
         );
         $optionsCollectionMock->expects($this->once())
             ->method('setIdFilter')
@@ -340,7 +340,7 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $option->expects($this->once())->method('getId')->will($this->returnValue(1));
 
-        $optionsCollectionMock = $this->getMock('\Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false);
+        $optionsCollectionMock = $this->getMock('\Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false);
         $optionsCollectionMock->expects($this->once())
             ->method('setIdFilter')
             ->with($this->equalTo('1'))
@@ -352,7 +352,7 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
             $this->returnValue($optionsCollectionMock)
         );
 
-        $bundle = $this->getMock('\Magento\Bundle\Model\Resource\Bundle', [], [], '', false);
+        $bundle = $this->getMock('\Magento\Bundle\Model\ResourceModel\Bundle', [], [], '', false);
         $bundle->expects($this->once())->method('getSelectionsData')->with('product_id')->will($this->returnValue([]));
         $this->bundleFactoryMock->expects($this->once())->method('create')->will($this->returnValue($bundle));
         $this->model->addChild($productMock, 1, $productLink);
@@ -391,7 +391,7 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $option->expects($this->once())->method('getId')->will($this->returnValue(1));
 
-        $optionsCollectionMock = $this->getMock('\Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false);
+        $optionsCollectionMock = $this->getMock('\Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false);
         $optionsCollectionMock->expects($this->once())
             ->method('setIdFilter')
             ->with($this->equalTo(1))
@@ -407,7 +407,7 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
             ['option_id' => 1, 'product_id' => 12],
             ['option_id' => 1, 'product_id' => 13],
         ];
-        $bundle = $this->getMock('\Magento\Bundle\Model\Resource\Bundle', [], [], '', false);
+        $bundle = $this->getMock('\Magento\Bundle\Model\ResourceModel\Bundle', [], [], '', false);
         $bundle->expects($this->once())->method('getSelectionsData')
             ->with('product_id')
             ->will($this->returnValue($selections));
@@ -449,7 +449,7 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
         $option->expects($this->once())->method('getId')->will($this->returnValue(1));
 
         $optionsCollectionMock = $this->getMock(
-            '\Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false
+            '\Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false
         );
         $optionsCollectionMock->expects($this->once())
             ->method('setIdFilter')
@@ -466,7 +466,7 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
             ['option_id' => 1, 'product_id' => 11],
             ['option_id' => 1, 'product_id' => 12],
         ];
-        $bundle = $this->getMock('\Magento\Bundle\Model\Resource\Bundle', [], [], '', false);
+        $bundle = $this->getMock('\Magento\Bundle\Model\ResourceModel\Bundle', [], [], '', false);
         $bundle->expects($this->once())->method('getSelectionsData')
             ->with('product_id')
             ->will($this->returnValue($selections));
@@ -516,7 +516,7 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
         $option->expects($this->once())->method('getId')->will($this->returnValue(1));
 
         $optionsCollectionMock = $this->getMock(
-            '\Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false
+            '\Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false
         );
         $optionsCollectionMock->expects($this->once())
             ->method('setIdFilter')
@@ -533,7 +533,7 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
             ['option_id' => 1, 'product_id' => 11],
             ['option_id' => 1, 'product_id' => 12],
         ];
-        $bundle = $this->getMock('\Magento\Bundle\Model\Resource\Bundle', [], [], '', false);
+        $bundle = $this->getMock('\Magento\Bundle\Model\ResourceModel\Bundle', [], [], '', false);
         $bundle->expects($this->once())->method('getSelectionsData')
             ->with('product_id')
             ->will($this->returnValue($selections));
@@ -842,7 +842,7 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
     public function testRemoveChild()
     {
         $this->productRepository->expects($this->any())->method('get')->will($this->returnValue($this->product));
-        $bundle = $this->getMock('\Magento\Bundle\Model\Resource\Bundle', [], [], '', false);
+        $bundle = $this->getMock('\Magento\Bundle\Model\ResourceModel\Bundle', [], [], '', false);
         $this->bundleFactoryMock->expects($this->once())->method('create')->will($this->returnValue($bundle));
         $productSku = 'productSku';
         $optionId = 1;
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php b/app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php
index 72022d497ba0544f89196e0798e162dc9305d1a5..2175303614ef6a6759a3c0844cc581e6096ce153 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/OptionRepositoryTest.php
@@ -80,7 +80,7 @@ class OptionRepositoryTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $this->optionResourceMock = $this->getMock(
-            '\Magento\Bundle\Model\Resource\Option',
+            '\Magento\Bundle\Model\ResourceModel\Option',
             ['delete', '__wakeup', 'save'],
             [],
             '',
@@ -139,7 +139,7 @@ class OptionRepositoryTest extends \PHPUnit_Framework_TestCase
             ->with($productSku)
             ->willReturn($productMock);
 
-        $optCollectionMock = $this->getMock('\Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false);
+        $optCollectionMock = $this->getMock('\Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false);
         $this->typeMock->expects($this->once())
             ->method('getOptionsCollection')
             ->with($productMock)
@@ -174,7 +174,7 @@ class OptionRepositoryTest extends \PHPUnit_Framework_TestCase
             ->with($productSku)
             ->willReturn($productMock);
 
-        $optCollectionMock = $this->getMock('\Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false);
+        $optCollectionMock = $this->getMock('\Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false);
         $this->typeMock->expects($this->once())
             ->method('getOptionsCollection')
             ->with($productMock)
@@ -247,7 +247,7 @@ class OptionRepositoryTest extends \PHPUnit_Framework_TestCase
 
         $optionMock = $this->getMock('\Magento\Bundle\Model\Option', [], [], '', false);
 
-        $optCollectionMock = $this->getMock('\Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false);
+        $optCollectionMock = $this->getMock('\Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false);
         $this->typeMock->expects($this->once())
             ->method('getOptionsCollection')
             ->with($productMock)
@@ -330,7 +330,7 @@ class OptionRepositoryTest extends \PHPUnit_Framework_TestCase
         $optionMock->expects($this->once())->method('setParentId')->with($productId)->willReturnSelf();
         $optionMock->expects($this->any())->method('getOptionId')->willReturn($optionId);
 
-        $optCollectionMock = $this->getMock('\Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false);
+        $optCollectionMock = $this->getMock('\Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false);
         $this->typeMock->expects($this->once())
             ->method('getOptionsCollection')
             ->with($productMock)
@@ -383,7 +383,7 @@ class OptionRepositoryTest extends \PHPUnit_Framework_TestCase
             ->with($productSku, $optionId)
             ->willReturn($existingLinks);
 
-        $optCollectionMock = $this->getMock('\Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false);
+        $optCollectionMock = $this->getMock('\Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false);
         $this->typeMock->expects($this->once())
             ->method('getOptionsCollection')
             ->with($productMock)
@@ -454,7 +454,7 @@ class OptionRepositoryTest extends \PHPUnit_Framework_TestCase
         $optionMock->expects($this->once())->method('setParentId')->with($productId)->willReturnSelf();
         $optionMock->expects($this->any())->method('getOptionId')->willReturn($optionId);
 
-        $optCollectionMock = $this->getMock('\Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false);
+        $optCollectionMock = $this->getMock('\Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false);
         $this->typeMock->expects($this->once())
             ->method('getOptionsCollection')
             ->with($productMock)
@@ -619,7 +619,7 @@ class OptionRepositoryTest extends \PHPUnit_Framework_TestCase
         );
         $attributeValueFactoryMock = $this->getMock('Magento\Framework\Api\AttributeValueFactory', [], [], '', false);
         $resourceMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [
                 '_construct',
                 'getIdFieldName'
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php b/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php
index 74f3637ea03516859836113388bf1f30a23230d8..5af4e900beab282dcc054151121ac25fa725c493 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/OptionTest.php
@@ -20,7 +20,7 @@ class OptionTest extends \PHPUnit_Framework_TestCase
     protected $selectionSecond;
 
     /**
-     * @var \Magento\Framework\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -46,7 +46,7 @@ class OptionTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resource = $this->getMock(
-            'Magento\Framework\Model\Resource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             [
                 '_construct',
                 'getConnection',
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/Product/Attribute/Source/Price/ViewTest.php b/app/code/Magento/Bundle/Test/Unit/Model/Product/Attribute/Source/Price/ViewTest.php
index 584eb71c4893e98a3a88f86c8e6ec1d8aef2acb6..8da54fe2f0aa25491d0700e323ba3c5d92b5b6ae 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/Product/Attribute/Source/Price/ViewTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/Product/Attribute/Source/Price/ViewTest.php
@@ -15,12 +15,12 @@ class ViewTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Option|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $option;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $optionFactory;
 
@@ -31,9 +31,9 @@ class ViewTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->option = $this->getMock('Magento\Eav\Model\Resource\Entity\Attribute\Option', [], [], '', false);
+        $this->option = $this->getMock('Magento\Eav\Model\ResourceModel\Entity\Attribute\Option', [], [], '', false);
         $this->optionFactory = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/Product/CopyConstructor/BundleTest.php b/app/code/Magento/Bundle/Test/Unit/Model/Product/CopyConstructor/BundleTest.php
index e5a00cfef15abcb08b81d5f84a047584a157b945..3cd5524d8e2f91f5a394dd9662a6f59c07280cb3 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/Product/CopyConstructor/BundleTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/Product/CopyConstructor/BundleTest.php
@@ -72,7 +72,7 @@ class BundleTest extends \PHPUnit_Framework_TestCase
         );
         $options = [$option];
         $optionCollection = $this->objectManager->getCollectionMock(
-            'Magento\Bundle\Model\Resource\Option\Collection',
+            'Magento\Bundle\Model\ResourceModel\Option\Collection',
             $options
         );
         $optionRawData = [
@@ -111,7 +111,7 @@ class BundleTest extends \PHPUnit_Framework_TestCase
         );
         $selections = [$selection];
         $selectionCollection = $this->getMock(
-            'Magento\Bundle\Model\Resource\Selection\Collection',
+            'Magento\Bundle\Model\ResourceModel\Selection\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/Product/OptionListTest.php b/app/code/Magento/Bundle/Test/Unit/Model/Product/OptionListTest.php
index 855c15bc06fd09d4d44513b445c0f4616cf94b02..0151567afdaa0f9c6507a3c94a4fd68b86d84aad 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/Product/OptionListTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/Product/OptionListTest.php
@@ -93,7 +93,7 @@ class OptionListTest extends \PHPUnit_Framework_TestCase
             false
         );
         $optionsCollMock = $this->objectManager->getCollectionMock(
-            'Magento\Bundle\Model\Resource\Option\Collection',
+            'Magento\Bundle\Model\ResourceModel\Option\Collection',
             [$optionMock]
         );
         $this->typeMock->expects($this->once())
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/Product/PriceTest.php b/app/code/Magento/Bundle/Test/Unit/Model/Product/PriceTest.php
index 6807d089307a899c2022aa6272c87afc74e1930c..226418b97aed883cabefb2c24e889633c15a5cf0 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/Product/PriceTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/Product/PriceTest.php
@@ -62,7 +62,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->ruleFactoryMock = $this->getMock(
-            'Magento\CatalogRule\Model\Resource\RuleFactory',
+            'Magento\CatalogRule\Model\ResourceModel\RuleFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Bundle/Test/Unit/Model/Product/TypeTest.php b/app/code/Magento/Bundle/Test/Unit/Model/Product/TypeTest.php
index 10bc35a912b2579461bf1060d0b701bee25a4247..1d08a80994f67291274ac78037863a48e01aa898 100644
--- a/app/code/Magento/Bundle/Test/Unit/Model/Product/TypeTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Model/Product/TypeTest.php
@@ -5,8 +5,8 @@
  */
 namespace Magento\Bundle\Test\Unit\Model\Product;
 
-use Magento\Bundle\Model\Resource\Option\Collection;
-use Magento\Bundle\Model\Resource\Selection\Collection as SelectionCollection;
+use Magento\Bundle\Model\ResourceModel\Option\Collection;
+use Magento\Bundle\Model\ResourceModel\Selection\Collection as SelectionCollection;
 use Magento\Catalog\Model\Product\Option\Type\DefaultType;
 use Magento\Framework\Exception\LocalizedException;
 
@@ -17,7 +17,7 @@ use Magento\Framework\Exception\LocalizedException;
 class TypeTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Bundle\Model\Resource\BundleFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Bundle\Model\ResourceModel\BundleFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     private $bundleFactory;
     /**
@@ -30,7 +30,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Bundle\Model\Resource\Selection\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Bundle\Model\ResourceModel\Selection\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $bundleCollection;
 
@@ -74,7 +74,8 @@ class TypeTest extends \PHPUnit_Framework_TestCase
      */
     protected function setUp()
     {
-        $this->bundleCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Selection\CollectionFactory')
+        $this->bundleCollection =
+            $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Selection\CollectionFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -108,7 +109,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
-        $this->bundleFactory = $this->getMockBuilder('\Magento\Bundle\Model\Resource\BundleFactory')
+        $this->bundleFactory = $this->getMockBuilder('\Magento\Bundle\Model\ResourceModel\BundleFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -156,7 +157,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|SelectionCollection $selectionCollection */
-        $selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Selection\Collection')
+        $selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->setMethods(['getItems'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -184,7 +185,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|Collection $optionCollection */
-        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Option\Collection')
+        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->setMethods(['getItems', 'getItemById', 'appendSelections'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -290,7 +291,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|SelectionCollection $selectionCollection */
-        $selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Selection\Collection')
+        $selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->setMethods(['getItems'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -347,7 +348,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|Collection $optionCollection */
-        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Option\Collection')
+        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->setMethods(['getItems', 'getItemById', 'appendSelections'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -530,7 +531,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|SelectionCollection $selectionCollection */
-        $selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Selection\Collection')
+        $selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->setMethods(['getItems'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -578,7 +579,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|Collection $optionCollection */
-        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Option\Collection')
+        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->setMethods(['getItems', 'getItemById', 'appendSelections'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -749,7 +750,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|SelectionCollection $selectionCollection */
-        $selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Selection\Collection')
+        $selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->setMethods(['getItems'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -797,7 +798,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|Collection $optionCollection */
-        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Option\Collection')
+        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->setMethods(['getItems', 'getItemById', 'appendSelections'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -977,7 +978,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|Collection $optionCollection */
-        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Option\Collection')
+        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->setMethods(['getItems', 'getItemById', 'appendSelections'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -1049,7 +1050,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|SelectionCollection $selectionCollection */
-        $selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Selection\Collection')
+        $selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->setMethods(['getItems'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -1082,7 +1083,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|Collection $optionCollection */
-        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Option\Collection')
+        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->setMethods(['getItems', 'getItemById', 'appendSelections'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -1177,7 +1178,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|SelectionCollection $selectionCollection */
-        $selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Selection\Collection')
+        $selectionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->setMethods(['getItems'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -1210,7 +1211,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|Collection $optionCollection */
-        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Option\Collection')
+        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->setMethods(['getItems', 'getItemById'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -1346,7 +1347,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \PHPUnit_Framework_MockObject_MockObject|Collection $optionCollection */
-        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Option\Collection')
+        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->setMethods(['getItems'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -1473,7 +1474,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             false
         );
         $optionCollectionMock = $this->getMock(
-            'Magento\Bundle\Model\Resource\Option\Collection',
+            'Magento\Bundle\Model\ResourceModel\Option\Collection',
             [],
             [],
             '',
@@ -1788,7 +1789,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
 
     protected function getSelectionsByIdsMock($selectionIds, $productMock, $getSelectionsIndex, $getSelectionsIdsIndex)
     {
-        $usedSelectionsMock = $this->getMockBuilder('Magento\Bundle\Model\Resource\Selection\Collection')
+        $usedSelectionsMock = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -1890,7 +1891,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
         $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product')
             ->disableOriginalConstructor()
             ->getMock();
-        $usedSelectionsMock = $this->getMockBuilder('Magento\Bundle\Model\Resource\Selection\Collection')
+        $usedSelectionsMock = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->setMethods(
                 [
                     'addAttributeToSelect',
@@ -2001,7 +2002,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
         $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product')
             ->disableOriginalConstructor()
             ->getMock();
-        $usedSelectionsMock = $this->getMockBuilder('Magento\Bundle\Model\Resource\Selection\Collection')
+        $usedSelectionsMock = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->setMethods(
                 [
                     'addAttributeToSelect',
@@ -2088,11 +2089,12 @@ class TypeTest extends \PHPUnit_Framework_TestCase
         $productMock = $this->getMockBuilder('Magento\Catalog\Model\Product')
             ->disableOriginalConstructor()
             ->getMock();
-        $usedOptionsMock = $this->getMockBuilder('Magento\Bundle\Model\Resource\Option\Collection')
+        $usedOptionsMock = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->setMethods(['getResourceCollection'])
             ->disableOriginalConstructor()
             ->getMock();
-        $dbResourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\Collection\AbstractCollection')
+        $resourceClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection';
+        $dbResourceMock = $this->getMockBuilder($resourceClassName)
             ->setMethods(['setProductIdFilter', 'setPositionOrder', 'joinValues', 'setIdFilter'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -2170,7 +2172,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
      */
     public function testIsSalableWithoutOptions()
     {
-        $optionCollectionMock = $this->getMockBuilder('\Magento\Bundle\Model\Resource\Option\Collection')
+        $optionCollectionMock = $this->getMockBuilder('\Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -2398,7 +2400,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
      */
     private function getSelectionCollectionMock(array $selectedOptions)
     {
-        $selectionCollectionMock = $this->getMockBuilder('\Magento\Bundle\Model\Resource\Selection\Collection')
+        $selectionCollectionMock = $this->getMockBuilder('\Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->setMethods(['getItems', 'getIterator'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -2427,7 +2429,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             $ids[] = $option->getId();
         }
 
-        $optionCollectionMock = $this->getMockBuilder('\Magento\Bundle\Model\Resource\Option\Collection')
+        $optionCollectionMock = $this->getMockBuilder('\Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->setMethods(['getItems', 'getAllIds'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -2539,7 +2541,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ]
         ];
 
-        $resource = $this->getMockBuilder('Magento\Bundle\Model\Resource\Bundle')
+        $resource = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Bundle')
             ->disableOriginalConstructor()
             ->getMock();
         $this->bundleFactory->expects($this->once())
@@ -2564,7 +2566,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
         $product->expects($this->once())
             ->method('getBundleSelectionsData')
             ->willReturn($selections);
-        $option = $this->getMockBuilder('Magento\Bundle\Model\Resource\Option\Collection')
+        $option = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->setMethods(['setData', 'setParentId', 'setStoreId', 'isDeleted', 'save', 'getOptionId'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -2614,7 +2616,8 @@ class TypeTest extends \PHPUnit_Framework_TestCase
         $option = $this->getMockBuilder('\Magento\Bundle\Model\Option')
             ->disableOriginalConstructor()
             ->getMock();
-        $dbResourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\Collection\AbstractCollection')
+        $resourceClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection';
+        $dbResourceMock = $this->getMockBuilder($resourceClassName)
             ->setMethods(['setProductIdFilter', 'setPositionOrder', 'joinValues'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -2664,7 +2667,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
                 ]
             )
             ->getMock();
-        $selectionCollection = $this->getMockBuilder('\Magento\Bundle\Model\Resource\Selection\Collection')
+        $selectionCollection = $this->getMockBuilder('\Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
@@ -2738,7 +2741,8 @@ class TypeTest extends \PHPUnit_Framework_TestCase
         $product = $this->getMockBuilder('Magento\Catalog\Model\Product')
             ->disableOriginalConstructor()
             ->getMock();
-        $dbResourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\Collection\AbstractCollection')
+        $resourceClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection';
+        $dbResourceMock = $this->getMockBuilder($resourceClassName)
             ->setMethods(['getItems'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -2746,7 +2750,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['getId', 'getRequired'])
             ->getMock();
-        $selectionCollection = $this->getMockBuilder('\Magento\Bundle\Model\Resource\Selection\Collection')
+        $selectionCollection = $this->getMockBuilder('\Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -2792,11 +2796,11 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['_wakeup', 'hasData', 'getData', 'setData', 'getId', 'getStoreId'])
             ->getMock();
-        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\Resource\Option\Collection')
+        $optionCollection = $this->getMockBuilder('Magento\Bundle\Model\ResourceModel\Option\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['getAllIds'])
             ->getMock();
-        $selectionCollection = $this->getMockBuilder('\Magento\Bundle\Model\Resource\Selection\Collection')
+        $selectionCollection = $this->getMockBuilder('\Magento\Bundle\Model\ResourceModel\Selection\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Bundle/Test/Unit/Pricing/Adjustment/CalculatorTest.php b/app/code/Magento/Bundle/Test/Unit/Pricing/Adjustment/CalculatorTest.php
index 44355fae22189ad74f7327552ec9ea74f7214a20..cb090b34e13e43714cdd2bf258650283bde01189 100644
--- a/app/code/Magento/Bundle/Test/Unit/Pricing/Adjustment/CalculatorTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Pricing/Adjustment/CalculatorTest.php
@@ -20,7 +20,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class CalculatorTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $saleableItem;
 
diff --git a/app/code/Magento/Bundle/Test/Unit/Pricing/Price/BundleOptionPriceTest.php b/app/code/Magento/Bundle/Test/Unit/Pricing/Price/BundleOptionPriceTest.php
index 115c70648490d5f4abeaa1ed27e6e121d2bc8acf..bc11abf4a14e6eaddacad65dd8957ddb6dc384dc 100644
--- a/app/code/Magento/Bundle/Test/Unit/Pricing/Price/BundleOptionPriceTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Pricing/Price/BundleOptionPriceTest.php
@@ -26,7 +26,7 @@ class BundleOptionPriceTest extends \PHPUnit_Framework_TestCase
     protected $objectManagerHelper;
 
     /**
-     * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $saleableItemMock;
 
@@ -143,7 +143,7 @@ class BundleOptionPriceTest extends \PHPUnit_Framework_TestCase
             ->with($this->equalTo($optionIds), $this->equalTo($this->saleableItemMock))
             ->will($this->returnValue($selectionCollection));
 
-        $collection = $this->getMock('Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false);
         $collection->expects($this->atLeastOnce())
             ->method('appendSelections')
             ->with($this->equalTo($selectionCollection), $this->equalTo(true), $this->equalTo(false))
@@ -298,7 +298,7 @@ class BundleOptionPriceTest extends \PHPUnit_Framework_TestCase
             $options[] = $this->createOptionMock($optionData);
         }
         /** @var \PHPUnit_Framework_MockObject_MockObject $optionsCollection */
-        $optionsCollection = $this->getMock('Magento\Bundle\Model\Resource\Option\Collection', [], [], '', false);
+        $optionsCollection = $this->getMock('Magento\Bundle\Model\ResourceModel\Option\Collection', [], [], '', false);
         $optionsCollection->expects($this->atLeastOnce())->method('appendSelections')->will($this->returnSelf());
         $optionsCollection->expects($this->atLeastOnce())->method('getIterator')
             ->will($this->returnValue(new \ArrayIterator($options)));
diff --git a/app/code/Magento/Bundle/Test/Unit/Pricing/Price/BundleRegularPriceTest.php b/app/code/Magento/Bundle/Test/Unit/Pricing/Price/BundleRegularPriceTest.php
index cc015d4fbf217c5c66950d3340a2130ff0a85281..96d2ca5dfca0a5c4fac14a94239cfa744e7bc95a 100644
--- a/app/code/Magento/Bundle/Test/Unit/Pricing/Price/BundleRegularPriceTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Pricing/Price/BundleRegularPriceTest.php
@@ -18,7 +18,7 @@ class BundleRegularPriceTest extends \PHPUnit_Framework_TestCase
     /** @var ObjectManagerHelper */
     protected $objectManagerHelper;
 
-    /** @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $saleableInterfaceMock;
 
     /** @var \Magento\Bundle\Pricing\Adjustment\BundleCalculatorInterface|\PHPUnit_Framework_MockObject_MockObject */
diff --git a/app/code/Magento/Bundle/Test/Unit/Pricing/Price/BundleSelectionFactoryTest.php b/app/code/Magento/Bundle/Test/Unit/Pricing/Price/BundleSelectionFactoryTest.php
index 8307aec05bc75afdf788eb583cab923882414a46..c234b03a6c55621c1a4ebc0c4f8a48bc632d35a7 100644
--- a/app/code/Magento/Bundle/Test/Unit/Pricing/Price/BundleSelectionFactoryTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Pricing/Price/BundleSelectionFactoryTest.php
@@ -21,10 +21,10 @@ class BundleSelectionFactoryTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\ObjectManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $objectManagerMock;
 
-    /** @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $bundleMock;
 
-    /** @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $selectionMock;
 
     protected function setUp()
diff --git a/app/code/Magento/Bundle/Test/Unit/Pricing/Price/FinalPriceTest.php b/app/code/Magento/Bundle/Test/Unit/Pricing/Price/FinalPriceTest.php
index 19a541af80b41fd04e60fb291270f9d851b4d4ea..dcac7eff720c2eead8765f21ed7d6cd8fe133551 100644
--- a/app/code/Magento/Bundle/Test/Unit/Pricing/Price/FinalPriceTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Pricing/Price/FinalPriceTest.php
@@ -20,7 +20,7 @@ class FinalPriceTest extends \PHPUnit_Framework_TestCase
     /** @var ObjectManagerHelper */
     protected $objectManagerHelper;
 
-    /** @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $saleableInterfaceMock;
 
     /** @var float */
diff --git a/app/code/Magento/Bundle/Test/Unit/Pricing/Price/SpecialPriceTest.php b/app/code/Magento/Bundle/Test/Unit/Pricing/Price/SpecialPriceTest.php
index 4cb4dab6530c14d6bcf18629f67908d1fb90312a..bc4f5efd52695cc3a4c561d69234251eb8e79118 100644
--- a/app/code/Magento/Bundle/Test/Unit/Pricing/Price/SpecialPriceTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Pricing/Price/SpecialPriceTest.php
@@ -15,7 +15,7 @@ class SpecialPriceTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $saleable;
 
diff --git a/app/code/Magento/Bundle/Test/Unit/Pricing/Render/FinalPriceBoxTest.php b/app/code/Magento/Bundle/Test/Unit/Pricing/Render/FinalPriceBoxTest.php
index 3e341d2f5befcd859aa728f4b39b9e7f78a570d8..008ba2d659ec7abe5674c0217f931a973d6a39ec 100644
--- a/app/code/Magento/Bundle/Test/Unit/Pricing/Render/FinalPriceBoxTest.php
+++ b/app/code/Magento/Bundle/Test/Unit/Pricing/Render/FinalPriceBoxTest.php
@@ -17,13 +17,13 @@ class FinalPriceBoxTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $saleableItem;
 
     public function setUp()
     {
-        $this->saleableItem = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface');
+        $this->saleableItem = $this->getMock('Magento\Framework\Pricing\SaleableInterface');
 
         $objectHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->model = $objectHelper->getObject('Magento\Bundle\Pricing\Render\FinalPriceBox', [
diff --git a/app/code/Magento/Bundle/composer.json b/app/code/Magento/Bundle/composer.json
index 0da5b0193e94f39c86dc1b012873aead8b2a9808..2328da6c4f30a5f58ae973e9b6d1047be25b832a 100644
--- a/app/code/Magento/Bundle/composer.json
+++ b/app/code/Magento/Bundle/composer.json
@@ -20,7 +20,8 @@
         "magento/module-media-storage": "1.0.0-beta"
     },
     "suggest": {
-        "magento/module-webapi": "1.0.0-beta"
+        "magento/module-webapi": "1.0.0-beta",
+        "magento/module-bundle-sample-data": "Sample Data version:1.0.0-beta"
     },
     "type": "magento2-module",
     "version": "1.0.0-beta",
diff --git a/app/code/Magento/Bundle/etc/adminhtml/events.xml b/app/code/Magento/Bundle/etc/adminhtml/events.xml
index 8b0ce8cd5a1d07aa588e693f822d6a1608182105..29b2a0e3861f592cb3d0ba9a58bbcacf760a0e38 100644
--- a/app/code/Magento/Bundle/etc/adminhtml/events.xml
+++ b/app/code/Magento/Bundle/etc/adminhtml/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_edit_action">
-        <observer name="bundle_observer" instance="Magento\Bundle\Observer\SetAttributeTabBlockObserver" method="execute" />
+        <observer name="bundle_observer" instance="Magento\Bundle\Observer\SetAttributeTabBlockObserver" />
     </event>
     <event name="catalog_product_new_action">
-        <observer name="bundle_observer" instance="Magento\Bundle\Observer\SetAttributeTabBlockObserver" method="execute" />
+        <observer name="bundle_observer" instance="Magento\Bundle\Observer\SetAttributeTabBlockObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Bundle/etc/frontend/events.xml b/app/code/Magento/Bundle/etc/frontend/events.xml
index 087214a11ede2c0cdf62a2a9b7065596b1e4b312..69aef0c5e5a2000badeb877f43ff54be28809226 100644
--- a/app/code/Magento/Bundle/etc/frontend/events.xml
+++ b/app/code/Magento/Bundle/etc/frontend/events.xml
@@ -7,12 +7,12 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_upsell">
-        <observer name="bundle_observer" instance="Magento\Bundle\Observer\AppendUpsellProductsObserver" method="execute"/>
+        <observer name="bundle_observer" instance="Magento\Bundle\Observer\AppendUpsellProductsObserver"/>
     </event>
     <event name="catalog_product_collection_load_after">
-        <observer name="bundle_observer" instance="Magento\Bundle\Observer\LoadProductOptionsObserver" method="execute"/>
+        <observer name="bundle_observer" instance="Magento\Bundle\Observer\LoadProductOptionsObserver"/>
     </event>
     <event name="product_option_renderer_init">
-        <observer name="bundle_observer" instance="Magento\Bundle\Observer\InitOptionRendererObserver" method="execute"/>
+        <observer name="bundle_observer" instance="Magento\Bundle\Observer\InitOptionRendererObserver"/>
     </event>
 </config>
diff --git a/app/code/Magento/Bundle/etc/product_types.xml b/app/code/Magento/Bundle/etc/product_types.xml
index fff21fd0ba521467085c36d72ae5794615ba8a7d..0479a20299b3338d0e9783aca946922aaff225f4 100644
--- a/app/code/Magento/Bundle/etc/product_types.xml
+++ b/app/code/Magento/Bundle/etc/product_types.xml
@@ -8,8 +8,8 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Catalog:etc/product_types.xsd">
     <type name="bundle" label="Bundle Product" modelInstance="Magento\Bundle\Model\Product\Type" composite='true' indexPriority="40" sortOrder="50">
         <priceModel instance="Magento\Bundle\Model\Product\Price" />
-        <indexerModel instance="Magento\Bundle\Model\Resource\Indexer\Price" />
-        <stockIndexerModel instance="Magento\Bundle\Model\Resource\Indexer\Stock" />
+        <indexerModel instance="Magento\Bundle\Model\ResourceModel\Indexer\Price" />
+        <stockIndexerModel instance="Magento\Bundle\Model\ResourceModel\Indexer\Stock" />
         <allowedSelectionTypes>
             <type name="simple" />
             <type name="virtual" />
diff --git a/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js b/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js
index 4d4c1526c8aa49835fff12ac7b7d91a3bdef22a8..e66c9b35026b03ed3a78cc4cc42a3672ed54a547 100644
--- a/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js
+++ b/app/code/Magento/Bundle/view/adminhtml/web/js/bundle-product.js
@@ -9,11 +9,12 @@
 define([
     "jquery",
     "Magento_Catalog/js/product/weight-handler",
+    "Magento_Ui/js/modal/modal",
     "jquery/ui",
     "mage/translate",
     "Magento_Theme/js/sortable",
     "prototype"
-], function ($, weightHandler) {
+], function($, weightHandler, modal){
     'use strict';
 
     $.widget('mage.bundleProduct', {
@@ -81,7 +82,7 @@ define([
             var widget = this;
             this._on({'click .add-selection': function (event) {
                 var $optionBox = $(event.target).closest('.option-box'),
-                    $selectionGrid = $optionBox.find('.selection-search'),
+                    $selectionGrid = $optionBox.find('.selection-search').clone(),
                     optionIndex = $optionBox.attr('id').replace('bundle_option_', ''),
                     productIds = [],
                     productSkus = [],
@@ -114,21 +115,21 @@ define([
                         delete selectedProductList[$(this).val()];
                     }
                 });
-                $selectionGrid.dialog({
+
+                $selectionGrid.modal({
                     title: $optionBox.find('input[name$="[title]"]').val() === '' ?
                         $.mage.__('Add Products to New Option') :
                         $.mage.__('Add Products to Option "%1"')
                             .replace('%1',($('<div>').text($optionBox.find('input[name$="[title]"]').val()).html())),
-                    autoOpen: false,
-                    minWidth: 980,
-                    width: '75%',
-                    dialogClass: 'bundle',
-                    modal: true,
-                    resizable: true,
+                    modalClass: 'bundle',
+                    type: 'slide',
+                    closed: function(e, modal) {
+                        modal.modal.remove();
+                    },
                     buttons: [{
                         text: $.mage.__('Add Selected Products'),
                         'class': 'action-primary action-add',
-                        click: function() {
+                        click: function () {
                             $.each(selectedProductList, function() {
                                 window.bSelection.addRow(optionIndex, this);
                             });
@@ -141,34 +142,10 @@ define([
                             );
                             widget.refreshSortableElements();
                             widget._updateSelectionsPositions.apply(widget.element);
-                            $selectionGrid.dialog('close');
-                        }
-                    }, {
-                        text: $.mage.__('Cancel'),
-                        'class': 'action-close',
-                        click: function() {
-                            $selectionGrid.dialog('close');
+                            $selectionGrid.modal('closeModal');
                         }
-                    }],
-                    position: {
-                        my: 'left top',
-                        at: 'center top',
-                        of: 'body'
-                    },
-                    open: function () {
-                        $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                        var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 45;
-                        $(this).closest('.ui-dialog').css('margin-top', topMargin);
-
-                        $(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
-                    },
-                    close: function() {
-                        $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                        $(this).dialog('destroy');
-                    }
+                    }]
                 });
-
                 $.ajax({
                     url: bSelection.selectionSearchUrl,
                     dataType: 'html',
@@ -179,7 +156,7 @@ define([
                         form_key: FORM_KEY
                     },
                     success: function(data) {
-                        $selectionGrid.html(data).dialog('open');
+                        $selectionGrid.html(data).modal('openModal');
                     },
                     context: $('body'),
                     showLoader: true
diff --git a/app/code/Magento/Bundle/view/base/templates/product/price/tier_prices.phtml b/app/code/Magento/Bundle/view/base/templates/product/price/tier_prices.phtml
index 2c6f76ea1cdef372dcf95c8276591315420dcd65..7651130b46eb7b1709383319bf5638c09e0adf26 100644
--- a/app/code/Magento/Bundle/view/base/templates/product/price/tier_prices.phtml
+++ b/app/code/Magento/Bundle/view/base/templates/product/price/tier_prices.phtml
@@ -16,7 +16,7 @@ $tierPriceModel = $block->getPrice();
 $tierPrices = $tierPriceModel->getTierPriceList();
 ?>
 <?php if (count($tierPrices)) : ?>
-    <ul class="<?php /* @escapeNotVerified */ echo($block->hasListClass() ? $block->getListClass() : 'prices tier items'); ?>">
+    <ul class="<?php /* @escapeNotVerified */ echo($block->hasListClass() ? $block->getListClass() : 'prices-tier items'); ?>">
         <?php foreach ($tierPrices as $index => $price) : ?>
             <li class="item">
                 <?php /* @escapeNotVerified */ echo __(
diff --git a/app/code/Magento/BundleImportExport/Model/Export/RowCustomizer.php b/app/code/Magento/BundleImportExport/Model/Export/RowCustomizer.php
index 6ba450d2ebfc58754176d0dbd4674eca5d8e599b..5c8f89c8982d9d0e4cfbc55ca1d67ab15337aa31 100644
--- a/app/code/Magento/BundleImportExport/Model/Export/RowCustomizer.php
+++ b/app/code/Magento/BundleImportExport/Model/Export/RowCustomizer.php
@@ -5,10 +5,10 @@
  */
 namespace Magento\BundleImportExport\Model\Export;
 
-use Magento\Catalog\Model\Resource\Product\Collection;
+use Magento\Catalog\Model\ResourceModel\Product\Collection;
 use Magento\CatalogImportExport\Model\Export\RowCustomizerInterface;
 use Magento\CatalogImportExport\Model\Import\Product as ImportProductModel;
-use Magento\Bundle\Model\Resource\Selection\Collection as SelectionCollection;
+use Magento\Bundle\Model\ResourceModel\Selection\Collection as SelectionCollection;
 use Magento\ImportExport\Controller\Adminhtml\Import;
 
 /**
@@ -89,7 +89,7 @@ class RowCustomizer implements RowCustomizerInterface
     /**
      * Prepare data for export
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @param int $productIds
      * @return $this
      */
@@ -151,7 +151,7 @@ class RowCustomizer implements RowCustomizerInterface
     /**
      * Populate bundle product data
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @return $this
      */
     protected function populateBundleData($collection)
@@ -176,7 +176,7 @@ class RowCustomizer implements RowCustomizerInterface
      */
     protected function getFormattedBundleOptionValues($product)
     {
-        /** @var \Magento\Bundle\Model\Resource\Option\Collection $optionsCollection */
+        /** @var \Magento\Bundle\Model\ResourceModel\Option\Collection $optionsCollection */
         $optionsCollection = $product->getTypeInstance()
             ->getOptionsCollection($product)
             ->setOrder('position', Collection::SORT_ORDER_ASC);
diff --git a/app/code/Magento/BundleImportExport/Model/Import/Product/Type/Bundle.php b/app/code/Magento/BundleImportExport/Model/Import/Product/Type/Bundle.php
index 3d90cfc916fab44baafbac90c7fdfb0bea96d239..265a7df13725b503e5932905eefeac37a7d00a71 100644
--- a/app/code/Magento/BundleImportExport/Model/Import/Product/Type/Bundle.php
+++ b/app/code/Magento/BundleImportExport/Model/Import/Product/Type/Bundle.php
@@ -63,7 +63,7 @@ class Bundle extends \Magento\CatalogImportExport\Model\Import\Product\Type\Abst
     /**
      * Instance of application resource.
      *
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
@@ -142,20 +142,20 @@ class Bundle extends \Magento\CatalogImportExport\Model\Import\Product\Type\Abst
     ];
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFac
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $prodAttrColFac
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param array $params
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFac,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $prodAttrColFac,
+        \Magento\Framework\App\ResourceConnection $resource,
         array $params
     ) {
         parent::__construct($attrSetColFac, $prodAttrColFac, $resource, $params);
         $this->_resource = $resource;
-        $this->connection = $resource->getConnection(\Magento\Framework\App\Resource::DEFAULT_CONNECTION);
+        $this->connection = $resource->getConnection(\Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION);
     }
 
     /**
diff --git a/app/code/Magento/BundleImportExport/Test/Unit/Model/Export/Product/RowCustomizerTest.php b/app/code/Magento/BundleImportExport/Test/Unit/Model/Export/Product/RowCustomizerTest.php
index c01e20f7f43a42a7b642a87df4715365b563213b..dbabce80481515820eb48778bca59b2135019929 100644
--- a/app/code/Magento/BundleImportExport/Test/Unit/Model/Export/Product/RowCustomizerTest.php
+++ b/app/code/Magento/BundleImportExport/Test/Unit/Model/Export/Product/RowCustomizerTest.php
@@ -23,7 +23,7 @@ class RowCustomizerTest extends \PHPUnit_Framework_TestCase
     protected $rowCustomizerMock;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $productResourceCollection;
 
@@ -33,7 +33,7 @@ class RowCustomizerTest extends \PHPUnit_Framework_TestCase
     protected $product;
 
     /**
-     * @var \Magento\Bundle\Model\Resource\Option\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Bundle\Model\ResourceModel\Option\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $optionsCollection;
 
@@ -43,7 +43,7 @@ class RowCustomizerTest extends \PHPUnit_Framework_TestCase
     protected $option;
 
     /**
-     * @var \Magento\Bundle\Model\Resource\Selection\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Bundle\Model\ResourceModel\Selection\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $selectionsCollection;
 
@@ -62,7 +62,7 @@ class RowCustomizerTest extends \PHPUnit_Framework_TestCase
             '\Magento\BundleImportExport\Model\Export\RowCustomizer'
         );
         $this->productResourceCollection = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Collection',
             ['addAttributeToFilter', 'getIterator'],
             [],
             '',
@@ -91,7 +91,7 @@ class RowCustomizerTest extends \PHPUnit_Framework_TestCase
         $this->product->expects($this->any())->method('getWeightType')->willReturn(1);
         $this->product->expects($this->any())->method('getTypeInstance')->willReturnSelf();
         $this->optionsCollection = $this->getMock(
-            '\Magento\Bundle\Model\Resource\Option\Collection',
+            '\Magento\Bundle\Model\ResourceModel\Option\Collection',
             ['setOrder', 'getIterator'],
             [],
             '',
@@ -125,7 +125,7 @@ class RowCustomizerTest extends \PHPUnit_Framework_TestCase
         $this->selection->expects($this->any())->method('getSelectionQty')->willReturn(1);
         $this->selection->expects($this->any())->method('getSelectionPriceType')->willReturn(1);
         $this->selectionsCollection = $this->getMock(
-            '\Magento\Bundle\Model\Resource\Selection\Collection',
+            '\Magento\Bundle\Model\ResourceModel\Selection\Collection',
             ['getIterator', 'addAttributeToSort'],
             [],
             '',
diff --git a/app/code/Magento/BundleImportExport/Test/Unit/Model/Import/Product/Type/BundleTest.php b/app/code/Magento/BundleImportExport/Test/Unit/Model/Import/Product/Type/BundleTest.php
index 1841d2fc7f1f21fe4acff6cebad742f91ae65551..ac3ac5e92e00b6e27fbb35dd0ab509a7c6e57a25 100644
--- a/app/code/Magento/BundleImportExport/Test/Unit/Model/Import/Product/Type/BundleTest.php
+++ b/app/code/Magento/BundleImportExport/Test/Unit/Model/Import/Product/Type/BundleTest.php
@@ -14,7 +14,7 @@ class BundleTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractIm
     protected $bundle;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -38,17 +38,17 @@ class BundleTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractIm
     protected $connection;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $attrSetColFac;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $prodAttrColFac;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $setCollection;
 
@@ -136,7 +136,7 @@ class BundleTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractIm
         $this->connection->expects($this->any())->method('delete')->willReturnSelf();
         $this->connection->expects($this->any())->method('quoteInto')->willReturn('');
         $this->resource = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             ['getConnection', 'getTableName'],
             [],
             '',
@@ -145,14 +145,14 @@ class BundleTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractIm
         $this->resource->expects($this->any())->method('getConnection')->will($this->returnValue($this->connection));
         $this->resource->expects($this->any())->method('getTableName')->will($this->returnValue('tableName'));
         $this->attrSetColFac = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->setCollection = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection',
             ['setEntityTypeFilter'],
             [],
             '',
@@ -165,14 +165,14 @@ class BundleTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractIm
             ->method('setEntityTypeFilter')
             ->will($this->returnValue([]));
         $this->prodAttrColFac = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $attrCollection =
-            $this->getMock('\Magento\Catalog\Model\Resource\Product\Attribute\Collection', [], [], '', false);
+            $this->getMock('\Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection', [], [], '', false);
         $attrCollection->expects($this->any())->method('addFieldToFilter')->willReturn([]);
         $this->prodAttrColFac->expects($this->any())->method('create')->will($this->returnValue($attrCollection));
         $this->params = [
diff --git a/app/code/Magento/CacheInvalidate/etc/events.xml b/app/code/Magento/CacheInvalidate/etc/events.xml
index ff1a55ff609a9801e0cbe5eb0ce3f5c0ea3acffd..202f4332ca26d74e6538c3d4018f54784d3dee74 100644
--- a/app/code/Magento/CacheInvalidate/etc/events.xml
+++ b/app/code/Magento/CacheInvalidate/etc/events.xml
@@ -7,45 +7,45 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="clean_cache_by_tags">
-        <observer name="invalidate_varnish" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/>
+        <observer name="invalidate_varnish" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/>
     </event>
     <event name="adminhtml_cache_flush_system">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver"/>
     </event>
     <event name="clean_media_cache_after">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver"/>
     </event>
     <event name="clean_catalog_images_cache_after">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver"/>
     </event>
     <event name="assigned_theme_changed">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/>
     </event>
     <event name="catalogrule_after_apply">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/>
     </event>
     <event name="adminhtml_cache_refresh_type">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver"/>
     </event>
     <event name="adminhtml_cache_flush_all">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver"/>
     </event>
     <event name="assign_theme_to_stores_after">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\FlushAllCacheObserver"/>
     </event>
     <event name="controller_action_postdispatch_adminhtml_system_currency_saveRates">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/>
     </event>
     <event name="controller_action_postdispatch_adminhtml_system_config_save">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/>
     </event>
     <event name="controller_action_postdispatch_adminhtml_catalog_product_action_attribute_save">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/>
     </event>
     <event name="controller_action_postdispatch_adminhtml_catalog_product_massStatus">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/>
     </event>
     <event name="controller_action_postdispatch_adminhtml_system_currencysymbol_save">
-        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver" method="execute"/>
+        <observer name="flush_varnish_pagecache" instance="Magento\CacheInvalidate\Observer\InvalidateVarnishObserver"/>
     </event>
 </config>
\ No newline at end of file
diff --git a/app/code/Magento/Captcha/Cron/DeleteOldAttempts.php b/app/code/Magento/Captcha/Cron/DeleteOldAttempts.php
index d05136431861ecb6abce6b4df58ac7fb0d956c03..586ba1232947364bce4c2fb70b98f24cf4c32eff 100644
--- a/app/code/Magento/Captcha/Cron/DeleteOldAttempts.php
+++ b/app/code/Magento/Captcha/Cron/DeleteOldAttempts.php
@@ -11,15 +11,15 @@ namespace Magento\Captcha\Cron;
 class DeleteOldAttempts
 {
     /**
-     * @var \Magento\Captcha\Model\Resource\LogFactory
+     * @var \Magento\Captcha\Model\ResourceModel\LogFactory
      */
     protected $resLogFactory;
 
     /**
-     * @param \Magento\Captcha\Model\Resource\LogFactory $resLogFactory
+     * @param \Magento\Captcha\Model\ResourceModel\LogFactory $resLogFactory
      */
     public function __construct(
-        \Magento\Captcha\Model\Resource\LogFactory $resLogFactory
+        \Magento\Captcha\Model\ResourceModel\LogFactory $resLogFactory
     ) {
         $this->resLogFactory = $resLogFactory;
     }
diff --git a/app/code/Magento/Captcha/Model/DefaultModel.php b/app/code/Magento/Captcha/Model/DefaultModel.php
index bfdd2f9996d949c058145d21e6c85728a9d9f45e..a45e5b22aab6aa0d00a3e2db478c042cec7f027f 100644
--- a/app/code/Magento/Captcha/Model/DefaultModel.php
+++ b/app/code/Magento/Captcha/Model/DefaultModel.php
@@ -52,7 +52,7 @@ class DefaultModel extends \Zend_Captcha_Image implements \Magento\Captcha\Model
     protected $_formId;
 
     /**
-     * @var \Magento\Captcha\Model\Resource\LogFactory
+     * @var \Magento\Captcha\Model\ResourceModel\LogFactory
      */
     protected $_resLogFactory;
 
@@ -71,13 +71,13 @@ class DefaultModel extends \Zend_Captcha_Image implements \Magento\Captcha\Model
     /**
      * @param \Magento\Framework\Session\SessionManagerInterface $session
      * @param \Magento\Captcha\Helper\Data $captchaData
-     * @param \Magento\Captcha\Model\Resource\LogFactory $resLogFactory
+     * @param \Magento\Captcha\Model\ResourceModel\LogFactory $resLogFactory
      * @param string $formId
      */
     public function __construct(
         \Magento\Framework\Session\SessionManagerInterface $session,
         \Magento\Captcha\Helper\Data $captchaData,
-        \Magento\Captcha\Model\Resource\LogFactory $resLogFactory,
+        \Magento\Captcha\Model\ResourceModel\LogFactory $resLogFactory,
         $formId
     ) {
         $this->_session = $session;
@@ -510,7 +510,7 @@ class DefaultModel extends \Zend_Captcha_Image implements \Magento\Captcha\Model
     /**
      * Get resource model
      *
-     * @return \Magento\Captcha\Model\Resource\Log
+     * @return \Magento\Captcha\Model\ResourceModel\Log
      */
     protected function _getResourceModel()
     {
diff --git a/app/code/Magento/Captcha/Model/Resource/Log.php b/app/code/Magento/Captcha/Model/ResourceModel/Log.php
similarity index 94%
rename from app/code/Magento/Captcha/Model/Resource/Log.php
rename to app/code/Magento/Captcha/Model/ResourceModel/Log.php
index e820e3c713543b8a73b102b0d1e06d595371f438..cdd46fbb97d156df835d081b8657b0347bbc5a41 100644
--- a/app/code/Magento/Captcha/Model/Resource/Log.php
+++ b/app/code/Magento/Captcha/Model/ResourceModel/Log.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Captcha\Model\Resource;
+namespace Magento\Captcha\Model\ResourceModel;
 
 /**
  * Log Attempts resource
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Log extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Log extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Type Remote Address
@@ -35,13 +35,13 @@ class Log extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_remoteAddress;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate
      * @param \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $coreDate,
         \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress,
         $connectionName = null
diff --git a/app/code/Magento/Captcha/Observer/ResetAttemptForBackendObserver.php b/app/code/Magento/Captcha/Observer/ResetAttemptForBackendObserver.php
index 780c90a6c95b65436a11d4d5e371eab89ea65d80..b0b3d2a76c33081cbcdd6104ddc7e9b4081822be 100644
--- a/app/code/Magento/Captcha/Observer/ResetAttemptForBackendObserver.php
+++ b/app/code/Magento/Captcha/Observer/ResetAttemptForBackendObserver.php
@@ -10,15 +10,15 @@ use Magento\Framework\Event\ObserverInterface;
 class ResetAttemptForBackendObserver implements ObserverInterface
 {
     /*
-      * @var \Magento\Captcha\Model\Resource\LogFactory
+      * @var \Magento\Captcha\Model\ResourceModel\LogFactory
       */
     public $resLogFactory;
 
     /**
-     * @param \Magento\Captcha\Model\Resource\LogFactory $resLogFactory
+     * @param \Magento\Captcha\Model\ResourceModel\LogFactory $resLogFactory
      */
     public function __construct(
-        \Magento\Captcha\Model\Resource\LogFactory $resLogFactory
+        \Magento\Captcha\Model\ResourceModel\LogFactory $resLogFactory
     ) {
         $this->resLogFactory = $resLogFactory;
     }
diff --git a/app/code/Magento/Captcha/Observer/ResetAttemptForFrontendObserver.php b/app/code/Magento/Captcha/Observer/ResetAttemptForFrontendObserver.php
index 5828556e99c9b7d1c07f147c2c37041f28092e72..90d3111bea10719298f92ed15d7dfe3655e2491c 100644
--- a/app/code/Magento/Captcha/Observer/ResetAttemptForFrontendObserver.php
+++ b/app/code/Magento/Captcha/Observer/ResetAttemptForFrontendObserver.php
@@ -10,15 +10,15 @@ use Magento\Framework\Event\ObserverInterface;
 class ResetAttemptForFrontendObserver implements ObserverInterface
 {
     /*
-     * @var \Magento\Captcha\Model\Resource\LogFactory
+     * @var \Magento\Captcha\Model\ResourceModel\LogFactory
      */
     public $resLogFactory;
 
     /**
-     * @param \Magento\Captcha\Model\Resource\LogFactory $resLogFactory
+     * @param \Magento\Captcha\Model\ResourceModel\LogFactory $resLogFactory
      */
     public function __construct(
-        \Magento\Captcha\Model\Resource\LogFactory $resLogFactory
+        \Magento\Captcha\Model\ResourceModel\LogFactory $resLogFactory
     ) {
         $this->resLogFactory = $resLogFactory;
     }
diff --git a/app/code/Magento/Captcha/Test/Unit/Helper/DataTest.php b/app/code/Magento/Captcha/Test/Unit/Helper/DataTest.php
index 30bd742dc4acef74a92d28c407e000afa8306db8..d3887d0a1d1f98a57e6d3d1fe4f1f921b562cdef 100644
--- a/app/code/Magento/Captcha/Test/Unit/Helper/DataTest.php
+++ b/app/code/Magento/Captcha/Test/Unit/Helper/DataTest.php
@@ -71,7 +71,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
                 new \Magento\Captcha\Model\DefaultModel(
                     $this->getMock('Magento\Framework\Session\SessionManager', [], [], '', false),
                     $this->getMock('Magento\Captcha\Helper\Data', [], [], '', false),
-                    $this->getMock('Magento\Captcha\Model\Resource\LogFactory', ['create'], [], '', false),
+                    $this->getMock('Magento\Captcha\Model\ResourceModel\LogFactory', ['create'], [], '', false),
                     'user_create'
                 )
             )
diff --git a/app/code/Magento/Captcha/Test/Unit/Model/DefaultTest.php b/app/code/Magento/Captcha/Test/Unit/Model/DefaultTest.php
index 2e82417babb2a1fa1f1132ca0b87c8b017ec3ad7..60127e17b1529aa83ac14b2d0e94d4c4df37e769 100644
--- a/app/code/Magento/Captcha/Test/Unit/Model/DefaultTest.php
+++ b/app/code/Magento/Captcha/Test/Unit/Model/DefaultTest.php
@@ -118,7 +118,7 @@ class DefaultTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->_resLogFactory = $this->getMock(
-            'Magento\Captcha\Model\Resource\LogFactory',
+            'Magento\Captcha\Model\ResourceModel\LogFactory',
             ['create'],
             [],
             '',
@@ -297,12 +297,12 @@ class DefaultTest extends \PHPUnit_Framework_TestCase
 
     /**
      * Get stub for resource model
-     * @return \Magento\Captcha\Model\Resource\Log
+     * @return \Magento\Captcha\Model\ResourceModel\Log
      */
     protected function _getResourceModelStub()
     {
         $resourceModel = $this->getMock(
-            'Magento\Captcha\Model\Resource\Log',
+            'Magento\Captcha\Model\ResourceModel\Log',
             ['countAttemptsByRemoteAddress', 'countAttemptsByUserLogin', 'logAttempt', '__wakeup'],
             [],
             '',
diff --git a/app/code/Magento/Captcha/etc/adminhtml/events.xml b/app/code/Magento/Captcha/etc/adminhtml/events.xml
index 5a64fcb0125f055b5d1691b4288b605d0344fee0..b1742329fb0ab5f06de748d86d829e631ba86e14 100644
--- a/app/code/Magento/Captcha/etc/adminhtml/events.xml
+++ b/app/code/Magento/Captcha/etc/adminhtml/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="controller_action_predispatch_adminhtml_auth_forgotpassword">
-        <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserForgotPasswordBackendObserver" method="execute" />
+        <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserForgotPasswordBackendObserver" />
     </event>
     <event name="controller_action_predispatch_customer_account_forgotpasswordpost">
-        <observer name="captcha" instance="Magento\Captcha\Observer\CheckForgotpasswordObserver" method="execute" />
+        <observer name="captcha" instance="Magento\Captcha\Observer\CheckForgotpasswordObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Captcha/etc/events.xml b/app/code/Magento/Captcha/etc/events.xml
index 76e183742da5c2f36693a770b80f68a3726867d7..66595abf9780e0e1aa92e53ccffb3d7fc99e4c62 100644
--- a/app/code/Magento/Captcha/etc/events.xml
+++ b/app/code/Magento/Captcha/etc/events.xml
@@ -7,25 +7,25 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="controller_action_predispatch_customer_account_loginPost">
-        <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserLoginObserver" method="execute" />
+        <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserLoginObserver" />
     </event>
     <event name="controller_action_predispatch_customer_account_createpost">
-        <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserCreateObserver" method="execute" />
+        <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserCreateObserver" />
     </event>
     <event name="controller_action_predispatch_customer_account_forgotpasswordpost">
-        <observer name="captcha" instance="Magento\Captcha\Observer\CheckForgotpasswordObserver" method="execute"/>
+        <observer name="captcha" instance="Magento\Captcha\Observer\CheckForgotpasswordObserver"/>
     </event>
     <event name="admin_user_authenticate_before">
-        <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserLoginBackendObserver" method="execute" />
+        <observer name="captcha" instance="Magento\Captcha\Observer\CheckUserLoginBackendObserver" />
     </event>
     <event name="controller_action_predispatch_checkout_onepage_saveBilling">
-        <observer name="captcha_guest" instance="Magento\Captcha\Observer\CheckGuestCheckoutObserver" method="execute" />
-        <observer name="captcha_register" instance="Magento\Captcha\Observer\CheckRegisterCheckoutObserver" method="execute" />
+        <observer name="captcha_guest" instance="Magento\Captcha\Observer\CheckGuestCheckoutObserver" />
+        <observer name="captcha_register" instance="Magento\Captcha\Observer\CheckRegisterCheckoutObserver" />
     </event>
     <event name="customer_customer_authenticated">
-        <observer name="captcha_reset_attempt" instance="Magento\Captcha\Observer\ResetAttemptForFrontendObserver" method="execute" />
+        <observer name="captcha_reset_attempt" instance="Magento\Captcha\Observer\ResetAttemptForFrontendObserver" />
     </event>
     <event name="backend_auth_user_login_success">
-        <observer name="captcha_reset_attempt" instance="Magento\Captcha\Observer\ResetAttemptForBackendObserver" method="execute" />
+        <observer name="captcha_reset_attempt" instance="Magento\Captcha\Observer\ResetAttemptForBackendObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Captcha/etc/frontend/events.xml b/app/code/Magento/Captcha/etc/frontend/events.xml
index 7948d0932628c8bc70618aa4cc6e23da1f81be15..c2fdb7b0660852b2829bc3a8f13866f672968598 100644
--- a/app/code/Magento/Captcha/etc/frontend/events.xml
+++ b/app/code/Magento/Captcha/etc/frontend/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="controller_action_predispatch_contact_index_post">
-        <observer name="captcha_contact_us_form" instance="Magento\Captcha\Observer\CheckContactUsFormObserver" method="execute" />
+        <observer name="captcha_contact_us_form" instance="Magento\Captcha\Observer\CheckContactUsFormObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Captcha/view/frontend/web/js/view/checkout/defaultCaptcha.js b/app/code/Magento/Captcha/view/frontend/web/js/view/checkout/defaultCaptcha.js
index ddb4a6f84ae57bf22a0c9396a5843658813f0785..1d779f17ea386524ec4c33fb62c148c88a78dc02 100644
--- a/app/code/Magento/Captcha/view/frontend/web/js/view/checkout/defaultCaptcha.js
+++ b/app/code/Magento/Captcha/view/frontend/web/js/view/checkout/defaultCaptcha.js
@@ -28,13 +28,15 @@ define(
                 this._super();
                 captchaConfig = window[this.configSource]['captcha'];
 
-                $.each(captchaConfig, function(formId, captchaData) {
-                    captchaData.formId = formId;
-                    captchaList.add(Captcha(captchaData));
-                });
+                if (captchaConfig) {
+                    $.each(captchaConfig, function(formId, captchaData) {
+                        captchaData.formId = formId;
+                        captchaList.add(Captcha(captchaData));
+                    });
+                }
             },
             getIsLoading: function() {
-                return this.currentCaptcha.isLoading
+                return this.currentCaptcha !== null ? this.currentCaptcha.isLoading : false;
             },
             getCurrentCaptcha: function() {
                 return this.currentCaptcha;
@@ -43,25 +45,25 @@ define(
                 this.currentCaptcha = captcha;
             },
             getFormId: function() {
-                return this.currentCaptcha.getFormId();
+                return this.currentCaptcha !== null ? this.currentCaptcha.getFormId() : null;
             },
             getIsVisible: function() {
-                return this.currentCaptcha.getIsVisible();
+                return this.currentCaptcha !== null ? this.currentCaptcha.getIsVisible() : false;
             },
             setIsVisible: function(flag) {
                 this.currentCaptcha.setIsVisible(flag);
             },
             isRequired: function() {
-                return this.currentCaptcha.getIsRequired();
+                return this.currentCaptcha !== null ? this.currentCaptcha.getIsRequired() : false;
             },
             isCaseSensitive: function() {
-                return this.currentCaptcha.getIsCaseSensitive();
+                return this.currentCaptcha !== null ? this.currentCaptcha.getIsCaseSensitive() : false;
             },
             imageHeight: function() {
-                return this.currentCaptcha.getImageHeight();
+                return this.currentCaptcha !== null ? this.currentCaptcha.getImageHeight() : null;
             },
             getImageSource: function () {
-                return this.currentCaptcha.getImageSource();
+                return this.currentCaptcha !== null ? this.currentCaptcha.getImageSource() : null;
             },
             refresh: function() {
                 this.currentCaptcha.refresh();
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/AbstractCategory.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/AbstractCategory.php
index 5dbe655e844ea3bf8148ae667805c5348f36e874..55b857949c7492620a79fb156198b1617636d983 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Category/AbstractCategory.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/AbstractCategory.php
@@ -21,7 +21,7 @@ class AbstractCategory extends \Magento\Backend\Block\Template
     protected $_coreRegistry = null;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\Tree
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Tree
      */
     protected $_categoryTree;
 
@@ -37,14 +37,14 @@ class AbstractCategory extends \Magento\Backend\Block\Template
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Catalog\Model\Resource\Category\Tree $categoryTree
+     * @param \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTree
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Catalog\Model\Resource\Category\Tree $categoryTree,
+        \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTree,
         \Magento\Framework\Registry $registry,
         \Magento\Catalog\Model\CategoryFactory $categoryFactory,
         array $data = []
@@ -170,7 +170,7 @@ class AbstractCategory extends \Magento\Backend\Block\Template
     }
 
     /**
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getCategoryCollection()
     {
@@ -279,7 +279,7 @@ class AbstractCategory extends \Magento\Backend\Block\Template
     {
         $ids = $this->getData('root_ids');
         if ($ids === null) {
-            $ids = [];
+            $ids = [\Magento\Catalog\Model\Category::TREE_ROOT_ID];
             foreach ($this->_storeManager->getGroups() as $store) {
                 $ids[] = $store->getRootCategoryId();
             }
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Edit/Form.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Edit/Form.php
index 15807366d1970de51fe37b72e6b2b97419c135e4..f30b8b51928e0ea959de1223871f00f9ec14420d 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Edit/Form.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Edit/Form.php
@@ -40,14 +40,14 @@ class Form extends \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory
      *
      * @param Template\Context $context
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
-     * @param \Magento\Catalog\Model\Resource\Category\Tree $categoryTree
+     * @param \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTree
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory,
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Catalog\Model\Resource\Category\Tree $categoryTree,
+        \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTree,
         \Magento\Framework\Registry $registry,
         \Magento\Catalog\Model\CategoryFactory $categoryFactory,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Tabs.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Tabs.php
index 0f7bfb9042f735acff82ce5ecb91a7f37e5cc644..a55f3fba76b23f4e70982d9b178fcbae17a1e524 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Tabs.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Tabs.php
@@ -38,7 +38,7 @@ class Tabs extends \Magento\Backend\Block\Widget\Tabs
     protected $_helperCatalog = null;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -46,7 +46,7 @@ class Tabs extends \Magento\Backend\Block\Widget\Tabs
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Backend\Model\Auth\Session $authSession
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory $collectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $collectionFactory
      * @param \Magento\Catalog\Helper\Catalog $helperCatalog
      * @param \Magento\Framework\Registry $registry
      * @param array $data
@@ -55,7 +55,7 @@ class Tabs extends \Magento\Backend\Block\Widget\Tabs
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
         \Magento\Backend\Model\Auth\Session $authSession,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory $collectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $collectionFactory,
         \Magento\Catalog\Helper\Catalog $helperCatalog,
         \Magento\Framework\Registry $registry,
         array $data = []
@@ -121,7 +121,7 @@ class Tabs extends \Magento\Backend\Block\Widget\Tabs
         }
 
         $attributeSetId = $this->getCategory()->getDefaultAttributeSetId();
-        /** @var $groupCollection \Magento\Eav\Model\Resource\Entity\Attribute\Group\Collection */
+        /** @var $groupCollection \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\Collection */
         $groupCollection = $this->_collectionFactory->create()->setAttributeSetFilter(
             $attributeSetId
         )->setSortOrder()->load();
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Tree.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Tree.php
index 3dc9a692b7ffff9a210b9481504a03f586b22fa4..81c63b8fd5fb86cac947c0cd8f5cb100d321b3ae 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Tree.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Tree.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Catalog\Block\Adminhtml\Category;
 
-use Magento\Catalog\Model\Resource\Category\Collection;
+use Magento\Catalog\Model\ResourceModel\Category\Collection;
 use Magento\Framework\Data\Tree\Node;
 
 class Tree extends \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory
@@ -38,7 +38,7 @@ class Tree extends \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Catalog\Model\Resource\Category\Tree $categoryTree
+     * @param \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTree
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
@@ -48,7 +48,7 @@ class Tree extends \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Catalog\Model\Resource\Category\Tree $categoryTree,
+        \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTree,
         \Magento\Framework\Registry $registry,
         \Magento\Catalog\Model\CategoryFactory $categoryFactory,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Category/Widget/Chooser.php b/app/code/Magento/Catalog/Block/Adminhtml/Category/Widget/Chooser.php
index 53fb1b7e0419d74a8582d25c3732644bde0bde7b..c7d726e31c2b895ba457d3f0c4dadca8fbc9bc84 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Category/Widget/Chooser.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Category/Widget/Chooser.php
@@ -160,7 +160,7 @@ class Chooser extends \Magento\Catalog\Block\Adminhtml\Category\Tree
     /**
      * Adds some extra params to categories collection
      *
-     * @return \Magento\Catalog\Model\Resource\Category\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Category\Collection
      */
     public function getCategoryCollection()
     {
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Form/Renderer/Fieldset/Element.php b/app/code/Magento/Catalog/Block/Adminhtml/Form/Renderer/Fieldset/Element.php
index 7e2e9c4856e334fe3f66898ea02bc23ba3821172..8b3bd2dce754056141e85afd3cd3a3a30e0e764f 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Form/Renderer/Fieldset/Element.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Form/Renderer/Fieldset/Element.php
@@ -31,7 +31,7 @@ class Element extends \Magento\Backend\Block\Widget\Form\Renderer\Fieldset\Eleme
     /**
      * Retireve associated with element attribute object
      *
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     public function getAttribute()
     {
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php
index 714f0e6e6b99bc13f77489d97e60ef6698132fc4..dec89ab52ff89d9275791fde97f7f2d4024de97d 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Advanced.php
@@ -205,14 +205,14 @@ class Advanced extends Generic
         }
 
         $scopes = [
-            \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE => __('Store View'),
-            \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE => __('Website'),
-            \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL => __('Global'),
+            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE => __('Store View'),
+            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE => __('Website'),
+            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL => __('Global'),
         ];
 
         if ($attributeObject->getAttributeCode() == 'status' || $attributeObject->getAttributeCode() == 'tax_class_id'
         ) {
-            unset($scopes[\Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE]);
+            unset($scopes[\Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE]);
         }
 
         $fieldset->addField(
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Main.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Main.php
index 270d8a4cd4bd995ae84e438d6c98f37abfa76ba7..5f8ab35a04f6f7a3f2564ce63aebceb86dea4c2a 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Main.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/Main.php
@@ -27,7 +27,7 @@ class Main extends AbstractMain
     protected function _prepareForm()
     {
         parent::_prepareForm();
-        /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attributeObject */
+        /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attributeObject */
         $attributeObject = $this->getAttributeObject();
         /* @var $form \Magento\Framework\Data\Form */
         $form = $this->getForm();
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Grid.php
index 8ca6195788ac8fa4cb4b9c8e090fac7d6d505012..b2619647601b92b935951d8b2aae10959d89ea6b 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Grid.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Grid.php
@@ -19,20 +19,20 @@ use Magento\Eav\Block\Adminhtml\Attribute\Grid\AbstractGrid;
 class Grid extends AbstractGrid
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     protected $_collectionFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $collectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $collectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_collectionFactory = $collectionFactory;
@@ -83,9 +83,9 @@ class Grid extends AbstractGrid
                 'index' => 'is_global',
                 'type' => 'options',
                 'options' => [
-                    \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE => __('Store View'),
-                    \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE => __('Web Site'),
-                    \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL => __('Global'),
+                    \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE => __('Store View'),
+                    \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE => __('Web Site'),
+                    \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL => __('Global'),
                 ],
                 'align' => 'center'
             ],
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main.php
index 437fd4fc2b1365905649cc58425a546213d61bdc..34025f7fc5bcfbe5df6880ae4738c98acc19bd25 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Attribute/Set/Main.php
@@ -27,7 +27,7 @@ class Main extends \Magento\Backend\Block\Template
     protected $_coreRegistry = null;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -56,7 +56,7 @@ class Main extends \Magento\Backend\Block\Template
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Eav\Model\Entity\TypeFactory $typeFactory
      * @param \Magento\Eav\Model\Entity\Attribute\GroupFactory $groupFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $collectionFactory
      * @param \Magento\Framework\Registry $registry
      * @param AttributeMapperInterface $attributeMapper
      * @param array $data
@@ -66,7 +66,7 @@ class Main extends \Magento\Backend\Block\Template
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
         \Magento\Eav\Model\Entity\TypeFactory $typeFactory,
         \Magento\Eav\Model\Entity\Attribute\GroupFactory $groupFactory,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $collectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $collectionFactory,
         \Magento\Framework\Registry $registry,
         AttributeMapperInterface $attributeMapper,
         array $data = []
@@ -220,7 +220,7 @@ class Main extends \Magento\Backend\Block\Template
         $items = [];
         $setId = $this->_getSetId();
 
-        /* @var $groups \Magento\Eav\Model\Resource\Entity\Attribute\Group\Collection */
+        /* @var $groups \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\Collection */
         $groups = $this->_groupFactory->create()->getResourceCollection()->setAttributeSetFilter(
             $setId
         )->setSortOrder()->load();
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Action/Attribute.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Action/Attribute.php
index 4e8e0b8915fe01f56ab0d99aa4ec11c01571b493..9d690c60f5464dec27df169650052d4b7e02bcaf 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Action/Attribute.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Action/Attribute.php
@@ -12,7 +12,7 @@
 namespace Magento\Catalog\Block\Adminhtml\Product\Edit\Action;
 
 use Magento\Catalog\Helper\Product\Edit\Action\Attribute as ActionAttribute;
-use Magento\Catalog\Model\Resource\Product\Collection;
+use Magento\Catalog\Model\ResourceModel\Product\Collection;
 
 class Attribute extends \Magento\Backend\Block\Widget
 {
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Attributes/Search.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Attributes/Search.php
index 45827ad7d0a93bdc8e72fe9d734a330fa6c3c554..fcb2ec0bb6163a660c131d0e6e8388cec6437bf5 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Attributes/Search.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Attributes/Search.php
@@ -21,7 +21,7 @@ class Search extends \Magento\Backend\Block\Widget
     protected $_coreRegistry = null;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -33,14 +33,14 @@ class Search extends \Magento\Backend\Block\Widget
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Framework\DB\Helper $resourceHelper
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $collectionFactory
      * @param \Magento\Framework\Registry $registry
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Framework\DB\Helper $resourceHelper,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $collectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $collectionFactory,
         \Magento\Framework\Registry $registry,
         array $data = []
     ) {
@@ -81,7 +81,7 @@ class Search extends \Magento\Backend\Block\Widget
      *
      * @param string $labelPart
      * @param int $templateId
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     public function getSuggestedAttributes($labelPart, $templateId = null)
     {
@@ -89,7 +89,7 @@ class Search extends \Magento\Backend\Block\Widget
             $labelPart,
             ['position' => 'any']
         );
-        /** @var $collection \Magento\Catalog\Model\Resource\Product\Attribute\Collection */
+        /** @var $collection \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection */
         $collection = $this->_collectionFactory->create()->addFieldToFilter(
             'frontend_label',
             ['like' => $escapedLabelPart]
@@ -99,7 +99,7 @@ class Search extends \Magento\Backend\Block\Widget
 
         $result = [];
         foreach ($collection->getItems() as $attribute) {
-            /** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+            /** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
             $result[] = [
                 'id' => $attribute->getId(),
                 'label' => $attribute->getFrontendLabel(),
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Crosssell.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Crosssell.php
index a932a9901c8440a193381a3e9ca9673448cfccdb..8f6c08bb52bca13d6ded0f70f31ab034c9549d2f 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Crosssell.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Crosssell.php
@@ -33,7 +33,7 @@ class Crosssell extends Extended
     protected $_linkFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory]
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory]
      */
     protected $_setsFactory;
 
@@ -61,7 +61,7 @@ class Crosssell extends Extended
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Catalog\Model\Product\LinkFactory $linkFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setsFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
      * @param \Magento\Catalog\Model\Product\Type $type
      * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $status
@@ -75,7 +75,7 @@ class Crosssell extends Extended
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Catalog\Model\Product\LinkFactory $linkFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setsFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory,
         \Magento\Catalog\Model\ProductFactory $productFactory,
         \Magento\Catalog\Model\Product\Type $type,
         \Magento\Catalog\Model\Product\Attribute\Source\Status $status,
@@ -156,7 +156,7 @@ class Crosssell extends Extended
      */
     protected function _prepareCollection()
     {
-        /* @var $collection \Magento\Catalog\Model\Resource\Product\Link\Product\Collection */
+        /* @var $collection \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection */
         $collection = $this->_linkFactory->create()->useCrossSellLinks()->getProductCollection()->setProduct(
             $this->getProduct()
         )->addAttributeToSelect(
@@ -374,7 +374,7 @@ class Crosssell extends Extended
     /**
      * Apply `position` filter to cross-sell grid.
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Link\Product\Collection $collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection $collection $collection
      * @param \Magento\Backend\Block\Widget\Grid\Column\Extended $column
      * @return $this
      */
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php
index d1683071dd1b1b9cb500d9ff6a049c7b68e1482d..53bcc298732f9d804846b252f950e4e9c5d3b936 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Options/Popup/Grid.php
@@ -56,6 +56,17 @@ class Grid extends \Magento\Catalog\Block\Adminhtml\Product\Grid
         return $this;
     }
 
+    /**
+     * @return $this
+     */
+    protected function _prepareCollection()
+    {
+        parent::_prepareCollection();
+        $this->getCollection()->addFieldToFilter('has_options', 1);
+
+        return $this;
+    }
+
     /**
      * Define grid update URL for ajax queries
      *
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Price/Group/AbstractGroup.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Price/Group/AbstractGroup.php
index 3a7f96f789b283d94ee328904173a02607f7eaff..b26ee3fb0dd5bf63183602e3d208801158781568 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Price/Group/AbstractGroup.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Price/Group/AbstractGroup.php
@@ -355,7 +355,7 @@ abstract class AbstractGroup extends Widget implements RendererInterface
     /**
      * Retrieve Group Price entity attribute
      *
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     public function getAttribute()
     {
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Related.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Related.php
index 69bed2f49c601ab39e0a636c7470cf1f26028ab4..0e87290ec2729752ef2b35adcffa418ad3d8da9c 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Related.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Related.php
@@ -29,7 +29,7 @@ class Related extends Extended
     protected $_linkFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory]
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory]
      */
     protected $_setsFactory;
 
@@ -57,7 +57,7 @@ class Related extends Extended
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Catalog\Model\Product\LinkFactory $linkFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setsFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
      * @param \Magento\Catalog\Model\Product\Type $type
      * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $status
@@ -71,7 +71,7 @@ class Related extends Extended
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Catalog\Model\Product\LinkFactory $linkFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setsFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory,
         \Magento\Catalog\Model\ProductFactory $productFactory,
         \Magento\Catalog\Model\Product\Type $type,
         \Magento\Catalog\Model\Product\Attribute\Source\Status $status,
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Upsell.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Upsell.php
index 89153f5996f74011669420249f8e9fe531406b44..cad5aafe5d0ccfd2c4ee561e8f425a6d9695ea32 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Upsell.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Upsell.php
@@ -26,7 +26,7 @@ class Upsell extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_linkFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory]
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory]
      */
     protected $_setsFactory;
 
@@ -54,7 +54,7 @@ class Upsell extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Catalog\Model\Product\LinkFactory $linkFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setsFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
      * @param \Magento\Catalog\Model\Product\Type $type
      * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $status
@@ -68,7 +68,7 @@ class Upsell extends \Magento\Backend\Block\Widget\Grid\Extended
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Catalog\Model\Product\LinkFactory $linkFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setsFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory,
         \Magento\Catalog\Model\ProductFactory $productFactory,
         \Magento\Catalog\Model\Product\Type $type,
         \Magento\Catalog\Model\Product\Attribute\Source\Status $status,
@@ -364,7 +364,7 @@ class Upsell extends \Magento\Backend\Block\Widget\Grid\Extended
     /**
      * Apply `position` filter to cross-sell grid.
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Link\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection $collection
      * @param \Magento\Backend\Block\Widget\Grid\Column\Extended $column
      * @return $this
      */
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Websites.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Websites.php
index 32b04c6279096acaa0c0f42227ceee7fc29e2453..853c0c760e7da6f3be6b1c06a39cc02361b1906b 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Websites.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tab/Websites.php
@@ -131,7 +131,10 @@ class Websites extends \Magento\Backend\Block\Store\Switcher
     public function getChooseFromStoreHtml($storeTo)
     {
         if (!$this->_storeFromHtml) {
-            $this->_storeFromHtml = '<select name="copy_to_stores[__store_identifier__]" disabled="disabled">';
+            $this->_storeFromHtml = '<select ' .
+                                         'class="admin__control-select" ' .
+                                         'name="copy_to_stores[__store_identifier__]" ' .
+                                         'disabled="disabled">';
             $this->_storeFromHtml .= '<option value="0">' . __('Default Values') . '</option>';
             foreach ($this->getWebsiteCollection() as $_website) {
                 if (!$this->hasWebsite($_website->getId())) {
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tabs.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tabs.php
index f775a6901ffe580f7a56f350d7ab724cfcf410c6..cc71d18851e5e3ff7ab49ec16e336ff81e3f30b8 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tabs.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Edit/Tabs.php
@@ -12,7 +12,7 @@ use Magento\Backend\Block\Widget\Tabs as WigetTabs;
 use Magento\Backend\Model\Auth\Session;
 use Magento\Catalog\Helper\Catalog;
 use Magento\Catalog\Helper\Data;
-use Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory;
 use Magento\Framework\Json\EncoderInterface;
 use Magento\Framework\Module\Manager;
 use Magento\Framework\Registry;
@@ -120,7 +120,7 @@ class Tabs extends WigetTabs
 
     /**
      * @param int $attributeSetId
-     * @return \Magento\Eav\Model\Resource\Entity\Attribute\Group\Collection
+     * @return \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\Collection
      */
     public function getGroupCollection($attributeSetId)
     {
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php
index 744172c4d9f3be0ac0dbf4ccc8b9487497a3012c..e6f12259918729648a443e1310e05b196f2e7b25 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Grid.php
@@ -21,7 +21,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $moduleManager;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory]
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory]
      */
     protected $_setsFactory;
 
@@ -54,7 +54,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setsFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
      * @param \Magento\Catalog\Model\Product\Type $type
      * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $status
@@ -68,7 +68,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Store\Model\WebsiteFactory $websiteFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setsFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory,
         \Magento\Catalog\Model\ProductFactory $productFactory,
         \Magento\Catalog\Model\Product\Type $type,
         \Magento\Catalog\Model\Product\Attribute\Source\Status $status,
@@ -114,6 +114,8 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
      */
     protected function _prepareCollection()
     {
+        parent::_prepareCollection();
+
         $store = $this->_getStore();
         $collection = $this->_productFactory->create()->getCollection()->addAttributeToSelect(
             'sku'
@@ -181,7 +183,6 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
 
         $this->setCollection($collection);
 
-        parent::_prepareCollection();
         $this->getCollection()->addWebsiteNamesToResult();
         return $this;
     }
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Category.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Category.php
index ee730b9be8157e2d794ff954d9e173676cf4b32b..1313c12c421c8465d84a0ee5d39ce91fad4f3d5e 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Category.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Category.php
@@ -8,7 +8,7 @@
 
 namespace Magento\Catalog\Block\Adminhtml\Product\Helper\Form;
 
-use Magento\Catalog\Model\Resource\Category\Collection;
+use Magento\Catalog\Model\ResourceModel\Category\Collection;
 use Magento\Framework\AuthorizationInterface;
 
 /**
@@ -29,7 +29,7 @@ class Category extends \Magento\Framework\Data\Form\Element\Multiselect
     protected $_backendData;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -47,7 +47,7 @@ class Category extends \Magento\Framework\Data\Form\Element\Multiselect
      * @param \Magento\Framework\Data\Form\Element\Factory $factoryElement
      * @param \Magento\Framework\Data\Form\Element\CollectionFactory $factoryCollection
      * @param \Magento\Framework\Escaper $escaper
-     * @param \Magento\Catalog\Model\Resource\Category\CollectionFactory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $collectionFactory
      * @param \Magento\Backend\Helper\Data $backendData
      * @param \Magento\Framework\View\LayoutInterface $layout
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
@@ -58,7 +58,7 @@ class Category extends \Magento\Framework\Data\Form\Element\Multiselect
         \Magento\Framework\Data\Form\Element\Factory $factoryElement,
         \Magento\Framework\Data\Form\Element\CollectionFactory $factoryCollection,
         \Magento\Framework\Escaper $escaper,
-        \Magento\Catalog\Model\Resource\Category\CollectionFactory $collectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $collectionFactory,
         \Magento\Backend\Helper\Data $backendData,
         \Magento\Framework\View\LayoutInterface $layout,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Weight.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Weight.php
index de677ca788b28f5d3d3fd9d393c4da47bec2b09f..22d35526703ed6092dd2f866f6ed42242a4e6c37 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Weight.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Helper/Form/Weight.php
@@ -26,11 +26,15 @@ class Weight extends \Magento\Framework\Data\Form\Element\Text
      */
     protected $localeFormat;
 
+    /** @var \Magento\Directory\Helper\Data */
+    protected $directoryHelper;
+
     /**
      * @param \Magento\Framework\Data\Form\Element\Factory $factoryElement
      * @param \Magento\Framework\Data\Form\Element\CollectionFactory $factoryCollection
      * @param \Magento\Framework\Escaper $escaper
      * @param \Magento\Framework\Locale\Format $localeFormat
+     * @param \Magento\Directory\Helper\Data $directoryHelper
      * @param array $data
      */
     public function __construct(
@@ -38,8 +42,10 @@ class Weight extends \Magento\Framework\Data\Form\Element\Text
         \Magento\Framework\Data\Form\Element\CollectionFactory $factoryCollection,
         \Magento\Framework\Escaper $escaper,
         \Magento\Framework\Locale\Format $localeFormat,
+        \Magento\Directory\Helper\Data $directoryHelper,
         array $data = []
     ) {
+        $this->directoryHelper = $directoryHelper;
         $this->localeFormat = $localeFormat;
         $this->weightSwitcher = $factoryElement->create('radios');
         $this->weightSwitcher->setValue(
@@ -85,7 +91,7 @@ class Weight extends \Magento\Framework\Data\Form\Element\Text
                 '<label class="admin__addon-suffix" for="' .
                 $this->getHtmlId() .
                 '"><span>' .
-                __('lbs') .
+                $this->directoryHelper->getWeightUnit() .
                 '</span></label>' .
             '</div>' .
         '</div>';
diff --git a/app/code/Magento/Catalog/Block/Adminhtml/Product/Widget/Chooser.php b/app/code/Magento/Catalog/Block/Adminhtml/Product/Widget/Chooser.php
index 15856f820c86193db8e111027f530c2eb9c654de..b9f53854ced01ed5dbcae48c692a0bfb85733f40 100644
--- a/app/code/Magento/Catalog/Block/Adminhtml/Product/Widget/Chooser.php
+++ b/app/code/Magento/Catalog/Block/Adminhtml/Product/Widget/Chooser.php
@@ -24,17 +24,17 @@ class Chooser extends Extended
     protected $_selectedProducts = [];
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category
+     * @var \Magento\Catalog\Model\ResourceModel\Category
      */
     protected $_resourceCategory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product
+     * @var \Magento\Catalog\Model\ResourceModel\Product
      */
     protected $_resourceProduct;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -47,18 +47,18 @@ class Chooser extends Extended
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $collectionFactory
-     * @param \Magento\Catalog\Model\Resource\Category $resourceCategory
-     * @param \Magento\Catalog\Model\Resource\Product $resourceProduct
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Category $resourceCategory
+     * @param \Magento\Catalog\Model\ResourceModel\Product $resourceProduct
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Catalog\Model\CategoryFactory $categoryFactory,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $collectionFactory,
-        \Magento\Catalog\Model\Resource\Category $resourceCategory,
-        \Magento\Catalog\Model\Resource\Product $resourceProduct,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Category $resourceCategory,
+        \Magento\Catalog\Model\ResourceModel\Product $resourceProduct,
         array $data = []
     ) {
         $this->_categoryFactory = $categoryFactory;
@@ -234,7 +234,7 @@ class Chooser extends Extended
      */
     protected function _prepareCollection()
     {
-        /* @var $collection \Magento\Catalog\Model\Resource\Product\Collection */
+        /* @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
         $collection = $this->_collectionFactory->create()->setStoreId(0)->addAttributeToSelect('name');
 
         if ($categoryId = $this->getCategoryId()) {
diff --git a/app/code/Magento/Catalog/Block/Navigation.php b/app/code/Magento/Catalog/Block/Navigation.php
index 1676fc6accb7d457dc510eb8eb9333a130417db4..1140a7320c21ccea2d60329ebff20514d08659da 100644
--- a/app/code/Magento/Catalog/Block/Navigation.php
+++ b/app/code/Magento/Catalog/Block/Navigation.php
@@ -67,7 +67,7 @@ class Navigation extends \Magento\Framework\View\Element\Template implements \Ma
     /**
      * Product collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_productCollectionFactory;
 
@@ -79,7 +79,7 @@ class Navigation extends \Magento\Framework\View\Element\Template implements \Ma
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
      * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
      * @param \Magento\Catalog\Model\Layer\Resolver $layerResolver
      * @param \Magento\Framework\App\Http\Context $httpContext
      * @param \Magento\Catalog\Helper\Category $catalogCategory
@@ -90,7 +90,7 @@ class Navigation extends \Magento\Framework\View\Element\Template implements \Ma
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
         \Magento\Catalog\Model\CategoryFactory $categoryFactory,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
         \Magento\Catalog\Model\Layer\Resolver $layerResolver,
         \Magento\Framework\App\Http\Context $httpContext,
         \Magento\Catalog\Helper\Category $catalogCategory,
@@ -186,7 +186,7 @@ class Navigation extends \Magento\Framework\View\Element\Template implements \Ma
     public function getCurrentChildCategories()
     {
         $categories = $this->_catalogLayer->getCurrentCategory()->getChildrenCategories();
-        /** @var \Magento\Catalog\Model\Resource\Product\Collection $productCollection */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */
         $productCollection = $this->_productCollectionFactory->create();
         $this->_catalogLayer->prepareProductCollection($productCollection);
         $productCollection->addCountToCategories($categories);
diff --git a/app/code/Magento/Catalog/Block/Product/AbstractProduct.php b/app/code/Magento/Catalog/Block/Product/AbstractProduct.php
index c71ffbdf76f125f500f63660e05769002f0ff86c..694ecd7e32f72f18af70edf7f7aec4dfed68b1ef 100644
--- a/app/code/Magento/Catalog/Block/Product/AbstractProduct.php
+++ b/app/code/Magento/Catalog/Block/Product/AbstractProduct.php
@@ -229,11 +229,12 @@ class AbstractProduct extends \Magento\Framework\View\Element\Template
      * to get correct values in different products lists.
      * E.g. crosssells, upsells, new products, recently viewed
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
-    protected function _addProductAttributesAndPrices(\Magento\Catalog\Model\Resource\Product\Collection $collection)
-    {
+    protected function _addProductAttributesAndPrices(
+        \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
+    ) {
         return $collection
             ->addMinimalPrice()
             ->addFinalPrice()
diff --git a/app/code/Magento/Catalog/Block/Product/Compare/ListCompare.php b/app/code/Magento/Catalog/Block/Product/Compare/ListCompare.php
index a347d207c7d7aa1fa3fed225f1d898658cb36294..e25fdd8b5644ff9100da6b7c1c025648ff3fdef6 100644
--- a/app/code/Magento/Catalog/Block/Product/Compare/ListCompare.php
+++ b/app/code/Magento/Catalog/Block/Product/Compare/ListCompare.php
@@ -19,7 +19,7 @@ class ListCompare extends \Magento\Catalog\Block\Product\AbstractProduct
     /**
      * Product Compare items collection
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Compare\Item\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\Collection
      */
     protected $_items;
 
@@ -66,7 +66,7 @@ class ListCompare extends \Magento\Catalog\Block\Product\AbstractProduct
     /**
      * Item collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory
      */
     protected $_itemCollectionFactory;
 
@@ -83,7 +83,7 @@ class ListCompare extends \Magento\Catalog\Block\Product\AbstractProduct
     /**
      * @param \Magento\Catalog\Block\Product\Context $context
      * @param \Magento\Framework\Url\EncoderInterface $urlEncoder
-     * @param \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory $itemCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory $itemCollectionFactory
      * @param Product\Visibility $catalogProductVisibility
      * @param \Magento\Customer\Model\Visitor $customerVisitor
      * @param \Magento\Framework\App\Http\Context $httpContext
@@ -93,7 +93,7 @@ class ListCompare extends \Magento\Catalog\Block\Product\AbstractProduct
     public function __construct(
         \Magento\Catalog\Block\Product\Context $context,
         \Magento\Framework\Url\EncoderInterface $urlEncoder,
-        \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory $itemCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory $itemCollectionFactory,
         \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
         \Magento\Customer\Model\Visitor $customerVisitor,
         \Magento\Framework\App\Http\Context $httpContext,
@@ -144,7 +144,7 @@ class ListCompare extends \Magento\Catalog\Block\Product\AbstractProduct
     /**
      * Retrieve Product Compare items collection
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Compare\Item\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\Collection
      */
     public function getItems()
     {
@@ -190,7 +190,7 @@ class ListCompare extends \Magento\Catalog\Block\Product\AbstractProduct
      * Retrieve Product Attribute Value
      *
      * @param Product $product
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
      * @return \Magento\Framework\Phrase|string
      */
     public function getProductAttributeValue($product, $attribute)
diff --git a/app/code/Magento/Catalog/Block/Product/ListProduct.php b/app/code/Magento/Catalog/Block/Product/ListProduct.php
index 73beec6b2b2e1236434d304e1d0fe94e71091662..c28ab40b55364cb60cf301964fe9c6ffce30ce69 100644
--- a/app/code/Magento/Catalog/Block/Product/ListProduct.php
+++ b/app/code/Magento/Catalog/Block/Product/ListProduct.php
@@ -296,7 +296,7 @@ class ListProduct extends AbstractProduct implements IdentityInterface
         }
         $availableOrders = $this->getAvailableOrders();
         if (!$this->getSortBy()) {
-            $categorySortBy = $category->getDefaultSortBy();
+            $categorySortBy = $this->getDefaultSortBy() ?: $category->getDefaultSortBy();
             if ($categorySortBy) {
                 if (!$availableOrders) {
                     $availableOrders = $this->_getConfig()->getAttributeUsedForSortByArray();
diff --git a/app/code/Magento/Catalog/Block/Product/NewProduct.php b/app/code/Magento/Catalog/Block/Product/NewProduct.php
index 70723bf87cf8fb5724498428ebf95a584346e133..fda55a3e0aa56f3fb44221bad43aca156b48603e 100644
--- a/app/code/Magento/Catalog/Block/Product/NewProduct.php
+++ b/app/code/Magento/Catalog/Block/Product/NewProduct.php
@@ -42,20 +42,20 @@ class NewProduct extends \Magento\Catalog\Block\Product\AbstractProduct implemen
     /**
      * Product collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_productCollectionFactory;
 
     /**
      * @param Context $context
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
      * @param \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility
      * @param \Magento\Framework\App\Http\Context $httpContext
      * @param array $data
      */
     public function __construct(
         \Magento\Catalog\Block\Product\Context $context,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
         \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
         \Magento\Framework\App\Http\Context $httpContext,
         array $data = []
@@ -108,14 +108,14 @@ class NewProduct extends \Magento\Catalog\Block\Product\AbstractProduct implemen
     /**
      * Prepare and return product collection
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Collection|Object|\Magento\Framework\Data\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection|Object|\Magento\Framework\Data\Collection
      */
     protected function _getProductCollection()
     {
         $todayStartOfDayDate = $this->_localeDate->date()->setTime(0, 0, 0)->format('Y-m-d H:i:s');
         $todayEndOfDayDate = $this->_localeDate->date()->setTime(23, 59, 59)->format('Y-m-d H:i:s');
 
-        /** @var $collection \Magento\Catalog\Model\Resource\Product\Collection */
+        /** @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
         $collection = $this->_productCollectionFactory->create();
         $collection->setVisibility($this->_catalogProductVisibility->getVisibleInCatalogIds());
 
diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Crosssell.php b/app/code/Magento/Catalog/Block/Product/ProductList/Crosssell.php
index 6d69e7bcea773eac302894ef93839269be5419cc..5f70188863cc8095d61de81a4cc6f58bf0576dec 100644
--- a/app/code/Magento/Catalog/Block/Product/ProductList/Crosssell.php
+++ b/app/code/Magento/Catalog/Block/Product/ProductList/Crosssell.php
@@ -14,7 +14,7 @@ class Crosssell extends \Magento\Catalog\Block\Product\AbstractProduct
     /**
      * Crosssell item collection
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Link\Product\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection
      */
     protected $_itemCollection;
 
@@ -56,7 +56,7 @@ class Crosssell extends \Magento\Catalog\Block\Product\AbstractProduct
     /**
      * Retrieve crosssell items collection
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Link\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection
      */
     public function getItems()
     {
diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Promotion.php b/app/code/Magento/Catalog/Block/Product/ProductList/Promotion.php
index d0b40da68b12eb4b95149447f473ab170a22ae53..e3ea8d7ba2af5d8565f01b86c427aaafcb072667 100644
--- a/app/code/Magento/Catalog/Block/Product/ProductList/Promotion.php
+++ b/app/code/Magento/Catalog/Block/Product/ProductList/Promotion.php
@@ -6,8 +6,8 @@
 namespace Magento\Catalog\Block\Product\ProductList;
 
 use Magento\Catalog\Api\CategoryRepositoryInterface;
-use Magento\Catalog\Model\Resource\Product\Collection;
-use Magento\Catalog\Model\Resource\Product\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\Collection;
+use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
 
 class Promotion extends \Magento\Catalog\Block\Product\ListProduct
 {
diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Random.php b/app/code/Magento/Catalog/Block/Product/ProductList/Random.php
index 4ad375cb499b44b2e5193a32fce697f0e98664ef..99231236b4294bdfd9c214cbb9998c32c14a8989 100644
--- a/app/code/Magento/Catalog/Block/Product/ProductList/Random.php
+++ b/app/code/Magento/Catalog/Block/Product/ProductList/Random.php
@@ -17,7 +17,7 @@ class Random extends \Magento\Catalog\Block\Product\ListProduct
     /**
      * Product collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_productCollectionFactory;
 
@@ -32,7 +32,7 @@ class Random extends \Magento\Catalog\Block\Product\ListProduct
      * @param \Magento\Catalog\Model\Layer\Resolver $layerResolver
      * @param CategoryRepositoryInterface $categoryRepository
      * @param \Magento\Framework\Url\Helper\Data $urlHelper
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
      * @param array $data
      */
     public function __construct(
@@ -41,7 +41,7 @@ class Random extends \Magento\Catalog\Block\Product\ListProduct
         \Magento\Catalog\Model\Layer\Resolver $layerResolver,
         CategoryRepositoryInterface $categoryRepository,
         \Magento\Framework\Url\Helper\Data $urlHelper,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
         array $data = []
     ) {
         $this->_productCollectionFactory = $productCollectionFactory;
@@ -56,12 +56,12 @@ class Random extends \Magento\Catalog\Block\Product\ListProduct
     }
 
     /**
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     protected function _getProductCollection()
     {
         if ($this->_productCollection === null) {
-            /** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
+            /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
             $collection = $this->_productCollectionFactory->create();
             $this->_catalogLayer->prepareProductCollection($collection);
             $collection->getSelect()->order('rand()');
diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Related.php b/app/code/Magento/Catalog/Block/Product/ProductList/Related.php
index 05d0342aebccbf7d396663565496e01a4d53da53..610e4b5bb51647db3162e36ed5e126773ce02303 100644
--- a/app/code/Magento/Catalog/Block/Product/ProductList/Related.php
+++ b/app/code/Magento/Catalog/Block/Product/ProductList/Related.php
@@ -8,7 +8,7 @@
 
 namespace Magento\Catalog\Block\Product\ProductList;
 
-use Magento\Catalog\Model\Resource\Product\Collection;
+use Magento\Catalog\Model\ResourceModel\Product\Collection;
 use Magento\Framework\View\Element\AbstractBlock;
 
 /**
@@ -40,7 +40,7 @@ class Related extends \Magento\Catalog\Block\Product\AbstractProduct implements
     /**
      * Checkout cart
      *
-     * @var \Magento\Checkout\Model\Resource\Cart
+     * @var \Magento\Checkout\Model\ResourceModel\Cart
      */
     protected $_checkoutCart;
 
@@ -51,7 +51,7 @@ class Related extends \Magento\Catalog\Block\Product\AbstractProduct implements
 
     /**
      * @param \Magento\Catalog\Block\Product\Context $context
-     * @param \Magento\Checkout\Model\Resource\Cart $checkoutCart
+     * @param \Magento\Checkout\Model\ResourceModel\Cart $checkoutCart
      * @param \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility
      * @param \Magento\Checkout\Model\Session $checkoutSession
      * @param \Magento\Framework\Module\Manager $moduleManager
@@ -59,7 +59,7 @@ class Related extends \Magento\Catalog\Block\Product\AbstractProduct implements
      */
     public function __construct(
         \Magento\Catalog\Block\Product\Context $context,
-        \Magento\Checkout\Model\Resource\Cart $checkoutCart,
+        \Magento\Checkout\Model\ResourceModel\Cart $checkoutCart,
         \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
         \Magento\Checkout\Model\Session $checkoutSession,
         \Magento\Framework\Module\Manager $moduleManager,
diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php
index 93b34bc6b31ee580427d08cd71cd6e2990a5d26d..d4b02cfda69dd4e18fd5e8f79d713b8ca8f3f7a1 100644
--- a/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php
+++ b/app/code/Magento/Catalog/Block/Product/ProductList/Toolbar.php
@@ -5,6 +5,7 @@
  */
 namespace Magento\Catalog\Block\Product\ProductList;
 
+use Magento\Catalog\Helper\Product\ProductList;
 use Magento\Catalog\Model\Product\ProductList\Toolbar as ToolbarModel;
 
 /**
@@ -19,7 +20,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
     /**
      * Products collection
      *
-     * @var \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected $_collection = null;
 
@@ -63,7 +64,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
      *
      * @var string
      */
-    protected $_direction = \Magento\Catalog\Helper\Product\ProductList::DEFAULT_SORT_DIRECTION;
+    protected $_direction = ProductList::DEFAULT_SORT_DIRECTION;
 
     /**
      * Default View mode
@@ -102,7 +103,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
     protected $_toolbarModel;
 
     /**
-     * @var \Magento\Catalog\Helper\Product\ProductList
+     * @var ProductList
      */
     protected $_productListHelper;
 
@@ -122,7 +123,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
      * @param \Magento\Catalog\Model\Config $catalogConfig
      * @param ToolbarModel $toolbarModel
      * @param \Magento\Framework\Url\EncoderInterface $urlEncoder
-     * @param \Magento\Catalog\Helper\Product\ProductList $productListHelper
+     * @param ProductList $productListHelper
      * @param \Magento\Framework\Data\Helper\PostHelper $postDataHelper
      * @param array $data
      */
@@ -132,7 +133,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
         \Magento\Catalog\Model\Config $catalogConfig,
         ToolbarModel $toolbarModel,
         \Magento\Framework\Url\EncoderInterface $urlEncoder,
-        \Magento\Catalog\Helper\Product\ProductList $productListHelper,
+        ProductList $productListHelper,
         \Magento\Framework\Data\Helper\PostHelper $postDataHelper,
         array $data = []
     ) {
@@ -197,7 +198,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
     /**
      * Return products collection instance
      *
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getCollection()
     {
@@ -355,7 +356,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
     }
 
     /**
-     * Compare defined order field vith current order field
+     * Compare defined order field with current order field
      *
      * @param string $order
      * @return bool
@@ -375,7 +376,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
     {
         $urlParams = [];
         $urlParams['_current'] = true;
-        $urlParams['_escape'] = true;
+        $urlParams['_escape'] = false;
         $urlParams['_use_rewrite'] = true;
         $urlParams['_query'] = $params;
         return $this->getUrl('*/*/*', $urlParams);
@@ -678,7 +679,7 @@ class Toolbar extends \Magento\Framework\View\Element\Template
             'order' => ToolbarModel::ORDER_PARAM_NAME,
             'limit' => ToolbarModel::LIMIT_PARAM_NAME,
             'modeDefault' => $defaultMode,
-            'directionDefault' => \Magento\Catalog\Helper\Product\ProductList::DEFAULT_SORT_DIRECTION,
+            'directionDefault' => $this->_direction ?: ProductList::DEFAULT_SORT_DIRECTION,
             'orderDefault' => $this->_productListHelper->getDefaultSortField(),
             'limitDefault' => $this->_productListHelper->getDefaultLimitPerPageValue($defaultMode),
             'url' => $this->getPagerUrl(),
diff --git a/app/code/Magento/Catalog/Block/Product/ProductList/Upsell.php b/app/code/Magento/Catalog/Block/Product/ProductList/Upsell.php
index 882440fc867c8234166e464b82f542d3857e42c0..ee347e72e7dbb0cec7d2948eda9a0761b6f255f7 100644
--- a/app/code/Magento/Catalog/Block/Product/ProductList/Upsell.php
+++ b/app/code/Magento/Catalog/Block/Product/ProductList/Upsell.php
@@ -8,7 +8,7 @@
 
 namespace Magento\Catalog\Block\Product\ProductList;
 
-use Magento\Catalog\Model\Resource\Product\Collection;
+use Magento\Catalog\Model\ResourceModel\Product\Collection;
 use Magento\Framework\View\Element\AbstractBlock;
 
 /**
@@ -55,7 +55,7 @@ class Upsell extends \Magento\Catalog\Block\Product\AbstractProduct implements \
     /**
      * Checkout cart
      *
-     * @var \Magento\Checkout\Model\Resource\Cart
+     * @var \Magento\Checkout\Model\ResourceModel\Cart
      */
     protected $_checkoutCart;
 
@@ -66,7 +66,7 @@ class Upsell extends \Magento\Catalog\Block\Product\AbstractProduct implements \
 
     /**
      * @param \Magento\Catalog\Block\Product\Context $context
-     * @param \Magento\Checkout\Model\Resource\Cart $checkoutCart
+     * @param \Magento\Checkout\Model\ResourceModel\Cart $checkoutCart
      * @param \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility
      * @param \Magento\Checkout\Model\Session $checkoutSession
      * @param \Magento\Framework\Module\Manager $moduleManager
@@ -74,7 +74,7 @@ class Upsell extends \Magento\Catalog\Block\Product\AbstractProduct implements \
      */
     public function __construct(
         \Magento\Catalog\Block\Product\Context $context,
-        \Magento\Checkout\Model\Resource\Cart $checkoutCart,
+        \Magento\Checkout\Model\ResourceModel\Cart $checkoutCart,
         \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
         \Magento\Checkout\Model\Session $checkoutSession,
         \Magento\Framework\Module\Manager $moduleManager,
diff --git a/app/code/Magento/Catalog/Block/Product/TemplateSelector.php b/app/code/Magento/Catalog/Block/Product/TemplateSelector.php
index d71f272eed65ff79312c5545a32c3542c451a822..0fa415acf082b57e582d31793fa67e84a9a73006 100644
--- a/app/code/Magento/Catalog/Block/Product/TemplateSelector.php
+++ b/app/code/Magento/Catalog/Block/Product/TemplateSelector.php
@@ -22,29 +22,29 @@ class TemplateSelector extends \Magento\Framework\View\Element\Template
     /**
      * Set collection factory
      *
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory
      */
     protected $_setColFactory;
 
     /**
      * Catalog resource helper
      *
-     * @var \Magento\Catalog\Model\Resource\Helper
+     * @var \Magento\Catalog\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setColFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setColFactory
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setColFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setColFactory,
         \Magento\Framework\Registry $registry,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         array $data = []
     ) {
         $this->_setColFactory = $setColFactory;
@@ -64,7 +64,7 @@ class TemplateSelector extends \Magento\Framework\View\Element\Template
         $product = $this->_coreRegistry->registry('product');
         $entityType = $product->getResource()->getEntityType();
         $labelPart = $this->_resourceHelper->addLikeEscape($labelPart, ['position' => 'any']);
-        /** @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection $collection */
+        /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection $collection */
         $collection = $this->_setColFactory->create();
         $collection->setEntityTypeFilter(
             $entityType->getId()
@@ -79,7 +79,7 @@ class TemplateSelector extends \Magento\Framework\View\Element\Template
             'label'
         )->setOrder(
             'attribute_set_name',
-            \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection::SORT_ORDER_ASC
+            \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection::SORT_ORDER_ASC
         );
         return $collection->getData();
     }
diff --git a/app/code/Magento/Catalog/Block/Product/View/Gallery.php b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
index e7817243ac2a70c68d05dacb7b020cfc07e29c78..484dbb2cd646e9e4c42e382e30527c4f82d0336b 100644
--- a/app/code/Magento/Catalog/Block/Product/View/Gallery.php
+++ b/app/code/Magento/Catalog/Block/Product/View/Gallery.php
@@ -12,6 +12,7 @@
 namespace Magento\Catalog\Block\Product\View;
 
 use Magento\Framework\Data\Collection;
+use Magento\Framework\Json\EncoderInterface;
 use Magento\Catalog\Helper\Image;
 
 class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
@@ -21,6 +22,27 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
      */
     protected $configView;
 
+    /**
+     * @var \Magento\Framework\Json\EncoderInterface
+     */
+    protected $jsonEncoder;
+
+    /**
+     * @param \Magento\Catalog\Block\Product\Context $context
+     * @param \Magento\Framework\Stdlib\ArrayUtils $arrayUtils
+     * @param EncoderInterface $jsonEncoder
+     * @param array $data
+     */
+    public function __construct(
+        \Magento\Catalog\Block\Product\Context $context,
+        \Magento\Framework\Stdlib\ArrayUtils $arrayUtils,
+        EncoderInterface $jsonEncoder,
+        array $data = []
+    ) {
+        $this->jsonEncoder = $jsonEncoder;
+        parent::__construct($context, $arrayUtils, $data);
+    }
+
     /**
      * Retrieve collection of gallery images
      *
@@ -42,12 +64,14 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
                 $image->setData(
                     'medium_image_url',
                     $this->_imageHelper->init($product, 'product_page_image_medium')
+                        ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
                         ->setImageFile($image->getFile())
                         ->getUrl()
                 );
                 $image->setData(
                     'large_image_url',
                     $this->_imageHelper->init($product, 'product_page_image_large')
+                        ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
                         ->setImageFile($image->getFile())
                         ->getUrl()
                 );
@@ -57,6 +81,26 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
         return $images;
     }
 
+    /**
+     * Return magnifier options
+     *
+     * @return string
+     */
+    public function getMagnifier()
+    {
+        return $this->jsonEncoder->encode($this->getVar('magnifier'));
+    }
+
+    /**
+     * Return breakpoints options
+     *
+     * @return string
+     */
+    public function getBreakpoints()
+    {
+        return $this->jsonEncoder->encode($this->getVar('breakpoints'));
+    }
+
     /**
      * Retrieve product images in JSON format
      *
@@ -69,12 +113,22 @@ class Gallery extends \Magento\Catalog\Block\Product\View\AbstractView
             $imagesItems[] = [
                 'thumb' => $image->getData('small_image_url'),
                 'img' => $image->getData('medium_image_url'),
-                'original' => $image->getData('large_image_url'),
+                'full' => $image->getData('large_image_url'),
                 'caption' => $image->getLabel(),
                 'position' => $image->getPosition(),
                 'isMain' => $this->isMainImage($image),
             ];
         }
+        if (empty($imagesItems)) {
+            $imagesItems[] = [
+                'thumb' => $this->_imageHelper->getDefaultPlaceholderUrl('thumbnail'),
+                'img' => $this->_imageHelper->getDefaultPlaceholderUrl('image'),
+                'full' => $this->_imageHelper->getDefaultPlaceholderUrl('image'),
+                'caption' => '',
+                'position' => '0',
+                'isMain' => true,
+            ];
+        }
         return json_encode($imagesItems);
     }
 
diff --git a/app/code/Magento/Catalog/Block/Product/Widget/Html/Pager.php b/app/code/Magento/Catalog/Block/Product/Widget/Html/Pager.php
index 7585d4e39f7b781d1aac6e5d4069980c94e52b01..f069f70bad9af87601bea5423192162b3dbba763 100644
--- a/app/code/Magento/Catalog/Block/Product/Widget/Html/Pager.php
+++ b/app/code/Magento/Catalog/Block/Product/Widget/Html/Pager.php
@@ -98,7 +98,7 @@ class Pager extends \Magento\Theme\Block\Html\Pager
     /**
      * Connect collection to paging
      *
-     * @param   \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection $collection
+     * @param   \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection $collection
      * @return  \Magento\Catalog\Block\Product\Widget\Html\Pager
      */
     public function setCollection($collection)
diff --git a/app/code/Magento/Catalog/Block/Product/Widget/NewWidget.php b/app/code/Magento/Catalog/Block/Product/Widget/NewWidget.php
index e4f7573a491ba320494d06cc57b26239c0aa95eb..88d487aea32c98e1f15c8129d288006acacafb13 100644
--- a/app/code/Magento/Catalog/Block/Product/Widget/NewWidget.php
+++ b/app/code/Magento/Catalog/Block/Product/Widget/NewWidget.php
@@ -45,7 +45,7 @@ class NewWidget extends \Magento\Catalog\Block\Product\NewProduct implements \Ma
     /**
      * Product collection initialize process
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Collection|Object|\Magento\Framework\Data\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection|Object|\Magento\Framework\Data\Collection
      */
     protected function _getProductCollection()
     {
@@ -65,11 +65,11 @@ class NewWidget extends \Magento\Catalog\Block\Product\NewProduct implements \Ma
     /**
      * Prepare collection for recent product list
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Collection|Object|\Magento\Framework\Data\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection|Object|\Magento\Framework\Data\Collection
      */
     protected function _getRecentlyAddedProductsCollection()
     {
-        /** @var $collection \Magento\Catalog\Model\Resource\Product\Collection */
+        /** @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
         $collection = $this->_productCollectionFactory->create();
         $collection->setVisibility($this->_catalogProductVisibility->getVisibleInCatalogIds());
 
diff --git a/app/code/Magento/Catalog/Block/Rss/Category.php b/app/code/Magento/Catalog/Block/Rss/Category.php
index 28e37e60989353775c754530111cba3ef9cc27b7..ceed5a21bb74712bb4987579921b8ae7a1ca390b 100644
--- a/app/code/Magento/Catalog/Block/Rss/Category.php
+++ b/app/code/Magento/Catalog/Block/Rss/Category.php
@@ -234,7 +234,7 @@ class Category extends \Magento\Framework\View\Element\AbstractBlock implements
                 $nodeIds[] = $node->getId();
             }
 
-            /* @var $collection \Magento\Catalog\Model\Resource\Category\Collection */
+            /* @var $collection \Magento\Catalog\Model\ResourceModel\Category\Collection */
             $collection = $category->getResourceCollection();
             $collection->addIdFilter($nodeIds)
                 ->addAttributeToSelect('url_key')
diff --git a/app/code/Magento/Catalog/Block/Widget/Link.php b/app/code/Magento/Catalog/Block/Widget/Link.php
index b9910e70b769a029f53dbe3bb709ab1f14d61c56..ab887a5839be369b41c8befa8e98214699a1cf23 100644
--- a/app/code/Magento/Catalog/Block/Widget/Link.php
+++ b/app/code/Magento/Catalog/Block/Widget/Link.php
@@ -19,7 +19,7 @@ class Link extends \Magento\Framework\View\Element\Html\Link implements \Magento
 {
     /**
      * Entity model name which must be used to retrieve entity specific data.
-     * @var null|\Magento\Catalog\Model\Resource\AbstractResource
+     * @var null|\Magento\Catalog\Model\ResourceModel\AbstractResource
      */
     protected $_entityResource = null;
 
@@ -47,13 +47,13 @@ class Link extends \Magento\Framework\View\Element\Html\Link implements \Magento
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
      * @param UrlFinderInterface $urlFinder
-     * @param \Magento\Catalog\Model\Resource\AbstractResource $entityResource
+     * @param \Magento\Catalog\Model\ResourceModel\AbstractResource $entityResource
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
         UrlFinderInterface $urlFinder,
-        \Magento\Catalog\Model\Resource\AbstractResource $entityResource = null,
+        \Magento\Catalog\Model\ResourceModel\AbstractResource $entityResource = null,
         array $data = []
     ) {
         parent::__construct($context, $data);
diff --git a/app/code/Magento/Catalog/Console/Command/ImagesResizeCommand.php b/app/code/Magento/Catalog/Console/Command/ImagesResizeCommand.php
index abf223c610e6f14bde0ea374c47e6dfbb3ff0bc3..186e3b1f75c56744f78d1265b5487ef17dba5c2d 100644
--- a/app/code/Magento/Catalog/Console/Command/ImagesResizeCommand.php
+++ b/app/code/Magento/Catalog/Console/Command/ImagesResizeCommand.php
@@ -9,8 +9,8 @@ use Magento\Catalog\Api\ProductRepositoryInterface;
 use Magento\Catalog\Model\Product;
 use Magento\Catalog\Model\Product\Image\Cache as ImageCache;
 use Magento\Catalog\Model\Product\Image\CacheFactory as ImageCacheFactory;
-use Magento\Catalog\Model\Resource\Product\Collection as ProductCollection;
-use Magento\Catalog\Model\Resource\Product\CollectionFactory as ProductCollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\Collection as ProductCollection;
+use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;
 use Magento\Framework\App\State as AppState;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Symfony\Component\Console\Command\Command;
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php
index 28d84127205d07aa17a5f1e7c816d578c8116152..29f30ad573f032622b55758995f48b01d701e264 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Action/Attribute/Edit.php
@@ -7,7 +7,7 @@
 namespace Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute;
 
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Catalog\Model\Resource\Product\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
 
 class Edit extends \Magento\Catalog\Controller\Adminhtml\Product\Action\Attribute
 {
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/AddAttributeToTemplate.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/AddAttributeToTemplate.php
index a26862db4d288e309be5ca39a4be9332bf66eb33..7d337411b0a234f947c20f243bce508de82a8481 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/AddAttributeToTemplate.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/AddAttributeToTemplate.php
@@ -43,9 +43,9 @@ class AddAttributeToTemplate extends \Magento\Catalog\Controller\Adminhtml\Produ
             $attributeSet = $this->_objectManager->create('Magento\Eav\Model\Entity\Attribute\Set')
                 ->load($request->getParam('template_id'));
 
-            /** @var \Magento\Eav\Model\Resource\Entity\Attribute\Group\Collection $attributeGroupCollection */
+            /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\Collection $attributeGroupCollection */
             $attributeGroupCollection = $this->_objectManager->get(
-                'Magento\Eav\Model\Resource\Entity\Attribute\Group\Collection'
+                'Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\Collection'
             );
             $attributeGroupCollection->setAttributeSetFilter($attributeSet->getId());
             $attributeGroupCollection->addFilter('attribute_group_code', $request->getParam('group'));
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Delete.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Delete.php
index 9df8254d5e69b458c50ba6b74bf762335b1b8f8e..aa99a78945e65f2e10b31ddfa1299b1fff2e5656 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Delete.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Delete.php
@@ -16,7 +16,7 @@ class Delete extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
         $id = $this->getRequest()->getParam('attribute_id');
         $resultRedirect = $this->resultRedirectFactory->create();
         if ($id) {
-            $model = $this->_objectManager->create('Magento\Catalog\Model\Resource\Eav\Attribute');
+            $model = $this->_objectManager->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
 
             // entity type check
             $model->load($id);
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Edit.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Edit.php
index 8aa19c8c91110e68601871eaf59e174bebb0abc7..bfe598b3d9b37de359ab4cf2a15d1e48bf766beb 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Edit.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Edit.php
@@ -15,9 +15,9 @@ class Edit extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
     public function execute()
     {
         $id = $this->getRequest()->getParam('attribute_id');
-        /** @var $model \Magento\Catalog\Model\Resource\Eav\Attribute */
+        /** @var $model \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
         $model = $this->_objectManager->create(
-            'Magento\Catalog\Model\Resource\Eav\Attribute'
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
         )->setEntityTypeId(
             $this->_entityTypeId
         );
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php
index 66ad7b8f3d1dc0647fbd9ab209272726f84d6a5c..2d57b6148e5532fdd1fe15415c694c05452084f4 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Save.php
@@ -32,7 +32,7 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
     protected $productHelper;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Eav\AttributeFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory
      */
     protected $attributeFactory;
 
@@ -42,7 +42,7 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
     protected $validatorFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory
      */
     protected $groupCollectionFactory;
 
@@ -51,9 +51,9 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
      * @param \Magento\Framework\Cache\FrontendInterface $attributeLabelCache
      * @param \Magento\Framework\Registry $coreRegistry
      * @param \Magento\Catalog\Model\Product\AttributeSet\BuildFactory $buildFactory
-     * @param \Magento\Catalog\Model\Resource\Eav\AttributeFactory $attributeFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory $attributeFactory
      * @param \Magento\Eav\Model\Adminhtml\System\Config\Source\Inputtype\ValidatorFactory $validatorFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory $groupCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $groupCollectionFactory
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Catalog\Helper\Product $productHelper
      * @param \Magento\Framework\View\Result\PageFactory $resultPageFactory
@@ -65,9 +65,9 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
         \Magento\Framework\Registry $coreRegistry,
         \Magento\Framework\View\Result\PageFactory $resultPageFactory,
         \Magento\Catalog\Model\Product\AttributeSet\BuildFactory $buildFactory,
-        \Magento\Catalog\Model\Resource\Eav\AttributeFactory $attributeFactory,
+        \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory $attributeFactory,
         \Magento\Eav\Model\Adminhtml\System\Config\Source\Inputtype\ValidatorFactory $validatorFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory $groupCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $groupCollectionFactory,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Catalog\Helper\Product $productHelper
     ) {
@@ -117,7 +117,7 @@ class Save extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
             }
 
             $redirectBack = $this->getRequest()->getParam('back', false);
-            /* @var $model \Magento\Catalog\Model\Resource\Eav\Attribute */
+            /* @var $model \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
             $model = $this->attributeFactory->create();
 
             $attributeId = $this->getRequest()->getParam('attribute_id');
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php
index 7b995dbd2a13e0d8dda66ec6ae16a0b80684c097..bb870c3f8ef06db3a297831bf26eda8cdb758a14 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/Attribute/Validate.php
@@ -54,7 +54,7 @@ class Validate extends \Magento\Catalog\Controller\Adminhtml\Product\Attribute
         $attributeCode = $attributeCode ?: $this->generateCode($frontendLabel[0]);
         $attributeId = $this->getRequest()->getParam('attribute_id');
         $attribute = $this->_objectManager->create(
-            'Magento\Catalog\Model\Resource\Eav\Attribute'
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
         )->loadByCode(
             $this->_entityTypeId,
             $attributeCode
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassDelete.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassDelete.php
index 945e80c93e44c469d89b0f9b39eebed55ea08463..831fb79fc5f46e3318510609b21d7f1e91e7dc77 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassDelete.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassDelete.php
@@ -10,7 +10,7 @@ use Magento\Framework\Controller\ResultFactory;
 use Magento\Catalog\Controller\Adminhtml\Product\Builder;
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Catalog\Model\Resource\Product\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
 
 class MassDelete extends \Magento\Catalog\Controller\Adminhtml\Product
 {
diff --git a/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php b/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php
index b88183cddbda18ec0678e58774756813d7c0d33b..04f37fda61f14339ecb128f17306e9953943519a 100644
--- a/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php
+++ b/app/code/Magento/Catalog/Controller/Adminhtml/Product/MassStatus.php
@@ -10,7 +10,7 @@ use Magento\Backend\App\Action;
 use Magento\Catalog\Controller\Adminhtml\Product;
 use Magento\Framework\Controller\ResultFactory;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Catalog\Model\Resource\Product\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
 
 class MassStatus extends \Magento\Catalog\Controller\Adminhtml\Product
 {
diff --git a/app/code/Magento/Catalog/Controller/Product/Compare.php b/app/code/Magento/Catalog/Controller/Product/Compare.php
index 625dbc5c67da52f92154d55e3acc856d3965e743..f428acc43630d5de69051ff799d53b9bbdb7e522 100644
--- a/app/code/Magento/Catalog/Controller/Product/Compare.php
+++ b/app/code/Magento/Catalog/Controller/Product/Compare.php
@@ -55,7 +55,7 @@ abstract class Compare extends \Magento\Framework\App\Action\Action
     /**
      * Item collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory
      */
     protected $_itemCollectionFactory;
 
@@ -91,7 +91,7 @@ abstract class Compare extends \Magento\Framework\App\Action\Action
      *
      * @param \Magento\Framework\App\Action\Context $context
      * @param \Magento\Catalog\Model\Product\Compare\ItemFactory $compareItemFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory $itemCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory $itemCollectionFactory
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Customer\Model\Visitor $customerVisitor
      * @param \Magento\Catalog\Model\Product\Compare\ListCompare $catalogProductCompareList
@@ -105,7 +105,7 @@ abstract class Compare extends \Magento\Framework\App\Action\Action
     public function __construct(
         \Magento\Framework\App\Action\Context $context,
         \Magento\Catalog\Model\Product\Compare\ItemFactory $compareItemFactory,
-        \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory $itemCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory $itemCollectionFactory,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Customer\Model\Visitor $customerVisitor,
         \Magento\Catalog\Model\Product\Compare\ListCompare $catalogProductCompareList,
diff --git a/app/code/Magento/Catalog/Controller/Product/Compare/Clear.php b/app/code/Magento/Catalog/Controller/Product/Compare/Clear.php
index d2f9a64e954e5b72dbf3f50e232c2345212014c0..40525ddb90fbaca8d2f8e22b0d857295ca4fe76c 100644
--- a/app/code/Magento/Catalog/Controller/Product/Compare/Clear.php
+++ b/app/code/Magento/Catalog/Controller/Product/Compare/Clear.php
@@ -17,7 +17,7 @@ class Clear extends \Magento\Catalog\Controller\Product\Compare
      */
     public function execute()
     {
-        /** @var \Magento\Catalog\Model\Resource\Product\Compare\Item\Collection $items */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\Collection $items */
         $items = $this->_itemCollectionFactory->create();
 
         if ($this->_customerSession->isLoggedIn()) {
diff --git a/app/code/Magento/Catalog/Controller/Product/Compare/Index.php b/app/code/Magento/Catalog/Controller/Product/Compare/Index.php
index 954437bf09576e67e3029cac1ef059f25814b083..a8e79afa1c047271497454f371253374fd356d3a 100644
--- a/app/code/Magento/Catalog/Controller/Product/Compare/Index.php
+++ b/app/code/Magento/Catalog/Controller/Product/Compare/Index.php
@@ -23,7 +23,7 @@ class Index extends \Magento\Catalog\Controller\Product\Compare
     /**
      * @param \Magento\Framework\App\Action\Context $context
      * @param \Magento\Catalog\Model\Product\Compare\ItemFactory $compareItemFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory $itemCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory $itemCollectionFactory
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Customer\Model\Visitor $customerVisitor
      * @param \Magento\Catalog\Model\Product\Compare\ListCompare $catalogProductCompareList
@@ -39,7 +39,7 @@ class Index extends \Magento\Catalog\Controller\Product\Compare
     public function __construct(
         \Magento\Framework\App\Action\Context $context,
         \Magento\Catalog\Model\Product\Compare\ItemFactory $compareItemFactory,
-        \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory $itemCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory $itemCollectionFactory,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Customer\Model\Visitor $customerVisitor,
         \Magento\Catalog\Model\Product\Compare\ListCompare $catalogProductCompareList,
diff --git a/app/code/Magento/Catalog/Cron/RefreshSpecialPrices.php b/app/code/Magento/Catalog/Cron/RefreshSpecialPrices.php
index c887c4f13aa83617965cedb532962c548e0404ef..94130a146efab3ea4ec29d0f9439a9c4c981edc3 100644
--- a/app/code/Magento/Catalog/Cron/RefreshSpecialPrices.php
+++ b/app/code/Magento/Catalog/Cron/RefreshSpecialPrices.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Cron;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class RefreshSpecialPrices
 {
@@ -46,7 +46,7 @@ class RefreshSpecialPrices
 
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Eav\Model\Config $eavConfig
@@ -54,7 +54,7 @@ class RefreshSpecialPrices
      */
     public function __construct(
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        Resource $resource,
+        ResourceConnection $resource,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Eav\Model\Config $eavConfig,
diff --git a/app/code/Magento/Catalog/Helper/Category.php b/app/code/Magento/Catalog/Helper/Category.php
index 271a320a36e9a73050a94e98537c9e243cf1ab70..6665eb81694bbb109ca50f73173c181ecc4e68bb 100644
--- a/app/code/Magento/Catalog/Helper/Category.php
+++ b/app/code/Magento/Catalog/Helper/Category.php
@@ -82,7 +82,8 @@ class Category extends AbstractHelper
      * @param bool|string $sorted
      * @param bool $asCollection
      * @param bool $toLoad
-     * @return \Magento\Framework\Data\Tree\Node\Collection|\Magento\Catalog\Model\Resource\Category\Collection|array
+     * @return \Magento\Framework\Data\Tree\Node\Collection or
+     * \Magento\Catalog\Model\ResourceModel\Category\Collection or array
      */
     public function getStoreCategories($sorted = false, $asCollection = false, $toLoad = true)
     {
diff --git a/app/code/Magento/Catalog/Helper/Image.php b/app/code/Magento/Catalog/Helper/Image.php
index c4ceb6bea1f0dc935d8f68ace714e707d81ce6ae..a847e8c42454a69984dff90c330a8fa39848f66e 100644
--- a/app/code/Magento/Catalog/Helper/Image.php
+++ b/app/code/Magento/Catalog/Helper/Image.php
@@ -436,11 +436,13 @@ class Image extends AbstractHelper
      */
     public function getPlaceholder($placeholder = null)
     {
-        if (!$this->_placeholder) {
-            $placeholder = $placeholder ? : $this->_getModel()->getDestinationSubdir();
-            $this->_placeholder = 'Magento_Catalog::images/product/placeholder/' . $placeholder . '.jpg';
+        if ($placeholder) {
+            $placeholderFullPath = 'Magento_Catalog::images/product/placeholder/' . $placeholder . '.jpg';
+        } else {
+            $placeholderFullPath = $this->_placeholder
+                ?: 'Magento_Catalog::images/product/placeholder/' . $this->_getModel()->getDestinationSubdir() . '.jpg';
         }
-        return $this->_placeholder;
+        return $placeholderFullPath;
     }
 
     /**
@@ -816,7 +818,7 @@ class Image extends AbstractHelper
      */
     public function getHeight()
     {
-        return $this->getAttribute('height') ? : $this->getAttribute('width');
+        return $this->getAttribute('height') ?: $this->getAttribute('width');
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Helper/Product/Compare.php b/app/code/Magento/Catalog/Helper/Product/Compare.php
index 50a2dbefecbcabdac53e4a55c1ebbee951a2abaf..212b2eca9e3aa0e5dfee7b898296f8075db92629 100644
--- a/app/code/Magento/Catalog/Helper/Product/Compare.php
+++ b/app/code/Magento/Catalog/Helper/Product/Compare.php
@@ -6,7 +6,7 @@
 namespace Magento\Catalog\Helper\Product;
 
 use Magento\Catalog\Model\Product;
-use Magento\Catalog\Model\Resource\Product\Compare\Item\Collection;
+use Magento\Catalog\Model\ResourceModel\Product\Compare\Item\Collection;
 
 /**
  * Catalog Product Compare Helper
@@ -75,7 +75,7 @@ class Compare extends \Magento\Framework\Url\Helper\Data
     /**
      * Product compare item collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory
      */
     protected $_itemCollectionFactory;
 
@@ -100,7 +100,7 @@ class Compare extends \Magento\Framework\Url\Helper\Data
     /**
      * @param \Magento\Framework\App\Helper\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory $itemCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory $itemCollectionFactory
      * @param \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility
      * @param \Magento\Customer\Model\Visitor $customerVisitor
      * @param \Magento\Customer\Model\Session $customerSession
@@ -113,7 +113,7 @@ class Compare extends \Magento\Framework\Url\Helper\Data
     public function __construct(
         \Magento\Framework\App\Helper\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory $itemCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory $itemCollectionFactory,
         \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
         \Magento\Customer\Model\Visitor $customerVisitor,
         \Magento\Customer\Model\Session $customerSession,
diff --git a/app/code/Magento/Catalog/Helper/Product/Edit/Action/Attribute.php b/app/code/Magento/Catalog/Helper/Product/Edit/Action/Attribute.php
index 5c0ff909092a79132e3ab5706942791063f74ecf..5e158e27d51e2d86d1379757fe211a6ac75d5877 100644
--- a/app/code/Magento/Catalog/Helper/Product/Edit/Action/Attribute.php
+++ b/app/code/Magento/Catalog/Helper/Product/Edit/Action/Attribute.php
@@ -18,14 +18,14 @@ class Attribute extends \Magento\Backend\Helper\Data
     /**
      * Selected products for mass-update
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     protected $_products;
 
     /**
      * Array of same attributes for selected products
      *
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
      */
     protected $_attributes;
 
@@ -37,7 +37,7 @@ class Attribute extends \Magento\Backend\Helper\Data
     protected $_excludedAttributes = ['url_key'];
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_productsFactory;
 
@@ -66,7 +66,7 @@ class Attribute extends \Magento\Backend\Helper\Data
      * @param \Magento\Framework\Math\Random $mathRandom
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Backend\Model\Session $session
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productsFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productsFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -80,7 +80,7 @@ class Attribute extends \Magento\Backend\Helper\Data
         \Magento\Framework\Math\Random $mathRandom,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Backend\Model\Session $session,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productsFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productsFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager
     ) {
         $this->_eavConfig = $eavConfig;
@@ -94,7 +94,7 @@ class Attribute extends \Magento\Backend\Helper\Data
      * Return product collection with selected product filter
      * Product collection didn't load
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     public function getProducts()
     {
@@ -160,7 +160,7 @@ class Attribute extends \Magento\Backend\Helper\Data
     /**
      * Return collection of same attributes for selected products without unique
      *
-     * @return \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+     * @return \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
      */
     public function getAttributes()
     {
diff --git a/app/code/Magento/Catalog/Helper/Product/Flat/Indexer.php b/app/code/Magento/Catalog/Helper/Product/Flat/Indexer.php
index 9e01032468edb88ac83bec2d46357d661e47dd9e..a54b13b3d6fbc9742cfc1f9571bb9981b11c6849 100644
--- a/app/code/Magento/Catalog/Helper/Product/Flat/Indexer.php
+++ b/app/code/Magento/Catalog/Helper/Product/Flat/Indexer.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Helper\Product\Flat;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Catalog Product Flat Indexer Helper
@@ -28,7 +28,7 @@ class Indexer extends \Magento\Framework\App\Helper\AbstractHelper
     /**
      * Resource instance
      *
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
@@ -81,7 +81,7 @@ class Indexer extends \Magento\Framework\App\Helper\AbstractHelper
     protected $_entityTypeId;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Config
+     * @var \Magento\Catalog\Model\ResourceModel\Config
      */
     protected $_catalogConfig;
 
@@ -93,7 +93,7 @@ class Indexer extends \Magento\Framework\App\Helper\AbstractHelper
     /**
      * Config factory
      *
-     * @var \Magento\Catalog\Model\Resource\ConfigFactory
+     * @var \Magento\Catalog\Model\ResourceModel\ConfigFactory
      */
     protected $_configFactory;
 
@@ -124,10 +124,10 @@ class Indexer extends \Magento\Framework\App\Helper\AbstractHelper
 
     /**
      * @param \Magento\Framework\App\Helper\Context $context
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Catalog\Model\Attribute\Config $attributeConfig
-     * @param \Magento\Catalog\Model\Resource\ConfigFactory $configFactory
+     * @param \Magento\Catalog\Model\ResourceModel\ConfigFactory $configFactory
      * @param \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Mview\View\Changelog $changelog
@@ -138,10 +138,10 @@ class Indexer extends \Magento\Framework\App\Helper\AbstractHelper
      */
     public function __construct(
         \Magento\Framework\App\Helper\Context $context,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Catalog\Model\Attribute\Config $attributeConfig,
-        \Magento\Catalog\Model\Resource\ConfigFactory $configFactory,
+        \Magento\Catalog\Model\ResourceModel\ConfigFactory $configFactory,
         \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Mview\View\Changelog $changelog,
@@ -431,7 +431,7 @@ class Indexer extends \Magento\Framework\App\Helper\AbstractHelper
     {
         $eavAttributes = [];
         $flatColumnsList = $this->getFlatColumns();
-        /** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+        /** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
         foreach ($attributes as $attribute) {
             $eavTable = $attribute->getBackend()->getTable();
             $attributeCode = $attribute->getAttributeCode();
diff --git a/app/code/Magento/Catalog/Model/AbstractModel.php b/app/code/Magento/Catalog/Model/AbstractModel.php
index 14fbf36301511335c91c0f784a523030fd29945e..6b4d310b8293b443ca65cc21818a8fe0f03c1fbe 100644
--- a/app/code/Magento/Catalog/Model/AbstractModel.php
+++ b/app/code/Magento/Catalog/Model/AbstractModel.php
@@ -65,7 +65,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractExtensible
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -75,7 +75,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractExtensible
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -215,7 +215,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractExtensible
     /**
      * Get collection instance
      *
-     * @return \Magento\Catalog\Model\Resource\Collection\AbstractCollection
+     * @return \Magento\Catalog\Model\ResourceModel\Collection\AbstractCollection
      */
     public function getResourceCollection()
     {
diff --git a/app/code/Magento/Catalog/Model/Attribute/Source/Scopes.php b/app/code/Magento/Catalog/Model/Attribute/Source/Scopes.php
index 99fb858de767b28333e3e0f9c084efe1dabf9f55..f471a47432063fc2e2dfe56031d97266a6fd01cd 100644
--- a/app/code/Magento/Catalog/Model/Attribute/Source/Scopes.php
+++ b/app/code/Magento/Catalog/Model/Attribute/Source/Scopes.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Model\Attribute\Source;
 
-use \Magento\Catalog\Model\Resource\Eav\Attribute;
+use \Magento\Catalog\Model\ResourceModel\Eav\Attribute;
 
 class Scopes implements \Magento\Framework\Data\OptionSourceInterface
 {
diff --git a/app/code/Magento/Catalog/Model/Category.php b/app/code/Magento/Catalog/Model/Category.php
index 7c745801c12c9106db67885d5c1c97728253356f..b95b1e9da7424d3806837b07a89467186cc7a7fd 100644
--- a/app/code/Magento/Catalog/Model/Category.php
+++ b/app/code/Magento/Catalog/Model/Category.php
@@ -160,7 +160,7 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Category tree model
      *
-     * @var \Magento\Catalog\Model\Resource\Category\Tree
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Tree
      */
     protected $_treeModel = null;
 
@@ -181,21 +181,21 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Product collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_productCollectionFactory;
 
     /**
      * Store collection factory
      *
-     * @var \Magento\Store\Model\Resource\Store\CollectionFactory
+     * @var \Magento\Store\Model\ResourceModel\Store\CollectionFactory
      */
     protected $_storeCollectionFactory;
 
     /**
      * Category tree factory
      *
-     * @var \Magento\Catalog\Model\Resource\Category\TreeFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Category\TreeFactory
      */
     protected $_categoryTreeFactory;
 
@@ -230,11 +230,11 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Api\CategoryAttributeRepositoryInterface $metadataService
-     * @param Resource\Category\Tree $categoryTreeResource
-     * @param Resource\Category\TreeFactory $categoryTreeFactory
-     * @param \Magento\Store\Model\Resource\Store\CollectionFactory $storeCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTreeResource
+     * @param \Magento\Catalog\Model\ResourceModel\Category\TreeFactory $categoryTreeFactory
+     * @param \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeCollectionFactory
      * @param \Magento\Framework\UrlInterface $url
-     * @param Resource\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
      * @param Config $catalogConfig
      * @param \Magento\Framework\Filter\FilterManager $filter
      * @param Indexer\Category\Flat\State $flatState
@@ -242,7 +242,7 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
      * @param UrlFinderInterface $urlFinder
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
      * @param CategoryRepositoryInterface $categoryRepository
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -254,11 +254,11 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Api\CategoryAttributeRepositoryInterface $metadataService,
-        \Magento\Catalog\Model\Resource\Category\Tree $categoryTreeResource,
-        \Magento\Catalog\Model\Resource\Category\TreeFactory $categoryTreeFactory,
-        \Magento\Store\Model\Resource\Store\CollectionFactory $storeCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTreeResource,
+        \Magento\Catalog\Model\ResourceModel\Category\TreeFactory $categoryTreeFactory,
+        \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeCollectionFactory,
         \Magento\Framework\UrlInterface $url,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
         \Magento\Catalog\Model\Config $catalogConfig,
         \Magento\Framework\Filter\FilterManager $filter,
         Indexer\Category\Flat\State $flatState,
@@ -266,7 +266,7 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
         UrlFinderInterface $urlFinder,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
         CategoryRepositoryInterface $categoryRepository,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -304,10 +304,10 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
     {
         // If Flat Index enabled then use it but only on frontend
         if ($this->flatState->isAvailable()) {
-            $this->_init('Magento\Catalog\Model\Resource\Category\Flat');
+            $this->_init('Magento\Catalog\Model\ResourceModel\Category\Flat');
             $this->_useFlatResource = true;
         } else {
-            $this->_init('Magento\Catalog\Model\Resource\Category');
+            $this->_init('Magento\Catalog\Model\ResourceModel\Category');
         }
     }
 
@@ -347,7 +347,7 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Retrieve category tree model
      *
-     * @return \Magento\Catalog\Model\Resource\Category\Tree
+     * @return \Magento\Catalog\Model\ResourceModel\Category\Tree
      */
     public function getTreeModel()
     {
@@ -357,7 +357,7 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Enter description here...
      *
-     * @return \Magento\Catalog\Model\Resource\Category\Tree
+     * @return \Magento\Catalog\Model\ResourceModel\Category\Tree
      */
     public function getTreeModelInstance()
     {
@@ -940,7 +940,7 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
      * @param bool $sorted
      * @param bool $asCollection
      * @param bool $toLoad
-     * @return \Magento\Framework\Data\Tree\Node\Collection|\Magento\Catalog\Model\Resource\Category\Collection
+     * @return \Magento\Framework\Data\Tree\Node\Collection|\Magento\Catalog\Model\ResourceModel\Category\Collection
      */
     public function getCategories($parent, $recursionLevel = 0, $sorted = false, $asCollection = false, $toLoad = true)
     {
@@ -961,7 +961,7 @@ class Category extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Return children categories of current category
      *
-     * @return \Magento\Catalog\Model\Resource\Category\Collection|\Magento\Catalog\Model\Category[]
+     * @return \Magento\Catalog\Model\ResourceModel\Category\Collection|\Magento\Catalog\Model\Category[]
      */
     public function getChildrenCategories()
     {
diff --git a/app/code/Magento/Catalog/Model/Category/Attribute/Source/Page.php b/app/code/Magento/Catalog/Model/Category/Attribute/Source/Page.php
index 3cff2cc0941a3b7b0ee6febfa0c6fc4ebb3ca88b..2359e45ab44b49e90bfa83730d56edfca1d97d5c 100644
--- a/app/code/Magento/Catalog/Model/Category/Attribute/Source/Page.php
+++ b/app/code/Magento/Catalog/Model/Category/Attribute/Source/Page.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Model\Category\Attribute\Source;
 
-use Magento\Cms\Model\Resource\Block\CollectionFactory;
+use Magento\Cms\Model\ResourceModel\Block\CollectionFactory;
 
 /**
  * Catalog category landing page attribute source
diff --git a/app/code/Magento/Catalog/Model/Category/Tree.php b/app/code/Magento/Catalog/Model/Category/Tree.php
index afff37ad728df29b795832ef573c83d3ef7435b8..7ee6878136f09ef75e2e9a5c5e8e2815c70fb334 100644
--- a/app/code/Magento/Catalog/Model/Category/Tree.php
+++ b/app/code/Magento/Catalog/Model/Category/Tree.php
@@ -13,7 +13,7 @@ use Magento\Framework\Data\Tree\Node;
 class Tree
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\Tree
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Tree
      */
     protected $categoryTree;
 
@@ -23,7 +23,7 @@ class Tree
     protected $storeManager;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Collection
      */
     protected $categoryCollection;
 
@@ -33,15 +33,15 @@ class Tree
     protected $treeFactory;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Category\Tree $categoryTree
+     * @param \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTree
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Catalog\Model\Resource\Category\Collection $categoryCollection
+     * @param \Magento\Catalog\Model\ResourceModel\Category\Collection $categoryCollection
      * @param \Magento\Catalog\Api\Data\CategoryTreeInterfaceFactory $treeFactory
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\Category\Tree $categoryTree,
+        \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTree,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Catalog\Model\Resource\Category\Collection $categoryCollection,
+        \Magento\Catalog\Model\ResourceModel\Category\Collection $categoryCollection,
         \Magento\Catalog\Api\Data\CategoryTreeInterfaceFactory $treeFactory
     ) {
         $this->categoryTree = $categoryTree;
diff --git a/app/code/Magento/Catalog/Model/CategoryManagement.php b/app/code/Magento/Catalog/Model/CategoryManagement.php
index d6b83501c073174998a7bef2ba58d190e5bd49fd..348d6c858ff27eddf933352111ba00be7643b795 100644
--- a/app/code/Magento/Catalog/Model/CategoryManagement.php
+++ b/app/code/Magento/Catalog/Model/CategoryManagement.php
@@ -7,7 +7,7 @@
 
 namespace Magento\Catalog\Model;
 
-use Magento\Catalog\Model\Resource\Category\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Category\CollectionFactory;
 
 class CategoryManagement implements \Magento\Catalog\Api\CategoryManagementInterface
 {
@@ -29,7 +29,7 @@ class CategoryManagement implements \Magento\Catalog\Api\CategoryManagementInter
     public function __construct(
         \Magento\Catalog\Api\CategoryRepositoryInterface $categoryRepository,
         \Magento\Catalog\Model\Category\Tree $categoryTree,
-        \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoriesFactory
+        \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoriesFactory
     ) {
         $this->categoryRepository = $categoryRepository;
         $this->categoryTree = $categoryTree;
@@ -84,7 +84,7 @@ class CategoryManagement implements \Magento\Catalog\Api\CategoryManagementInter
     public function getCount()
     {
         $categories = $this->categoriesFactory->create();
-        /** @var \Magento\Catalog\Model\Resource\Category\Collection $categories */
+        /** @var \Magento\Catalog\Model\ResourceModel\Category\Collection $categories */
         $categories->addAttributeToFilter('parent_id', ['gt' => 0]);
         return $categories->getSize();
     }
diff --git a/app/code/Magento/Catalog/Model/CategoryRepository.php b/app/code/Magento/Catalog/Model/CategoryRepository.php
index b03e7a43c41bb08a79381ad447bab2a59323befa..5c193e19c724a708a8c706b6bb584e2ca17933ec 100644
--- a/app/code/Magento/Catalog/Model/CategoryRepository.php
+++ b/app/code/Magento/Catalog/Model/CategoryRepository.php
@@ -29,7 +29,7 @@ class CategoryRepository implements \Magento\Catalog\Api\CategoryRepositoryInter
     protected $categoryFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category
+     * @var \Magento\Catalog\Model\ResourceModel\Category
      */
     protected $categoryResource;
 
@@ -42,12 +42,12 @@ class CategoryRepository implements \Magento\Catalog\Api\CategoryRepositoryInter
 
     /**
      * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory
-     * @param \Magento\Catalog\Model\Resource\Category $categoryResource
+     * @param \Magento\Catalog\Model\ResourceModel\Category $categoryResource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      */
     public function __construct(
         \Magento\Catalog\Model\CategoryFactory $categoryFactory,
-        \Magento\Catalog\Model\Resource\Category $categoryResource,
+        \Magento\Catalog\Model\ResourceModel\Category $categoryResource,
         \Magento\Store\Model\StoreManagerInterface $storeManager
     ) {
         $this->categoryFactory = $categoryFactory;
diff --git a/app/code/Magento/Catalog/Model/Config.php b/app/code/Magento/Catalog/Model/Config.php
index 64d5d9ac249ed327760ed0e264cb228185cf4088..bd6852a9ac8684d623699e0e1a52fcdbc57b4566 100644
--- a/app/code/Magento/Catalog/Model/Config.php
+++ b/app/code/Magento/Catalog/Model/Config.php
@@ -92,14 +92,14 @@ class Config extends \Magento\Eav\Model\Config
     /**
      * Set collection factory
      *
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory
      */
     protected $_setCollectionFactory;
 
     /**
      * Group collection factory
      *
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory
      */
     protected $_groupCollectionFactory;
 
@@ -113,7 +113,7 @@ class Config extends \Magento\Eav\Model\Config
     /**
      * Config factory
      *
-     * @var \Magento\Catalog\Model\Resource\ConfigFactory
+     * @var \Magento\Catalog\Model\ResourceModel\ConfigFactory
      */
     protected $_configFactory;
 
@@ -122,14 +122,14 @@ class Config extends \Magento\Eav\Model\Config
      *
      * @param \Magento\Framework\App\CacheInterface $cache
      * @param \Magento\Eav\Model\Entity\TypeFactory $entityTypeFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Type\CollectionFactory $entityTypeCollectionFactory,
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Type\CollectionFactory $entityTypeCollectionFactory,
      * @param \Magento\Framework\App\Cache\StateInterface $cacheState
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
-     * @param \Magento\Catalog\Model\Resource\ConfigFactory $configFactory
+     * @param \Magento\Catalog\Model\ResourceModel\ConfigFactory $configFactory
      * @param \Magento\Catalog\Model\Product\TypeFactory $productTypeFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory $groupCollectionFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $groupCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setCollectionFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Eav\Model\Config $eavConfig
      *
@@ -138,14 +138,14 @@ class Config extends \Magento\Eav\Model\Config
     public function __construct(
         \Magento\Framework\App\CacheInterface $cache,
         \Magento\Eav\Model\Entity\TypeFactory $entityTypeFactory,
-        \Magento\Eav\Model\Resource\Entity\Type\CollectionFactory $entityTypeCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Type\CollectionFactory $entityTypeCollectionFactory,
         \Magento\Framework\App\Cache\StateInterface $cacheState,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Catalog\Model\Resource\ConfigFactory $configFactory,
+        \Magento\Catalog\Model\ResourceModel\ConfigFactory $configFactory,
         \Magento\Catalog\Model\Product\TypeFactory $productTypeFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory $groupCollectionFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $groupCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setCollectionFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\Config $eavConfig
     ) {
@@ -167,7 +167,7 @@ class Config extends \Magento\Eav\Model\Config
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Resource\Config');
+        $this->_init('Magento\Catalog\Model\ResourceModel\Config');
     }
 
     /**
@@ -406,7 +406,7 @@ class Config extends \Magento\Eav\Model\Config
     /**
      * Retrieve resource model
      *
-     * @return \Magento\Catalog\Model\Resource\Config
+     * @return \Magento\Catalog\Model\ResourceModel\Config
      */
     protected function _getResource()
     {
diff --git a/app/code/Magento/Catalog/Model/Config/Backend/Category.php b/app/code/Magento/Catalog/Model/Config/Backend/Category.php
index 8481a9eda0488e523564a4a104532bc98a37ecb8..9634b182bd4b25bb05a0be3af3b0cef28fcad5ab 100644
--- a/app/code/Magento/Catalog/Model/Config/Backend/Category.php
+++ b/app/code/Magento/Catalog/Model/Config/Backend/Category.php
@@ -26,7 +26,7 @@ class Category extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Catalog\Model\Category $catalogCategory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -35,7 +35,7 @@ class Category extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Catalog\Model\Category $catalogCategory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php b/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php
index 431539fd0c48810e3f8a5a468deb609bbda19b38..2f0c8f4e2eefe51aeaff11820d53fb793265ea3e 100644
--- a/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php
+++ b/app/code/Magento/Catalog/Model/Config/CatalogClone/Media/Image.php
@@ -22,7 +22,7 @@ class Image extends \Magento\Framework\App\Config\Value
     /**
      * Attribute collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     protected $_attributeCollectionFactory;
 
@@ -30,9 +30,9 @@ class Image extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -40,9 +40,9 @@ class Image extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -61,7 +61,7 @@ class Image extends \Magento\Framework\App\Config\Value
         // use cached eav config
         $entityTypeId = $this->_eavConfig->getEntityType(\Magento\Catalog\Model\Product::ENTITY)->getId();
 
-        /* @var $collection \Magento\Catalog\Model\Resource\Product\Attribute\Collection */
+        /* @var $collection \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection */
         $collection = $this->_attributeCollectionFactory->create();
         $collection->setEntityTypeFilter($entityTypeId);
         $collection->setFrontendInputTypeFilter('media_image');
diff --git a/app/code/Magento/Catalog/Model/Config/Source/Category.php b/app/code/Magento/Catalog/Model/Config/Source/Category.php
index 5dcf210dc7bfe2b9df1f4f5d73f0f9d1c3409d74..88d89f10f2a7e5de4a528955e8c78927b73eda19 100644
--- a/app/code/Magento/Catalog/Model/Config/Source/Category.php
+++ b/app/code/Magento/Catalog/Model/Config/Source/Category.php
@@ -15,17 +15,18 @@ class Category implements \Magento\Framework\Option\ArrayInterface
     /**
      * Category collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Category\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory
      */
     protected $_categoryCollectionFactory;
 
     /**
      * Construct
      *
-     * @param \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory
      */
-    public function __construct(\Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryCollectionFactory)
-    {
+    public function __construct(
+        \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory
+    ) {
         $this->_categoryCollectionFactory = $categoryCollectionFactory;
     }
 
@@ -37,7 +38,7 @@ class Category implements \Magento\Framework\Option\ArrayInterface
      */
     public function toOptionArray($addEmpty = true)
     {
-        /** @var \Magento\Catalog\Model\Resource\Category\Collection $collection */
+        /** @var \Magento\Catalog\Model\ResourceModel\Category\Collection $collection */
         $collection = $this->_categoryCollectionFactory->create();
 
         $collection->addAttributeToSelect('name')->addRootLevelFilter()->load();
diff --git a/app/code/Magento/Catalog/Model/CustomOptions/CustomOption.php b/app/code/Magento/Catalog/Model/CustomOptions/CustomOption.php
index 02a59140493bbb7be8e1649991cb09f918c9cf38..b04a2cffde7edd5752051e721c0477709ecf863e 100644
--- a/app/code/Magento/Catalog/Model/CustomOptions/CustomOption.php
+++ b/app/code/Magento/Catalog/Model/CustomOptions/CustomOption.php
@@ -11,7 +11,7 @@ use Magento\Framework\Api\AttributeValueFactory;
 use Magento\Framework\Model\Context;
 use Magento\Framework\Registry;
 use Magento\Framework\Api\ExtensionAttributesFactory;
-use Magento\Framework\Model\Resource\AbstractResource;
+use Magento\Framework\Model\ResourceModel\AbstractResource;
 use Magento\Framework\Data\Collection\AbstractDb;
 use Magento\Catalog\Model\Webapi\Product\Option\Type\File\Processor as FileProcessor;
 
diff --git a/app/code/Magento/Catalog/Model/Design.php b/app/code/Magento/Catalog/Model/Design.php
index b1a9aa596e2d5123bf947146644b951353393776..fc992154c88eb2014fe2b098ba6709ab222984b6 100644
--- a/app/code/Magento/Catalog/Model/Design.php
+++ b/app/code/Magento/Catalog/Model/Design.php
@@ -33,7 +33,7 @@ class Design extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Framework\View\DesignInterface $design
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -42,7 +42,7 @@ class Design extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Framework\View\DesignInterface $design,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Entity/Attribute.php b/app/code/Magento/Catalog/Model/Entity/Attribute.php
index 3847ce7d9a8ea32ab6a4bda6e47d10e8750c380a..16550971a18bcbfea92bc61f57f24a027ec190da 100644
--- a/app/code/Magento/Catalog/Model/Entity/Attribute.php
+++ b/app/code/Magento/Catalog/Model/Entity/Attribute.php
@@ -12,8 +12,8 @@ use Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface;
 /**
  * Product attribute extension with event dispatching
  *
- * @method \Magento\Catalog\Model\Resource\Attribute _getResource()
- * @method \Magento\Catalog\Model\Resource\Attribute getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Attribute _getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Attribute getResource()
  * @method string getFrontendInputRenderer()
  * @method \Magento\Catalog\Model\Entity\Attribute setFrontendInputRenderer(string $value)
  * @method int setIsGlobal(int $value)
@@ -78,7 +78,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Eav\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
@@ -88,7 +88,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param DateTimeFormatterInterface $dateTimeFormatter
      * @param LockValidatorInterface $lockValidator
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -101,7 +101,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Eav\Model\Resource\Helper $resourceHelper,
+        \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory,
         \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor,
@@ -111,7 +111,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         DateTimeFormatterInterface $dateTimeFormatter,
         LockValidatorInterface $lockValidator,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/AbstractAction.php
index e17112fee6a68b4fc36744c5ec11d390ea835cca..57bc0144704ce2c3155242206977291a4a087a7c 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/AbstractAction.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/AbstractAction.php
@@ -8,7 +8,7 @@
 
 namespace Magento\Catalog\Model\Indexer\Category\Flat;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class AbstractAction
 {
@@ -37,7 +37,7 @@ class AbstractAction
     /**
      * Catalog resource helper
      *
-     * @var \Magento\Catalog\Model\Resource\Helper
+     * @var \Magento\Catalog\Model\ResourceModel\Helper
      */
     protected $resourceHelper;
 
@@ -54,14 +54,14 @@ class AbstractAction
     protected $connection;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
     ) {
         $this->resource = $resource;
         $this->connection = $resource->getConnection();
diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Action/Rows.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Action/Rows.php
index 4f69afbf0b6ed75537fd1ce3cb2af0f19ee66b1f..88ce0ac50b363018069086ac43c8193ab9af8a10 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Action/Rows.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Action/Rows.php
@@ -16,15 +16,15 @@ class Rows extends \Magento\Catalog\Model\Indexer\Category\Flat\AbstractAction
     protected $categoryRepository;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param CategoryRepositoryInterface $categoryRepository
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         CategoryRepositoryInterface $categoryRepository
     ) {
         $this->categoryRepository = $categoryRepository;
diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php
index 8ef69f4fb5d9642f71d5b1776b51ded75137bfaa..1f1cb50626bb3dbb4ae44803b3244516d47b93fb 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/Plugin/StoreGroup.php
@@ -39,15 +39,15 @@ class StoreGroup
     }
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $subject
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subject
      * @param callable $proceed
      * @param \Magento\Framework\Model\AbstractModel $group
      *
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundSave(
-        \Magento\Framework\Model\Resource\Db\AbstractDb $subject,
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $group
     ) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php
index df01da1a9cf773a6ac32d8021596a436b34abbac..e72004991e87503b23d9b565a534fcf00a72e4ca 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Category/Flat/System/Config/Mode.php
@@ -22,7 +22,7 @@ class Mode extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
      * @param \Magento\Indexer\Model\Indexer\State $indexerState
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Mode extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
         \Magento\Indexer\Model\Indexer\State $indexerState,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Product/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Category/Product/AbstractAction.php
index 7e56bba9dea7dfad4ad943d07e81e629778061fd..860e6dd6dd021e23d1cf013d80e80aba23ab1746 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Category/Product/AbstractAction.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Category/Product/AbstractAction.php
@@ -8,7 +8,7 @@
 
 namespace Magento\Catalog\Model\Indexer\Category\Product;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 abstract class AbstractAction
 {
@@ -61,7 +61,7 @@ abstract class AbstractAction
     protected $categoryPath = [];
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $resource;
 
@@ -88,12 +88,12 @@ abstract class AbstractAction
     protected $connection;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Model\Config $config
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Config $config
     ) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php
index c8b79bc66877bdd6f49130f88160b162ee97e1af..859bc2936e0983dccaad0daf41db07d86fbfb0d1 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Category/Product/Plugin/StoreGroup.php
@@ -19,14 +19,14 @@ class StoreGroup
     }
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $subject
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subject
      * @param callable $proceed
      * @param \Magento\Framework\Model\AbstractModel $group
      * @return mixed
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundSave(
-        \Magento\Framework\Model\Resource\Db\AbstractDb $subject,
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $group
     ) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/AbstractAction.php
index c79bbeeebc43a152e6254d2a297dcff22a05bd44..6d24d17f4c41da070e5f5e909dc0eec26612ca22 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/AbstractAction.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/AbstractAction.php
@@ -18,22 +18,22 @@ abstract class AbstractAction
     protected $_types;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Indexer\Eav\SourceFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\SourceFactory
      */
     protected $_eavSourceFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Indexer\Eav\DecimalFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\DecimalFactory
      */
     protected $_eavDecimalFactory;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Product\Indexer\Eav\DecimalFactory $eavDecimalFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Indexer\Eav\SourceFactory $eavSourceFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\DecimalFactory $eavDecimalFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\SourceFactory $eavSourceFactory
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\Product\Indexer\Eav\DecimalFactory $eavDecimalFactory,
-        \Magento\Catalog\Model\Resource\Product\Indexer\Eav\SourceFactory $eavSourceFactory
+        \Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\DecimalFactory $eavDecimalFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\SourceFactory $eavSourceFactory
     ) {
         $this->_eavDecimalFactory = $eavDecimalFactory;
         $this->_eavSourceFactory = $eavSourceFactory;
@@ -50,7 +50,7 @@ abstract class AbstractAction
     /**
      * Retrieve array of EAV type indexers
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Indexer\Eav\AbstractEav[]
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\AbstractEav[]
      */
     public function getIndexers()
     {
@@ -68,7 +68,7 @@ abstract class AbstractAction
      * Retrieve indexer instance by type
      *
      * @param string $type
-     * @return \Magento\Catalog\Model\Resource\Product\Indexer\Eav\AbstractEav
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\AbstractEav
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getIndexer($type)
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Plugin/AttributeSet/IndexableAttributeFilter.php b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Plugin/AttributeSet/IndexableAttributeFilter.php
index ae483b5eb46b486a5af0e437b01b43f2190e15ff..82fdff3debe69bcb1e795524116b8dfc22b8c0a1 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Plugin/AttributeSet/IndexableAttributeFilter.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Plugin/AttributeSet/IndexableAttributeFilter.php
@@ -9,14 +9,14 @@ namespace Magento\Catalog\Model\Indexer\Product\Eav\Plugin\AttributeSet;
 class IndexableAttributeFilter
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Eav\AttributeFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory
      */
     protected $_attributeFactory;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Eav\AttributeFactory $attributeFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory $attributeFactory
      */
-    public function __construct(\Magento\Catalog\Model\Resource\Eav\AttributeFactory $attributeFactory)
+    public function __construct(\Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory $attributeFactory)
     {
         $this->_attributeFactory = $attributeFactory;
     }
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Plugin/StoreView.php b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Plugin/StoreView.php
index 2af78f2ba212396dc9ddc601946308cfa251ed7d..a62c779a6cf8755059daf44451f9632593af8f12 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Plugin/StoreView.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Eav/Plugin/StoreView.php
@@ -25,14 +25,14 @@ class StoreView
     /**
      * Before save handler
      *
-     * @param \Magento\Store\Model\Resource\Store $subject
+     * @param \Magento\Store\Model\ResourceModel\Store $subject
      * @param \Magento\Framework\Model\AbstractModel $object
      *
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function beforeSave(
-        \Magento\Store\Model\Resource\Store $subject,
+        \Magento\Store\Model\ResourceModel\Store $subject,
         \Magento\Framework\Model\AbstractModel $object
     ) {
         if ((!$object->getId() || $object->dataHasChangedFor('group_id')) && $object->getIsActive()) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/AbstractAction.php
index 04a1148ace6df4c571a4fd35a6ce1d9df7891919..d59a209b84607d398ed1f3394e387fdab93ae41c 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/AbstractAction.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/AbstractAction.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Model\Indexer\Product\Flat;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Abstract action reindex class
@@ -72,7 +72,7 @@ abstract class AbstractAction
     protected $_flatTableBuilder;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper
      * @param \Magento\Catalog\Model\Product\Type $productType
@@ -80,7 +80,7 @@ abstract class AbstractAction
      * @param FlatTableBuilder $flatTableBuilder
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper,
         \Magento\Catalog\Model\Product\Type $productType,
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Eraser.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Eraser.php
index 2bc1e514f6db835bb55a90fff03d475a96ac3605..4fb77829d27d12e19ac31aacfc6614017652bbfd 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Eraser.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Eraser.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\Catalog\Model\Indexer\Product\Flat\Action;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class Eraser
 {
@@ -27,12 +27,12 @@ class Eraser
     protected $storeManager;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper,
         \Magento\Store\Model\StoreManagerInterface $storeManager
     ) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Indexer.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Indexer.php
index 1877a2dbc4e7b06f131453b26662479a38d021e3..4ad48bd25cd91b3aa685212c14badb52f50e42cb 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Indexer.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Indexer.php
@@ -6,7 +6,7 @@
  */
 namespace Magento\Catalog\Model\Indexer\Product\Flat\Action;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class Indexer
 {
@@ -25,11 +25,11 @@ class Indexer
      */
     protected $_connection;
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper
     ) {
         $this->_productIndexerHelper = $productHelper;
@@ -80,7 +80,7 @@ class Indexer
                         $keyColumns
                     );
 
-                    /** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+                    /** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
                     foreach ($columns as $columnName => $attribute) {
                         if (isset($describe[$columnName])) {
                             $ids[$attribute->getId()] = $columnName;
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Row.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Row.php
index 6ff6896e16694f8c2d3939e99a55ed2f1022a5d8..e0e784f8799de90c9eb7e1e18a50f7e9161f7841 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Row.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Row.php
@@ -24,7 +24,7 @@ class Row extends \Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction
     protected $flatItemEraser;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper
      * @param \Magento\Catalog\Model\Product\Type $productType
@@ -34,7 +34,7 @@ class Row extends \Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction
      * @param Eraser $flatItemEraser
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper,
         \Magento\Catalog\Model\Product\Type $productType,
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Rows.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Rows.php
index 9ac978eb2daea3344ef093fa62a8426c4c1d8821..36a5dbf013f571bf239a3fa50fe36e2fa4e34c3e 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Rows.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Rows.php
@@ -20,7 +20,7 @@ class Rows extends \Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction
     protected $flatItemEraser;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper
      * @param \Magento\Catalog\Model\Product\Type $productType
@@ -29,7 +29,7 @@ class Rows extends \Magento\Catalog\Model\Indexer\Product\Flat\AbstractAction
      * @param Eraser $flatItemEraser
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Helper\Product\Flat\Indexer $productHelper,
         \Magento\Catalog\Model\Product\Type $productType,
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Rows/TableData.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Rows/TableData.php
index c7593d16747790228dbcaf6810f9123e03edad21..254d898d7cc365cf8d3ba35fdd3d3ac268ebd228 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Rows/TableData.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Action/Rows/TableData.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Model\Indexer\Product\Flat\Action\Rows;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Class TableData
@@ -23,16 +23,16 @@ class TableData implements \Magento\Catalog\Model\Indexer\Product\Flat\TableData
     protected $_productIndexerHelper;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productIndexerHelper
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Catalog\Helper\Product\Flat\Indexer $productIndexerHelper
     ) {
         $this->_resource = $resource;
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php
index b83ac7d19afd6143db226d67bfd3fcb2ece80a93..f0a5a7d5049b69f3de3c8e3e14785c348bf2a3d4 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/FlatTableBuilder.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Model\Indexer\Product\Flat;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Class FlatTableBuilder
@@ -44,14 +44,14 @@ class FlatTableBuilder
 
     /**
      * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productIndexerHelper
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param TableDataInterface $tableData
      */
     public function __construct(
         \Magento\Catalog\Helper\Product\Flat\Indexer $productIndexerHelper,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Indexer\Product\Flat\TableDataInterface $tableData
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/Store.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/Store.php
index 781cb92d83a77702211b7e62d79a04ef230f8634..eee5a4148be16cd10d93f63f8de73299f7b69063 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/Store.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/Store.php
@@ -28,13 +28,13 @@ class Store
     /**
      * Before save handler
      *
-     * @param \Magento\Store\Model\Resource\Store $subject
+     * @param \Magento\Store\Model\ResourceModel\Store $subject
      * @param \Magento\Framework\Model\AbstractModel $object
      *
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function beforeSave(\Magento\Store\Model\Resource\Store $subject, \Magento\Framework\Model\AbstractModel $object)
+    public function beforeSave(\Magento\Store\Model\ResourceModel\Store $subject, \Magento\Framework\Model\AbstractModel $object)
     {
         if (!$object->getId() || $object->dataHasChangedFor('group_id')) {
             $this->_productFlatIndexerProcessor->markIndexerAsInvalid();
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/StoreGroup.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/StoreGroup.php
index 7e59098153d5213d986643437a0f53de66e72458..553c53107b309562fd301c49cd1f583fc98eea78 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/StoreGroup.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/Plugin/StoreGroup.php
@@ -28,13 +28,13 @@ class StoreGroup
     /**
      * Before save handler
      *
-     * @param \Magento\Store\Model\Resource\Group $subject
+     * @param \Magento\Store\Model\ResourceModel\Group $subject
      * @param \Magento\Framework\Model\AbstractModel $object
      *
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function beforeSave(\Magento\Store\Model\Resource\Group $subject, \Magento\Framework\Model\AbstractModel $object)
+    public function beforeSave(\Magento\Store\Model\ResourceModel\Group $subject, \Magento\Framework\Model\AbstractModel $object)
     {
         if (!$object->getId() || $object->dataHasChangedFor('root_category_id')) {
             $this->_productFlatIndexerProcessor->markIndexerAsInvalid();
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php
index a0206fc2b43905d47f246532dec33ad5efc7703b..1db9aae1325cc819a2639b53194bab135cf8552b 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/System/Config/Mode.php
@@ -26,7 +26,7 @@ class Mode extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\Processor $productFlatIndexerProcessor
      * @param \Magento\Indexer\Model\Indexer\State $indexerState
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -36,7 +36,7 @@ class Mode extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Catalog\Model\Indexer\Product\Flat\Processor $productFlatIndexerProcessor,
         \Magento\Indexer\Model\Indexer\State $indexerState,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/TableBuilder.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/TableBuilder.php
index c42a1c67173a1fce49f30869bff98f6926818daa..02de39338684252169b4d93640b0af1f7ca5768f 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/TableBuilder.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/TableBuilder.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Model\Indexer\Product\Flat;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Class TableBuilder
@@ -31,11 +31,11 @@ class TableBuilder
 
     /**
      * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productIndexerHelper
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
     public function __construct(
         \Magento\Catalog\Helper\Product\Flat\Indexer $productIndexerHelper,
-        \Magento\Framework\App\Resource $resource
+        \Magento\Framework\App\ResourceConnection $resource
     ) {
         $this->_productIndexerHelper = $productIndexerHelper;
         $this->_connection = $resource->getConnection();
@@ -102,7 +102,7 @@ class TableBuilder
      * Create empty temporary table with given columns list
      *
      * @param string $tableName  Table name
-     * @param array $columns array('columnName' => \Magento\Catalog\Model\Resource\Eav\Attribute, ...)
+     * @param array $columns array('columnName' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute, ...)
      * @param string $valueFieldSuffix
      *
      * @return array
@@ -124,7 +124,7 @@ class TableBuilder
 
             $valueTemporaryTable->addColumn('entity_id', \Magento\Framework\DB\Ddl\Table::TYPE_INTEGER);
 
-            /** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+            /** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
             foreach ($columns as $columnName => $attribute) {
                 $attributeCode = $attribute->getAttributeCode();
                 if (isset($flatColumns[$attributeCode])) {
@@ -259,7 +259,7 @@ class TableBuilder
 
                 $selectValue->from(['e' => $temporaryTableName], $keyColumn);
 
-                /** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+                /** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
                 foreach ($columnsList as $columnName => $attribute) {
                     $countTableName = 't' . $iterationNum++;
                     $joinCondition = sprintf(
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/TableData.php b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/TableData.php
index 080891219cc6a5e5945eaf696d4406a38270449f..0597321eb61efbd3be9b627e4de046c3a8fd2c7f 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Flat/TableData.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Flat/TableData.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Model\Indexer\Product\Flat;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Class TableData
@@ -18,14 +18,14 @@ class TableData implements TableDataInterface
     protected $_connection;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
-    public function __construct(\Magento\Framework\App\Resource $resource)
+    public function __construct(\Magento\Framework\App\ResourceConnection $resource)
     {
         $this->_resource = $resource;
     }
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Price/AbstractAction.php b/app/code/Magento/Catalog/Model/Indexer/Product/Price/AbstractAction.php
index 947ce75e627a951a088a7313d1ebd3d64da0fd49..9b9f7a2b75a39a8a09e5d6d7d54fd770f9701259 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Price/AbstractAction.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Price/AbstractAction.php
@@ -15,7 +15,7 @@ abstract class AbstractAction
     /**
      * Default Product Type Price indexer resource model
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice
      */
     protected $_defaultIndexerResource;
 
@@ -61,7 +61,7 @@ abstract class AbstractAction
     /**
      * Indexer price factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Indexer\Price\Factory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\Factory
      */
     protected $_indexerPriceFactory;
 
@@ -77,8 +77,8 @@ abstract class AbstractAction
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Catalog\Model\Product\Type $catalogProductType
-     * @param \Magento\Catalog\Model\Resource\Product\Indexer\Price\Factory $indexerPriceFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice $defaultIndexerResource
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\Factory $indexerPriceFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice $defaultIndexerResource
      */
     public function __construct(
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
@@ -87,8 +87,8 @@ abstract class AbstractAction
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Catalog\Model\Product\Type $catalogProductType,
-        \Magento\Catalog\Model\Resource\Product\Indexer\Price\Factory $indexerPriceFactory,
-        \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice $defaultIndexerResource
+        \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\Factory $indexerPriceFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice $defaultIndexerResource
     ) {
         $this->_config = $config;
         $this->_storeManager = $storeManager;
@@ -254,7 +254,7 @@ abstract class AbstractAction
     /**
      * Retrieve price indexers per product type
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Indexer\Price\PriceInterface[]
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\PriceInterface[]
      */
     public function getTypeIndexers()
     {
@@ -285,7 +285,7 @@ abstract class AbstractAction
      * Retrieve Price indexer by Product Type
      *
      * @param string $productTypeId
-     * @return \Magento\Catalog\Model\Resource\Product\Indexer\Price\PriceInterface
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\PriceInterface
      * @throws \Magento\Framework\Exception\InputException
      */
     protected function _getIndexer($productTypeId)
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Price/Plugin/Website.php b/app/code/Magento/Catalog/Model/Indexer/Product/Price/Plugin/Website.php
index 5a0a1147cd0bd7097de6e0535d18dd409ad8adc9..84d1ef4acaad41df3c5b0d7a9f0cd12f5c42026e 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Price/Plugin/Website.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Price/Plugin/Website.php
@@ -23,13 +23,13 @@ class Website
     /**
      * Invalidate price indexer
      *
-     * @param \Magento\Store\Model\Resource\Website $subject
-     * @param \Magento\Store\Model\Resource\Website $result
-     * @return \Magento\Store\Model\Resource\Website
+     * @param \Magento\Store\Model\ResourceModel\Website $subject
+     * @param \Magento\Store\Model\ResourceModel\Website $result
+     * @return \Magento\Store\Model\ResourceModel\Website
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function afterDelete(\Magento\Store\Model\Resource\Website $subject, $result)
+    public function afterDelete(\Magento\Store\Model\ResourceModel\Website $subject, $result)
     {
         $this->_processor->markIndexerAsInvalid();
         return $result;
diff --git a/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php b/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php
index 42e27c7bd3e0d3f5f27e434ffa3a5ba131311651..148b5b7a99af73a355ec694df00a636156096fdf 100644
--- a/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php
+++ b/app/code/Magento/Catalog/Model/Indexer/Product/Price/System/Config/PriceScope.php
@@ -18,7 +18,7 @@ class PriceScope extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -27,7 +27,7 @@ class PriceScope extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Layer.php b/app/code/Magento/Catalog/Model/Layer.php
index 4818eba4b6b6f0f728722fbf8822a16bb2da3002..e7953c441e3f7147d7f885f2481c28b9a5ff7518 100644
--- a/app/code/Magento/Catalog/Model/Layer.php
+++ b/app/code/Magento/Catalog/Model/Layer.php
@@ -7,6 +7,7 @@ namespace Magento\Catalog\Model;
 
 use Magento\Catalog\Api\CategoryRepositoryInterface;
 use Magento\Framework\Exception\NoSuchEntityException;
+use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory as AttributeCollectionFactory;
 
 /**
  * Catalog view layer model
@@ -47,14 +48,14 @@ class Layer extends \Magento\Framework\DataObject
     /**
      * Catalog product
      *
-     * @var \Magento\Catalog\Model\Resource\Product
+     * @var \Magento\Catalog\Model\ResourceModel\Product
      */
     protected $_catalogProduct;
 
     /**
      * Attribute collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var AttributeCollectionFactory
      */
     protected $_attributeCollectionFactory;
 
@@ -88,8 +89,8 @@ class Layer extends \Magento\Framework\DataObject
     /**
      * @param Layer\ContextInterface $context
      * @param Layer\StateFactory $layerStateFactory
-     * @param Resource\Product\Attribute\CollectionFactory $attributeCollectionFactory
-     * @param Resource\Product $catalogProduct
+     * @param AttributeCollectionFactory $attributeCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product $catalogProduct
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Registry $registry
      * @param CategoryRepositoryInterface $categoryRepository
@@ -98,8 +99,8 @@ class Layer extends \Magento\Framework\DataObject
     public function __construct(
         \Magento\Catalog\Model\Layer\ContextInterface $context,
         \Magento\Catalog\Model\Layer\StateFactory $layerStateFactory,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeCollectionFactory,
-        \Magento\Catalog\Model\Resource\Product $catalogProduct,
+        AttributeCollectionFactory $attributeCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product $catalogProduct,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Registry $registry,
         CategoryRepositoryInterface $categoryRepository,
@@ -133,7 +134,7 @@ class Layer extends \Magento\Framework\DataObject
     /**
      * Retrieve current layer product collection
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     public function getProductCollection()
     {
@@ -151,7 +152,7 @@ class Layer extends \Magento\Framework\DataObject
     /**
      * Initialize product collection
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @return \Magento\Catalog\Model\Layer
      */
     public function prepareProductCollection($collection)
diff --git a/app/code/Magento/Catalog/Model/Layer/Category.php b/app/code/Magento/Catalog/Model/Layer/Category.php
index c27f563e8b5f293cfcd95daaf53fe42a86e03a39..97f43f27f4bcf3d5cc68d1de6ca452ee5f2e785d 100644
--- a/app/code/Magento/Catalog/Model/Layer/Category.php
+++ b/app/code/Magento/Catalog/Model/Layer/Category.php
@@ -7,15 +7,15 @@
 namespace Magento\Catalog\Model\Layer;
 
 use Magento\Catalog\Api\CategoryRepositoryInterface;
-use Magento\Catalog\Model\Resource;
+use Magento\Catalog\Model\ResourceModel;
 
 class Category extends \Magento\Catalog\Model\Layer
 {
     /**
      * @param ContextInterface $context
      * @param StateFactory $layerStateFactory
-     * @param Resource\Product\Attribute\CollectionFactory $attributeCollectionFactory
-     * @param Resource\Product $catalogProduct
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product $catalogProduct
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Registry $registry
      * @param CategoryRepositoryInterface $categoryRepository
@@ -24,8 +24,8 @@ class Category extends \Magento\Catalog\Model\Layer
     public function __construct(
         ContextInterface $context,
         StateFactory $layerStateFactory,
-        Resource\Product\Attribute\CollectionFactory $attributeCollectionFactory,
-        Resource\Product $catalogProduct,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product $catalogProduct,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Registry $registry,
         CategoryRepositoryInterface $categoryRepository,
diff --git a/app/code/Magento/Catalog/Model/Layer/Category/CollectionFilter.php b/app/code/Magento/Catalog/Model/Layer/Category/CollectionFilter.php
index c9623609aa00f89d0e04624186cf50c0df2f2e8f..a158eeb5094cb3145c2b9e70eb291bd7295d6577 100644
--- a/app/code/Magento/Catalog/Model/Layer/Category/CollectionFilter.php
+++ b/app/code/Magento/Catalog/Model/Layer/Category/CollectionFilter.php
@@ -42,7 +42,7 @@ class CollectionFilter implements CollectionFilterInterface
     /**
      * Filter product collection
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @param \Magento\Catalog\Model\Category $category
      * @return void
      */
diff --git a/app/code/Magento/Catalog/Model/Layer/Category/FilterableAttributeList.php b/app/code/Magento/Catalog/Model/Layer/Category/FilterableAttributeList.php
index 05fc45af6f29fc23f6d30a1705d6a83c79a123d8..cb351e9bf7373194406fa7c26fe900bccc2382a7 100644
--- a/app/code/Magento/Catalog/Model/Layer/Category/FilterableAttributeList.php
+++ b/app/code/Magento/Catalog/Model/Layer/Category/FilterableAttributeList.php
@@ -12,7 +12,7 @@ use Magento\Catalog\Model\Layer\FilterableAttributeListInterface;
 class FilterableAttributeList implements FilterableAttributeListInterface
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     protected $collectionFactory;
 
@@ -24,11 +24,11 @@ class FilterableAttributeList implements FilterableAttributeListInterface
     /**
      * FilterableAttributeList constructor
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $collectionFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $collectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $collectionFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager
     ) {
         $this->collectionFactory = $collectionFactory;
@@ -38,13 +38,13 @@ class FilterableAttributeList implements FilterableAttributeListInterface
     /**
      * Retrieve list of filterable attributes
      *
-     * @return array|\Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @return array|\Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     public function getList()
     {
-        /** @var $collection \Magento\Catalog\Model\Resource\Product\Attribute\Collection */
+        /** @var $collection \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection */
         $collection = $this->collectionFactory->create();
-        $collection->setItemObjectClass('Magento\Catalog\Model\Resource\Eav\Attribute')
+        $collection->setItemObjectClass('Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->addStoreLabel($this->storeManager->getStore()->getId())
             ->setOrder('position', 'ASC');
         $collection = $this->_prepareAttributeCollection($collection);
@@ -56,8 +56,8 @@ class FilterableAttributeList implements FilterableAttributeListInterface
     /**
      * Add filters to attribute collection
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\Collection $collection
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection $collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     protected function _prepareAttributeCollection($collection)
     {
diff --git a/app/code/Magento/Catalog/Model/Layer/Category/ItemCollectionProvider.php b/app/code/Magento/Catalog/Model/Layer/Category/ItemCollectionProvider.php
index b716c605a6f1af9c8822f46094cfca0ae775ab53..e4fb5adf8f1aac6edc1daa1416fc1d3381f16017 100644
--- a/app/code/Magento/Catalog/Model/Layer/Category/ItemCollectionProvider.php
+++ b/app/code/Magento/Catalog/Model/Layer/Category/ItemCollectionProvider.php
@@ -12,7 +12,7 @@ class ItemCollectionProvider implements ItemCollectionProviderInterface
 {
     /**
      * @param \Magento\Catalog\Model\Category $category
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     public function getCollection(\Magento\Catalog\Model\Category $category)
     {
diff --git a/app/code/Magento/Catalog/Model/Layer/CollectionFilterInterface.php b/app/code/Magento/Catalog/Model/Layer/CollectionFilterInterface.php
index bc526b496532dadb914d96cbc7350d2ef4b2800c..80185485f65f9d5f2c1f276409ec8d6f9d233e0a 100644
--- a/app/code/Magento/Catalog/Model/Layer/CollectionFilterInterface.php
+++ b/app/code/Magento/Catalog/Model/Layer/CollectionFilterInterface.php
@@ -11,7 +11,7 @@ interface CollectionFilterInterface
     /**
      * Filter product collection
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @param \Magento\Catalog\Model\Category $category
      * @return void
      */
diff --git a/app/code/Magento/Catalog/Model/Layer/Filter/AbstractFilter.php b/app/code/Magento/Catalog/Model/Layer/Filter/AbstractFilter.php
index bbd92e3cc88d1690f20fd91bdd11de1f6958ae1b..fdf80681159cce87ab47cb677b5cb34508a556ce 100644
--- a/app/code/Magento/Catalog/Model/Layer/Filter/AbstractFilter.php
+++ b/app/code/Magento/Catalog/Model/Layer/Filter/AbstractFilter.php
@@ -273,7 +273,7 @@ abstract class AbstractFilter extends \Magento\Framework\DataObject implements F
     /**
      * Get attribute model associated with filter
      *
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getAttributeModel()
@@ -371,7 +371,7 @@ abstract class AbstractFilter extends \Magento\Framework\DataObject implements F
     /**
      * Check whether specified attribute can be used in LN
      *
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
      * @return int
      */
     protected function getAttributeIsFilterable($attribute)
diff --git a/app/code/Magento/Catalog/Model/Layer/Filter/Attribute.php b/app/code/Magento/Catalog/Model/Layer/Filter/Attribute.php
index bbcc8ec0a70cd2c6bc5d24e05a884ba9e94988a0..77f795cfabab0a9384dde99baa94466003fa02ae 100644
--- a/app/code/Magento/Catalog/Model/Layer/Filter/Attribute.php
+++ b/app/code/Magento/Catalog/Model/Layer/Filter/Attribute.php
@@ -15,7 +15,7 @@ class Attribute extends \Magento\Catalog\Model\Layer\Filter\AbstractFilter
     /**
      * Resource instance
      *
-     * @var \Magento\Catalog\Model\Resource\Layer\Filter\Attribute
+     * @var \Magento\Catalog\Model\ResourceModel\Layer\Filter\Attribute
      */
     protected $_resource;
 
@@ -36,7 +36,7 @@ class Attribute extends \Magento\Catalog\Model\Layer\Filter\AbstractFilter
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Model\Layer $layer
      * @param \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder
-     * @param \Magento\Catalog\Model\Resource\Layer\Filter\AttributeFactory $filterAttributeFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Layer\Filter\AttributeFactory $filterAttributeFactory
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param \Magento\Framework\Filter\StripTags $tagFilter
      * @param array $data
@@ -46,7 +46,7 @@ class Attribute extends \Magento\Catalog\Model\Layer\Filter\AbstractFilter
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Layer $layer,
         \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder,
-        \Magento\Catalog\Model\Resource\Layer\Filter\AttributeFactory $filterAttributeFactory,
+        \Magento\Catalog\Model\ResourceModel\Layer\Filter\AttributeFactory $filterAttributeFactory,
         \Magento\Framework\Stdlib\StringUtils $string,
         \Magento\Framework\Filter\StripTags $tagFilter,
         array $data = []
@@ -61,7 +61,7 @@ class Attribute extends \Magento\Catalog\Model\Layer\Filter\AbstractFilter
     /**
      * Retrieve resource instance
      *
-     * @return \Magento\Catalog\Model\Resource\Layer\Filter\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Layer\Filter\Attribute
      */
     protected function _getResource()
     {
diff --git a/app/code/Magento/Catalog/Model/Layer/Filter/DataProvider/Decimal.php b/app/code/Magento/Catalog/Model/Layer/Filter/DataProvider/Decimal.php
index 0ba3245c3e2b2a041604a5463e135381dcebd2bc..6eb6044ddabab0170dd9357bb6149c2f6ca17294 100644
--- a/app/code/Magento/Catalog/Model/Layer/Filter/DataProvider/Decimal.php
+++ b/app/code/Magento/Catalog/Model/Layer/Filter/DataProvider/Decimal.php
@@ -32,14 +32,14 @@ class Decimal
     private $rangeItemsCount = [];
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Layer\Filter\Decimal
+     * @var \Magento\Catalog\Model\ResourceModel\Layer\Filter\Decimal
      */
     private $resource;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Layer\Filter\Decimal $resource
+     * @param \Magento\Catalog\Model\ResourceModel\Layer\Filter\Decimal $resource
      */
-    public function __construct(\Magento\Catalog\Model\Resource\Layer\Filter\Decimal $resource)
+    public function __construct(\Magento\Catalog\Model\ResourceModel\Layer\Filter\Decimal $resource)
     {
         $this->resource = $resource;
     }
@@ -124,7 +124,7 @@ class Decimal
     }
 
     /**
-     * @return \Magento\Catalog\Model\Resource\Layer\Filter\Decimal
+     * @return \Magento\Catalog\Model\ResourceModel\Layer\Filter\Decimal
      */
     public function getResource()
     {
diff --git a/app/code/Magento/Catalog/Model/Layer/Filter/DataProvider/Price.php b/app/code/Magento/Catalog/Model/Layer/Filter/DataProvider/Price.php
index cade99bb750d9b85c04367f320f475653f71dca0..5f6529bcf47562e1ea9133c155d83f40130bc248 100644
--- a/app/code/Magento/Catalog/Model/Layer/Filter/DataProvider/Price.php
+++ b/app/code/Magento/Catalog/Model/Layer/Filter/DataProvider/Price.php
@@ -55,7 +55,7 @@ class Price
     private $rangeItemCounts = [];
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Layer\Filter\Price
+     * @var \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price
      */
     private $resource;
 
@@ -88,13 +88,13 @@ class Price
      * @param Layer $layer
      * @param Registry $coreRegistry
      * @param ScopeConfigInterface $scopeConfig
-     * @param \Magento\Catalog\Model\Resource\Layer\Filter\Price $resource
+     * @param \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price $resource
      */
     public function __construct(
         Layer $layer,
         Registry $coreRegistry,
         ScopeConfigInterface $scopeConfig,
-        \Magento\Catalog\Model\Resource\Layer\Filter\Price $resource
+        \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price $resource
     ) {
         $this->layer = $layer;
         $this->coreRegistry = $coreRegistry;
@@ -355,7 +355,7 @@ class Price
     }
 
     /**
-     * @return \Magento\Catalog\Model\Resource\Layer\Filter\Price
+     * @return \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price
      */
     public function getResource()
     {
diff --git a/app/code/Magento/Catalog/Model/Layer/Filter/Decimal.php b/app/code/Magento/Catalog/Model/Layer/Filter/Decimal.php
index 2aff097b02334f3a347d2bcc7e739f8e0aeef5ba..2a9a2e379b535f04ac630a012cbe4e6ba9c29629 100644
--- a/app/code/Magento/Catalog/Model/Layer/Filter/Decimal.php
+++ b/app/code/Magento/Catalog/Model/Layer/Filter/Decimal.php
@@ -16,7 +16,7 @@ class Decimal extends \Magento\Catalog\Model\Layer\Filter\AbstractFilter
     /**
      * Resource instance
      *
-     * @var \Magento\Catalog\Model\Resource\Layer\Filter\Decimal
+     * @var \Magento\Catalog\Model\ResourceModel\Layer\Filter\Decimal
      */
     protected $_resource;
 
@@ -35,7 +35,7 @@ class Decimal extends \Magento\Catalog\Model\Layer\Filter\AbstractFilter
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Model\Layer $layer
      * @param \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder
-     * @param \Magento\Catalog\Model\Resource\Layer\Filter\DecimalFactory $filterDecimalFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Layer\Filter\DecimalFactory $filterDecimalFactory
      * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
      * @param array $data
      */
diff --git a/app/code/Magento/Catalog/Model/Layer/Filter/Dynamic/Auto.php b/app/code/Magento/Catalog/Model/Layer/Filter/Dynamic/Auto.php
index 627c5dabb80bdb0e4b8c3ed1dd249306c7473ac8..fb7609f50edb5366e459611759431d2109e88981 100644
--- a/app/code/Magento/Catalog/Model/Layer/Filter/Dynamic/Auto.php
+++ b/app/code/Magento/Catalog/Model/Layer/Filter/Dynamic/Auto.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Model\Layer\Filter\Dynamic;
 use Magento\Catalog\Model\Layer\Filter\Price\Range;
 use Magento\Catalog\Model\Layer\Filter\Price\Render;
 use Magento\Catalog\Model\Layer\Resolver;
-use Magento\Catalog\Model\Resource\Layer\Filter\Price;
+use Magento\Catalog\Model\ResourceModel\Layer\Filter\Price;
 use Magento\Framework\App\Config\ScopeConfigInterface;
 use Magento\Framework\Registry;
 use Magento\Framework\Search\Dynamic\Algorithm;
diff --git a/app/code/Magento/Catalog/Model/Layer/Filter/Dynamic/Manual.php b/app/code/Magento/Catalog/Model/Layer/Filter/Dynamic/Manual.php
index b81568ae537e083fad59ffdb61a807acd3f36732..b7f6f2cde8bd4ea74d825a7d019e08c0c7016aeb 100644
--- a/app/code/Magento/Catalog/Model/Layer/Filter/Dynamic/Manual.php
+++ b/app/code/Magento/Catalog/Model/Layer/Filter/Dynamic/Manual.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Model\Layer\Filter\Dynamic;
 use Magento\Catalog\Model\Layer\Filter\Price\Range;
 use Magento\Catalog\Model\Layer\Filter\Price\Render;
 use Magento\Catalog\Model\Layer\Resolver;
-use Magento\Catalog\Model\Resource\Layer\Filter\Price;
+use Magento\Catalog\Model\ResourceModel\Layer\Filter\Price;
 use Magento\Framework\App\Config\ScopeConfigInterface;
 use Magento\Framework\Registry;
 use Magento\Framework\Search\Dynamic\Algorithm;
diff --git a/app/code/Magento/Catalog/Model/Layer/Filter/FilterInterface.php b/app/code/Magento/Catalog/Model/Layer/Filter/FilterInterface.php
index 85888f53b2ab20b961ffc0c91ad5044aec8885d5..ac369e50a21e37861b7a9bf5fbee82f7f4dcefc3 100644
--- a/app/code/Magento/Catalog/Model/Layer/Filter/FilterInterface.php
+++ b/app/code/Magento/Catalog/Model/Layer/Filter/FilterInterface.php
@@ -87,7 +87,7 @@ interface FilterInterface
     /**
      * Get attribute model associated with filter
      *
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getAttributeModel();
diff --git a/app/code/Magento/Catalog/Model/Layer/Filter/Price.php b/app/code/Magento/Catalog/Model/Layer/Filter/Price.php
index a66fb15cdcbffac29561141915f95e7d816897ec..ed826e58d8ce7082df39ec270aa424bb2d9addbe 100644
--- a/app/code/Magento/Catalog/Model/Layer/Filter/Price.php
+++ b/app/code/Magento/Catalog/Model/Layer/Filter/Price.php
@@ -19,7 +19,7 @@ class Price extends \Magento\Catalog\Model\Layer\Filter\AbstractFilter
     /**
      * Resource instance
      *
-     * @var \Magento\Catalog\Model\Resource\Layer\Filter\Price
+     * @var \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price
      */
     protected $_resource;
 
@@ -67,7 +67,7 @@ class Price extends \Magento\Catalog\Model\Layer\Filter\AbstractFilter
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Model\Layer $layer
      * @param \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder
-     * @param \Magento\Catalog\Model\Resource\Layer\Filter\Price $resource
+     * @param \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price $resource
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Search\Dynamic\Algorithm $priceAlgorithm
      * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
@@ -81,7 +81,7 @@ class Price extends \Magento\Catalog\Model\Layer\Filter\AbstractFilter
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Layer $layer,
         \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder,
-        \Magento\Catalog\Model\Resource\Layer\Filter\Price $resource,
+        \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price $resource,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Search\Dynamic\Algorithm $priceAlgorithm,
         \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
diff --git a/app/code/Magento/Catalog/Model/Layer/FilterList.php b/app/code/Magento/Catalog/Model/Layer/FilterList.php
index c0d5de6825e579e81b1bd361a1109209ac9b1a75..3f317ec1fb65e42d781e54f86b89b9bb67675891 100644
--- a/app/code/Magento/Catalog/Model/Layer/FilterList.php
+++ b/app/code/Magento/Catalog/Model/Layer/FilterList.php
@@ -80,12 +80,12 @@ class FilterList
     /**
      * Create filter
      *
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
      * @param \Magento\Catalog\Model\Layer $layer
      * @return \Magento\Catalog\Model\Layer\Filter\AbstractFilter
      */
     protected function createAttributeFilter(
-        \Magento\Catalog\Model\Resource\Eav\Attribute $attribute,
+        \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute,
         \Magento\Catalog\Model\Layer $layer
     ) {
         $filterClassName = $this->getAttributeFilterClass($attribute);
@@ -100,10 +100,10 @@ class FilterList
     /**
      * Get Attribute Filter Class Name
      *
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
      * @return string
      */
-    protected function getAttributeFilterClass(\Magento\Catalog\Model\Resource\Eav\Attribute $attribute)
+    protected function getAttributeFilterClass(\Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute)
     {
         $filterClassName = $this->filterTypes[self::ATTRIBUTE_FILTER];
 
diff --git a/app/code/Magento/Catalog/Model/Layer/FilterableAttributeListInterface.php b/app/code/Magento/Catalog/Model/Layer/FilterableAttributeListInterface.php
index 2c46acb08a831431f638f391525ec6ebe9989f30..21a81abe200d8e78e1eb0519615890325c1707bc 100644
--- a/app/code/Magento/Catalog/Model/Layer/FilterableAttributeListInterface.php
+++ b/app/code/Magento/Catalog/Model/Layer/FilterableAttributeListInterface.php
@@ -11,7 +11,7 @@ interface FilterableAttributeListInterface
     /**
      * Retrieve list of filterable attributes
      *
-     * @return array|\Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @return array|\Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     public function getList();
 }
diff --git a/app/code/Magento/Catalog/Model/Layer/ItemCollectionProviderInterface.php b/app/code/Magento/Catalog/Model/Layer/ItemCollectionProviderInterface.php
index e10b7a0997cc455a04a6c01568ff728a8b7e6bba..0394097d939692f0a4ddc6cf3d4394a9935b01f0 100644
--- a/app/code/Magento/Catalog/Model/Layer/ItemCollectionProviderInterface.php
+++ b/app/code/Magento/Catalog/Model/Layer/ItemCollectionProviderInterface.php
@@ -11,7 +11,7 @@ interface ItemCollectionProviderInterface
 {
     /**
      * @param \Magento\Catalog\Model\Category $category
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     public function getCollection(\Magento\Catalog\Model\Category $category);
 }
diff --git a/app/code/Magento/Catalog/Model/Layer/Search.php b/app/code/Magento/Catalog/Model/Layer/Search.php
index 467fe6462d90046ae78a1af6324a82f71e491881..d33787a641fc168e02675ea08feadd5c176ef9d0 100644
--- a/app/code/Magento/Catalog/Model/Layer/Search.php
+++ b/app/code/Magento/Catalog/Model/Layer/Search.php
@@ -8,15 +8,16 @@ namespace Magento\Catalog\Model\Layer;
 
 use Magento\Catalog\Api\CategoryRepositoryInterface;
 use Magento\Catalog\Model\Layer;
-use Magento\Catalog\Model\Resource;
+use Magento\Catalog\Model\ResourceModel;
+use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory as AttributeCollectionFactory;
 
 class Search extends \Magento\Catalog\Model\Layer
 {
     /**
      * @param ContextInterface $context
      * @param StateFactory $layerStateFactory
-     * @param Resource\Product\Attribute\CollectionFactory $attributeCollectionFactory
-     * @param Resource\Product $catalogProduct
+     * @param AttributeCollectionFactory $attributeCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product $catalogProduct
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Registry $registry
      * @param CategoryRepositoryInterface $categoryRepository
@@ -25,8 +26,8 @@ class Search extends \Magento\Catalog\Model\Layer
     public function __construct(
         ContextInterface $context,
         StateFactory $layerStateFactory,
-        Resource\Product\Attribute\CollectionFactory $attributeCollectionFactory,
-        Resource\Product $catalogProduct,
+        AttributeCollectionFactory $attributeCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product $catalogProduct,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Registry $registry,
         CategoryRepositoryInterface $categoryRepository,
diff --git a/app/code/Magento/Catalog/Model/Layer/Search/CollectionFilter.php b/app/code/Magento/Catalog/Model/Layer/Search/CollectionFilter.php
index dfb862d4d214167701ddd1b92b1d87b7d3a1b0ed..958751ae02b38bff9fa7441ea0c347be1302da89 100644
--- a/app/code/Magento/Catalog/Model/Layer/Search/CollectionFilter.php
+++ b/app/code/Magento/Catalog/Model/Layer/Search/CollectionFilter.php
@@ -46,7 +46,7 @@ class CollectionFilter implements CollectionFilterInterface
     /**
      * Filter product collection
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @param \Magento\Catalog\Model\Category $category
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
diff --git a/app/code/Magento/Catalog/Model/Layer/Search/Filter/Attribute.php b/app/code/Magento/Catalog/Model/Layer/Search/Filter/Attribute.php
index 3033c8747db014af34db1511d36b2743e9bd144f..4ea45f1d448eb342f9f8535f3d95ea228d250a62 100644
--- a/app/code/Magento/Catalog/Model/Layer/Search/Filter/Attribute.php
+++ b/app/code/Magento/Catalog/Model/Layer/Search/Filter/Attribute.php
@@ -15,7 +15,7 @@ class Attribute extends \Magento\Catalog\Model\Layer\Filter\Attribute
     /**
      * Check whether specified attribute can be used in LN
      *
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute  $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute  $attribute
      * @return int
      */
     protected function getAttributeIsFilterable($attribute)
diff --git a/app/code/Magento/Catalog/Model/Layer/Search/FilterableAttributeList.php b/app/code/Magento/Catalog/Model/Layer/Search/FilterableAttributeList.php
index 21e79cbe28784f2f6241d90060623f9e65ee5c52..a77ce7ced3605cea4085f74bda289960f178f196 100644
--- a/app/code/Magento/Catalog/Model/Layer/Search/FilterableAttributeList.php
+++ b/app/code/Magento/Catalog/Model/Layer/Search/FilterableAttributeList.php
@@ -9,8 +9,8 @@ namespace Magento\Catalog\Model\Layer\Search;
 class FilterableAttributeList extends \Magento\Catalog\Model\Layer\Category\FilterableAttributeList
 {
     /**
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\Collection $collection
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection $collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     protected function _prepareAttributeCollection($collection)
     {
diff --git a/app/code/Magento/Catalog/Model/Layer/Search/ItemCollectionProvider.php b/app/code/Magento/Catalog/Model/Layer/Search/ItemCollectionProvider.php
index b8ba9c06c1c731d0b396d1b2dceb45982250c842..e526b353d5b2867cdaaed7de2727d890dadf69f6 100644
--- a/app/code/Magento/Catalog/Model/Layer/Search/ItemCollectionProvider.php
+++ b/app/code/Magento/Catalog/Model/Layer/Search/ItemCollectionProvider.php
@@ -6,7 +6,7 @@
 namespace Magento\Catalog\Model\Layer\Search;
 
 use Magento\Catalog\Model\Layer\ItemCollectionProviderInterface;
-use Magento\Catalog\Model\Resource\Product\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
 
 class ItemCollectionProvider implements ItemCollectionProviderInterface
 {
@@ -25,7 +25,7 @@ class ItemCollectionProvider implements ItemCollectionProviderInterface
 
     /**
      * @param \Magento\Catalog\Model\Category $category
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     public function getCollection(\Magento\Catalog\Model\Category $category)
     {
diff --git a/app/code/Magento/Catalog/Model/Plugin/Log.php b/app/code/Magento/Catalog/Model/Plugin/Log.php
index e49007c36e10cb7dacb13abb21fee3e3aa151da9..7f4a61f6451a4867e6fbd9664107963ef65ee6f0 100644
--- a/app/code/Magento/Catalog/Model/Plugin/Log.php
+++ b/app/code/Magento/Catalog/Model/Plugin/Log.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Plugin for \Magento\Customer\Model\Resource\Visitor model
+ * Plugin for \Magento\Customer\Model\ResourceModel\Visitor model
  *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
@@ -26,13 +26,13 @@ class Log
      * Catalog Product Compare Items Clean
      * after plugin for clean method
      *
-     * @param \Magento\Customer\Model\Resource\Visitor $subject
-     * @param \Magento\Customer\Model\Resource\Visitor $logResourceModel
+     * @param \Magento\Customer\Model\ResourceModel\Visitor $subject
+     * @param \Magento\Customer\Model\ResourceModel\Visitor $logResourceModel
      *
-     * @return \Magento\Customer\Model\Resource\Visitor
+     * @return \Magento\Customer\Model\ResourceModel\Visitor
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function afterClean(\Magento\Customer\Model\Resource\Visitor $subject, $logResourceModel)
+    public function afterClean(\Magento\Customer\Model\ResourceModel\Visitor $subject, $logResourceModel)
     {
         $this->_productCompareItem->clean();
         return $logResourceModel;
diff --git a/app/code/Magento/Catalog/Model/Plugin/ProductRepository/TransactionWrapper.php b/app/code/Magento/Catalog/Model/Plugin/ProductRepository/TransactionWrapper.php
index 1d940a5d7aee5e62da18e7a623ee2295b36afcea..4cdee679159ed0d4b062d9f48e0f4b862f98a382 100644
--- a/app/code/Magento/Catalog/Model/Plugin/ProductRepository/TransactionWrapper.php
+++ b/app/code/Magento/Catalog/Model/Plugin/ProductRepository/TransactionWrapper.php
@@ -10,15 +10,15 @@ namespace Magento\Catalog\Model\Plugin\ProductRepository;
 class TransactionWrapper
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product
+     * @var \Magento\Catalog\Model\ResourceModel\Product
      */
     protected $resourceModel;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Product $resourceModel
+     * @param \Magento\Catalog\Model\ResourceModel\Product $resourceModel
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\Product $resourceModel
+        \Magento\Catalog\Model\ResourceModel\Product $resourceModel
     ) {
         $this->resourceModel = $resourceModel;
     }
diff --git a/app/code/Magento/Catalog/Model/Product.php b/app/code/Magento/Catalog/Model/Product.php
index b45e8f8ff564043e1a765c6c879866f399ec29a8..99709b513ca2cf08167a07f76ac22169ec2001b7 100644
--- a/app/code/Magento/Catalog/Model/Product.php
+++ b/app/code/Magento/Catalog/Model/Product.php
@@ -10,7 +10,7 @@ use Magento\Catalog\Api\Data\ProductInterface;
 use Magento\Framework\Api\AttributeValueFactory;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\DataObject\IdentityInterface;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryInterface;
 use Magento\Catalog\Model\Product\Attribute\Backend\Media\EntryConverterPool;
 use Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryExtensionFactory;
@@ -19,13 +19,14 @@ use Magento\Catalog\Api\Data\ProductAttributeMediaGalleryEntryExtensionFactory;
  * Catalog product model
  *
  * @method Product setHasError(bool $value)
+ * @method \Magento\Catalog\Model\ResourceModel\Product getResource()
  * @method null|bool getHasError()
  * @method Product setAssociatedProductIds(array $productIds)
  * @method array getAssociatedProductIds()
  * @method Product setNewVariationsAttributeSetId(int $value)
  * @method int getNewVariationsAttributeSetId()
  * @method int getPriceType
- * @method Resource\Product\Collection getCollection()
+ * @method \Magento\Catalog\Model\ResourceModel\Product\Collection getCollection()
  * @method string getUrlKey()
  * @method Product setUrlKey(string $urlKey)
  * @method Product setRequestPath(string $requestPath)
@@ -249,7 +250,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Instance of category collection.
      *
-     * @var \Magento\Catalog\Model\Resource\Category\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Collection
      */
     protected $categoryCollection;
 
@@ -343,8 +344,8 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
      * @param Product\Type $catalogProductType
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Catalog\Helper\Product $catalogProduct
-     * @param Resource\Product $resource
-     * @param Resource\Product\Collection $resourceCollection
+     * @param \Magento\Catalog\Model\ResourceModel\Product $resource
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $resourceCollection
      * @param \Magento\Framework\Data\CollectionFactory $collectionFactory
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
@@ -382,8 +383,8 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
         Product\Type $catalogProductType,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Catalog\Helper\Product $catalogProduct,
-        Resource\Product $resource,
-        Resource\Product\Collection $resourceCollection,
+        \Magento\Catalog\Model\ResourceModel\Product $resource,
+        \Magento\Catalog\Model\ResourceModel\Product\Collection $resourceCollection,
         \Magento\Framework\Data\CollectionFactory $collectionFactory,
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
@@ -447,7 +448,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Resource\Product');
+        $this->_init('Magento\Catalog\Model\ResourceModel\Product');
     }
 
     /**
@@ -1226,7 +1227,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Retrieve collection related product
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Link\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection
      */
     public function getRelatedProductCollection()
     {
@@ -1238,7 +1239,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Retrieve collection related link
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Link\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Link\Collection
      */
     public function getRelatedLinkCollection()
     {
@@ -1287,7 +1288,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Retrieve collection up sell product
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Link\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection
      */
     public function getUpSellProductCollection()
     {
@@ -1299,7 +1300,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Retrieve collection up sell link
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Link\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Link\Collection
      */
     public function getUpSellLinkCollection()
     {
@@ -1348,7 +1349,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Retrieve collection cross sell product
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Link\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection
      */
     public function getCrossSellProductCollection()
     {
@@ -1360,7 +1361,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Retrieve collection cross sell link
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Link\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Link\Collection
      */
     public function getCrossSellLinkCollection()
     {
@@ -1532,7 +1533,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
             return $this;
         }
         $mediaGalleryAttribute = $attributes['media_gallery'];
-        /* @var $mediaGalleryAttribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+        /* @var $mediaGalleryAttribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
         $mediaGalleryAttribute->getBackend()->addImage($this, $file, $mediaAttribute, $move, $exclude);
         return $this;
     }
@@ -1894,7 +1895,7 @@ class Product extends \Magento\Catalog\Model\AbstractModel implements
     /**
      * Retrieve options collection of product
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Option\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Option\Collection
      */
     public function getProductOptionsCollection()
     {
diff --git a/app/code/Magento/Catalog/Model/Product/Action.php b/app/code/Magento/Catalog/Model/Product/Action.php
index b9ef8e4baa4a9d00cdbf0c91da47134aaa7e5d26..c3afb6a6334992e5127d9fb6cacfe2922b6e5ce9 100644
--- a/app/code/Magento/Catalog/Model/Product/Action.php
+++ b/app/code/Magento/Catalog/Model/Product/Action.php
@@ -42,7 +42,7 @@ class Action extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Catalog\Model\Indexer\Product\Eav\Processor $productEavIndexerProcessor
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -53,7 +53,7 @@ class Action extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Catalog\Model\Indexer\Product\Eav\Processor $productEavIndexerProcessor,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -71,13 +71,13 @@ class Action extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Resource\Product\Action');
+        $this->_init('Magento\Catalog\Model\ResourceModel\Product\Action');
     }
 
     /**
      * Retrieve resource instance wrapper
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Action
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Action
      */
     protected function _getResource()
     {
@@ -135,12 +135,12 @@ class Action extends \Magento\Framework\Model\AbstractModel
     /**
      * Check is attribute indexable in EAV
      *
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute|string $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute|string $attribute
      * @return bool
      */
     protected function _attributeIsIndexable($attribute)
     {
-        if (!$attribute instanceof \Magento\Catalog\Model\Resource\Eav\Attribute) {
+        if (!$attribute instanceof \Magento\Catalog\Model\ResourceModel\Eav\Attribute) {
             $attribute = $this->_eavConfig->getAttribute(\Magento\Catalog\Model\Product::ENTITY, $attribute);
         }
 
diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/AbstractMedia.php b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/AbstractMedia.php
index c3f73eb63f00c660411d13e4c02788e4dd8a2758..8b00780472e5995c921710272434518e0970cf59 100644
--- a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/AbstractMedia.php
+++ b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/AbstractMedia.php
@@ -24,7 +24,7 @@ class AbstractMedia extends \Magento\Eav\Model\Entity\Attribute\Backend\Abstract
     /**
      * Resource model
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media
      */
     protected $resourceModel;
 
@@ -62,29 +62,29 @@ class AbstractMedia extends \Magento\Eav\Model\Entity\Attribute\Backend\Abstract
     /**
      * Product factory
      *
-     * @var \Magento\Catalog\Model\Resource\ProductFactory
+     * @var \Magento\Catalog\Model\ResourceModel\ProductFactory
      */
     protected $productFactory;
 
     /**
      * Construct
      *
-     * @param \Magento\Catalog\Model\Resource\ProductFactory $productFactory
+     * @param \Magento\Catalog\Model\ResourceModel\ProductFactory $productFactory
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDb
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
      * @param \Magento\Catalog\Model\Product\Media\Config $mediaConfig
      * @param \Magento\Framework\Filesystem $filesystem
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media $resourceProductAttribute
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media $resourceProductAttribute
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\ProductFactory $productFactory,
+        \Magento\Catalog\Model\ResourceModel\ProductFactory $productFactory,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDb,
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         \Magento\Catalog\Model\Product\Media\Config $mediaConfig,
         \Magento\Framework\Filesystem $filesystem,
-        \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media $resourceProductAttribute
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media $resourceProductAttribute
     ) {
         $this->productFactory = $productFactory;
         $this->eventManager = $eventManager;
@@ -354,7 +354,7 @@ class AbstractMedia extends \Magento\Eav\Model\Entity\Attribute\Backend\Abstract
     /**
      * Retrieve resource model
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media
      */
     protected function getResource()
     {
diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php
index 86c2cf57d4b912e6909600696fe89dbdd1a2462f..8a64b612263ff7fc3a1384cb29493e1827635972 100644
--- a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php
+++ b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php
@@ -107,7 +107,7 @@ abstract class AbstractGroupPrice extends Price
     /**
      * Retrieve resource instance
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice
      */
     abstract protected function _getResource();
 
@@ -436,7 +436,7 @@ abstract class AbstractGroupPrice extends Price
     /**
      * Get resource model instance
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Backend\GroupPrice\AbstractGroupPrice
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\GroupPrice\AbstractGroupPrice
      */
     public function getResource()
     {
diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Price.php b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Price.php
index c3ebeeb4ff560cc6a113594c16fa00fae3dd9670..ed6612507d290071d86c4cee485126edf4a8e7b9 100644
--- a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Price.php
+++ b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Price.php
@@ -72,7 +72,7 @@ class Price extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
      * Set Attribute instance
      * Rewrite for redefine attribute scope
      *
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
      * @return $this
      */
     public function setAttribute($attribute)
@@ -85,15 +85,15 @@ class Price extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
     /**
      * Redefine Attribute scope
      *
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
      * @return $this
      */
     public function setScope($attribute)
     {
         if ($this->_helper->isPriceGlobal()) {
-            $attribute->setIsGlobal(\Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL);
+            $attribute->setIsGlobal(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL);
         } else {
-            $attribute->setIsGlobal(\Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE);
+            $attribute->setIsGlobal(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE);
         }
 
         return $this;
@@ -118,7 +118,7 @@ class Price extends \Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
             return $this;
         }
 
-        if ($this->getAttribute()->getIsGlobal() == \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE) {
+        if ($this->getAttribute()->getIsGlobal() == \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE) {
             $baseCurrency = $this->_config->getValue(
                 \Magento\Directory\Model\Currency::XML_PATH_CURRENCY_BASE,
                 'default'
diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Tierprice.php b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Tierprice.php
index 22581e5f949a75cb91806f8e1cc5ddfe8091563f..551ba006c27fae79cb2ff35dd781ee1033fd8e02 100644
--- a/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Tierprice.php
+++ b/app/code/Magento/Catalog/Model/Product/Attribute/Backend/Tierprice.php
@@ -16,7 +16,7 @@ class Tierprice extends \Magento\Catalog\Model\Product\Attribute\Backend\GroupPr
     /**
      * Catalog product attribute backend tierprice
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice
      */
     protected $_productAttributeBackendTierprice;
 
@@ -28,7 +28,7 @@ class Tierprice extends \Magento\Catalog\Model\Product\Attribute\Backend\GroupPr
      * @param \Magento\Framework\Locale\FormatInterface $localeFormat
      * @param \Magento\Catalog\Model\Product\Type $catalogProductType
      * @param \Magento\Customer\Api\GroupManagementInterface $groupManagement
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice $productAttributeTierprice
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice $productAttributeTierprice
      */
     public function __construct(
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
@@ -38,7 +38,7 @@ class Tierprice extends \Magento\Catalog\Model\Product\Attribute\Backend\GroupPr
         \Magento\Framework\Locale\FormatInterface $localeFormat,
         \Magento\Catalog\Model\Product\Type $catalogProductType,
         \Magento\Customer\Api\GroupManagementInterface $groupManagement,
-        \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice $productAttributeTierprice
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice $productAttributeTierprice
     ) {
         $this->_productAttributeBackendTierprice = $productAttributeTierprice;
         parent::__construct(
@@ -55,7 +55,7 @@ class Tierprice extends \Magento\Catalog\Model\Product\Attribute\Backend\GroupPr
     /**
      * Retrieve resource instance
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice
      */
     protected function _getResource()
     {
diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/DefaultAttributes.php b/app/code/Magento/Catalog/Model/Product/Attribute/DefaultAttributes.php
index fbf1a3a616d3f35d1cf54e5bd25fdf29c93d4716..c86a2cb3ab3b895323cb118bb15b342ed6f9ff06 100644
--- a/app/code/Magento/Catalog/Model/Product/Attribute/DefaultAttributes.php
+++ b/app/code/Magento/Catalog/Model/Product/Attribute/DefaultAttributes.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Model\Product\Attribute;
 
-use Magento\Eav\Model\Resource\Attribute\DefaultEntityAttributes\ProviderInterface;
+use Magento\Eav\Model\ResourceModel\Attribute\DefaultEntityAttributes\ProviderInterface;
 
 /**
  * Product default attributes provider
diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Group.php b/app/code/Magento/Catalog/Model/Product/Attribute/Group.php
index 9d6c20684620bda7d7d00dd42eab63c6e63e4aa3..ba141dc370cd451188425fcc2dd4ca3208a2680b 100644
--- a/app/code/Magento/Catalog/Model/Product/Attribute/Group.php
+++ b/app/code/Magento/Catalog/Model/Product/Attribute/Group.php
@@ -13,7 +13,7 @@ class Group extends \Magento\Eav\Model\Entity\Attribute\Group
     /**
      * Attribute collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     protected $_attributeCollectionFactory;
 
@@ -22,8 +22,8 @@ class Group extends \Magento\Eav\Model\Entity\Attribute\Group
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeCollectionFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,8 +32,8 @@ class Group extends \Magento\Eav\Model\Entity\Attribute\Group
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeCollectionFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -57,7 +57,7 @@ class Group extends \Magento\Eav\Model\Entity\Attribute\Group
     public function hasSystemAttributes()
     {
         $result = false;
-        /** @var $attributesCollection \Magento\Catalog\Model\Resource\Product\Attribute\Collection */
+        /** @var $attributesCollection \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection */
         $attributesCollection = $this->_attributeCollectionFactory->create();
         $attributesCollection->setAttributeGroupFilter($this->getId());
         foreach ($attributesCollection as $attribute) {
diff --git a/app/code/Magento/Catalog/Model/Product/Attribute/Repository.php b/app/code/Magento/Catalog/Model/Product/Attribute/Repository.php
index 1cc9d446e5428a0221cf6c5063ca224df2e37a34..2cafca07cbfe0aeb4572dab9013268820a5eef74 100644
--- a/app/code/Magento/Catalog/Model/Product/Attribute/Repository.php
+++ b/app/code/Magento/Catalog/Model/Product/Attribute/Repository.php
@@ -15,7 +15,7 @@ use Magento\Framework\Exception\NoSuchEntityException;
 class Repository implements \Magento\Catalog\Api\ProductAttributeRepositoryInterface
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Attribute
+     * @var \Magento\Catalog\Model\ResourceModel\Attribute
      */
     protected $attributeResource;
 
@@ -50,7 +50,7 @@ class Repository implements \Magento\Catalog\Api\ProductAttributeRepositoryInter
     protected $searchCriteriaBuilder;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Attribute $attributeResource
+     * @param \Magento\Catalog\Model\ResourceModel\Attribute $attributeResource
      * @param \Magento\Catalog\Helper\Product $productHelper
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Eav\Api\AttributeRepositoryInterface $eavAttributeRepository
@@ -59,7 +59,7 @@ class Repository implements \Magento\Catalog\Api\ProductAttributeRepositoryInter
      * @param \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\Attribute $attributeResource,
+        \Magento\Catalog\Model\ResourceModel\Attribute $attributeResource,
         \Magento\Catalog\Helper\Product $productHelper,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Eav\Api\AttributeRepositoryInterface $eavAttributeRepository,
diff --git a/app/code/Magento/Catalog/Model/Product/AttributeSet/Options.php b/app/code/Magento/Catalog/Model/Product/AttributeSet/Options.php
index b86f763cf4eb31f9b4064ae97e87ba9d6579d541..497b8878b137c7e162031c842e255950dfec06aa 100644
--- a/app/code/Magento/Catalog/Model/Product/AttributeSet/Options.php
+++ b/app/code/Magento/Catalog/Model/Product/AttributeSet/Options.php
@@ -13,12 +13,12 @@ class Options implements \Magento\Framework\Data\OptionSourceInterface
     protected $options;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $collectionFactory
-     * @param \Magento\Catalog\Model\Resource\Product $product
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product $product
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $collectionFactory,
-        \Magento\Catalog\Model\Resource\Product $product
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $collectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product $product
     ) {
         $this->collectionFactory = $collectionFactory;
         $this->product = $product;
diff --git a/app/code/Magento/Catalog/Model/Product/AttributeSet/SuggestedSet.php b/app/code/Magento/Catalog/Model/Product/AttributeSet/SuggestedSet.php
index 0957c87b34b27d9d4baf2f811ab7111e78446124..fae5e0a335b1be77e7d83714cccf3ec7bbeb6ccc 100644
--- a/app/code/Magento/Catalog/Model/Product/AttributeSet/SuggestedSet.php
+++ b/app/code/Magento/Catalog/Model/Product/AttributeSet/SuggestedSet.php
@@ -13,31 +13,31 @@ class SuggestedSet
     /**
      * Set collection factory
      *
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory
      */
     protected $attributeSetCollectionFactory;
 
     /**
      * Catalog resource helper
      *
-     * @var \Magento\Catalog\Model\Resource\Helper
+     * @var \Magento\Catalog\Model\ResourceModel\Helper
      */
     protected $resourceHelper;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product
+     * @var \Magento\Catalog\Model\ResourceModel\Product
      */
     protected $product;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Product $product
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attributeSetCollectionFactory
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Product $product
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attributeSetCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\Product $product,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attributeSetCollectionFactory,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper
+        \Magento\Catalog\Model\ResourceModel\Product $product,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attributeSetCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
     ) {
         $this->attributeSetCollectionFactory = $attributeSetCollectionFactory;
         $this->resourceHelper = $resourceHelper;
@@ -53,7 +53,7 @@ class SuggestedSet
     public function getSuggestedSets($labelPart)
     {
         $labelPart = $this->resourceHelper->addLikeEscape($labelPart, ['position' => 'any']);
-        /** @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection $collection */
+        /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection $collection */
         $collection = $this->attributeSetCollectionFactory->create();
         $collection->setEntityTypeFilter(
             $this->product->getTypeId()
@@ -68,7 +68,7 @@ class SuggestedSet
             'label'
         )->setOrder(
             'attribute_set_name',
-            \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection::SORT_ORDER_ASC
+            \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection::SORT_ORDER_ASC
         );
         return $collection->getData();
     }
diff --git a/app/code/Magento/Catalog/Model/Product/Compare/Item.php b/app/code/Magento/Catalog/Model/Product/Compare/Item.php
index 4fe3c3d69d0911010348666d6f1ba263c1a15c35..5ef5fca6a2cd8f1eb9e90218f11334304e188767 100644
--- a/app/code/Magento/Catalog/Model/Product/Compare/Item.php
+++ b/app/code/Magento/Catalog/Model/Product/Compare/Item.php
@@ -10,7 +10,7 @@ use Magento\Catalog\Model\Product;
 /**
  * Catalog Compare Item Model
  *
- * @method \Magento\Catalog\Model\Resource\Product\Compare\Item getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Product\Compare\Item getResource()
  * @method \Magento\Catalog\Model\Product\Compare\Item setVisitorId(int $value)
  * @method \Magento\Catalog\Model\Product\Compare\Item setCustomerId(int $value)
  * @method int getProductId()
@@ -76,7 +76,7 @@ class Item extends \Magento\Framework\Model\AbstractModel implements \Magento\Fr
      * @param \Magento\Customer\Model\Visitor $customerVisitor
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Catalog\Helper\Product\Compare $catalogProductCompare
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -87,7 +87,7 @@ class Item extends \Magento\Framework\Model\AbstractModel implements \Magento\Fr
         \Magento\Customer\Model\Visitor $customerVisitor,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Catalog\Helper\Product\Compare $catalogProductCompare,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -105,13 +105,13 @@ class Item extends \Magento\Framework\Model\AbstractModel implements \Magento\Fr
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Resource\Product\Compare\Item');
+        $this->_init('Magento\Catalog\Model\ResourceModel\Product\Compare\Item');
     }
 
     /**
      * Retrieve Resource instance
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Compare\Item
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Compare\Item
      */
     protected function _getResource()
     {
diff --git a/app/code/Magento/Catalog/Model/Product/Compare/ListCompare.php b/app/code/Magento/Catalog/Model/Product/Compare/ListCompare.php
index 4edc1cc6db9fddc4aca76ccdddf82f0125851e4b..1d810571cae0777245cd232634882eaac72cf359 100644
--- a/app/code/Magento/Catalog/Model/Product/Compare/ListCompare.php
+++ b/app/code/Magento/Catalog/Model/Product/Compare/ListCompare.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Model\Product\Compare;
 
-use Magento\Catalog\Model\Resource\Product\Compare\Item\Collection;
+use Magento\Catalog\Model\ResourceModel\Product\Compare\Item\Collection;
 
 /**
  * Product Compare List Model
@@ -31,14 +31,14 @@ class ListCompare extends \Magento\Framework\DataObject
     /**
      * Catalog product compare item
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Compare\Item
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Compare\Item
      */
     protected $_catalogProductCompareItem;
 
     /**
      * Item collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory
      */
     protected $_itemCollectionFactory;
 
@@ -53,16 +53,16 @@ class ListCompare extends \Magento\Framework\DataObject
      * Constructor
      *
      * @param \Magento\Catalog\Model\Product\Compare\ItemFactory $compareItemFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory $itemCollectionFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Compare\Item $catalogProductCompareItem
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory $itemCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Compare\Item $catalogProductCompareItem
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Customer\Model\Visitor $customerVisitor
      * @param array $data
      */
     public function __construct(
         \Magento\Catalog\Model\Product\Compare\ItemFactory $compareItemFactory,
-        \Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory $itemCollectionFactory,
-        \Magento\Catalog\Model\Resource\Product\Compare\Item $catalogProductCompareItem,
+        \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory $itemCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Compare\Item $catalogProductCompareItem,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Customer\Model\Visitor $customerVisitor,
         array $data = []
diff --git a/app/code/Magento/Catalog/Model/Product/Image.php b/app/code/Magento/Catalog/Model/Product/Image.php
index f669b73ca51ffc087c32542ecba712d02cdbb823..de0a0951e373c0a21af6cb977cf7ae17a6d0be5f 100644
--- a/app/code/Magento/Catalog/Model/Product/Image.php
+++ b/app/code/Magento/Catalog/Model/Product/Image.php
@@ -19,6 +19,9 @@ use Magento\Store\Model\Store;
  * @SuppressWarnings(PHPMD.TooManyFields)
  * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ * @method string getFile()
+ * @method string getLabel()
+ * @method string getPosition()
  */
 class Image extends \Magento\Framework\Model\AbstractModel
 {
@@ -178,7 +181,7 @@ class Image extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\View\Asset\Repository $assetRepo
      * @param \Magento\Framework\View\FileSystem $viewFileSystem
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -195,7 +198,7 @@ class Image extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\View\Asset\Repository $assetRepo,
         \Magento\Framework\View\FileSystem $viewFileSystem,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Model/Product/Image/Cache.php b/app/code/Magento/Catalog/Model/Product/Image/Cache.php
index 946d307e67a63b88d291ba43d1264cc3631ab698..f40a47fa01ff46de4e9dc246b40299a0553b3df6 100644
--- a/app/code/Magento/Catalog/Model/Product/Image/Cache.php
+++ b/app/code/Magento/Catalog/Model/Product/Image/Cache.php
@@ -7,7 +7,7 @@ namespace Magento\Catalog\Model\Product\Image;
 
 use Magento\Catalog\Helper\Image as ImageHelper;
 use Magento\Catalog\Model\Product;
-use Magento\Theme\Model\Resource\Theme\Collection as ThemeCollection;
+use Magento\Theme\Model\ResourceModel\Theme\Collection as ThemeCollection;
 use Magento\Framework\App\Area;
 use Magento\Framework\View\ConfigInterface;
 
diff --git a/app/code/Magento/Catalog/Model/Product/Link.php b/app/code/Magento/Catalog/Model/Product/Link.php
index a088df34cf7dfe0b6c87487b6516425b939cddb5..63208fe83137b4f0de78b1505738eaee12862469 100644
--- a/app/code/Magento/Catalog/Model/Product/Link.php
+++ b/app/code/Magento/Catalog/Model/Product/Link.php
@@ -5,14 +5,14 @@
  */
 namespace Magento\Catalog\Model\Product;
 
-use Magento\Catalog\Model\Resource\Product\Link\Collection;
-use Magento\Catalog\Model\Resource\Product\Link\Product\Collection as ProductCollection;
+use Magento\Catalog\Model\ResourceModel\Product\Link\Collection;
+use Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection as ProductCollection;
 
 /**
  * Catalog product link model
  *
- * @method \Magento\Catalog\Model\Resource\Product\Link _getResource()
- * @method \Magento\Catalog\Model\Resource\Product\Link getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Product\Link _getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Product\Link getResource()
  * @method int getProductId()
  * @method \Magento\Catalog\Model\Product\Link setProductId(int $value)
  * @method int getLinkedProductId()
@@ -38,14 +38,14 @@ class Link extends \Magento\Framework\Model\AbstractModel
     /**
      * Product collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Link\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Link\Product\CollectionFactory
      */
     protected $_productCollectionFactory;
 
     /**
      * Link collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Link\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Link\CollectionFactory
      */
     protected $_linkCollectionFactory;
 
@@ -57,20 +57,20 @@ class Link extends \Magento\Framework\Model\AbstractModel
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Catalog\Model\Resource\Product\Link\CollectionFactory $linkCollectionFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Link\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Link\CollectionFactory $linkCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Link\Product\CollectionFactory $productCollectionFactory
      * @param \Magento\CatalogInventory\Helper\Stock $stockHelper
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Catalog\Model\Resource\Product\Link\CollectionFactory $linkCollectionFactory,
-        \Magento\Catalog\Model\Resource\Product\Link\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Link\CollectionFactory $linkCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Link\Product\CollectionFactory $productCollectionFactory,
         \Magento\CatalogInventory\Helper\Stock $stockHelper,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -87,7 +87,7 @@ class Link extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Resource\Product\Link');
+        $this->_init('Magento\Catalog\Model\ResourceModel\Product\Link');
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Model/Product/Media/AttributeManagement.php b/app/code/Magento/Catalog/Model/Product/Media/AttributeManagement.php
index 3babcdc846db67b6416995b46e8f84692d4e9481..40672b0cff4819a7ac56f8d376b1e17ce067f2f6 100644
--- a/app/code/Magento/Catalog/Model/Product/Media/AttributeManagement.php
+++ b/app/code/Magento/Catalog/Model/Product/Media/AttributeManagement.php
@@ -12,7 +12,7 @@ use Magento\Catalog\Model\Product;
 class AttributeManagement implements ProductMediaAttributeManagementInterface
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     private $collectionFactory;
 
@@ -22,11 +22,11 @@ class AttributeManagement implements ProductMediaAttributeManagementInterface
     private $storeManager;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $collectionFactory
      * @param StoreManagerInterface $storeManager
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $collectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $collectionFactory,
         StoreManagerInterface $storeManager
     ) {
         $this->collectionFactory = $collectionFactory;
@@ -38,7 +38,7 @@ class AttributeManagement implements ProductMediaAttributeManagementInterface
      */
     public function getList($attributeSetName)
     {
-        /** @var \Magento\Catalog\Model\Resource\Product\Attribute\Collection $collection */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection $collection */
         $collection = $this->collectionFactory->create();
         $collection->setAttributeSetFilterBySetName($attributeSetName, Product::ENTITY);
         $collection->setFrontendInputTypeFilter('media_image');
diff --git a/app/code/Magento/Catalog/Model/Product/Option.php b/app/code/Magento/Catalog/Model/Product/Option.php
index f6364057e84a1c0ac82ce5d49f041cbeebbf43cd..8b981d6f0b86c19e3102ac34e0ccc0a69ae23a6e 100644
--- a/app/code/Magento/Catalog/Model/Product/Option.php
+++ b/app/code/Magento/Catalog/Model/Product/Option.php
@@ -10,14 +10,14 @@ namespace Magento\Catalog\Model\Product;
 
 use Magento\Catalog\Api\Data\ProductCustomOptionValuesInterface;
 use Magento\Catalog\Model\Product;
-use Magento\Catalog\Model\Resource\Product\Option\Value\Collection;
+use Magento\Catalog\Model\ResourceModel\Product\Option\Value\Collection;
 use Magento\Catalog\Pricing\Price\BasePrice;
 use Magento\Framework\Exception\LocalizedException;
 
 /**
  * Catalog product option model
  *
- * @method \Magento\Catalog\Model\Resource\Product\Option getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Product\Option getResource()
  * @method int getProductId()
  * @method \Magento\Catalog\Model\Product\Option setProductId(int $value)
  *
@@ -122,7 +122,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      * @param Option\Type\Factory $optionFactory
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param Option\Validator\Pool $validatorPool
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -136,7 +136,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
         \Magento\Catalog\Model\Product\Option\Type\Factory $optionFactory,
         \Magento\Framework\Stdlib\StringUtils $string,
         Option\Validator\Pool $validatorPool,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -158,7 +158,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _getResource()
     {
@@ -170,7 +170,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Resource\Product\Option');
+        $this->_init('Magento\Catalog\Model\ResourceModel\Product\Option');
         parent::_construct();
     }
 
@@ -476,7 +476,7 @@ class Option extends \Magento\Framework\Model\AbstractExtensibleModel
      * Get Product Option Collection
      *
      * @param Product $product
-     * @return \Magento\Catalog\Model\Resource\Product\Option\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Option\Collection
      */
     public function getProductOptionCollection(Product $product)
     {
diff --git a/app/code/Magento/Catalog/Model/Product/Option/Repository.php b/app/code/Magento/Catalog/Model/Product/Option/Repository.php
index 159e6eac1884b3f8cd6c1a404e6d80f14c23407d..6ad214a2734f335370c8561bee51ba469a46b06e 100644
--- a/app/code/Magento/Catalog/Model/Product/Option/Repository.php
+++ b/app/code/Magento/Catalog/Model/Product/Option/Repository.php
@@ -17,7 +17,7 @@ class Repository implements \Magento\Catalog\Api\ProductCustomOptionRepositoryIn
     protected $productRepository;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Option
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Option
      */
     protected $optionResource;
 
@@ -28,12 +28,12 @@ class Repository implements \Magento\Catalog\Api\ProductCustomOptionRepositoryIn
 
     /**
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
-     * @param \Magento\Catalog\Model\Resource\Product\Option $optionResource
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Option $optionResource
      * @param Converter $converter
      */
     public function __construct(
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
-        \Magento\Catalog\Model\Resource\Product\Option $optionResource,
+        \Magento\Catalog\Model\ResourceModel\Product\Option $optionResource,
         \Magento\Catalog\Model\Product\Option\Converter $converter
     ) {
         $this->productRepository = $productRepository;
diff --git a/app/code/Magento/Catalog/Model/Product/Option/Value.php b/app/code/Magento/Catalog/Model/Product/Option/Value.php
index e15d16c77a8a6c6ce47f02b5a38abaf857167bb0..863c3a374b1cd0e738415fd9b5b0ac65d863a8df 100644
--- a/app/code/Magento/Catalog/Model/Product/Option/Value.php
+++ b/app/code/Magento/Catalog/Model/Product/Option/Value.php
@@ -15,8 +15,8 @@ use Magento\Catalog\Model\Product\Option;
 /**
  * Catalog product option select type model
  *
- * @method \Magento\Catalog\Model\Resource\Product\Option\Value _getResource()
- * @method \Magento\Catalog\Model\Resource\Product\Option\Value getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Product\Option\Value _getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Product\Option\Value getResource()
  * @method int getOptionId()
  * @method \Magento\Catalog\Model\Product\Option\Value setOptionId(int $value)
  *
@@ -58,23 +58,23 @@ class Value extends AbstractModel implements \Magento\Catalog\Api\Data\ProductCu
     /**
      * Value collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Option\Value\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory
      */
     protected $_valueCollectionFactory;
 
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Catalog\Model\Resource\Product\Option\Value\CollectionFactory $valueCollectionFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $valueCollectionFactory
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Catalog\Model\Resource\Product\Option\Value\CollectionFactory $valueCollectionFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $valueCollectionFactory,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -93,7 +93,7 @@ class Value extends AbstractModel implements \Magento\Catalog\Api\Data\ProductCu
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Resource\Product\Option\Value');
+        $this->_init('Magento\Catalog\Model\ResourceModel\Product\Option\Value');
     }
 
     /**
@@ -242,7 +242,7 @@ class Value extends AbstractModel implements \Magento\Catalog\Api\Data\ProductCu
      * Enter description here...
      *
      * @param Option $option
-     * @return \Magento\Catalog\Model\Resource\Product\Option\Value\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Option\Value\Collection
      */
     public function getValuesCollection(Option $option)
     {
@@ -260,7 +260,7 @@ class Value extends AbstractModel implements \Magento\Catalog\Api\Data\ProductCu
      * @param array $optionIds
      * @param int $option_id
      * @param int $store_id
-     * @return \Magento\Catalog\Model\Resource\Product\Option\Value\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Option\Value\Collection
      */
     public function getValuesByOption($optionIds, $option_id, $store_id)
     {
diff --git a/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php b/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php
index 98c88a5bc453c82e3342ad0fff262d3ea2d8b900..536af8b74bfd7e8990a20457d8ef154a49b47a08 100644
--- a/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php
+++ b/app/code/Magento/Catalog/Model/Product/Type/AbstractType.php
@@ -310,7 +310,7 @@ abstract class AbstractType
      *
      * @param  int $attributeId
      * @param  \Magento\Catalog\Model\Product $product
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute|null
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute|null
      */
     public function getAttributeById($attributeId, $product)
     {
diff --git a/app/code/Magento/Catalog/Model/Product/Type/Price.php b/app/code/Magento/Catalog/Model/Product/Type/Price.php
index 102b2d80dbcb1c7452ce7807ef7ec7168a6157f1..1ffe5b041834820573aca609f8524bea6e720d9a 100644
--- a/app/code/Magento/Catalog/Model/Product/Type/Price.php
+++ b/app/code/Magento/Catalog/Model/Product/Type/Price.php
@@ -56,7 +56,7 @@ class Price
     /**
      * Rule factory
      *
-     * @var \Magento\CatalogRule\Model\Resource\RuleFactory
+     * @var \Magento\CatalogRule\Model\ResourceModel\RuleFactory
      */
     protected $_ruleFactory;
 
@@ -82,7 +82,7 @@ class Price
 
     /**
      * Price constructor.
-     * @param \Magento\CatalogRule\Model\Resource\RuleFactory $ruleFactory
+     * @param \Magento\CatalogRule\Model\ResourceModel\RuleFactory $ruleFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Customer\Model\Session $customerSession
@@ -95,7 +95,7 @@ class Price
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
-        \Magento\CatalogRule\Model\Resource\RuleFactory $ruleFactory,
+        \Magento\CatalogRule\Model\ResourceModel\RuleFactory $ruleFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Customer\Model\Session $customerSession,
diff --git a/app/code/Magento/Catalog/Model/Product/Visibility.php b/app/code/Magento/Catalog/Model/Product/Visibility.php
index 9ae183c6a4172876ba05058fde29e2b2103814a1..95552ba0a7a9f61947028d33881e266d65b2e0d2 100644
--- a/app/code/Magento/Catalog/Model/Product/Visibility.php
+++ b/app/code/Magento/Catalog/Model/Product/Visibility.php
@@ -27,25 +27,25 @@ class Visibility extends \Magento\Framework\DataObject implements OptionSourceIn
     /**
      * Reference to the attribute instance
      *
-     * @var \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     protected $_attribute;
 
     /**
      * Eav entity attribute
      *
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute
      */
     protected $_eavEntityAttribute;
 
     /**
      * Construct
      *
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute $eavEntityAttribute
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute $eavEntityAttribute
      * @param array $data
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute $eavEntityAttribute,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute $eavEntityAttribute,
         array $data = []
     ) {
         $this->_eavEntityAttribute = $eavEntityAttribute;
@@ -180,7 +180,7 @@ class Visibility extends \Magento\Framework\DataObject implements OptionSourceIn
     /**
      * Set attribute instance
      *
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
      * @return $this
      */
     public function setAttribute($attribute)
@@ -192,7 +192,7 @@ class Visibility extends \Magento\Framework\DataObject implements OptionSourceIn
     /**
      * Get attribute instance
      *
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     public function getAttribute()
     {
diff --git a/app/code/Magento/Catalog/Model/Product/Website.php b/app/code/Magento/Catalog/Model/Product/Website.php
index 8df811f7dba80d5744b04676f317de06f28b0803..59bc1bb0d84c32f24e9f349212c5d01ccd6a7f5a 100644
--- a/app/code/Magento/Catalog/Model/Product/Website.php
+++ b/app/code/Magento/Catalog/Model/Product/Website.php
@@ -9,8 +9,8 @@
 /**
  * Catalog Product Website Model
  *
- * @method \Magento\Catalog\Model\Resource\Product\Website _getResource()
- * @method \Magento\Catalog\Model\Resource\Product\Website getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Product\Website _getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Product\Website getResource()
  * @method int getWebsiteId()
  * @method \Magento\Catalog\Model\Product\Website setWebsiteId(int $value)
  *
@@ -27,13 +27,13 @@ class Website extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Resource\Product\Website');
+        $this->_init('Magento\Catalog\Model\ResourceModel\Product\Website');
     }
 
     /**
      * Retrieve Resource instance wrapper
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Website
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Website
      */
     protected function _getResource()
     {
diff --git a/app/code/Magento/Catalog/Model/ProductAttributeGroupRepository.php b/app/code/Magento/Catalog/Model/ProductAttributeGroupRepository.php
index 980843c9df25199d036cb861c225cfc5402d9f18..8b49018b856fa6df619589460fba3d2a6cb04887 100644
--- a/app/code/Magento/Catalog/Model/ProductAttributeGroupRepository.php
+++ b/app/code/Magento/Catalog/Model/ProductAttributeGroupRepository.php
@@ -22,18 +22,18 @@ class ProductAttributeGroupRepository implements \Magento\Catalog\Api\ProductAtt
     protected $groupFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Group
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group
      */
     protected $groupResource;
 
     /**
      * @param \Magento\Eav\Api\AttributeGroupRepositoryInterface $groupRepository
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Group $groupResource
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group $groupResource
      * @param Product\Attribute\GroupFactory $groupFactory
      */
     public function __construct(
         \Magento\Eav\Api\AttributeGroupRepositoryInterface $groupRepository,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Group $groupResource,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group $groupResource,
         \Magento\Catalog\Model\Product\Attribute\GroupFactory $groupFactory
     ) {
         $this->groupRepository = $groupRepository;
diff --git a/app/code/Magento/Catalog/Model/ProductManagement.php b/app/code/Magento/Catalog/Model/ProductManagement.php
index 2d98303a3115a63f8ecb26651177c2a4fd23f6af..5d1cf40c0e6ba67dae2787a2c816b0644283d902 100644
--- a/app/code/Magento/Catalog/Model/ProductManagement.php
+++ b/app/code/Magento/Catalog/Model/ProductManagement.php
@@ -7,7 +7,7 @@ namespace Magento\Catalog\Model;
 
 use Magento\Catalog\Api\ProductManagementInterface;
 use Magento\Catalog\Model\Product\Attribute\Source\Status;
-use Magento\Catalog\Model\Resource\Product\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
 
 class ProductManagement implements ProductManagementInterface
 {
@@ -30,7 +30,7 @@ class ProductManagement implements ProductManagementInterface
     public function getCount($status = null)
     {
         $products = $this->productsFactory->create();
-        /** @var \Magento\Catalog\Model\Resource\Product\Collection $products */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $products */
         switch ($status) {
             case Status::STATUS_ENABLED:
                 $products->addAttributeToFilter('status', Status::STATUS_ENABLED);
diff --git a/app/code/Magento/Catalog/Model/ProductRepository.php b/app/code/Magento/Catalog/Model/ProductRepository.php
index 4355e93eddc1b3b7a19e11e049090d88a53d3485..ccd62fb3d33614e94a4754a212834b25f50d7c86 100644
--- a/app/code/Magento/Catalog/Model/ProductRepository.php
+++ b/app/code/Magento/Catalog/Model/ProductRepository.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Model;
 
 use Magento\Catalog\Api\Data\ProductInterface;
 use Magento\Catalog\Model\Product\Gallery\MimeTypeExtensionMap;
-use Magento\Catalog\Model\Resource\Product\Collection;
+use Magento\Catalog\Model\ResourceModel\Product\Collection;
 use Magento\Framework\Api\Data\ImageContentInterface;
 use Magento\Framework\Api\Data\ImageContentInterfaceFactory;
 use Magento\Framework\Api\ImageContentValidatorInterface;
@@ -60,12 +60,12 @@ class ProductRepository implements \Magento\Catalog\Api\ProductRepositoryInterfa
     protected $filterBuilder;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $collectionFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product
+     * @var \Magento\Catalog\Model\ResourceModel\Product
      */
     protected $resourceModel;
 
@@ -138,10 +138,10 @@ class ProductRepository implements \Magento\Catalog\Api\ProductRepositoryInterfa
      * @param ProductFactory $productFactory
      * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $initializationHelper
      * @param \Magento\Catalog\Api\Data\ProductSearchResultsInterfaceFactory $searchResultsFactory
-     * @param Resource\Product\CollectionFactory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory
      * @param \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
      * @param \Magento\Catalog\Api\ProductAttributeRepositoryInterface $attributeRepository
-     * @param Resource\Product $resourceModel
+     * @param \Magento\Catalog\Model\ResourceModel\Product $resourceModel
      * @param Product\Initialization\Helper\ProductLinks $linkInitializer
      * @param Product\LinkTypeProvider $linkTypeProvider
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
@@ -153,7 +153,6 @@ class ProductRepository implements \Magento\Catalog\Api\ProductRepositoryInterfa
      * @param ImageContentValidatorInterface $contentValidator
      * @param ImageContentInterfaceFactory $contentFactory
      * @param MimeTypeExtensionMap $mimeTypeExtensionMap
-     * @param \Magento\Eav\Model\Config $eavConfig
      * @param ImageProcessorInterface $imageProcessor
      * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -162,10 +161,10 @@ class ProductRepository implements \Magento\Catalog\Api\ProductRepositoryInterfa
         ProductFactory $productFactory,
         \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $initializationHelper,
         \Magento\Catalog\Api\Data\ProductSearchResultsInterfaceFactory $searchResultsFactory,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $collectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory,
         \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder,
         \Magento\Catalog\Api\ProductAttributeRepositoryInterface $attributeRepository,
-        \Magento\Catalog\Model\Resource\Product $resourceModel,
+        \Magento\Catalog\Model\ResourceModel\Product $resourceModel,
         \Magento\Catalog\Model\Product\Initialization\Helper\ProductLinks $linkInitializer,
         \Magento\Catalog\Model\Product\LinkTypeProvider $linkTypeProvider,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
@@ -635,7 +634,7 @@ class ProductRepository implements \Magento\Catalog\Api\ProductRepositoryInterfa
      */
     public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria)
     {
-        /** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
         $collection = $this->collectionFactory->create();
         $this->extensionAttributesJoinProcessor->process($collection);
 
diff --git a/app/code/Magento/Catalog/Model/Resource/Helper.php b/app/code/Magento/Catalog/Model/Resource/Helper.php
deleted file mode 100644
index e68cfadb2db1b3a32e8bb9397ad528da44f12950..0000000000000000000000000000000000000000
--- a/app/code/Magento/Catalog/Model/Resource/Helper.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Catalog\Model\Resource;
-
-/**
- * Eav Mysql resource helper model
- */
-class Helper extends \Magento\Eav\Model\Resource\Helper
-{
-    /**
-     * @param \Magento\Framework\App\Resource $resource
-     * @param string $modulePrefix
-     */
-    public function __construct(\Magento\Framework\App\Resource $resource, $modulePrefix = 'Magento_Catalog')
-    {
-        parent::__construct($resource, $modulePrefix);
-    }
-}
diff --git a/app/code/Magento/Catalog/Model/Resource/AbstractResource.php b/app/code/Magento/Catalog/Model/ResourceModel/AbstractResource.php
similarity index 99%
rename from app/code/Magento/Catalog/Model/Resource/AbstractResource.php
rename to app/code/Magento/Catalog/Model/ResourceModel/AbstractResource.php
index 82d796e5ad58f9d9e7f9386faf13c58255ca40ff..ba45ab251121d872ae44da5cc53b312681dd834d 100644
--- a/app/code/Magento/Catalog/Model/Resource/AbstractResource.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/AbstractResource.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Catalog\Model\Resource;
+namespace Magento\Catalog\Model\ResourceModel;
 
 use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
 
@@ -61,7 +61,7 @@ abstract class AbstractResource extends \Magento\Eav\Model\Entity\AbstractEntity
      */
     protected function _getDefaultAttributeModel()
     {
-        return 'Magento\Catalog\Model\Resource\Eav\Attribute';
+        return 'Magento\Catalog\Model\ResourceModel\Eav\Attribute';
     }
 
     /**
@@ -78,7 +78,7 @@ abstract class AbstractResource extends \Magento\Eav\Model\Entity\AbstractEntity
      * Check whether the attribute is Applicable to the object
      *
      * @param \Magento\Framework\DataObject $object
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
      * @return boolean
      */
     protected function _isApplicableAttribute($object, $attribute)
diff --git a/app/code/Magento/Catalog/Model/Resource/Attribute.php b/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php
similarity index 90%
rename from app/code/Magento/Catalog/Model/Resource/Attribute.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Attribute.php
index 637b3095d9ce65ea3f1f973c3214041b39b87b22..dd522da5888643ed495a7c2e1039d828400cc04c 100644
--- a/app/code/Magento/Catalog/Model/Resource/Attribute.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Attribute.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource;
+namespace Magento\Catalog\Model\ResourceModel;
 
 use Magento\Catalog\Model\Attribute\LockValidatorInterface;
 
@@ -12,7 +12,7 @@ use Magento\Catalog\Model\Attribute\LockValidatorInterface;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Attribute extends \Magento\Eav\Model\Resource\Entity\Attribute
+class Attribute extends \Magento\Eav\Model\ResourceModel\Entity\Attribute
 {
     /**
      * Eav config
@@ -27,17 +27,17 @@ class Attribute extends \Magento\Eav\Model\Resource\Entity\Attribute
     protected $attrLockValidator;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Eav\Model\Resource\Entity\Type $eavEntityType
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Type $eavEntityType
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param LockValidatorInterface $lockValidator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Eav\Model\Resource\Entity\Type $eavEntityType,
+        \Magento\Eav\Model\ResourceModel\Entity\Type $eavEntityType,
         \Magento\Eav\Model\Config $eavConfig,
         LockValidatorInterface $lockValidator,
         $connectionName = null
@@ -86,7 +86,7 @@ class Attribute extends \Magento\Eav\Model\Resource\Entity\Attribute
 
         if ($object->isScopeGlobal() && isset(
             $origData['is_global']
-        ) && \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL != $origData['is_global']
+        ) && \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL != $origData['is_global']
         ) {
             $attributeStoreIds = array_keys($this->_storeManager->getStores());
             if (!empty($attributeStoreIds)) {
diff --git a/app/code/Magento/Catalog/Model/Resource/Category.php b/app/code/Magento/Catalog/Model/ResourceModel/Category.php
similarity index 97%
rename from app/code/Magento/Catalog/Model/Resource/Category.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Category.php
index bcd7132bb9807f86308586b866610672fdce16d8..c7f00697fbf392557eb1c6e4143e847c6929aac9 100644
--- a/app/code/Magento/Catalog/Model/Resource/Category.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category.php
@@ -9,7 +9,7 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Catalog\Model\Resource;
+namespace Magento\Catalog\Model\ResourceModel;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -54,14 +54,14 @@ class Category extends AbstractResource
     /**
      * Category collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Category\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory
      */
     protected $_categoryCollectionFactory;
 
     /**
      * Category tree factory
      *
-     * @var \Magento\Catalog\Model\Resource\Category\TreeFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Category\TreeFactory
      */
     protected $_categoryTreeFactory;
 
@@ -79,8 +79,8 @@ class Category extends AbstractResource
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Factory $modelFactory,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Catalog\Model\Resource\Category\TreeFactory $categoryTreeFactory,
-        \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Category\TreeFactory $categoryTreeFactory,
+        \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
         $data = []
     ) {
         parent::__construct(
@@ -623,12 +623,12 @@ class Category extends AbstractResource
      * @param boolean|string $sorted
      * @param boolean $asCollection
      * @param boolean $toLoad
-     * @return \Magento\Framework\Data\Tree\Node\Collection|\Magento\Catalog\Model\Resource\Category\Collection
+     * @return \Magento\Framework\Data\Tree\Node\Collection|\Magento\Catalog\Model\ResourceModel\Category\Collection
      */
     public function getCategories($parent, $recursionLevel = 0, $sorted = false, $asCollection = false, $toLoad = true)
     {
         $tree = $this->_categoryTreeFactory->create();
-        /* @var $tree \Magento\Catalog\Model\Resource\Category\Tree */
+        /* @var $tree \Magento\Catalog\Model\ResourceModel\Category\Tree */
         $nodes = $tree->loadNode($parent)->loadChildren($recursionLevel)->getChildren();
 
         $tree->addCollectionData(null, $sorted, $parent, $toLoad, true);
@@ -648,7 +648,7 @@ class Category extends AbstractResource
     public function getParentCategories($category)
     {
         $pathIds = array_reverse(explode(',', $category->getPathInStore()));
-        /** @var \Magento\Catalog\Model\Resource\Category\Collection $categories */
+        /** @var \Magento\Catalog\Model\ResourceModel\Category\Collection $categories */
         $categories = $this->_categoryCollectionFactory->create();
         return $categories->setStore(
             $this->_storeManager->getStore()
@@ -709,12 +709,12 @@ class Category extends AbstractResource
      * Return child categories
      *
      * @param \Magento\Catalog\Model\Category $category
-     * @return \Magento\Catalog\Model\Resource\Category\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Category\Collection
      */
     public function getChildrenCategories($category)
     {
         $collection = $category->getCollection();
-        /* @var $collection \Magento\Catalog\Model\Resource\Category\Collection */
+        /* @var $collection \Magento\Catalog\Model\ResourceModel\Category\Collection */
         $collection->addAttributeToSelect(
             'url_key'
         )->addAttributeToSelect(
diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Collection.php
similarity index 88%
rename from app/code/Magento/Catalog/Model/Resource/Category/Attribute/Collection.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Collection.php
index 20fd3011b8795e684397acebba3aff992614cd05..6583e3e60b25e1fef63cf6bee0fb414b772cc20f 100644
--- a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Category\Attribute;
+namespace Magento\Catalog\Model\ResourceModel\Category\Attribute;
 
 /**
  * Catalog category EAV additional attribute resource collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
 {
     /**
      * Entity factory
@@ -27,7 +27,7 @@ class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\Collection
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -37,7 +37,7 @@ class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\Collection
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_eavEntityFactory = $eavEntityFactory;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $eavConfig, $connection, $resource);
diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Frontend/Image.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Frontend/Image.php
similarity index 94%
rename from app/code/Magento/Catalog/Model/Resource/Category/Attribute/Frontend/Image.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Frontend/Image.php
index 0bfaf7fce2ef6fef0ae6e4ccfd9a02040f613f8c..47712f8003d4dcaafc48a6c5911a15f690023c51 100644
--- a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Frontend/Image.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Frontend/Image.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Category\Attribute\Frontend;
+namespace Magento\Catalog\Model\ResourceModel\Category\Attribute\Frontend;
 
 /**
  * Category image attribute frontend
diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Layout.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Source/Layout.php
similarity index 93%
rename from app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Layout.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Source/Layout.php
index e55f62b46e7f82d3aade4b70c16c2a394db96ef0..b3c6f9b8ed9d6c640299c01993d1e39a4b2c2ffe 100644
--- a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Layout.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Source/Layout.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Category\Attribute\Source;
+namespace Magento\Catalog\Model\ResourceModel\Category\Attribute\Source;
 
 /**
  * Catalog category landing page attribute source
diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Page.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Source/Page.php
similarity index 72%
rename from app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Page.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Source/Page.php
index 6e6b4406d71d4ac4d6d1fcd8f71a97bd32b8f0b7..37c9611297dbd5893b01f6be5d745f68dbe6ea92 100644
--- a/app/code/Magento/Catalog/Model/Resource/Category/Attribute/Source/Page.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Attribute/Source/Page.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Category\Attribute\Source;
+namespace Magento\Catalog\Model\ResourceModel\Category\Attribute\Source;
 
 /**
  * Catalog category landing page attribute source
@@ -15,16 +15,16 @@ class Page extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource
     /**
      * Block collection factory
      *
-     * @var \Magento\Cms\Model\Resource\Block\CollectionFactory
+     * @var \Magento\Cms\Model\ResourceModel\Block\CollectionFactory
      */
     protected $_blockCollectionFactory;
 
     /**
      * Construct
      *
-     * @param \Magento\Cms\Model\Resource\Block\CollectionFactory $blockCollectionFactory
+     * @param \Magento\Cms\Model\ResourceModel\Block\CollectionFactory $blockCollectionFactory
      */
-    public function __construct(\Magento\Cms\Model\Resource\Block\CollectionFactory $blockCollectionFactory)
+    public function __construct(\Magento\Cms\Model\ResourceModel\Block\CollectionFactory $blockCollectionFactory)
     {
         $this->_blockCollectionFactory = $blockCollectionFactory;
     }
diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Collection.php
similarity index 98%
rename from app/code/Magento/Catalog/Model/Resource/Category/Collection.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Category/Collection.php
index d7126bdab2c390148bd9ebecab27f6bdac25f51e..cea7609c6b9185847d191a4867ad607e86b27e57 100644
--- a/app/code/Magento/Catalog/Model/Resource/Category/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Category;
+namespace Magento\Catalog\Model\ResourceModel\Category;
 
 use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
 
@@ -12,7 +12,7 @@ use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractCollection
+class Collection extends \Magento\Catalog\Model\ResourceModel\Collection\AbstractCollection
 {
     /**
      * Event prefix
@@ -63,7 +63,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Category', 'Magento\Catalog\Model\Resource\Category');
+        $this->_init('Magento\Catalog\Model\Category', 'Magento\Catalog\Model\ResourceModel\Category');
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Collection/Factory.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Collection/Factory.php
similarity index 78%
rename from app/code/Magento/Catalog/Model/Resource/Category/Collection/Factory.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Category/Collection/Factory.php
index 332637d9b30480426834dbcd93c7edcd5d464e91..49e1ccec6568c693fb986b2ab889864eea14defb 100644
--- a/app/code/Magento/Catalog/Model/Resource/Category/Collection/Factory.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Collection/Factory.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Category\Collection;
+namespace Magento\Catalog\Model\ResourceModel\Category\Collection;
 
 class Factory
 {
@@ -23,10 +23,10 @@ class Factory
     /**
      * Return newly created instance of the category collection
      *
-     * @return \Magento\Catalog\Model\Resource\Category\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Category\Collection
      */
     public function create()
     {
-        return $this->_objectManager->create('Magento\Catalog\Model\Resource\Category\Collection');
+        return $this->_objectManager->create('Magento\Catalog\Model\ResourceModel\Category\Collection');
     }
 }
diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Flat.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php
similarity index 97%
rename from app/code/Magento/Catalog/Model/Resource/Category/Flat.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php
index 645bd4478b93fa6816ed51c2e159228798c7968a..82000fb03d1703e6e34dfeb854e6d1ad6aca80ee 100644
--- a/app/code/Magento/Catalog/Model/Resource/Category/Flat.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Category;
+namespace Magento\Catalog\Model\ResourceModel\Category;
 
 use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
 
@@ -13,7 +13,7 @@ use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
  * @SuppressWarnings(PHPMD.LongVariable)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Flat extends \Magento\Indexer\Model\Resource\AbstractResource
+class Flat extends \Magento\Indexer\Model\ResourceModel\AbstractResource
 {
     /**
      * Store id
@@ -67,7 +67,7 @@ class Flat extends \Magento\Indexer\Model\Resource\AbstractResource
     /**
      * Category collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Category\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory
      */
     protected $_categoryCollectionFactory;
 
@@ -81,7 +81,7 @@ class Flat extends \Magento\Indexer\Model\Resource\AbstractResource
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory
      * @param CollectionFactory $categoryCollectionFactory
@@ -91,10 +91,10 @@ class Flat extends \Magento\Indexer\Model\Resource\AbstractResource
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         \Magento\Catalog\Model\CategoryFactory $categoryFactory,
-        \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Config $catalogConfig,
         \Magento\Framework\Event\ManagerInterface $eventManager,
diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Flat/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat/Collection.php
similarity index 96%
rename from app/code/Magento/Catalog/Model/Resource/Category/Flat/Collection.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Category/Flat/Collection.php
index da9586323814c4c372a22770a2db0b0ea782d9d7..83a09410278b83c48de33b8b8b5d70b986fc0723 100644
--- a/app/code/Magento/Catalog/Model/Resource/Category/Flat/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Flat/Collection.php
@@ -3,13 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Category\Flat;
+namespace Magento\Catalog\Model\ResourceModel\Category\Flat;
 
 use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
 use Magento\Framework\Data\Collection\EntityFactory;
 use Magento\Framework\Event\ManagerInterface;
 use Magento\Framework\Data\Collection\Db\FetchStrategyInterface;
-use Magento\Framework\Model\Resource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 use Psr\Log\LoggerInterface as Logger;
 use Magento\Store\Model\StoreManagerInterface;
 
@@ -18,7 +18,7 @@ use Magento\Store\Model\StoreManagerInterface;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Event prefix
@@ -77,7 +77,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Category', 'Magento\Catalog\Model\Resource\Category\Flat');
+        $this->_init('Magento\Catalog\Model\Category', 'Magento\Catalog\Model\ResourceModel\Category\Flat');
     }
 
     /**
@@ -274,7 +274,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     /**
      * Retrieve resource instance
      *
-     * @return \Magento\Catalog\Model\Resource\Category\Flat
+     * @return \Magento\Catalog\Model\ResourceModel\Category\Flat
      */
     public function getResource()
     {
diff --git a/app/code/Magento/Catalog/Model/Resource/Category/Tree.php b/app/code/Magento/Catalog/Model/ResourceModel/Category/Tree.php
similarity index 96%
rename from app/code/Magento/Catalog/Model/Resource/Category/Tree.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Category/Tree.php
index 043d688362a3424a29885d4153dadc4a16229644..0847a8e35e677c5748d1f13cabf640f64f4459fb 100644
--- a/app/code/Magento/Catalog/Model/Resource/Category/Tree.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Category/Tree.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Category;
+namespace Magento\Catalog\Model\ResourceModel\Category;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -29,7 +29,7 @@ class Tree extends \Magento\Framework\Data\Tree\Dbp
     private $_attributeConfig;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\Collection\Factory
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Collection\Factory
      */
     private $_collectionFactory;
 
@@ -62,7 +62,7 @@ class Tree extends \Magento\Framework\Data\Tree\Dbp
     protected $_storeId = null;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_coreResource;
 
@@ -83,29 +83,29 @@ class Tree extends \Magento\Framework\Data\Tree\Dbp
     /**
      * Catalog category
      *
-     * @var \Magento\Catalog\Model\Resource\Category
+     * @var \Magento\Catalog\Model\ResourceModel\Category
      */
     protected $_catalogCategory;
 
     /**
      * Construct
      *
-     * @param \Magento\Catalog\Model\Resource\Category $catalogCategory
+     * @param \Magento\Catalog\Model\ResourceModel\Category $catalogCategory
      * @param \Magento\Framework\App\CacheInterface $cache
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Catalog\Model\Attribute\Config $attributeConfig
-     * @param \Magento\Catalog\Model\Resource\Category\Collection\Factory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Category\Collection\Factory $collectionFactory
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\Category $catalogCategory,
+        \Magento\Catalog\Model\ResourceModel\Category $catalogCategory,
         \Magento\Framework\App\CacheInterface $cache,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Catalog\Model\Attribute\Config $attributeConfig,
-        \Magento\Catalog\Model\Resource\Category\Collection\Factory $collectionFactory
+        \Magento\Catalog\Model\ResourceModel\Category\Collection\Factory $collectionFactory
     ) {
         $this->_catalogCategory = $catalogCategory;
         $this->_cache = $cache;
diff --git a/app/code/Magento/Catalog/Model/Resource/Collection/AbstractCollection.php b/app/code/Magento/Catalog/Model/ResourceModel/Collection/AbstractCollection.php
similarity index 96%
rename from app/code/Magento/Catalog/Model/Resource/Collection/AbstractCollection.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Collection/AbstractCollection.php
index f90e3e389e012fd932407dbafec7ffbcac31e4ee..004c041108411b224bf3ea4d300d70f5eaa8917f 100644
--- a/app/code/Magento/Catalog/Model/Resource/Collection/AbstractCollection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Collection/AbstractCollection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Collection;
+namespace Magento\Catalog\Model\ResourceModel\Collection;
 
 /**
  * Catalog EAV collection resource abstract model
@@ -34,9 +34,9 @@ class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\AbstractCo
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Eav\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
@@ -49,9 +49,9 @@ class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\AbstractCo
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Eav\Model\Resource\Helper $resourceHelper,
+        \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
diff --git a/app/code/Magento/Catalog/Model/Resource/Config.php b/app/code/Magento/Catalog/Model/ResourceModel/Config.php
similarity index 94%
rename from app/code/Magento/Catalog/Model/Resource/Config.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Config.php
index a2ed0046a165410422b74aa927bbbd8f8783af80..f3e72ab157025e52f2afda41b51b80f463025df3 100644
--- a/app/code/Magento/Catalog/Model/Resource/Config.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Config.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource;
+namespace Magento\Catalog\Model\ResourceModel;
 
 /**
  * Catalog Config Resource Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Config extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Config extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * catalog_product entity type id
@@ -41,13 +41,13 @@ class Config extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\Config $eavConfig,
         $connectionName = null
diff --git a/app/code/Magento/Catalog/Model/Resource/Eav/Attribute.php b/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php
similarity index 97%
rename from app/code/Magento/Catalog/Model/Resource/Eav/Attribute.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php
index 27d8fa9b6477c0b5ad3195c0382e23d83b594334..2f4d6769131bda05483460e194fbffa9b8be0083 100644
--- a/app/code/Magento/Catalog/Model/Resource/Eav/Attribute.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Eav/Attribute.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Catalog\Model\Resource\Eav;
+namespace Magento\Catalog\Model\ResourceModel\Eav;
 
 use Magento\Catalog\Model\Attribute\LockValidatorInterface;
 use Magento\Framework\Api\AttributeValueFactory;
@@ -15,9 +15,9 @@ use Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface;
 /**
  * Catalog attribute model
  *
- * @method \Magento\Catalog\Model\Resource\Attribute _getResource()
- * @method \Magento\Catalog\Model\Resource\Attribute getResource()
- * @method \Magento\Catalog\Model\Resource\Eav\Attribute getFrontendInputRenderer()
+ * @method \Magento\Catalog\Model\ResourceModel\Attribute _getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Attribute getResource()
+ * @method \Magento\Catalog\Model\ResourceModel\Eav\Attribute getFrontendInputRenderer()
  * @method string setFrontendInputRenderer(string $value)
  * @method int setIsGlobal(int $value)
  * @method int getSearchWeight()
@@ -95,7 +95,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute implements
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Eav\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
@@ -108,7 +108,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute implements
      * @param \Magento\Catalog\Helper\Product\Flat\Indexer $productFlatIndexerHelper
      * @param LockValidatorInterface $lockValidator
      * @param DateTimeFormatterInterface $dateTimeFormatter
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -121,7 +121,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute implements
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Eav\Model\Resource\Helper $resourceHelper,
+        \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory,
         \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor,
@@ -134,7 +134,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute implements
         \Magento\Catalog\Model\Indexer\Product\Eav\Processor $indexerEavProcessor,
         \Magento\Catalog\Helper\Product\Flat\Indexer $productFlatIndexerHelper,
         LockValidatorInterface $lockValidator,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -170,7 +170,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Resource\Attribute');
+        $this->_init('Magento\Catalog\Model\ResourceModel\Attribute');
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Model/ResourceModel/Helper.php b/app/code/Magento/Catalog/Model/ResourceModel/Helper.php
new file mode 100644
index 0000000000000000000000000000000000000000..91578c06afa63d73164da900d9a9283cf545a334
--- /dev/null
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Helper.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Catalog\Model\ResourceModel;
+
+/**
+ * Eav Mysql resource helper model
+ */
+class Helper extends \Magento\Eav\Model\ResourceModel\Helper
+{
+    /**
+     * @param \Magento\Framework\App\ResourceConnection $resource
+     * @param string $modulePrefix
+     */
+    public function __construct(\Magento\Framework\App\ResourceConnection $resource, $modulePrefix = 'Magento_Catalog')
+    {
+        parent::__construct($resource, $modulePrefix);
+    }
+}
diff --git a/app/code/Magento/Catalog/Model/Resource/Layer/Filter/Attribute.php b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Attribute.php
similarity index 95%
rename from app/code/Magento/Catalog/Model/Resource/Layer/Filter/Attribute.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Attribute.php
index 40786c2e17211c70bfda91c73926646993786d26..b66b8c40629f9a7303ca0ee0f4baabbb3836e324 100644
--- a/app/code/Magento/Catalog/Model/Resource/Layer/Filter/Attribute.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Attribute.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Layer\Filter;
+namespace Magento\Catalog\Model\ResourceModel\Layer\Filter;
 
 /**
  * Catalog Layer Attribute Filter Resource Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Attribute extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Attribute extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table name
diff --git a/app/code/Magento/Catalog/Model/Resource/Layer/Filter/Decimal.php b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Decimal.php
similarity index 97%
rename from app/code/Magento/Catalog/Model/Resource/Layer/Filter/Decimal.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Decimal.php
index e62f7e0fa019e134a835228362084f854751c217..5d20f30f20d2f097875ff28287dbd736eac397e4 100644
--- a/app/code/Magento/Catalog/Model/Resource/Layer/Filter/Decimal.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Decimal.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Layer\Filter;
+namespace Magento\Catalog\Model\ResourceModel\Layer\Filter;
 
 /**
  * Catalog Layer Decimal attribute Filter Resource Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Decimal extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Decimal extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table name
diff --git a/app/code/Magento/Catalog/Model/Resource/Layer/Filter/Price.php b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Price.php
similarity index 89%
rename from app/code/Magento/Catalog/Model/Resource/Layer/Filter/Price.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Price.php
index a2e16621fa0c062d1781841be1a9b49e828eb62c..ddadfcaa97d8b5a8eaac629877ff0187741ebef5 100644
--- a/app/code/Magento/Catalog/Model/Resource/Layer/Filter/Price.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Layer/Filter/Price.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Layer\Filter;
+namespace Magento\Catalog\Model\ResourceModel\Layer\Filter;
 
 /**
  * Catalog Layer Price Filter resource model
  */
-class Price extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Price extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Minimal possible price
@@ -38,7 +38,7 @@ class Price extends \Magento\Framework\Model\Resource\Db\AbstractDb
     private $storeManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Catalog\Model\Layer\Resolver $layerResolver
      * @param \Magento\Customer\Model\Session $session
@@ -46,7 +46,7 @@ class Price extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Catalog\Model\Layer\Resolver $layerResolver,
         \Magento\Customer\Model\Session $session,
@@ -115,21 +115,21 @@ class Price extends \Magento\Framework\Model\Resource\Db\AbstractDb
         // remove join with main table
         $fromPart = $select->getPart(\Magento\Framework\DB\Select::FROM);
         if (!isset(
-                $fromPart[\Magento\Catalog\Model\Resource\Product\Collection::INDEX_TABLE_ALIAS]
+                $fromPart[\Magento\Catalog\Model\ResourceModel\Product\Collection::INDEX_TABLE_ALIAS]
             ) || !isset(
-                $fromPart[\Magento\Catalog\Model\Resource\Product\Collection::MAIN_TABLE_ALIAS]
+                $fromPart[\Magento\Catalog\Model\ResourceModel\Product\Collection::MAIN_TABLE_ALIAS]
             )
         ) {
             return $select;
         }
 
         // processing FROM part
-        $priceIndexJoinPart = $fromPart[\Magento\Catalog\Model\Resource\Product\Collection::INDEX_TABLE_ALIAS];
+        $priceIndexJoinPart = $fromPart[\Magento\Catalog\Model\ResourceModel\Product\Collection::INDEX_TABLE_ALIAS];
         $priceIndexJoinConditions = explode('AND', $priceIndexJoinPart['joinCondition']);
         $priceIndexJoinPart['joinType'] = \Magento\Framework\DB\Select::FROM;
         $priceIndexJoinPart['joinCondition'] = null;
-        $fromPart[\Magento\Catalog\Model\Resource\Product\Collection::MAIN_TABLE_ALIAS] = $priceIndexJoinPart;
-        unset($fromPart[\Magento\Catalog\Model\Resource\Product\Collection::INDEX_TABLE_ALIAS]);
+        $fromPart[\Magento\Catalog\Model\ResourceModel\Product\Collection::MAIN_TABLE_ALIAS] = $priceIndexJoinPart;
+        unset($fromPart[\Magento\Catalog\Model\ResourceModel\Product\Collection::INDEX_TABLE_ALIAS]);
         $select->setPart(\Magento\Framework\DB\Select::FROM, $fromPart);
         foreach ($fromPart as $key => $fromJoinItem) {
             $fromPart[$key]['joinCondition'] = $this->_replaceTableAlias($fromJoinItem['joinCondition']);
@@ -142,7 +142,7 @@ class Price extends \Magento\Framework\Model\Resource\Db\AbstractDb
             $wherePart[$key] = $this->_replaceTableAlias($wherePartItem);
         }
         $select->setPart(\Magento\Framework\DB\Select::WHERE, $wherePart);
-        $excludeJoinPart = \Magento\Catalog\Model\Resource\Product\Collection::MAIN_TABLE_ALIAS . '.entity_id';
+        $excludeJoinPart = \Magento\Catalog\Model\ResourceModel\Product\Collection::MAIN_TABLE_ALIAS . '.entity_id';
         foreach ($priceIndexJoinConditions as $condition) {
             if (strpos($condition, $excludeJoinPart) !== false) {
                 continue;
@@ -167,12 +167,16 @@ class Price extends \Magento\Framework\Model\Resource\Db\AbstractDb
         }
         $connection = $this->getConnection();
         $oldAlias = [
-            \Magento\Catalog\Model\Resource\Product\Collection::INDEX_TABLE_ALIAS . '.',
-            $connection->quoteIdentifier(\Magento\Catalog\Model\Resource\Product\Collection::INDEX_TABLE_ALIAS) . '.',
+            \Magento\Catalog\Model\ResourceModel\Product\Collection::INDEX_TABLE_ALIAS . '.',
+            $connection->quoteIdentifier(
+                \Magento\Catalog\Model\ResourceModel\Product\Collection::INDEX_TABLE_ALIAS
+            ) . '.',
         ];
         $newAlias = [
-            \Magento\Catalog\Model\Resource\Product\Collection::MAIN_TABLE_ALIAS . '.',
-            $connection->quoteIdentifier(\Magento\Catalog\Model\Resource\Product\Collection::MAIN_TABLE_ALIAS) . '.',
+            \Magento\Catalog\Model\ResourceModel\Product\Collection::MAIN_TABLE_ALIAS . '.',
+            $connection->quoteIdentifier(
+                \Magento\Catalog\Model\ResourceModel\Product\Collection::MAIN_TABLE_ALIAS
+            ) . '.',
         ];
         return str_replace($oldAlias, $newAlias, $conditionString);
     }
diff --git a/app/code/Magento/Catalog/Model/Resource/Product.php b/app/code/Magento/Catalog/Model/ResourceModel/Product.php
similarity index 98%
rename from app/code/Magento/Catalog/Model/Resource/Product.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product.php
index 6d6c699a809325890db573932bc083581d3065a9..b4d5298035dadab55cb0158a5ef72d64226d4253 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource;
+namespace Magento\Catalog\Model\ResourceModel;
 
 /**
  * Product entity resource model
@@ -37,7 +37,7 @@ class Product extends AbstractResource
     /**
      * Category collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Category\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory
      */
     protected $_categoryCollectionFactory;
 
@@ -79,7 +79,7 @@ class Product extends AbstractResource
         \Magento\Eav\Model\Entity\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Factory $modelFactory,
-        \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
         Category $catalogCategory,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Entity\Attribute\SetFactory $setFactory,
@@ -399,11 +399,11 @@ class Product extends AbstractResource
      * Get collection of product categories
      *
      * @param \Magento\Catalog\Model\Product $product
-     * @return \Magento\Catalog\Model\Resource\Category\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Category\Collection
      */
     public function getCategoryCollection($product)
     {
-        /** @var \Magento\Catalog\Model\Resource\Category\Collection $collection */
+        /** @var \Magento\Catalog\Model\ResourceModel\Category\Collection $collection */
         $collection = $this->_categoryCollectionFactory->create();
         $collection->joinField(
             'product_id',
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Action.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Action.php
similarity index 93%
rename from app/code/Magento/Catalog/Model/Resource/Product/Action.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Action.php
index a7e594b5f3e4d5af3d202178c7e0b7c353b7bbd7..3fd9946821e38873aeed9b30203cefdc51d596fa 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Action.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Action.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product;
+namespace Magento\Catalog\Model\ResourceModel\Product;
 
 /**
  * Catalog Product Mass processing resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Action extends \Magento\Catalog\Model\Resource\AbstractResource
+class Action extends \Magento\Catalog\Model\ResourceModel\AbstractResource
 {
     /**
      * Initialize connection
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php
similarity index 94%
rename from app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php
index 126ad12784507df36ac54b9f7d8971affaf64174..95591c93e00676ce3f6b51fb4aaeafa2aaaf119b 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/GroupPrice/AbstractGroupPrice.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Catalog\Model\Resource\Product\Attribute\Backend\GroupPrice;
+namespace Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\GroupPrice;
 
-abstract class AbstractGroupPrice extends \Magento\Framework\Model\Resource\Db\AbstractDb
+abstract class AbstractGroupPrice extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Load Tier Prices for product
@@ -102,7 +102,7 @@ abstract class AbstractGroupPrice extends \Magento\Framework\Model\Resource\Db\A
      * Save tier price object
      *
      * @param \Magento\Framework\DataObject $priceObject
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice
      */
     public function savePriceData(\Magento\Framework\DataObject $priceObject)
     {
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Image.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Image.php
similarity index 97%
rename from app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Image.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Image.php
index ca444f90f900852d07f2579ad663eaefc4b40a28..859ec051301f081ca127e954431f88d7d533abc8 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Image.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Image.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Attribute\Backend;
+namespace Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend;
 
 use Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend;
 use Magento\Framework\App\Filesystem\DirectoryList;
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Media.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
similarity index 98%
rename from app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Media.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
index 81054c233bc50d88bf65f9b14cfa3108b550f57c..a77ea68ae16d5e42855e7e422ff3662eeba5bcf6 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Media.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Media.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Catalog\Model\Resource\Product\Attribute\Backend;
+namespace Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend;
 
 use Magento\Catalog\Model\Product;
 
@@ -15,7 +15,7 @@ use Magento\Catalog\Model\Product;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Media extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Media extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     const GALLERY_TABLE = 'catalog_product_entity_media_gallery';
 
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Tierprice.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Tierprice.php
similarity index 85%
rename from app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Tierprice.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Tierprice.php
index d960aa0c0a24fd4d0fb6e065e2270399995a862c..0a427e10f81160141c58ab653ba206afae06281b 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Backend/Tierprice.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Backend/Tierprice.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Attribute\Backend;
+namespace Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend;
 
-use Magento\Catalog\Model\Resource\Product\Attribute\Backend\GroupPrice\AbstractGroupPrice;
+use Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\GroupPrice\AbstractGroupPrice;
 
 /**
  * Catalog product tier price backend attribute model
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Collection.php
similarity index 93%
rename from app/code/Magento/Catalog/Model/Resource/Product/Attribute/Collection.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Collection.php
index 46fd4d5a6188cdc7063870150b42c7fc468e0138..3f396b654f2813ab603231de51c506394aa012ff 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Attribute/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Attribute/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Attribute;
+namespace Magento\Catalog\Model\ResourceModel\Product\Attribute;
 
 /**
  * Catalog product EAV additional attribute resource collection
  */
-class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
 {
     /**
      * Entity factory1
@@ -25,7 +25,7 @@ class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\Collection
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -35,7 +35,7 @@ class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\Collection
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_eavEntityFactory = $eavEntityFactory;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $eavConfig, $connection, $resource);
@@ -48,7 +48,10 @@ class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\Collection
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Resource\Eav\Attribute', 'Magento\Eav\Model\Resource\Entity\Attribute');
+        $this->_init(
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute'
+        );
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php
similarity index 98%
rename from app/code/Magento/Catalog/Model/Resource/Product/Collection.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php
index 9a23c9a99f85e65c119d0d041be84c36857da726..0393bf02276257507ebd9f392ef6b499a7866bee 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Collection.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Catalog\Model\Resource\Product;
+namespace Magento\Catalog\Model\ResourceModel\Product;
 
 use Magento\Catalog\Model\Product\Attribute\Source\Status as ProductStatus;
 use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
@@ -22,9 +22,9 @@ use Magento\Store\Model\Store;
  * @SuppressWarnings(PHPMD.NumberOfChildren)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  *
- * @method \Magento\Eav\Model\Resource\Attribute\DefaultEntityAttributes\ProviderInterface getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Attribute\DefaultEntityAttributes\ProviderInterface getResource()
  */
-class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractCollection
+class Collection extends \Magento\Catalog\Model\ResourceModel\Collection\AbstractCollection
 {
     /**
      * Alias for index table
@@ -234,7 +234,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl
     /**
      * Catalog url
      *
-     * @var \Magento\Catalog\Model\Resource\Url
+     * @var \Magento\Catalog\Model\ResourceModel\Url
      */
     protected $_catalogUrl;
 
@@ -248,7 +248,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl
     /**
      * Catalog resource helper
      *
-     * @var \Magento\Catalog\Model\Resource\Helper
+     * @var \Magento\Catalog\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
@@ -275,16 +275,16 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrl
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
@@ -299,16 +299,16 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory,
-        \Magento\Catalog\Model\Resource\Url $catalogUrl,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Stdlib\DateTime $dateTime,
@@ -455,9 +455,9 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl
     protected function _construct()
     {
         if ($this->isEnabledFlat()) {
-            $this->_init('Magento\Catalog\Model\Product', 'Magento\Catalog\Model\Resource\Product\Flat');
+            $this->_init('Magento\Catalog\Model\Product', 'Magento\Catalog\Model\ResourceModel\Product\Flat');
         } else {
-            $this->_init('Magento\Catalog\Model\Product', 'Magento\Catalog\Model\Resource\Product');
+            $this->_init('Magento\Catalog\Model\Product', 'Magento\Catalog\Model\ResourceModel\Product');
         }
         $this->_initTables();
     }
@@ -473,7 +473,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl
     protected function _init($model, $entityModel)
     {
         if ($this->isEnabledFlat()) {
-            $entityModel = 'Magento\Catalog\Model\Resource\Product\Flat';
+            $entityModel = 'Magento\Catalog\Model\ResourceModel\Product\Flat';
         }
         return parent::_init($model, $entityModel);
     }
@@ -525,7 +525,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl
      */
     public function setEntity($entity)
     {
-        if ($this->isEnabledFlat() && $entity instanceof \Magento\Framework\Model\Resource\Db\AbstractDb) {
+        if ($this->isEnabledFlat() && $entity instanceof \Magento\Framework\Model\ResourceModel\Db\AbstractDb) {
             $this->_entity = $entity;
             return $this;
         }
@@ -1820,7 +1820,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl
     /**
      * Join Product Price Table with left-join possibility
      *
-     * @see \Magento\Catalog\Model\Resource\Product\Collection::_productLimitationJoinPrice()
+     * @see \Magento\Catalog\Model\ResourceModel\Product\Collection::_productLimitationJoinPrice()
      * @param bool $joinLeft
      * @return $this
      */
@@ -2051,7 +2051,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Collection\AbstractColl
             return $this;
         }
 
-        /** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+        /** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
         $attribute = $this->getAttribute('tier_price');
         if ($attribute->isScopeGlobal()) {
             $websiteId = 0;
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Compare/Item.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item.php
similarity index 98%
rename from app/code/Magento/Catalog/Model/Resource/Product/Compare/Item.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item.php
index 8c6b211899202fb4ab2819dda75267f76d35a987..19aa5b02dd0874c3af7c8513b583aaab9448bee6 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Compare/Item.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Compare;
+namespace Magento\Catalog\Model\ResourceModel\Product\Compare;
 
 /**
  * Catalog compare item resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Item extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Compare/Item/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item/Collection.php
similarity index 93%
rename from app/code/Magento/Catalog/Model/Resource/Product/Compare/Item/Collection.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item/Collection.php
index d9b77b3dd1846f60ebade022977d0dec8ef4804f..21389703ce94bfe22a4f4627477da3c300702a1e 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Compare/Item/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Compare/Item/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Compare\Item;
+namespace Magento\Catalog\Model\ResourceModel\Product\Compare\Item;
 
 /**
  * Catalog Product Compare Items Resource Collection
@@ -12,7 +12,7 @@ namespace Magento\Catalog\Model\Resource\Product\Compare\Item;
  * @SuppressWarnings(PHPMD.LongVariable)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
+class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
 {
     /**
      * Customer Filter
@@ -45,7 +45,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
     /**
      * Catalog product compare item
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Compare\Item
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Compare\Item
      */
     protected $_catalogProductCompareItem;
 
@@ -55,21 +55,21 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrl
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Customer\Api\GroupManagementInterface $groupManagement
-     * @param \Magento\Catalog\Model\Resource\Product\Compare\Item $catalogProductCompareItem
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Compare\Item $catalogProductCompareItem
      * @param \Magento\Catalog\Helper\Product\Compare $catalogProductCompare
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      *
@@ -81,21 +81,21 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory,
-        \Magento\Catalog\Model\Resource\Url $catalogUrl,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Customer\Api\GroupManagementInterface $groupManagement,
-        \Magento\Catalog\Model\Resource\Product\Compare\Item $catalogProductCompareItem,
+        \Magento\Catalog\Model\ResourceModel\Product\Compare\Item $catalogProductCompareItem,
         \Magento\Catalog\Helper\Product\Compare $catalogProductCompare,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
@@ -132,7 +132,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Product\Compare\Item', 'Magento\Catalog\Model\Resource\Product');
+        $this->_init('Magento\Catalog\Model\Product\Compare\Item', 'Magento\Catalog\Model\ResourceModel\Product');
         $this->_initTables();
     }
 
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Flat.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Flat.php
similarity index 93%
rename from app/code/Magento/Catalog/Model/Resource/Product/Flat.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Flat.php
index 771b6799dee97b0bb10c25b755ff2568d56fb9d1..2a9f146e405a92b5c21bf20b2145cd064c5c427f 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Flat.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Flat.php
@@ -3,17 +3,17 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product;
+namespace Magento\Catalog\Model\ResourceModel\Product;
 
 use Magento\Store\Model\Store;
-use Magento\Eav\Model\Resource\Attribute\DefaultEntityAttributes\ProviderInterface as DefaultAttributesProvider;
+use Magento\Eav\Model\ResourceModel\Attribute\DefaultEntityAttributes\ProviderInterface as DefaultAttributesProvider;
 
 /**
  * Catalog Product Flat resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Flat extends \Magento\Framework\Model\Resource\Db\AbstractDb implements DefaultAttributesProvider
+class Flat extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements DefaultAttributesProvider
 {
     /**
      * Store scope Id
@@ -42,14 +42,14 @@ class Flat extends \Magento\Framework\Model\Resource\Db\AbstractDb implements De
     protected $defaultAttributes;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Model\Config $catalogConfig
      * @param \Magento\Catalog\Model\Product\Attribute\DefaultAttributes $defaultAttributes
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Config $catalogConfig,
         \Magento\Catalog\Model\Product\Attribute\DefaultAttributes $defaultAttributes,
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/AbstractIndexer.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/AbstractIndexer.php
similarity index 95%
rename from app/code/Magento/Catalog/Model/Resource/Product/Indexer/AbstractIndexer.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/AbstractIndexer.php
index 50e0a9c789ba80baaf7b55fb7e6bf09078d67e65..0ed453173dcb49bfff29586193575d752c1514a2 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/AbstractIndexer.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/AbstractIndexer.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Indexer;
+namespace Magento\Catalog\Model\ResourceModel\Product\Indexer;
 
 /**
  * Catalog Product Indexer Abstract Resource Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-abstract class AbstractIndexer extends \Magento\Indexer\Model\Resource\AbstractResource
+abstract class AbstractIndexer extends \Magento\Indexer\Model\ResourceModel\AbstractResource
 {
     /**
      * Eav config
@@ -22,13 +22,13 @@ abstract class AbstractIndexer extends \Magento\Indexer\Model\Resource\AbstractR
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         \Magento\Eav\Model\Config $eavConfig,
         $connectionName = null
@@ -41,7 +41,7 @@ abstract class AbstractIndexer extends \Magento\Indexer\Model\Resource\AbstractR
      * Retrieve catalog_product attribute instance by attribute code
      *
      * @param string $attributeCode
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     protected function _getAttribute($attributeCode)
     {
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/AbstractEav.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php
similarity index 97%
rename from app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/AbstractEav.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php
index 83041be40e9f9386e5fd254724f753e380f909d3..b07d355f418f09de5b7e5e356f0756af5d4ed3c1 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/AbstractEav.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/AbstractEav.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Indexer\Eav;
+namespace Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav;
 
 /**
  * Catalog Product Eav Attributes abstract indexer resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-abstract class AbstractEav extends \Magento\Catalog\Model\Resource\Product\Indexer\AbstractIndexer
+abstract class AbstractEav extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\AbstractIndexer
 {
     /**
      * Core event manager proxy
@@ -22,14 +22,14 @@ abstract class AbstractEav extends \Magento\Catalog\Model\Resource\Product\Index
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\Event\ManagerInterface $eventManager,
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/Decimal.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Decimal.php
similarity index 98%
rename from app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/Decimal.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Decimal.php
index 1d6a999c957f46936ad7d8422f1b8b14c95fac18..d15bfbaca8d85d0745a3402134e0d3ff01b50323 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/Decimal.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Decimal.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Indexer\Eav;
+namespace Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav;
 
 /**
  * Catalog Product Eav Decimal Attributes Indexer resource model
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/Source.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Source.php
similarity index 96%
rename from app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/Source.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Source.php
index 804be08a5b521fc36513b01d48dff0d51bdb1aed..dac3ab33b2524002f58d0cd7095371ec97050c50 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Eav/Source.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/Source.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Indexer\Eav;
+namespace Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav;
 
 use Magento\Catalog\Model\Product\Attribute\Source\Status as ProductStatus;
 
@@ -17,26 +17,26 @@ class Source extends AbstractEav
     /**
      * Catalog resource helper
      *
-     * @var \Magento\Catalog\Model\Resource\Helper
+     * @var \Magento\Catalog\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         $connectionName = null
     ) {
         $this->_resourceHelper = $resourceHelper;
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/DefaultPrice.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
similarity index 97%
rename from app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/DefaultPrice.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
index 7c7ddf75369102654cb39e7b45b2e23eb7a00211..0df889441d2624095043ca2bab26fd00e1b3feb4 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/DefaultPrice.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/DefaultPrice.php
@@ -3,7 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Indexer\Price;
+namespace Magento\Catalog\Model\ResourceModel\Product\Indexer\Price;
+
+use Magento\Catalog\Model\ResourceModel\Product\Indexer\AbstractIndexer;
 
 /**
  * Default Product Type Price Indexer Resource model
@@ -11,7 +13,7 @@ namespace Magento\Catalog\Model\Resource\Product\Indexer\Price;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class DefaultPrice extends \Magento\Catalog\Model\Resource\Product\Indexer\AbstractIndexer implements PriceInterface
+class DefaultPrice extends AbstractIndexer implements PriceInterface
 {
     /**
      * Product type code
@@ -44,7 +46,7 @@ class DefaultPrice extends \Magento\Catalog\Model\Resource\Product\Indexer\Abstr
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
@@ -52,7 +54,7 @@ class DefaultPrice extends \Magento\Catalog\Model\Resource\Product\Indexer\Abstr
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\Event\ManagerInterface $eventManager,
@@ -159,7 +161,7 @@ class DefaultPrice extends \Magento\Catalog\Model\Resource\Product\Indexer\Abstr
      * Reindex temporary (price result data) for defined product(s)
      *
      * @param int|array $entityIds
-     * @return \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice
      */
     public function reindexEntity($entityIds)
     {
@@ -169,7 +171,7 @@ class DefaultPrice extends \Magento\Catalog\Model\Resource\Product\Indexer\Abstr
 
     /**
      * @param null|int|array $entityIds
-     * @return \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice
      */
     protected function reindex($entityIds = null)
     {
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/Factory.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/Factory.php
similarity index 73%
rename from app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/Factory.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/Factory.php
index 517b00635c2a532022e8f6a941bf721a0c719931..4026c382c3721fcf9e1a7dbbcd2cdd23fd0fe98a 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/Factory.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/Factory.php
@@ -7,7 +7,7 @@
 /**
  * Resource product indexer price factory
  */
-namespace Magento\Catalog\Model\Resource\Product\Indexer\Price;
+namespace Magento\Catalog\Model\ResourceModel\Product\Indexer\Price;
 
 class Factory
 {
@@ -33,16 +33,19 @@ class Factory
      *
      * @param string $className
      * @param array $data
-     * @return \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function create($className, array $data = [])
     {
         $indexerPrice = $this->_objectManager->create($className, $data);
 
-        if (!$indexerPrice instanceof \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice) {
+        if (!$indexerPrice instanceof \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice) {
             throw new \Magento\Framework\Exception\LocalizedException(
-                __('%1 doesn\'t extend \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice', $className)
+                __(
+                    '%1 doesn\'t extend \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice',
+                    $className
+                )
             );
         }
         return $indexerPrice;
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/PriceInterface.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/PriceInterface.php
similarity index 89%
rename from app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/PriceInterface.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/PriceInterface.php
index 4985301d9cb337da2deea6b126428279c2ea0283..48c24c11b85d30f3937a5bf5ba19c0175f57f313 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Indexer/Price/PriceInterface.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Indexer/Price/PriceInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Indexer\Price;
+namespace Magento\Catalog\Model\ResourceModel\Product\Indexer\Price;
 
 /**
  * Catalog Product Type Price Indexer interface
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Link.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link.php
similarity index 96%
rename from app/code/Magento/Catalog/Model/Resource/Product/Link.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Link.php
index 902855d4ae4bd75fbfe92f4ff8e0d2f376416f71..de3811c120676cc7633e65204f56ff9b644fa02c 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Link.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product;
+namespace Magento\Catalog\Model\ResourceModel\Product;
 
 /**
  * Catalog product link resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Link extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Link extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Product Link Attributes Table
@@ -27,12 +27,12 @@ class Link extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_catalogProductRelation;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param Relation $catalogProductRelation
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Relation $catalogProductRelation,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Link/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Collection.php
similarity index 94%
rename from app/code/Magento/Catalog/Model/Resource/Product/Link/Collection.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Collection.php
index a4f587ed97aabdd1ae4701f4fa3c45ded0db871c..011a3cda6ad740caf6326cdaa46afd22a007ce52 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Link/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Link;
+namespace Magento\Catalog\Model\ResourceModel\Product\Link;
 
 /**
  * Catalog product links collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Product object
@@ -40,7 +40,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Product\Link', 'Magento\Catalog\Model\Resource\Product\Link');
+        $this->_init('Magento\Catalog\Model\Product\Link', 'Magento\Catalog\Model\ResourceModel\Product\Link');
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Link/Product/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Product/Collection.php
similarity index 98%
rename from app/code/Magento/Catalog/Model/Resource/Product/Link/Product/Collection.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Product/Collection.php
index 9937ed9b1f11529761a279ad1072911547a29387..cf24550a97dc25d462931cffcfdf68416a7e865a 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Link/Product/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Link/Product/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Link\Product;
+namespace Magento\Catalog\Model\ResourceModel\Product\Link\Product;
 
 /**
  * Catalog product linked products collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
+class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
 {
     /**
      * Store product model
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Option.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option.php
similarity index 98%
rename from app/code/Magento/Catalog/Model/Resource/Product/Option.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Option.php
index df8f2ac25be2c6e667ea84b6537314167dc670d3..cf7445dabfec7f3016580fcd61f3a90b266beb24 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Option.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product;
+namespace Magento\Catalog\Model\ResourceModel\Product;
 
 /**
  * Catalog product custom option resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Option extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store manager
@@ -36,14 +36,14 @@ class Option extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
@@ -69,7 +69,7 @@ class Option extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * Save options store data
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Option/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Collection.php
similarity index 90%
rename from app/code/Magento/Catalog/Model/Resource/Product/Option/Collection.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Collection.php
index d893f512a2edf7e42d6a72289410c01c1873603a..ba2e7b2128d47b33ca0bdc85c813eabf1a6a99c0 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Option/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Option;
+namespace Magento\Catalog\Model\ResourceModel\Product\Option;
 
 /**
  * Catalog product options collection
  *
  * @SuppressWarnings(PHPMD.LongVariable)
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store manager
@@ -22,7 +22,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     /**
      * Option value factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Option\Value\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory
      */
     protected $_optionValueCollectionFactory;
 
@@ -31,20 +31,20 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Catalog\Model\Resource\Product\Option\Value\CollectionFactory $optionValueCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $optionValueCollectionFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Catalog\Model\Resource\Product\Option\Value\CollectionFactory $optionValueCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory $optionValueCollectionFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_optionValueCollectionFactory = $optionValueCollectionFactory;
         $this->_storeManager = $storeManager;
@@ -58,7 +58,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Product\Option', 'Magento\Catalog\Model\Resource\Product\Option');
+        $this->_init('Magento\Catalog\Model\Product\Option', 'Magento\Catalog\Model\ResourceModel\Product\Option');
     }
 
     /**
@@ -170,7 +170,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
             $optionIds[] = $option->getId();
         }
         if (!empty($optionIds)) {
-            /** @var \Magento\Catalog\Model\Resource\Product\Option\Value\Collection $values */
+            /** @var \Magento\Catalog\Model\ResourceModel\Product\Option\Value\Collection $values */
             $values = $this->_optionValueCollectionFactory->create();
             $values->addTitleToResult(
                 $storeId
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Option/Value.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value.php
similarity index 97%
rename from app/code/Magento/Catalog/Model/Resource/Product/Option/Value.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value.php
index 2411590543d0464035a60d57d2257a568069d17a..87ad710edc90f71eb85e9a4eeddf8e7b959566a4 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Option/Value.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Option;
+namespace Magento\Catalog\Model\ResourceModel\Product\Option;
 
 /**
  * Catalog product custom option resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Value extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Value extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store manager
@@ -36,14 +36,14 @@ class Value extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
@@ -70,7 +70,7 @@ class Value extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * Save options store data
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Option/Value/Collection.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value/Collection.php
similarity index 96%
rename from app/code/Magento/Catalog/Model/Resource/Product/Option/Value/Collection.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value/Collection.php
index 12bd865f77a06e45498925a50414e915fc6b19c6..c18eb0f0b58d3c2ce5a001793ffbe54088321322 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Option/Value/Collection.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Option/Value/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Option\Value;
+namespace Magento\Catalog\Model\ResourceModel\Product\Option\Value;
 
 /**
  * Catalog product option values collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
@@ -21,7 +21,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     {
         $this->_init(
             'Magento\Catalog\Model\Product\Option\Value',
-            'Magento\Catalog\Model\Resource\Product\Option\Value'
+            'Magento\Catalog\Model\ResourceModel\Product\Option\Value'
         );
     }
 
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Relation.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Relation.php
similarity index 92%
rename from app/code/Magento/Catalog/Model/Resource/Product/Relation.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Relation.php
index 0a9096b9e6e2ba42c83dd533ea3858d31c939a5f..846a904a117b5378e92ffb417d37a77f2d8f2ca8 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Relation.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Relation.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product;
+namespace Magento\Catalog\Model\ResourceModel\Product;
 
 /**
  * Catalog Product Relations Resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Relation extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Relation extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize resource model and define main table
diff --git a/app/code/Magento/Catalog/Model/Resource/Product/Website.php b/app/code/Magento/Catalog/Model/ResourceModel/Product/Website.php
similarity index 93%
rename from app/code/Magento/Catalog/Model/Resource/Product/Website.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Product/Website.php
index cc50e148d0438419595d49b4df6280502547b9ea..9e55411448157ccd008a3437b8b401548d29f03e 100644
--- a/app/code/Magento/Catalog/Model/Resource/Product/Website.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Product/Website.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product;
+namespace Magento\Catalog\Model\ResourceModel\Product;
 
 /**
  * Catalog Product Website Resource Model
  */
-class Website extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Website extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store manager
@@ -18,12 +18,12 @@ class Website extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Catalog/Model/Resource/Setup/PropertyMapper.php b/app/code/Magento/Catalog/Model/ResourceModel/Setup/PropertyMapper.php
similarity index 94%
rename from app/code/Magento/Catalog/Model/Resource/Setup/PropertyMapper.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Setup/PropertyMapper.php
index f26b1952a8eeee180f2d0c7f18f2fa1cf660c283..b7d5bbb301efd0db69682ace00f57077fbf6dec6 100644
--- a/app/code/Magento/Catalog/Model/Resource/Setup/PropertyMapper.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Setup/PropertyMapper.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Setup;
+namespace Magento\Catalog\Model\ResourceModel\Setup;
 
 use Magento\Eav\Model\Entity\Setup\PropertyMapperAbstract;
 
@@ -26,7 +26,7 @@ class PropertyMapper extends PropertyMapperAbstract
             'is_global' => $this->_getValue(
                 $input,
                 'global',
-                \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL
+                \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL
             ),
             'is_visible' => $this->_getValue($input, 'visible', 1),
             'is_searchable' => $this->_getValue($input, 'searchable', 0),
diff --git a/app/code/Magento/Catalog/Model/Resource/Url.php b/app/code/Magento/Catalog/Model/ResourceModel/Url.php
similarity index 98%
rename from app/code/Magento/Catalog/Model/Resource/Url.php
rename to app/code/Magento/Catalog/Model/ResourceModel/Url.php
index bb07c23b92c49b9e5b4f2eb318f96ebde6d8fb9e..157edc0b176c0a9fd3d8bf233cda4d10b4aaa903 100644
--- a/app/code/Magento/Catalog/Model/Resource/Url.php
+++ b/app/code/Magento/Catalog/Model/ResourceModel/Url.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource;
+namespace Magento\Catalog\Model\ResourceModel;
 
 /**
  * Catalog url rewrite resource model
@@ -12,7 +12,7 @@ namespace Magento\Catalog\Model\Resource;
  */
 use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
 
-class Url extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Url extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Stores configuration array
@@ -88,7 +88,7 @@ class Url extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $productResource;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param Product $productResource
@@ -97,7 +97,7 @@ class Url extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\Config $eavConfig,
         Product $productResource,
diff --git a/app/code/Magento/Catalog/Model/Rss/Category.php b/app/code/Magento/Catalog/Model/Rss/Category.php
index e2d41d230fffe8bb75e4a82c153647c5bf507215..f487513e6e5c522cf36af98dca02c2e8a90d3772 100644
--- a/app/code/Magento/Catalog/Model/Rss/Category.php
+++ b/app/code/Magento/Catalog/Model/Rss/Category.php
@@ -17,7 +17,7 @@ class Category
     protected $catalogLayer;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $collectionFactory;
 
@@ -28,12 +28,12 @@ class Category
 
     /**
      * @param \Magento\Catalog\Model\Layer\Resolver $layerResolver
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory
      * @param \Magento\Catalog\Model\Product\Visibility $visibility
      */
     public function __construct(
         \Magento\Catalog\Model\Layer\Resolver $layerResolver,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $collectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory,
         \Magento\Catalog\Model\Product\Visibility $visibility
     ) {
         $this->catalogLayer = $layerResolver->get();
@@ -57,7 +57,7 @@ class Category
             ->addAttributeToFilter('is_active', 1)
             ->addIdFilter($category->getChildren())
             ->load();
-        /** @var $productCollection \Magento\Catalog\Model\Resource\Product\Collection */
+        /** @var $productCollection \Magento\Catalog\Model\ResourceModel\Product\Collection */
         $productCollection = $this->collectionFactory->create();
 
         $currentCategory = $layer->setCurrentCategory($category);
diff --git a/app/code/Magento/Catalog/Model/Rss/Product/NewProducts.php b/app/code/Magento/Catalog/Model/Rss/Product/NewProducts.php
index 1f0a919125213974578dcddc604aab2c5b8bad52..5b603de449bcb75a65720577492260071f4c5322 100644
--- a/app/code/Magento/Catalog/Model/Rss/Product/NewProducts.php
+++ b/app/code/Magento/Catalog/Model/Rss/Product/NewProducts.php
@@ -43,7 +43,7 @@ class NewProducts
 
     /**
      * @param int $storeId
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     public function getProductsCollection($storeId)
     {
@@ -56,7 +56,7 @@ class NewProducts
         $todayEndOfDayDate = $this->localeDate->date()
             ->setTime(23, 59, 59)
             ->format('Y-m-d H:i:s');
-        /** @var $products \Magento\Catalog\Model\Resource\Product\Collection */
+        /** @var $products \Magento\Catalog\Model\ResourceModel\Product\Collection */
         $products = $product->getResourceCollection();
         $products->setStoreId($storeId);
         $products->addStoreFilter()->addAttributeToFilter(
diff --git a/app/code/Magento/Catalog/Model/Rss/Product/NotifyStock.php b/app/code/Magento/Catalog/Model/Rss/Product/NotifyStock.php
index e49b491efb498babd3be44eca35665eb83d545b4..996597fa37ab2edc8d787a01c358588267ac57ff 100644
--- a/app/code/Magento/Catalog/Model/Rss/Product/NotifyStock.php
+++ b/app/code/Magento/Catalog/Model/Rss/Product/NotifyStock.php
@@ -17,7 +17,7 @@ class NotifyStock extends \Magento\Framework\Model\AbstractModel
     protected $productFactory;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\StockFactory
+     * @var \Magento\CatalogInventory\Model\ResourceModel\StockFactory
      */
     protected $stockFactory;
 
@@ -35,13 +35,13 @@ class NotifyStock extends \Magento\Framework\Model\AbstractModel
 
     /**
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
-     * @param \Magento\CatalogInventory\Model\Resource\StockFactory $stockFactory
+     * @param \Magento\CatalogInventory\Model\ResourceModel\StockFactory $stockFactory
      * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      */
     public function __construct(
         \Magento\Catalog\Model\ProductFactory $productFactory,
-        \Magento\CatalogInventory\Model\Resource\StockFactory $stockFactory,
+        \Magento\CatalogInventory\Model\ResourceModel\StockFactory $stockFactory,
         \Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus,
         \Magento\Framework\Event\ManagerInterface $eventManager
     ) {
@@ -52,15 +52,15 @@ class NotifyStock extends \Magento\Framework\Model\AbstractModel
     }
 
     /**
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     public function getProductsCollection()
     {
         /* @var $product \Magento\Catalog\Model\Product */
         $product = $this->productFactory->create();
-        /* @var $collection \Magento\Catalog\Model\Resource\Product\Collection */
+        /* @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
         $collection = $product->getCollection();
-        /** @var $resourceStock \Magento\CatalogInventory\Model\Resource\Stock */
+        /** @var $resourceStock \Magento\CatalogInventory\Model\ResourceModel\Stock */
         $resourceStock = $this->stockFactory->create();
         $resourceStock->addLowStockFilter(
             $collection,
diff --git a/app/code/Magento/Catalog/Model/Rss/Product/Special.php b/app/code/Magento/Catalog/Model/Rss/Product/Special.php
index 9bcf78cea24bf9e3fe41def9ae7b71a716628d2e..4846a3095af5bc4cb3b26ce76e0ea60a21dfc365 100644
--- a/app/code/Magento/Catalog/Model/Rss/Product/Special.php
+++ b/app/code/Magento/Catalog/Model/Rss/Product/Special.php
@@ -36,7 +36,7 @@ class Special
     /**
      * @param int $storeId
      * @param int $customerGroupId
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     public function getProductsCollection($storeId, $customerGroupId)
     {
diff --git a/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php b/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php
index 71558be241adcf513293e2ec6cc1a3a468879982..de1649851c6699987abb434a987843748b1f3e7d 100644
--- a/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php
+++ b/app/code/Magento/Catalog/Model/System/Config/Backend/Catalog/Url/Rewrite/Suffix.php
@@ -13,7 +13,7 @@ use Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator;
 use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
 use Magento\CatalogUrlRewrite\Model\ProductUrlPathGenerator;
 use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Store\Model\ScopeInterface;
 use Magento\UrlRewrite\Model\Storage\DbStorage;
 use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
@@ -39,11 +39,11 @@ class Suffix extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param \Magento\UrlRewrite\Helper\UrlRewrite $urlRewriteHelper
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\App\Resource $appResource
+     * @param \Magento\Framework\App\ResourceConnection $appResource
      * @param \Magento\UrlRewrite\Model\UrlFinderInterface $urlFinder
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -54,9 +54,9 @@ class Suffix extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\UrlRewrite\Helper\UrlRewrite $urlRewriteHelper,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\App\Resource $appResource,
+        \Magento\Framework\App\ResourceConnection $appResource,
         \Magento\UrlRewrite\Model\UrlFinderInterface $urlFinder,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Catalog/Plugin/Model/Resource/Attribute/Save.php b/app/code/Magento/Catalog/Plugin/Model/ResourceModel/Attribute/Save.php
similarity index 85%
rename from app/code/Magento/Catalog/Plugin/Model/Resource/Attribute/Save.php
rename to app/code/Magento/Catalog/Plugin/Model/ResourceModel/Attribute/Save.php
index 49d8c307a33e732c278b3fa649521870606875b6..cfb01e7a56daae022d43af8608649b45383ae441 100644
--- a/app/code/Magento/Catalog/Plugin/Model/Resource/Attribute/Save.php
+++ b/app/code/Magento/Catalog/Plugin/Model/ResourceModel/Attribute/Save.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Catalog\Plugin\Model\Resource\Attribute;
+namespace Magento\Catalog\Plugin\Model\ResourceModel\Attribute;
 
 class Save
 {
@@ -31,7 +31,7 @@ class Save
     }
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Attribute $subject
+     * @param \Magento\Catalog\Model\ResourceModel\Attribute $subject
      * @param callable $proceed
      * @param \Magento\Framework\Model\AbstractModel $attribute
      * @return mixed
@@ -39,7 +39,7 @@ class Save
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundSave(
-        \Magento\Catalog\Model\Resource\Attribute $subject,
+        \Magento\Catalog\Model\ResourceModel\Attribute $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $attribute
     ) {
diff --git a/app/code/Magento/Catalog/Plugin/Model/Resource/Config.php b/app/code/Magento/Catalog/Plugin/Model/ResourceModel/Config.php
similarity index 83%
rename from app/code/Magento/Catalog/Plugin/Model/Resource/Config.php
rename to app/code/Magento/Catalog/Plugin/Model/ResourceModel/Config.php
index d94f7ffd5cbaf154bc92fd1b6e933f45ea53f6d5..84d45f0432c5ba8cb33cc82121006efb31438ef4 100644
--- a/app/code/Magento/Catalog/Plugin/Model/Resource/Config.php
+++ b/app/code/Magento/Catalog/Plugin/Model/ResourceModel/Config.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Plugin\Model\Resource;
+namespace Magento\Catalog\Plugin\Model\ResourceModel;
 
 class Config
 {
@@ -33,12 +33,14 @@ class Config
     }
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Config $config
+     * @param \Magento\Catalog\Model\ResourceModel\Config $config
      * @param callable $proceed
      * @return array
      */
-    public function aroundGetAttributesUsedInListing(\Magento\Catalog\Model\Resource\Config $config, \Closure $proceed)
-    {
+    public function aroundGetAttributesUsedInListing(
+        \Magento\Catalog\Model\ResourceModel\Config $config,
+        \Closure $proceed
+    ) {
         $cacheId = self::PRODUCT_LISTING_ATTRIBUTES_CACHE_ID . $config->getEntityTypeId() . '_' . $config->getStoreId();
         if ($this->isCacheEnabled && ($attributes = $this->cache->load($cacheId))) {
             return unserialize($attributes);
@@ -58,12 +60,14 @@ class Config
     }
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Config $config
+     * @param \Magento\Catalog\Model\ResourceModel\Config $config
      * @param callable $proceed
      * @return array
      */
-    public function aroundGetAttributesUsedForSortBy(\Magento\Catalog\Model\Resource\Config $config, \Closure $proceed)
-    {
+    public function aroundGetAttributesUsedForSortBy(
+        \Magento\Catalog\Model\ResourceModel\Config $config,
+        \Closure $proceed
+    ) {
         $cacheId = self::PRODUCT_LISTING_SORT_BY_ATTRIBUTES_CACHE_ID . $config->getEntityTypeId() . '_'
             . $config->getStoreId();
         if ($this->isCacheEnabled && ($attributes = $this->cache->load($cacheId))) {
diff --git a/app/code/Magento/Catalog/Pricing/Price/CustomOptionPrice.php b/app/code/Magento/Catalog/Pricing/Price/CustomOptionPrice.php
index 380b3a7c61091ad6be26e2c45a6e023a6092af75..9976cc238205139d9023d6014416e6d7301a3c81 100644
--- a/app/code/Magento/Catalog/Pricing/Price/CustomOptionPrice.php
+++ b/app/code/Magento/Catalog/Pricing/Price/CustomOptionPrice.php
@@ -9,7 +9,7 @@ use Magento\Catalog\Model\Product\Option\Value;
 use Magento\Catalog\Model\Product\Option;
 use Magento\Catalog\Pricing\Price;
 use Magento\Framework\Pricing\Price\AbstractPrice;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Adjustment\CalculatorInterface;
 use Magento\Framework\Pricing\Amount\AmountInterface;
 
diff --git a/app/code/Magento/Catalog/Pricing/Render.php b/app/code/Magento/Catalog/Pricing/Render.php
index 283bdab6789789585ad5c4c609d67731d3189815..a87efe31110352e3081bffaffe30742cdadbca32 100644
--- a/app/code/Magento/Catalog/Pricing/Render.php
+++ b/app/code/Magento/Catalog/Pricing/Render.php
@@ -7,7 +7,7 @@
 namespace Magento\Catalog\Pricing;
 
 use Magento\Catalog\Model\Product;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Render as PricingRender;
 use Magento\Framework\Registry;
 use Magento\Framework\View\Element\Template;
diff --git a/app/code/Magento/Catalog/Setup/CategorySetup.php b/app/code/Magento/Catalog/Setup/CategorySetup.php
index 0c173c5c2c8df89c2380c14e401df540d111a851..0efc0ac08375a2ba5b35e5d88601d75e729ec1f4 100644
--- a/app/code/Magento/Catalog/Setup/CategorySetup.php
+++ b/app/code/Magento/Catalog/Setup/CategorySetup.php
@@ -9,7 +9,7 @@ namespace Magento\Catalog\Setup;
 
 use Magento\Catalog\Model\CategoryFactory;
 use Magento\Eav\Model\Entity\Setup\Context;
-use Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory;
 use Magento\Eav\Setup\EavSetup;
 use Magento\Framework\App\CacheInterface;
 use Magento\Framework\Setup\ModuleDataSetupInterface;
@@ -67,18 +67,18 @@ class CategorySetup extends EavSetup
     {
         return [
             'catalog_category' => [
-                'entity_model' => 'Magento\Catalog\Model\Resource\Category',
-                'attribute_model' => 'Magento\Catalog\Model\Resource\Eav\Attribute',
+                'entity_model' => 'Magento\Catalog\Model\ResourceModel\Category',
+                'attribute_model' => 'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
                 'table' => 'catalog_category_entity',
                 'additional_attribute_table' => 'catalog_eav_attribute',
-                'entity_attribute_collection' => 'Magento\Catalog\Model\Resource\Category\Attribute\Collection',
+                'entity_attribute_collection' => 'Magento\Catalog\Model\ResourceModel\Category\Attribute\Collection',
                 'attributes' => [
                     'name' => [
                         'type' => 'varchar',
                         'label' => 'Name',
                         'input' => 'text',
                         'sort_order' => 1,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'is_active' => [
@@ -87,7 +87,7 @@ class CategorySetup extends EavSetup
                         'input' => 'select',
                         'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
                         'sort_order' => 2,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'description' => [
@@ -96,7 +96,7 @@ class CategorySetup extends EavSetup
                         'input' => 'textarea',
                         'required' => false,
                         'sort_order' => 4,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'wysiwyg_enabled' => true,
                         'is_html_allowed_on_front' => true,
                         'group' => 'General Information',
@@ -108,7 +108,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Category\Attribute\Backend\Image',
                         'required' => false,
                         'sort_order' => 5,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'meta_title' => [
@@ -117,7 +117,7 @@ class CategorySetup extends EavSetup
                         'input' => 'text',
                         'required' => false,
                         'sort_order' => 6,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'meta_keywords' => [
@@ -126,7 +126,7 @@ class CategorySetup extends EavSetup
                         'input' => 'textarea',
                         'required' => false,
                         'sort_order' => 7,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'meta_description' => [
@@ -135,7 +135,7 @@ class CategorySetup extends EavSetup
                         'input' => 'textarea',
                         'required' => false,
                         'sort_order' => 8,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'display_mode' => [
@@ -145,7 +145,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Catalog\Model\Category\Attribute\Source\Mode',
                         'required' => false,
                         'sort_order' => 10,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Display Settings',
                     ],
                     'landing_page' => [
@@ -155,7 +155,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Catalog\Model\Category\Attribute\Source\Page',
                         'required' => false,
                         'sort_order' => 20,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Display Settings',
                     ],
                     'is_anchor' => [
@@ -211,7 +211,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Theme\Model\Theme\Source\Theme',
                         'required' => false,
                         'sort_order' => 10,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'custom_design_from' => [
@@ -221,7 +221,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Attribute\Backend\Startdate',
                         'required' => false,
                         'sort_order' => 30,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'custom_design_to' => [
@@ -231,7 +231,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Eav\Model\Entity\Attribute\Backend\Datetime',
                         'required' => false,
                         'sort_order' => 40,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'page_layout' => [
@@ -241,7 +241,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Catalog\Model\Category\Attribute\Source\Layout',
                         'required' => false,
                         'sort_order' => 50,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'custom_layout_update' => [
@@ -251,7 +251,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Attribute\Backend\Customlayoutupdate',
                         'required' => false,
                         'sort_order' => 60,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'level' => [
@@ -278,7 +278,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Category\Attribute\Backend\Sortby',
                         'sort_order' => 40,
                         'input_renderer' => 'Magento\Catalog\Block\Adminhtml\Category\Helper\Sortby\Available',
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Display Settings',
                     ],
                     'default_sort_by' => [
@@ -289,7 +289,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Category\Attribute\Backend\Sortby',
                         'sort_order' => 50,
                         'input_renderer' => 'Magento\Catalog\Block\Adminhtml\Category\Helper\Sortby\DefaultSortby',
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Display Settings',
                     ],
                     'include_in_menu' => [
@@ -299,7 +299,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
                         'default' => '1',
                         'sort_order' => 10,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'General Information',
                     ],
                     'custom_use_parent_settings' => [
@@ -309,7 +309,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
                         'required' => false,
                         'sort_order' => 5,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'custom_apply_to_products' => [
@@ -319,7 +319,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
                         'required' => false,
                         'sort_order' => 6,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Custom Design',
                     ],
                     'filter_price_range' => [
@@ -329,17 +329,17 @@ class CategorySetup extends EavSetup
                         'required' => false,
                         'sort_order' => 51,
                         'input_renderer' => 'Magento\Catalog\Block\Adminhtml\Category\Helper\Pricestep',
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Display Settings',
                     ],
                 ],
             ],
             'catalog_product' => [
-                'entity_model' => 'Magento\Catalog\Model\Resource\Product',
-                'attribute_model' => 'Magento\Catalog\Model\Resource\Eav\Attribute',
+                'entity_model' => 'Magento\Catalog\Model\ResourceModel\Product',
+                'attribute_model' => 'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
                 'table' => 'catalog_product_entity',
                 'additional_attribute_table' => 'catalog_eav_attribute',
-                'entity_attribute_collection' => 'Magento\Catalog\Model\Resource\Product\Attribute\Collection',
+                'entity_attribute_collection' => 'Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection',
                 'attributes' => [
                     'name' => [
                         'type' => 'varchar',
@@ -347,7 +347,7 @@ class CategorySetup extends EavSetup
                         'input' => 'text',
                         'frontend_class' => 'validate-length maximum-length-255',
                         'sort_order' => 1,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'searchable' => true,
                         'visible_in_advanced_search' => true,
                         'used_in_product_listing' => true,
@@ -370,7 +370,7 @@ class CategorySetup extends EavSetup
                         'label' => 'Description',
                         'input' => 'textarea',
                         'sort_order' => 3,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'searchable' => true,
                         'comparable' => true,
                         'wysiwyg_enabled' => true,
@@ -382,7 +382,7 @@ class CategorySetup extends EavSetup
                         'label' => 'Short Description',
                         'input' => 'textarea',
                         'sort_order' => 4,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'searchable' => true,
                         'comparable' => true,
                         'wysiwyg_enabled' => true,
@@ -399,7 +399,7 @@ class CategorySetup extends EavSetup
                         'input' => 'price',
                         'backend' => 'Magento\Catalog\Model\Product\Attribute\Backend\Price',
                         'sort_order' => 1,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                         'searchable' => true,
                         'filterable' => true,
                         'visible_in_advanced_search' => true,
@@ -415,7 +415,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Product\Attribute\Backend\Price',
                         'required' => false,
                         'sort_order' => 3,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                         'used_in_product_listing' => true,
                         'apply_to' => 'simple,virtual',
                         'group' => 'Prices',
@@ -430,7 +430,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Attribute\Backend\Startdate',
                         'required' => false,
                         'sort_order' => 4,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                         'used_in_product_listing' => true,
                         'apply_to' => 'simple,virtual',
                         'group' => 'Prices',
@@ -445,7 +445,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Eav\Model\Entity\Attribute\Backend\Datetime',
                         'required' => false,
                         'sort_order' => 5,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                         'used_in_product_listing' => true,
                         'apply_to' => 'simple,virtual',
                         'group' => 'Prices',
@@ -461,7 +461,7 @@ class CategorySetup extends EavSetup
                         'required' => false,
                         'user_defined' => true,
                         'sort_order' => 6,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                         'apply_to' => 'simple,virtual',
                         'group' => 'Prices',
                         'is_used_in_grid' => true,
@@ -501,7 +501,7 @@ class CategorySetup extends EavSetup
                         'input' => 'text',
                         'required' => false,
                         'sort_order' => 20,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Meta Information',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -513,7 +513,7 @@ class CategorySetup extends EavSetup
                         'input' => 'textarea',
                         'required' => false,
                         'sort_order' => 30,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Meta Information',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -527,7 +527,7 @@ class CategorySetup extends EavSetup
                         'note' => 'Maximum 255 chars',
                         'class' => 'validate-length maximum-length-255',
                         'sort_order' => 40,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Meta Information',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -541,7 +541,7 @@ class CategorySetup extends EavSetup
                         'input_renderer' => 'Magento\Catalog\Block\Adminhtml\Product\Helper\Form\BaseImage',
                         'required' => false,
                         'sort_order' => 0,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'used_in_product_listing' => true,
                         'group' => 'General',
                     ],
@@ -552,7 +552,7 @@ class CategorySetup extends EavSetup
                         'frontend' => 'Magento\Catalog\Model\Product\Attribute\Frontend\Image',
                         'required' => false,
                         'sort_order' => 2,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'used_in_product_listing' => true,
                         'group' => 'Images',
                     ],
@@ -563,7 +563,7 @@ class CategorySetup extends EavSetup
                         'frontend' => 'Magento\Catalog\Model\Product\Attribute\Frontend\Image',
                         'required' => false,
                         'sort_order' => 3,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'used_in_product_listing' => true,
                         'group' => 'Images',
                     ],
@@ -584,7 +584,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Product\Attribute\Backend\Tierprice',
                         'required' => false,
                         'sort_order' => 7,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                         'apply_to' => 'simple,virtual',
                         'group' => 'Prices',
                     ],
@@ -610,7 +610,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Attribute\Backend\Startdate',
                         'required' => false,
                         'sort_order' => 7,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                         'used_in_product_listing' => true,
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -623,7 +623,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Eav\Model\Entity\Attribute\Backend\Datetime',
                         'required' => false,
                         'sort_order' => 8,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                         'used_in_product_listing' => true,
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -643,7 +643,7 @@ class CategorySetup extends EavSetup
                         'input' => 'select',
                         'source' => 'Magento\Catalog\Model\Product\Attribute\Source\Status',
                         'sort_order' => 9,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                         'searchable' => true,
                         'used_in_product_listing' => true,
                     ],
@@ -653,7 +653,7 @@ class CategorySetup extends EavSetup
                         'input' => 'price',
                         'required' => false,
                         'sort_order' => 8,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'visible' => false,
                         'apply_to' => 'simple,virtual',
                         'group' => 'Prices',
@@ -665,7 +665,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Catalog\Model\Product\Visibility',
                         'default' => '4',
                         'sort_order' => 12,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                     ],
                     'custom_design' => [
                         'type' => 'varchar',
@@ -674,7 +674,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Theme\Model\Theme\Source\Theme',
                         'required' => false,
                         'sort_order' => 1,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Design',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -687,7 +687,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Attribute\Backend\Startdate',
                         'required' => false,
                         'sort_order' => 2,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Design',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -700,7 +700,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Eav\Model\Entity\Attribute\Backend\Datetime',
                         'required' => false,
                         'sort_order' => 3,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Design',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -713,7 +713,7 @@ class CategorySetup extends EavSetup
                         'backend' => 'Magento\Catalog\Model\Attribute\Backend\Customlayoutupdate',
                         'required' => false,
                         'sort_order' => 4,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Design',
                     ],
                     'page_layout' => [
@@ -723,7 +723,7 @@ class CategorySetup extends EavSetup
                         'source' => 'Magento\Catalog\Model\Product\Attribute\Source\Layout',
                         'required' => false,
                         'sort_order' => 5,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Design',
                         'is_used_in_grid' => true,
                         'is_visible_in_grid' => false,
@@ -732,7 +732,7 @@ class CategorySetup extends EavSetup
                     'category_ids' => [
                         'type' => 'static',
                         'label' => 'Categories',
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
                         'backend' => 'Magento\Catalog\Model\Product\Attribute\Backend\Category',
                         'input_renderer' => 'Magento\Catalog\Block\Adminhtml\Product\Helper\Form\Category',
                         'required' => false,
@@ -748,7 +748,7 @@ class CategorySetup extends EavSetup
                         'required' => false,
                         'default' => 'container2',
                         'sort_order' => 6,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'group' => 'Design',
                     ],
                     'required_options' => [
@@ -772,7 +772,7 @@ class CategorySetup extends EavSetup
                         'input' => 'text',
                         'required' => false,
                         'sort_order' => 16,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'visible' => false,
                         'used_in_product_listing' => true,
                     ],
@@ -782,7 +782,7 @@ class CategorySetup extends EavSetup
                         'input' => 'text',
                         'required' => false,
                         'sort_order' => 17,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'visible' => false,
                         'used_in_product_listing' => true,
                     ],
@@ -792,7 +792,7 @@ class CategorySetup extends EavSetup
                         'input' => 'text',
                         'required' => false,
                         'sort_order' => 18,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                         'visible' => false,
                         'used_in_product_listing' => true,
                     ],
@@ -816,7 +816,7 @@ class CategorySetup extends EavSetup
                         'input' => 'select',
                         'source' => 'Magento\Catalog\Model\Product\Attribute\Source\Countryofmanufacture',
                         'required' => false,
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                         'visible' => true,
                         'user_defined' => false,
                         'searchable' => false,
@@ -838,7 +838,7 @@ class CategorySetup extends EavSetup
                         'input' => 'select',
                         'input_renderer' => 'Magento\CatalogInventory\Block\Adminhtml\Form\Field\Stock',
                         'source' => 'Magento\\CatalogInventory\\Model\\Source\\Stock',
-                        'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL,
+                        'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
                         'default' => \Magento\CatalogInventory\Model\Stock::STOCK_IN_STOCK,
                         'user_defined' => false,
                         'visible' => true,
diff --git a/app/code/Magento/Catalog/Setup/InstallData.php b/app/code/Magento/Catalog/Setup/InstallData.php
index e77013106a2377d7e9744026380e94e8b140c4f2..535d99c56fed7e313c75604440b6a0f05345da32 100644
--- a/app/code/Magento/Catalog/Setup/InstallData.php
+++ b/app/code/Magento/Catalog/Setup/InstallData.php
@@ -305,7 +305,7 @@ class InstallData implements InstallDataInterface
             \Magento\Catalog\Model\Category::ENTITY,
             'custom_design_from',
             'attribute_model',
-            'Magento\Catalog\Model\Resource\Eav\Attribute'
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
         );
         $categorySetup->updateAttribute(
             \Magento\Catalog\Model\Category::ENTITY,
diff --git a/app/code/Magento/Catalog/Setup/UpgradeData.php b/app/code/Magento/Catalog/Setup/UpgradeData.php
index 5adf385101fc2e67d571c6a3421c46940c685ff8..c59635383719f1e21810929af146899695d32f39 100644
--- a/app/code/Magento/Catalog/Setup/UpgradeData.php
+++ b/app/code/Magento/Catalog/Setup/UpgradeData.php
@@ -35,6 +35,7 @@ class UpgradeData implements UpgradeDataInterface
 
     /**
      * {@inheritdoc}
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
     {
@@ -46,21 +47,31 @@ class UpgradeData implements UpgradeDataInterface
             $entityTypeId = $categorySetup->getEntityTypeId(\Magento\Catalog\Model\Product::ENTITY);
             $attributeSetId = $categorySetup->getDefaultAttributeSetId($entityTypeId);
 
-            $attributeGroupId = $categorySetup->getAttributeGroupId($entityTypeId, $attributeSetId, 'Images');
-
-            // update General Group
-            $categorySetup->updateAttributeGroup(
+            $attributeGroup = $categorySetup->getAttributeGroup(
                 $entityTypeId,
                 $attributeSetId,
-                $attributeGroupId,
-                'attribute_group_name',
-                'Images and Videos'
+                'Images',
+                'attribute_group_name'
             );
+            if (isset($attributeGroup['attribute_group_name']) && $attributeGroup['attribute_group_name'] == 'Images') {
+                // update General Group
+                $categorySetup->updateAttributeGroup(
+                    $entityTypeId,
+                    $attributeSetId,
+                    $attributeGroup['attribute_group_id'],
+                    'attribute_group_name',
+                    'Images and Videos'
+                );
+            }
+        }
+
+        if ($context->getVersion()
+            && version_compare($context->getVersion(), '2.0.1') < 0
+        ) {
             $select = $setup->getConnection()->select()
                 ->from(
                     $setup->getTable('catalog_product_entity_group_price'),
                     [
-                        'value_id',
                         'entity_id',
                         'all_groups',
                         'customer_group_id',
@@ -69,11 +80,10 @@ class UpgradeData implements UpgradeDataInterface
                         'website_id'
                     ]
                 );
-            $setup->getConnection()->insertFromSelect(
+            $select = $setup->getConnection()->insertFromSelect(
                 $select,
-                $setup->getTable('catalog_product_entity_group_price'),
+                $setup->getTable('catalog_product_entity_tier_price'),
                 [
-                    'value_id',
                     'entity_id',
                     'all_groups',
                     'customer_group_id',
@@ -82,9 +92,53 @@ class UpgradeData implements UpgradeDataInterface
                     'website_id'
                 ]
             );
+            $setup->getConnection()->query($select);
+
             $categorySetupManager = $this->categorySetupFactory->create();
             $categorySetupManager->removeAttribute(\Magento\Catalog\Model\Product::ENTITY, 'group_price');
         }
+
+        if (version_compare($context->getVersion(), '2.0.2') < 0) {
+            // set new resource model paths
+            /** @var \Magento\Catalog\Setup\CategorySetup $categorySetup */
+            $categorySetup = $this->categorySetupFactory->create(['setup' => $setup]);
+            $categorySetup->updateEntityType(
+                \Magento\Catalog\Model\Category::ENTITY,
+                'entity_model',
+                'Magento\Catalog\Model\ResourceModel\Category'
+            );
+            $categorySetup->updateEntityType(
+                \Magento\Catalog\Model\Category::ENTITY,
+                'attribute_model',
+                'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
+            );
+            $categorySetup->updateEntityType(
+                \Magento\Catalog\Model\Category::ENTITY,
+                'entity_attribute_collection',
+                'Magento\Catalog\Model\ResourceModel\Category\Attribute\Collection'
+            );
+            $categorySetup->updateAttribute(
+                \Magento\Catalog\Model\Category::ENTITY,
+                'custom_design_from',
+                'attribute_model',
+                'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
+            );
+            $categorySetup->updateEntityType(
+                \Magento\Catalog\Model\Product::ENTITY,
+                'entity_model',
+                'Magento\Catalog\Model\ResourceModel\Product'
+            );
+            $categorySetup->updateEntityType(
+                \Magento\Catalog\Model\Product::ENTITY,
+                'attribute_model',
+                'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
+            );
+            $categorySetup->updateEntityType(
+                \Magento\Catalog\Model\Product::ENTITY,
+                'entity_attribute_collection',
+                'Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection'
+            );
+        }
         $setup->endSetup();
     }
 }
diff --git a/app/code/Magento/Catalog/Setup/UpgradeSchema.php b/app/code/Magento/Catalog/Setup/UpgradeSchema.php
index fe978e80a9807df85c09ff8d94bea42a9bd64280..cf92de0f7e6bbe02a2e3b6c292abbcdaf5509cee 100644
--- a/app/code/Magento/Catalog/Setup/UpgradeSchema.php
+++ b/app/code/Magento/Catalog/Setup/UpgradeSchema.php
@@ -9,7 +9,7 @@ namespace Magento\Catalog\Setup;
 use Magento\Framework\Setup\UpgradeSchemaInterface;
 use Magento\Framework\Setup\ModuleContextInterface;
 use Magento\Framework\Setup\SchemaSetupInterface;
-use Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media;
+use Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media;
 use Magento\Catalog\Model\Product\Attribute\Backend\Media\ImageEntryConverter;
 
 /**
@@ -140,6 +140,10 @@ class UpgradeSchema implements UpgradeSchemaInterface
      */
     private function addSupportVideoMediaAttributes(SchemaSetupInterface $setup)
     {
+        if ($setup->tableExists(Media::GALLERY_VALUE_TO_ENTITY_TABLE)) {
+            return;
+        };
+
         /** Add support video media attribute */
         $this->createValueToEntityTable($setup);
         /**
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/AbstractCategoryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/AbstractCategoryTest.php
index 51ffc7e98d1be02fdcd1967fb027b3b79fe0010f..ee71282c4078261577e5f6ca0ba8502a0574b4bb 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/AbstractCategoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/AbstractCategoryTest.php
@@ -119,4 +119,19 @@ class AbstractCategoryTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($saveUrl, $this->category->getSaveUrl());
     }
 
+    public function testGetRootIdsFromCache()
+    {
+        $this->category->setData('root_ids', ['ids']);
+        $this->storeManagerMock->expects($this->never())->method('getGroups');
+
+        $this->assertEquals(['ids'], $this->category->getRootIds());
+    }
+
+    public function testGetRootIds()
+    {
+        $this->storeManagerMock->expects($this->once())->method('getGroups')->willReturn([$this->storeMock]);
+        $this->storeMock->expects($this->once())->method('getRootCategoryId')->willReturn('storeId');
+
+        $this->assertEquals([\Magento\Catalog\Model\Category::TREE_ROOT_ID, 'storeId'], $this->category->getRootIds());
+    }
 }
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/Edit/FormTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/Edit/FormTest.php
index 7e155af62f3e14b1e4ef1b3dfa4513379f9e48be..8905d2cafc7788f07da17f9ca2221ea9c4bc0348 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/Edit/FormTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Category/Edit/FormTest.php
@@ -26,7 +26,7 @@ class FormTest extends \PHPUnit_Framework_TestCase
     protected $contextMock;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\Tree|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Tree|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $categoryTreeMock;
 
@@ -67,7 +67,7 @@ class FormTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->categoryTreeMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Category\Tree',
+            'Magento\Catalog\Model\ResourceModel\Category\Tree',
             [],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Attribute/Edit/Tab/AdvancedTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Attribute/Edit/Tab/AdvancedTest.php
index b192750d71a30dcf8548a9fd2f4eb1020f1da4dc..a54834d4f56966f448480c1000f1f98ba45c4356 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Attribute/Edit/Tab/AdvancedTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Attribute/Edit/Tab/AdvancedTest.php
@@ -69,7 +69,7 @@ class AdvancedTest extends \PHPUnit_Framework_TestCase
     {
         $fieldSet = $this->getMock('Magento\Framework\Data\Form\Element\Fieldset', [], [], '', false);
         $form = $this->getMock('Magento\Framework\Data\Form', [], [], '', false);
-        $attributeModel = $this->getMock('\Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $attributeModel = $this->getMock('\Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $entityType = $this->getMock('Magento\Eav\Model\Entity\Type', [], [], '', false);
         $formElement = $this->getMock('Magento\Framework\Data\Form\Element\Text', ['setDisabled'], [], '', false);
         $directoryReadInterface = $this->getMock('\Magento\Framework\Filesystem\Directory\ReadInterface');
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Attribute/GridTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Attribute/GridTest.php
index 94c0c83a1ced5724b06182df11b88136fb487c87..8637eaa713d5eb09c40feda5dcf759ad67b15737 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Attribute/GridTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Attribute/GridTest.php
@@ -9,7 +9,7 @@ class GridTest extends \PHPUnit_Framework_TestCase
 {
     public function testGetRowUrl()
     {
-        $attribute = $this->getMock('Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $attribute = $this->getMock('Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $attribute->expects($this->once())->method('getAttributeId')->will($this->returnValue(2));
 
         $filesystem = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Composite/Fieldset/OptionsTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Composite/Fieldset/OptionsTest.php
index b25ae600fca0ddef47a8e999d7b0e5c21a041b1d..fe01ae649672f64d643ca5f34d7a14ba2ec07b8a 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Composite/Fieldset/OptionsTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Adminhtml/Product/Composite/Fieldset/OptionsTest.php
@@ -23,7 +23,7 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
     protected $_optionsBlock;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Option
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Option
      */
     protected $_optionResource;
 
@@ -31,7 +31,7 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
     {
         $this->_objectHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_optionResource = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Option',
+            'Magento\Catalog\Model\ResourceModel\Product\Option',
             [],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php
index 564e08a1cbc61d2b5cff9afbcfdc097de8457b0b..eec42410e2e81cdada1331e9827bcd966b78a4ed 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/GalleryTest.php
@@ -32,6 +32,11 @@ class GalleryTest extends \PHPUnit_Framework_TestCase
      */
     protected $registry;
 
+    /**
+     * @var \Magento\Framework\Json\EncoderInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $jsonEncoderMock;
+
     protected function setUp()
     {
         $this->mockContext();
@@ -40,9 +45,14 @@ class GalleryTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
+        $this->jsonEncoderMock = $this->getMockBuilder('Magento\Framework\Json\EncoderInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+
         $this->model = new \Magento\Catalog\Block\Product\View\Gallery(
             $this->context,
-            $this->arrayUtils
+            $this->arrayUtils,
+            $this->jsonEncoderMock
         );
     }
 
@@ -103,7 +113,8 @@ class GalleryTest extends \PHPUnit_Framework_TestCase
                 [$productMock, 'product_page_image_small', [], $this->imageHelper],
                 [$productMock, 'product_page_image_medium', [], $this->imageHelper],
                 [$productMock, 'product_page_image_large', [], $this->imageHelper],
-            ]);
+            ])
+            ->willReturnSelf();
         $this->imageHelper->expects($this->exactly(3))
             ->method('setImageFile')
             ->with('test_file')
@@ -118,6 +129,19 @@ class GalleryTest extends \PHPUnit_Framework_TestCase
             ->method('getUrl')
             ->willReturn('product_page_image_large_url');
 
+        $this->imageHelper->expects($this->exactly(2))
+            ->method('constrainOnly')
+            ->with(true)
+            ->willReturnSelf();
+        $this->imageHelper->expects($this->exactly(2))
+            ->method('keepAspectRatio')
+            ->with(true)
+            ->willReturnSelf();
+         $this->imageHelper->expects($this->exactly(2))
+            ->method('keepFrame')
+            ->with(false)
+            ->willReturnSelf();
+
         $images = $this->model->getGalleryImages();
         $this->assertInstanceOf('Magento\Framework\Data\Collection', $images);
     }
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/OptionsTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/OptionsTest.php
index 89334c976db3f14d4426640eed9196b808cf76ed..c7c39058bdc114c8ee6b9d7a1b8394d157a5b356 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Product/View/OptionsTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/View/OptionsTest.php
@@ -23,7 +23,7 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
     protected $_optionsBlock;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Option
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Option
      */
     protected $_optionResource;
 
@@ -31,7 +31,7 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
     {
         $this->_objectHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_optionResource = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Option',
+            'Magento\Catalog\Model\ResourceModel\Product\Option',
             [],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Product/Widget/NewWidgetTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Product/Widget/NewWidgetTest.php
index 156971df2a4cf0b5682e517d5de849e430e394b4..9cd7790436de6419fc08f9533d386ab1250870fc 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Product/Widget/NewWidgetTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Product/Widget/NewWidgetTest.php
@@ -49,7 +49,7 @@ class NewWidgetTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\Stdlib\DateTime\Timezone|\PHPUnit_Framework_MockObject_MockObject */
     protected $localDate;
 
-    /** @var \Magento\Catalog\Model\Resource\Product\Collection|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection|\PHPUnit_Framework_MockObject_MockObject */
     protected $productCollection;
 
     protected function setUp()
@@ -187,7 +187,7 @@ class NewWidgetTest extends \PHPUnit_Framework_TestCase
         $this->context->expects($this->once())->method('getCatalogConfig')->willReturn($this->catalogConfig);
         $this->context->expects($this->once())->method('getLocaleDate')->willReturn($this->localDate);
 
-        $this->productCollection = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Collection')
+        $this->productCollection = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Collection')
             ->setMethods(
                 [
                     'setVisibility', 'addMinimalPrice', 'addFinalPrice',
@@ -229,7 +229,7 @@ class NewWidgetTest extends \PHPUnit_Framework_TestCase
     protected function startTestGetProductCollection($displayType, $pagerEnable, $productsCount, $productsPerPage)
     {
         $productCollectionFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\CollectionFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Rss/CategoryTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Rss/CategoryTest.php
index 3321577858cf87723c278576b407586d82eca89f..aeb204d09d20205e6b40a1032a05ad2ec6142ad7 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Rss/CategoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Rss/CategoryTest.php
@@ -209,7 +209,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['__sleep', '__wakeup', 'getTreeModel', 'getResourceCollection', 'getId', 'getName'])
             ->disableOriginalConstructor()->getMock();
 
-        $collection = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Category\Collection')
+        $collection = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Category\Collection')
             ->setMethods([
                 'addIdFilter',
                 'addAttributeToSelect',
@@ -237,7 +237,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['getChildren'])->disableOriginalConstructor()->getMock();
         $nodes->expects($this->once())->method('getChildren')->will($this->returnValue([$node]));
 
-        $tree = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Category\Tree')
+        $tree = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Category\Tree')
             ->setMethods(['loadChildren', 'loadNode'])->disableOriginalConstructor()->getMock();
         $tree->expects($this->once())->method('loadNode')->will($this->returnSelf());
         $tree->expects($this->once())->method('loadChildren')->will($this->returnValue($nodes));
diff --git a/app/code/Magento/Catalog/Test/Unit/Block/Widget/LinkTest.php b/app/code/Magento/Catalog/Test/Unit/Block/Widget/LinkTest.php
index 3f526e5a79fbc8aa6412a7aa6f8fc7fc2b7d91b0..7312dc486285fdf6197b92b5ca04241b23e5d395 100644
--- a/app/code/Magento/Catalog/Test/Unit/Block/Widget/LinkTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Block/Widget/LinkTest.php
@@ -27,7 +27,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
     protected $block;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entityResource;
 
@@ -41,7 +41,8 @@ class LinkTest extends \PHPUnit_Framework_TestCase
             ->method('getStoreManager')
             ->will($this->returnValue($this->storeManager));
 
-        $this->entityResource = $this->getMock('Magento\Catalog\Model\Resource\AbstractResource', [], [], '', false);
+        $this->entityResource =
+            $this->getMock('Magento\Catalog\Model\ResourceModel\AbstractResource', [], [], '', false);
 
         $this->block = (new ObjectManager($this))->getObject('Magento\Catalog\Block\Widget\Link', [
             'context' => $context,
diff --git a/app/code/Magento/Catalog/Test/Unit/Console/Command/ImagesResizeCommandTest.php b/app/code/Magento/Catalog/Test/Unit/Console/Command/ImagesResizeCommandTest.php
index 9688b3dc7080e8038c99a24f5777e1f9daf26f5f..f7f80f767faf370a70b72ee4fa02627f4e0ff92e 100644
--- a/app/code/Magento/Catalog/Test/Unit/Console/Command/ImagesResizeCommandTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Console/Command/ImagesResizeCommandTest.php
@@ -9,8 +9,8 @@ use Magento\Catalog\Api\ProductRepositoryInterface;
 use Magento\Catalog\Console\Command\ImagesResizeCommand;
 use Magento\Catalog\Model\Product\Image\Cache as ImageCache;
 use Magento\Catalog\Model\Product\Image\CacheFactory as ImageCacheFactory;
-use Magento\Catalog\Model\Resource\Product\Collection as ProductCollection;
-use Magento\Catalog\Model\Resource\Product\CollectionFactory as ProductCollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\Collection as ProductCollection;
+use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;
 use Magento\Framework\App\State as AppState;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Symfony\Component\Console\Tester\CommandTester;
@@ -172,14 +172,14 @@ class ImagesResizeCommandTest extends \PHPUnit_Framework_TestCase
     protected function prepareProductCollection()
     {
         $this->productCollectionFactory = $this->getMockBuilder(
-            'Magento\Catalog\Model\Resource\Product\CollectionFactory'
+            'Magento\Catalog\Model\ResourceModel\Product\CollectionFactory'
         )
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
 
         $this->productCollection = $this->getMockBuilder(
-            'Magento\Catalog\Model\Resource\Product\Collection'
+            'Magento\Catalog\Model\ResourceModel\Product\Collection'
         )
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/SaveTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/SaveTest.php
index 64848c258fa9bdae966b772faf52f7e66697e94a..09cad210ad80cf1e510c7057799c5210fed0e5fe 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/SaveTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Category/SaveTest.php
@@ -494,7 +494,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             );
 
         $categoryResource = $this->getMock(
-            'Magento\Catalog\Model\Resource\Category',
+            'Magento\Catalog\Model\ResourceModel\Category',
             [],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/EditTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/EditTest.php
index 294860b66a912f5f159583bca261c3e9743f5ad9..f8cf08f5474944f81af73ecf0565e9cc6672e9e9 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/EditTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Attribute/EditTest.php
@@ -28,7 +28,7 @@ class EditTest extends \PHPUnit_Framework_TestCase
     protected $objectManagerMock;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $eavAttribute;
 
@@ -94,7 +94,7 @@ class EditTest extends \PHPUnit_Framework_TestCase
         $this->objectManagerMock = $this->getMockBuilder('Magento\Framework\ObjectManagerInterface')->getMock();
 
         $this->eavAttribute = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['setEntityTypeId', 'load', 'getId', 'getEntityTypeId', 'addData', 'getName'],
             [],
             '',
@@ -165,7 +165,7 @@ class EditTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->objectManagerMock->expects($this->any())->method('create')
-            ->with('Magento\Catalog\Model\Resource\Eav\Attribute')
+            ->with('Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->willReturn($this->eavAttribute);
         $this->objectManagerMock->expects($this->any())->method('get')
             ->with('Magento\Backend\Model\Session')
@@ -215,7 +215,7 @@ class EditTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->objectManagerMock->expects($this->any())->method('create')
-            ->with('Magento\Catalog\Model\Resource\Eav\Attribute')
+            ->with('Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->willReturn($this->eavAttribute);
         $this->objectManagerMock->expects($this->any())->method('get')
             ->with('Magento\Backend\Model\Session')
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php
index 58c02ff2b0de239a02197094a7bd659b7be3b967..bc1feb15acf62d577fc8a36176a6f8d4b057b6c5 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/Initialization/HelperTest.php
@@ -145,8 +145,8 @@ class HelperTest extends \PHPUnit_Framework_TestCase
             'options' => ['option1', 'option2']
         ];
 
-        $attributeNonDate = $this->getMock('Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
-        $attributeDate = $this->getMock('Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $attributeNonDate = $this->getMock('Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
+        $attributeDate = $this->getMock('Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
 
         $attributeNonDateBackEnd =
             $this->getMock('Magento\Eav\Model\Entity\Attribute\Backend\DefaultBackend', [], [], '', false);
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php
index 225a88787b393b02f6fa5396f565729c8a80adf7..47dd99f5ce0230e7cbb8d9598b7381ff4d0da820 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Adminhtml/Product/MassStatusTest.php
@@ -59,7 +59,7 @@ class MassStatusTest extends \Magento\Catalog\Test\Unit\Controller\Adminhtml\Pro
             ->method('getCollection')
             ->willReturn($abstractDbMock);
         
-        $collectionFactoryMock = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\CollectionFactory')
+        $collectionFactoryMock = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
diff --git a/app/code/Magento/Catalog/Test/Unit/Controller/Product/Compare/IndexTest.php b/app/code/Magento/Catalog/Test/Unit/Controller/Product/Compare/IndexTest.php
index ce42e88b9d6dfa27b76930b60c130b38e90fdff2..134776df35391e9a3a9bcc466d382dc438165f87 100644
--- a/app/code/Magento/Catalog/Test/Unit/Controller/Product/Compare/IndexTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Controller/Product/Compare/IndexTest.php
@@ -11,7 +11,7 @@ namespace Magento\Catalog\Test\Unit\Controller\Product\Compare;
 
 use \Magento\Catalog\Controller\Product\Compare\Index;
 
-use Magento\Catalog\Model\Resource\Product\Compare\Item;
+use Magento\Catalog\Model\ResourceModel\Product\Compare\Item;
 
 /**
  * @SuppressWarnings(PHPMD.TooManyFields)
@@ -99,7 +99,7 @@ class IndexTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->collectionFactoryMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Compare\Item\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Compare\Item\CollectionFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Cron/RefreshSpecialPricesTest.php b/app/code/Magento/Catalog/Test/Unit/Cron/RefreshSpecialPricesTest.php
index bfa152c203c715e46d46a1a91627f1ecddc05080..c1f1be8e6ed9fe9876f238b42f9bd5dbd914ed34 100644
--- a/app/code/Magento/Catalog/Test/Unit/Cron/RefreshSpecialPricesTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Cron/RefreshSpecialPricesTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Test\Unit\Cron;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class RefreshSpecialPricesTest extends \PHPUnit_Framework_TestCase
 {
@@ -60,7 +60,7 @@ class RefreshSpecialPricesTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->_resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->_resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->_dateTimeMock = $this->getMock('Magento\Framework\Stdlib\DateTime', [], [], '', false);
         $this->_localeDateMock = $this->getMock('Magento\Framework\Stdlib\DateTime\TimezoneInterface');
         $this->_eavConfigMock = $this->getMock('Magento\Eav\Model\Config', [], [], '', false);
diff --git a/app/code/Magento/Catalog/Test/Unit/Helper/Product/Flat/IndexerTest.php b/app/code/Magento/Catalog/Test/Unit/Helper/Product/Flat/IndexerTest.php
index 3394911a762a86f7839dbc84cb946f1ea258e58f..29bbe6f105783d092c1c84bca4c723888840bced 100644
--- a/app/code/Magento/Catalog/Test/Unit/Helper/Product/Flat/IndexerTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Helper/Product/Flat/IndexerTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Test\Unit\Helper\Product\Flat;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class IndexerTest extends \PHPUnit_Framework_TestCase
 {
@@ -44,7 +44,7 @@ class IndexerTest extends \PHPUnit_Framework_TestCase
         $contextMock = $this->getMock('Magento\Framework\App\Helper\Context', [], [], '', false);
 
         $this->_resourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -66,7 +66,7 @@ class IndexerTest extends \PHPUnit_Framework_TestCase
         $attributeConfigMock = $this->getMock('Magento\Catalog\Model\Attribute\Config', [], [], '', false);
 
         $resourceConfigFactoryMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\ConfigFactory',
+            'Magento\Catalog\Model\ResourceModel\ConfigFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Source/PageTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Source/PageTest.php
index 1086b9a0c28a189006cc0f248931ffc26c45917f..bca9018d95c986eba7525c186633d20d06e190e6 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Source/PageTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Category/Attribute/Source/PageTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Test\Unit\Model\Category\Attribute\Source;
 
-use Magento\Cms\Model\Resource\Block\CollectionFactory;
+use Magento\Cms\Model\ResourceModel\Block\CollectionFactory;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 class PageTest extends \PHPUnit_Framework_TestCase
@@ -39,13 +39,13 @@ class PageTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @return \Magento\Cms\Model\Resource\Block\CollectionFactory
+     * @return \Magento\Cms\Model\ResourceModel\Block\CollectionFactory
      */
     private function getMockedBlockCollectionFactory()
     {
         $mockedCollection = $this->getMockedCollection();
 
-        $mockBuilder = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\CollectionFactory');
+        $mockBuilder = $this->getMockBuilder('Magento\Cms\Model\ResourceModel\Block\CollectionFactory');
         $mock = $mockBuilder->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Category/TreeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Category/TreeTest.php
index 4c84e9496f6bd4b3d2f4cdd3984702519e0861a4..264b1633aec05273ec1ad2776a978165558713be 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Category/TreeTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Category/TreeTest.php
@@ -11,7 +11,7 @@ namespace Magento\Catalog\Test\Unit\Model\Category;
 class TreeTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Catalog\Model\Resource\Category\Tree
+     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Catalog\Model\ResourceModel\Category\Tree
      */
     protected $categoryTreeMock;
 
@@ -21,7 +21,7 @@ class TreeTest extends \PHPUnit_Framework_TestCase
     protected $storeManagerMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Catalog\Model\Resource\Category\Collection
+     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Catalog\Model\ResourceModel\Category\Collection
      */
     protected $categoryCollection;
 
@@ -50,12 +50,12 @@ class TreeTest extends \PHPUnit_Framework_TestCase
         $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
         $this->categoryTreeMock = $this->getMockBuilder(
-                '\Magento\Catalog\Model\Resource\Category\Tree'
+                '\Magento\Catalog\Model\ResourceModel\Category\Tree'
             )->disableOriginalConstructor()
             ->getMock();
 
         $this->categoryCollection = $this->getMockBuilder(
-                '\Magento\Catalog\Model\Resource\Category\Collection'
+                '\Magento\Catalog\Model\ResourceModel\Category\Collection'
             )->disableOriginalConstructor()
             ->getMock();
 
@@ -124,7 +124,7 @@ class TreeTest extends \PHPUnit_Framework_TestCase
         $this->categoryCollection->expects($this->once())->method('setStoreId')->will($this->returnSelf());
 
         $node = $this->getMockBuilder(
-            'Magento\Catalog\Model\Resource\Category\Tree'
+            'Magento\Catalog\Model\ResourceModel\Category\Tree'
         )->disableOriginalConstructor()
         ->getMock();
         $node->expects($this->once())->method('addCollectionData')
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/CategoryManagementTest.php b/app/code/Magento/Catalog/Test/Unit/Model/CategoryManagementTest.php
index 4dd3d46c20e2121d07a481bf9eed160779c489a3..b388fbd420c18efe63cfb7404b917002492c5bb3 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/CategoryManagementTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/CategoryManagementTest.php
@@ -23,7 +23,7 @@ class CategoryManagementTest extends \PHPUnit_Framework_TestCase
     protected $categoryTreeMock;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $categoriesFactoryMock;
 
@@ -32,7 +32,7 @@ class CategoryManagementTest extends \PHPUnit_Framework_TestCase
         $this->categoryRepositoryMock = $this->getMock('Magento\Catalog\Api\CategoryRepositoryInterface');
         $this->categoryTreeMock = $this->getMock('Magento\Catalog\Model\Category\Tree', [], [], '', false);
         $this->categoriesFactoryMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Category\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Category\CollectionFactory',
             ['create'],
             [],
             '',
@@ -187,7 +187,7 @@ class CategoryManagementTest extends \PHPUnit_Framework_TestCase
 
     public function testGetCount()
     {
-        $categoriesMock = $this->getMock('\Magento\Catalog\Model\Resource\Category\Collection', [], [], '', false);
+        $categoriesMock = $this->getMock('\Magento\Catalog\Model\ResourceModel\Category\Collection', [], [], '', false);
 
         $this->categoriesFactoryMock
             ->expects($this->once())
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/CategoryRepositoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/CategoryRepositoryTest.php
index 3364d055806c4f99cbe7aa68821556dcd0399975..43f40cdac2d712b84e26c67c3b109d01729821fc 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/CategoryRepositoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/CategoryRepositoryTest.php
@@ -36,7 +36,8 @@ class CategoryRepositoryTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->categoryResourceMock = $this->getMock('\Magento\Catalog\Model\Resource\Category', [], [], '', false);
+        $this->categoryResourceMock =
+            $this->getMock('\Magento\Catalog\Model\ResourceModel\Category', [], [], '', false);
         $this->storeManagerMock = $this->getMock('\Magento\Store\Model\StoreManagerInterface');
 
         $this->model = new \Magento\Catalog\Model\CategoryRepository(
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php
index e8a165f8baac1be9e8f0da0e68a488433e42a77b..3b24090d3ecf394401f6fca1d83af8171298a047 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/CategoryTest.php
@@ -34,7 +34,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $storeManager;
 
-    /** @var \Magento\Catalog\Model\Resource\Category\Tree|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Category\Tree|\PHPUnit_Framework_MockObject_MockObject */
     protected $categoryTreeResource;
 
     /** @var \PHPUnit_Framework_MockObject_MockObject */
@@ -73,7 +73,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\UrlRewrite\Model\UrlFinderInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $urlFinder;
 
-    /** @var \Magento\Framework\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject */
     protected $resource;
 
     /** @var \Magento\Framework\Indexer\IndexerRegistry|\PHPUnit_Framework_MockObject_MockObject */
@@ -108,16 +108,16 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
 
         $this->registry = $this->getMock('Magento\Framework\Registry');
         $this->storeManager = $this->getMock('Magento\Store\Model\StoreManagerInterface');
-        $this->categoryTreeResource = $this->getMock('Magento\Catalog\Model\Resource\Category\Tree', [], [], '', false);
+        $this->categoryTreeResource = $this->getMock('Magento\Catalog\Model\ResourceModel\Category\Tree', [], [], '', false);
         $this->categoryTreeFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Category\TreeFactory',
+            'Magento\Catalog\Model\ResourceModel\Category\TreeFactory',
             ['create'],
             [],
             '',
             false);
         $this->categoryRepository = $this->getMock('Magento\Catalog\Api\CategoryRepositoryInterface');
         $this->storeCollectionFactory = $this->getMock(
-            'Magento\Store\Model\Resource\Store\CollectionFactory',
+            'Magento\Store\Model\ResourceModel\Store\CollectionFactory',
             ['create'],
             [],
             '',
@@ -125,7 +125,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
         );
         $this->url = $this->getMock('Magento\Framework\UrlInterface');
         $this->productCollectionFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\CollectionFactory',
             ['create'],
             [],
             '',
@@ -151,7 +151,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
         );
         $this->urlFinder = $this->getMock('Magento\UrlRewrite\Model\UrlFinderInterface');
         $this->resource = $this->getMock(
-            'Magento\Catalog\Model\Resource\Category',
+            'Magento\Catalog\Model\ResourceModel\Category',
             [],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Config/CatalogClone/Media/ImageTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Config/CatalogClone/Media/ImageTest.php
index 0ec5008c09c578b1490a2d23d49a5857084d1ab6..da95f8962043d238a1272e1f1f0e50d48e2d242b 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Config/CatalogClone/Media/ImageTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Config/CatalogClone/Media/ImageTest.php
@@ -22,12 +22,12 @@ class ImageTest extends \PHPUnit_Framework_TestCase
     private $eavConfig;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     private $attributeCollectionFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $attributeCollection;
 
@@ -43,13 +43,13 @@ class ImageTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->attributeCollection = $this->getMockBuilder(
-            '\Magento\Catalog\Model\Resource\Product\Attribute\Collection'
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection'
         )
             ->disableOriginalConstructor()
             ->getMock();
 
         $this->attributeCollectionFactory = $this->getMockBuilder(
-            'Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory'
+            'Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory'
         )
             ->setMethods(['create'])
             ->disableOriginalConstructor()
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Config/Source/CategoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Config/Source/CategoryTest.php
index 5ca90dbcd73f9eefe15896741da53155f92e7edc..1de3aab27078181482edb0d4e85422c5bdba718c 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Config/Source/CategoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Config/Source/CategoryTest.php
@@ -16,28 +16,31 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
     private $model;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\Collection|MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Collection|MockObject
      */
     private $categoryCollection;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category|MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Category|MockObject
      */
     private $category;
 
     protected function setUp()
     {
-        $this->categoryCollection = $this->getMockBuilder('Magento\Catalog\Model\Resource\Category\Collection')
+        $this->categoryCollection = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Category\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->category = $this->getMockBuilder('Magento\Catalog\Model\Resource\Category')
+        $this->category = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Category')
             ->setMethods(['getName', 'getId'])
             ->disableOriginalConstructor()
             ->getMock();
 
-        /** @var \Magento\Catalog\Model\Resource\Category\CollectionFactory|MockObject $categoryCollectionFactory */
-        $categoryCollectionFactory = $this->getMockBuilder('Magento\Catalog\Model\Resource\Category\CollectionFactory')
+        /**
+         * @var \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory|MockObject $categoryCollectionFactory
+         */
+        $categoryCollectionFactory =
+            $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Category\CollectionFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ConfigTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ConfigTest.php
index 6432227d2d3e243f46aebfd0ab2962becd0d1006..3a53c4329fd1403714bea78685f83b9211e0017d 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ConfigTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ConfigTest.php
@@ -15,7 +15,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     public function testLoadAttributeSets()
     {
         $setCollectionFactory = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory',
             ['create'],
             [],
             '',
@@ -36,7 +36,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
         $setItem->expects($this->once())->method('getEntityTypeId')->will($this->returnValue(1));
         $setItem->expects($this->once())->method('getAttributeSetName')->will($this->returnValue('name'));
         $setCollection = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection',
             ['load'],
             [],
             '',
@@ -74,7 +74,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     public function testLoadAttributeGroups()
     {
         $groupCollectionFactory = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory',
             ['create'],
             [],
             '',
@@ -95,7 +95,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
         $setItem->expects($this->once())->method('getAttributeSetId')->will($this->returnValue(1));
         $setItem->expects($this->once())->method('getAttributeGroupName')->will($this->returnValue('name'));
         $groupCollection = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Group\Collection',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\Collection',
             ['load'],
             [],
             '',
@@ -228,7 +228,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
         $store->expects($this->any())->method('getId')->will($this->returnValue($storeId));
 
         $config = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Config',
+            '\Magento\Catalog\Model\ResourceModel\Config',
             ['setStoreId', 'getAttributesUsedInListing', 'getAttributesUsedForSortBy', '__wakeup'],
             [],
             '',
@@ -238,7 +238,8 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
         $config->expects($this->any())->method('getAttributesUsedInListing')->will($this->returnValue($attributesData));
         $config->expects($this->any())->method('getAttributesUsedForSortBy')->will($this->returnValue($attributesData));
 
-        $configFactory = $this->getMock('\Magento\Catalog\Model\Resource\ConfigFactory', ['create'], [], '', false);
+        $configFactory =
+            $this->getMock('\Magento\Catalog\Model\ResourceModel\ConfigFactory', ['create'], [], '', false);
         $configFactory->expects($this->atLeastOnce())->method('create')->will($this->returnValue($config));
 
         $eavConfig = $this->getMock(
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php b/app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php
index c929761291de4920663a309c2118f2ec61f62a66..511edd774b4a213643d0d6c4396a17a55f26ca2c 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/CustomOptions/CustomOptionTest.php
@@ -42,7 +42,7 @@ class CustomOptionTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $resource = $this->getMockBuilder('Magento\Framework\Model\Resource\AbstractResource')
+        $resource = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Entity/AttributeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Entity/AttributeTest.php
index 67c5d25fa72e054b024342e1fcdc239f746f89b4..a396bcca4c0dbb7a7f7e1311b2c84ab4eb206e7d 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Entity/AttributeTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Entity/AttributeTest.php
@@ -57,7 +57,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     protected $storeManagerMock;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Helper|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Helper|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $helperMock;
 
@@ -87,7 +87,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     protected $lockValidatorMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resourceMock;
 
@@ -151,7 +151,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->storeManagerMock = $this->getMockBuilder('Magento\Store\Model\StoreManagerInterface')
             ->getMock();
-        $this->helperMock = $this->getMockBuilder('Magento\Eav\Model\Resource\Helper')
+        $this->helperMock = $this->getMockBuilder('Magento\Eav\Model\ResourceModel\Helper')
             ->disableOriginalConstructor()
             ->getMock();
         $this->universalFactoryMock = $this->getMockBuilder('Magento\Framework\Validator\UniversalFactory')
@@ -179,7 +179,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->dateTimeFormatter = $this->getMock('Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface');
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\AbstractResource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource')
             ->setMethods(['_construct', 'getConnection', 'getIdFieldName', 'saveInSetIncluding'])
             ->getMockForAbstractClass();
         $this->cacheManager = $this->getMockBuilder('Magento\Framework\App\CacheInterface')
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreGroupTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreGroupTest.php
index f0cca672ff9ac7ea76de02d59125067ef863a70f..26961e1d838aad1ba6d86569f723cbc41f3c7260 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreGroupTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreGroupTest.php
@@ -62,7 +62,7 @@ class StoreGroupTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->subjectMock = $this->getMock('Magento\Store\Model\Resource\Group', [], [], '', false);
+        $this->subjectMock = $this->getMock('Magento\Store\Model\ResourceModel\Group', [], [], '', false);
 
         $this->groupMock = $this->getMock(
             'Magento\Store\Model\Group',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreViewTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreViewTest.php
index dfe07e9870b63d8badefd69fc9b0e76101cc51e4..bba0d077e62c9547aa459750589f44e3e0cf5644 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreViewTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Flat/Plugin/StoreViewTest.php
@@ -60,7 +60,7 @@ class StoreViewTest extends \PHPUnit_Framework_TestCase
         $this->closureMock = function () {
             return false;
         };
-        $this->subjectMock = $this->getMock('Magento\Store\Model\Resource\Store', [], [], '', false);
+        $this->subjectMock = $this->getMock('Magento\Store\Model\ResourceModel\Store', [], [], '', false);
         $this->indexerRegistryMock = $this->getMock(
             'Magento\Framework\Indexer\IndexerRegistry',
             ['get'],
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreGroupTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreGroupTest.php
index aded427157724fb106339824727ce42e52c18e0a..7e3e049cd8b1e44b3fbd88961f86437b625c776f 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreGroupTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreGroupTest.php
@@ -45,7 +45,7 @@ class StoreGroupTest extends \PHPUnit_Framework_TestCase
             true,
             ['getId', 'getState', '__wakeup']
         );
-        $this->subject = $this->getMock('Magento\Store\Model\Resource\Group', [], [], '', false);
+        $this->subject = $this->getMock('Magento\Store\Model\ResourceModel\Group', [], [], '', false);
         $this->indexerRegistryMock = $this->getMock(
             'Magento\Framework\Indexer\IndexerRegistry',
             ['get'],
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreViewTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreViewTest.php
index 1114bc4a8a83814375aa35ad2901ef9669c0af7d..c62b6bb5665825d9dc4c64938bf4fe2187569d8a 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreViewTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Category/Product/Plugin/StoreViewTest.php
@@ -45,7 +45,7 @@ class StoreViewTest extends \PHPUnit_Framework_TestCase
             true,
             ['getId', 'getState', '__wakeup']
         );
-        $this->subject = $this->getMock('Magento\Store\Model\Resource\Group', [], [], '', false);
+        $this->subject = $this->getMock('Magento\Store\Model\ResourceModel\Group', [], [], '', false);
         $this->indexerRegistryMock = $this->getMock(
             'Magento\Framework\Indexer\IndexerRegistry',
             ['get'],
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/AbstractActionTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/AbstractActionTest.php
index 9544c0a30f1bd4a25b7e5123b7af1d74da071951..094893767e798282476eb3eda07735e5e981c11c 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/AbstractActionTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/AbstractActionTest.php
@@ -13,26 +13,26 @@ class AbstractActionTest extends \PHPUnit_Framework_TestCase
     protected $_model;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Indexer\Eav\DecimalFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $_eavDecimalFactoryMock;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Indexer\Eav\SourceFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $_eavSourceFactoryMock;
 
     protected function setUp()
     {
         $this->_eavDecimalFactoryMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Indexer\Eav\DecimalFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\DecimalFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->_eavSourceFactoryMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Indexer\Eav\SourceFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\SourceFactory',
             ['create'],
             [],
             '',
@@ -95,11 +95,11 @@ class AbstractActionTest extends \PHPUnit_Framework_TestCase
 
     public function testReindexWithoutArgumentsExecutesReindexAll()
     {
-        $eavSource = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Indexer\Eav\Source')
+        $eavSource = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\Source')
             ->disableOriginalConstructor()
             ->getMock();
 
-        $eavDecimal = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Indexer\Eav\Decimal')
+        $eavDecimal = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\Decimal')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -124,11 +124,11 @@ class AbstractActionTest extends \PHPUnit_Framework_TestCase
     {
         $ids = [1, 2, 3];
 
-        $eavSource = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Indexer\Eav\Source')
+        $eavSource = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\Source')
             ->disableOriginalConstructor()
             ->getMock();
 
-        $eavDecimal = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Indexer\Eav\Decimal')
+        $eavDecimal = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\Decimal')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/FullTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/FullTest.php
index fc1a0758eecb9584031f95aa4c2d2248789496a8..6fc93468b373728eea9bad1cef212b8595126476 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/FullTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Action/FullTest.php
@@ -10,14 +10,14 @@ class FullTest extends \PHPUnit_Framework_TestCase
     public function testExecuteWithAdapterErrorThrowsException()
     {
         $eavDecimalFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Indexer\Eav\DecimalFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\DecimalFactory',
             ['create'],
             [],
             '',
             false
         );
         $eavSourceFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Indexer\Eav\SourceFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\SourceFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Plugin/AttributeSet/IndexableAttributeFilterTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Plugin/AttributeSet/IndexableAttributeFilterTest.php
index e357a6b3dfaadce5294936bb78dd6db40b7118ef..903776421312d1fc243dc4d70b70cf681fe4062d 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Plugin/AttributeSet/IndexableAttributeFilterTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Plugin/AttributeSet/IndexableAttributeFilterTest.php
@@ -9,7 +9,7 @@ class IndexableAttributeFilterTest extends \PHPUnit_Framework_TestCase
 {
     public function testFilter()
     {
-        $catalogResourceMock = $this->getMockBuilder('Magento\Catalog\Model\Resource\Eav\Attribute')
+        $catalogResourceMock = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->disableOriginalConstructor()
             ->setMethods(['load', 'isIndexable', '__wakeup'])
             ->getMock();
@@ -23,7 +23,7 @@ class IndexableAttributeFilterTest extends \PHPUnit_Framework_TestCase
             ->method('isIndexable')
             ->will($this->returnValue(false));
 
-        $eavAttributeFactoryMock = $this->getMockBuilder('Magento\Catalog\Model\Resource\Eav\AttributeFactory')
+        $eavAttributeFactoryMock = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Plugin/StoreViewTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Plugin/StoreViewTest.php
index 03fcc29323613a0816af3cc0649a66ede82d49cd..88359f8c3a31dedc717e7b9b85749b39643a14a4 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Plugin/StoreViewTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Eav/Plugin/StoreViewTest.php
@@ -20,7 +20,7 @@ class StoreViewTest extends \PHPUnit_Framework_TestCase
         $eavProcessorMock->expects($this->$matcher())
             ->method('markIndexerAsInvalid');
 
-        $subjectMock = $this->getMockBuilder('Magento\Store\Model\Resource\Store')
+        $subjectMock = $this->getMockBuilder('Magento\Store\Model\ResourceModel\Store')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/EraserTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/EraserTest.php
index 61f3615d4f24453b8832a3423659bf1d1fc72e7c..925e055fdd28c37f3b8f8752034b29852490359d 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/EraserTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/EraserTest.php
@@ -33,7 +33,7 @@ class EraserTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->connection = $this->getMock('Magento\Framework\DB\Adapter\AdapterInterface');
         $resource->expects($this->any())->method('getConnection')->will($this->returnValue($this->connection));
         $this->indexerHelper = $this->getMock(
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/RowTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/RowTest.php
index e99f1ae0ed106a17169346c2afa526a62775d454..fe4ff52e6fee12514560b413c1b0b78fae1b0c44 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/RowTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/RowTest.php
@@ -62,7 +62,7 @@ class RowTest extends \PHPUnit_Framework_TestCase
         $objectManager = new ObjectManager($this);
 
         $this->connection = $this->getMock('\Magento\Framework\DB\Adapter\AdapterInterface');
-        $this->resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resource->expects($this->any())->method('getConnection')
             ->with('default')
             ->will($this->returnValue($this->connection));
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/Rows/TableDataTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/Rows/TableDataTest.php
index dd86c4926d1006bbfe0b2bb5491dcf04cfe01f06..5ffe9c50a7d63ebd58480f967356b64935d18acc 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/Rows/TableDataTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/Rows/TableDataTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Test\Unit\Model\Indexer\Product\Flat\Action\Rows;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class TableDataTest extends \PHPUnit_Framework_TestCase
 {
@@ -33,7 +33,7 @@ class TableDataTest extends \PHPUnit_Framework_TestCase
     {
         $this->_objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_connectionMock = $this->getMock('Magento\Framework\DB\Adapter\AdapterInterface');
-        $this->_resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->_resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->_productIndexerHelper = $this->getMock(
             'Magento\Catalog\Helper\Product\Flat\Indexer',
             [],
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/RowsTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/RowsTest.php
index 076c2998ee9a4a17a452e1665c66fe88d98caaab..6dcb6cf71752267f5c4873584207f08357bafd5f 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/RowsTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Action/RowsTest.php
@@ -62,7 +62,7 @@ class RowsTest extends \PHPUnit_Framework_TestCase
         $objectManager = new ObjectManager($this);
 
         $this->_connection = $this->getMock('\Magento\Framework\DB\Adapter\AdapterInterface');
-        $this->_resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->_resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->_resource->expects($this->any())->method('getConnection')
             ->with('default')
             ->will($this->returnValue($this->_connection));
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreGroupTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreGroupTest.php
index 47f5ba4e6e252b11f58d0aca04d480969b159419..7867670891bb90c5fbdfbebb15635d655ca78faf 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreGroupTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreGroupTest.php
@@ -32,7 +32,7 @@ class StoreGroupTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->subjectMock = $this->getMock('Magento\Store\Model\Resource\Group', [], [], '', false);
+        $this->subjectMock = $this->getMock('Magento\Store\Model\ResourceModel\Group', [], [], '', false);
         $this->storeGroupMock = $this->getMock(
             'Magento\Store\Model\Group',
             ['getId', '__wakeup', 'dataHasChangedFor'],
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreTest.php
index a08ac061f3f3ed82b5b7648719d546281f3555e8..57f1b0ee398a3dae8998ffe477ca9ed0d02cf868 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/Plugin/StoreTest.php
@@ -32,7 +32,7 @@ class StoreTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->subjectMock = $this->getMock('\Magento\Store\Model\Resource\Store', [], [], '', false);
+        $this->subjectMock = $this->getMock('\Magento\Store\Model\ResourceModel\Store', [], [], '', false);
         $this->storeMock = $this->getMock(
             'Magento\Store\Model\Store',
             ['getId', '__wakeup', 'dataHasChangedFor'],
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/TableDataTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/TableDataTest.php
index 7623ed65f56332917d592d92840c7ef8069f3775..ae2fae479caecabd1a3c929da6b7d06ba7a3fe76 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/TableDataTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Flat/TableDataTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Test\Unit\Model\Indexer\Product\Flat;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class TableDataTest extends \PHPUnit_Framework_TestCase
 {
@@ -28,7 +28,7 @@ class TableDataTest extends \PHPUnit_Framework_TestCase
     {
         $this->_objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_connectionMock = $this->getMock('Magento\Framework\DB\Adapter\AdapterInterface');
-        $this->_resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->_resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
     }
 
     /**
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Price/Plugin/WebsiteTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Price/Plugin/WebsiteTest.php
index b887ec7400ff618e37ed6021f9959ead5da048b6..d034cea692268cde3c352601c2d318a28e81a187 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Price/Plugin/WebsiteTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Indexer/Product/Price/Plugin/WebsiteTest.php
@@ -44,7 +44,7 @@ class WebsiteTest extends \PHPUnit_Framework_TestCase
     {
         $this->_priceProcessorMock->expects($this->once())->method('markIndexerAsInvalid');
 
-        $websiteMock = $this->getMock('Magento\Store\Model\Resource\Website', [], [], '', false);
+        $websiteMock = $this->getMock('Magento\Store\Model\ResourceModel\Website', [], [], '', false);
         $this->assertEquals('return_value', $this->_model->afterDelete($websiteMock, 'return_value'));
     }
 }
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/CollectionFilterTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/CollectionFilterTest.php
index 96d02813542880d863c5919261778aae4b6d7ca4..bc6a8dc970d53f6e80a1492dc0b17e9a3cb17804 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/CollectionFilterTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/CollectionFilterTest.php
@@ -43,7 +43,7 @@ class CollectionFilterTest extends \PHPUnit_Framework_TestCase
     public function testFilter()
     {
         $collectionMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Collection', [], [], '', false
+            '\Magento\Catalog\Model\ResourceModel\Product\Collection', [], [], '', false
         );
 
         $categoryMock = $this->getMock('\Magento\Catalog\Model\Category', [], [], '', false);
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/FilterableAttributeListTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/FilterableAttributeListTest.php
index 4933d056dcb7c8d1c7f685b38d50dd33f8b8993f..c47fd3665c3a0373132553e73b128f5edb1a9ff9 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/FilterableAttributeListTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Category/FilterableAttributeListTest.php
@@ -16,7 +16,7 @@ class FilterableAttributeListTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     protected $collectionFactoryMock;
 
@@ -28,7 +28,7 @@ class FilterableAttributeListTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->collectionFactoryMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory', ['create'], [], '', false);
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory', ['create'], [], '', false);
 
         $this->storeManagerMock = $this->getMock(
             '\Magento\Store\Model\StoreManagerInterface', [], [], '', false
@@ -50,7 +50,7 @@ class FilterableAttributeListTest extends \PHPUnit_Framework_TestCase
         $storeMock->expects($this->once())->method('getId')->will($this->returnValue($storeId));
 
         $collectionMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Attribute\Collection', [], [], '', false
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection', [], [], '', false
         );
         $this->collectionFactoryMock
             ->expects($this->once())
@@ -60,7 +60,7 @@ class FilterableAttributeListTest extends \PHPUnit_Framework_TestCase
         $collectionMock
             ->expects($this->once())
             ->method('setItemObjectClass')
-            ->with('Magento\Catalog\Model\Resource\Eav\Attribute')
+            ->with('Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->will($this->returnSelf());
         $collectionMock
             ->expects($this->once())
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/AttributeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/AttributeTest.php
index ee2f146c2ddfc9dff017e1a2a214bb209186f64a..63fd0cd85c4ddba3545a1945d6e127966a7825c0 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/AttributeTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/AttributeTest.php
@@ -14,7 +14,7 @@ use PHPUnit_Framework_MockObject_MockObject as MockObject;
  */
 class AttributeTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var  \Magento\Catalog\Model\Resource\Layer\Filter\Attribute|MockObject */
+    /** @var  \Magento\Catalog\Model\ResourceModel\Layer\Filter\Attribute|MockObject */
     private $filterAttribute;
 
     /**
@@ -34,7 +34,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\App\RequestInterface|MockObject */
     private $request;
 
-    /** @var  \Magento\Catalog\Model\Resource\Layer\Filter\AttributeFactory|MockObject */
+    /** @var  \Magento\Catalog\Model\ResourceModel\Layer\Filter\AttributeFactory|MockObject */
     private $filterAttributeFactory;
 
     /** @var  \Magento\Catalog\Model\Layer\Filter\ItemFactory|MockObject */
@@ -76,7 +76,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['addItemData', 'build'])
             ->getMock();
 
-        $this->filterAttribute = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Layer\Filter\Attribute')
+        $this->filterAttribute = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Layer\Filter\Attribute')
             ->disableOriginalConstructor()
             ->setMethods(['getCount', 'applyFilterToCollection'])
             ->getMock();
@@ -86,7 +86,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnSelf());
 
         $this->filterAttributeFactory = $this->getMockBuilder(
-            '\Magento\Catalog\Model\Resource\Layer\Filter\AttributeFactory'
+            '\Magento\Catalog\Model\ResourceModel\Layer\Filter\AttributeFactory'
         )
             ->disableOriginalConstructor()
             ->setMethods(['create'])
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/CategoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/CategoryTest.php
index 0ec54c824cb358d688b316969814a1d74627388e..3edeb0fc812daebdb6fa8e8bd8b7bf71fb28adee 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/CategoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/CategoryTest.php
@@ -24,7 +24,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
     private $category;
 
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\Fulltext\Collection|MockObject
+     * @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection|MockObject
      */
     private $collection;
 
@@ -93,7 +93,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($this->state));
 
         $this->collection = $this->getMockBuilder(
-            '\Magento\Catalog\Model\Resource\Product\Collection'
+            '\Magento\Catalog\Model\ResourceModel\Product\Collection'
         )
             ->disableOriginalConstructor()
             ->setMethods(['addCategoryFilter', 'getFacetedData', 'addCountToCategories'])
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/DataProvider/DecimalTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/DataProvider/DecimalTest.php
index 72adf5a30e28dc839ab1bcda3320045a4b0ec514..d0525cad5228e7c03620394cdcf7d9a2240a81c6 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/DataProvider/DecimalTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/DataProvider/DecimalTest.php
@@ -17,7 +17,7 @@ class DecimalTest extends \PHPUnit_Framework_TestCase
     /** @var  \Magento\Catalog\Model\Layer\Filter\FilterInterface|MockObject */
     private $filter;
 
-    /** @var  \Magento\Catalog\Model\Resource\Layer\Filter\Decimal|MockObject */
+    /** @var  \Magento\Catalog\Model\ResourceModel\Layer\Filter\Decimal|MockObject */
     private $resource;
 
     /**
@@ -31,7 +31,7 @@ class DecimalTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMockForAbstractClass();
-        $this->resource = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Layer\Filter\Decimal')
+        $this->resource = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Layer\Filter\Decimal')
             ->disableOriginalConstructor()
             ->setMethods(['getMinMax', 'getCount'])
             ->getMock();
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/DataProvider/PriceTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/DataProvider/PriceTest.php
index 666ee562792fd5b830b3137ff228ffdb54f9c764..37510a611417e76a2bc2bd2a57c469e79a09484b 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/DataProvider/PriceTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/DataProvider/PriceTest.php
@@ -16,7 +16,7 @@ use PHPUnit_Framework_MockObject_MockObject as MockObject;
  */
 class PriceTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var  \Magento\Catalog\Model\Resource\Product\Collection|MockObject */
+    /** @var  \Magento\Catalog\Model\ResourceModel\Product\Collection|MockObject */
     private $productCollection;
 
     /** @var \Magento\Catalog\Model\Layer|MockObject */
@@ -28,7 +28,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\App\Config\ScopeConfigInterface|MockObject */
     private $scopeConfig;
 
-    /** @var \Magento\Catalog\Model\Resource\Layer\Filter\Price|MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price|MockObject */
     private $resource;
 
     /**
@@ -38,7 +38,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->productCollection = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Product\Collection')
+        $this->productCollection = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Product\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['getMaxPrice'])
             ->getMock();
@@ -57,7 +57,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['getValue'])
             ->getMockForAbstractClass();
-        $this->resource = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Layer\Filter\Price')
+        $this->resource = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Layer\Filter\Price')
             ->disableOriginalConstructor()
             ->setMethods(['getCount'])
             ->getMock();
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/DecimalTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/DecimalTest.php
index 5f2b10b83cc349c6570223ed29cdf7f8237f48fd..838791532a2c356ebdab19d741e07643e6b9f99d 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/DecimalTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/DecimalTest.php
@@ -10,7 +10,7 @@ class DecimalTest extends \PHPUnit_Framework_TestCase
     public function testConstructorRequestVarIsOverwrittenCorrectlyInParent()
     {
         $attributeModel = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['getAttributeCode', '__wakeup'],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/PriceTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/PriceTest.php
index bcfceb1d752208ce575c29a9a36df0f99fa6992a..dee2586ed4ed3aa07494ea91bb338fe5d23e8f1b 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/PriceTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Filter/PriceTest.php
@@ -70,7 +70,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['setPriceId', 'getPrice', 'getResource'])
             ->getMock();
-        $this->resource = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Layer\Filter\Price')
+        $this->resource = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Layer\Filter\Price')
             ->disableOriginalConstructor()
             ->setMethods(['applyPriceRange'])
             ->getMock();
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/FilterListTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/FilterListTest.php
index e962c36145330fe6ba482c250232a56ab80a5dcf..913979aa27afff2cd32559c4286ff400b0f752e9 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/FilterListTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/FilterListTest.php
@@ -44,7 +44,7 @@ class FilterListTest extends \PHPUnit_Framework_TestCase
             'Magento\Catalog\Model\Layer\Category\FilterableAttributeList', [], [], '', false
         );
         $this->attributeMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false
+            '\Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false
         );
         $filters = [
             FilterList::CATEGORY_FILTER => 'CategoryFilterClass',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/CollectionFilterTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/CollectionFilterTest.php
index 1e9ac542cc1939d6c48d527aa3eed27616b8c024..120a037ba22bb5c02bc322c00dfd44fc16616d8d 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/CollectionFilterTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/CollectionFilterTest.php
@@ -55,7 +55,7 @@ class CollectionFilterTest extends \PHPUnit_Framework_TestCase
     public function testFilter()
     {
         $collectionMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Collection',
             [
                 'addAttributeToSelect', 'setStore', 'addMinimalPrice', 'addFinalPrice',
                 'addTaxPercents', 'addStoreFilter', 'addUrlRewrite', 'setVisibility'
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/FilterableAttributeListTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/FilterableAttributeListTest.php
index 8c8cb4477048d0facc12c029eea96af65146e724..778ed400d049df6b2724c9d8b01ed920972c9b81 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/FilterableAttributeListTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Layer/Search/FilterableAttributeListTest.php
@@ -16,7 +16,7 @@ class FilterableAttributeListTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     protected $collectionFactoryMock;
 
@@ -28,7 +28,7 @@ class FilterableAttributeListTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->collectionFactoryMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory', ['create'], [], '', false);
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory', ['create'], [], '', false);
 
         $this->storeManagerMock = $this->getMock(
             '\Magento\Store\Model\StoreManagerInterface', [], [], '', false
@@ -53,7 +53,7 @@ class FilterableAttributeListTest extends \PHPUnit_Framework_TestCase
         $storeMock->expects($this->once())->method('getId')->will($this->returnValue($storeId));
 
         $collectionMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Attribute\Collection', [], [], '', false
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection', [], [], '', false
         );
         $this->collectionFactoryMock
             ->expects($this->once())
@@ -63,7 +63,7 @@ class FilterableAttributeListTest extends \PHPUnit_Framework_TestCase
         $collectionMock
             ->expects($this->once())
             ->method('setItemObjectClass')
-            ->with('Magento\Catalog\Model\Resource\Eav\Attribute')
+            ->with('Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->will($this->returnSelf());
         $collectionMock
             ->expects($this->once())
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/LayerTest.php b/app/code/Magento/Catalog/Test/Unit/Model/LayerTest.php
index c3d56703154e8a729398c51c656f3cf3db7bf10d..952c364ee64ff63b4aacec553abbba3e7e9d4c4f 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/LayerTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/LayerTest.php
@@ -65,7 +65,7 @@ class LayerTest extends \PHPUnit_Framework_TestCase
     private $collectionFilter;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $collection;
 
@@ -165,7 +165,7 @@ class LayerTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->stateFactory->expects($this->any())->method('create')->will($this->returnValue($this->state));
 
-        $this->collection = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Collection')
+        $this->collection = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -217,9 +217,9 @@ class LayerTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($this->collection));
 
         $result = $this->model->getProductCollection();
-        $this->assertInstanceOf('\Magento\Catalog\Model\Resource\Product\Collection', $result);
+        $this->assertInstanceOf('\Magento\Catalog\Model\ResourceModel\Product\Collection', $result);
         $result = $this->model->getProductCollection();
-        $this->assertInstanceOf('\Magento\Catalog\Model\Resource\Product\Collection', $result);
+        $this->assertInstanceOf('\Magento\Catalog\Model\ResourceModel\Product\Collection', $result);
     }
 
     public function testApply()
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Plugin/LogTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Plugin/LogTest.php
index 60127efc454f03fda33f5dda0497f1bff2881843..e83788f6842fd046418b22e97af672adf582da09 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Plugin/LogTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Plugin/LogTest.php
@@ -18,18 +18,18 @@ class LogTest extends \PHPUnit_Framework_TestCase
     protected $compareItemMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Visitor|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Visitor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $logResourceMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Visitor|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Visitor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $subjectMock;
 
     protected function setUp()
     {
-        $this->logResourceMock = $this->getMock('Magento\Customer\Model\Resource\Visitor', [], [], '', false);
+        $this->logResourceMock = $this->getMock('Magento\Customer\Model\ResourceModel\Visitor', [], [], '', false);
         $this->compareItemMock = $this->getMock(
             'Magento\Catalog\Model\Product\Compare\Item',
             [],
@@ -37,7 +37,7 @@ class LogTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->subjectMock = $this->getMock('Magento\Customer\Model\Resource\Visitor', [], [], '', false);
+        $this->subjectMock = $this->getMock('Magento\Customer\Model\ResourceModel\Visitor', [], [], '', false);
         $this->model = new \Magento\Catalog\Model\Plugin\Log($this->compareItemMock);
     }
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Plugin/ProductRepository/TransactionWrapperTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Plugin/ProductRepository/TransactionWrapperTest.php
index 681af582d1344c749c0623451ce0d4195e2f3d17..4a29474f25728f6e9ba26ba552f6c2c326129f6c 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Plugin/ProductRepository/TransactionWrapperTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Plugin/ProductRepository/TransactionWrapperTest.php
@@ -13,7 +13,7 @@ class TransactionWrapperTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Resource\Product
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\ResourceModel\Product
      */
     protected $resourceMock;
 
@@ -46,7 +46,7 @@ class TransactionWrapperTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->resourceMock = $this->getMock('Magento\Catalog\Model\Resource\Product', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Product', [], [], '', false);
         $this->subjectMock = $this->getMock('Magento\Catalog\Api\ProductRepositoryInterface', [], [], '', false);
         $this->productMock = $this->getMock('Magento\Catalog\Api\Data\ProductInterface', [], [], '', false);
         $productMock = $this->productMock;
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/ActionTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/ActionTest.php
index 448f6d43f24c87e68a551160cafd89e799cdb6e8..18cd7be396c53304b2d700d3a545cbf724eede46 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/ActionTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/ActionTest.php
@@ -38,7 +38,7 @@ class ActionTest extends \PHPUnit_Framework_TestCase
     protected $eavConfig;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $eavAttribute;
 
@@ -58,7 +58,7 @@ class ActionTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resource = $this->getMock(
-            '\Magento\Framework\Model\Resource\AbstractResource',
+            '\Magento\Framework\Model\ResourceModel\AbstractResource',
             [
                 'updateAttributes',
                 'getConnection',
@@ -95,7 +95,7 @@ class ActionTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->eavAttribute = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Eav\Attribute',
+            '\Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['__wakeup', 'isIndexable'],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/GroupPrice/AbstractTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/GroupPrice/AbstractTest.php
index ab33d43f273c1325c50b41d258c293b237b9a30d..a2f9d8fdfeef463df7537825a6016cacb61e0e63 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/GroupPrice/AbstractTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/GroupPrice/AbstractTest.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Test\Unit\Model\Product\Attribute\Backend\GroupPrice;
 class AbstractTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Backend\GroupPrice\AbstractGroupPrice
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\GroupPrice\AbstractGroupPrice
      */
     protected $_model;
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/MediaTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/MediaTest.php
index a68b53ca6cf663b2aa6e04d84d6c8f19900c343a..e3dc8a4d6e6bee8d97ae81402c0d0038424a4cd3 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/MediaTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/MediaTest.php
@@ -49,7 +49,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
 
         $fileStorageDb = $this->getMock('Magento\MediaStorage\Helper\File\Storage\Database', [], [], '', false);
         $this->resourceModel = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media',
+            'Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media',
             [
                 'getMainTable',
                 '__wakeup',
@@ -76,7 +76,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
             $this->returnValue($this->mediaDirectory)
         );
 
-        $this->productFactory = $this->getMockBuilder('Magento\Catalog\Model\Resource\ProductFactory')
+        $this->productFactory = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\ProductFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -146,7 +146,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
             false
         );
         $attributeEntity = $this->getMock(
-            '\Magento\Framework\Model\Resource\AbstractResourceAbstractEntity',
+            '\Magento\Framework\Model\ResourceModel\AbstractResourceAbstractEntity',
             ['checkAttributeUniqueValue']
         );
         $attribute->expects($this->any())->method('getAttributeCode')->will($this->returnValue($attributeCode));
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/PriceTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/PriceTest.php
index cd224e820e29c05cfd0fde1540f4b4aba7da21bc..738ae682dd8bf3f06dcfc7dca7b1f3b9dab96f1d 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/PriceTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Backend/PriceTest.php
@@ -8,7 +8,7 @@ namespace Magento\Catalog\Test\Unit\Model\Product\Attribute\Backend;
 class PriceTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Price
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Price
      */
     protected $model;
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/GroupTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/GroupTest.php
index 652c94ec0f3a5fa7661e5dee851a6eedaba13fc1..cf515a44262f724620e7ae858ac9e175bd7ffd31 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/GroupTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/GroupTest.php
@@ -33,13 +33,15 @@ class GroupTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     private function getMockedCollectionFactory()
     {
         $mockedCollection = $this->getMockedCollection();
 
-        $mockBuilder = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory');
+        $mockBuilder = $this->getMockBuilder(
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory'
+        );
         $mock = $mockBuilder->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -52,11 +54,11 @@ class GroupTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     private function getMockedCollection()
     {
-        $mockBuilder = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Product\Attribute\Collection');
+        $mockBuilder = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection');
         $mock = $mockBuilder->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/RepositoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/RepositoryTest.php
index 2f0d531bb8c86dce19e173a1aca0611d040f871e..1cf511043804620a61c4c80fb338e0126b160230 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/RepositoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/RepositoryTest.php
@@ -66,7 +66,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->attributeResourceMock =
-            $this->getMock('Magento\Catalog\Model\Resource\Attribute', [], [], '', false);
+            $this->getMock('Magento\Catalog\Model\ResourceModel\Attribute', [], [], '', false);
         $this->productHelperMock =
             $this->getMock('Magento\Catalog\Helper\Product', [], [], '', false);
         $this->filterManagerMock =
@@ -138,7 +138,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
 
     public function testDelete()
     {
-        $attributeMock = $this->getMock('Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $attributeMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $this->attributeResourceMock->expects($this->once())->method('delete')->with($attributeMock);
 
         $this->assertEquals(true, $this->model->delete($attributeMock));
@@ -147,7 +147,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
     public function testDeleteById()
     {
         $attributeCode = 'some attribute code';
-        $attributeMock = $this->getMock('Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $attributeMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $this->eavAttributeRepositoryMock->expects($this->once())
             ->method('get')
             ->with(
@@ -182,8 +182,8 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
      */
     public function testSaveNoSuchEntityException()
     {
-        $attributeMock = $this->getMock('Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
-        $existingModelMock = $this->getMock('Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $attributeMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
+        $existingModelMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $attributeMock->expects($this->once())->method('getAttributeId')->willReturn('12');
         $attributeCode = 'test attribute code';
         $attributeMock->expects($this->once())->method('getAttributeCode')->willReturn($attributeCode);
@@ -207,7 +207,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
     public function testSaveInputExceptionRequiredField()
     {
         $attributeMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['getFrontendLabels', 'getDefaultFrontendLabel', '__wakeup', 'getAttributeId', 'setAttributeId'],
             [],
             '',
@@ -228,7 +228,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
     public function testSaveInputExceptionInvalidFieldValue()
     {
         $attributeMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['getFrontendLabels', 'getDefaultFrontendLabel', 'getAttributeId', '__wakeup', 'setAttributeId'],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Source/StatusTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Source/StatusTest.php
index fdc40094d3ffb2d2c041de5715b2ee1e3e36eb94..ce649952ef229819c3ec721594d418820d538524 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Source/StatusTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Attribute/Source/StatusTest.php
@@ -31,7 +31,7 @@ class StatusTest extends \PHPUnit_Framework_TestCase
     {
         $this->objectManagerHelper = new ObjectManagerHelper($this);
         $this->collection = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Collection',
             [
                 '__wakeup',
                 'getSelect',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/CopierTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/CopierTest.php
index cb7f395ea4d3998020ff396716e636d76ccc3d40..9d485cef0c5b358b750b0a2f1fc084a8275ed2a5 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/CopierTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/CopierTest.php
@@ -51,7 +51,7 @@ class CopierTest extends \PHPUnit_Framework_TestCase
         $this->productMock->expects($this->atLeastOnce())->method('getWebsiteIds');
         $this->productMock->expects($this->atLeastOnce())->method('getCategoryIds');
 
-        $resourceMock = $this->getMock('\Magento\Catalog\Model\Resource\Product', [], [], '', false);
+        $resourceMock = $this->getMock('\Magento\Catalog\Model\ResourceModel\Product', [], [], '', false);
         $optionMock = $this->getMock('\Magento\Catalog\Model\Product\Option', [], [], '', false);
         $this->productMock->expects($this->once())->method('getResource')->will($this->returnValue($resourceMock));
         $this->productMock->expects($this->once())->method('getOptionInstance')->will($this->returnValue($optionMock));
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/CopyConstructor/CrossSellTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/CopyConstructor/CrossSellTest.php
index c2aaa253d78dd8cd3d34fa77fbbc18595f07d41e..e6d6c2dc98e871472e10c283eaad825ac3b27dd7 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/CopyConstructor/CrossSellTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/CopyConstructor/CrossSellTest.php
@@ -75,7 +75,7 @@ class CrossSellTest extends \PHPUnit_Framework_TestCase
         $this->_linkMock->expects($this->once())->method('getAttributes')->will($this->returnValue($attributes));
 
         $productLinkMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Link',
+            '\Magento\Catalog\Model\ResourceModel\Product\Link',
             ['__wakeup', 'getLinkedProductId', 'toArray'],
             [],
             '',
@@ -94,7 +94,7 @@ class CrossSellTest extends \PHPUnit_Framework_TestCase
         );
 
         $collectionMock = $helper->getCollectionMock(
-            '\Magento\Catalog\Model\Resource\Product\Link\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Link\Collection',
             [$productLinkMock]
         );
         $this->_productMock->expects(
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/CopyConstructor/RelatedTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/CopyConstructor/RelatedTest.php
index 92ac7aadb1fc8400c06f509ea718712a8567c6a9..2d54da8bae316aafba2db5c6634bdf7ceb58399a 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/CopyConstructor/RelatedTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/CopyConstructor/RelatedTest.php
@@ -75,7 +75,7 @@ class RelatedTest extends \PHPUnit_Framework_TestCase
         $this->_linkMock->expects($this->once())->method('getAttributes')->will($this->returnValue($attributes));
 
         $productLinkMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Link',
+            '\Magento\Catalog\Model\ResourceModel\Product\Link',
             ['__wakeup', 'getLinkedProductId', 'toArray'],
             [],
             '',
@@ -94,7 +94,7 @@ class RelatedTest extends \PHPUnit_Framework_TestCase
         );
 
         $collectionMock = $helper->getCollectionMock(
-            '\Magento\Catalog\Model\Resource\Product\Link\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Link\Collection',
             [$productLinkMock]
         );
         $this->_productMock->expects(
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/CopyConstructor/UpSellTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/CopyConstructor/UpSellTest.php
index 7121bb7d90552cbee5faae9f0d55edbbe9d5fcd8..33b3aa4db8fd49dd47ce0220bb1bcc4a4e6334ee 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/CopyConstructor/UpSellTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/CopyConstructor/UpSellTest.php
@@ -75,7 +75,7 @@ class UpSellTest extends \PHPUnit_Framework_TestCase
         $this->_linkMock->expects($this->once())->method('getAttributes')->will($this->returnValue($attributes));
 
         $productLinkMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Link',
+            '\Magento\Catalog\Model\ResourceModel\Product\Link',
             ['__wakeup', 'getLinkedProductId', 'toArray'],
             [],
             '',
@@ -94,7 +94,7 @@ class UpSellTest extends \PHPUnit_Framework_TestCase
         );
 
         $collectionMock = $helper->getCollectionMock(
-            '\Magento\Catalog\Model\Resource\Product\Link\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Link\Collection',
             [$productLinkMock]
         );
         $this->_productMock->expects(
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Image/CacheTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Image/CacheTest.php
index 89bf16e78dde5239bf9fad182f9e827b73439ac0..ca291cb3d56ae4e2e85f26a7b3915b598cae9a5e 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Image/CacheTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Image/CacheTest.php
@@ -36,7 +36,7 @@ class CacheTest extends \PHPUnit_Framework_TestCase
     protected $config;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Theme\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $themeCollection;
 
@@ -63,7 +63,7 @@ class CacheTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->themeCollection = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\Collection')
+        $this->themeCollection = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/LinkTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/LinkTest.php
index 29c855255c00b79cf413785d3aac401e694c435b..eb86d59a886e566fc0f2d5314ebfa066c81304ad 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/LinkTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/LinkTest.php
@@ -15,7 +15,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -25,20 +25,20 @@ class LinkTest extends \PHPUnit_Framework_TestCase
     protected $stockHelperMock;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Link\Product\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $productCollection;
 
     protected function setUp()
     {
         $linkCollection = $this->getMockBuilder(
-            'Magento\Catalog\Model\Resource\Product\Link\Collection'
+            'Magento\Catalog\Model\ResourceModel\Product\Link\Collection'
         )->disableOriginalConstructor()->setMethods(
             ['setLinkModel']
         )->getMock();
         $linkCollection->expects($this->any())->method('setLinkModel')->will($this->returnSelf());
         $linkCollectionFactory = $this->getMockBuilder(
-            'Magento\Catalog\Model\Resource\Product\Link\CollectionFactory'
+            'Magento\Catalog\Model\ResourceModel\Product\Link\CollectionFactory'
         )->disableOriginalConstructor()->setMethods(
             ['create']
         )->getMock();
@@ -46,13 +46,13 @@ class LinkTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($linkCollection));
         $this->productCollection = $this->getMockBuilder(
-            'Magento\Catalog\Model\Resource\Product\Link\Product\Collection'
+            'Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection'
         )->disableOriginalConstructor()->setMethods(
             ['setLinkModel']
         )->getMock();
         $this->productCollection->expects($this->any())->method('setLinkModel')->will($this->returnSelf());
         $productCollectionFactory = $this->getMockBuilder(
-            'Magento\Catalog\Model\Resource\Product\Link\Product\CollectionFactory'
+            'Magento\Catalog\Model\ResourceModel\Product\Link\Product\CollectionFactory'
         )->disableOriginalConstructor()->setMethods(
             ['create']
         )->getMock();
@@ -61,7 +61,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($this->productCollection));
 
         $this->resource = $this->getMock(
-            'Magento\Framework\Model\Resource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             [
                 'saveProductLinks',
                 'getAttributeTypeTable',
@@ -132,7 +132,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
             ->method('addInStockFilterToCollection')
             ->with($this->productCollection);
         $this->assertInstanceOf(
-            'Magento\Catalog\Model\Resource\Product\Link\Product\Collection',
+            'Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection',
             $this->model->getProductCollection()
         );
     }
@@ -140,7 +140,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
     public function testGetLinkCollection()
     {
         $this->assertInstanceOf(
-            'Magento\Catalog\Model\Resource\Product\Link\Collection',
+            'Magento\Catalog\Model\ResourceModel\Product\Link\Collection',
             $this->model->getLinkCollection()
         );
     }
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Media/AttributeManagementTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Media/AttributeManagementTest.php
index 82bcdf4a994d0dff0496974fc79cda1f63e52d82..3e8a85a77166a9facfa71e6aa0b011cd07bde981 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Media/AttributeManagementTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Media/AttributeManagementTest.php
@@ -34,7 +34,7 @@ class AttributeManagementTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->factoryMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory',
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory',
             ['create'],
             [],
             '',
@@ -63,7 +63,7 @@ class AttributeManagementTest extends \PHPUnit_Framework_TestCase
             $this->getMock('\Magento\Catalog\Api\Data\ProductAttributeInterface'),
         ];
         $collectionMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Attribute\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/RepositoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/RepositoryTest.php
index 4a21262866eeb53b8fe02556ec6d8c4620d34f9a..919998988e8e353c2ce8a6afbb1393f91c6485f8 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/RepositoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/RepositoryTest.php
@@ -44,7 +44,13 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->productRepositoryMock = $this->getMock('Magento\Catalog\Model\ProductRepository', [], [], '', false);
-        $this->optionResourceMock = $this->getMock('Magento\Catalog\Model\Resource\Product\Option', [], [], '', false);
+        $this->optionResourceMock = $this->getMock(
+            'Magento\Catalog\Model\ResourceModel\Product\Option',
+            [],
+            [],
+            '',
+            false
+        );
         $this->optionMock = $this->getMock('\Magento\Catalog\Model\Product\Option', [], [], '', false);
         $this->productMock = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false);
         $this->converterMock = $this->getMock('\Magento\Catalog\Model\Product\Option\Converter', [], [], '', false);
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/ValueTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/ValueTest.php
index cedd855b81a1a1e83f4be59ef82fd1c9502d9f3a..3c1f77167b4b37d97a2e22e1dc8c8efe0875b986 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/ValueTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Option/ValueTest.php
@@ -45,7 +45,7 @@ class ValueTest extends \PHPUnit_Framework_TestCase
     public function testGetValuesCollection()
     {
         $this->assertInstanceOf(
-            '\Magento\Catalog\Model\Resource\Product\Option\Value\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Option\Value\Collection',
             $this->model->getValuesCollection($this->getMockedOption())
         );
     }
@@ -53,7 +53,7 @@ class ValueTest extends \PHPUnit_Framework_TestCase
     public function testGetValuesByOption()
     {
         $this->assertInstanceOf(
-            '\Magento\Catalog\Model\Resource\Product\Option\Value\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Option\Value\Collection',
             $this->model->getValuesByOption([1], 1, 1)
         );
     }
@@ -96,13 +96,14 @@ class ValueTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @return \Magento\Catalog\Model\Resource\Product\Option\Value\CollectionFactory
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory
      */
     private function getMockedValueCollectionFactory()
     {
         $mockedCollection = $this->getMockedValueCollection();
 
-        $mockBuilder = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Product\Option\Value\CollectionFactory')
+        $mockBuilder =
+            $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor();
         $mock = $mockBuilder->getMock();
@@ -115,11 +116,11 @@ class ValueTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @return \Magento\Catalog\Model\Resource\Product\Option\Value\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Option\Value\Collection
      */
     private function getMockedValueCollection()
     {
-        $mockBuilder = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Product\Option\Value\Collection')
+        $mockBuilder = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Product\Option\Value\Collection')
             ->setMethods(['addFieldToFilter', 'getValuesByOption', 'getValues'])
             ->disableOriginalConstructor();
         $mock = $mockBuilder->getMock();
@@ -175,11 +176,11 @@ class ValueTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @return \Magento\Catalog\Model\Resource\Product\Option\Value
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Option\Value
      */
     private function getMockedResource()
     {
-        $mockBuilder = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Product\Option\Value')
+        $mockBuilder = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Product\Option\Value')
             ->setMethods(
                 [
                     'duplicate',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Product/Type/AbstractTypeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Product/Type/AbstractTypeTest.php
index 0ce39e12fbdc93ee8f2e1d38eff837c5a9b25514..6bece57cf9b715c8f4a2f1a5b7758ec7056be958 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Product/Type/AbstractTypeTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Product/Type/AbstractTypeTest.php
@@ -26,7 +26,7 @@ class AbstractTypeTest extends \PHPUnit_Framework_TestCase
     private $product;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product|\PHPUnit_Framework_MockObject_MockObject
      */
     private $productResource;
 
@@ -44,7 +44,7 @@ class AbstractTypeTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['getHasOptions', '__wakeup', '__sleep', 'getResource'])
             ->disableOriginalConstructor()
             ->getMock();
-        $this->productResource = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product')
+        $this->productResource = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product')
             ->setMethods(['getSortedAttributes', 'loadAllAttributes'])
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ProductAttributeGroupRepositoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ProductAttributeGroupRepositoryTest.php
index 7dd7cc1ee7e46098d5ac3d74925c0470c1b1f855..3f18e47e8d61f78f11f8a1ab0e5dc470e3178567 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ProductAttributeGroupRepositoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ProductAttributeGroupRepositoryTest.php
@@ -38,7 +38,7 @@ class ProductAttributeGroupRepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->groupResourceMock = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Group',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Group',
             ['load', '__wakeup'],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ProductManagementTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ProductManagementTest.php
index af3caf60b77c21c870d42c8dae26dde19244a15b..7e5a2632f92f8faab1992cee3db31e5a521098cc 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ProductManagementTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ProductManagementTest.php
@@ -13,14 +13,14 @@ class ProductManagementTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $productsFactoryMock;
 
     protected function setUp()
     {
         $this->productsFactoryMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\CollectionFactory',
             ['create'],
             [],
             '',
@@ -34,7 +34,7 @@ class ProductManagementTest extends \PHPUnit_Framework_TestCase
     public function testGetEnabledCount()
     {
         $statusEnabled = 1;
-        $productsMock = $this->getMock('Magento\Catalog\Model\Resource\Product\Collection', [], [], '', false);
+        $productsMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Product\Collection', [], [], '', false);
 
         $this->productsFactoryMock
             ->expects($this->once())
@@ -59,7 +59,7 @@ class ProductManagementTest extends \PHPUnit_Framework_TestCase
     public function testGetDisabledCount()
     {
         $statusDisabled = 2;
-        $productsMock = $this->getMock('\Magento\Catalog\Model\Resource\Product\Collection', [], [], '', false);
+        $productsMock = $this->getMock('\Magento\Catalog\Model\ResourceModel\Product\Collection', [], [], '', false);
 
         $this->productsFactoryMock
             ->expects($this->once())
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php
index 8d11bf4a51dcd9827c942b2e8fb789fe25aabe38..851aa26c7ca5727237c5882dcd9e14ef1e690968 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ProductRepositoryTest.php
@@ -169,7 +169,7 @@ class ProductRepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->collectionFactoryMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\CollectionFactory',
+            '\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory',
             ['create'],
             [],
             '',
@@ -196,7 +196,7 @@ class ProductRepositoryTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->resourceModelMock = $this->getMock('\Magento\Catalog\Model\Resource\Product', [], [], '', false);
+        $this->resourceModelMock = $this->getMock('\Magento\Catalog\Model\ResourceModel\Product', [], [], '', false);
         $this->objectManager = new ObjectManager($this);
         $this->extensibleDataObjectConverterMock = $this
             ->getMockBuilder('\Magento\Framework\Api\ExtensibleDataObjectConverter')
@@ -557,7 +557,7 @@ class ProductRepositoryTest extends \PHPUnit_Framework_TestCase
     {
         $searchCriteriaMock = $this->getMock('\Magento\Framework\Api\SearchCriteriaInterface', [], [], '', false);
         $attributeCode = 'attribute_code';
-        $collectionMock = $this->getMock('\Magento\Catalog\Model\Resource\Product\Collection', [], [], '', false);
+        $collectionMock = $this->getMock('\Magento\Catalog\Model\ResourceModel\Product\Collection', [], [], '', false);
         $extendedSearchCriteriaMock = $this->getMock('\Magento\Framework\Api\SearchCriteria', [], [], '', false);
         $productAttributeSearchResultsMock = $this->getMockForAbstractClass(
             '\Magento\Catalog\Api\Data\ProductAttributeInterface',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php
index 9cece1e8b642aff0359c1b21ddf6a422ee144aec..c52c96470fd632390d55fa6f6f4f142c6e5e0f5d 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ProductTest.php
@@ -79,7 +79,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     private $store;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
 
@@ -250,7 +250,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['setProduct', 'saveOptions', '__wakeup', '__sleep'])
             ->disableOriginalConstructor()->getMock();
 
-        $this->resource = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product')
+        $this->resource = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -444,7 +444,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $abstractDbMock = $this->getMockBuilder('\Magento\Framework\Model\Resource\Db\AbstractDb')
+        $abstractDbMock = $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods([
                 'getCategoryCollection',
@@ -1281,7 +1281,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
             ->with($productModel)
             ->willReturn($option1Id);
         $optionColl = $this->objectManagerHelper->getCollectionMock(
-            'Magento\Catalog\Model\Resource\Product\Option\Collection',
+            'Magento\Catalog\Model\ResourceModel\Product\Option\Collection',
             [$optionMock1, $optionMock2]
         );
 
@@ -1292,7 +1292,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
 
         $joinProcessorMock->expects($this->once())
             ->method('process')
-            ->with($this->isInstanceOf('Magento\Catalog\Model\Resource\Product\Option\Collection'));
+            ->with($this->isInstanceOf('Magento\Catalog\Model\ResourceModel\Product\Option\Collection'));
 
         $expectedOptions = [
             $option1Id => $optionMock1,
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Resource/AbstractTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/AbstractTest.php
similarity index 90%
rename from app/code/Magento/Catalog/Test/Unit/Model/Resource/AbstractTest.php
rename to app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/AbstractTest.php
index 7f1f43250c59fa5cb9511b4d1c152ed6ccc685c0..84ed1787c36632c583f3787b5de0131d8dce0f96 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Resource/AbstractTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/AbstractTest.php
@@ -7,7 +7,7 @@
 /**
  * Test class for \Magento\Catalog\Model\Entity\Attribute\Set
  */
-namespace Magento\Catalog\Test\Unit\Model\Resource;
+namespace Magento\Catalog\Test\Unit\Model\ResourceModel;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
@@ -82,10 +82,10 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
 
         $attributes[$code] = $attribute;
 
-        /** @var $model \Magento\Catalog\Model\Resource\AbstractResource */
-        $arguments = $objectManager->getConstructArguments('Magento\Catalog\Model\Resource\AbstractResource');
+        /** @var $model \Magento\Catalog\Model\ResourceModel\AbstractResource */
+        $arguments = $objectManager->getConstructArguments('Magento\Catalog\Model\ResourceModel\AbstractResource');
         $model = $this->getMock(
-            'Magento\Catalog\Model\Resource\AbstractResource',
+            'Magento\Catalog\Model\ResourceModel\AbstractResource',
             ['getAttributesByCode'],
             $arguments
         );
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Category/Collection/FactoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/FactoryTest.php
similarity index 68%
rename from app/code/Magento/Catalog/Test/Unit/Model/Resource/Category/Collection/FactoryTest.php
rename to app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/FactoryTest.php
index 41f82dfc5bdec9662bf7448651fd57f5f063f5a7..6292f2340a6d5a1dac2c35836ccc0f85524d8347 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Category/Collection/FactoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/Collection/FactoryTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Test\Unit\Model\Resource\Category\Collection;
+namespace Magento\Catalog\Test\Unit\Model\ResourceModel\Category\Collection;
 
 class FactoryTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\Collection\Factory
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Collection\Factory
      */
     protected $_model;
 
@@ -20,19 +20,19 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->_objectManager = $this->getMock('Magento\Framework\ObjectManagerInterface');
-        $this->_model = new \Magento\Catalog\Model\Resource\Category\Collection\Factory($this->_objectManager);
+        $this->_model = new \Magento\Catalog\Model\ResourceModel\Category\Collection\Factory($this->_objectManager);
     }
 
     public function testCreate()
     {
-        $objectOne = $this->getMock('Magento\Catalog\Model\Resource\Category\Collection', [], [], '', false);
-        $objectTwo = $this->getMock('Magento\Catalog\Model\Resource\Category\Collection', [], [], '', false);
+        $objectOne = $this->getMock('Magento\Catalog\Model\ResourceModel\Category\Collection', [], [], '', false);
+        $objectTwo = $this->getMock('Magento\Catalog\Model\ResourceModel\Category\Collection', [], [], '', false);
         $this->_objectManager->expects(
             $this->exactly(2)
         )->method(
             'create'
         )->with(
-            'Magento\Catalog\Model\Resource\Category\Collection',
+            'Magento\Catalog\Model\ResourceModel\Category\Collection',
             []
         )->will(
             $this->onConsecutiveCalls($objectOne, $objectTwo)
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Category/TreeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/TreeTest.php
similarity index 89%
rename from app/code/Magento/Catalog/Test/Unit/Model/Resource/Category/TreeTest.php
rename to app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/TreeTest.php
index eaa193f05ba6aeba9232726687f950c286029c8e..de82e728cc6c7e5bb2500640c15116b457984969 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Category/TreeTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Category/TreeTest.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Catalog\Test\Unit\Model\Resource\Category;
+namespace Magento\Catalog\Test\Unit\Model\ResourceModel\Category;
 
 class TreeTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\Tree
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Tree
      */
     protected $_model;
 
@@ -37,7 +37,7 @@ class TreeTest extends \PHPUnit_Framework_TestCase
         $select->expects($this->once())->method('from')->with('catalog_category_entity');
         $connection = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
         $connection->expects($this->once())->method('select')->will($this->returnValue($select));
-        $this->_resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->_resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->_resource->expects(
             $this->once()
         )->method(
@@ -65,14 +65,14 @@ class TreeTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->_collectionFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Category\Collection\Factory',
+            'Magento\Catalog\Model\ResourceModel\Category\Collection\Factory',
             [],
             [],
             '',
             false
         );
         $this->_model = $objectHelper->getObject(
-            'Magento\Catalog\Model\Resource\Category\Tree',
+            'Magento\Catalog\Model\ResourceModel\Category\Tree',
             [
                 'resource' => $this->_resource,
                 'eventManager' => $eventManager,
@@ -107,7 +107,7 @@ class TreeTest extends \PHPUnit_Framework_TestCase
      */
     protected function getCollectionMock()
     {
-        return $this->getMock('Magento\Catalog\Model\Resource\Category\Collection', [], [], '', false);
+        return $this->getMock('Magento\Catalog\Model\ResourceModel\Category\Collection', [], [], '', false);
     }
 
     public function testSetCollection()
@@ -120,8 +120,8 @@ class TreeTest extends \PHPUnit_Framework_TestCase
 
     public function testCallCleaningDuringSetCollection()
     {
-        /** @var \Magento\Catalog\Model\Resource\Category\Tree $model */
-        $model = $this->getMock('Magento\Catalog\Model\Resource\Category\Tree', ['_clean'], [], '', false);
+        /** @var \Magento\Catalog\Model\ResourceModel\Category\Tree $model */
+        $model = $this->getMock('Magento\Catalog\Model\ResourceModel\Category\Tree', ['_clean'], [], '', false);
         $model->expects($this->once())->method('_clean')->will($this->returnSelf());
 
         $this->assertEquals($model, $model->setCollection($this->getCollectionMock()));
@@ -141,7 +141,7 @@ class TreeTest extends \PHPUnit_Framework_TestCase
         $connection->expects($this->any())->method('select')->will($this->returnValue($select));
         $connection->expects($this->any())->method('fetchCol')->will($this->returnValue([]));
 
-        $resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $resource->expects($this->any())->method('getConnection')->will($this->returnValue($connection));
         $resource->expects($this->any())->method('getTableName')->will($this->returnArgument(0));
 
@@ -165,10 +165,10 @@ class TreeTest extends \PHPUnit_Framework_TestCase
                 $this->returnValue($attributes)
             );
 
-        $collection = $this->getMock('Magento\Catalog\Model\Resource\Category\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Catalog\Model\ResourceModel\Category\Collection', [], [], '', false);
         $collection->expects($this->never())->method('getAllIds')->will($this->returnValue([]));
         $collectionFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Category\Collection\Factory',
+            'Magento\Catalog\Model\ResourceModel\Category\Collection\Factory',
             [],
             [],
             '',
@@ -183,7 +183,7 @@ class TreeTest extends \PHPUnit_Framework_TestCase
         $storeManager->expects($this->any())->method('getStore')->will($this->returnValue($store));
 
         $model = $objectHelper->getObject(
-            'Magento\Catalog\Model\Resource\Category\Tree',
+            'Magento\Catalog\Model\ResourceModel\Category\Tree',
             [
                 'storeManager' => $storeManager,
                 'resource' => $resource,
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Eav/AttributeTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php
similarity index 91%
rename from app/code/Magento/Catalog/Test/Unit/Model/Resource/Eav/AttributeTest.php
rename to app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php
index 4562b3e4c83cd5133d0fbe5520f7c0eb68620e44..ab8d0328ca6091522c1180ee7f3533936962a3ad 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Eav/AttributeTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Eav/AttributeTest.php
@@ -6,14 +6,14 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Catalog\Test\Unit\Model\Resource\Eav;
+namespace Magento\Catalog\Test\Unit\Model\ResourceModel\Eav;
 
-use \Magento\Catalog\Model\Resource\Eav\Attribute;
+use \Magento\Catalog\Model\ResourceModel\Eav\Attribute;
 
 class AttributeTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     protected $_model;
 
@@ -88,7 +88,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
         $dbAdapterMock->expects($this->any())->method('getTransactionLevel')->will($this->returnValue(1));
 
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\Model\Resource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             ['_construct', 'getConnection', 'getIdFieldName',
                 'save', 'saveInSetIncluding', 'isUsedBySuperProducts', 'delete'],
             [], '', false
@@ -105,7 +105,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
 
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_model = $objectManager->getObject(
-                'Magento\Catalog\Model\Resource\Eav\Attribute',
+                'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
                 [
                     'context' => $this->contextMock,
                     'productFlatIndexerProcessor' => $this->_processor,
@@ -131,9 +131,9 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     {
         $this->_processor->expects($this->once())->method('markIndexerAsInvalid');
 
-        $this->_model->setOrigData('is_global', \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE);
+        $this->_model->setOrigData('is_global', \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE);
         $this->_model->setOrigData('used_in_product_listing', 1);
-        $this->_model->setIsGlobal(\Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL);
+        $this->_model->setIsGlobal(\Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL);
         $this->_model->afterSave();
     }
 
@@ -165,7 +165,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_model = $objectManagerHelper->getObject(
-            '\Magento\Catalog\Model\Resource\Eav\Attribute',
+            '\Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             [
                 'context' => $this->contextMock,
                 'productFlatIndexerProcessor' => $this->_processor,
@@ -183,7 +183,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_model = $objectManagerHelper->getObject(
-            '\Magento\Catalog\Model\Resource\Eav\Attribute',
+            '\Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             [
                 'context' => $this->contextMock,
                 'productFlatIndexerProcessor' => $this->_processor,
@@ -201,7 +201,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_model = $objectManagerHelper->getObject(
-            '\Magento\Catalog\Model\Resource\Eav\Attribute',
+            '\Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             [
                 'context' => $this->contextMock,
                 'productFlatIndexerProcessor' => $this->_processor,
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/Attribute/Backend/MediaTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/Attribute/Backend/MediaTest.php
similarity index 98%
rename from app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/Attribute/Backend/MediaTest.php
rename to app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/Attribute/Backend/MediaTest.php
index cdb39b1984e0c599b2f8d3dc658f46494a4240fc..fff193cae61538a0cf7315fe4e7350e1c8dfb4d5 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/Attribute/Backend/MediaTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/Attribute/Backend/MediaTest.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Catalog\Test\Unit\Model\Resource\Product\Attribute\Backend;
+namespace Magento\Catalog\Test\Unit\Model\ResourceModel\Product\Attribute\Backend;
 
 /**
  * Test Media Resource
@@ -21,7 +21,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
     protected $connection;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media | \PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -62,14 +62,14 @@ class MediaTest extends \PHPUnit_Framework_TestCase
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->connection = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
-        $resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $resource->expects($this->any())
                  ->method('getConnection')
                  ->willReturn($this->connection);
         $resource->expects($this->any())->method('getTableName')->willReturn('table');
         $this->connection->expects($this->any())->method('setCacheAdapter');
         $this->resource = $objectManager->getObject(
-            'Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media',
+            'Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media',
             ['resource' => $resource]
         );
         $this->product = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false);
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/FlatTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/FlatTest.php
similarity index 84%
rename from app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/FlatTest.php
rename to app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/FlatTest.php
index 761235e24208079a6dad0df099fa3b690ced0c64..4b7ee54ac6bf4dcc77cf80d7dbe15a6c20b74c26 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/FlatTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/FlatTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Test\Unit\Model\Resource\Product;
+namespace Magento\Catalog\Test\Unit\Model\ResourceModel\Product;
 
 class FlatTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Flat
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Flat
      */
     protected $_model;
 
@@ -44,8 +44,8 @@ class FlatTest extends \PHPUnit_Framework_TestCase
             $this->returnValue($this->_store)
         );
 
-        $this->_model = new \Magento\Catalog\Model\Resource\Product\Flat(
-            $this->getMock('Magento\Framework\Model\Resource\Db\Context', [], [], '', false),
+        $this->_model = new \Magento\Catalog\Model\ResourceModel\Product\Flat(
+            $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false),
             $this->_storeManagerInterface,
             $this->getMock('Magento\Catalog\Model\Config', [], [], '', false),
             $this->getMock('Magento\Catalog\Model\Product\Attribute\DefaultAttributes')
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/Link/Product/CollectionTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/Link/Product/CollectionTest.php
similarity index 91%
rename from app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/Link/Product/CollectionTest.php
rename to app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/Link/Product/CollectionTest.php
index 35002652ee89ce9d2cbb586589ec35f027f40fc2..8ad2605d890a027ec17c62cedfc6531992a3fa1d 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/Link/Product/CollectionTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/Link/Product/CollectionTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Catalog\Test\Unit\Model\Resource\Product\Link\Product;
+namespace Magento\Catalog\Test\Unit\Model\ResourceModel\Product\Link\Product;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
@@ -14,7 +14,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHe
  */
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\Catalog\Model\Resource\Product\Link\Product\Collection */
+    /** @var \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection */
     protected $collection;
 
     /** @var ObjectManagerHelper */
@@ -35,13 +35,13 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Eav\Model\Config|\PHPUnit_Framework_MockObject_MockObject */
     protected $configMock;
 
-    /** @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject */
     protected $resourceMock;
 
     /** @var \PHPUnit_Framework_MockObject_MockObject */
     protected $entityFactoryMock2;
 
-    /** @var \Magento\Catalog\Model\Resource\Helper|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Helper|\PHPUnit_Framework_MockObject_MockObject */
     protected $helperMock;
 
     /** @var \Magento\Framework\Validator\UniversalFactory|\PHPUnit_Framework_MockObject_MockObject */
@@ -62,7 +62,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     /** @var \PHPUnit_Framework_MockObject_MockObject */
     protected $optionFactoryMock;
 
-    /** @var \Magento\Catalog\Model\Resource\Url|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Url|\PHPUnit_Framework_MockObject_MockObject */
     protected $urlMock;
 
     /** @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface|\PHPUnit_Framework_MockObject_MockObject */
@@ -81,9 +81,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $this->fetchStrategyMock = $this->getMock('Magento\Framework\Data\Collection\Db\FetchStrategyInterface');
         $this->managerInterfaceMock = $this->getMock('Magento\Framework\Event\ManagerInterface');
         $this->configMock = $this->getMock('Magento\Eav\Model\Config', [], [], '', false);
-        $this->resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->entityFactoryMock2 = $this->getMock('Magento\Eav\Model\EntityFactory', [], [], '', false);
-        $this->helperMock = $this->getMock('Magento\Catalog\Model\Resource\Helper', [], [], '', false);
+        $this->helperMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Helper', [], [], '', false);
         $entity = $this->getMock('Magento\Eav\Model\Entity\AbstractEntity', [], [], '', false);
         $connection = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', null, [], '', false);
         $entity->expects($this->any())->method('getConnection')->will($this->returnValue($connection));
@@ -103,13 +103,13 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $this->stateMock = $this->getMock('Magento\Catalog\Model\Indexer\Product\Flat\State', [], [], '', false);
         $this->scopeConfigInterfaceMock = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface');
         $this->optionFactoryMock = $this->getMock('Magento\Catalog\Model\Product\OptionFactory', [], [], '', false);
-        $this->urlMock = $this->getMock('Magento\Catalog\Model\Resource\Url', [], [], '', false);
+        $this->urlMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Url', [], [], '', false);
         $this->timezoneInterfaceMock = $this->getMock('Magento\Framework\Stdlib\DateTime\TimezoneInterface');
         $this->sessionMock = $this->getMock('Magento\Customer\Model\Session', [], [], '', false);
         $this->dateTimeMock = $this->getMock('Magento\Framework\Stdlib\DateTime');
         $this->objectManagerHelper = new ObjectManagerHelper($this);
         $this->collection = $this->objectManagerHelper->getObject(
-            'Magento\Catalog\Model\Resource\Product\Link\Product\Collection',
+            'Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection',
             [
                 'entityFactory' => $this->entityFactoryMock,
                 'logger' => $this->loggerMock,
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/LinkTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/LinkTest.php
similarity index 94%
rename from app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/LinkTest.php
rename to app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/LinkTest.php
index c0a1482fa9a6873830a525df47c4953a5e95ba79..7e4c68e17c6b693b1e33051b68e770ae14a2ddbd 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/LinkTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/LinkTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Test\Unit\Model\Resource\Product;
+namespace Magento\Catalog\Test\Unit\Model\ResourceModel\Product;
 
 class LinkTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Link
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Link
      */
     protected $model;
 
@@ -30,12 +30,12 @@ class LinkTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->connection =
             $this->getMock('Magento\Framework\DB\Adapter\AdapterInterface', [], [], '', false);
 
         $this->model = $objectManager->getObject(
-            'Magento\Catalog\Model\Resource\Product\Link',
+            'Magento\Catalog\Model\ResourceModel\Product\Link',
             ['resource' => $this->resource]
         );
     }
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/Option/CollectionTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/Option/CollectionTest.php
similarity index 88%
rename from app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/Option/CollectionTest.php
rename to app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/Option/CollectionTest.php
index 067eaae021103c068b73b4a90e8ffb94ca08d15f..5d4fef54ddbe517c4ac27efae0be605a20b4f807 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Resource/Product/Option/CollectionTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/Product/Option/CollectionTest.php
@@ -6,10 +6,10 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Catalog\Test\Unit\Model\Resource\Product\Option;
+namespace Magento\Catalog\Test\Unit\Model\ResourceModel\Product\Option;
 
-use \Magento\Catalog\Model\Resource\Product\Option\Collection;
-use \Magento\Catalog\Model\Resource\Product\Option\Value;
+use \Magento\Catalog\Model\ResourceModel\Product\Option\Collection;
+use \Magento\Catalog\Model\ResourceModel\Product\Option\Value;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -49,7 +49,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $storeManagerMock;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Option|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Option|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -74,7 +74,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         );
         $this->eventManagerMock = $this->getMock('Magento\Framework\Event\Manager', [], [], '', false);
         $this->optionsFactoryMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Option\Value\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Option\Value\CollectionFactory',
             ['create'],
             [],
             '',
@@ -82,7 +82,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         );
         $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
         $this->resourceMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Option',
+            'Magento\Catalog\Model\ResourceModel\Product\Option',
             ['getConnection', '__wakeup', 'getMainTable', 'getTable'],
             [],
             '',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Resource/ProductTest.php b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/ProductTest.php
similarity index 94%
rename from app/code/Magento/Catalog/Test/Unit/Model/Resource/ProductTest.php
rename to app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/ProductTest.php
index bab9cd0f09b2c425429013fa1cc9adefa829769e..9967344b70e8da0c9f50a1995647fa7afb3fd96d 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Resource/ProductTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/ResourceModel/ProductTest.php
@@ -4,14 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Catalog\Test\Unit\Model\Resource;
+namespace Magento\Catalog\Test\Unit\Model\ResourceModel;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 class ProductTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product
+     * @var \Magento\Catalog\Model\ResourceModel\Product
      */
     protected $model;
 
@@ -45,7 +45,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->model = $objectManager->getObject(
-            'Magento\Catalog\Model\Resource\Product',
+            'Magento\Catalog\Model\ResourceModel\Product',
             [
                 'setFactory' => $this->setFactoryMock,
                 'typeFactory' => $this->typeFactoryMock,
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Rss/CategoryTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Rss/CategoryTest.php
index ed146896e012a7a84d991dd05082f51fd46fe7a2..3c7cd86a59fd075db5c9607b73719a2ee135b461 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Rss/CategoryTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Rss/CategoryTest.php
@@ -49,7 +49,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->collectionFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\CollectionFactory',
             ['create'],
             [],
             '',
@@ -101,7 +101,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
             ->method('getVisibleInCatalogIds')
             ->will($this->returnValue($visibleInCatalogIds));
         $products = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Collection',
+            'Magento\Catalog\Model\ResourceModel\Product\Collection',
             [
                 'setStoreId',
                 'addAttributeToSort',
@@ -115,7 +115,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $resourceCollection = $this->getMock(
-            'Magento\Catalog\Model\Resource\Collection\AbstractCollection',
+            'Magento\Catalog\Model\ResourceModel\Collection\AbstractCollection',
             [
                 'addAttributeToSelect',
                 'addAttributeToFilter',
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Rss/Product/NewProductsTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Rss/Product/NewProductsTest.php
index e883c2ab9c237ff721d1af5c1631f8bb872f180c..33f9dc6c4d1db54fde5db54ee1a63c15c7900bfc 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Rss/Product/NewProductsTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Rss/Product/NewProductsTest.php
@@ -77,8 +77,9 @@ class NewProductsTest extends \PHPUnit_Framework_TestCase
             ->method('date')
             ->will($this->returnValue($dateObject));
 
-        /** @var \Magento\Catalog\Model\Resource\Product\Collection $productCollection */
-        $productCollection = $this->getMock('Magento\Catalog\Model\Resource\Product\Collection', [], [], '', false);
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */
+        $productCollection =
+            $this->getMock('Magento\Catalog\Model\ResourceModel\Product\Collection', [], [], '', false);
         $this->product->expects($this->once())->method('getResourceCollection')->will(
             $this->returnValue($productCollection)
         );
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Rss/Product/NotifyStockTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Rss/Product/NotifyStockTest.php
index d86ed8096e6d6eec8f98f5b0d1c4098538d9b18b..ae5ef7a169dbc941c2e72def655b9942e1a1b048 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Rss/Product/NotifyStockTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Rss/Product/NotifyStockTest.php
@@ -34,12 +34,12 @@ class NotifyStockTest extends \PHPUnit_Framework_TestCase
     protected $product;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\CatalogInventory\Model\Resource\StockFactory
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\CatalogInventory\Model\ResourceModel\StockFactory
      */
     protected $stockFactory;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\CatalogInventory\Model\Resource\Stock
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\CatalogInventory\Model\ResourceModel\Stock
      */
     protected $stock;
 
@@ -59,9 +59,9 @@ class NotifyStockTest extends \PHPUnit_Framework_TestCase
         $this->productFactory = $this->getMock('Magento\Catalog\Model\ProductFactory', ['create'], [], '', false);
         $this->productFactory->expects($this->any())->method('create')->will($this->returnValue($this->product));
 
-        $this->stock = $this->getMock('Magento\CatalogInventory\Model\Resource\Stock', [], [], '', false);
+        $this->stock = $this->getMock('Magento\CatalogInventory\Model\ResourceModel\Stock', [], [], '', false);
         $this->stockFactory = $this->getMock(
-            'Magento\CatalogInventory\Model\Resource\StockFactory',
+            'Magento\CatalogInventory\Model\ResourceModel\StockFactory',
             ['create'],
             [],
             '',
@@ -86,8 +86,9 @@ class NotifyStockTest extends \PHPUnit_Framework_TestCase
 
     public function testGetProductsCollection()
     {
-        /** @var \Magento\Catalog\Model\Resource\Product\Collection $productCollection */
-        $productCollection = $this->getMock('Magento\Catalog\Model\Resource\Product\Collection', [], [], '', false);
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */
+        $productCollection =
+            $this->getMock('Magento\Catalog\Model\ResourceModel\Product\Collection', [], [], '', false);
         $this->product->expects($this->once())->method('getCollection')->will($this->returnValue($productCollection));
 
         $productCollection->expects($this->once())->method('addAttributeToSelect')->will($this->returnSelf());
diff --git a/app/code/Magento/Catalog/Test/Unit/Model/Rss/Product/SpecialTest.php b/app/code/Magento/Catalog/Test/Unit/Model/Rss/Product/SpecialTest.php
index a08d2242f028d6d3c8fceb63a64d7ec184b68fef..ee03da9cac647859890f664bde2ef795e4e85267 100644
--- a/app/code/Magento/Catalog/Test/Unit/Model/Rss/Product/SpecialTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Model/Rss/Product/SpecialTest.php
@@ -65,8 +65,9 @@ class SpecialTest extends \PHPUnit_Framework_TestCase
         $websiteId = 1;
         $store->expects($this->once())->method('getWebsiteId')->will($this->returnValue($websiteId));
 
-        /** @var \Magento\Catalog\Model\Resource\Product\Collection $productCollection */
-        $productCollection = $this->getMock('Magento\Catalog\Model\Resource\Product\Collection', [], [], '', false);
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */
+        $productCollection =
+            $this->getMock('Magento\Catalog\Model\ResourceModel\Product\Collection', [], [], '', false);
         $this->product->expects($this->once())->method('getResourceCollection')->will(
             $this->returnValue($productCollection)
         );
diff --git a/app/code/Magento/Catalog/Test/Unit/Plugin/Model/Resource/Attribute/SaveTest.php b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/ResourceModel/Attribute/SaveTest.php
similarity index 88%
rename from app/code/Magento/Catalog/Test/Unit/Plugin/Model/Resource/Attribute/SaveTest.php
rename to app/code/Magento/Catalog/Test/Unit/Plugin/Model/ResourceModel/Attribute/SaveTest.php
index 03cca3531a6b47f4eff496fd848ab30507962482..4c2bd7f972b6769a1db75833b587e6d47a495598 100644
--- a/app/code/Magento/Catalog/Test/Unit/Plugin/Model/Resource/Attribute/SaveTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/ResourceModel/Attribute/SaveTest.php
@@ -4,13 +4,13 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Catalog\Test\Unit\Plugin\Model\Resource\Attribute;
+namespace Magento\Catalog\Test\Unit\Plugin\Model\ResourceModel\Attribute;
 
-use \Magento\Catalog\Plugin\Model\Resource\Attribute\Save;
+use \Magento\Catalog\Plugin\Model\ResourceModel\Attribute\Save;
 
 class SaveTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\Catalog\Plugin\Model\Resource\Attribute\Save */
+    /** @var \Magento\Catalog\Plugin\Model\ResourceModel\Attribute\Save */
     protected $save;
 
     /** @var \Magento\PageCache\Model\Config|\PHPUnit_Framework_MockObject_MockObject */
@@ -35,10 +35,10 @@ class SaveTest extends \PHPUnit_Framework_TestCase
 
     public function testAroundSaveWithoutInvalidate()
     {
-        $subject = $this->getMockBuilder('Magento\Catalog\Model\Resource\Attribute')
+        $subject = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Attribute')
             ->disableOriginalConstructor()
             ->getMock();
-        $attribute = $this->getMockBuilder('Magento\Catalog\Model\Resource\Eav\Attribute')
+        $attribute = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->disableOriginalConstructor()
             ->getMock();
         $self = $this;
@@ -58,10 +58,10 @@ class SaveTest extends \PHPUnit_Framework_TestCase
 
     public function testAroundSave()
     {
-        $subject = $this->getMockBuilder('Magento\Catalog\Model\Resource\Attribute')
+        $subject = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Attribute')
             ->disableOriginalConstructor()
             ->getMock();
-        $attribute = $this->getMockBuilder('Magento\Catalog\Model\Resource\Eav\Attribute')
+        $attribute = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Plugin/Model/Resource/ConfigTest.php b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/ResourceModel/ConfigTest.php
similarity index 86%
rename from app/code/Magento/Catalog/Test/Unit/Plugin/Model/Resource/ConfigTest.php
rename to app/code/Magento/Catalog/Test/Unit/Plugin/Model/ResourceModel/ConfigTest.php
index 4c24156ee0c70df13194c89b15758728102571a3..19037ea544e3218cd6134ce269c997572fe3cedc 100644
--- a/app/code/Magento/Catalog/Test/Unit/Plugin/Model/Resource/ConfigTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Plugin/Model/ResourceModel/ConfigTest.php
@@ -4,13 +4,13 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Catalog\Test\Unit\Plugin\Model\Resource;
+namespace Magento\Catalog\Test\Unit\Plugin\Model\ResourceModel;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 class ConfigTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\Catalog\Plugin\Model\Resource\Config */
+    /** @var \Magento\Catalog\Plugin\Model\ResourceModel\Config */
     protected $config;
 
     /** @var \Magento\Framework\App\CacheInterface|\PHPUnit_Framework_MockObject_MockObject */
@@ -19,14 +19,14 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\App\Cache\StateInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $cacheState;
 
-    /** @var \Magento\Catalog\Model\Resource\Config|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Config|\PHPUnit_Framework_MockObject_MockObject */
     protected $subject;
 
     protected function setUp()
     {
         $this->cache = $this->getMock('Magento\Framework\App\CacheInterface');
         $this->cacheState = $this->getMock('Magento\Framework\App\Cache\StateInterface');
-        $this->subject = $this->getMock('Magento\Catalog\Model\Resource\Config', [], [], '', false);
+        $this->subject = $this->getMock('Magento\Catalog\Model\ResourceModel\Config', [], [], '', false);
     }
 
     public function testGetAttributesUsedInListingOnCacheDisabled()
@@ -49,7 +49,8 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
         $attributes = ['attributes'];
         $this->subject->expects($this->any())->method('getEntityTypeId')->willReturn($entityTypeId);
         $this->subject->expects($this->any())->method('getStoreId')->willReturn($storeId);
-        $cacheId = \Magento\Catalog\Plugin\Model\Resource\Config::PRODUCT_LISTING_ATTRIBUTES_CACHE_ID . $entityTypeId
+        $cacheId = \Magento\Catalog\Plugin\Model\ResourceModel\Config::PRODUCT_LISTING_ATTRIBUTES_CACHE_ID
+            . $entityTypeId
             . '_' . $storeId;
         $this->cache->expects($this->any())->method('load')->with($cacheId)->willReturn(serialize($attributes));
 
@@ -69,7 +70,8 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
         $attributes = ['attributes'];
         $this->subject->expects($this->any())->method('getEntityTypeId')->willReturn($entityTypeId);
         $this->subject->expects($this->any())->method('getStoreId')->willReturn($storeId);
-        $cacheId = \Magento\Catalog\Plugin\Model\Resource\Config::PRODUCT_LISTING_ATTRIBUTES_CACHE_ID . $entityTypeId
+        $cacheId = \Magento\Catalog\Plugin\Model\ResourceModel\Config::PRODUCT_LISTING_ATTRIBUTES_CACHE_ID
+            . $entityTypeId
             . '_' . $storeId;
         $this->cache->expects($this->any())->method('load')->with($cacheId)->willReturn(false);
         $this->cache->expects($this->any())->method('save')->with(
@@ -110,7 +112,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
         $attributes = ['attributes'];
         $this->subject->expects($this->any())->method('getEntityTypeId')->willReturn($entityTypeId);
         $this->subject->expects($this->any())->method('getStoreId')->willReturn($storeId);
-        $cacheId = \Magento\Catalog\Plugin\Model\Resource\Config::PRODUCT_LISTING_SORT_BY_ATTRIBUTES_CACHE_ID
+        $cacheId = \Magento\Catalog\Plugin\Model\ResourceModel\Config::PRODUCT_LISTING_SORT_BY_ATTRIBUTES_CACHE_ID
             . $entityTypeId . '_' . $storeId;
         $this->cache->expects($this->any())->method('load')->with($cacheId)->willReturn(serialize($attributes));
 
@@ -130,7 +132,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
         $attributes = ['attributes'];
         $this->subject->expects($this->any())->method('getEntityTypeId')->willReturn($entityTypeId);
         $this->subject->expects($this->any())->method('getStoreId')->willReturn($storeId);
-        $cacheId = \Magento\Catalog\Plugin\Model\Resource\Config::PRODUCT_LISTING_SORT_BY_ATTRIBUTES_CACHE_ID
+        $cacheId = \Magento\Catalog\Plugin\Model\ResourceModel\Config::PRODUCT_LISTING_SORT_BY_ATTRIBUTES_CACHE_ID
             . $entityTypeId . '_' . $storeId;
         $this->cache->expects($this->any())->method('load')->with($cacheId)->willReturn(false);
         $this->cache->expects($this->any())->method('save')->with(
@@ -153,14 +155,14 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @param bool $cacheEnabledFlag
-     * @return \Magento\Catalog\Plugin\Model\Resource\Config
+     * @return \Magento\Catalog\Plugin\Model\ResourceModel\Config
      */
     protected function getConfig($cacheEnabledFlag)
     {
         $this->cacheState->expects($this->any())->method('isEnabled')
             ->with(\Magento\Eav\Model\Cache\Type::TYPE_IDENTIFIER)->willReturn($cacheEnabledFlag);
         return (new ObjectManager($this))->getObject(
-            'Magento\Catalog\Plugin\Model\Resource\Config',
+            'Magento\Catalog\Plugin\Model\ResourceModel\Config',
             [
                 'cache' => $this->cache,
                 'cacheState' => $this->cacheState
diff --git a/app/code/Magento/Catalog/Test/Unit/Pricing/Price/FinalPriceTest.php b/app/code/Magento/Catalog/Test/Unit/Pricing/Price/FinalPriceTest.php
index 0d1e9d114b4d48e3b98eafc6ce2f8699910f2408..3aa2eacbc78da241ee10f79f823eddceb2dadf1e 100644
--- a/app/code/Magento/Catalog/Test/Unit/Pricing/Price/FinalPriceTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Pricing/Price/FinalPriceTest.php
@@ -26,7 +26,7 @@ class FinalPriceTest extends \PHPUnit_Framework_TestCase
     protected $basePriceMock;
 
     /**
-     * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $saleableMock;
 
diff --git a/app/code/Magento/Catalog/Test/Unit/Pricing/Price/TierPriceTest.php b/app/code/Magento/Catalog/Test/Unit/Pricing/Price/TierPriceTest.php
index bed320a21dc3c87a48fb29e9037c2a2ee8d62b96..3ada95d889857768128e2763628c8e7069db57c8 100644
--- a/app/code/Magento/Catalog/Test/Unit/Pricing/Price/TierPriceTest.php
+++ b/app/code/Magento/Catalog/Test/Unit/Pricing/Price/TierPriceTest.php
@@ -223,7 +223,7 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase
         $attributeMock = $this->getMock('Magento\Eav\Model\Entity\Attribute\AbstractAttribute', [], [], '', false);
         $attributeMock->expects($this->once())->method('getBackend')->will($this->returnValue($backendMock));
 
-        $productResource = $this->getMock('Magento\Catalog\Model\Resource\Product', [], [], '', false);
+        $productResource = $this->getMock('Magento\Catalog\Model\ResourceModel\Product', [], [], '', false);
         $productResource->expects($this->once())->method('getAttribute')->with(TierPrice::PRICE_CODE)
             ->will($this->returnValue($attributeMock));
 
diff --git a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
index 85eaaf679f02ff8a06f0d1200cc79ea572ad7ed6..58de2b262c8ab7489b6f37691e592484dd7d624b 100644
--- a/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
+++ b/app/code/Magento/Catalog/Ui/Component/ColumnFactory.php
@@ -53,7 +53,6 @@ class ColumnFactory
         $config = array_merge([
             'label' => __($attribute->getDefaultFrontendLabel()),
             'dataType' => $this->getDataType($attribute),
-            'align' => 'left',
             'add_field' => true,
             'visible' => $attribute->getIsVisibleInGrid(),
         ], $config);
@@ -61,15 +60,16 @@ class ColumnFactory
         if ($attribute->usesSource()) {
             $config['options'] = $attribute->getSource()->getAllOptions();
         }
+        
+        $config['component'] = $this->getJsComponent($config['dataType']);
+        
         $arguments = [
             'data' => [
-                'js_config' => [
-                    'component' => $this->getJsComponent($config['dataType']),
-                ],
                 'config' => $config,
             ],
             'context' => $context,
         ];
+        
         return $this->componentFactory->create($columnName, 'column', $arguments);
     }
 
diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php b/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php
index 2e0243e5875aaba35f44914ba5eebc908d7d1470..04e58709d402f67aa6a6a1fc96d2bfe143cd1438 100644
--- a/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php
+++ b/app/code/Magento/Catalog/Ui/Component/Listing/Columns.php
@@ -15,6 +15,17 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
     /** @var \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface */
     protected $attributeRepository;
 
+    /**
+     * @var array
+     */
+    protected $filterMap = [
+        'default' => 'text',
+        'select' => 'select',
+        'boolean' => 'select',
+        'multiselect' => 'select',
+        'date' => 'dateRange',
+    ];
+
     /**
      * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context
      * @param \Magento\Catalog\Ui\Component\ColumnFactory $columnFactory
@@ -41,8 +52,12 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
     {
         $columnSortOrder = self::DEFAULT_COLUMNS_MAX_ORDER;
         foreach ($this->attributeRepository->getList() as $attribute) {
+            $config = [];
             if (!isset($this->components[$attribute->getAttributeCode()])) {
                 $config['sortOrder'] = ++$columnSortOrder;
+                if ($attribute->getIsFilterableInGrid()) {
+                    $config['filter'] = $this->getFilterType($attribute->getFrontendInput());
+                }
                 $column = $this->columnFactory->create($attribute, $this->getContext(), $config);
                 $column->prepare();
                 $this->addComponent($attribute->getAttributeCode(), $column);
@@ -50,4 +65,15 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
         }
         parent::prepare();
     }
+
+    /**
+     * Retrieve filter type by $frontendInput
+     *
+     * @param string $frontendInput
+     * @return string
+     */
+    protected function getFilterType($frontendInput)
+    {
+        return isset($this->filterMap[$frontendInput]) ? $this->filterMap[$frontendInput] : $this->filterMap['default'];
+    }
 }
diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php b/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php
index ec0547e6f1b9e3377f0443016f95ea6a0823409c..2c4af877568c3d9d33dfb033d034c254e03b376f 100644
--- a/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php
+++ b/app/code/Magento/Catalog/Ui/Component/Listing/Columns/Price.php
@@ -13,7 +13,7 @@ class Price extends \Magento\Ui\Component\Listing\Columns\Column
     /**
      * Column name
      */
-    const NAME = 'price';
+    const NAME = 'column.price';
 
     /**
      * @var \Magento\Framework\Locale\CurrencyInterface
diff --git a/app/code/Magento/Catalog/Ui/Component/Listing/Filters.php b/app/code/Magento/Catalog/Ui/Component/Listing/Filters.php
deleted file mode 100644
index ba70b679b5e4e4e44781ad1a8363b07e7ce05ad6..0000000000000000000000000000000000000000
--- a/app/code/Magento/Catalog/Ui/Component/Listing/Filters.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Catalog\Ui\Component\Listing;
-
-class Filters extends \Magento\Ui\Component\Filters
-{
-    /**
-     * @var \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface
-     */
-    protected $attributeRepository;
-
-    /**
-     * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context
-     * @param \Magento\Catalog\Ui\Component\FilterFactory $filterFactory
-     * @param \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface $attributeRepository
-     * @param array $components
-     * @param array $data
-     */
-    public function __construct(
-        \Magento\Framework\View\Element\UiComponent\ContextInterface $context,
-        \Magento\Catalog\Ui\Component\FilterFactory $filterFactory,
-        \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface $attributeRepository,
-        array $components = [],
-        array $data = []
-    ) {
-        parent::__construct($context, $components, $data);
-        $this->filterFactory = $filterFactory;
-        $this->attributeRepository = $attributeRepository;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function prepare()
-    {
-        foreach ($this->attributeRepository->getList() as $attribute) {
-            if (!isset($this->components[$attribute->getAttributeCode()]) && $attribute->getIsFilterableInGrid()) {
-                $filter = $this->filterFactory->create($attribute, $this->getContext());
-                $filter->prepare();
-                $this->addComponent($attribute->getAttributeCode(), $filter);
-            }
-        }
-        parent::prepare();
-    }
-}
diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/AddStoreFieldToCollection.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/AddStoreFieldToCollection.php
index ea841e030babf16d3eb04c31542aac7397846e12..3da2a53bd79c897fbe093caa2da632dbc6c9a658 100644
--- a/app/code/Magento/Catalog/Ui/DataProvider/Product/AddStoreFieldToCollection.php
+++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/AddStoreFieldToCollection.php
@@ -34,7 +34,7 @@ class AddStoreFieldToCollection implements AddFilterToCollectionInterface
     public function addFilter(Collection $collection, $field, $condition = null)
     {
         if (isset($condition['eq']) && $condition['eq']) {
-            /** @var \Magento\Catalog\Model\Resource\Product\Collection $collection  */
+            /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection  */
             $collection->addStoreFilter($this->storeManager->getStore($condition['eq']));
         }
     }
diff --git a/app/code/Magento/Catalog/Ui/DataProvider/Product/ProductDataProvider.php b/app/code/Magento/Catalog/Ui/DataProvider/Product/ProductDataProvider.php
index 8e558d9318deb621550a958b23186991128a8267..9b9a5a7740c5e08287ebb83ac24501bcce4fc628 100644
--- a/app/code/Magento/Catalog/Ui/DataProvider/Product/ProductDataProvider.php
+++ b/app/code/Magento/Catalog/Ui/DataProvider/Product/ProductDataProvider.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Catalog\Ui\DataProvider\Product;
 
-use Magento\Catalog\Model\Resource\Product\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
 
 /**
  * Class ProductDataProvider
@@ -15,7 +15,7 @@ class ProductDataProvider extends \Magento\Ui\DataProvider\AbstractDataProvider
     /**
      * Product collection
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     protected $collection;
 
diff --git a/app/code/Magento/Catalog/composer.json b/app/code/Magento/Catalog/composer.json
index 4b2838d34c1d36aa008bf80519eaf8e5c2e1a35d..13bfaf244ac1f61bf10beb3d8c36c809c276376f 100644
--- a/app/code/Magento/Catalog/composer.json
+++ b/app/code/Magento/Catalog/composer.json
@@ -30,7 +30,8 @@
         "magento/module-ui": "self.version"
     },
     "suggest": {
-        "magento/module-cookie": "1.0.0-beta"
+        "magento/module-cookie": "1.0.0-beta",
+        "magento/module-catalog-sample-data": "Sample Data version:1.0.0-beta"
     },
     "type": "magento2-module",
     "version": "1.0.0-beta",
diff --git a/app/code/Magento/Catalog/etc/adminhtml/di.xml b/app/code/Magento/Catalog/etc/adminhtml/di.xml
index 863877b8fa634d727c4309f40f0561b1799d6839..d0a8cbf4d2808d8b4b8de58128a8208fe3563b1c 100644
--- a/app/code/Magento/Catalog/etc/adminhtml/di.xml
+++ b/app/code/Magento/Catalog/etc/adminhtml/di.xml
@@ -63,8 +63,8 @@
     <type name="Magento\Catalog\Model\Indexer\Category\Product\Action\Full">
         <plugin name="invalidate_pagecache_after_full_reindex" type="Magento\Catalog\Plugin\Model\Indexer\Category\Product\Execute" />
     </type>
-    <type name="Magento\Catalog\Model\Resource\Attribute">
-        <plugin name="invalidate_pagecache_after_attribute_save" type="Magento\Catalog\Plugin\Model\Resource\Attribute\Save" />
+    <type name="Magento\Catalog\Model\ResourceModel\Attribute">
+        <plugin name="invalidate_pagecache_after_attribute_save" type="Magento\Catalog\Plugin\Model\ResourceModel\Attribute\Save" />
     </type>
     <type name="Magento\Catalog\Ui\DataProvider\Product\ProductDataProvider">
         <arguments>
diff --git a/app/code/Magento/Catalog/etc/adminhtml/events.xml b/app/code/Magento/Catalog/etc/adminhtml/events.xml
index 96670e412d9f50bb19760d13da29013687f0d6ad..bb23bd31ac398069a23da1b658606a92325a98d2 100644
--- a/app/code/Magento/Catalog/etc/adminhtml/events.xml
+++ b/app/code/Magento/Catalog/etc/adminhtml/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="cms_wysiwyg_images_static_urls_allowed">
-        <observer name="catalog_wysiwyg" instance="Magento\Catalog\Observer\CatalogCheckIsUsingStaticUrlsAllowedObserver" method="execute" />
+        <observer name="catalog_wysiwyg" instance="Magento\Catalog\Observer\CatalogCheckIsUsingStaticUrlsAllowedObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Catalog/etc/di.xml b/app/code/Magento/Catalog/etc/di.xml
index 60d25ceb7e4770c8885cfc3886cb9d7cf0bde54f..3ab486011b5a660d3a2e28b05de7de8f321b322e 100644
--- a/app/code/Magento/Catalog/etc/di.xml
+++ b/app/code/Magento/Catalog/etc/di.xml
@@ -25,7 +25,7 @@
     <preference for="Magento\Catalog\Api\CategoryRepositoryInterface" type="Magento\Catalog\Model\CategoryRepository" />
     <preference for="Magento\Catalog\Api\Data\CategoryTreeInterface" type="Magento\Catalog\Model\Category" />
     <preference for="Magento\Catalog\Api\ProductAttributeRepositoryInterface" type="Magento\Catalog\Model\Product\Attribute\Repository" />
-    <preference for="Magento\Catalog\Api\Data\ProductAttributeInterface" type="Magento\Catalog\Model\Resource\Eav\Attribute" />
+    <preference for="Magento\Catalog\Api\Data\ProductAttributeInterface" type="Magento\Catalog\Model\ResourceModel\Eav\Attribute" />
     <preference for="Magento\Catalog\Api\ProductTypeListInterface" type="Magento\Catalog\Model\ProductTypeList" />
     <preference for="Magento\Catalog\Api\Data\ProductTypeInterface" type="Magento\Catalog\Model\ProductType" />
     <preference for="Magento\Catalog\Api\ProductAttributeMediaGalleryManagementInterface" type="Magento\Catalog\Model\Product\Gallery\GalleryManagement" />
@@ -43,7 +43,7 @@
     <preference for="Magento\Catalog\Api\AttributeSetManagementInterface" type="Magento\Catalog\Model\Product\Attribute\SetManagement" />
     <preference for="Magento\Catalog\Api\AttributeSetRepositoryInterface" type="Magento\Catalog\Model\Product\Attribute\SetRepository" />
     <preference for="Magento\Catalog\Api\ProductManagementInterface" type="Magento\Catalog\Model\ProductManagement" />
-    <type name="Magento\Customer\Model\Resource\Visitor">
+    <type name="Magento\Customer\Model\ResourceModel\Visitor">
         <plugin name="catalogLog" type="Magento\Catalog\Model\Plugin\Log" />
     </type>
     <type name="Magento\Indexer\Model\Indexer\State">
@@ -107,9 +107,9 @@
             <argument name="productLink" xsi:type="object">Magento\Catalog\Model\Product\Link\Proxy</argument>
         </arguments>
     </type>
-    <type name="Magento\Catalog\Model\Resource\Product\Collection">
+    <type name="Magento\Catalog\Model\ResourceModel\Product\Collection">
         <arguments>
-            <argument name="catalogUrl" xsi:type="object">Magento\Catalog\Model\Resource\Url\Proxy</argument>
+            <argument name="catalogUrl" xsi:type="object">Magento\Catalog\Model\ResourceModel\Url\Proxy</argument>
             <argument name="customerSession" xsi:type="object">Magento\Customer\Model\Session\Proxy</argument>
         </arguments>
     </type>
@@ -164,16 +164,16 @@
             <argument name="storage" xsi:type="object">Magento\Catalog\Model\Session\Storage</argument>
         </arguments>
     </type>
-    <type name="Magento\Store\Model\Resource\Website">
+    <type name="Magento\Store\Model\ResourceModel\Website">
         <plugin name="priceIndexerOnWebsiteDelete" type="Magento\Catalog\Model\Indexer\Product\Price\Plugin\Website"/>
     </type>
-    <type name="Magento\Store\Model\Resource\Store">
+    <type name="Magento\Store\Model\ResourceModel\Store">
         <plugin name="storeViewResourceAroundSave" type="Magento\Catalog\Model\Indexer\Category\Flat\Plugin\StoreView"/>
         <plugin name="catalogProductFlatIndexerStore" type="Magento\Catalog\Model\Indexer\Product\Flat\Plugin\Store" />
         <plugin name="categoryStoreAroundSave" type="Magento\Catalog\Model\Indexer\Category\Product\Plugin\StoreView"/>
         <plugin name="productAttributesStoreViewSave" type="Magento\Catalog\Model\Indexer\Product\Eav\Plugin\StoreView"/>
     </type>
-    <type name="Magento\Store\Model\Resource\Group">
+    <type name="Magento\Store\Model\ResourceModel\Group">
         <plugin name="storeGroupResourceAroundSave" type="Magento\Catalog\Model\Indexer\Category\Flat\Plugin\StoreGroup"/>
         <plugin name="catalogProductFlatIndexerStoreGroup" type="Magento\Catalog\Model\Indexer\Product\Flat\Plugin\StoreGroup" />
         <plugin name="categoryStoreGroupAroundSave" type="Magento\Catalog\Model\Indexer\Category\Product\Plugin\StoreGroup"/>
@@ -191,7 +191,7 @@
     </type>
     <type name="Magento\Catalog\Model\Indexer\Product\Price\AbstractAction">
         <arguments>
-            <argument name="defaultPriceIndexer" xsi:type="object">Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice</argument>
+            <argument name="defaultPriceIndexer" xsi:type="object">Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice</argument>
         </arguments>
     </type>
     <type name="Magento\Eav\Model\Entity\Attribute\Set">
@@ -232,7 +232,7 @@
     <type name="Magento\Eav\Model\Entity\Setup\PropertyMapper\Composite">
         <arguments>
             <argument name="propertyMappers" xsi:type="array">
-                <item name="catalog" xsi:type="string">Magento\Catalog\Model\Resource\Setup\PropertyMapper</item>
+                <item name="catalog" xsi:type="string">Magento\Catalog\Model\ResourceModel\Setup\PropertyMapper</item>
             </argument>
         </arguments>
     </type>
@@ -381,12 +381,12 @@
     </type>
     <virtualType name="Magento\Catalog\Block\Category\Widget\Link" type="Magento\Catalog\Block\Widget\Link">
         <arguments>
-            <argument name="entityResource" xsi:type="object">Magento\Catalog\Model\Resource\Category</argument>
+            <argument name="entityResource" xsi:type="object">Magento\Catalog\Model\ResourceModel\Category</argument>
         </arguments>
     </virtualType>
     <virtualType name="Magento\Catalog\Block\Product\Widget\Link" type="Magento\Catalog\Block\Widget\Link">
         <arguments>
-            <argument name="entityResource" xsi:type="object">Magento\Catalog\Model\Resource\Product</argument>
+            <argument name="entityResource" xsi:type="object">Magento\Catalog\Model\ResourceModel\Product</argument>
         </arguments>
     </virtualType>
     <type name="Magento\Framework\App\Rss\RssManagerInterface">
@@ -450,8 +450,8 @@
             </argument>
         </arguments>
     </type>
-    <type name="Magento\Catalog\Model\Resource\Config">
-        <plugin name="productListingAttributesCaching" type="Magento\Catalog\Plugin\Model\Resource\Config" />
+    <type name="Magento\Catalog\Model\ResourceModel\Config">
+        <plugin name="productListingAttributesCaching" type="Magento\Catalog\Plugin\Model\ResourceModel\Config" />
     </type>
     <preference for="Magento\Catalog\Api\ProductLinkTypeListInterface" type="Magento\Catalog\Model\Product\LinkTypeProvider" />
     <preference for="Magento\Catalog\Api\Data\ProductLinkAttributeInterface" type="\Magento\Catalog\Model\ProductLink\Attribute" />
@@ -470,14 +470,14 @@
     <preference for="Magento\Catalog\Api\Data\ProductCustomOptionValuesInterface" type="\Magento\Catalog\Model\Product\Option\Value" />
     <preference for="Magento\Catalog\Api\Data\CustomOptionInterface" type="Magento\Catalog\Model\CustomOptions\CustomOption" />
     <preference for="Magento\Catalog\Api\Data\ProductOptionInterface" type="Magento\Catalog\Model\ProductOption" />
-    <virtualType name="Magento\Catalog\Model\Resource\Attribute\Collection" type="Magento\Eav\Model\Resource\Entity\Attribute\Collection">
+    <virtualType name="Magento\Catalog\Model\ResourceModel\Attribute\Collection" type="Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection">
     </virtualType>
     <type name="Magento\Catalog\Api\ProductRepositoryInterface">
         <plugin name="transactionWrapper" type="\Magento\Catalog\Model\Plugin\ProductRepository\TransactionWrapper" sortOrder="-1"/>
     </type>
     <type name="Magento\Catalog\Model\CategoryRepository">
         <arguments>
-            <argument name="categoryResource" xsi:type="object">Magento\Catalog\Model\Resource\Category\Proxy</argument>
+            <argument name="categoryResource" xsi:type="object">Magento\Catalog\Model\ResourceModel\Category\Proxy</argument>
         </arguments>
     </type>
     <type name="Magento\Catalog\Helper\Product\ConfigurationPool">
diff --git a/app/code/Magento/Catalog/etc/frontend/di.xml b/app/code/Magento/Catalog/etc/frontend/di.xml
index 6cdb065f323ab4bd5de0d0c0f902ccdcae045367..ba9906b772de7ec5d7540676b98e65945d26f3fd 100644
--- a/app/code/Magento/Catalog/etc/frontend/di.xml
+++ b/app/code/Magento/Catalog/etc/frontend/di.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
-    <type name="Magento\Catalog\Model\Resource\Category\Collection">
+    <type name="Magento\Catalog\Model\ResourceModel\Category\Collection">
         <arguments>
             <argument name="fetchStrategy" xsi:type="object">Magento\Framework\Data\Collection\Db\FetchStrategy\Cache</argument>
         </arguments>
diff --git a/app/code/Magento/Catalog/etc/frontend/events.xml b/app/code/Magento/Catalog/etc/frontend/events.xml
index 1cd4531d5adf995face225583b5f0c3258187454..a4ed910c845d21a86a7ae60117b78b2bfe4bd91e 100644
--- a/app/code/Magento/Catalog/etc/frontend/events.xml
+++ b/app/code/Magento/Catalog/etc/frontend/events.xml
@@ -7,12 +7,12 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="customer_login">
-        <observer name="catalog" instance="Magento\Catalog\Observer\Compare\BindCustomerLoginObserver" method="execute" shared="false" />
+        <observer name="catalog" instance="Magento\Catalog\Observer\Compare\BindCustomerLoginObserver" shared="false" />
     </event>
     <event name="customer_logout">
-        <observer name="catalog" instance="Magento\Catalog\Observer\Compare\BindCustomerLogoutObserver" method="execute" shared="false" />
+        <observer name="catalog" instance="Magento\Catalog\Observer\Compare\BindCustomerLogoutObserver" shared="false" />
     </event>
     <event name="page_block_html_topmenu_gethtml_before">
-        <observer name="catalog_add_topmenu_items" instance="Magento\Catalog\Observer\AddCatalogToTopmenuItemsObserver" method="execute" />
+        <observer name="catalog_add_topmenu_items" instance="Magento\Catalog\Observer\AddCatalogToTopmenuItemsObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Catalog/etc/module.xml b/app/code/Magento/Catalog/etc/module.xml
index dd1aeca305761fc7a8a5e657ed18a9d15abace24..ee04bbc7431f4d853a6bcd6b81a5c129f19c3794 100644
--- a/app/code/Magento/Catalog/etc/module.xml
+++ b/app/code/Magento/Catalog/etc/module.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="Magento_Catalog" setup_version="2.0.1">
+    <module name="Magento_Catalog" setup_version="2.0.2">
         <sequence>
             <module name="Magento_Eav"/>
             <module name="Magento_Cms"/>
diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_block.xml b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_block.xml
index 8937bb572bacbf0ee4afac5d235ed105b15a8b8c..5c1895b2b4afa644f2b56b1d3cfd012c11a86abf 100644
--- a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_block.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.catalog.product.set.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">setGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Eav\Model\Resource\Entity\Attribute\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Eav\Model\ResourceModel\Entity\Attribute\Grid\Collection</argument>
                     <argument name="default_sort" xsi:type="string">set_name</argument>
                     <argument name="default_dir" xsi:type="string">ASC</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
diff --git a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_edit.xml b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_edit.xml
index 30d421cfe85949e262c51f087306b6d7a25933ee..9242521462141fa464e0e3bc68e1fabec241cb3a 100644
--- a/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_edit.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/layout/catalog_product_set_edit.xml
@@ -8,7 +8,9 @@
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
     <body>
         <referenceContainer name="content">
-            <block class="Magento\Catalog\Block\Adminhtml\Product\Attribute\Set\Main" name="adminhtml.catalog.product.set.edit" template="catalog/product/attribute/set/main.phtml"/>
+            <container name="adminhtml.catalog.product.set.edit.wrapper" htmlTag="div" htmlClass="admin__scope-old"><!-- @todo ui: remove arguments within .admin__scope-old -->
+                <block class="Magento\Catalog\Block\Adminhtml\Product\Attribute\Set\Main" name="adminhtml.catalog.product.set.edit" template="catalog/product/attribute/set/main.phtml"/>
+            </container>
         </referenceContainer>
     </body>
 </page>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
index fcf5ba45d80d69ecb9c336a785295eb6a4fb9734..569e0e88458c683f848c64595fa8159c30eeee59 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/edit.phtml
@@ -20,9 +20,11 @@
 require([
     "jquery",
     "tinymce",
+    'Magento_Ui/js/modal/confirm',
+    'Magento_Ui/js/modal/alert',
     "loadingPopup",
     "mage/backend/floating-header"
-], function(jQuery, tinyMCE){
+], function(jQuery, tinyMCE, confirm, alert){
 
 //<![CDATA[
     function categoryReset(url,useAjax){
@@ -40,9 +42,14 @@ require([
     * with this form, we surely delete same category in the tree and at backend
     */
     function categoryDelete(url) {
-        if (confirm('<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this category?') ?>')){
-            location.href = url;
-        }
+        confirm({
+            content: '<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this category?') ?>',
+            actions: {
+                confirm: function () {
+                    location.href = url;
+                }
+            }
+        });
     }
 
     /**
@@ -81,7 +88,9 @@ require([
                         });
                         $categoryContainer.html('');
                     } catch (e) {
-                        alert(e.message);
+                        alert({
+                            content: e.message
+                        });
                     }
                     $categoryContainer.html(data.content).trigger('contentUpdated');
                     setTimeout(function() {
@@ -98,7 +107,9 @@ require([
                                 window.refreshTreeArea();
                             }
                         } catch (e) {
-                            alert(e.message);
+                            alert({
+                                content: e.message
+                            });
                         };
                     }, 25);
                 }
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
index eeefa9796b4f85dc48a98950a928717ceffb2ef6..9e1c939c542386dea232351f7be694945c4dd984 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/category/tree.phtml
@@ -16,536 +16,486 @@
     </div>
     <div class="tree-actions">
         <?php if ($block->getRoot()): ?>
-        <?php //echo $block->getCollapseButtonHtml() ?>
-        <?php //echo $block->getExpandButtonHtml() ?>
-        <a href="#"
-           onclick="tree.collapseTree(); return false;"><?php /* @escapeNotVerified */ echo __('Collapse All'); ?></a>
-        <span class="separator">|</span> <a href="#"
-                                            onclick="tree.expandTree(); return false;"><?php /* @escapeNotVerified */ echo __('Expand All'); ?></a>
+            <?php //echo $block->getCollapseButtonHtml() ?>
+            <?php //echo $block->getExpandButtonHtml() ?>
+            <a href="#"
+               onclick="tree.collapseTree(); return false;"><?php /* @escapeNotVerified */ echo __('Collapse All'); ?></a>
+            <span class="separator">|</span> <a href="#"
+                                                onclick="tree.expandTree(); return false;"><?php /* @escapeNotVerified */ echo __('Expand All'); ?></a>
         <?php endif; ?>
     </div>
-<?php if ($block->getRoot()): ?>
+    <?php if ($block->getRoot()): ?>
     <div class="tree-holder">
         <div id="tree-div" class="tree-wrapper"></div>
     </div>
 </div>
 
-<div data-id="information-dialog-tree" class="messages" style="display: none;">
-    <div class="message message-notice">
-       <div><?php /* @escapeNotVerified */ echo __('This operation can take a long time'); ?></div>
+    <div data-id="information-dialog-tree" class="messages" style="display: none;">
+        <div class="message message-notice">
+            <div><?php /* @escapeNotVerified */ echo __('This operation can take a long time'); ?></div>
+        </div>
     </div>
-</div>
-<!--[if IE]>
-<script id="ie-deferred-loader" defer="defer" src=""></script>
-<![endif]-->
-<script>
-var tree;
-require([
-    "jquery",
-    "jquery/ui",
-    "prototype",
-    "extjs/ext-tree-checkbox",
-    "mage/adminhtml/form",
-    "mage/translate"
-], function(jQuery){
-
-/**
- * Fix ext compatibility with prototype 1.6
- */
-Ext.lib.Event.getTarget = function (e) {
-    var ee = e.browserEvent || e;
-    return ee.target ? Event.element(ee) : null;
-};
-
-Ext.tree.TreePanel.Enhanced = function (el, config) {
-    Ext.tree.TreePanel.Enhanced.superclass.constructor.call(this, el, config);
-};
-
-Ext.extend(Ext.tree.TreePanel.Enhanced, Ext.tree.TreePanel, {
-
-    loadTree:function (config, firstLoad) {
-        var parameters = config['parameters'];
-        var data = config['data'];
-
-        this.storeId = parameters['store_id'];
-
-        if (this.storeId != 0 && $('add_root_category_button')) {
-            $('add_root_category_button').hide();
-        }
-
-        if ((typeof parameters['root_visible']) != 'undefined') {
-            this.rootVisible = parameters['root_visible'] * 1;
-        }
-
-        var root = new Ext.tree.TreeNode(parameters);
-
-        this.nodeHash = {};
-        this.setRootNode(root);
-
-        if (firstLoad) {
-            this.addListener('click', this.categoryClick);
-            this.addListener('beforenodedrop', categoryMove.createDelegate(this));
-        }
-
-        this.loader.buildCategoryTree(root, data);
-        this.el.dom.innerHTML = '';
-        // render the tree
-        this.render();
-        if (parameters['expanded']) {
-            this.expandAll();
-        } else {
-            root.expand();
-        }
-
-        var selectedNode = this.getNodeById(parameters['category_id']);
-        if (selectedNode) {
-            this.currentNodeId = parameters['category_id'];
-        }
-        this.selectCurrentNode();
-
-        // Temporary solution will be replaced after refactoring of tree functionality
-        jQuery('body').off('tabsactivate.tree').on('tabsactivate.tree', jQuery.proxy(function (e, ui) {
-            this.activeTab = jQuery(ui.newTab).find('a').prop('id');
-        }, this))
-    },
-
-    request:function (url, params) {
-        if (!params) {
-            if (this.activeTab) {
-                var params = {active_tab_id:this.activeTab};
-            }
-            else {
-                var params = {};
-            }
-        }
-        if (!params.form_key) {
-            params.form_key = FORM_KEY;
-        }
-        var result = new Ajax.Request(
-                url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ),
-                {
-                    parameters:params,
-                    method:'post'
-                }
-        );
-
-        return result;
-    },
-
-    selectCurrentNode:function () {
-        if (this.currentNodeId) {
-            var selectedNode = this.getNodeById(this.currentNodeId);
-            if ((typeof selectedNode.attributes.path) != 'undefined') {
-                var path = selectedNode.attributes.path;
-                if (!this.storeId) {
-                    path = '0/' + path;
-                }
-                this.selectPath(path);
-            } else {
-                this.getSelectionModel().select(selectedNode);
-            }
-        }
-    },
-
-    collapseTree:function () {
-        this.collapseAll();
-
-        this.selectCurrentNode();
-
-        if (!this.collapsed) {
-            this.collapsed = true;
-            this.loader.dataUrl = '<?php /* @escapeNotVerified */ echo $block->getLoadTreeUrl(false) ?>';
-            this.request(this.loader.dataUrl, false);
-        }
-    },
-
-    expandTree:function () {
-        this.expandAll();
-        if (this.collapsed) {
-            this.collapsed = false;
-            this.loader.dataUrl = '<?php /* @escapeNotVerified */ echo $block->getLoadTreeUrl(true) ?>';
-            this.request(this.loader.dataUrl, false);
-        }
-    },
-
-    categoryClick:function (node, e) {
-        var url = this.buildUrl(node.id);
-
-        this.currentNodeId = node.id;
-        if (!this.useAjax) {
-            setLocation(url);
-            return;
-        }
-        if (this.activeTab) {
-            var params = {active_tab_id:this.activeTab};
-        }
-        updateContent(url, params);
-    },
-
-    buildUrl: function(id){
-        var urlExt = (this.storeId ? 'store/' + this.storeId + '/' : '') + 'id/' + id + '/';
-
-        return parseSidUrl(this.baseUrl, urlExt);
-    },
-
-    getBaseUrl: function(){
-        return this.baseUrl;
-    }
-});
-
-function reRenderTree(switcherParams) {
-    // re-render tree by store switcher
-    if (tree && switcherParams) {
-        var url;
-        if (switcherParams.useConfirm) {
-            if (!confirm("<?php /* @escapeNotVerified */ echo __('Please confirm site switching. All data that hasn\'t been saved will be lost.') ?>")) {
-                return false;
-            }
-        }
+    <!--[if IE]>
+    <script id="ie-deferred-loader" defer="defer" src=""></script>
+    <![endif]-->
+    <script>
+        var tree;
+        require([
+            "jquery",
+            'Magento_Ui/js/modal/modal',
+            "jquery/ui",
+            "prototype",
+            "extjs/ext-tree-checkbox",
+            "mage/adminhtml/form",
+            "mage/translate"
+        ], function (jQuery, modal) {
+
+            /**
+             * Fix ext compatibility with prototype 1.6
+             */
+            Ext.lib.Event.getTarget = function (e) {
+                var ee = e.browserEvent || e;
+                return ee.target ? Event.element(ee) : null;
+            };
 
-        if ($('add_root_category_button')) {
-            if (!switcherParams.scopeId) {
-                $('add_root_category_button').show();
-            }
-            else {
-                $('add_root_category_button').hide();
-            }
-        }
-
-        if (tree.useAjax) {
-            // retain current selected category id
-            url = tree.switchTreeUrl + switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/';
-            // load from cache
-            // load from ajax
-            // add form key
-            var params = {
-                form_key : FORM_KEY
+            Ext.tree.TreePanel.Enhanced = function (el, config) {
+                Ext.tree.TreePanel.Enhanced.superclass.constructor.call(this, el, config);
             };
-            new Ajax.Request(url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ), {
-                parameters:params,
-                method:'post',
-                onComplete:function (transport) {
-                    var response = eval('(' + transport.responseText + ')');
-                    if (!response['parameters']) {
-                        return false;
+
+            Ext.extend(Ext.tree.TreePanel.Enhanced, Ext.tree.TreePanel, {
+
+                loadTree: function (config, firstLoad) {
+                    var parameters = config['parameters'];
+                    var data = config['data'];
+
+                    this.storeId = parameters['store_id'];
+
+                    if (this.storeId != 0 && $('add_root_category_button')) {
+                        $('add_root_category_button').hide();
                     }
 
-                    _renderNewTree(response, switcherParams.scopeParams);
+                    if ((typeof parameters['root_visible']) != 'undefined') {
+                        this.rootVisible = parameters['root_visible'] * 1;
+                    }
+
+                    var root = new Ext.tree.TreeNode(parameters);
+
+                    this.nodeHash = {};
+                    this.setRootNode(root);
+                    this.modal = modal;
+
+                    if (firstLoad) {
+                        this.addListener('click', this.categoryClick);
+                        this.addListener('beforenodedrop', categoryMove.bind(this));
+                    }
+
+                    this.loader.buildCategoryTree(root, data);
+                    this.el.dom.innerHTML = '';
+                    // render the tree
+                    this.render();
+                    if (parameters['expanded']) {
+                        this.expandAll();
+                    } else {
+                        root.expand();
+                    }
+
+                    var selectedNode = this.getNodeById(parameters['category_id']);
+                    if (selectedNode) {
+                        this.currentNodeId = parameters['category_id'];
+                    }
+                    this.selectCurrentNode();
+
+                    // Temporary solution will be replaced after refactoring of tree functionality
+                    jQuery('body').off('tabsactivate.tree').on('tabsactivate.tree', jQuery.proxy(function (e, ui) {
+                        this.activeTab = jQuery(ui.newTab).find('a').prop('id');
+                    }, this))
+                },
+
+                request: function (url, params) {
+                    if (!params) {
+                        if (this.activeTab) {
+                            var params = {active_tab_id: this.activeTab};
+                        }
+                        else {
+                            var params = {};
+                        }
+                    }
+                    if (!params.form_key) {
+                        params.form_key = FORM_KEY;
+                    }
+                    var result = new Ajax.Request(
+                        url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ),
+                        {
+                            parameters: params,
+                            method: 'post'
+                        }
+                    );
+
+                    return result;
+                },
+
+                selectCurrentNode: function () {
+                    if (this.currentNodeId) {
+                        var selectedNode = this.getNodeById(this.currentNodeId);
+                        if ((typeof selectedNode.attributes.path) != 'undefined') {
+                            var path = selectedNode.attributes.path;
+                            if (!this.storeId) {
+                                path = '0/' + path;
+                            }
+                            this.selectPath(path);
+                        } else {
+                            this.getSelectionModel().select(selectedNode);
+                        }
+                    }
+                },
+
+                collapseTree: function () {
+                    this.collapseAll();
+
+                    this.selectCurrentNode();
+
+                    if (!this.collapsed) {
+                        this.collapsed = true;
+                        this.loader.dataUrl = '<?php /* @escapeNotVerified */ echo $block->getLoadTreeUrl(false) ?>';
+                        this.request(this.loader.dataUrl, false);
+                    }
+                },
+
+                expandTree: function () {
+                    this.expandAll();
+                    if (this.collapsed) {
+                        this.collapsed = false;
+                        this.loader.dataUrl = '<?php /* @escapeNotVerified */ echo $block->getLoadTreeUrl(true) ?>';
+                        this.request(this.loader.dataUrl, false);
+                    }
+                },
+
+                categoryClick: function (node, e) {
+                    var url = this.buildUrl(node.id);
+
+                    this.currentNodeId = node.id;
+                    if (!this.useAjax) {
+                        setLocation(url);
+                        return;
+                    }
+                    if (this.activeTab) {
+                        var params = {active_tab_id: this.activeTab};
+                    }
+                    updateContent(url, params);
+                },
+
+                buildUrl: function (id) {
+                    var urlExt = (this.storeId ? 'store/' + this.storeId + '/' : '') + 'id/' + id + '/';
+
+                    return parseSidUrl(this.baseUrl, urlExt);
+                },
+
+                getBaseUrl: function () {
+                    return this.baseUrl;
                 }
             });
-        } else {
-            var baseUrl = '<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>';
-            var urlExt = switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/';
-            url = parseSidUrl(baseUrl, urlExt);
-            setLocation(url);
-        }
-    }
-    // render default tree
-    else {
-        _renderNewTree();
-    }
-}
-
-function _renderNewTree(config, scopeParams) {
-    if (!config) {
-        var config = defaultLoadTreeParams;
-    }
-    if (tree) {
-        tree.purgeListeners();
-        tree.el.dom.innerHTML = '';
-    }
-    tree = new Ext.tree.TreePanel.Enhanced('tree-div', newTreeParams);
-
-    tree.loadTree(config, true);
-
-    // try to select current category
-    var selectedNode = tree.getNodeById(config.parameters.category_id);
-    if (selectedNode) {
-        tree.currentNodeId = config.parameters.category_id;
-    }
-    tree.selectCurrentNode();
-
-    // update content area
-    var url = tree.editUrl;
-    if (scopeParams) {
-        url = url + scopeParams;
-    }
-    <?php if ($block->isClearEdit()): ?>
-        if (selectedNode) {
-            url = url + 'id/' + config.parameters.category_id;
-        }
-        <?php endif;?>
-    //updateContent(url); //commented since ajax requests replaced with http ones to load a category
-}
-
-jQuery(function () {
-    categoryLoader = new Ext.tree.TreeLoader({
-        dataUrl:'<?php /* @escapeNotVerified */ echo $block->getLoadTreeUrl() ?>'
-    });
-
-    categoryLoader.processResponse = function(response, parent, callback) {
-        var config = JSON.parse(response.responseText);
-
-        this.buildCategoryTree(parent, config);
-
-        if (typeof callback == "function") {
-            callback(this, parent);
-        }
-    };
-
-    categoryLoader.buildCategoryTree = function (parent, config) {
-        if (!config) return null;
-
-        if (parent && config && config.length) {
-            for (var i = 0; i < config.length; i++) {
-                var node;
-                var _node = Object.clone(config[i]);
-                if (_node.children && !_node.children.length) {
-                    delete(_node.children);
-                    node = new Ext.tree.AsyncTreeNode(_node);
-                } else {
-                    node = new Ext.tree.TreeNode(config[i]);
+
+            function reRenderTree(switcherParams) {
+                // re-render tree by store switcher
+                if (tree && switcherParams) {
+                    var url;
+                    if (switcherParams.useConfirm) {
+                        if (!confirm("<?php /* @escapeNotVerified */ echo __('Please confirm site switching. All data that hasn\'t been saved will be lost.') ?>")) {
+                            return false;
+                        }
+                    }
+
+                    if ($('add_root_category_button')) {
+                        if (!switcherParams.scopeId) {
+                            $('add_root_category_button').show();
+                        }
+                        else {
+                            $('add_root_category_button').hide();
+                        }
+                    }
+
+                    if (tree.useAjax) {
+                        // retain current selected category id
+                        url = tree.switchTreeUrl + switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/';
+                        // load from cache
+                        // load from ajax
+                        // add form key
+                        var params = {
+                            form_key: FORM_KEY
+                        };
+                        new Ajax.Request(url + (url.match(new RegExp('\\?')) ? '&isAjax=true' : '?isAjax=true' ), {
+                            parameters: params,
+                            method: 'post',
+                            onComplete: function (transport) {
+                                var response;
+
+                                try {
+                                    response = JSON.parse(transport.responseText);
+                                } catch (e) {
+                                    console.warn('An error occured while parsing response');
+                                }
+
+                                if (!response || !response['parameters']) {
+                                    return false;
+                                }
+
+                                _renderNewTree(response, switcherParams.scopeParams);
+                            }
+                        });
+                    } else {
+                        var baseUrl = '<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>';
+                        var urlExt = switcherParams.scopeParams + 'id/' + tree.currentNodeId + '/';
+                        url = parseSidUrl(baseUrl, urlExt);
+                        setLocation(url);
+                    }
                 }
-                parent.appendChild(node);
-                node.loader = node.getOwnerTree().loader;
-                if (_node.children) {
-                    this.buildCategoryTree(node, _node.children);
+                // render default tree
+                else {
+                    _renderNewTree();
                 }
             }
-        }
-    };
 
-    categoryLoader.buildHash = function (node) {
-        var hash = {};
+            function _renderNewTree(config, scopeParams) {
+                if (!config) {
+                    var config = defaultLoadTreeParams;
+                }
 
-        hash = this.toArray(node.attributes);
+                if (tree) {
+                    tree.purgeListeners();
+                    tree.el.dom.innerHTML = '';
+                }
+                tree = new Ext.tree.TreePanel.Enhanced('tree-div', newTreeParams);
 
-        if (node.childNodes.length > 0 || (node.loaded == false && node.loading == false)) {
-            hash['children'] = new Array;
+                tree.loadTree(config, true);
 
-            for (var i = 0, len = node.childNodes.length; i < len; i++) {
-                if (!hash['children']) {
-                    hash['children'] = new Array;
+                // try to select current category
+                var selectedNode = tree.getNodeById(config.parameters.category_id);
+                if (selectedNode) {
+                    tree.currentNodeId = config.parameters.category_id;
                 }
-                hash['children'].push(this.buildHash(node.childNodes[i]));
+                tree.selectCurrentNode();
+
+                // update content area
+                var url = tree.editUrl;
+                if (scopeParams) {
+                    url = url + scopeParams;
+                }
+                <?php if ($block->isClearEdit()): ?>
+                if (selectedNode) {
+                    url = url + 'id/' + config.parameters.category_id;
+                }
+                <?php endif;?>
+                //updateContent(url); //commented since ajax requests replaced with http ones to load a category
             }
-        }
-
-        return hash;
-    };
-
-    categoryLoader.toArray = function (attributes) {
-        var data = {form_key:FORM_KEY};
-        for (var key in attributes) {
-            var value = attributes[key];
-            data[key] = value;
-        }
-
-        return data;
-    };
-
-    categoryLoader.on("beforeload", function (treeLoader, node) {
-        treeLoader.baseParams.id = node.attributes.id;
-        treeLoader.baseParams.store = node.attributes.store;
-        treeLoader.baseParams.form_key = FORM_KEY;
-    });
-
-    categoryLoader.on("load", function (treeLoader, node, config) {
-        //varienWindowOnload();
-    });
-
-    scopeSwitcherHandler = reRenderTree;
-
-    newTreeParams = {
-        animate:false,
-        loader:categoryLoader,
-        enableDD:true,
-        containerScroll:true,
-        selModel:new Ext.tree.CheckNodeMultiSelectionModel(),
-        rootVisible:'<?php /* @escapeNotVerified */ echo $block->getRoot()->getIsVisible() ?>',
-        useAjax: <?php /* @escapeNotVerified */ echo $block->getUseAjax() ?>,
-        switchTreeUrl:'<?php /* @escapeNotVerified */ echo $block->getSwitchTreeUrl() ?>',
-        editUrl:'<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>',
-        currentNodeId: <?php echo (int)$block->getCategoryId() ?>,
-        baseUrl: '<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>'
-    };
-
-    defaultLoadTreeParams = {
-        parameters:{
-            text:'<?php /* @escapeNotVerified */ echo htmlentities($block->getRoot()->getName()) ?>',
-            draggable:false,
-        allowDrop   : <?php if ($block->getRoot()->getIsVisible()): ?>true<?php else : ?>false<?php endif; ?>,
-            id: <?php echo (int)$block->getRoot()->getId() ?>,
-            expanded: <?php echo (int)$block->getIsWasExpanded() ?>,
-            store_id: <?php echo (int)$block->getStore()->getId() ?>,
-            category_id: <?php echo (int)$block->getCategoryId() ?>
-        },
-        data: <?php /* @escapeNotVerified */ echo $block->getTreeJson() ?>
-    };
-
-    reRenderTree();
-});
-
-function addNew(url, isRoot) {
-    if (isRoot) {
-        tree.currentNodeId = tree.root.id;
-    }
-
-    if (/store\/\d+/.test(url)) {
-        url = url.replace(/store\/\d+/, "store/" + tree.storeId);
-    }
-    else {
-        url += "store/" + tree.storeId + "/";
-    }
-
-    url += 'parent/' + tree.currentNodeId;
-    updateContent(url);
-}
-
-var mageDialog = (function($) {
-    var self = {dialogOpened: false, callback: []};
-
-    self.callback = {ok: [], cancel: []};
-    self.createDialog = function () {
-        var onEvent = function (type, dialog) {
-            self.callback[type].forEach(function(call) {
-                call();
-            });
-            $(dialog).dialog( "close" );
-        };
-        var _resetState = function() {
-            self.dialogOpened = false;
-            self.callback = {ok: [], cancel: []};
-            delete self.dialog;
-        };
-        self.dialog = $('[data-id="information-dialog-category"]').dialog({
-            autoOpen:   false,
-            modal:      true,
-            dialogClass: 'popup-window ui-popup-message',
-            resizable: false,
-            width: '75%',
-            title: $.mage.__('Warning message'),
-            position: {
-                my: 'left top',
-                at: 'center top',
-                of: 'body'
-            },
-            buttons: [{
-                    text: $.mage.__('Ok'),
-                    'class': 'action-primary',
-                    click: function () {
-                        onEvent('ok', this);
+
+            jQuery(function () {
+                categoryLoader = new Ext.tree.TreeLoader({
+                    dataUrl: '<?php /* @escapeNotVerified */ echo $block->getLoadTreeUrl() ?>'
+                });
+
+                categoryLoader.processResponse = function (response, parent, callback) {
+                    var config = JSON.parse(response.responseText);
+
+                    this.buildCategoryTree(parent, config);
+
+                    if (typeof callback == "function") {
+                        callback(this, parent);
                     }
-                }, {
-                    text: $.mage.__('Cancel'),
-                    'class': 'action-close',
-                    click: function () {
-                        onEvent('cancel', this);
+                };
+
+                categoryLoader.buildCategoryTree = function (parent, config) {
+                    if (!config) return null;
+
+                    if (parent && config && config.length) {
+                        for (var i = 0; i < config.length; i++) {
+                            var node;
+                            var _node = Object.clone(config[i]);
+                            if (_node.children && !_node.children.length) {
+                                delete(_node.children);
+                                node = new Ext.tree.AsyncTreeNode(_node);
+                            } else {
+                                node = new Ext.tree.TreeNode(config[i]);
+                            }
+                            parent.appendChild(node);
+                            node.loader = node.getOwnerTree().loader;
+                            if (_node.children) {
+                                this.buildCategoryTree(node, _node.children);
+                            }
+                        }
+                    }
+                };
+
+                categoryLoader.buildHash = function (node) {
+                    var hash = {};
+
+                    hash = this.toArray(node.attributes);
+
+                    if (node.childNodes.length > 0 || (node.loaded == false && node.loading == false)) {
+                        hash['children'] = new Array;
+
+                        for (var i = 0, len = node.childNodes.length; i < len; i++) {
+                            if (!hash['children']) {
+                                hash['children'] = new Array;
+                            }
+                            hash['children'].push(this.buildHash(node.childNodes[i]));
+                        }
+                    }
+
+                    return hash;
+                };
+
+                categoryLoader.toArray = function (attributes) {
+                    var data = {form_key: FORM_KEY};
+                    for (var key in attributes) {
+                        var value = attributes[key];
+                        data[key] = value;
                     }
+
+                    return data;
+                };
+
+                categoryLoader.on("beforeload", function (treeLoader, node) {
+                    treeLoader.baseParams.id = node.attributes.id;
+                    treeLoader.baseParams.store = node.attributes.store;
+                    treeLoader.baseParams.form_key = FORM_KEY;
+                });
+
+                categoryLoader.on("load", function (treeLoader, node, config) {
+                    //varienWindowOnload();
+                });
+
+                scopeSwitcherHandler = reRenderTree;
+
+                newTreeParams = {
+                    animate: false,
+                    loader: categoryLoader,
+                    enableDD: true,
+                    containerScroll: true,
+                    selModel: new Ext.tree.CheckNodeMultiSelectionModel(),
+                    rootVisible: '<?php /* @escapeNotVerified */ echo $block->getRoot()->getIsVisible() ?>',
+                    useAjax: <?php /* @escapeNotVerified */ echo $block->getUseAjax() ?>,
+                    switchTreeUrl: '<?php /* @escapeNotVerified */ echo $block->getSwitchTreeUrl() ?>',
+                    editUrl: '<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>',
+                    currentNodeId: <?php /* @escapeNotVerified */ echo (int)$block->getCategoryId() ?>,
+                    baseUrl: '<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>'
+                };
+
+                defaultLoadTreeParams = {
+                    parameters: {
+                        text: '<?php /* @escapeNotVerified */ echo htmlentities($block->getRoot()->getName()) ?>',
+                        draggable: false,
+                        allowDrop: <?php if ($block->getRoot()->getIsVisible()): ?>true<?php else : ?>false<?php endif; ?>,
+                        id: <?php /* @escapeNotVerified */ echo (int)$block->getRoot()->getId() ?>,
+                        expanded: <?php /* @escapeNotVerified */ echo (int)$block->getIsWasExpanded() ?>,
+                        store_id: <?php /* @escapeNotVerified */ echo (int)$block->getStore()->getId() ?>,
+                        category_id: <?php /* @escapeNotVerified */ echo (int)$block->getCategoryId() ?>
+                    },
+                    data: <?php  /* @escapeNotVerified */ echo $block->getTreeJson() ?>
+                };
+
+                reRenderTree();
+            });
+
+            function addNew(url, isRoot) {
+                if (isRoot) {
+                    tree.currentNodeId = tree.root.id;
                 }
-            ],
-            open: function () {
-                $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-                self.dialogOpened = true;
-
-                var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30;
-                $(this).closest('.ui-dialog').css('margin-top', topMargin);
-            },
-            close: function(event, ui) {
-                $(this).dialog('destroy');
-                _resetState();
-            }
-        });
-    };
-
-    return {
-        onOk: function(call) {
-            self.callback.ok.push(call);
-            return this;
-        },
-        onCancel: function(call) {
-            self.callback.cancel.push(call);
-            return this;
-        },
-        show: function() {
-            if (self.dialog == undefined) {
-                self.createDialog();
-            }
-            if (self.dialogOpened ==  false) {
-                self.dialog.dialog('open');
-            }
-            return this;
-        }
-    };
-})(jQuery);
-
-function categoryMove(obj) {
-    var data = {id:obj.dropNode.id, form_key:FORM_KEY};
-
-    data.point = obj.point;
-    switch (obj.point) {
-        case 'above' :
-            data.pid = obj.target.parentNode.id;
-            data.paid = obj.dropNode.parentNode.id;
-            if (obj.target.previousSibling) {
-                data.aid = obj.target.previousSibling.id;
-            } else {
-                data.aid = 0;
-            }
-            break;
-        case 'below' :
-            data.pid = obj.target.parentNode.id;
-            data.aid = obj.target.id;
-            break;
-        case 'append' :
-            data.pid = obj.target.id;
-            data.paid = obj.dropNode.parentNode.id;
-            if (obj.target.lastChild) {
-                data.aid = obj.target.lastChild.id;
-            } else {
-                data.aid = 0;
-            }
-            break;
-        default :
-            obj.cancel = true;
-            return obj;
-    }
-
-    var pd = [];
-    for (var key in data) {
-        pd.push(encodeURIComponent(key), "=", encodeURIComponent(data[key]), "&");
-    }
-    pd.splice(pd.length - 1, 1);
-
-    mageDialog.onOk(function() {
-        (function($){
-            $.ajax({
-                url: '<?php /* @escapeNotVerified */ echo $block->getMoveUrl() ?>',
-                method : 'POST',
-                data: pd.join(""),
-                showLoader: true
-            }).done(function(data) {
-                if (data.messages && data.messages.length > 0) {
-                    $('[name=category-edit-form] .messages').html(data.messages);
+
+                if (/store\/\d+/.test(url)) {
+                    url = url.replace(/store\/\d+/, "store/" + tree.storeId);
                 }
-                if (data.error) {
-                    reRenderTree();
-                } else {
-                    $(obj.tree.container.dom).trigger('categoryMove.tree');
+                else {
+                    url += "store/" + tree.storeId + "/";
                 }
-            }).fail(function(jqXHR, textStatus) {
-                if (window.console) {
-                    console.log(textStatus);
+
+                url += 'parent/' + tree.currentNodeId;
+                updateContent(url);
+            }
+
+            function categoryMove(obj) {
+                var data = {id: obj.dropNode.id, form_key: FORM_KEY};
+
+                data.point = obj.point;
+                switch (obj.point) {
+                    case 'above' :
+                        data.pid = obj.target.parentNode.id;
+                        data.paid = obj.dropNode.parentNode.id;
+                        if (obj.target.previousSibling) {
+                            data.aid = obj.target.previousSibling.id;
+                        } else {
+                            data.aid = 0;
+                        }
+                        break;
+                    case 'below' :
+                        data.pid = obj.target.parentNode.id;
+                        data.aid = obj.target.id;
+                        break;
+                    case 'append' :
+                        data.pid = obj.target.id;
+                        data.paid = obj.dropNode.parentNode.id;
+                        if (obj.target.lastChild) {
+                            data.aid = obj.target.lastChild.id;
+                        } else {
+                            data.aid = 0;
+                        }
+                        break;
+                    default :
+                        obj.cancel = true;
+                        return obj;
                 }
-                location.reload();
-            });
-        })(jQuery);
-    }).onCancel(function() {
-        reRenderTree();
-    }).show();
-}
-    window.addNew = addNew;
-
-});
-</script>
+
+                var pd = [];
+                for (var key in data) {
+                    pd.push(encodeURIComponent(key), "=", encodeURIComponent(data[key]), "&");
+                }
+                pd.splice(pd.length - 1, 1);
+
+                jQuery('[data-id="information-dialog-category"]').modal({
+                    modalClass: 'confirm',
+                    title:  jQuery.mage.__('Warning message'),
+                    buttons: [{
+                        text: 'Cancel',
+                        class: 'action-secondary',
+                        click: function () {
+                            reRenderTree();
+                            this.closeModal();
+                        }
+                    }, {
+                        text: 'Ok',
+                        class: 'action-primary',
+                        click: function () {
+                            (function ($) {
+                                $.ajax({
+                                    url: '<?php /* @escapeNotVerified */ echo $block->getMoveUrl() ?>//',
+                                    method: 'POST',
+                                    data: pd.join(""),
+                                    showLoader: true
+                                }).done(function (data) {
+                                    if (data.messages && data.messages.length > 0) {
+                                        $('[name=category-edit-form] .messages').html(data.messages);
+                                    }
+                                    if (data.error) {
+                                        reRenderTree();
+                                    } else {
+                                        $(obj.tree.container.dom).trigger('categoryMove.tree');
+                                    }
+                                }).fail(function (jqXHR, textStatus) {
+                                    if (window.console) {
+                                        console.log(textStatus);
+                                    }
+                                    location.reload();
+                                });
+                            })(jQuery);
+                            this.closeModal();
+                        }
+                    }]
+
+                }).trigger('openModal');
+
+            }
+
+            window.addNew = addNew;
+
+        });
+    </script>
 <?php endif; ?>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml
index 98f5a0a65052f5e7cea257320245e1d4d21ecdff..8bc0b649753997c6813ce5d6ccf4a167273c5f3e 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/form.phtml
@@ -13,14 +13,15 @@
  */
 ?>
 <?php /* @escapeNotVerified */ echo $block->getFormInitScripts() ?>
+<div data-mage-init='{"floatingHeader": {}}' class="page-actions attribute-popup-actions" <?php /* @escapeNotVerified */ echo $block->getUiId('content-header') ?>>
+    <?php echo $block->getButtonsHtml('header') ?>
+</div>
+
 <form id="edit_form" class="admin__scope-old" action="<?php echo $block->escapeHtml($block->getSaveUrl()) ?>" method="post">
     <input name="form_key" type="hidden" value="<?php echo $block->escapeHtml($block->getFormKey()) ?>" />
     <?php echo $block->getChildHtml('form') ?>
 </form>
 
-<div data-mage-init='{"floatingHeader": {}}' class="page-actions attribute-popup-actions" <?php /* @escapeNotVerified */ echo $block->getUiId('content-header') ?>>
-    <?php echo $block->getButtonsHtml('header') ?>
-</div>
 
 <script>
 require(['jquery', "mage/mage"], function(jQuery){
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml
index 1881699475464a9085b95334f9abe567467d75e5..dfc022ec9b6500efd6dde7e59efd84ffd0fe2411 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/js.phtml
@@ -8,7 +8,13 @@
 
 ?>
 <script>
-require(["jquery", "collapsable", "prototype"], function(jQuery){
+require([
+    "jquery",
+    'Magento_Ui/js/modal/alert',
+    'Magento_Ui/js/modal/prompt',
+    "collapsable",
+    "prototype"
+], function(jQuery, alert, prompt){
 
 function toggleApplyVisibility(select) {
     if ($(select).value == 1) {
@@ -260,36 +266,48 @@ function updateRequriedOptions()
 
 function saveAttributeInNewSet(promptMessage)
 {
-    var newAttributeSetName = prompt(promptMessage, '');
-
-    if (newAttributeSetName == null) {
-        return;
-    }
-
-    var rules = ['required-entry', 'validate-no-html-tags'];
-    for (var i = 0; i < rules.length; i++) {
-        if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) {
-            alert(jQuery.validator.messages[rules[i]]);
-            return;
+    var newAttributeSetName;
+
+    prompt({
+        content: promptMessage,
+        actions: {
+            confirm: function(val) {
+                newAttributeSetName = val;
+
+                if (!newAttributeSetName) {
+                    return;
+                }
+
+                var rules = ['required-entry', 'validate-no-html-tags'];
+                for (var i = 0; i < rules.length; i++) {
+                    if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) {
+                        alert({
+                            content: jQuery.validator.messages[rules[i]]
+                        });
+
+                        return;
+                    }
+                }
+
+                var newAttributeSetNameInputId = 'new_attribute_set_name';
+
+                if ($(newAttributeSetNameInputId)) {
+                    $(newAttributeSetNameInputId).value = newAttributeSetName;
+                } else {
+                    $('edit_form').insert({
+                        top: new Element('input', {
+                            type: 'hidden',
+                            id: newAttributeSetNameInputId,
+                            name: 'new_attribute_set_name',
+                            value: newAttributeSetName
+                        })
+                    });
+                }
+                // Temporary solution will replaced after refactoring of attributes functionality
+                jQuery('#edit_form').triggerHandler('save');
+            }
         }
-    }
-
-    var newAttributeSetNameInputId = 'new_attribute_set_name';
-
-    if ($(newAttributeSetNameInputId)) {
-        $(newAttributeSetNameInputId).value = newAttributeSetName;
-    } else {
-        $('edit_form').insert({
-            top: new Element('input', {
-                type: 'hidden',
-                id: newAttributeSetNameInputId,
-                name: 'new_attribute_set_name',
-                value: newAttributeSetName
-            })
-        });
-    }
-    // Temporary solution will replaced after refactoring of attributes functionality
-    jQuery('#edit_form').triggerHandler('save');
+    });
 }
 
 if($('frontend_input')){
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
index 4ccbec13fdbfe645adb9efea563360fe78d0a10d..06edcfbaa2588ae285fac4a456ec0ae5c05b8846 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/product/attribute/set/main.phtml
@@ -11,23 +11,23 @@
     <div class="edit-attribute-set attribute-set-col">
         <?php echo $block->getSetFormHtml() ?>
         <script>
-require([
-    "jquery",
-    "mage/mage"
-], function(jQuery){
+            require([
+                "jquery",
+                "mage/mage"
+            ], function(jQuery){
 
-    jQuery('#set-prop-form').mage('validation', {errorClass: 'mage-error'});
+                jQuery('#set-prop-form').mage('validation', {errorClass: 'mage-error'});
 
-});
-</script>
+            });
+        </script>
     </div>
     <div class="attribute-set-col fieldset-wrapper">
         <div class="fieldset-wrapper-title">
             <span class="title"><?php /* @escapeNotVerified */ echo __('Groups') ?></span>
         </div>
         <?php if (!$block->getIsReadOnly()): ?>
-        <?php /* @escapeNotVerified */ echo $block->getAddGroupButton() ?>&nbsp;<?php /* @escapeNotVerified */ echo $block->getDeleteGroupButton() ?>
-        <p class="note-block"><?php /* @escapeNotVerified */ echo __('Double click on a group to rename it.') ?></p>
+            <?php /* @escapeNotVerified */ echo $block->getAddGroupButton() ?>&nbsp;<?php /* @escapeNotVerified */ echo $block->getDeleteGroupButton() ?>
+            <p class="note-block"><?php /* @escapeNotVerified */ echo __('Double click on a group to rename it.') ?></p>
         <?php endif; ?>
 
         <?php echo $block->getSetsFilterHtml() ?>
@@ -41,339 +41,359 @@ require([
         <!--[if IE]>
         <script id="ie-deferred-loader" defer="defer" src=""></script>
         <![endif]-->
-            <script>
-define("tree-panel", ["jquery", "extjs/ext-tree-checkbox", "prototype"], function(jQuery){
-
-            //<![CDATA[
-            var allowDragAndDrop = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>;
-            var canEditGroups = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>;
-
-            var TreePanels = function() {
-                // shorthand
-                var Tree = Ext.tree;
-
-                return {
-                    init : function(){
-                        // yui-ext tree
-
-                        var tree = new Ext.tree.TreePanel('tree-div1', {
-                            animate:false,
-                            loader: false,
-                            enableDD:allowDragAndDrop,
-                            containerScroll: true,
-                            rootVisible: false
-                        });
-
-                        // set the root node
-                        this.root = new Ext.tree.TreeNode({
-                            text: 'ROOT',
-                            allowDrug:false,
-                            allowDrop:true,
-                            id:'1'
-                        });
-
-                        tree.setRootNode(this.root);
-                        buildCategoryTree(this.root, <?php /* @escapeNotVerified */ echo $block->getGroupTreeJson() ?>);
-                        // render the tree
-                        tree.render();
-                        this.root.expand(false, false);
-                        tree.expandAll();
-
-                        this.ge = new Ext.tree.TreeEditor(tree, {
-                            allowBlank:false,
-                            blankText:'<?php /* @escapeNotVerified */ echo __('A name is required.') ?>',
-                            selectOnFocus:true,
-                            cls:'folder'
-                        });
-
-                        this.root.addListener('beforeinsert', editSet.leftBeforeInsert);
-                        this.root.addListener('beforeappend', editSet.leftBeforeInsert);
-
-                        //this.ge.addListener('beforerender', editSet.editGroup);
-                        this.ge.addListener('beforeshow', editSet.editGroup);
-                        this.ge.addListener('beforecomplete', editSet.beforeRenameGroup);
-                        //this.ge.addListener('startedit', editSet.editGroup);
-
-                        //-------------------------------------------------------------
-
-                        var tree2 = new Ext.tree.TreePanel('tree-div2', {
-                            animate:false,
-                            loader: false,
-                            enableDD:allowDragAndDrop,
-                            containerScroll: true,
-                            rootVisible: false,
-                            lines:false
-                        });
-
-                        // set the root node
-                        this.root2 = new Ext.tree.TreeNode({
-                            text: 'ROOT',
-                            draggable:false,
-                            id:'free'
-                        });
-                        tree2.setRootNode(this.root2);
-                        buildCategoryTree(this.root2, <?php /* @escapeNotVerified */ echo $block->getAttributeTreeJson() ?>);
-
-                        this.root2.addListener('beforeinsert', editSet.rightBeforeInsert);
-                        this.root2.addListener('beforeappend', editSet.rightBeforeAppend);
-
-                        this.root2.addListener('append', editSet.rightAppend);
-                        this.root2.addListener('remove', editSet.rightRemove);
-                        // render the tree
-                        tree2.render();
-                        this.root2.expand(false, false);
-                        tree2.expandAll();
-                    },
-
-                    rebuildTrees : function(){
-                        editSet.req.attributes = new Array();
-                        rootNode = TreePanels.root;
-                        var gIterator = 0;
-                        for( i in rootNode.childNodes ) {
-                            if(rootNode.childNodes[i].id) {
-                                var group = rootNode.childNodes[i];
-                                editSet.req.groups[gIterator] = new Array(group.id, group.attributes.text.strip(), (gIterator+1));
-                                var iterator = 0
-                                for( j in group.childNodes ) {
-                                    iterator ++;
-                                    if( group.childNodes[j].id > 0 ) {
-                                        editSet.req.attributes[group.childNodes[j].id] = new Array(group.childNodes[j].id, group.id, iterator, group.childNodes[j].attributes.entity_id);
+        <script>
+            define("tree-panel",
+                [
+                    "jquery",
+                    "Magento_Ui/js/modal/prompt",
+                    "Magento_Ui/js/modal/alert",
+                    "extjs/ext-tree-checkbox",
+                    "prototype"
+                ], function(jQuery, prompt, alert){
+
+                //<![CDATA[
+                var allowDragAndDrop = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>;
+                var canEditGroups = <?php /* @escapeNotVerified */ echo($block->getIsReadOnly() ? 'false' : 'true'); ?>;
+
+                var TreePanels = function() {
+                    // shorthand
+                    var Tree = Ext.tree;
+
+                    return {
+                        init : function(){
+                            // yui-ext tree
+
+                            var tree = new Ext.tree.TreePanel('tree-div1', {
+                                animate:false,
+                                loader: false,
+                                enableDD:allowDragAndDrop,
+                                containerScroll: true,
+                                rootVisible: false
+                            });
+
+                            // set the root node
+                            this.root = new Ext.tree.TreeNode({
+                                text: 'ROOT',
+                                allowDrug:false,
+                                allowDrop:true,
+                                id:'1'
+                            });
+
+                            tree.setRootNode(this.root);
+                            buildCategoryTree(this.root, <?php /* @escapeNotVerified */ echo $block->getGroupTreeJson() ?>);
+                            // render the tree
+                            tree.render();
+                            this.root.expand(false, false);
+                            tree.expandAll();
+
+                            this.ge = new Ext.tree.TreeEditor(tree, {
+                                allowBlank:false,
+                                blankText:'<?php /* @escapeNotVerified */ echo __('A name is required.') ?>',
+                                selectOnFocus:true,
+                                cls:'folder'
+                            });
+
+                            this.root.addListener('beforeinsert', editSet.leftBeforeInsert);
+                            this.root.addListener('beforeappend', editSet.leftBeforeInsert);
+
+                            //this.ge.addListener('beforerender', editSet.editGroup);
+                            this.ge.addListener('beforeshow', editSet.editGroup);
+                            this.ge.addListener('beforecomplete', editSet.beforeRenameGroup);
+                            //this.ge.addListener('startedit', editSet.editGroup);
+
+                            //-------------------------------------------------------------
+
+                            var tree2 = new Ext.tree.TreePanel('tree-div2', {
+                                animate:false,
+                                loader: false,
+                                enableDD:allowDragAndDrop,
+                                containerScroll: true,
+                                rootVisible: false,
+                                lines:false
+                            });
+
+                            // set the root node
+                            this.root2 = new Ext.tree.TreeNode({
+                                text: 'ROOT',
+                                draggable:false,
+                                id:'free'
+                            });
+                            tree2.setRootNode(this.root2);
+                            buildCategoryTree(this.root2, <?php /* @escapeNotVerified */ echo $block->getAttributeTreeJson() ?>);
+
+                            this.root2.addListener('beforeinsert', editSet.rightBeforeInsert);
+                            this.root2.addListener('beforeappend', editSet.rightBeforeAppend);
+
+                            this.root2.addListener('append', editSet.rightAppend);
+                            this.root2.addListener('remove', editSet.rightRemove);
+                            // render the tree
+                            tree2.render();
+                            this.root2.expand(false, false);
+                            tree2.expandAll();
+                        },
+
+                        rebuildTrees : function(){
+                            editSet.req.attributes = new Array();
+                            rootNode = TreePanels.root;
+                            var gIterator = 0;
+                            for( i in rootNode.childNodes ) {
+                                if(rootNode.childNodes[i].id) {
+                                    var group = rootNode.childNodes[i];
+                                    editSet.req.groups[gIterator] = new Array(group.id, group.attributes.text.strip(), (gIterator+1));
+                                    var iterator = 0
+                                    for( j in group.childNodes ) {
+                                        iterator ++;
+                                        if( group.childNodes[j].id > 0 ) {
+                                            editSet.req.attributes[group.childNodes[j].id] = new Array(group.childNodes[j].id, group.id, iterator, group.childNodes[j].attributes.entity_id);
+                                        }
                                     }
+                                    iterator = 0;
                                 }
-                                iterator = 0;
+                                gIterator ++;
                             }
-                            gIterator ++;
-                        }
 
-                        editSet.req.not_attributes = new Array();
-                        rootNode = TreePanels.root2;
+                            editSet.req.not_attributes = new Array();
+                            rootNode = TreePanels.root2;
 
-                        var iterator = 0;
-                        for( i in rootNode.childNodes ) {
-                            if(rootNode.childNodes[i].id) {
-                                if( rootNode.childNodes[i].id > 0 ) {
-                                    editSet.req.not_attributes[iterator] = rootNode.childNodes[i].attributes.entity_id;
+                            var iterator = 0;
+                            for( i in rootNode.childNodes ) {
+                                if(rootNode.childNodes[i].id) {
+                                    if( rootNode.childNodes[i].id > 0 ) {
+                                        editSet.req.not_attributes[iterator] = rootNode.childNodes[i].attributes.entity_id;
+                                    }
+                                    iterator ++;
                                 }
-                                iterator ++;
                             }
                         }
-                    }
-                };
-            }();
-
-            function buildCategoryTree(parent, config){
-                if (!config) return null;
-                if (parent && config && config.length){
-                    for (var i = 0; i < config.length; i++) {
-                        var node = new Ext.tree.TreeNode(config[i]);
-                        parent.appendChild(node);
-                        node.addListener('click', editSet.register);
-                        node.addListener('beforemove', editSet.groupBeforeMove);
-                        node.addListener('beforeinsert', editSet.groupBeforeInsert);
-                        node.addListener('beforeappend', editSet.groupBeforeInsert);
-                        if( config[i].children ) {
-                            for( j in config[i].children ) {
-                                if(config[i].children[j].id) {
-                                    newNode = new Ext.tree.TreeNode(config[i].children[j]);
-                                    node.appendChild(newNode);
-                                    newNode.addListener('click', editSet.unregister);
+                    };
+                }();
+
+                function buildCategoryTree(parent, config){
+                    if (!config) return null;
+                    if (parent && config && config.length){
+                        for (var i = 0; i < config.length; i++) {
+                            var node = new Ext.tree.TreeNode(config[i]);
+                            parent.appendChild(node);
+                            node.addListener('click', editSet.register);
+                            node.addListener('beforemove', editSet.groupBeforeMove);
+                            node.addListener('beforeinsert', editSet.groupBeforeInsert);
+                            node.addListener('beforeappend', editSet.groupBeforeInsert);
+                            if( config[i].children ) {
+                                for( j in config[i].children ) {
+                                    if(config[i].children[j].id) {
+                                        newNode = new Ext.tree.TreeNode(config[i].children[j]);
+                                        node.appendChild(newNode);
+                                        newNode.addListener('click', editSet.unregister);
+                                    }
                                 }
                             }
                         }
                     }
                 }
-            }
-
-            editSet = function() {
-                return {
-                    register : function(node) {
-                        editSet.currentNode = node;
-                    },
 
-                    unregister : function() {
-                        editSet.currentNode = false;
-                    },
+                editSet = function() {
+                    return {
+                        register : function(node) {
+                            editSet.currentNode = node;
+                        },
 
-                    submit : function() {
-                        if( TreePanels.root.firstChild == TreePanels.root.lastChild ) {
-                            return;
-                        }
+                        unregister : function() {
+                            editSet.currentNode = false;
+                        },
 
-                        if( editSet.SystemNodesExists(editSet.currentNode) ) {
-                            alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This group contains system attributes. Please move system attributes to another group and try again.')) ?>');
-                            return;
-                        }
+                        submit : function() {
+                            if( TreePanels.root.firstChild == TreePanels.root.lastChild ) {
+                                return;
+                            }
 
+                            if( editSet.SystemNodesExists(editSet.currentNode) ) {
+                                alert({
+                                    content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This group contains system attributes. Please move system attributes to another group and try again.')) ?>'
+                                });
+                                return;
+                            }
 
-                        if( editSet.currentNode && editSet.currentNode.attributes.cls == 'folder' ) {
-                            TreePanels.root.removeChild(editSet.currentNode);
-                            for( i in editSet.currentNode.childNodes ) {
-                                if( editSet.currentNode.childNodes[i].id ) {
-                                    child = editSet.currentNode.childNodes[i];
-                                    newNode = new Ext.tree.TreeNode(child.attributes);
+                            if( editSet.currentNode && editSet.currentNode.attributes.cls == 'folder' ) {
+                                TreePanels.root.removeChild(editSet.currentNode);
+                                for( i in editSet.currentNode.childNodes ) {
+                                    if( editSet.currentNode.childNodes[i].id ) {
+                                        child = editSet.currentNode.childNodes[i];
+                                        newNode = new Ext.tree.TreeNode(child.attributes);
 
-                                    if( child.attributes.is_user_defined == 1 ) {
-                                        TreePanels.root2.appendChild(newNode);
+                                        if( child.attributes.is_user_defined == 1 ) {
+                                            TreePanels.root2.appendChild(newNode);
+                                        }
                                     }
                                 }
+                                editSet.req.removeGroups[editSet.currentNode.id] = editSet.currentNode.id;
+                                editSet.currentNode = false;
                             }
-                            editSet.req.removeGroups[editSet.currentNode.id] = editSet.currentNode.id;
-                            editSet.currentNode = false;
-                        }
-                    },
-
-                    SystemNodesExists : function(currentNode) {
-                        for (i in currentNode.childNodes) {
-                            if (currentNode.childNodes[i].id) {
-                                child = editSet.currentNode.childNodes[i];
-                                if (child.attributes.is_unassignable != 1) {
-                                    return true;
+                        },
+
+                        SystemNodesExists : function(currentNode) {
+                            for (i in currentNode.childNodes) {
+                                if (currentNode.childNodes[i].id) {
+                                    child = editSet.currentNode.childNodes[i];
+                                    if (child.attributes.is_unassignable != 1) {
+                                        return true;
+                                    }
                                 }
                             }
-                        }
-                    },
-
-                    rightAppend : function(node) {
-                        return;
-                    },
+                        },
 
-                    addGroup : function() {
-                        var group_name = prompt("<?php /* @escapeNotVerified */ echo __('Please enter a new group name.') ?>","");
-                        if (!group_name) {
+                        rightAppend : function(node) {
                             return;
-                        }
-                        group_name = group_name.strip();
-                        if( group_name == '' ) {
-                            this.addGroup();
-                        } else if( group_name != false && group_name != null && group_name != '' ) {
+                        },
+
+                        addGroup : function() {
+                            prompt({
+                                content: "<?php /* @escapeNotVerified */ echo __('Please enter a new group name.') ?>",
+                                value: "",
+                                actions: {
+                                    confirm: function (group_name) {
+                                        group_name = group_name.strip();
+                                        if( group_name == '' ) {
+                                            self.addGroup();
+                                        } else if( group_name != false && group_name != null && group_name != '' ) {
+
+                                            if (!editSet.validateGroupName(group_name, 0)) {
+                                                return;
+                                            }
+
+                                            var newNode = new Ext.tree.TreeNode({
+                                                text : group_name.escapeHTML(),
+                                                cls : 'folder',
+                                                allowDrop : true,
+                                                allowDrag : true
+                                            });
+                                            TreePanels.root.appendChild(newNode);
+                                            newNode.addListener('beforemove', editSet.groupBeforeMove);
+                                            newNode.addListener('beforeinsert', editSet.groupBeforeInsert);
+                                            newNode.addListener('beforeappend', editSet.groupBeforeInsert);
+                                            newNode.addListener('click', editSet.register);
+                                        }
+                                    }
+                                }
+                            });
+                        },
 
-                            if (!editSet.validateGroupName(group_name, 0)) {
-                                return;
+                        editGroup : function(obj) {
+                            if( obj.editNode.attributes.cls != 'folder' || !canEditGroups) {
+                                TreePanels.ge.cancelEdit();
+                                return false;
                             }
+                        },
 
-                            var newNode = new Ext.tree.TreeNode({
-                                    text : group_name.escapeHTML(),
-                                    cls : 'folder',
-                                    allowDrop : true,
-                                    allowDrag : true
-                                });
-                            TreePanels.root.appendChild(newNode);
-                            newNode.addListener('beforemove', editSet.groupBeforeMove);
-                            newNode.addListener('beforeinsert', editSet.groupBeforeInsert);
-                            newNode.addListener('beforeappend', editSet.groupBeforeInsert);
-                            newNode.addListener('click', editSet.register);
-                        }
-                    },
-
-                    editGroup : function(obj) {
-                        if( obj.editNode.attributes.cls != 'folder' || !canEditGroups) {
-                             TreePanels.ge.cancelEdit();
-                             return false;
-                        }
-                    },
+                        beforeRenameGroup : function(obj, after, before) {
+                            return editSet.validateGroupName(after, obj.editNode.id);
+                        },
 
-                    beforeRenameGroup : function(obj, after, before) {
-                        return editSet.validateGroupName(after, obj.editNode.id);
-                    },
+                        validateGroupName : function(name, exceptNodeId) {
+                            name = name.strip();
+                            var result = true;
+                            if (name === '') {
+                                result = false;
+                            }
+                            for (var i=0; i < TreePanels.root.childNodes.length; i++) {
+                                if (TreePanels.root.childNodes[i].text.toLowerCase() == name.toLowerCase() && TreePanels.root.childNodes[i].id != exceptNodeId) {
+                                    errorText = '<?php /* @escapeNotVerified */ echo __('An attribute group named "/name/" already exists".') ?>';
+                                    alert({
+                                        content: errorText.replace("/name/",name)
+                                    });
+                                    result =  false;
+                                }
+                            }
+                            return result;
+                        },
 
-                    validateGroupName : function(name, exceptNodeId) {
-                        name = name.strip();
-                        var result = true;
-                        if (name === '') {
-                            result = false;
-                        }
-                        for (var i=0; i < TreePanels.root.childNodes.length; i++) {
-                            if (TreePanels.root.childNodes[i].text.toLowerCase() == name.toLowerCase() && TreePanels.root.childNodes[i].id != exceptNodeId) {
-                                errorText = '<?php /* @escapeNotVerified */ echo __('An attribute group named "/name/" already exists".') ?>';
-                                alert(errorText.replace("/name/",name));
-                                result =  false;
+                        save : function() {
+                            if ($('messages')) {
+                                $('messages').update();
                             }
-                        }
-                        return result;
-                    },
+                            TreePanels.rebuildTrees();
+                            if(!jQuery('#set-prop-form').valid()) {
+                                return;
+                            }
+                            editSet.req.attribute_set_name = $('attribute_set_name').value;
+                            if (!editSet.req.form_key) {
+                                editSet.req.form_key = FORM_KEY;
+                            }
+                            var req = {data : Ext.util.JSON.encode(editSet.req)};
+                            var con = new Ext.lib.Ajax.request('POST', '<?php /* @escapeNotVerified */ echo $block->getMoveUrl() ?>', {success:editSet.success,failure:editSet.failure}, req);
+                        },
+
+                        success : function(o) {
+                            var response = Ext.util.JSON.decode(o.responseText);
+                            if( response.error ) {
+                                $('messages').update(response.message);
+                            } else if( response.ajaxExpired && response.ajaxRedirect ){
+                                setLocation(response.ajaxRedirect);
+                            } else if( response.url ){
+                                setLocation(response.url);
+                            } else if( response.message ) {
+                                $('messages').update(response.message);
+                            }
+                        },
 
-                    save : function() {
-                        if ($('messages')) {
-                            $('messages').update();
-                        }
-                        TreePanels.rebuildTrees();
-                        if(!jQuery('#set-prop-form').valid()) {
-                            return;
-                        }
-                        editSet.req.attribute_set_name = $('attribute_set_name').value;
-                        if (!editSet.req.form_key) {
-                            editSet.req.form_key = FORM_KEY;
-                        }
-                        var req = {data : Ext.util.JSON.encode(editSet.req)};
-                        var con = new Ext.lib.Ajax.request('POST', '<?php /* @escapeNotVerified */ echo $block->getMoveUrl() ?>', {success:editSet.success,failure:editSet.failure}, req);
-                    },
-
-                    success : function(o) {
-                        var response = Ext.util.JSON.decode(o.responseText);
-                        if( response.error ) {
-                            $('messages').update(response.message);
-                        } else if( response.ajaxExpired && response.ajaxRedirect ){
-                            setLocation(response.ajaxRedirect);
-                        } else if( response.url ){
-                            setLocation(response.url);
-                        } else if( response.message ) {
-                            $('messages').update(response.message);
-                        }
-                    },
+                        failure : function(o) {
+                            alert({
+                                content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('Sorry, we\'re unable to complete this request.')) ?>'
+                            });
+                        },
 
-                    failure : function(o) {
-                        alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('Sorry, we\'re unable to complete this request.')) ?>');
-                    },
+                        groupBeforeMove : function(tree, nodeThis, oldParent, newParent) {
+                            if( newParent.attributes.cls == 'folder' && nodeThis.attributes.cls == 'folder' ) {
+                                return false;
+                            }
 
-                    groupBeforeMove : function(tree, nodeThis, oldParent, newParent) {
-                        if( newParent.attributes.cls == 'folder' && nodeThis.attributes.cls == 'folder' ) {
-                            return false;
-                        }
+                            if( newParent == TreePanels.root && nodeThis.attributes.cls != 'folder' ) {
+                                return false;
+                            }
+                        },
 
-                        if( newParent == TreePanels.root && nodeThis.attributes.cls != 'folder' ) {
-                            return false;
-                        }
-                    },
-
-                    rightBeforeAppend : function(tree, nodeThis, node, newParent) {
-                        if (node.attributes.is_user_defined == 0) {
-                            alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>');
-                            return false;
-                        } else {
-                            return true;
-                        }
-                    },
+                        rightBeforeAppend : function(tree, nodeThis, node, newParent) {
+                            if (node.attributes.is_user_defined == 0) {
+                                alert({
+                                    content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>'
+                                });
+                                return false;
+                            } else {
+                                return true;
+                            }
+                        },
 
-                    rightBeforeInsert : function(tree, nodeThis, node, newParent) {
-                        var empty = TreePanels.root2.findChild('id', 'empty');
-                        if (empty) {
-                            return false;
-                        }
+                        rightBeforeInsert : function(tree, nodeThis, node, newParent) {
+                            var empty = TreePanels.root2.findChild('id', 'empty');
+                            if (empty) {
+                                return false;
+                            }
 
-                        if (node.attributes.is_unassignable == 0) {
-                            alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>');
-                            return false;
-                        } else {
-                            return true;
-                        }
-                    },
+                            if (node.attributes.is_unassignable == 0) {
+                                alert({
+                                    content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('You can\'t remove attributes from this product template.')) ?>'
+                                });
+                                return false;
+                            } else {
+                                return true;
+                            }
+                        },
 
-                    groupBeforeInsert : function(tree, nodeThis, node, newParent) {
-                        if( node.allowChildren ) {
-                            return false;
-                        }
-                    },
+                        groupBeforeInsert : function(tree, nodeThis, node, newParent) {
+                            if( node.allowChildren ) {
+                                return false;
+                            }
+                        },
 
-                    rightAppend : function(tree, nodeThis, node) {
-                        var empty = TreePanels.root2.findChild('id', 'empty');
-                        if( empty && node.id != 'empty' ) {
-                            TreePanels.root2.removeChild(empty);
-                        }
-                    },
+                        rightAppend : function(tree, nodeThis, node) {
+                            var empty = TreePanels.root2.findChild('id', 'empty');
+                            if( empty && node.id != 'empty' ) {
+                                TreePanels.root2.removeChild(empty);
+                            }
+                        },
 
-                    rightRemove : function(tree, nodeThis, node) {
-                        if( nodeThis.firstChild == null && node.id != 'empty' ) {
-                            var newNode = new Ext.tree.TreeNode({
+                        rightRemove : function(tree, nodeThis, node) {
+                            if( nodeThis.firstChild == null && node.id != 'empty' ) {
+                                var newNode = new Ext.tree.TreeNode({
                                     text : '<?php /* @escapeNotVerified */ echo __('Empty') ?>',
                                     id : 'empty',
                                     cls : 'folder',
@@ -381,35 +401,35 @@ define("tree-panel", ["jquery", "extjs/ext-tree-checkbox", "prototype"], functio
                                     allowDrop : false,
                                     allowDrag : false
                                 });
-                            TreePanels.root2.appendChild(newNode);
-                        }
-                    },
+                                TreePanels.root2.appendChild(newNode);
+                            }
+                        },
 
-                    leftBeforeInsert : function(tree, nodeThis, node, newParent) {
-                        if( node.allowChildren == false ) {
-                            return false;
+                        leftBeforeInsert : function(tree, nodeThis, node, newParent) {
+                            if( node.allowChildren == false ) {
+                                return false;
+                            }
                         }
                     }
+                }();
+
+                function initVars() {
+                    editSet.req = {};
+                    editSet.req.attributes = false;
+                    editSet.req.groups = new Array();
+                    editSet.req.not_attributes = false;
+                    editSet.req.attribute_set_name = false;
+                    editSet.req.removeGroups = new Array();
                 }
-            }();
-
-            function initVars() {
-                editSet.req = {};
-                editSet.req.attributes = false;
-                editSet.req.groups = new Array();
-                editSet.req.not_attributes = false;
-                editSet.req.attribute_set_name = false;
-                editSet.req.removeGroups = new Array();
-            }
-
-            jQuery(function() {
-                initVars();
-                TreePanels.init();
-            });
-            //]]>
 
-});
-require(["tree-panel"]);
-</script>
+                jQuery(function() {
+                    initVars();
+                    TreePanels.init();
+                });
+                //]]>
+
+            });
+            require(["tree-panel"]);
+        </script>
     </div>
 </div>
diff --git a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml
index c7223ed509f4d6439fa3b9b1299c9ef3de99d91e..d6db808caccad1390c65cc00264cd80a2f6c3bb2 100644
--- a/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml
+++ b/app/code/Magento/Catalog/view/adminhtml/templates/catalog/wysiwyg/js.phtml
@@ -5,15 +5,15 @@
  */
 
 // @codingStandardsIgnoreFile
-
 ?>
 <script>
 require([
     "jquery",
     "tinymce",
+    "Magento_Ui/js/modal/modal",
     "prototype",
     "mage/adminhtml/events"
-], function(jQuery, tinyMCE){
+], function(jQuery, tinyMCE, modal){
 
 //<![CDATA[
 
@@ -21,6 +21,7 @@ Window.keepMultiModalWindow = true;
 var catalogWysiwygEditor = {
     overlayShowEffectOptions : null,
     overlayHideEffectOptions : null,
+    modal: null,
     open : function(editorUrl, elementId) {
         if (editorUrl && elementId) {
            jQuery.ajax({
@@ -32,43 +33,40 @@ var catalogWysiwygEditor = {
                 showLoader: true,
                 dataType: 'html',
                 success: function(data, textStatus, transport) {
-                    try {
-                        this.openDialogWindow(data, elementId);
-                    } catch(e) {
-                        alert(e.message);
-                    }
+                    this.openDialogWindow(data, elementId);
                 }.bind(this)
             });
         }
     },
-    openDialogWindow : function(content, elementId) {
-        this.overlayShowEffectOptions = Windows.overlayShowEffectOptions;
-        this.overlayHideEffectOptions = Windows.overlayHideEffectOptions;
-        Windows.overlayShowEffectOptions = {duration:0};
-        Windows.overlayHideEffectOptions = {duration:0};
-        tinyMCE.editors[elementId].save();
-        Dialog.confirm(content, {
-            draggable:true,
-            resizable:true,
-            closable:true,
-            className:"magento",
-            windowClassName:"popup-window",
-            title:'WYSIWYG Editor',
-            width:950,
-            height:555,
-            recenterAuto:false,
-            hideEffect:Element.hide,
-            showEffect:Element.show,
-            id:"catalog-wysiwyg-editor",
-            buttonClass:"form-button",
-            okLabel:"Submit",
-            ok: this.okDialogWindow.bind(this),
-            cancel: this.closeDialogWindow.bind(this),
-            onClose: this.closeDialogWindow.bind(this),
-            firedElementId: elementId
-        });
+    openDialogWindow : function(data, elementId) {
+        var self = this;
+
+        if (this.modal) {
+            this.modal.html(jQuery(data).html());
+        } else {
+            this.modal = jQuery(data).modal({
+                title: 'WYSIWYG Editor',
+                modalClass: 'magento',
+                type: 'slide',
+                firedElementId: elementId,
+                buttons: [{
+                    text: 'Cancel',
+                    click: function () {
+                        self.closeDialogWindow(this);
+                    }
+                },{
+                    text: 'Submit',
+                    click: function () {
+                        self.okDialogWindow(this);
+                    }
+                }],
+                close: function () {
+                    self.closeDialogWindow(this);
+                }
+            });
+        }
+        this.modal.modal('openModal');
         $(elementId + '_editor').value = $(elementId).value;
-        content.evalScripts.bind(content).defer();
     },
     okDialogWindow : function(dialogWindow) {
         if (dialogWindow.options.firedElementId) {
@@ -104,7 +102,7 @@ var catalogWysiwygEditor = {
            tinyMCE.execCommand('mceRemoveControl', true, wysiwygObj.id);
         }
 
-        dialogWindow.close();
+        dialogWindow.closeModal();
         Windows.overlayShowEffectOptions = this.overlayShowEffectOptions;
         Windows.overlayHideEffectOptions = this.overlayHideEffectOptions;
     }
diff --git a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
index b000975b7343ec939dfd9ae02f75ae1196d212b2..e1bdb4dbcb9be3a0a27e23813425161228673143 100644
--- a/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
+++ b/app/code/Magento/Catalog/view/adminhtml/ui_component/product_listing.xml
@@ -40,17 +40,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">product_listing</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/columns</item>
@@ -60,129 +56,27 @@
                     </item>
                 </item>
             </argument>
-        </container>
-        <filters name="listing_filters" class="Magento\Catalog\Ui\Component\Listing\Filters">
+        </component>
+        <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">product_listing.product_listing.product_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
                     </item>
-                    <item name="childDefaults" xsi:type="array">
-                        <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item>
-                        <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">product_listing.product_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
-                        </item>
-                    </item>
                 </item>
             </argument>
-            <filterInput name="name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">name</item>
-                        <item name="label" xsi:type="string" translate="true">Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="type_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Type</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">type_id</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="label" xsi:type="string" translate="true">Type</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="attribute_set_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\AttributeSet\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">attribute_set_id</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="label" xsi:type="string" translate="true">Attribute Set</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="sku">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">sku</item>
-                        <item name="label" xsi:type="string" translate="true">SKU</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="price">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">price</item>
-                        <item name="label" xsi:type="string" translate="true">Price</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterSelect name="visibility">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Visibility</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">visibility</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="label" xsi:type="string" translate="true">Visibility</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="status">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Attribute\Source\Status</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">status</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
                 </argument>
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
+                        <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item>
                         <item name="dataScope" xsi:type="string">store_id</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
+                        <item name="caption" xsi:type="string" translate="true">All Store Views</item>
                         <item name="label" xsi:type="string" translate="true">Store View</item>
-                        <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string"></item>
-                        </item>
                     </item>
                 </argument>
             </filterSelect>
@@ -192,7 +86,6 @@
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">product_listing.product_listing.product_columns.ids</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/tree-massactions</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -251,7 +144,6 @@
                         <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -272,7 +164,6 @@
                             <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
                         </item>
                     </item>
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -281,27 +172,19 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="sortOrder" xsi:type="number">0</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="entity_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                     <item name="sortOrder" xsi:type="number">10</item>
                 </item>
@@ -309,16 +192,12 @@
         </column>
         <column name="thumbnail" class="Magento\Catalog\Ui\Component\Listing\Columns\Thumbnail">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="altField" xsi:type="string">name</item>
                     <item name="has_preview" xsi:type="string">1</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Thumbnail</item>
                     <item name="sortOrder" xsi:type="number">20</item>
                 </item>
@@ -326,13 +205,9 @@
         </column>
         <column name="name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="add_field" xsi:type="boolean">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Name</item>
                     <item name="sortOrder" xsi:type="number">30</item>
                 </item>
@@ -341,12 +216,10 @@
         <column name="type_id">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Product\Type</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Type</item>
                     <item name="sortOrder" xsi:type="number">40</item>
                 </item>
@@ -355,12 +228,10 @@
         <column name="attribute_set_id">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Product\AttributeSet\Options</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Attribute Set</item>
                     <item name="sortOrder" xsi:type="number">50</item>
                 </item>
@@ -368,12 +239,8 @@
         </column>
         <column name="sku">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">SKU</item>
                     <item name="sortOrder" xsi:type="number">60</item>
                 </item>
@@ -381,13 +248,9 @@
         </column>
         <column name="price" class="Magento\Catalog\Ui\Component\Listing\Columns\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="add_field" xsi:type="boolean">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Price</item>
                     <item name="sortOrder" xsi:type="number">70</item>
                 </item>
@@ -396,13 +259,11 @@
         <column name="visibility">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Product\Visibility</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Visibility</item>
                     <item name="sortOrder" xsi:type="number">80</item>
                 </item>
@@ -411,46 +272,35 @@
         <column name="status">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Product\Attribute\Source\Status</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                     <item name="sortOrder" xsi:type="number">90</item>
                 </item>
             </argument>
         </column>
-        <column name="websites" class="Magento\Catalog\Ui\Component\Listing\Columns\Websites">
+        <column name="websites">
             <argument name="data" xsi:type="array">
-                <item name="options" xsi:type="object">Magento\Store\Model\Resource\Website\Collection</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Store\Model\ResourceModel\Website\Collection</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Websites</item>
                     <item name="sortOrder" xsi:type="number">100</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Catalog\Ui\Component\Listing\Columns\ProductActions">
+        <actionsColumn name="actions" class="Magento\Catalog\Ui\Component\Listing\Columns\ProductActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="sortOrder" xsi:type="number">200</item>
-                    <item name="dataType" xsi:type="string">actions</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js
index 17b5f95205fdfaeb6269c411d2c254b838060e51..de62ea60219a74287c9d2846849f8a9d297a1c08 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/base-image-uploader.js
@@ -6,11 +6,12 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'jquery/file-uploader',
     'mage/translate',
     'mage/backend/notification'
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
     'use strict';
 
     $.widget('mage.baseImage', {
@@ -131,7 +132,9 @@ define([
                     if (!data.result.error) {
                         $galleryContainer.trigger('addItem', data.result);
                     } else {
-                        alert($.mage.__('We don\'t recognize or support this file extension type.'));
+                        alert({
+                            content: $.mage.__('We don\'t recognize or support this file extension type.')
+                        });
                     }
                 },
                 change: function(e, data) {
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/form.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/form.js
index 0d5be338a5a7a6ff1be672387a408459ca7ebfff..eaa65160561c9f589d1aaf2e2738a843d80069f0 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/form.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/category/form.js
@@ -6,10 +6,11 @@
 /*global Ajax:true alert:true*/
 define([
     "jquery",
+    'Magento_Ui/js/modal/alert',
     "mage/backend/form",
     "jquery/ui",
     "prototype"
-], function($){
+], function($, alert){
     "use strict";
 
     $.widget("mage.categoryForm", $.mage.form, {
@@ -55,7 +56,9 @@ define([
             if (transport.responseText.isJSON()) {
                 var response = transport.responseText.evalJSON();
                 if (response.error) {
-                    alert(response.message);
+                    alert({
+                        content: response.message
+                    });
                 } else {
                     if (this.element.find(this.options.categoryIdSelector).prop('value') == response.id) {
                         this.element.find(this.options.categoryPathSelector)
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js
index f4624937f02556dc18dd44e07c6a6da77088de4f..b48cfec50ea7bb56bc379d4c68751745506934a6 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product-attributes.js
@@ -4,8 +4,9 @@
  */
 define([
     'jquery',
+    'underscore',
     'jquery/ui'
-], function ($) {
+], function ($, _) {
     'use strict';
 
     $.widget('mage.productAttributes', {
@@ -15,74 +16,69 @@ define([
             });
         },
 
-        _prepareUrl: function () {
-            var name = $('[data-role=product-attribute-search]').val();
+        _initModal: function () {
+            var self = this;
 
-            return this.options.url +
-                (/\?/.test(this.options.url) ? '&' : '?') +
-                'set=' + $('#attribute_set_id').val() +
-                '&attribute[frontend_label]=' +
-                window.encodeURIComponent(name);
-        },
-
-        _showPopup: function (event) {
-            var wrapper,
-                iframe;
-
-            wrapper = $('<div id="create_new_attribute"/>').appendTo('body').dialog({
-                // ToDo: refactor to a sliding panel
+            this.modal = $('<div id="create_new_attribute"/>').modal({
                 title: 'New Attribute',
-                width: '75%',
-                minHeight: 650,
-                modal: true,
-                resizable: false,
-                resizeStop: function () {
-                    iframe.height($(this).outerHeight() + 'px');
-                    iframe.width($(this).outerWidth() + 'px');
+                type: 'slide',
+                buttons: [],
+                opened: function () {
+                    self.iframe = $('<iframe id="create_new_attribute_container">').attr({
+                        src: self._prepareUrl(),
+                        frameborder: 0
+                    });
+                    self.modal.append(self.iframe);
+                    self._changeIframeSize();
+                    $(window).off().on('resize', _.debounce(self._changeIframeSize.bind(self), 400));
                 },
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function () {
-                    $(this).closest('.ui-dialog').addClass('ui-dialog-active');
+                closed: function () {
+                    var doc = self.iframe.get(0).document;
 
-                    var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 45;
-                    jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
-                },
-                close: function () {
-                    $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
+                    if (doc && $.isFunction(doc.execCommand)) {
+                        //IE9 break script loading but not execution on iframe removing
+                        doc.execCommand('stop');
+                        self.iframe.remove();
+                    }
+                    self.modal.data('modal').modal.remove();
                 }
             });
+        },
 
-            iframe = $('<iframe id="create_new_attribute_container">').attr({
-                src: this._prepareUrl(event),
-                frameborder: 0,
-                style: 'position:absolute;top:58px;left:0px;right:0px;bottom:0px'
-            });
+        _getHeight: function () {
+            var modal = this.modal.data('modal').modal,
+                modalHead = modal.find('header'),
+                modalHeadHeight = modalHead.outerHeight(),
+                modalHeight = modal.outerHeight(),
+                modalContentPadding = this.modal.parent().outerHeight() - this.modal.parent().height();
 
-            iframe.on('load', function () {
-                $(this).css({
-                    height: wrapper.outerHeight() + 'px',
-                    width: wrapper.outerWidth() + 'px'
-                });
-            });
+            return modalHeight - modalHeadHeight - modalContentPadding;
+        },
 
-            wrapper.append(iframe);
+        _getWidth: function () {
+            return this.modal.width();
+        },
 
-            wrapper.on('dialogclose', function () {
-                var dialog = this,
-                    doc = iframe.get(0).document;
+        _changeIframeSize: function () {
+            this.modal.parent().outerHeight(this._getHeight());
+            this.iframe.outerHeight(this._getHeight());
+            this.iframe.outerWidth(this._getWidth());
 
-                if (doc && $.isFunction(doc.execCommand)) {
-                    //IE9 break script loading but not execution on iframe removing
-                    doc.execCommand('stop');
-                    iframe.remove();
-                }
+        },
 
-                $(dialog).remove();
-            });
+        _prepareUrl: function () {
+            var name = $('[data-role=product-attribute-search]').val();
+
+            return this.options.url +
+                (/\?/.test(this.options.url) ? '&' : '?') +
+                'set=' + $('#attribute_set_id').val() +
+                '&attribute[frontend_label]=' +
+                window.encodeURIComponent(name);
+        },
+
+        _showPopup: function () {
+            this._initModal();
+            this.modal.modal('openModal');
         }
     });
 
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
index 648632e2aacbe36150e3c99e4a9d22df2f136e8c..030962f2f06413a56129efbbbc6aa3c6d8b4830a 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/catalog/product/composite/configure.js
@@ -6,651 +6,627 @@ define([
     "jquery",
     "jquery/ui",
     "mage/translate",
-    "prototype"
+    "prototype",
+    'Magento_Ui/js/modal/modal'
 ], function(jQuery){
 
-window.ProductConfigure = Class.create();
-
-ProductConfigure.prototype = {
-
-    listTypes:                  $H({}),
-    current:                    $H({}),
-    itemsFilter:                $H({}),
-    blockWindow:                null,
-    blockForm:                  null,
-    blockFormFields:            null,
-    blockFormAdd:               null,
-    blockFormConfirmed:         null,
-    blockConfirmed:             null,
-    blockIFrame:                null,
-    blockCancelBtn:             null,
-    blockMask:                  null,
-    blockMsg:                   null,
-    blockMsgError:              null,
-    windowHeight:               null,
-    confirmedCurrentId:         null,
-    confirmCallback:            {},
-    cancelCallback:             {},
-    onLoadIFrameCallback:       {},
-    showWindowCallback:         {},
-    beforeSubmitCallback:       {},
-    iFrameJSVarname:            null,
-    _listTypeId:                1,
-
-    /**
-     * Initialize object
-     */
-    initialize: function() {
-        this._initWindowElements();
-        var self = this;
-        this.dialog = jQuery('#product_composite_configure').dialog({
-            autoOpen: false,
-            title: jQuery.mage.__('Configure Product'),
-            modal: true,
-            minWidth: 500,
-            width: '75%',
-            dialogClass: 'popup-window',
-            position: {
-                my: 'left top',
-                at: 'center top',
-                of: 'body'
-            },
-            open: function () {
-                jQuery(this).addClass('magento_message').css('max-height', '500px');
-                jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30;
-                jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
-            },
-            close: function() {
-                jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-            },
-            buttons: [{
-                text: jQuery.mage.__('OK'),
-                'class': 'action-primary',
-                click: function() {
-                    self.onConfirmBtn();
-                }
-            }, {
-                id: "product_composite_configure_form_cancel",
-                text: "Cancel",
-                'class': 'action-close',
-                click: function() {
-                    jQuery(this).dialog("close");
-                }
-            }]
-        });
-    },
-
-    /**
-     * Initialize window elements
-     */
-    _initWindowElements: function() {
-        this.blockWindow                = $('product_composite_configure');
-        this.blockForm                  = $('product_composite_configure_form');
-        this.blockFormFields            = $('product_composite_configure_form_fields');
-        this.blockFormAdd               = $('product_composite_configure_form_additional');
-        this.blockFormConfirmed         = $('product_composite_configure_form_confirmed');
-        this.blockConfirmed             = $('product_composite_configure_confirmed');
-        this.blockIFrame                = $('product_composite_configure_iframe');
-        this.blockCancelBtn             = $('product_composite_configure_form_cancel');
-        this.blockMsg                   = $('product_composite_configure_messages');
-        this.blockMsgError              = this.blockMsg.select('.message.error div')[0];
-        this.iFrameJSVarname            = this.blockForm.select('input[name="as_js_varname"]')[0].value;
-    },
-
-    /**
-    * Returns next unique list type id
-    */
-    _generateListTypeId: function () {
-        return '_internal_lt_' + (this._listTypeId++);
-    },
-
-    /**
-     * Add product list types as scope and their urls
-     * expamle: addListType('product_to_add', {urlFetch: 'http://magento...'})
-     * expamle: addListType('wishlist', {urlSubmit: 'http://magento...'})
-     *
-     * @param type types as scope
-     * @param urls obj can be
-     *             - {urlFetch: 'http://magento...'} for fetching configuration fields through ajax
-     *             - {urlConfirm: 'http://magento...'} for submit configured data through iFrame when clicked confirm button
-     *             - {urlSubmit: 'http://magento...'} for submit configured data through iFrame
-     */
-    addListType: function(type, urls) {
-        if ('undefined' == typeof this.listTypes[type]) {
+    window.ProductConfigure = Class.create();
+
+    ProductConfigure.prototype = {
+
+        listTypes:                  $H({}),
+        current:                    $H({}),
+        itemsFilter:                $H({}),
+        blockWindow:                null,
+        blockForm:                  null,
+        blockFormFields:            null,
+        blockFormAdd:               null,
+        blockFormConfirmed:         null,
+        blockConfirmed:             null,
+        blockIFrame:                null,
+        blockCancelBtn:             null,
+        blockMask:                  null,
+        blockMsg:                   null,
+        blockMsgError:              null,
+        windowHeight:               null,
+        confirmedCurrentId:         null,
+        confirmCallback:            {},
+        cancelCallback:             {},
+        onLoadIFrameCallback:       {},
+        showWindowCallback:         {},
+        beforeSubmitCallback:       {},
+        iFrameJSVarname:            null,
+        _listTypeId:                1,
+
+        /**
+         * Initialize object
+         */
+        initialize: function() {
+            var self = this;
+
+            this._initWindowElements();
+            this.dialog = jQuery('#product_composite_configure').modal({
+                title: jQuery.mage.__('Configure Product'),
+                type: 'slide',
+                buttons: [{
+                    text: jQuery.mage.__('OK'),
+                    'class': 'action-primary',
+                    click: function () {
+                        self.onConfirmBtn();
+                    }
+                }]
+            });
+        },
+
+        /**
+         * Initialize window elements
+         */
+        _initWindowElements: function() {
+            this.blockWindow                = $('product_composite_configure');
+            this.blockForm                  = $('product_composite_configure_form');
+            this.blockFormFields            = $('product_composite_configure_form_fields');
+            this.blockFormAdd               = $('product_composite_configure_form_additional');
+            this.blockFormConfirmed         = $('product_composite_configure_form_confirmed');
+            this.blockConfirmed             = $('product_composite_configure_confirmed');
+            this.blockIFrame                = $('product_composite_configure_iframe');
+            this.blockCancelBtn             = $('product_composite_configure_form_cancel');
+            this.blockMsg                   = $('product_composite_configure_messages');
+            this.blockMsgError              = this.blockMsg.select('.message.error div')[0];
+            this.iFrameJSVarname            = this.blockForm.select('input[name="as_js_varname"]')[0].value;
+        },
+
+        /**
+         * Returns next unique list type id
+         */
+        _generateListTypeId: function () {
+            return '_internal_lt_' + (this._listTypeId++);
+        },
+
+        /**
+         * Add product list types as scope and their urls
+         * expamle: addListType('product_to_add', {urlFetch: 'http://magento...'})
+         * expamle: addListType('wishlist', {urlSubmit: 'http://magento...'})
+         *
+         * @param type types as scope
+         * @param urls obj can be
+         *             - {urlFetch: 'http://magento...'} for fetching configuration fields through ajax
+         *             - {urlConfirm: 'http://magento...'} for submit configured data through iFrame when clicked confirm button
+         *             - {urlSubmit: 'http://magento...'} for submit configured data through iFrame
+         */
+        addListType: function(type, urls) {
+            if ('undefined' == typeof this.listTypes[type]) {
+                this.listTypes[type] = {};
+            }
+            Object.extend(this.listTypes[type], urls);
+            return this;
+        },
+
+        /**
+         * Adds complex list type - that is used to submit several list types at once
+         * Only urlSubmit is possible for this list type
+         * expamle: addComplexListType(['wishlist', 'product_list'], 'http://magento...')
+         *
+         * @param type types as scope
+         * @param urls obj can be
+         *             - {urlSubmit: 'http://magento...'} for submit configured data through iFrame
+         * @return type string
+         */
+        addComplexListType: function(types, urlSubmit) {
+            var type = this._generateListTypeId();
             this.listTypes[type] = {};
-        }
-        Object.extend(this.listTypes[type], urls);
-        return this;
-    },
-
-    /**
-    * Adds complex list type - that is used to submit several list types at once
-    * Only urlSubmit is possible for this list type
-    * expamle: addComplexListType(['wishlist', 'product_list'], 'http://magento...')
-    *
-    * @param type types as scope
-    * @param urls obj can be
-    *             - {urlSubmit: 'http://magento...'} for submit configured data through iFrame
-    * @return type string
-    */
-   addComplexListType: function(types, urlSubmit) {
-       var type = this._generateListTypeId();
-       this.listTypes[type] = {};
-       this.listTypes[type].complexTypes = types;
-       this.listTypes[type].urlSubmit = urlSubmit;
-       return type;
-   },
-
-    /**
-     * Add filter of items
-     *
-     * @param listType scope name
-     * @param itemsFilter
-     */
-    addItemsFilter: function(listType, itemsFilter) {
-        if (!listType || !itemsFilter) {
-            return false;
-        }
-        if ('undefined' == typeof this.itemsFilter[listType]) {
-            this.itemsFilter[listType] = [];
-        }
-        this.itemsFilter[listType] = this.itemsFilter[listType].concat(itemsFilter);
-        return this;
-    },
-
-    /**
-    * Returns id of block where configuration for an item is stored
-    *
-    * @param listType scope name
-    * @param itemId
-    * @return string
-    */
-    _getConfirmedBlockId: function (listType, itemId) {
-        return this.blockConfirmed.id + '[' + listType + '][' + itemId + ']';
-    },
-
-    /**
-    * Checks whether item has some configuration fields
-    *
-    * @param listType scope name
-    * @param itemId
-    * @return bool
-    */
-    itemConfigured: function (listType, itemId) {
-        var confirmedBlockId = this._getConfirmedBlockId(listType, itemId);
-        var itemBlock = $(confirmedBlockId);
-        return !!(itemBlock && itemBlock.innerHTML);
-    },
-
-    /**
-     * Show configuration fields of item, if it not found then get it through ajax
-     *
-     * @param listType scope name
-     * @param itemId
-     */
-    showItemConfiguration: function(listType, itemId) {
-        if (!listType || !itemId) {
-            return false;
-        }
+            this.listTypes[type].complexTypes = types;
+            this.listTypes[type].urlSubmit = urlSubmit;
+            return type;
+        },
 
-        this.initialize();
-        this.current.listType = listType;
-        this.current.itemId = itemId;
-        this.confirmedCurrentId = this._getConfirmedBlockId(listType, itemId);
+        /**
+         * Add filter of items
+         *
+         * @param listType scope name
+         * @param itemsFilter
+         */
+        addItemsFilter: function(listType, itemsFilter) {
+            if (!listType || !itemsFilter) {
+                return false;
+            }
+            if ('undefined' == typeof this.itemsFilter[listType]) {
+                this.itemsFilter[listType] = [];
+            }
+            this.itemsFilter[listType] = this.itemsFilter[listType].concat(itemsFilter);
+            return this;
+        },
 
-        if (!this.itemConfigured(listType, itemId)) {
-            this._requestItemConfiguration(listType, itemId);
-        } else {
-            this._processFieldsData('item_restore');
-            this._showWindow();
-        }
-    },
-
-    /**
-     * Get configuration fields of product through ajax and show them
-     *
-     * @param listType scope name
-     * @param itemId
-     */
-    _requestItemConfiguration: function(listType, itemId) {
-        if (!this.listTypes[listType].urlFetch) {
-            return false;
-        }
-        var url = this.listTypes[listType].urlFetch;
-        if (url) {
-            new Ajax.Request(url, {
-                parameters: {id: itemId},
-                onSuccess: function(transport) {
-                    var response = transport.responseText;
-                    if (response.isJSON()) {
-                        response = response.evalJSON();
-                        if (response.error) {
-                            this.blockMsg.show();
-                            this.blockMsgError.innerHTML = response.message;
-                            this.blockCancelBtn.hide();
-                            this.setConfirmCallback(listType, null);
-                            this._showWindow();
-                        }
-                    } else if (response) {
-                        response = response + '';
-                        this.blockFormFields.update(response);
+        /**
+         * Returns id of block where configuration for an item is stored
+         *
+         * @param listType scope name
+         * @param itemId
+         * @return string
+         */
+        _getConfirmedBlockId: function (listType, itemId) {
+            return this.blockConfirmed.id + '[' + listType + '][' + itemId + ']';
+        },
 
-                        // Add special div to hold mage data, e.g. scripts to execute on every popup show
-                        var mageData = {};
-                        var scripts = response.extractScripts();
-                        mageData.scripts = scripts;
+        /**
+         * Checks whether item has some configuration fields
+         *
+         * @param listType scope name
+         * @param itemId
+         * @return bool
+         */
+        itemConfigured: function (listType, itemId) {
+            var confirmedBlockId = this._getConfirmedBlockId(listType, itemId);
+            var itemBlock = $(confirmedBlockId);
+            return !!(itemBlock && itemBlock.innerHTML);
+        },
 
-                        var scriptHolder = new Element('div', {'style': 'display:none'});
-                        scriptHolder.mageData = mageData;
-                        this.blockFormFields.insert(scriptHolder);
+        /**
+         * Show configuration fields of item, if it not found then get it through ajax
+         *
+         * @param listType scope name
+         * @param itemId
+         */
+        showItemConfiguration: function(listType, itemId) {
+            if (!listType || !itemId) {
+                return false;
+            }
 
-                        // Show window
-                        this._showWindow();
-                    }
-                }.bind(this)
-            });
-        }
-    },
-
-    /**
-     * Triggered on confirm button click
-     * Do submit configured data through iFrame if needed
-     */
-    onConfirmBtn: function() {
-        if (jQuery(this.blockForm).valid()) {
-            if (this.listTypes[this.current.listType].urlConfirm) {
-                this.submit();
+            this.initialize();
+            this.current.listType = listType;
+            this.current.itemId = itemId;
+            this.confirmedCurrentId = this._getConfirmedBlockId(listType, itemId);
+
+            if (!this.itemConfigured(listType, itemId)) {
+                this._requestItemConfiguration(listType, itemId);
             } else {
-                this._processFieldsData('item_confirm');
-                this._closeWindow();
-                if (Object.isFunction(this.confirmCallback[this.current.listType])) {
-                    this.confirmCallback[this.current.listType]();
-                }
+                this._processFieldsData('item_restore');
+                this._showWindow();
             }
-        }
-        return this;
-    },
-
-    /**
-     * Triggered on cancel button click
-     */
-    onCancelBtn: function() {
-        this._closeWindow();
-        if (Object.isFunction(this.cancelCallback[this.current.listType])) {
-            this.cancelCallback[this.current.listType]();
-        }
-        return this;
-    },
-
-    /**
-     * Submit configured data through iFrame
-     *
-     * @param listType scope name
-     */
-    submit: function (listType) {
-        // prepare data
-        if (listType) {
-            this.current.listType = listType;
-            this.current.itemId = null;
-        }
-        var urlConfirm = this.listTypes[this.current.listType].urlConfirm;
-        var urlSubmit = this.listTypes[this.current.listType].urlSubmit;
-        if (!urlConfirm && !urlSubmit) {
-            return false;
-        }
-        if (urlConfirm) {
-            this.blockForm.action = urlConfirm;
-            this.addFields([new Element('input', {type: 'hidden', name: 'id', value: this.current.itemId})]);
-        } else {
-            this.blockForm.action = urlSubmit;
-
-            var complexTypes = this.listTypes[this.current.listType].complexTypes;
-            if (complexTypes) {
-                this.addFields([new Element('input', {type: 'hidden', name: 'configure_complex_list_types', value: complexTypes.join(',')})]);
+        },
+
+        /**
+         * Get configuration fields of product through ajax and show them
+         *
+         * @param listType scope name
+         * @param itemId
+         */
+        _requestItemConfiguration: function(listType, itemId) {
+            if (!this.listTypes[listType].urlFetch) {
+                return false;
             }
+            var url = this.listTypes[listType].urlFetch;
+            if (url) {
+                new Ajax.Request(url, {
+                    parameters: {id: itemId},
+                    onSuccess: function(transport) {
+                        var response = transport.responseText;
+                        if (response.isJSON()) {
+                            response = response.evalJSON();
+                            if (response.error) {
+                                this.blockMsg.show();
+                                this.blockMsgError.innerHTML = response.message;
+                                this.blockCancelBtn.hide();
+                                this.setConfirmCallback(listType, null);
+                                this._showWindow();
+                            }
+                        } else if (response) {
+                            response = response + '';
+                            this.blockFormFields.update(response);
 
-            this._processFieldsData('current_confirmed_to_form');
+                            // Add special div to hold mage data, e.g. scripts to execute on every popup show
+                            var mageData = {};
+                            var scripts = response.extractScripts();
+                            mageData.scripts = scripts;
 
-            // Disable item controls that duplicate added fields (e.g. sometimes qty controls can intersect)
-            // so they won't be submitted
-            var tagNames = ['input', 'select', 'textarea'];
+                            var scriptHolder = new Element('div', {'style': 'display:none'});
+                            scriptHolder.mageData = mageData;
+                            this.blockFormFields.insert(scriptHolder);
 
-            var names = {}; // Map of added field names
-            for (var i = 0, len = tagNames.length; i < len; i++) {
-                var tagName = tagNames[i];
-                var elements = this.blockFormAdd.getElementsByTagName(tagName);
-                for (var index = 0, elLen = elements.length; index < elLen; index++) {
-                    names[elements[index].name] = true;
-                }
+                            // Show window
+                            this._showWindow();
+                        }
+                    }.bind(this)
+                });
             }
+        },
 
-            for (var i = 0, len = tagNames.length; i < len; i++) {
-                var tagName = tagNames[i];
-                var elements = this.blockFormConfirmed.getElementsByTagName(tagName);
-                for (var index = 0, elLen = elements.length; index < elLen; index++) {
-                    var element = elements[index];
-                    if (names[element.name]) {
-                        element.setAttribute('configure_disabled', 1);
-                        element.setAttribute('configure_prev_disabled', element.disabled ? 1 : 0);
-                        element.disabled = true;
-                    } else {
-                        element.setAttribute('configure_disabled', 0);
-                    }
-                }
-            }
-        }
-        // do submit
-        if (Object.isFunction(this.beforeSubmitCallback[this.current.listType])) {
-            this.beforeSubmitCallback[this.current.listType]();
-        }
-        this.blockForm.submit();
-
-        // Show loader
-        jQuery(this.blockForm).trigger('processStart');
-
-        return this;
-    },
-
-    /**
-     * Add dynamically additional fields for form
-     *
-     * @param fields
-     */
-    addFields: function(fields) {
-        fields.each(function(elm) {
-            this.blockFormAdd.insert(elm);
-        }.bind(this));
-        return this;
-    },
-
-    /**
-     * Triggered when form was submitted and iFrame was loaded. Get response from iFrame and handle it
-     */
-    onLoadIFrame: function() {
-        this.blockFormConfirmed.select('[configure_disabled=1]').each(function (element) {
-            element.disabled = element.getAttribute('configure_prev_disabled') == '1';
-        });
-
-        this._processFieldsData('form_confirmed_to_confirmed');
-
-        var response = this.blockIFrame.contentWindow[this.iFrameJSVarname];
-        if (response && "object" == typeof response) {
-            if (this.listTypes[this.current.listType].urlConfirm) {
-                if (response.ok) {
+        /**
+         * Triggered on confirm button click
+         * Do submit configured data through iFrame if needed
+         */
+        onConfirmBtn: function() {
+            if (jQuery(this.blockForm).valid()) {
+                if (this.listTypes[this.current.listType].urlConfirm) {
+                    this.submit();
+                } else {
+                    this._processFieldsData('item_confirm');
                     this._closeWindow();
-                    this.clean('current');
-                } else if (response.error) {
-                    this.showItemConfiguration(this.current.listType, this.current.itemId);
-                    this.blockMsg.show();
-                    this.blockMsgError.innerHTML = response.message;
-                    this._showWindow();
-                    return false;
+                    if (Object.isFunction(this.confirmCallback[this.current.listType])) {
+                        this.confirmCallback[this.current.listType]();
+                    }
                 }
             }
-            if (Object.isFunction(this.onLoadIFrameCallback[this.current.listType])) {
-                this.onLoadIFrameCallback[this.current.listType](response);
+            return this;
+        },
+
+        /**
+         * Triggered on cancel button click
+         */
+        onCancelBtn: function() {
+            this._closeWindow();
+            if (Object.isFunction(this.cancelCallback[this.current.listType])) {
+                this.cancelCallback[this.current.listType]();
             }
-            document.fire(this.current.listType + ':afterIFrameLoaded');
-        }
-        // Hide loader
-        jQuery(this.blockForm).trigger('processStop');
-
-        this.clean('current');
-        this.initialize();
-    },
-
-    /**
-     * Helper for fetching content from iFrame
-     */
-    _getIFrameContent: function() {
-        var content = (this.blockIFrame.contentWindow || this.blockIFrame.contentDocument);
-        if (content.document) {
-            content=content.document;
-        }
-        return content;
-    },
-
-    /**
-     * Helper to find qty of currently confirmed item
-     */
-    getCurrentConfirmedQtyElement: function() {
-        var elms = $(this.confirmedCurrentId).getElementsByTagName('input');
-        for (var i = 0; i < elms.length; i++) {
-            if (elms[i].name == 'qty') {
-                return elms[i];
+            return this;
+        },
+
+        /**
+         * Submit configured data through iFrame
+         *
+         * @param listType scope name
+         */
+        submit: function (listType) {
+            // prepare data
+            if (listType) {
+                this.current.listType = listType;
+                this.current.itemId = null;
             }
-        }
-    },
-
-    /**
-     * Helper to find qty of active form
-     */
-    getCurrentFormQtyElement: function() {
-        var elms = this.blockFormFields.getElementsByTagName('input');
-        for (var i = 0; i < elms.length; i++) {
-            if (elms[i].name == 'qty') {
-                return elms[i];
+            var urlConfirm = this.listTypes[this.current.listType].urlConfirm;
+            var urlSubmit = this.listTypes[this.current.listType].urlSubmit;
+            if (!urlConfirm && !urlSubmit) {
+                return false;
             }
-        }
-    },
+            if (urlConfirm) {
+                this.blockForm.action = urlConfirm;
+                this.addFields([new Element('input', {type: 'hidden', name: 'id', value: this.current.itemId})]);
+            } else {
+                this.blockForm.action = urlSubmit;
 
-    /**
-     * Show configuration window
-     */
-    _showWindow: function() {
-        this.dialog.dialog('open');
-        //this._toggleSelectsExceptBlock(false);
+                var complexTypes = this.listTypes[this.current.listType].complexTypes;
+                if (complexTypes) {
+                    this.addFields([new Element('input', {type: 'hidden', name: 'configure_complex_list_types', value: complexTypes.join(',')})]);
+                }
 
-        if (Object.isFunction(this.showWindowCallback[this.current.listType])) {
-            this.showWindowCallback[this.current.listType]();
-        }
-    },
-
-    /**
-     * toggles Selects states (for IE) except those to be shown in popup
-     */
-    /*_toggleSelectsExceptBlock: function(flag) {
-        if(Prototype.Browser.IE){
-            if (this.blockForm) {
-                var states = new Array;
-                var selects = this.blockForm.getElementsByTagName("select");
-                for(var i=0; i<selects.length; i++){
-                    states[i] = selects[i].style.visibility
+                this._processFieldsData('current_confirmed_to_form');
+
+                // Disable item controls that duplicate added fields (e.g. sometimes qty controls can intersect)
+                // so they won't be submitted
+                var tagNames = ['input', 'select', 'textarea'];
+
+                var names = {}; // Map of added field names
+                for (var i = 0, len = tagNames.length; i < len; i++) {
+                    var tagName = tagNames[i];
+                    var elements = this.blockFormAdd.getElementsByTagName(tagName);
+                    for (var index = 0, elLen = elements.length; index < elLen; index++) {
+                        names[elements[index].name] = true;
+                    }
                 }
+
+                for (var i = 0, len = tagNames.length; i < len; i++) {
+                    var tagName = tagNames[i];
+                    var elements = this.blockFormConfirmed.getElementsByTagName(tagName);
+                    for (var index = 0, elLen = elements.length; index < elLen; index++) {
+                        var element = elements[index];
+                        if (names[element.name]) {
+                            element.setAttribute('configure_disabled', 1);
+                            element.setAttribute('configure_prev_disabled', element.disabled ? 1 : 0);
+                            element.disabled = true;
+                        } else {
+                            element.setAttribute('configure_disabled', 0);
+                        }
+                    }
+                }
+            }
+            // do submit
+            if (Object.isFunction(this.beforeSubmitCallback[this.current.listType])) {
+                this.beforeSubmitCallback[this.current.listType]();
             }
-            if (this.blockForm) {
-                for(i=0; i<selects.length; i++){
-                    selects[i].style.visibility = states[i]
+            this.blockForm.submit();
+
+            // Show loader
+            jQuery(this.blockForm).trigger('processStart');
+
+            return this;
+        },
+
+        /**
+         * Add dynamically additional fields for form
+         *
+         * @param fields
+         */
+        addFields: function(fields) {
+            fields.each(function(elm) {
+                this.blockFormAdd.insert(elm);
+            }.bind(this));
+            return this;
+        },
+
+        /**
+         * Triggered when form was submitted and iFrame was loaded. Get response from iFrame and handle it
+         */
+        onLoadIFrame: function() {
+            this.blockFormConfirmed.select('[configure_disabled=1]').each(function (element) {
+                element.disabled = element.getAttribute('configure_prev_disabled') == '1';
+            });
+
+            this._processFieldsData('form_confirmed_to_confirmed');
+
+            var response = this.blockIFrame.contentWindow[this.iFrameJSVarname];
+            if (response && "object" == typeof response) {
+                if (this.listTypes[this.current.listType].urlConfirm) {
+                    if (response.ok) {
+                        this._closeWindow();
+                        this.clean('current');
+                    } else if (response.error) {
+                        this.showItemConfiguration(this.current.listType, this.current.itemId);
+                        this.blockMsg.show();
+                        this.blockMsgError.innerHTML = response.message;
+                        this._showWindow();
+                        return false;
+                    }
                 }
+                if (Object.isFunction(this.onLoadIFrameCallback[this.current.listType])) {
+                    this.onLoadIFrameCallback[this.current.listType](response);
+                }
+                document.fire(this.current.listType + ':afterIFrameLoaded');
             }
-        }
-    },*/
-
-    /**
-     * Close configuration window
-     */
-    _closeWindow: function() {
-        this.dialog.dialog('close');
-        //this.blockWindow.style.display = 'none';
-        //this.clean('window');
-    },
-
-    /**
-     * Attach callback function triggered when confirm button was clicked
-     *
-     * @param confirmCallback
-     */
-    setConfirmCallback: function(listType, confirmCallback) {
-        this.confirmCallback[listType] = confirmCallback;
-        return this;
-    },
-
-    /**
-     * Attach callback function triggered when cancel button was clicked
-     *
-     * @param cancelCallback
-     */
-    setCancelCallback: function(listType, cancelCallback) {
-        this.cancelCallback[listType] = cancelCallback;
-        return this;
-    },
-
-    /**
-     * Attach callback function triggered when iFrame was loaded
-     *
-     * @param onLoadIFrameCallback
-     */
-    setOnLoadIFrameCallback: function(listType, onLoadIFrameCallback) {
-        this.onLoadIFrameCallback[listType] = onLoadIFrameCallback;
-        return this;
-    },
-
-    /**
-     * Attach callback function triggered when iFrame was loaded
-     *
-     * @param showWindowCallback
-     */
-    setShowWindowCallback: function(listType, showWindowCallback) {
-        this.showWindowCallback[listType] = showWindowCallback;
-        return this;
-    },
-
-    /**
-     * Attach callback function triggered before submitting form
-     *
-     * @param beforeSubmitCallback
-     */
-    setBeforeSubmitCallback: function(listType, beforeSubmitCallback) {
-        this.beforeSubmitCallback[listType] = beforeSubmitCallback;
-        return this;
-    },
-
-    /**
-     * Clean object data
-     *
-     * @param method can be 'all' or 'current'
-     */
-    clean: function(method) {
-        var listInfo = null;
-        var listTypes = null;
-        var removeConfirmed = function (listTypes) {
-            this.blockConfirmed.childElements().each(function(elm) {
-                for (var i = 0, len = listTypes.length; i < len; i++) {
-                   var pattern = this.blockConfirmed.id + '[' + listTypes[i] + ']';
-                   if (elm.id.indexOf(pattern) == 0) {
-                       elm.remove();
-                       break;
-                   }
+            // Hide loader
+            jQuery(this.blockForm).trigger('processStop');
+
+            this.clean('current');
+            this.initialize();
+        },
+
+        /**
+         * Helper for fetching content from iFrame
+         */
+        _getIFrameContent: function() {
+            var content = (this.blockIFrame.contentWindow || this.blockIFrame.contentDocument);
+            if (content.document) {
+                content=content.document;
+            }
+            return content;
+        },
+
+        /**
+         * Helper to find qty of currently confirmed item
+         */
+        getCurrentConfirmedQtyElement: function() {
+            var elms = $(this.confirmedCurrentId).getElementsByTagName('input');
+            for (var i = 0; i < elms.length; i++) {
+                if (elms[i].name == 'qty') {
+                    return elms[i];
                 }
-            }.bind(this));
-        }.bind(this);
-
-        switch (method) {
-            case 'current':
-                listInfo = this.listTypes[this.current.listType];
-                listTypes = [this.current.listType];
-                if (listInfo && listInfo.complexTypes) {
-                    listTypes = listTypes.concat(listInfo.complexTypes);
+            }
+        },
+
+        /**
+         * Helper to find qty of active form
+         */
+        getCurrentFormQtyElement: function() {
+            var elms = this.blockFormFields.getElementsByTagName('input');
+            for (var i = 0; i < elms.length; i++) {
+                if (elms[i].name == 'qty') {
+                    return elms[i];
                 }
-                removeConfirmed(listTypes);
-            break;
-            case 'window':
-                    this.blockFormFields.update();
-                    this.blockMsg.hide();
-                    this.blockMsgError.update();
-                    this.blockCancelBtn.show();
-            break;
-            default:
-                // search in list types for its cleaning
-                if (this.listTypes[method]) {
-                    listInfo = this.listTypes[method];
-                    listTypes = [method];
-                    if (listInfo.complexTypes) {
+            }
+        },
+
+        /**
+         * Show configuration window
+         */
+        _showWindow: function() {
+            this.dialog.modal('openModal');
+            //this._toggleSelectsExceptBlock(false);
+
+            if (Object.isFunction(this.showWindowCallback[this.current.listType])) {
+                this.showWindowCallback[this.current.listType]();
+            }
+        },
+
+        /**
+         * toggles Selects states (for IE) except those to be shown in popup
+         */
+        /*_toggleSelectsExceptBlock: function(flag) {
+         if(Prototype.Browser.IE){
+         if (this.blockForm) {
+         var states = new Array;
+         var selects = this.blockForm.getElementsByTagName("select");
+         for(var i=0; i<selects.length; i++){
+         states[i] = selects[i].style.visibility
+         }
+         }
+         if (this.blockForm) {
+         for(i=0; i<selects.length; i++){
+         selects[i].style.visibility = states[i]
+         }
+         }
+         }
+         },*/
+
+        /**
+         * Close configuration window
+         */
+        _closeWindow: function() {
+            this.dialog.modal('closeModal');
+            //this.blockWindow.style.display = 'none';
+            //this.clean('window');
+        },
+
+        /**
+         * Attach callback function triggered when confirm button was clicked
+         *
+         * @param confirmCallback
+         */
+        setConfirmCallback: function(listType, confirmCallback) {
+            this.confirmCallback[listType] = confirmCallback;
+            return this;
+        },
+
+        /**
+         * Attach callback function triggered when cancel button was clicked
+         *
+         * @param cancelCallback
+         */
+        setCancelCallback: function(listType, cancelCallback) {
+            this.cancelCallback[listType] = cancelCallback;
+            return this;
+        },
+
+        /**
+         * Attach callback function triggered when iFrame was loaded
+         *
+         * @param onLoadIFrameCallback
+         */
+        setOnLoadIFrameCallback: function(listType, onLoadIFrameCallback) {
+            this.onLoadIFrameCallback[listType] = onLoadIFrameCallback;
+            return this;
+        },
+
+        /**
+         * Attach callback function triggered when iFrame was loaded
+         *
+         * @param showWindowCallback
+         */
+        setShowWindowCallback: function(listType, showWindowCallback) {
+            this.showWindowCallback[listType] = showWindowCallback;
+            return this;
+        },
+
+        /**
+         * Attach callback function triggered before submitting form
+         *
+         * @param beforeSubmitCallback
+         */
+        setBeforeSubmitCallback: function(listType, beforeSubmitCallback) {
+            this.beforeSubmitCallback[listType] = beforeSubmitCallback;
+            return this;
+        },
+
+        /**
+         * Clean object data
+         *
+         * @param method can be 'all' or 'current'
+         */
+        clean: function(method) {
+            var listInfo = null;
+            var listTypes = null;
+            var removeConfirmed = function (listTypes) {
+                this.blockConfirmed.childElements().each(function(elm) {
+                    for (var i = 0, len = listTypes.length; i < len; i++) {
+                        var pattern = this.blockConfirmed.id + '[' + listTypes[i] + ']';
+                        if (elm.id.indexOf(pattern) == 0) {
+                            elm.remove();
+                            break;
+                        }
+                    }
+                }.bind(this));
+            }.bind(this);
+
+            switch (method) {
+                case 'current':
+                    listInfo = this.listTypes[this.current.listType];
+                    listTypes = [this.current.listType];
+                    if (listInfo && listInfo.complexTypes) {
                         listTypes = listTypes.concat(listInfo.complexTypes);
                     }
                     removeConfirmed(listTypes);
-                // clean all
-                } else if (!method) {
-                    this.current = $H({});
-                    this.blockConfirmed.update();
+                    break;
+                case 'window':
                     this.blockFormFields.update();
                     this.blockMsg.hide();
                     this.blockMsgError.update();
                     this.blockCancelBtn.show();
-                }
-            break;
-        }
-        this._getIFrameContent().body.innerHTML = '';
-        this.blockIFrame.contentWindow[this.iFrameJSVarname] = {};
-        this.blockFormAdd.update();
-        this.blockFormConfirmed.update();
-        this.blockForm.action = '';
-
-        return this;
-    },
-
-    /**
-     * Process fields data: save, restore, move saved to form and back
-     *
-     * @param method can be 'item_confirm', 'item_restore', 'current_confirmed_to_form', 'form_confirmed_to_confirmed'
-     */
-    _processFieldsData: function(method) {
+                    break;
+                default:
+                    // search in list types for its cleaning
+                    if (this.listTypes[method]) {
+                        listInfo = this.listTypes[method];
+                        listTypes = [method];
+                        if (listInfo.complexTypes) {
+                            listTypes = listTypes.concat(listInfo.complexTypes);
+                        }
+                        removeConfirmed(listTypes);
+                        // clean all
+                    } else if (!method) {
+                        this.current = $H({});
+                        this.blockConfirmed.update();
+                        this.blockFormFields.update();
+                        this.blockMsg.hide();
+                        this.blockMsgError.update();
+                        this.blockCancelBtn.show();
+                    }
+                    break;
+            }
+            this._getIFrameContent().body.innerHTML = '';
+            this.blockIFrame.contentWindow[this.iFrameJSVarname] = {};
+            this.blockFormAdd.update();
+            this.blockFormConfirmed.update();
+            this.blockForm.action = '';
+
+            return this;
+        },
 
         /**
-         * Internal function for rename fields names of some list type
-         * if listType is not specified, then it won't be added as prefix to all names
+         * Process fields data: save, restore, move saved to form and back
          *
-         * @param method can be 'current_confirmed_to_form', 'form_confirmed_to_confirmed'
-         * @param blockItem
+         * @param method can be 'item_confirm', 'item_restore', 'current_confirmed_to_form', 'form_confirmed_to_confirmed'
          */
-        var _renameFields = function(method, blockItem, listType) {
-            var pattern         = null;
-            var patternFlat     = null;
-            var replacement     = null;
-            var replacementFlat = null
-            var scopeArr        = blockItem.id.match(/.*\[\w+\]\[([^\]]+)\]$/);
-            var itemId          = scopeArr[1];
-            if (method == 'current_confirmed_to_form') {
-                pattern         = RegExp('(\\w+)(\\[?)');
-                patternFlat     = RegExp('(\\w+)');
-                replacement     = 'item[' + itemId + '][$1]$2';
-                replacementFlat = 'item_' + itemId + '_$1';
-                if (listType) {
-                    replacement = 'list[' + listType + '][item][' + itemId + '][$1]$2';
-                    replacementFlat = 'list_' + listType + '_' + replacementFlat;
-                }
-            } else if (method == 'form_confirmed_to_confirmed') {
-                var stPattern = 'item\\[' + itemId + '\\]\\[(\\w+)\\](.*)';
-                var stPatternFlat = 'item_' + itemId + '_(\\w+)';
-                if (listType) {
-                    stPattern = 'list\\[' + listType + '\\]\\[item\\]\\[' + itemId + '\\]\\[(\\w+)\\](.*)';
-                    stPatternFlat = 'list_' + listType + '_' + stPatternFlat;
-                }
-                pattern         = new RegExp(stPattern);
-                patternFlat     = new RegExp(stPatternFlat);
-                replacement     = '$1$2';
-                replacementFlat = '$1';
-            } else {
-                return false;
-            }
-            var rename = function (elms) {
-                for (var i = 0; i < elms.length; i++) {
-                    if (elms[i].name && elms[i].type == 'file') {
-                        elms[i].name = elms[i].name.replace(patternFlat, replacementFlat);
-                    } else if (elms[i].name) {
-                        elms[i].name = elms[i].name.replace(pattern, replacement);
+        _processFieldsData: function(method) {
+
+            /**
+             * Internal function for rename fields names of some list type
+             * if listType is not specified, then it won't be added as prefix to all names
+             *
+             * @param method can be 'current_confirmed_to_form', 'form_confirmed_to_confirmed'
+             * @param blockItem
+             */
+            var _renameFields = function(method, blockItem, listType) {
+                var pattern         = null;
+                var patternFlat     = null;
+                var replacement     = null;
+                var replacementFlat = null
+                var scopeArr        = blockItem.id.match(/.*\[\w+\]\[([^\]]+)\]$/);
+                var itemId          = scopeArr[1];
+                if (method == 'current_confirmed_to_form') {
+                    pattern         = RegExp('(\\w+)(\\[?)');
+                    patternFlat     = RegExp('(\\w+)');
+                    replacement     = 'item[' + itemId + '][$1]$2';
+                    replacementFlat = 'item_' + itemId + '_$1';
+                    if (listType) {
+                        replacement = 'list[' + listType + '][item][' + itemId + '][$1]$2';
+                        replacementFlat = 'list_' + listType + '_' + replacementFlat;
+                    }
+                } else if (method == 'form_confirmed_to_confirmed') {
+                    var stPattern = 'item\\[' + itemId + '\\]\\[(\\w+)\\](.*)';
+                    var stPatternFlat = 'item_' + itemId + '_(\\w+)';
+                    if (listType) {
+                        stPattern = 'list\\[' + listType + '\\]\\[item\\]\\[' + itemId + '\\]\\[(\\w+)\\](.*)';
+                        stPatternFlat = 'list_' + listType + '_' + stPatternFlat;
                     }
+                    pattern         = new RegExp(stPattern);
+                    patternFlat     = new RegExp(stPatternFlat);
+                    replacement     = '$1$2';
+                    replacementFlat = '$1';
+                } else {
+                    return false;
                 }
-            };
-            rename(blockItem.getElementsByTagName('input'));
-            rename(blockItem.getElementsByTagName('select'));
-            rename(blockItem.getElementsByTagName('textarea'));
-        }.bind(this);
-
-        switch (method) {
-            case 'item_confirm':
+                var rename = function (elms) {
+                    for (var i = 0; i < elms.length; i++) {
+                        if (elms[i].name && elms[i].type == 'file') {
+                            elms[i].name = elms[i].name.replace(patternFlat, replacementFlat);
+                        } else if (elms[i].name) {
+                            elms[i].name = elms[i].name.replace(pattern, replacement);
+                        }
+                    }
+                };
+                rename(blockItem.getElementsByTagName('input'));
+                rename(blockItem.getElementsByTagName('select'));
+                rename(blockItem.getElementsByTagName('textarea'));
+            }.bind(this);
+
+            switch (method) {
+                case 'item_confirm':
                     if (!$(this.confirmedCurrentId)) {
                         this.blockConfirmed.insert(new Element('div', {id: this.confirmedCurrentId}));
                     } else {
@@ -659,8 +635,8 @@ ProductConfigure.prototype = {
                     this.blockFormFields.childElements().each(function(elm) {
                         $(this.confirmedCurrentId).insert(elm);
                     }.bind(this));
-            break;
-            case 'item_restore':
+                    break;
+                case 'item_restore':
                     this.blockFormFields.update();
 
                     // clone confirmed to form
@@ -730,14 +706,14 @@ ProductConfigure.prototype = {
                         } catch (e) {}
                         this.restorePhase = false;
                     }
-            break;
-            case 'current_confirmed_to_form':
+                    break;
+                case 'current_confirmed_to_form':
                     var allowedListTypes = {};
                     allowedListTypes[this.current.listType] = true;
                     var listInfo = this.listTypes[this.current.listType];
                     if (listInfo.complexTypes) {
                         for (var i = 0, len = listInfo.complexTypes.length; i < len; i++) {
-                           allowedListTypes[listInfo.complexTypes[i]] = true;
+                            allowedListTypes[listInfo.complexTypes[i]] = true;
                         }
                     }
 
@@ -747,13 +723,13 @@ ProductConfigure.prototype = {
                         var listType    = scopeArr[1];
                         var itemId    = scopeArr[2];
                         if (allowedListTypes[listType] && (!this.itemsFilter[listType]
-                                || this.itemsFilter[listType].indexOf(itemId) != -1)) {
+                            || this.itemsFilter[listType].indexOf(itemId) != -1)) {
                             _renameFields(method, blockItem, listInfo.complexTypes ? listType : null);
                             this.blockFormConfirmed.insert(blockItem);
                         }
                     }.bind(this));
-            break;
-            case 'form_confirmed_to_confirmed':
+                    break;
+                case 'form_confirmed_to_confirmed':
                     var listInfo = this.listTypes[this.current.listType];
                     this.blockFormConfirmed.childElements().each(function(blockItem) {
                         var scopeArr = blockItem.id.match(/.*\[(\w+)\]\[([^\]]+)\]$/);
@@ -761,32 +737,32 @@ ProductConfigure.prototype = {
                         _renameFields(method, blockItem, listInfo.complexTypes ? listType : null);
                         this.blockConfirmed.insert(blockItem);
                     }.bind(this));
-            break;
-        }
-    },
-
-    /**
-     * Check if qty selected correctly
-     *
-     * @param object element
-     * @param object event
-     */
-    changeOptionQty: function(element, event)
-    {
-        var checkQty = true;
-        if ('undefined' != typeof event) {
-            if (event.keyCode == 8 || event.keyCode == 46) {
-                checkQty = false;
+                    break;
+            }
+        },
+
+        /**
+         * Check if qty selected correctly
+         *
+         * @param object element
+         * @param object event
+         */
+        changeOptionQty: function(element, event)
+        {
+            var checkQty = true;
+            if ('undefined' != typeof event) {
+                if (event.keyCode == 8 || event.keyCode == 46) {
+                    checkQty = false;
+                }
+            }
+            if (checkQty && (Number(element.value) <= 0 || isNaN(Number(element.value)))) {
+                element.value = 1;
             }
         }
-        if (checkQty && (Number(element.value) <= 0 || isNaN(Number(element.value)))) {
-            element.value = 1;
-        }
-    }
-};
+    };
 
-jQuery(document).ready(function(){
-    productConfigure = new ProductConfigure();
-});
+    jQuery(document).ready(function(){
+        productConfigure = new ProductConfigure();
+    });
 
 });
\ No newline at end of file
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
index b7a16ce3db853a02f454b58af0d72e6e6d32dc31..d68497046a5bf00619fc2db9109ffb8869b7eed2 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/custom-options.js
@@ -7,12 +7,14 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'useDefault',
     'collapsable',
     'mage/translate',
-    'mage/backend/validation'
-], function ($, mageTemplate) {
+    'mage/backend/validation',
+    'Magento_Ui/js/modal/modal'
+], function ($, mageTemplate, alert) {
     'use strict';
 
     $.widget('mage.customOptions', {
@@ -120,90 +122,66 @@ define([
                     var importContainer = $('#import-container'),
                         widget = this;
 
-                    importContainer.dialog({
+                    importContainer.modal({
                         title: $.mage.__('Select Product'),
-                        autoOpen: false,
-                        minWidth: 980,
-                        width: '75%',
-                        modal: true,
-                        resizable: true,
-                        position: {
-                            my: 'left top',
-                            at: 'center top',
-                            of: 'body'
-                        },
-                        create: function (event, ui) {
-                            $(document).on('click', '#productGrid_massaction-form button', function () {
-                                $('#import-custom-options-apply-button').trigger('click', 'massActionTrigger');
+                        type: 'slide',
+                        opened: function () {
+                            $(document).off().on('click', '#productGrid_massaction-form button', function () {
+                                $('.import-custom-options-apply-button').trigger('click', 'massActionTrigger');
                             });
                         },
-                        open: function () {
-                            $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                            var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 135;
-                            $(this).closest('.ui-dialog').css('margin-top', topMargin);
-
-                            $(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
-                        },
-                        close: function () {
-                            $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                        },
-                        buttons: [
-                            {
-                                text: $.mage.__('Import'),
-                                id: 'import-custom-options-apply-button',
-                                'class': 'action-primary action-import',
-                                click: function (event, massActionTrigger) {
-                                    var request = [];
-                                    $(this).find('input[name=product]:checked').map(function () {
-                                        request.push(this.value);
-                                    });
+                        buttons: [{
+                            text: $.mage.__('Import'),
+                            attr: {
+                                id: 'import-custom-options-apply-button'
+                            },
+                            'class': 'action-primary action-import import-custom-options-apply-button',
+                            click: function (event, massActionTrigger) {
+                                var request = [];
 
-                                    if (request.length === 0) {
-                                        if (!massActionTrigger) {
-                                            alert($.mage.__('Please select items.'));
-                                        }
+                                $(this.element).find('input[name=product]:checked').map(function () {
+                                    request.push(this.value);
+                                });
 
-                                        return;
+                                if (request.length === 0) {
+                                    if (!massActionTrigger) {
+                                        alert({
+                                            content: $.mage.__('Please select items.')
+                                        });
                                     }
 
-                                    $.post(widget.options.customOptionsUrl, {
-                                        'products[]': request,
-                                        form_key: widget.options.formKey
-                                    }, function ($data) {
-                                        $.parseJSON($data).each(function (el) {
-                                            el.id = widget.getFreeOptionId(el.id);
-                                            el.option_id = el.id;
-
-                                            if (typeof el.optionValues !== 'undefined') {
-                                                for (var i = 0; i < el.optionValues.length; i++) {
-                                                    el.optionValues[i].option_id = el.id;
-                                                }
+                                    return;
+                                }
+
+                                $.post(widget.options.customOptionsUrl, {
+                                    'products[]': request,
+                                    form_key: widget.options.formKey
+                                }, function ($data) {
+                                    $.parseJSON($data).each(function (el) {
+                                        el.id = widget.getFreeOptionId(el.id);
+                                        el.option_id = el.id;
+
+                                        if (typeof el.optionValues !== 'undefined') {
+                                            for (var i = 0; i < el.optionValues.length; i++) {
+                                                el.optionValues[i].option_id = el.id;
                                             }
-                                            //Adding option
-                                            widget.addOption(el);
-                                            //Will save new option on server side
-                                            $('#product_option_' + el.id + '_option_id').val(0);
-                                            $('#option_' + el.id + ' input[name$="option_type_id]"]').val(-1);
-                                        });
-                                        importContainer.dialog('close');
+                                        }
+                                        //Adding option
+                                        widget.addOption(el);
+                                        //Will save new option on server side
+                                        $('#product_option_' + el.id + '_option_id').val(0);
+                                        $('#option_' + el.id + ' input[name$="option_type_id]"]').val(-1);
                                     });
-                                }
-                            },
-                            {
-                                text: $.mage.__('Cancel'),
-                                id: 'import-custom-options-close-button',
-                                'class': 'action-close',
-                                click: function () {
-                                    $(this).dialog('close');
-                                }
-                            }]
+                                    importContainer.modal('closeModal');
+                                });
+                            }
+                        }]
                     });
                     importContainer.load(
                         this.options.productGridUrl,
                         {form_key: this.options.formKey},
                         function () {
-                            importContainer.dialog('open');
+                            importContainer.modal('openModal');
                         }
                     );
                 },
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js b/app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js
index d70f2e17193afe202495b505a22cf26416dbdae7..44f3371cf9371b8f181de7d950e8796ce156520c 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js
+++ b/app/code/Magento/Catalog/view/adminhtml/web/js/new-category-dialog.js
@@ -32,7 +32,6 @@ define([
                 .on('suggestbeforeselect', function (event) {
                     clearParentCategory();
                     $(event.target).treeSuggest('close');
-                    $('#new_category_name').focus();
                 });
 
             $.validator.addMethod('validate-parent-category', function () {
diff --git a/app/code/Magento/Catalog/view/adminhtml/web/product/product.css b/app/code/Magento/Catalog/view/adminhtml/web/product/product.css
index 395f4d87817f7eed346ee34582e49e33f41f46ec..153a6d488fee30b287ea2540d0c63a61d6180ee2 100644
--- a/app/code/Magento/Catalog/view/adminhtml/web/product/product.css
+++ b/app/code/Magento/Catalog/view/adminhtml/web/product/product.css
@@ -325,6 +325,7 @@
 
 .admin__scope-old .tiers_table .col-qty span {
     font-size: 1rem;
+    white-space: nowrap;
 }
 
 .admin__scope-old .tiers_table .col-price .input-text {
diff --git a/app/code/Magento/Catalog/view/base/templates/product/price/tier_prices.phtml b/app/code/Magento/Catalog/view/base/templates/product/price/tier_prices.phtml
index c0b494718c0242c51680a0f6982384556c8f27e2..030e663359f01e1dc99094226ebcd499a3edf447 100644
--- a/app/code/Magento/Catalog/view/base/templates/product/price/tier_prices.phtml
+++ b/app/code/Magento/Catalog/view/base/templates/product/price/tier_prices.phtml
@@ -86,8 +86,9 @@ $product = $block->getSaleableItem();
         <script type="text/x-magento-init">
             {
                 ".product-info-main": {
-                    "tierPrice": {
+                    "addToCart": {
                         "inputQty": "#qty",
+                        "attr": "[data-tier-price]",
                         "productForm": "#product_addtocart_form"
                     }
                 }
diff --git a/app/code/Magento/Catalog/view/base/web/js/tier-price.js b/app/code/Magento/Catalog/view/base/web/js/tier-price.js
deleted file mode 100644
index 95622a56f6cca22f2791827e20775d3f6c77cabd..0000000000000000000000000000000000000000
--- a/app/code/Magento/Catalog/view/base/web/js/tier-price.js
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint browser:true jquery:true*/
-define([
-    "jquery",
-    "jquery/ui"
-], function($){
-    "use strict";
-
-    $.widget('mage.tierPrice', {
-        options: {
-            popupHeading: '#map-popup-heading',
-            productForm: '#product_addtocart_form',
-            popupPrice: '#map-popup-price',
-            popupMsrp: '#map-popup-msrp',
-            popup: '#map-popup',
-            popupContent: '#map-popup-content',
-            popupText: '#map-popup-text',
-            popupOnlyText: 'map-popup-only-text',
-            popupTextWhatThis: '#map-popup-text-what-this',
-            popupCartButtonId: '#map-popup-button'
-        },
-
-        _create: function() {
-            this.element.on('click', '[data-tier-price]', $.proxy(this._showTierPrice, this));
-        },
-
-        /**
-         * Show tier price popup on gesture
-         * @private
-         * @param e - element got the clicked on
-         * @return {Boolean}
-         */
-        _showTierPrice: function(e) {
-            var data = $(e.target).data('tier-price');
-            $(this.options.popupCartButtonId).off('click');
-            $(this.options.popupCartButtonId).on('click', $.proxy(function() {
-                this.element.find(this.options.inputQty).val(data.qty);
-                this.element.find(this.options.productForm).submit();
-            }, this));
-            $(this.options.popupHeading).text(data.name);
-            $(this.options.popupPrice).html($(data.price)).find('[id^="product-price-"]').attr('id', function() {
-                // change price element id, so price option won't update the tier price
-                return 'tier' + $(this).attr('id');
-            });
-            $(this.options.popupMsrp).html(data.msrp);
-            var width = $(this.options.popup).width();
-            var offsetX = e.pageX - (width / 2) + "px";
-            $(this.options.popup).css({left: offsetX, top: e.pageY}).addClass('active').show();
-            $(this.options.popupContent).show();
-            $(this.options.popupText).addClass(this.options.popupOnlyText).show();
-            $(this.options.popupTextWhatThis).hide();
-            return false;
-        }
-    });
-    
-    return $.mage.tierPrice;
-});
\ No newline at end of file
diff --git a/app/code/Magento/Catalog/view/frontend/requirejs-config.js b/app/code/Magento/Catalog/view/frontend/requirejs-config.js
index a840a196c6a89c0c60ffdef8d5f7d52384c0e723..3c0ffa65c8d43c9aa0f58c858871e703378b7b60 100644
--- a/app/code/Magento/Catalog/view/frontend/requirejs-config.js
+++ b/app/code/Magento/Catalog/view/frontend/requirejs-config.js
@@ -12,6 +12,7 @@ var config = {
             upsellProducts:         'Magento_Catalog/js/upsell-products',
             productListToolbarForm: 'Magento_Catalog/js/product/list/toolbar',
             tierPrice:              'Magento_Catalog/js/tier-price',
+            addToCart:              'Magento_Msrp/js/msrp',
             catalogGallery:         'Magento_Catalog/js/gallery',
             priceBox:               'Magento_Catalog/js/price-box',
             priceOptionDate:        'Magento_Catalog/js/price-option-date',
diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/compare/list.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/compare/list.phtml
index 3b912814e83a0d0ea59f46999345cec2484edf96..4515f3dda15221f9606721817db0d0e58a924b34 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/compare/list.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/compare/list.phtml
@@ -63,6 +63,7 @@
                                 <div class="actions-primary">
                                     <?php if ($_item->isSaleable()): ?>
                                         <form data-role="tocart-form" action="<?php /* @escapeNotVerified */ echo $this->helper('Magento\Catalog\Helper\Product\Compare')->getAddToCartUrl($_item); ?>" method="post">
+                                            <?php echo $block->getBlockHtml('formkey')?>
                                             <button type="submit" class="action tocart primary">
                                                 <span><?php /* @escapeNotVerified */ echo __('Add to Cart'); ?></span>
                                             </button>
diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/list.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/list.phtml
index 3244ac50741c37ce1afc4d59b77f14380b3159bb..a7598d7af05995d9115ee3df513e3b537d5adf8c 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/list.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/list.phtml
@@ -81,6 +81,7 @@ $_helper = $this->helper('Magento\Catalog\Helper\Output');
                                         <form data-role="tocart-form" action="<?php /* @escapeNotVerified */ echo $postParams['action']; ?>" method="post">
                                             <input type="hidden" name="product" value="<?php /* @escapeNotVerified */ echo $postParams['data']['product']; ?>">
                                             <input type="hidden" name="<?php /* @escapeNotVerified */ echo Action::PARAM_NAME_URL_ENCODED; ?>" value="<?php /* @escapeNotVerified */ echo $postParams['data'][Action::PARAM_NAME_URL_ENCODED]; ?>">
+                                            <?php echo $block->getBlockHtml('formkey')?>
                                             <button type="submit"
                                                     title="<?php echo $block->escapeHtml(__('Add to Cart')); ?>"
                                                     class="action tocart primary">
diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/form.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/form.phtml
index 6d66986c559be2478a80ae70f948e1a202d6118e..2b8498adc3e455dc83d9573a03dc4e0153927cf0 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/form.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/form.phtml
@@ -21,6 +21,7 @@
         <input type="hidden" name="product" value="<?php /* @escapeNotVerified */ echo $_product->getId() ?>" />
         <input type="hidden" name="selected_configurable_option" value="" />
         <input type="hidden" name="related_product" id="related-products-field" value="" />
+        <?php echo $block->getBlockHtml('formkey')?>
         <?php echo $block->getChildHtml('form_top'); ?>
         <?php if (!$block->hasOptions()):?>
             <?php echo $block->getChildHtml('product_info_form_content'); ?>
diff --git a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
index e2ec81f81a8a190449d024b22d5ced85e09ed4f7..d344cef700db1864b906bdd84276bd7b76ab7e9c 100644
--- a/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/Catalog/view/frontend/templates/product/view/gallery.phtml
@@ -12,49 +12,50 @@
  * @var $block \Magento\Catalog\Block\Product\View\Gallery
  */
 ?>
-<div class="gallery-placeholder"></div>
+<div class="gallery-placeholder _block-content-loading" data-gallery-role="gallery-placeholder">
+    <div data-role="loader" class="loading-mask">
+        <div class="loader">
+            <img src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('images/loader-1.gif'); ?>"
+                 alt="<?php /* @escapeNotVerified */ echo __('Loading...') ?>">
+        </div>
+    </div>
+</div>
 <script type="text/x-magento-init">
     {
-        ".gallery-placeholder": {
+        "[data-gallery-role=gallery-placeholder]": {
             "mage/gallery/gallery": {
                 "mixins":["magnifier/magnify"],
-                "magnifierOpts": {
-                    "enabled": <?php /* @escapeNotVerified */ echo $block->getVar("magnifier:enabled"); ?>,
-                    "eventType": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:eventType"); ?>",
-                    "width": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:width"); ?>",
-                    "height": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:height"); ?>",
-                    "top": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:top"); ?>",
-                    "left": "<?php /* @escapeNotVerified */ echo $block->getVar("magnifier:left"); ?>"
-                },
+                "magnifierOpts": <?php /* @escapeNotVerified */ echo $block->getMagnifier(); ?>,
                 "data": <?php /* @escapeNotVerified */ echo $block->getGalleryImagesJson(); ?>,
                 "options": {
-                    "nav": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery:nav"); ?>",
-                    "loop": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:loop"); ?>,
-                    "keyboard": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:keyboard"); ?>,
-                    "arrows": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:arrows"); ?>,
-                    "showCaption": <?php /* @escapeNotVerified */ echo $block->getVar("gallery:showCaption"); ?>,
+                    "nav": "<?php /* @escapeNotVerified */ echo $block->getVar("gallery/nav"); ?>",
+                    "loop": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/loop"); ?>,
+                    "keyboard": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/keyboard"); ?>,
+                    "arrows": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/arrows"); ?>,
+                    "allowfullscreen": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/allowfullscreen"); ?>,
+                    "showCaption": <?php /* @escapeNotVerified */ echo $block->getVar("gallery/caption"); ?>,
                     "width": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
                     "thumbwidth": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_small', 'width'); ?>,
                     "thumbheight": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_small', 'height')
                         ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>,
                     "height": <?php /* @escapeNotVerified */ echo $block->getImageAttribute('product_page_image_medium', 'height')
-                        ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>
+                        ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
+                    "transitionduration": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/transition/duration"); ?>,
+                    "transition": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/transition/effect"); ?>",
+                    "navarrows": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/navarrows"); ?>,
+                    "navtype": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navtype"); ?>",
+                    "navdir": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/navdir"); ?>"
+                },
+                "fullscreen": {
+                    "nav": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/nav"); ?>",
+                    "loop": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/loop"); ?>,
+                    "navdir": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/navdir"); ?>",
+                    "arrows": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/arrows"); ?>,
+                    "showCaption": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/caption"); ?>,
+                    "transitionduration": <?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/transition/duration"); ?>,
+                    "transition": "<?php /* @escapeNotVerified */  echo $block->getVar("gallery/fullscreen/transition/effect"); ?>"
                 },
-                "breakpoints": {
-                    "mobile": {
-                        "conditions": {
-                            "max-width": "767px"
-                        },
-                        "options": {
-                            "options": {
-                                "nav": "dots"
-                            },
-                            "magnifierOpts": {
-                                "enabled": false
-                            }
-                        }
-                    }
-                }
+                "breakpoints": <?php /* @escapeNotVerified */ echo $block->getBreakpoints(); ?>
             }
         }
     }
diff --git a/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js b/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js
index 688f836fb1035c9ef5e98edbcb31f10c59b3f581..5904b567278b7807e308694033e13339afb77d6f 100644
--- a/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js
+++ b/app/code/Magento/Catalog/view/frontend/web/js/product/list/toolbar.js
@@ -68,7 +68,9 @@ define([
                 parameters;
             for (var i = 0; i < urlParams.length; i++) {
                 parameters = urlParams[i].split('=');
-                paramData[parameters[0]] = parameters[1] !== undefined ? parameters[1] : '';
+                paramData[parameters[0]] = parameters[1] !== undefined
+                    ? window.decodeURIComponent(parameters[1].replace(/\+/g, '%20'))
+                    : '';
             }
             paramData[paramName] = paramValue;
             if (paramValue == defaultValue) {
@@ -81,4 +83,4 @@ define([
     });
 
     return $.mage.productListToolbarForm;
-});
\ No newline at end of file
+});
diff --git a/app/code/Magento/CatalogImportExport/Model/Export/Product.php b/app/code/Magento/CatalogImportExport/Model/Export/Product.php
index 9610475c7ded6ae30f9d85d62bab8810e779d9c2..5ba8ed055cd25afb032289d36d94856909e3ff07 100644
--- a/app/code/Magento/CatalogImportExport/Model/Export/Product.php
+++ b/app/code/Magento/CatalogImportExport/Model/Export/Product.php
@@ -130,14 +130,14 @@ class Product extends \Magento\ImportExport\Model\Export\Entity\AbstractEntity
     /**
      * Product collection
      *
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_entityCollectionFactory;
 
     /**
      * Product collection
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     protected $_entityCollection;
 
@@ -166,37 +166,37 @@ class Product extends \Magento\ImportExport\Model\Export\Entity\AbstractEntity
     protected $_logger;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\ProductFactory
+     * @var \Magento\Catalog\Model\ResourceModel\ProductFactory
      */
     protected $_productFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection
      */
     protected $_attrSetColFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Collection
      */
     protected $_categoryColFactory;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resourceModel;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory
      */
     protected $_itemFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Option\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Option\Collection
      */
     protected $_optionColFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     protected $_attributeColFactory;
 
@@ -310,17 +310,17 @@ class Product extends \Magento\ImportExport\Model\Export\Entity\AbstractEntity
     /**
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Eav\Model\Config $config
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Psr\Log\LoggerInterface $logger
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @param \Magento\ImportExport\Model\Export\ConfigInterface $exportConfig
-     * @param \Magento\Catalog\Model\Resource\ProductFactory $productFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFactory
-     * @param \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryColFactory
-     * @param \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory $itemFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Option\CollectionFactory $optionColFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeColFactory
+     * @param \Magento\Catalog\Model\ResourceModel\ProductFactory $productFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryColFactory
+     * @param \Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory $itemFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Option\CollectionFactory $optionColFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeColFactory
      * @param Product\Type\Factory $_typeFactory
      * @param \Magento\Catalog\Model\Product\LinkTypeProvider $linkTypeProvider
      * @param \Magento\CatalogImportExport\Model\Export\RowCustomizerInterface $rowCustomizer
@@ -329,17 +329,17 @@ class Product extends \Magento\ImportExport\Model\Export\Entity\AbstractEntity
     public function __construct(
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Eav\Model\Config $config,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Psr\Log\LoggerInterface $logger,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $collectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory,
         \Magento\ImportExport\Model\Export\ConfigInterface $exportConfig,
-        \Magento\Catalog\Model\Resource\ProductFactory $productFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFactory,
-        \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryColFactory,
-        \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory $itemFactory,
-        \Magento\Catalog\Model\Resource\Product\Option\CollectionFactory $optionColFactory,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeColFactory,
+        \Magento\Catalog\Model\ResourceModel\ProductFactory $productFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFactory,
+        \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryColFactory,
+        \Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory $itemFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Option\CollectionFactory $optionColFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeColFactory,
         \Magento\CatalogImportExport\Model\Export\Product\Type\Factory $_typeFactory,
         \Magento\Catalog\Model\Product\LinkTypeProvider $linkTypeProvider,
         \Magento\CatalogImportExport\Model\Export\RowCustomizerInterface $rowCustomizer
@@ -390,7 +390,7 @@ class Product extends \Magento\ImportExport\Model\Export\Entity\AbstractEntity
     protected function initCategories()
     {
         $collection = $this->_categoryColFactory->create()->addNameToResult();
-        /* @var $collection \Magento\Catalog\Model\Resource\Category\Collection */
+        /* @var $collection \Magento\Catalog\Model\ResourceModel\Category\Collection */
         foreach ($collection as $category) {
             $structure = preg_split('#/+#', $category->getPath());
             $pathSize = count($structure);
@@ -1179,7 +1179,7 @@ class Product extends \Magento\ImportExport\Model\Export\Entity\AbstractEntity
                 continue;
             }
             $options = $this->_optionColFactory->create();
-            /* @var \Magento\Catalog\Model\Resource\Product\Option\Collection $options*/
+            /* @var \Magento\Catalog\Model\ResourceModel\Product\Option\Collection $options*/
             $options->addOrder('sort_order');
             $options->reset()->addOrder('sort_order')->addTitleToResult(
                 $storeId
@@ -1227,10 +1227,10 @@ class Product extends \Magento\ImportExport\Model\Export\Entity\AbstractEntity
     /**
      * Clean up already loaded attribute collection.
      *
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Collection $collection
-     * @return \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $collection
+     * @return \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
      */
-    public function filterAttributeCollection(\Magento\Eav\Model\Resource\Entity\Attribute\Collection $collection)
+    public function filterAttributeCollection(\Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $collection)
     {
         $validTypes = array_keys($this->_productTypeModels);
         $validTypes = array_combine($validTypes, $validTypes);
@@ -1262,7 +1262,7 @@ class Product extends \Magento\ImportExport\Model\Export\Entity\AbstractEntity
     /**
      * Entity attributes collection getter.
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     public function getAttributeCollection()
     {
diff --git a/app/code/Magento/CatalogImportExport/Model/Export/Product/Type/AbstractType.php b/app/code/Magento/CatalogImportExport/Model/Export/Product/Type/AbstractType.php
index 499fc5a40683556f9b4ac03fe92841d4058625e9..538ef39578978015fcf8fce39e0ab15c30bd0688 100644
--- a/app/code/Magento/CatalogImportExport/Model/Export/Product/Type/AbstractType.php
+++ b/app/code/Magento/CatalogImportExport/Model/Export/Product/Type/AbstractType.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CatalogImportExport\Model\Export\Product\Type;
 
-use Magento\Catalog\Model\Resource\Eav\Attribute;
+use Magento\Catalog\Model\ResourceModel\Eav\Attribute;
 
 /**
  * Export entity product type abstract model
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product.php b/app/code/Magento/CatalogImportExport/Model/Import/Product.php
index 92436b16575d93dd9146777176b5a2db590b4c61..a2a98fcdbc51ed0b8c57a0a779da126b43bdff50 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Product.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Product.php
@@ -10,8 +10,8 @@ namespace Magento\CatalogImportExport\Model\Import;
 
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface as ValidatorInterface;
-use Magento\Framework\Model\Resource\Db\TransactionManagerInterface;
-use Magento\Framework\Model\Resource\Db\ObjectRelationProcessor;
+use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface;
+use Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor;
 use Magento\Framework\Stdlib\DateTime;
 use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingError;
 use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface;
@@ -433,17 +433,17 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     protected $_importConfig;
 
     /**
-     * @var \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceFactory
+     * @var \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModelFactory
      */
     protected $_resourceFactory;
 
     /**
-     * @var \Magento\CatalogImportExport\Model\Import\Proxy\Product\Resource
+     * @var \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModel
      */
     protected $_resource;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory
      */
     protected $_setColFactory;
 
@@ -453,7 +453,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     protected $_productTypeFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\LinkFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\LinkFactory
      */
     protected $_linkFactory;
 
@@ -473,7 +473,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     protected $_mediaDirectory;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory
      */
     protected $_stockResItemFac;
 
@@ -569,10 +569,10 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     /**
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
      * @param \Magento\ImportExport\Helper\Data $importExportData
-     * @param \Magento\ImportExport\Model\Resource\Import\Data $importData
+     * @param \Magento\ImportExport\Model\ResourceModel\Import\Data $importData
      * @param \Magento\Eav\Model\Config $config
-     * @param \Magento\Framework\App\Resource $resource
-     * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Framework\App\ResourceConnection $resource
+     * @param \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param ProcessingErrorAggregatorInterface $errorAggregator
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
@@ -583,13 +583,13 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
      * @param \Magento\ImportExport\Model\Import\Config $importConfig
      * @param Proxy\Product\ResourceFactory $resourceFactory
      * @param Product\OptionFactory $optionFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setColFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setColFactory
      * @param Product\Type\Factory $productTypeFactory
-     * @param \Magento\Catalog\Model\Resource\Product\LinkFactory $linkFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\LinkFactory $linkFactory
      * @param Proxy\ProductFactory $proxyProdFactory
      * @param UploaderFactory $uploaderFactory
      * @param \Magento\Framework\Filesystem $filesystem
-     * @param \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory $stockResItemFac
+     * @param \Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory $stockResItemFac
      * @param DateTime\TimezoneInterface $localeDate
      * @param DateTime $dateTime
      * @param \Psr\Log\LoggerInterface $logger
@@ -609,10 +609,10 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     public function __construct(
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         \Magento\ImportExport\Helper\Data $importExportData,
-        \Magento\ImportExport\Model\Resource\Import\Data $importData,
+        \Magento\ImportExport\Model\ResourceModel\Import\Data $importData,
         \Magento\Eav\Model\Config $config,
-        \Magento\Framework\App\Resource $resource,
-        \Magento\ImportExport\Model\Resource\Helper $resourceHelper,
+        \Magento\Framework\App\ResourceConnection $resource,
+        \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Stdlib\StringUtils $string,
         ProcessingErrorAggregatorInterface $errorAggregator,
         \Magento\Framework\Event\ManagerInterface $eventManager,
@@ -621,15 +621,15 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
         \Magento\CatalogInventory\Model\Spi\StockStateProviderInterface $stockStateProvider,
         \Magento\Catalog\Helper\Data $catalogData,
         \Magento\ImportExport\Model\Import\Config $importConfig,
-        \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceFactory $resourceFactory,
+        \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModelFactory $resourceFactory,
         \Magento\CatalogImportExport\Model\Import\Product\OptionFactory $optionFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setColFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setColFactory,
         \Magento\CatalogImportExport\Model\Import\Product\Type\Factory $productTypeFactory,
-        \Magento\Catalog\Model\Resource\Product\LinkFactory $linkFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\LinkFactory $linkFactory,
         \Magento\CatalogImportExport\Model\Import\Proxy\ProductFactory $proxyProdFactory,
         \Magento\CatalogImportExport\Model\Import\UploaderFactory $uploaderFactory,
         \Magento\Framework\Filesystem $filesystem,
-        \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory $stockResItemFac,
+        \Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory $stockResItemFac,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         DateTime $dateTime,
         \Psr\Log\LoggerInterface $logger,
@@ -741,7 +741,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     public function getMediaGalleryAttributeId()
     {
         if (!$this->_mediaGalleryAttributeId) {
-            /** @var $resource \Magento\CatalogImportExport\Model\Import\Proxy\Product\Resource */
+            /** @var $resource \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModel */
             $resource = $this->_resourceFactory->create();
             $this->_mediaGalleryAttributeId = $resource->getAttribute(self::MEDIA_GALLERY_ATTRIBUTE_CODE)->getId();
         }
@@ -1319,7 +1319,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
      */
     protected function _saveProducts()
     {
-        /** @var $resource \Magento\CatalogImportExport\Model\Import\Proxy\Product\Resource */
+        /** @var $resource \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModel */
         $resource = $this->_resourceFactory->create();
         $priceIsGlobal = $this->_catalogData->isPriceGlobal();
         $productLimit = null;
@@ -1803,7 +1803,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
                         'value' => $insertValue['value'],
                     ];
                     $valueToProductId[$insertValue['value']] = $productId;
-                    $imageNames = $insertValue['value'];
+                    $imageNames[] = $insertValue['value'];
                     $multiInsertData[] = $valueArr;
                     $insertedGalleryImgs[] = $insertValue['value'];
                 }
@@ -1902,7 +1902,7 @@ class Product extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     protected function _saveStockItem()
     {
         $indexer = $this->indexerRegistry->get('catalog_product_category');
-        /** @var $stockResource \Magento\CatalogInventory\Model\Resource\Stock\Item */
+        /** @var $stockResource \Magento\CatalogInventory\Model\ResourceModel\Stock\Item */
         $stockResource = $this->_stockResItemFac->create();
         $entityTable = $stockResource->getMainTable();
         while ($bunch = $this->_dataSourceModel->getNextBunch()) {
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/CategoryProcessor.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/CategoryProcessor.php
index 8fa6ecc7be9459c9a06257151972b9903a3a62df..6d4ba7ee1833580f4dc503ac782566516a68f9bc 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Product/CategoryProcessor.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/CategoryProcessor.php
@@ -18,7 +18,7 @@ class CategoryProcessor
     const DELIMITER_CATEGORY = '/';
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory
      */
     protected $categoryColFactory;
 
@@ -44,11 +44,11 @@ class CategoryProcessor
     protected $categoryFactory;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryColFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryColFactory
      * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\Category\CollectionFactory $categoryColFactory,
+        \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryColFactory,
         \Magento\Catalog\Model\CategoryFactory $categoryFactory
     ) {
         $this->categoryColFactory = $categoryColFactory;
@@ -66,7 +66,7 @@ class CategoryProcessor
             $collection->addAttributeToSelect('name')
                 ->addAttributeToSelect('url_key')
                 ->addAttributeToSelect('url_path');
-            /* @var $collection \Magento\Catalog\Model\Resource\Category\Collection */
+            /* @var $collection \Magento\Catalog\Model\ResourceModel\Category\Collection */
             foreach ($collection as $category) {
                 $structure = explode(self::DELIMITER_CATEGORY, $category->getPath());
                 $pathSize = count($structure);
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/Option.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/Option.php
index b8a629ca16d54bcbfbe6f684cf24c2cdd24d9164..5ca6372ea948edc0dcb0b5eb91c8b5f88a20e4f9 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Product/Option.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/Option.php
@@ -9,7 +9,7 @@
 namespace Magento\CatalogImportExport\Model\Import\Product;
 
 use Magento\CatalogImportExport\Model\Import\Product;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface;
 
 /**
@@ -73,7 +73,7 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     /**
      * Instance of import/export resource helper
      *
-     * @var \Magento\ImportExport\Model\Resource\Helper
+     * @var \Magento\ImportExport\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
@@ -146,7 +146,7 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     /**
      * DB data source model
      *
-     * @var \Magento\ImportExport\Model\Resource\Import\Data
+     * @var \Magento\ImportExport\Model\ResourceModel\Import\Data
      */
     protected $_dataSourceModel;
 
@@ -210,7 +210,7 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     /**
      * Product options collection
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Option\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Option\Collection
      */
     protected $_optionCollection;
 
@@ -244,7 +244,7 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     /**
      * Collection by pages iterator
      *
-     * @var \Magento\ImportExport\Model\Resource\CollectionByPagesIterator
+     * @var \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIterator
      */
     protected $_byPagesIterator;
 
@@ -275,7 +275,7 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     protected $_importFactory;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
@@ -290,12 +290,12 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     protected $_productFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Option\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Option\CollectionFactory
      */
     protected $_optionColFactory;
 
     /**
-     * @var \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory
+     * @var \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory
      */
     protected $_colIteratorFactory;
 
@@ -305,13 +305,13 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
     protected $dateTime;
 
     /**
-     * @param \Magento\ImportExport\Model\Resource\Import\Data $importData
-     * @param Resource $resource
-     * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
+     * @param \Magento\ImportExport\Model\ResourceModel\Import\Data $importData
+     * @param ResourceConnection $resource
+     * @param \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Store\Model\StoreManagerInterface $_storeManager
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
-     * @param \Magento\Catalog\Model\Resource\Product\Option\CollectionFactory $optionColFactory
-     * @param \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $colIteratorFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Option\CollectionFactory $optionColFactory
+     * @param \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $colIteratorFactory
      * @param \Magento\Catalog\Helper\Data $catalogData
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
@@ -322,13 +322,13 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
-        \Magento\ImportExport\Model\Resource\Import\Data $importData,
-        \Magento\Framework\App\Resource $resource,
-        \Magento\ImportExport\Model\Resource\Helper $resourceHelper,
+        \Magento\ImportExport\Model\ResourceModel\Import\Data $importData,
+        \Magento\Framework\App\ResourceConnection $resource,
+        \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Store\Model\StoreManagerInterface $_storeManager,
         \Magento\Catalog\Model\ProductFactory $productFactory,
-        \Magento\Catalog\Model\Resource\Product\Option\CollectionFactory $optionColFactory,
-        \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $colIteratorFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Option\CollectionFactory $optionColFactory,
+        \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $colIteratorFactory,
         \Magento\Catalog\Helper\Data $catalogData,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\Stdlib\DateTime $dateTime,
@@ -541,7 +541,7 @@ class Option extends \Magento\ImportExport\Model\Import\Entity\AbstractEntity
                         ];
                     }
                 };
-                /** @var $collection \Magento\Catalog\Model\Resource\Product\Option\Collection */
+                /** @var $collection \Magento\Catalog\Model\ResourceModel\Product\Option\Collection */
                 $this->_optionCollection->reset();
                 $this->_optionCollection->getSelect()->join(
                     ['option_title' => $optionTitleTable],
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/TaxClassProcessor.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/TaxClassProcessor.php
index 3326e7d6d82ebfa314916894119f63fe35d7de62..f0fc8338d31f9ea21c946db03d0d05e7bc2d91e5 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Product/TaxClassProcessor.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/TaxClassProcessor.php
@@ -25,7 +25,7 @@ class TaxClassProcessor
     /**
      * Instance of tax class collection factory.
      *
-     * @var \Magento\Tax\Model\Resource\TaxClass\CollectionFactory
+     * @var \Magento\Tax\Model\ResourceModel\TaxClass\CollectionFactory
      */
     protected $collectionFactory;
 
@@ -37,11 +37,11 @@ class TaxClassProcessor
     protected $classModelFactory;
 
     /**
-     * @param \Magento\Tax\Model\Resource\TaxClass\CollectionFactory $collectionFactory
+     * @param \Magento\Tax\Model\ResourceModel\TaxClass\CollectionFactory $collectionFactory
      * @param \Magento\Tax\Model\ClassModelFactory $classModelFactory
      */
     public function __construct(
-        \Magento\Tax\Model\Resource\TaxClass\CollectionFactory $collectionFactory,
+        \Magento\Tax\Model\ResourceModel\TaxClass\CollectionFactory $collectionFactory,
         \Magento\Tax\Model\ClassModelFactory $classModelFactory
     ) {
         $this->collectionFactory = $collectionFactory;
@@ -59,7 +59,7 @@ class TaxClassProcessor
         if (empty($this->taxClasses)) {
             $collection = $this->collectionFactory->create();
             $collection->addFieldToFilter('class_type', ClassModel::TAX_CLASS_TYPE_PRODUCT);
-            /* @var $collection \Magento\Tax\Model\Resource\TaxClass\Collection */
+            /* @var $collection \Magento\Tax\Model\ResourceModel\TaxClass\Collection */
             foreach ($collection as $taxClass) {
                 $this->taxClasses[$taxClass->getClassName()] = $taxClass->getId();
             }
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractType.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractType.php
index 7fe262fbf57c0721b637317c4e1286e7f8b5d5b6..927411629c942688e17a3ce5fcae97b34c0c76bb 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractType.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractType.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CatalogImportExport\Model\Import\Product\Type;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\CatalogImportExport\Model\Import\Product\RowValidatorInterface;
 use Magento\CatalogImportExport\Model\Import\Product;
 
@@ -107,17 +107,17 @@ abstract class AbstractType
     protected $_type;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory
      */
     protected $_attrSetColFac;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     protected $_prodAttrColFac;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
@@ -127,16 +127,16 @@ abstract class AbstractType
     protected $connection;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFac
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $prodAttrColFac
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param array $params
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFac,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $prodAttrColFac,
+        \Magento\Framework\App\ResourceConnection $resource,
         array $params
     ) {
         $this->_attrSetColFac = $attrSetColFac;
@@ -480,9 +480,9 @@ abstract class AbstractType
         foreach ($this->_getProductAttributes($rowData) as $attrCode => $attrParams) {
             if (!$attrParams['is_static']) {
                 if (isset($rowData[$attrCode]) && strlen($rowData[$attrCode])) {
-                    $resultAttrs[$attrCode] = 'select' == $attrParams['type'] ? $attrParams['options'][strtolower(
-                        $rowData[$attrCode]
-                    )] : $rowData[$attrCode];
+                    $resultAttrs[$attrCode] = in_array($attrParams['type'], ['select', 'boolean'])
+                        ? $attrParams['options'][strtolower($rowData[$attrCode])]
+                        : $rowData[$attrCode];
                     if ('multiselect' == $attrParams['type']) {
                         $resultAttrs[$attrCode] = [];
                         foreach (explode(Product::PSEUDO_MULTI_LINE_SEPARATOR, $rowData[$attrCode]) as $value) {
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Product/Validator.php b/app/code/Magento/CatalogImportExport/Model/Import/Product/Validator.php
index 980535ce2d8b506d44ca91a8d6890e08db37cfe3..89230e1da346389b6618d4db55ba1b48c28a2182 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Product/Validator.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Product/Validator.php
@@ -141,6 +141,7 @@ class Validator extends AbstractValidator implements RowValidatorInterface
                 $valid = $this->numericValidation($attrCode, $attrParams['type']);
                 break;
             case 'select':
+            case 'boolean':
             case 'multiselect':
                 $values = explode(Product::PSEUDO_MULTI_LINE_SEPARATOR, $rowData[$attrCode]);
                 $valid = true;
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Proxy/Product/Resource.php b/app/code/Magento/CatalogImportExport/Model/Import/Proxy/Product/ResourceModel.php
similarity index 79%
rename from app/code/Magento/CatalogImportExport/Model/Import/Proxy/Product/Resource.php
rename to app/code/Magento/CatalogImportExport/Model/Import/Proxy/Product/ResourceModel.php
index 0f68ad9e99503a7932d2407dd79bd15d55c870f5..c5d621bed9d449addf0e583508a8beedb2120229 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Proxy/Product/Resource.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Proxy/Product/ResourceModel.php
@@ -11,6 +11,6 @@
  */
 namespace Magento\CatalogImportExport\Model\Import\Proxy\Product;
 
-class Resource extends \Magento\Catalog\Model\Resource\Product
+class ResourceModel extends \Magento\Catalog\Model\ResourceModel\Product
 {
 }
diff --git a/app/code/Magento/CatalogImportExport/Model/Import/Uploader.php b/app/code/Magento/CatalogImportExport/Model/Import/Uploader.php
index a78e978d84c6fdc2ae12794a11bc309bd12ea4ce..dc0263e99d4f093bb65634c7f3eaeb9d12447caa 100644
--- a/app/code/Magento/CatalogImportExport/Model/Import/Uploader.php
+++ b/app/code/Magento/CatalogImportExport/Model/Import/Uploader.php
@@ -314,4 +314,12 @@ class Uploader extends \Magento\MediaStorage\Model\File\Uploader
             return false;
         }
     }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function chmod($file)
+    {
+        return;
+    }
 }
diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Export/ProductTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Export/ProductTest.php
index b6333d9bcb301ebf537b96dbc445af9ed869b690..8b0645827715ab2bb0ce5bbfbe814bf5b496870f 100644
--- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Export/ProductTest.php
+++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Export/ProductTest.php
@@ -24,7 +24,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     protected $config;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -39,7 +39,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     protected $logger;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collection;
 
@@ -54,32 +54,32 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     protected $exportConfig;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\ProductFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\ProductFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $productFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $attrSetColFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $categoryColFactory;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $itemFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Option\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $optionColFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $attributeColFactory;
 
@@ -141,7 +141,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         $this->config->expects($this->once())->method('getEntityType')->willReturn($type);
 
         $this->resource = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -164,7 +164,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->collection = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\CollectionFactory',
+            '\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory',
             [],
             [],
             '',
@@ -194,7 +194,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->productFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\ProductFactory',
+            'Magento\Catalog\Model\ResourceModel\ProductFactory',
             [
                 'create',
                 'getTypeId',
@@ -205,7 +205,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->attrSetColFactory = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory',
             [
                 'create',
                 'setEntityTypeFilter',
@@ -216,7 +216,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->categoryColFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Category\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Category\CollectionFactory',
             [
                 'create',
                 'addNameToResult',
@@ -227,14 +227,14 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->itemFactory = $this->getMock(
-            'Magento\CatalogInventory\Model\Resource\Stock\ItemFactory',
+            'Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory',
             [],
             [],
             '',
             false
         );
         $this->optionColFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Option\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Option\CollectionFactory',
             [],
             [],
             '',
@@ -242,7 +242,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->attributeColFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory',
             [],
             [],
             '',
diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/CategoryProcessorTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/CategoryProcessorTest.php
index e4ebc3069ef24764838ac8a6d502cd2f60deeee7..c6b5fd5570d265f89e344fa6eebf7cc1a0e47f20 100644
--- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/CategoryProcessorTest.php
+++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/CategoryProcessorTest.php
@@ -59,7 +59,7 @@ class CategoryProcessorTest extends \PHPUnit_Framework_TestCase
 
         $categoryCollection =
             $this->objectManagerHelper->getCollectionMock(
-                'Magento\Catalog\Model\Resource\Category\Collection',
+                'Magento\Catalog\Model\ResourceModel\Category\Collection',
                 [
                     self::PARENT_CATEGORY_ID => $parentCategory,
                     self::CHILD_CATEGORY_ID => $childCategory,
@@ -82,7 +82,7 @@ class CategoryProcessorTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnSelf());
 
         $categoryColFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Category\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Category\CollectionFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/TaxClassProcessorTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/TaxClassProcessorTest.php
index 3a51af93e41586094e6711b25b313230bef339a0..ac5e9cf3e002a9d93cac70c6a3c726a6055f14c7 100644
--- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/TaxClassProcessorTest.php
+++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/TaxClassProcessorTest.php
@@ -47,12 +47,12 @@ class TaxClassProcessorTest extends \PHPUnit_Framework_TestCase
 
         $taxClassCollection =
             $this->objectManagerHelper->getCollectionMock(
-                'Magento\Tax\Model\Resource\TaxClass\Collection',
+                'Magento\Tax\Model\ResourceModel\TaxClass\Collection',
                 [$taxClass]
             );
 
         $taxClassCollectionFactory = $this->getMock(
-            'Magento\Tax\Model\Resource\TaxClass\CollectionFactory',
+            'Magento\Tax\Model\ResourceModel\TaxClass\CollectionFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/AbstractTypeTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/AbstractTypeTest.php
index 4b07ee981af02a31b02320afabe6854adca85f9d..5e427a466f279a8f31a0df707b34186cb9478458 100644
--- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/AbstractTypeTest.php
+++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/AbstractTypeTest.php
@@ -32,7 +32,7 @@ class AbstractTypeTest extends \PHPUnit_Framework_TestCase
     protected $objectManagerHelper;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -61,21 +61,21 @@ class AbstractTypeTest extends \PHPUnit_Framework_TestCase
             false
         );
         $attrSetColFactory = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $attrSetCollection = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection',
             [],
             [],
             '',
             false
         );
         $attrColFactory = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory',
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory',
             ['create'],
             [],
             '',
@@ -89,7 +89,7 @@ class AbstractTypeTest extends \PHPUnit_Framework_TestCase
             false
         );
         $attrCollection = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Collection',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection',
             [
                 'addFieldToFilter',
             ],
@@ -117,40 +117,59 @@ class AbstractTypeTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-
-        $entityAttributes = [[
-            'attribute_id' => 'attribute_id',
-            'attribute_set_name' => 'attributeSetName',
-        ]];
-
-        $this->entityModel->expects($this->any())->method('getEntityTypeId')->willReturn(3);
-        $this->entityModel->expects($this->any())->method('getAttributeOptions')->willReturn(['option1', 'option2']);
-        $attrSetColFactory->expects($this->any())->method('create')->willReturn($attrSetCollection);
-        $attrSetCollection->expects($this->any())->method('setEntityTypeFilter')->willReturn([$attributeSet]);
-        $attrColFactory->expects($this->any())->method('create')->willReturn($attrCollection);
-        $attrCollection->expects($this->any())->method('setAttributeSetFilter')->willReturn([$attribute]);
-        $attributeSet->expects($this->any())->method('getId')->willReturn(1);
-        $attributeSet->expects($this->any())->method('getAttributeSetName')->willReturn('attribute_set_name');
-        $attribute->expects($this->any())->method('getAttributeCode')->willReturn('attr_code');
-        $attribute->expects($this->any())->method('getId')->willReturn('1');
         $attribute->expects($this->any())->method('getIsVisible')->willReturn(true);
         $attribute->expects($this->any())->method('getIsGlobal')->willReturn(true);
         $attribute->expects($this->any())->method('getIsRequired')->willReturn(true);
         $attribute->expects($this->any())->method('getIsUnique')->willReturn(true);
         $attribute->expects($this->any())->method('getFrontendLabel')->willReturn('frontend_label');
-        $attribute->expects($this->any())->method('isStatic')->willReturn(true);
         $attribute->expects($this->any())->method('getApplyTo')->willReturn(['simple']);
         $attribute->expects($this->any())->method('getDefaultValue')->willReturn('default_value');
         $attribute->expects($this->any())->method('usesSource')->willReturn(true);
-        $attribute->expects($this->any())->method('getFrontendInput')->willReturn('multiselect');
+
+
+        $entityAttributes = [
+            [
+                'attribute_id' => 'attribute_id',
+                'attribute_set_name' => 'attributeSetName',
+            ],
+            [
+                'attribute_id' => 'boolean_attribute',
+                'attribute_set_name' => 'attributeSetName'
+            ]
+        ];
+        $attribute1 = clone $attribute;
+        $attribute2 = clone $attribute;
+
+        $attribute1->expects($this->any())->method('getId')->willReturn('1');
+        $attribute1->expects($this->any())->method('getAttributeCode')->willReturn('attr_code');
+        $attribute1->expects($this->any())->method('getFrontendInput')->willReturn('multiselect');
+        $attribute1->expects($this->any())->method('isStatic')->willReturn(true);
+
+        $attribute2->expects($this->any())->method('getId')->willReturn('2');
+        $attribute2->expects($this->any())->method('getAttributeCode')->willReturn('boolean_attribute');
+        $attribute2->expects($this->any())->method('getFrontendInput')->willReturn('boolean');
+        $attribute2->expects($this->any())->method('isStatic')->willReturn(false);
+
+        $this->entityModel->expects($this->any())->method('getEntityTypeId')->willReturn(3);
+        $this->entityModel->expects($this->any())->method('getAttributeOptions')->willReturnOnConsecutiveCalls(
+            ['option1', 'option2'],
+            ['yes' => 1, 'no' => 0]
+        );
+        $attrSetColFactory->expects($this->any())->method('create')->willReturn($attrSetCollection);
+        $attrSetCollection->expects($this->any())->method('setEntityTypeFilter')->willReturn([$attributeSet]);
+        $attrColFactory->expects($this->any())->method('create')->willReturn($attrCollection);
+        $attrCollection->expects($this->any())->method('setAttributeSetFilter')->willReturn([$attribute1, $attribute2]);
+        $attributeSet->expects($this->any())->method('getId')->willReturn(1);
+        $attributeSet->expects($this->any())->method('getAttributeSetName')->willReturn('attribute_set_name');
+
         $attrCollection
             ->expects($this->any())
             ->method('addFieldToFilter')
             ->with(
                 'main_table.attribute_id',
-                ['in' => ['attribute_id']]
+                ['in' => ['attribute_id', 'boolean_attribute']]
             )
-            ->willReturn([$attribute]);
+            ->willReturn([$attribute1, $attribute2]);
 
         $this->connection = $this->getMock(
             'Magento\Framework\DB\Adapter\Pdo\Mysql',
@@ -195,7 +214,7 @@ class AbstractTypeTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($entityAttributes));
 
         $this->resource = $this->getMock(
-            '\Magento\Framework\App\Resource',
+            '\Magento\Framework\App\ResourceConnection',
             [
                 'getConnection',
                 'getTableName',
@@ -343,6 +362,7 @@ class AbstractTypeTest extends \PHPUnit_Framework_TestCase
     /**
      * @param $object
      * @param $property
+     * @return mixed
      */
     protected function getPropertyValue(&$object, $property)
     {
@@ -366,4 +386,14 @@ class AbstractTypeTest extends \PHPUnit_Framework_TestCase
         $reflectionProperty->setValue($object, $value);
         return $object;
     }
+
+    public function testPrepareAttributesWithDefaultValueForSave()
+    {
+        $rowData = [
+            '_attribute_set' => 'attributeSetName',
+            'boolean_attribute' => 'Yes'
+        ];
+        $result = $this->simpleType->prepareAttributesWithDefaultValueForSave($rowData);
+        $this->assertEquals(['boolean_attribute' => 1], $result);
+    }
 }
diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/OptionTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/OptionTest.php
index da52456ccaca785c0b8211f9b4fc7897619ba9d6..99837df3179e026176913db6d11cb98bb893920e 100644
--- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/OptionTest.php
+++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Type/OptionTest.php
@@ -233,20 +233,20 @@ class OptionTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractIm
         $scopeConfig = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface');
 
         $modelClassArgs = [
-            $this->getMock('Magento\ImportExport\Model\Resource\Import\Data', [], [], '', false),
-            $this->getMock('Magento\Framework\App\Resource', [], [], '', false),
-            $this->getMock('Magento\ImportExport\Model\Resource\Helper', [], [], '', false),
+            $this->getMock('Magento\ImportExport\Model\ResourceModel\Import\Data', [], [], '', false),
+            $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false),
+            $this->getMock('Magento\ImportExport\Model\ResourceModel\Helper', [], [], '', false),
             $this->getMock('Magento\Store\Model\StoreManagerInterface', [], [], '', false),
             $this->getMock('Magento\Catalog\Model\ProductFactory', [], [], '', false),
             $this->getMock(
-                'Magento\Catalog\Model\Resource\Product\Option\CollectionFactory',
+                'Magento\Catalog\Model\ResourceModel\Product\Option\CollectionFactory',
                 [],
                 [],
                 '',
                 false
             ),
             $this->getMock(
-                'Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory',
+                'Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory',
                 [],
                 [],
                 '',
diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Validator/TierPriceTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Validator/TierPriceTest.php
index 94dcf6ee2cfbaa27bcee9ae389c1e77e67b21bde..d65197b9ebefd1e4f5aca9d1891b9d9a1b04d408 100644
--- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Validator/TierPriceTest.php
+++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/Validator/TierPriceTest.php
@@ -28,7 +28,7 @@ class TierPriceTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->groupRepositoryInterface = $this->getMock(
-            'Magento\Customer\Model\Resource\GroupRepository',
+            'Magento\Customer\Model\ResourceModel\GroupRepository',
             [],
             [],
             '',
diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/ValidatorTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/ValidatorTest.php
index 8e6df5186c075a18afaca2bc0aa9c2647389f448..3541ccbb99338202ea5c1fdd73f1dea54d63bfab 100644
--- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/ValidatorTest.php
+++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/Product/ValidatorTest.php
@@ -72,6 +72,25 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
         $this->validator->init($this->context);
     }
 
+    public function testIsBooleanAttributeValid()
+    {
+        $this->context->expects($this->any())->method('getBehavior')
+            ->willReturn(\Magento\ImportExport\Model\Import::BEHAVIOR_REPLACE);
+        $result = $this->validator->isAttributeValid(
+            'boolean_attribute',
+            [
+                'type' => 'boolean',
+                'apply_to' => ['simple'],
+                'is_required' => false
+            ],
+            [
+                'product_type' => 'simple',
+                'boolean_attribute' => 'Yes'
+            ]
+        );
+        $this->assertTrue($result);
+    }
+
     public function testIsValidCorrect()
     {
         $value = ['product_type' => 'simple'];
diff --git a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php
index 8f500954457d59282df1ec32ba5e58ebee870841..d5fbfaf8c9e8c693c690a26a6985b5525a166508 100644
--- a/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php
+++ b/app/code/Magento/CatalogImportExport/Test/Unit/Model/Import/ProductTest.php
@@ -32,13 +32,13 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
     /** @var \Magento\Framework\Json\Helper\Data|\PHPUnit_Framework_MockObject_MockObject */
     protected $jsonHelper;
 
-    /** @var \Magento\ImportExport\Model\Resource\Import\Data|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\ImportExport\Model\ResourceModel\Import\Data|\PHPUnit_Framework_MockObject_MockObject */
     protected $_dataSourceModel;
 
-    /** @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject */
     protected $resource;
 
-    /** @var \Magento\ImportExport\Model\Resource\Helper|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\ImportExport\Model\ResourceModel\Helper|\PHPUnit_Framework_MockObject_MockObject */
     protected $_resourceHelper;
 
     /** @var \Magento\Framework\Stdlib\StringUtils|\PHPUnit_Framework_MockObject_MockObject */
@@ -71,13 +71,13 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
     /** @var \Magento\ImportExport\Helper\Data|\PHPUnit_Framework_MockObject_MockObject */
     protected $importExportData;
 
-    /** @var \Magento\ImportExport\Model\Resource\Import\Data|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\ImportExport\Model\ResourceModel\Import\Data|\PHPUnit_Framework_MockObject_MockObject */
     protected $importData;
 
     /** @var \Magento\Eav\Model\Config|\PHPUnit_Framework_MockObject_MockObject */
     protected $config;
 
-    /** @var \Magento\ImportExport\Model\Resource\Helper|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\ImportExport\Model\ResourceModel\Helper|\PHPUnit_Framework_MockObject_MockObject */
     protected $resourceHelper;
 
     /** @var \Magento\Catalog\Helper\Data|\PHPUnit_Framework_MockObject_MockObject */
@@ -86,19 +86,17 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
     /** @var \Magento\ImportExport\Model\Import\Config|\PHPUnit_Framework_MockObject_MockObject */
     protected $_importConfig;
 
-    // @codingStandardsIgnoreStart
-    /** @var  \Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceFactory|\PHPUnit_Framework_MockObject_MockObject */
-    // @codingStandardsIgnoreEnd
+    /** @var \PHPUnit_Framework_MockObject_MockObject */
     protected $_resourceFactory;
 
     // @codingStandardsIgnoreStart
-    /** @var  \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var  \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject */
     protected $_setColFactory;
 
     /** @var  \Magento\CatalogImportExport\Model\Import\Product\Type\Factory|\PHPUnit_Framework_MockObject_MockObject */
     protected $_productTypeFactory;
 
-    /** @var  \Magento\Catalog\Model\Resource\Product\LinkFactory|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var  \Magento\Catalog\Model\ResourceModel\Product\LinkFactory|\PHPUnit_Framework_MockObject_MockObject */
     protected $_linkFactory;
 
     /** @var  \Magento\CatalogImportExport\Model\Import\Proxy\ProductFactory|\PHPUnit_Framework_MockObject_MockObject */
@@ -113,7 +111,7 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
     /** @var  \Magento\Framework\Filesystem\Directory\WriteInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $_mediaDirectory;
 
-    /** @var  \Magento\CatalogInventory\Model\Resource\Stock\ItemFactory|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var  \Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory|\PHPUnit_Framework_MockObject_MockObject */
     protected $_stockResItemFac;
 
     /** @var  \Magento\Framework\Stdlib\DateTime\TimezoneInterface|\PHPUnit_Framework_MockObject_MockObject */
@@ -137,10 +135,10 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
     /** @var  \Magento\CatalogImportExport\Model\Import\Product\Validator|\PHPUnit_Framework_MockObject_MockObject */
     protected $validator;
 
-    /** @var  \Magento\Framework\Model\Resource\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var  \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject */
     protected $objectRelationProcessor;
 
-    /** @var  \Magento\Framework\Model\Resource\Db\TransactionManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var  \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $transactionManager;
 
     /** @var  \Magento\CatalogImportExport\Model\Import\Product\TaxClassProcessor|\PHPUnit_Framework_MockObject_MockObject */
@@ -172,7 +170,7 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
                 ->disableOriginalConstructor()
                 ->getMock();
         $this->_dataSourceModel =
-            $this->getMockBuilder('\Magento\ImportExport\Model\Resource\Import\Data')
+            $this->getMockBuilder('\Magento\ImportExport\Model\ResourceModel\Import\Data')
                 ->disableOriginalConstructor()
                 ->getMock();
         $this->config =
@@ -180,11 +178,11 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
                 ->disableOriginalConstructor()
                 ->getMock();
         $this->resource =
-            $this->getMockBuilder('\Magento\Framework\App\Resource')
+            $this->getMockBuilder('\Magento\Framework\App\ResourceConnection')
                 ->disableOriginalConstructor()
                 ->getMock();
         $this->resourceHelper =
-            $this->getMockBuilder('\Magento\ImportExport\Model\Resource\Helper')
+            $this->getMockBuilder('\Magento\ImportExport\Model\ResourceModel\Helper')
                 ->disableOriginalConstructor()
                 ->getMock();
         $this->string =
@@ -214,14 +212,14 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
                 ->disableOriginalConstructor()
                 ->getMock();
         $this->_resourceFactory = $this->getMock(
-            '\Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceFactory',
+            '\Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModelFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->_setColFactory = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory',
             ['create'],
             [],
             '',
@@ -235,7 +233,7 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
             false
         );
         $this->_linkFactory = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\LinkFactory',
+            '\Magento\Catalog\Model\ResourceModel\Product\LinkFactory',
             ['create'],
             [],
             '',
@@ -263,7 +261,7 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
             $this->getMockBuilder('\Magento\Framework\Filesystem\Directory\WriteInterface')
                 ->getMock();
         $this->_stockResItemFac = $this->getMock(
-            '\Magento\CatalogInventory\Model\Resource\Stock\ItemFactory',
+            '\Magento\CatalogInventory\Model\ResourceModel\Stock\ItemFactory',
             ['create'],
             [],
             '',
@@ -304,11 +302,11 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
                 ->disableOriginalConstructor()
                 ->getMock();
         $this->objectRelationProcessor =
-            $this->getMockBuilder('\Magento\Framework\Model\Resource\Db\ObjectRelationProcessor')
+            $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor')
                 ->disableOriginalConstructor()
                 ->getMock();
         $this->transactionManager =
-            $this->getMockBuilder('\Magento\Framework\Model\Resource\Db\TransactionManagerInterface')
+            $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface')
                 ->getMock();
 
         $this->taxClassProcessor =
@@ -428,7 +426,7 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
             ->method('getId')
             ->willReturn('2');
         $attributeSetCol = [$attributeSetOne, $attributeSetTwo];
-        $collection = $this->getMockBuilder('\Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection')
+        $collection = $this->getMockBuilder('\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $collection->expects($this->once())
@@ -619,7 +617,7 @@ class ProductTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
             ->setMethods(['getId'])
             ->getMockForAbstractClass();
         $attribute->expects($this->once())->method('getId')->willReturn($expectedId);
-        $resource = $this->getMockBuilder('\Magento\CatalogImportExport\Model\Import\Proxy\Product\Resource')
+        $resource = $this->getMockBuilder('\Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModel')
             ->disableOriginalConstructor()
             ->setMethods(['getAttribute'])
             ->getMock();
diff --git a/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php b/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php
index 3c4520e792a6db93e736254b2923c151cddc358f..7ae7f318a2f9cf67bbfb05b1558209afc5142129 100644
--- a/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php
+++ b/app/code/Magento/CatalogInventory/Block/Adminhtml/Form/Field/Stock.php
@@ -36,11 +36,19 @@ class Stock extends \Magento\Framework\Data\Form\Element\Select
      */
     protected $_factoryText;
 
+    /**
+     * Core registry
+     *
+     * @var \Magento\Framework\Registry
+     */
+    protected $coreRegistry;
+
     /**
      * @param \Magento\Framework\Data\Form\Element\Factory $factoryElement
      * @param \Magento\Framework\Data\Form\Element\CollectionFactory $factoryCollection
      * @param \Magento\Framework\Escaper $escaper
      * @param \Magento\Framework\Data\Form\Element\TextFactory $factoryText
+     * @param \Magento\Framework\Registry $coreRegistry
      * @param array $data
      */
     public function __construct(
@@ -48,12 +56,14 @@ class Stock extends \Magento\Framework\Data\Form\Element\Select
         \Magento\Framework\Data\Form\Element\CollectionFactory $factoryCollection,
         \Magento\Framework\Escaper $escaper,
         \Magento\Framework\Data\Form\Element\TextFactory $factoryText,
+        \Magento\Framework\Registry $coreRegistry,
         array $data = []
     ) {
         $this->_factoryText = $factoryText;
         $this->_qty = isset($data['qty']) ? $data['qty'] : $this->_createQtyElement();
         unset($data['qty']);
         parent::__construct($factoryElement, $factoryCollection, $escaper, $data);
+        $this->coreRegistry = $coreRegistry;
         $this->setName($data['name']);
     }
 
@@ -164,6 +174,7 @@ class Stock extends \Magento\Framework\Data\Form\Element\Select
      */
     protected function _getJs($quantityFieldId, $inStockFieldId)
     {
+        $isNewProduct = (int)$this->coreRegistry->registry('product')->isObjectNew();
         return "
             <script type='text/javascript'>
                 require(['jquery', 'prototype', 'domReady!'], function($) {
@@ -184,7 +195,9 @@ class Stock extends \Magento\Framework\Data\Form\Element\Select
                             var stockBeforeDisable = $.Event('stockbeforedisable', {productType: productType});
                             $('[data-tab-panel=product-details]').trigger(stockBeforeDisable);
                             if (stockBeforeDisable.result !== false) {
-                                var manageStockValue = (qty.val() === '') ? 0 : 1,
+                                var manageStockValue = {$isNewProduct}
+                                    ? (qty.val() === '' ? 0 : 1)
+                                    : parseInt(manageStockField.val()),
                                     stockAssociations = $('#' + fieldsAssociations['{$inStockFieldId}']);
                                 stockAvailabilityField.prop('disabled', !manageStockValue);
                                 stockAssociations.prop('disabled', !manageStockValue);
diff --git a/app/code/Magento/CatalogInventory/Helper/Stock.php b/app/code/Magento/CatalogInventory/Helper/Stock.php
index a30eac244c637f7b7dd1905215223f98e2e59f1c..0474515b954b7a4afd2f988bd5bc4300fde1d851 100644
--- a/app/code/Magento/CatalogInventory/Helper/Stock.php
+++ b/app/code/Magento/CatalogInventory/Helper/Stock.php
@@ -8,9 +8,9 @@ namespace Magento\CatalogInventory\Helper;
 use Magento\CatalogInventory\Model\Spi\StockRegistryProviderInterface;
 use Magento\Store\Model\StoreManagerInterface;
 use Magento\Framework\App\Config\ScopeConfigInterface;
-use Magento\CatalogInventory\Model\Resource\Stock\StatusFactory;
-use Magento\CatalogInventory\Model\Resource\Stock\Status;
-use Magento\Catalog\Model\Resource\Collection\AbstractCollection;
+use Magento\CatalogInventory\Model\ResourceModel\Stock\StatusFactory;
+use Magento\CatalogInventory\Model\ResourceModel\Stock\Status;
+use Magento\Catalog\Model\ResourceModel\Collection\AbstractCollection;
 use Magento\Catalog\Model\Product;
 
 /**
@@ -102,7 +102,7 @@ class Stock
     /**
      * Adds filtering for collection to return only in stock products
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Link\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection $collection
      * @return void
      */
     public function addInStockFilterToCollection($collection)
@@ -134,7 +134,7 @@ class Stock
     /**
      * Add only is in stock products filter to product collection
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @return void
      */
     public function addIsInStockFilterToCollection($collection)
diff --git a/app/code/Magento/CatalogInventory/Model/Adminhtml/Stock/Item.php b/app/code/Magento/CatalogInventory/Model/Adminhtml/Stock/Item.php
index 8b8a78576f138fdb693b25ec06cffec235fd0e24..f8e9cba0301a8220c1fe0659440d4d91ea2e8986 100644
--- a/app/code/Magento/CatalogInventory/Model/Adminhtml/Stock/Item.php
+++ b/app/code/Magento/CatalogInventory/Model/Adminhtml/Stock/Item.php
@@ -37,7 +37,7 @@ class Item extends \Magento\CatalogInventory\Model\Stock\Item implements Identit
      * @param StockRegistryInterface $stockRegistry
      * @param StockItemRepositoryInterface $stockItemRepository
      * @param GroupManagementInterface $groupManagement
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -53,7 +53,7 @@ class Item extends \Magento\CatalogInventory\Model\Stock\Item implements Identit
         StockRegistryInterface $stockRegistry,
         StockItemRepositoryInterface $stockItemRepository,
         GroupManagementInterface $groupManagement,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php b/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php
index 8d19df64396b0a392492c7682f691c7f7de502d3..5f38c7074b6c5819fe50b7e444fcec546be1e34d 100644
--- a/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php
+++ b/app/code/Magento/CatalogInventory/Model/Config/Backend/AbstractValue.php
@@ -27,7 +27,7 @@ abstract class AbstractValue extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\CatalogInventory\Api\StockIndexInterface $stockIndex
      * @param \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -37,7 +37,7 @@ abstract class AbstractValue extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\CatalogInventory\Api\StockIndexInterface $stockIndex,
         \Magento\CatalogInventory\Model\Indexer\Stock\Processor $stockIndexerProcessor,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/CatalogInventory/Model/Indexer/Stock/AbstractAction.php b/app/code/Magento/CatalogInventory/Model/Indexer/Stock/AbstractAction.php
index 7faea3bfcc83ca239530c154c04d9035b0c622bb..7def79dde6305dd21e8681172360828428cdea0d 100644
--- a/app/code/Magento/CatalogInventory/Model/Indexer/Stock/AbstractAction.php
+++ b/app/code/Magento/CatalogInventory/Model/Indexer/Stock/AbstractAction.php
@@ -9,7 +9,7 @@
 namespace Magento\CatalogInventory\Model\Indexer\Stock;
 
 use Magento\Catalog\Model\Category;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Abstract action reindex class
@@ -26,7 +26,7 @@ abstract class AbstractAction
     protected $_resource;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Indexer\StockFactory
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Indexer\StockFactory
      */
     protected $_indexerFactory;
 
@@ -67,15 +67,15 @@ abstract class AbstractAction
 
 
     /**
-     * @param Resource $resource
-     * @param \Magento\CatalogInventory\Model\Resource\Indexer\StockFactory $indexerFactory
+     * @param ResourceConnection $resource
+     * @param \Magento\CatalogInventory\Model\ResourceModel\Indexer\StockFactory $indexerFactory
      * @param \Magento\Catalog\Model\Product\Type $catalogProductType
      * @param \Magento\Framework\Indexer\CacheContext $cacheContext
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      */
     public function __construct(
-        Resource $resource,
-        \Magento\CatalogInventory\Model\Resource\Indexer\StockFactory $indexerFactory,
+        ResourceConnection $resource,
+        \Magento\CatalogInventory\Model\ResourceModel\Indexer\StockFactory $indexerFactory,
         \Magento\Catalog\Model\Product\Type $catalogProductType,
         \Magento\Framework\Indexer\CacheContext $cacheContext,
         \Magento\Framework\Event\ManagerInterface $eventManager
@@ -112,7 +112,7 @@ abstract class AbstractAction
     /**
      * Retrieve Stock Indexer Models per Product Type
      *
-     * @return \Magento\CatalogInventory\Model\Resource\Indexer\Stock\StockInterface[]
+     * @return \Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock\StockInterface[]
      */
     protected function _getTypeIndexers()
     {
diff --git a/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Plugin/StoreGroup.php b/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Plugin/StoreGroup.php
index a72d479f2ef0efd35d316ecc71aaf275d5fdcaca..e940dab68989248933a3db616b6b361139d97180 100644
--- a/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Plugin/StoreGroup.php
+++ b/app/code/Magento/CatalogInventory/Model/Indexer/Stock/Plugin/StoreGroup.php
@@ -23,14 +23,14 @@ class StoreGroup
     /**
      * Before save handler
      *
-     * @param \Magento\Store\Model\Resource\Group $subject
+     * @param \Magento\Store\Model\ResourceModel\Group $subject
      * @param \Magento\Framework\Model\AbstractModel $object
      *
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function beforeSave(
-        \Magento\Store\Model\Resource\Group $subject,
+        \Magento\Store\Model\ResourceModel\Group $subject,
         \Magento\Framework\Model\AbstractModel $object
     ) {
         if (!$object->getId() || $object->dataHasChangedFor('website_id')) {
diff --git a/app/code/Magento/CatalogInventory/Model/Plugin/Layer.php b/app/code/Magento/CatalogInventory/Model/Plugin/Layer.php
index 3b16b43106e80a89ab2ee38e42121354e32083a3..17921d984cb87653a11b47ab128542cbade2368a 100644
--- a/app/code/Magento/CatalogInventory/Model/Plugin/Layer.php
+++ b/app/code/Magento/CatalogInventory/Model/Plugin/Layer.php
@@ -37,14 +37,14 @@ class Layer
      * Before prepare product collection handler
      *
      * @param \Magento\Catalog\Model\Layer $subject
-     * @param \Magento\Catalog\Model\Resource\Collection\AbstractCollection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Collection\AbstractCollection $collection
      *
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function beforePrepareProductCollection(
         \Magento\Catalog\Model\Layer $subject,
-        \Magento\Catalog\Model\Resource\Collection\AbstractCollection $collection
+        \Magento\Catalog\Model\ResourceModel\Collection\AbstractCollection $collection
     ) {
         if ($this->_isEnabledShowOutOfStock()) {
             return;
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Indexer/Stock/DefaultStock.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/DefaultStock.php
similarity index 95%
rename from app/code/Magento/CatalogInventory/Model/Resource/Indexer/Stock/DefaultStock.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/DefaultStock.php
index c9d979962eb2575f547d6dde2b938ee85af2231f..3b9ed644fc890e1275f14f933047939b1dfa5b4b 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Indexer/Stock/DefaultStock.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/DefaultStock.php
@@ -4,12 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\CatalogInventory\Model\Resource\Indexer\Stock;
+namespace Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock;
+
+use Magento\Catalog\Model\ResourceModel\Product\Indexer\AbstractIndexer;
 
 /**
  * CatalogInventory Default Stock Status Indexer Resource Model
  */
-class DefaultStock extends \Magento\Catalog\Model\Resource\Product\Indexer\AbstractIndexer implements StockInterface
+class DefaultStock extends AbstractIndexer implements StockInterface
 {
     /**
      * Current Product Type Id
@@ -35,14 +37,14 @@ class DefaultStock extends \Magento\Catalog\Model\Resource\Product\Indexer\Abstr
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Indexer/Stock/StockInterface.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/StockInterface.php
similarity index 92%
rename from app/code/Magento/CatalogInventory/Model/Resource/Indexer/Stock/StockInterface.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/StockInterface.php
index 860c889637094a4f8771ca28d510ee51a2f9900f..8612b0ba52593227f9c82904806d7c77f410fe08 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Indexer/Stock/StockInterface.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/Stock/StockInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogInventory\Model\Resource\Indexer\Stock;
+namespace Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock;
 
 /**
  * CatalogInventory Stock Indexer Interface
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Indexer/StockFactory.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/StockFactory.php
similarity index 81%
rename from app/code/Magento/CatalogInventory/Model/Resource/Indexer/StockFactory.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/StockFactory.php
index 7475f7ab03005983437abe59d6d653cece65e07c..60b6bb575e77db1d5eca52279e6797bdfdf62db0 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Indexer/StockFactory.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Indexer/StockFactory.php
@@ -7,7 +7,7 @@
 /**
  * CatalogInventory Stock Indexers Factory
  */
-namespace Magento\CatalogInventory\Model\Resource\Indexer;
+namespace Magento\CatalogInventory\Model\ResourceModel\Indexer;
 
 class StockFactory
 {
@@ -21,7 +21,7 @@ class StockFactory
      *
      * @var string
      */
-    protected $_defaultIndexer = 'Magento\CatalogInventory\Model\Resource\Indexer\Stock\DefaultStock';
+    protected $_defaultIndexer = 'Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock\DefaultStock';
 
     /**
      * @param \Magento\Framework\ObjectManagerInterface $objectManager
@@ -36,7 +36,7 @@ class StockFactory
      *
      * @param string $indexerClassName
      * @param array $data
-     * @return \Magento\CatalogInventory\Model\Resource\Indexer\Stock\StockInterface
+     * @return \Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock\StockInterface
      * @throws \InvalidArgumentException
      */
     public function create($indexerClassName = '', array $data = [])
@@ -45,10 +45,10 @@ class StockFactory
             $indexerClassName = $this->_defaultIndexer;
         }
         $indexer = $this->_objectManager->create($indexerClassName, $data);
-        if (false == $indexer instanceof \Magento\CatalogInventory\Model\Resource\Indexer\Stock\StockInterface) {
+        if (false == $indexer instanceof \Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock\StockInterface) {
             throw new \InvalidArgumentException(
                 $indexerClassName .
-                ' doesn\'t implement \Magento\CatalogInventory\Model\Resource\Indexer\Stock\StockInterface'
+                ' doesn\'t implement \Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock\StockInterface'
             );
         }
         return $indexer;
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/QtyCounterInterface.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/QtyCounterInterface.php
similarity index 89%
rename from app/code/Magento/CatalogInventory/Model/Resource/QtyCounterInterface.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/QtyCounterInterface.php
index e36a04a2b3d40630ee819410f7f86aa4c283f6dd..195c3c76fcc9512bef5155095d72b6ec256f0b89 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/QtyCounterInterface.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/QtyCounterInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogInventory\Model\Resource;
+namespace Magento\CatalogInventory\Model\ResourceModel;
 
 /**
  * Correct particular stock products qty
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock.php
similarity index 96%
rename from app/code/Magento/CatalogInventory/Model/Resource/Stock.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Stock.php
index 6948b642136d19844f92273987dcf9c8ee3b299d..c0dee9c17f839aafa382de613496254db99855dc 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Stock.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\CatalogInventory\Model\Resource;
+namespace Magento\CatalogInventory\Model\ResourceModel;
 
 use Magento\CatalogInventory\Api\StockConfigurationInterface;
 use Magento\Store\Model\StoreManagerInterface;
@@ -12,7 +12,7 @@ use Magento\Store\Model\StoreManagerInterface;
 /**
  * Stock resource model
  */
-class Stock extends \Magento\Framework\Model\Resource\Db\AbstractDb implements QtyCounterInterface
+class Stock extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements QtyCounterInterface
 {
     /**
      * @var StockConfigurationInterface
@@ -79,7 +79,7 @@ class Stock extends \Magento\Framework\Model\Resource\Db\AbstractDb implements Q
     protected $storeManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param StockConfigurationInterface $stockConfiguration
@@ -87,7 +87,7 @@ class Stock extends \Magento\Framework\Model\Resource\Db\AbstractDb implements Q
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         StockConfigurationInterface $stockConfiguration,
@@ -290,11 +290,11 @@ class Stock extends \Magento\Framework\Model\Resource\Db\AbstractDb implements Q
     /**
      * Add low stock filter to product collection
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @param array $fields
      * @return $this
      */
-    public function addLowStockFilter(\Magento\Catalog\Model\Resource\Product\Collection $collection, $fields)
+    public function addLowStockFilter(\Magento\Catalog\Model\ResourceModel\Product\Collection $collection, $fields)
     {
         $this->_initConfig();
         $connection = $collection->getSelect()->getConnection();
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Collection.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Collection.php
similarity index 80%
rename from app/code/Magento/CatalogInventory/Model/Resource/Stock/Collection.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Collection.php
index 9453cf7e3a86c27c9784a38068c74beaa62e7f52..70f6e3cd8310d68b8f1dab5a734b31306c7e8cea 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Collection.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Collection.php
@@ -4,14 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\CatalogInventory\Model\Resource\Stock;
+namespace Magento\CatalogInventory\Model\ResourceModel\Stock;
 
 use Magento\CatalogInventory\Api\Data\StockCollectionInterface;
 use Magento\Framework\Data\AbstractSearchResult;
 
 /**
  * Class Collection
- * @package Magento\CatalogInventory\Model\Resource\Stock
+ * @package Magento\CatalogInventory\Model\ResourceModel\Stock
  */
 class Collection extends AbstractSearchResult implements StockCollectionInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Item.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item.php
similarity index 90%
rename from app/code/Magento/CatalogInventory/Model/Resource/Stock/Item.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item.php
index 3657f59bb171ad8f631c4edf5e239101818ea299..3613e9de9657abdf029b93727531ee6869e6417f 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Item.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item.php
@@ -3,18 +3,18 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogInventory\Model\Resource\Stock;
+namespace Magento\CatalogInventory\Model\ResourceModel\Stock;
 
 use Magento\CatalogInventory\Api\Data\StockItemInterface;
 use Magento\CatalogInventory\Model\Indexer\Stock\Processor;
-use Magento\Framework\App\Resource as AppResource;
+use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\Framework\Model\AbstractModel;
-use Magento\Framework\Model\Resource\Db\TransactionManagerInterface;
+use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface;
 
 /**
  * Stock item resource model
  */
-class Item extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Whether index events should be processed immediately
@@ -29,12 +29,12 @@ class Item extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $stockIndexerProcessor;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param Processor $processor
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Processor $processor,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/Collection.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item/Collection.php
similarity index 79%
rename from app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/Collection.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item/Collection.php
index 97ff278f3d5d414eb3e1a302af654f1addf19be8..1d8f652a0e311f0f385f4551e2cb73a0bc6ff864 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/Collection.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item/Collection.php
@@ -4,14 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\CatalogInventory\Model\Resource\Stock\Item;
+namespace Magento\CatalogInventory\Model\ResourceModel\Stock\Item;
 
 use Magento\CatalogInventory\Api\Data\StockItemCollectionInterface;
 use Magento\Framework\Data\AbstractSearchResult;
 
 /**
  * Class Collection
- * @package Magento\CatalogInventory\Model\Resource\Stock\Item
+ * @package Magento\CatalogInventory\Model\ResourceModel\Stock\Item
  */
 class Collection extends AbstractSearchResult implements StockItemCollectionInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/StockItemCriteria.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item/StockItemCriteria.php
similarity index 93%
rename from app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/StockItemCriteria.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item/StockItemCriteria.php
index ac004fe8581e9bd556698280073b10d3ab7a3366..62646a20b0dd83c6ee979deb097e61b29a8461fe 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/StockItemCriteria.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item/StockItemCriteria.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\CatalogInventory\Model\Resource\Stock\Item;
+namespace Magento\CatalogInventory\Model\ResourceModel\Stock\Item;
 
 use Magento\Framework\Data\AbstractCriteria;
 
@@ -20,7 +20,7 @@ class StockItemCriteria extends AbstractCriteria implements \Magento\CatalogInve
      */
     public function __construct($mapper = '')
     {
-        $this->mapperInterfaceName = $mapper ?: 'Magento\CatalogInventory\Model\Resource\Stock\Item\StockItemCriteriaMapper';
+        $this->mapperInterfaceName = $mapper ?: 'Magento\CatalogInventory\Model\ResourceModel\Stock\Item\StockItemCriteriaMapper';
         $this->data['initial_condition'] = true;
     }
 
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/StockItemCriteriaMapper.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item/StockItemCriteriaMapper.php
similarity index 96%
rename from app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/StockItemCriteriaMapper.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item/StockItemCriteriaMapper.php
index 4f85702c4b7b816d75414fa8bf6b080f072d3382..0c47112aa27c29dede3949bf100686ec7df92cdb 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Item/StockItemCriteriaMapper.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Item/StockItemCriteriaMapper.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\CatalogInventory\Model\Resource\Stock\Item;
+namespace Magento\CatalogInventory\Model\ResourceModel\Stock\Item;
 
 use Magento\Framework\DB\GenericMapper;
 use Magento\Framework\DB\MapperFactory;
@@ -16,7 +16,7 @@ use Magento\Framework\Data\Collection\Db\FetchStrategyInterface;
 
 /**
  * Interface StockItemCriteriaMapper
- * @package Magento\CatalogInventory\Model\Resource\Stock\Status
+ * @package Magento\CatalogInventory\Model\ResourceModel\Stock\Status
  */
 class StockItemCriteriaMapper extends GenericMapper
 {
@@ -45,7 +45,7 @@ class StockItemCriteriaMapper extends GenericMapper
      */
     protected function init()
     {
-        $this->initResource('Magento\CatalogInventory\Model\Resource\Stock\Item');
+        $this->initResource('Magento\CatalogInventory\Model\ResourceModel\Stock\Item');
         $this->map['qty'] = ['main_table', 'qty', 'qty'];
     }
 
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Status.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status.php
similarity index 96%
rename from app/code/Magento/CatalogInventory/Model/Resource/Stock/Status.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status.php
index b53728e60f871dd40ec5608ff4b16dd34bf7695c..64e45b1f09f7563bdd82a9247e376a68d56f41f5 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Status.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogInventory\Model\Resource\Stock;
+namespace Magento\CatalogInventory\Model\ResourceModel\Stock;
 
 use Magento\CatalogInventory\Model\Stock;
 
 /**
  * CatalogInventory Stock Status per website Resource Model
  */
-class Status extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Status extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store model manager
@@ -32,14 +32,14 @@ class Status extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $eavConfig;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Store\Model\WebsiteFactory $websiteFactory,
         \Magento\Eav\Model\Config $eavConfig,
@@ -207,7 +207,7 @@ class Status extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Add only is in stock products filter to product collection
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @return $this
      */
     public function addIsInStockFilterToCollection($collection)
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Status/Collection.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status/Collection.php
similarity index 78%
rename from app/code/Magento/CatalogInventory/Model/Resource/Stock/Status/Collection.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status/Collection.php
index 769a23539c8efbb508b1e065327baf550e92596a..aeced1830b73a66dd3537c3b2c9a70df9ce61ff8 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Status/Collection.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status/Collection.php
@@ -4,14 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\CatalogInventory\Model\Resource\Stock\Status;
+namespace Magento\CatalogInventory\Model\ResourceModel\Stock\Status;
 
 use Magento\CatalogInventory\Api\Data\StockStatusCollectionInterface;
 use Magento\Framework\Data\AbstractSearchResult;
 
 /**
  * Class Collection
- * @package Magento\CatalogInventory\Model\Resource\Stock\Status
+ * @package Magento\CatalogInventory\Model\ResourceModel\Stock\Status
  */
 class Collection extends AbstractSearchResult implements StockStatusCollectionInterface
 {
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Status/StockStatusCriteria.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status/StockStatusCriteria.php
similarity index 89%
rename from app/code/Magento/CatalogInventory/Model/Resource/Stock/Status/StockStatusCriteria.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status/StockStatusCriteria.php
index 4edc96f803ef3a4148c8d6d1b5655c723c899858..056233e26fd3a5be7619d1498334eba4c09c8107 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Status/StockStatusCriteria.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status/StockStatusCriteria.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\CatalogInventory\Model\Resource\Stock\Status;
+namespace Magento\CatalogInventory\Model\ResourceModel\Stock\Status;
 
 use Magento\Framework\Data\AbstractCriteria;
 
@@ -20,7 +20,7 @@ class StockStatusCriteria extends AbstractCriteria implements \Magento\CatalogIn
      */
     public function __construct($mapper = '')
     {
-        $this->mapperInterfaceName = $mapper ?: 'Magento\CatalogInventory\Model\Resource\Stock\Status\StockStatusCriteriaMapper';
+        $this->mapperInterfaceName = $mapper ?: 'Magento\CatalogInventory\Model\ResourceModel\Stock\Status\StockStatusCriteriaMapper';
         $this->data['initial_condition'] = true;
     }
 
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Status/StockStatusCriteriaMapper.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status/StockStatusCriteriaMapper.php
similarity index 92%
rename from app/code/Magento/CatalogInventory/Model/Resource/Stock/Status/StockStatusCriteriaMapper.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status/StockStatusCriteriaMapper.php
index fdd9266bc072d7dfc0f2c8655908d4dc580b662b..fc97624d8eb6fa9809ed4ce70906310009c919cd 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Stock/Status/StockStatusCriteriaMapper.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/Status/StockStatusCriteriaMapper.php
@@ -4,13 +4,13 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\CatalogInventory\Model\Resource\Stock\Status;
+namespace Magento\CatalogInventory\Model\ResourceModel\Stock\Status;
 
 use Magento\Framework\DB\GenericMapper;
 
 /**
  * Class StockStatusCriteriaMapper
- * @package Magento\CatalogInventory\Model\Resource\Stock\Status
+ * @package Magento\CatalogInventory\Model\ResourceModel\Stock\Status
  */
 class StockStatusCriteriaMapper extends GenericMapper
 {
@@ -19,7 +19,7 @@ class StockStatusCriteriaMapper extends GenericMapper
      */
     protected function init()
     {
-        $this->initResource('Magento\CatalogInventory\Model\Resource\Stock\Status');
+        $this->initResource('Magento\CatalogInventory\Model\ResourceModel\Stock\Status');
     }
 
     /**
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock/StockCriteria.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/StockCriteria.php
similarity index 83%
rename from app/code/Magento/CatalogInventory/Model/Resource/Stock/StockCriteria.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/StockCriteria.php
index 8eead8b7c1691314517a39953f397975bdbd7faa..bb290f8e78ef14b51f7bf0c65d187b7d5667f88f 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Stock/StockCriteria.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/StockCriteria.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogInventory\Model\Resource\Stock;
+namespace Magento\CatalogInventory\Model\ResourceModel\Stock;
 
 use Magento\Framework\Data\AbstractCriteria;
 
@@ -17,7 +17,8 @@ class StockCriteria extends AbstractCriteria implements \Magento\CatalogInventor
      */
     public function __construct($mapper = '')
     {
-        $this->mapperInterfaceName = $mapper ?: 'Magento\CatalogInventory\Model\Resource\Stock\StockCriteriaMapper';
+        $this->mapperInterfaceName =
+            $mapper ?: 'Magento\CatalogInventory\Model\ResourceModel\Stock\StockCriteriaMapper';
         $this->data['initial_condition'] = true;
     }
 
diff --git a/app/code/Magento/CatalogInventory/Model/Resource/Stock/StockCriteriaMapper.php b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/StockCriteriaMapper.php
similarity index 72%
rename from app/code/Magento/CatalogInventory/Model/Resource/Stock/StockCriteriaMapper.php
rename to app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/StockCriteriaMapper.php
index 11969eb829c06e12e2a251ff833fd481bced6ca7..944314362eac70613040db633f4166b4b8099e5e 100644
--- a/app/code/Magento/CatalogInventory/Model/Resource/Stock/StockCriteriaMapper.php
+++ b/app/code/Magento/CatalogInventory/Model/ResourceModel/Stock/StockCriteriaMapper.php
@@ -4,13 +4,13 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\CatalogInventory\Model\Resource\Stock;
+namespace Magento\CatalogInventory\Model\ResourceModel\Stock;
 
 use Magento\Framework\DB\GenericMapper;
 
 /**
  * Class StockCriteriaMapper
- * @package Magento\CatalogInventory\Model\Resource\Stock
+ * @package Magento\CatalogInventory\Model\ResourceModel\Stock
  */
 class StockCriteriaMapper extends GenericMapper
 {
@@ -19,6 +19,6 @@ class StockCriteriaMapper extends GenericMapper
      */
     protected function init()
     {
-        $this->initResource('Magento\CatalogInventory\Model\Resource\Stock');
+        $this->initResource('Magento\CatalogInventory\Model\ResourceModel\Stock');
     }
 }
diff --git a/app/code/Magento/CatalogInventory/Model/Stock.php b/app/code/Magento/CatalogInventory/Model/Stock.php
index 1eed06294edaf05139695e5048ba6725e91de515..4d83afaad486a8af099ca10503a0de22dd22257b 100644
--- a/app/code/Magento/CatalogInventory/Model/Stock.php
+++ b/app/code/Magento/CatalogInventory/Model/Stock.php
@@ -54,7 +54,7 @@ class Stock extends AbstractExtensibleModel implements StockInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\CatalogInventory\Model\Resource\Stock');
+        $this->_init('Magento\CatalogInventory\Model\ResourceModel\Stock');
     }
 
     //@codeCoverageIgnoreStart
diff --git a/app/code/Magento/CatalogInventory/Model/Stock/Item.php b/app/code/Magento/CatalogInventory/Model/Stock/Item.php
index ede0023bdd3aef9a658064fa327fc56fe57041ce..a6913cd2e01963b270d144986ea410e42cc90e45 100644
--- a/app/code/Magento/CatalogInventory/Model/Stock/Item.php
+++ b/app/code/Magento/CatalogInventory/Model/Stock/Item.php
@@ -99,7 +99,7 @@ class Item extends AbstractExtensibleModel implements StockItemInterface
      * @param StockConfigurationInterface $stockConfiguration
      * @param StockRegistryInterface $stockRegistry
      * @param StockItemRepositoryInterface $stockItemRepository
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -114,7 +114,7 @@ class Item extends AbstractExtensibleModel implements StockItemInterface
         StockConfigurationInterface $stockConfiguration,
         StockRegistryInterface $stockRegistry,
         StockItemRepositoryInterface $stockItemRepository,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -141,7 +141,7 @@ class Item extends AbstractExtensibleModel implements StockItemInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\CatalogInventory\Model\Resource\Stock\Item');
+        $this->_init('Magento\CatalogInventory\Model\ResourceModel\Stock\Item');
     }
 
     /**
diff --git a/app/code/Magento/CatalogInventory/Model/Stock/Status.php b/app/code/Magento/CatalogInventory/Model/Stock/Status.php
index bd4b37d40da7a0f5f580db229e580b9703d7e48d..fe76a6364e83e03264058f7f4e0c3ee9b14821a9 100644
--- a/app/code/Magento/CatalogInventory/Model/Stock/Status.php
+++ b/app/code/Magento/CatalogInventory/Model/Stock/Status.php
@@ -41,7 +41,7 @@ class Status extends AbstractExtensibleModel implements StockStatusInterface
      * @param ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param StockRegistryInterface $stockRegistry
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -51,7 +51,7 @@ class Status extends AbstractExtensibleModel implements StockStatusInterface
         ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         StockRegistryInterface $stockRegistry,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -74,7 +74,7 @@ class Status extends AbstractExtensibleModel implements StockStatusInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\CatalogInventory\Model\Resource\Stock\Status');
+        $this->_init('Magento\CatalogInventory\Model\ResourceModel\Stock\Status');
     }
 
     //@codeCoverageIgnoreStart
diff --git a/app/code/Magento/CatalogInventory/Model/Stock/StockItemRepository.php b/app/code/Magento/CatalogInventory/Model/Stock/StockItemRepository.php
index 4a5cc92f8f87e9ed80554525a5394cf8e4e7bbe6..e40e0290b7d2ff390d7c7a716b7b13778651f5da 100644
--- a/app/code/Magento/CatalogInventory/Model/Stock/StockItemRepository.php
+++ b/app/code/Magento/CatalogInventory/Model/Stock/StockItemRepository.php
@@ -12,7 +12,7 @@ use Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory;
 use Magento\CatalogInventory\Api\StockConfigurationInterface;
 use Magento\CatalogInventory\Api\StockItemRepositoryInterface as StockItemRepositoryInterface;
 use Magento\CatalogInventory\Model\Indexer\Stock\Processor;
-use Magento\CatalogInventory\Model\Resource\Stock\Item as StockItemResource;
+use Magento\CatalogInventory\Model\ResourceModel\Stock\Item as StockItemResource;
 use Magento\CatalogInventory\Model\Spi\StockStateProviderInterface;
 use Magento\Framework\DB\MapperFactory;
 use Magento\Framework\DB\QueryBuilderFactory;
diff --git a/app/code/Magento/CatalogInventory/Model/Stock/StockRepository.php b/app/code/Magento/CatalogInventory/Model/Stock/StockRepository.php
index 590f98813c9049a411ee4d9395c4d377e2417afc..ceff54964d77e7211b4c9a89487e5bc61f354d6b 100644
--- a/app/code/Magento/CatalogInventory/Model/Stock/StockRepository.php
+++ b/app/code/Magento/CatalogInventory/Model/Stock/StockRepository.php
@@ -8,7 +8,7 @@ namespace Magento\CatalogInventory\Model\Stock;
 use Magento\CatalogInventory\Api\Data\StockCollectionInterfaceFactory;
 use Magento\CatalogInventory\Api\Data\StockInterface;
 use Magento\CatalogInventory\Api\StockRepositoryInterface;
-use Magento\CatalogInventory\Model\Resource\Stock as StockResource;
+use Magento\CatalogInventory\Model\ResourceModel\Stock as StockResource;
 use Magento\CatalogInventory\Model\StockFactory;
 use Magento\Framework\DB\MapperFactory;
 use Magento\Framework\DB\QueryBuilderFactory;
diff --git a/app/code/Magento/CatalogInventory/Model/Stock/StockStatusRepository.php b/app/code/Magento/CatalogInventory/Model/Stock/StockStatusRepository.php
index cef158fe1d44f1fd5cde737099c7d1d11fb4a80c..04f845ed0cd2a2bcacbf1ea38309c4170639564a 100644
--- a/app/code/Magento/CatalogInventory/Model/Stock/StockStatusRepository.php
+++ b/app/code/Magento/CatalogInventory/Model/Stock/StockStatusRepository.php
@@ -8,7 +8,7 @@ namespace Magento\CatalogInventory\Model\Stock;
 use Magento\CatalogInventory\Api\Data\StockStatusCollectionInterfaceFactory;
 use Magento\CatalogInventory\Api\Data\StockStatusInterface;
 use Magento\CatalogInventory\Api\StockStatusRepositoryInterface;
-use Magento\CatalogInventory\Model\Resource\Stock\Status as StockStatusResource;
+use Magento\CatalogInventory\Model\ResourceModel\Stock\Status as StockStatusResource;
 use Magento\Framework\DB\MapperFactory;
 use Magento\Framework\DB\QueryBuilderFactory;
 use Magento\Framework\Exception\CouldNotDeleteException;
diff --git a/app/code/Magento/CatalogInventory/Model/StockIndex.php b/app/code/Magento/CatalogInventory/Model/StockIndex.php
index 406d6364e7f456e07bc0ed77ddf7b208e0905b36..206892d0e76c05f4a7cd4af2d0c6ff04208f054f 100644
--- a/app/code/Magento/CatalogInventory/Model/StockIndex.php
+++ b/app/code/Magento/CatalogInventory/Model/StockIndex.php
@@ -32,7 +32,7 @@ class StockIndex implements StockIndexInterface
     protected $productRepository;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock\Status
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock\Status
      */
     protected $stockStatusResource;
 
@@ -88,7 +88,7 @@ class StockIndex implements StockIndexInterface
         } else {
             $lastProductId = 0;
             while (true) {
-                /** @var \Magento\CatalogInventory\Model\Resource\Stock\Status $resource */
+                /** @var \Magento\CatalogInventory\Model\ResourceModel\Stock\Status $resource */
                 $resource = $this->getStockStatusResource();
                 $productCollection = $resource->getProductCollection($lastProductId);
                 if (!$productCollection) {
@@ -200,7 +200,7 @@ class StockIndex implements StockIndexInterface
     protected function getWebsitesWithDefaultStores($websiteId = null)
     {
         if (is_null($this->websites)) {
-            /** @var \Magento\CatalogInventory\Model\Resource\Stock\Status $resource */
+            /** @var \Magento\CatalogInventory\Model\ResourceModel\Stock\Status $resource */
             $resource = $this->getStockStatusResource();
             $this->websites = $resource->getWebsiteStores();
         }
@@ -261,13 +261,13 @@ class StockIndex implements StockIndexInterface
     }
 
     /**
-     * @return \Magento\CatalogInventory\Model\Resource\Stock\Status
+     * @return \Magento\CatalogInventory\Model\ResourceModel\Stock\Status
      */
     protected function getStockStatusResource()
     {
         if (empty($this->stockStatusResource)) {
             $this->stockStatusResource = \Magento\Framework\App\ObjectManager::getInstance()->get(
-                'Magento\CatalogInventory\Model\Resource\Stock\Status'
+                'Magento\CatalogInventory\Model\ResourceModel\Stock\Status'
             );
         }
         return $this->stockStatusResource;
diff --git a/app/code/Magento/CatalogInventory/Model/StockManagement.php b/app/code/Magento/CatalogInventory/Model/StockManagement.php
index c487ab15394e79dce91848c9fa45dafddef19161..c2077184feebc37929d8e95ac947e0994ccdf7f1 100644
--- a/app/code/Magento/CatalogInventory/Model/StockManagement.php
+++ b/app/code/Magento/CatalogInventory/Model/StockManagement.php
@@ -5,13 +5,13 @@
  */
 namespace Magento\CatalogInventory\Model;
 
-use Magento\Catalog\Model\ProductFactory;
 use Magento\CatalogInventory\Api\Data\StockItemInterface;
 use Magento\CatalogInventory\Api\StockConfigurationInterface;
 use Magento\CatalogInventory\Api\StockManagementInterface;
-use Magento\CatalogInventory\Model\Resource\QtyCounterInterface;
+use Magento\CatalogInventory\Model\ResourceModel\QtyCounterInterface;
 use Magento\CatalogInventory\Model\Spi\StockRegistryProviderInterface;
 use Magento\Catalog\Api\ProductRepositoryInterface;
+use Magento\CatalogInventory\Model\ResourceModel\Stock as ResourceStock;
 
 /**
  * Class StockManagement
@@ -39,7 +39,7 @@ class StockManagement implements StockManagementInterface
     protected $productRepository;
 
     /**
-     * @var Resource\Stock
+     * @var ResourceStock
      */
     protected $resource;
 
@@ -49,15 +49,15 @@ class StockManagement implements StockManagementInterface
     private $qtyCounter;
 
     /**
-     * @param Resource\Stock $stockResource
+     * @param ResourceStock $stockResource
      * @param StockRegistryProviderInterface $stockRegistryProvider
      * @param StockState $stockState
      * @param StockConfigurationInterface $stockConfiguration
      * @param ProductRepositoryInterface $productRepository
-     * @param Resource\QtyCounterInterface $qtyCounter
+     * @param QtyCounterInterface $qtyCounter
      */
     public function __construct(
-        Resource\Stock $stockResource,
+        ResourceStock $stockResource,
         StockRegistryProviderInterface $stockRegistryProvider,
         StockState $stockState,
         StockConfigurationInterface $stockConfiguration,
diff --git a/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php b/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php
index 0c7a808023c1b13585d9d12ede668a0bbc8f4e39..eddd3316cd8828993052fd175e05e8695f149f63 100644
--- a/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php
+++ b/app/code/Magento/CatalogInventory/Model/System/Config/Backend/Minsaleqty.php
@@ -22,7 +22,7 @@ class Minsaleqty extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\CatalogInventory\Helper\Minsaleqty $catalogInventoryMinsaleqty
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -31,7 +31,7 @@ class Minsaleqty extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\CatalogInventory\Helper\Minsaleqty $catalogInventoryMinsaleqty,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/CatalogInventory/Observer/UpdateItemsStockUponConfigChangeObserver.php b/app/code/Magento/CatalogInventory/Observer/UpdateItemsStockUponConfigChangeObserver.php
index f14057c6d1164568f1969f81a5210905899569be..af981c0a16756d44b945340f62a957a0db1645d9 100644
--- a/app/code/Magento/CatalogInventory/Observer/UpdateItemsStockUponConfigChangeObserver.php
+++ b/app/code/Magento/CatalogInventory/Observer/UpdateItemsStockUponConfigChangeObserver.php
@@ -15,14 +15,14 @@ use Magento\Framework\Event\ObserverInterface;
 class UpdateItemsStockUponConfigChangeObserver implements ObserverInterface
 {
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock
      */
     protected $resourceStock;
 
     /**
-     * @param \Magento\CatalogInventory\Model\Resource\Stock $resourceStock
+     * @param \Magento\CatalogInventory\Model\ResourceModel\Stock $resourceStock
      */
-    public function __construct(\Magento\CatalogInventory\Model\Resource\Stock $resourceStock)
+    public function __construct(\Magento\CatalogInventory\Model\ResourceModel\Stock $resourceStock)
     {
         $this->resourceStock = $resourceStock;
     }
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Helper/StockTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Helper/StockTest.php
index 376bffe2c5d870e2c5e0952b5dcc9376040e0aa5..cb4209de616e798498590461c9db2e3e1891657d 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Helper/StockTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Helper/StockTest.php
@@ -33,7 +33,7 @@ class StockTest extends \PHPUnit_Framework_TestCase
     protected $scopeConfigMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\CatalogInventory\Model\Resource\Stock\StatusFactory
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\CatalogInventory\Model\ResourceModel\Stock\StatusFactory
      */
     protected $statusFactoryMock;
 
@@ -50,7 +50,8 @@ class StockTest extends \PHPUnit_Framework_TestCase
         $this->scopeConfigMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->statusFactoryMock = $this->getMockBuilder('Magento\CatalogInventory\Model\Resource\Stock\StatusFactory')
+        $this->statusFactoryMock =
+            $this->getMockBuilder('Magento\CatalogInventory\Model\ResourceModel\Stock\StatusFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -114,7 +115,8 @@ class StockTest extends \PHPUnit_Framework_TestCase
         $stockStatusMock->expects($this->once())
             ->method('getStockStatus')
             ->willReturn($status);
-        $productCollectionMock = $this->getMockBuilder('Magento\Catalog\Model\Resource\Collection\AbstractCollection')
+        $productCollectionMock =
+            $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Collection\AbstractCollection')
             ->disableOriginalConstructor()
             ->getMock();
         $productCollectionMock->expects($this->any())
@@ -151,7 +153,7 @@ class StockTest extends \PHPUnit_Framework_TestCase
      */
     public function testAddInStockFilterToCollection($configMock)
     {
-        $collectionMock = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Link\Product\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $collectionMock->expects($this->any())
@@ -175,10 +177,10 @@ class StockTest extends \PHPUnit_Framework_TestCase
 
     public function testAddIsInStockFilterToCollection()
     {
-        $collectionMock = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Collection')
             ->disableOriginalConstructor()
             ->getMock();
-        $stockStatusMock = $this->getMockBuilder('Magento\CatalogInventory\Model\Resource\Stock\Status')
+        $stockStatusMock = $this->getMockBuilder('Magento\CatalogInventory\Model\ResourceModel\Stock\Status')
             ->disableOriginalConstructor()
             ->setMethods(['addIsInStockFilterToCollection'])
             ->getMock();
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Adminhtml/Stock/ItemTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Adminhtml/Stock/ItemTest.php
index 9b04d8c4802c8e16fcb030675490579def90442f..94c4ede49a160aa3f1e704777261620f57448da2 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Adminhtml/Stock/ItemTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Adminhtml/Stock/ItemTest.php
@@ -18,7 +18,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $resourceMock = $this->getMock(
-            'Magento\Framework\Model\Resource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             ['_construct', 'getConnection', 'getIdFieldName'],
             [],
             '',
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/FullTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/FullTest.php
index 3e60f8261e6ec73316af8f37eb2e4c640e37280e..e480466ba9e5c1c45a7dd74661282e1c6ec12bc0 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/FullTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Action/FullTest.php
@@ -14,13 +14,13 @@ class FullTest extends \PHPUnit_Framework_TestCase
     public function testExecuteWithAdapterErrorThrowsException()
     {
         $indexerFactoryMock = $this->getMock(
-            'Magento\CatalogInventory\Model\Resource\Indexer\StockFactory',
+            'Magento\CatalogInventory\Model\ResourceModel\Indexer\StockFactory',
             [],
             [],
             '',
             false
         );
-        $resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $productTypeMock = $this->getMock('Magento\Catalog\Model\Product\Type', [], [], '', false);
         $connectionMock = $this->getMock('Magento\Framework\DB\Adapter\AdapterInterface');
 
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Plugin/StoreGroupTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Plugin/StoreGroupTest.php
index 096919b3dc9d40f89d4ff1fdaff256a60a91b074..1d6838a39a6698718641e1e8e911fff49a8f16c0 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Plugin/StoreGroupTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Indexer/Stock/Plugin/StoreGroupTest.php
@@ -39,7 +39,7 @@ class StoreGroupTest extends \PHPUnit_Framework_TestCase
      */
     public function testBeforeSave(array $data)
     {
-        $subjectMock = $this->getMock('Magento\Store\Model\Resource\Group', [], [], '', false);
+        $subjectMock = $this->getMock('Magento\Store\Model\ResourceModel\Group', [], [], '', false);
         $objectMock = $this->getMock(
             'Magento\Framework\Model\AbstractModel',
             ['getId', 'dataHasChangedFor', '__wakeup'],
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Plugin/LayerTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Plugin/LayerTest.php
index 1e10a37507a08447c283db8b8c72860a26649bd4..9dfd894a5ca4d51fdd994aae1ea36dfce9233641 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Plugin/LayerTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Plugin/LayerTest.php
@@ -53,9 +53,9 @@ class LayerTest extends \PHPUnit_Framework_TestCase
         )->will(
             $this->returnValue(true)
         );
-        /** @var \Magento\Catalog\Model\Resource\Product\Collection $collectionMock */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collectionMock */
         $collectionMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Collection',
             [],
             [],
             '',
@@ -83,7 +83,7 @@ class LayerTest extends \PHPUnit_Framework_TestCase
         );
 
         $collectionMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Spi/StockRegistryProviderTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Spi/StockRegistryProviderTest.php
index 0ad8f728a181234c26b4f6d33b06b372da1f0d7c..02b1700967015cc3bf75a736ba69343b79f3bf44 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Spi/StockRegistryProviderTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Spi/StockRegistryProviderTest.php
@@ -238,7 +238,7 @@ class StockRegistryProviderTest extends \PHPUnit_Framework_TestCase
         $this->stockCriteriaFactory->expects($this->once())->method('create')->willReturn($this->stockCriteria);
         $this->stockCriteria->expects($this->once())->method('setWebsiteFilter')->willReturn(null);
         $stockCollection = $this->getMock(
-            '\Magento\CatalogInventory\Model\Resource\Stock\Collection',
+            '\Magento\CatalogInventory\Model\ResourceModel\Stock\Collection',
             ['getFirstItem', '__wakeup', 'getItems'],
             [],
             '',
@@ -256,7 +256,7 @@ class StockRegistryProviderTest extends \PHPUnit_Framework_TestCase
         $this->stockItemCriteria->expects($this->once())->method('setWebsiteFilter')->willReturn(null);
         $this->stockItemCriteria->expects($this->once())->method('setProductsFilter')->willReturn(null);
         $stockItemCollection = $this->getMock(
-            '\Magento\CatalogInventory\Model\Resource\Stock\Item\Collection',
+            '\Magento\CatalogInventory\Model\ResourceModel\Stock\Item\Collection',
             ['getFirstItem', '__wakeup', 'getItems'],
             [],
             '',
@@ -279,7 +279,7 @@ class StockRegistryProviderTest extends \PHPUnit_Framework_TestCase
         $this->stockStatusCriteria->expects($this->once())->method('setWebsiteFilter')->willReturn(null);
         $this->stockStatusCriteria->expects($this->once())->method('setProductsFilter')->willReturn(null);
         $stockStatusCollection = $this->getMock(
-            '\Magento\CatalogInventory\Model\Resource\Stock\Status\Collection',
+            '\Magento\CatalogInventory\Model\ResourceModel\Stock\Status\Collection',
             ['getFirstItem', '__wakeup', 'getItems'],
             [],
             '',
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/ItemTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/ItemTest.php
index 93f078e9ca11d272ef5abc37b8d2c73820cf9096..27188a0efd3520d18b7e93d83e0485bdd30f64c4 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/ItemTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/ItemTest.php
@@ -58,12 +58,12 @@ class ItemTest extends \PHPUnit_Framework_TestCase
     protected $stockItemRepository;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock\Item|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock\Item|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock\Item\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock\Item\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceCollection;
 
@@ -110,7 +110,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->resource = $this->getMock(
-            'Magento\CatalogInventory\Model\Resource\Stock\Item',
+            'Magento\CatalogInventory\Model\ResourceModel\Stock\Item',
             [],
             [],
             '',
@@ -118,7 +118,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->resourceCollection = $this->getMock(
-            'Magento\CatalogInventory\Model\Resource\Stock\Item\Collection',
+            'Magento\CatalogInventory\Model\ResourceModel\Stock\Item\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockItemRepositoryTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockItemRepositoryTest.php
index ed72a425ea8fb2b4d67ec6a75fbf405dfb79505a..f1026633e9eeca62d8037a0408f68efd2a8b2c52 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockItemRepositoryTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockItemRepositoryTest.php
@@ -40,7 +40,7 @@ class StockItemRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $stockStateProviderMock;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock\Item|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock\Item|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $stockItemResourceMock;
 
@@ -112,7 +112,7 @@ class StockItemRepositoryTest extends \PHPUnit_Framework_TestCase
         )
             ->disableOriginalConstructor()
             ->getMock();
-        $this->stockItemResourceMock = $this->getMockBuilder('Magento\CatalogInventory\Model\Resource\Stock\Item')
+        $this->stockItemResourceMock = $this->getMockBuilder('Magento\CatalogInventory\Model\ResourceModel\Stock\Item')
             ->disableOriginalConstructor()
             ->getMock();
         $this->stockItemFactoryMock = $this->getMockBuilder(
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockRepositoryTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockRepositoryTest.php
index dc13237c4677445f25dd6d6107100a8345e61b9c..3e9394a3995e53102bae88c0496080f15af113c3 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockRepositoryTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockRepositoryTest.php
@@ -23,7 +23,7 @@ class StockRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $stockMock;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $stockResourceMock;
 
@@ -54,7 +54,7 @@ class StockRepositoryTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->stockResourceMock = $this->getMockBuilder('\Magento\CatalogInventory\Model\Resource\Stock')
+        $this->stockResourceMock = $this->getMockBuilder('\Magento\CatalogInventory\Model\ResourceModel\Stock')
             ->disableOriginalConstructor()
             ->getMock();
         $this->stockFactoryMock = $this->getMockBuilder(
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockStatusRepositoryTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockStatusRepositoryTest.php
index 19eadb2165460d9f9ba2428d652580f6f78a0b6b..5c8d3efe356db03d40ec8ba1d4b43c0b32e336b2 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockStatusRepositoryTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Model/Stock/StockStatusRepositoryTest.php
@@ -24,7 +24,7 @@ class StockStatusRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $stockStatusMock;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock\Status|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock\Status|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $stockStatusResourceMock;
 
@@ -53,7 +53,8 @@ class StockStatusRepositoryTest extends \PHPUnit_Framework_TestCase
         $this->stockStatusMock = $this->getMockBuilder('\Magento\CatalogInventory\Model\Stock\Status')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->stockStatusResourceMock = $this->getMockBuilder('\Magento\CatalogInventory\Model\Resource\Stock\Status')
+        $this->stockStatusResourceMock =
+            $this->getMockBuilder('\Magento\CatalogInventory\Model\ResourceModel\Stock\Status')
             ->disableOriginalConstructor()
             ->getMock();
         $this->stockStatusFactoryMock = $this->getMockBuilder(
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Observer/AddStockStatusToCollectionObserverTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Observer/AddStockStatusToCollectionObserverTest.php
index b778ddec43dcfd9078c0be14ea816275c8987879..ebba8ffe469324f70f4871d73cc438690b13a911 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Observer/AddStockStatusToCollectionObserverTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Observer/AddStockStatusToCollectionObserverTest.php
@@ -57,7 +57,7 @@ class AddStockStatusToCollectionObserverTest extends \PHPUnit_Framework_TestCase
 
     public function testAddStockStatusToCollection()
     {
-        $productCollection = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Collection')
+        $productCollection = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/CatalogInventory/Test/Unit/Observer/UpdateItemsStockUponConfigChangeObserverTest.php b/app/code/Magento/CatalogInventory/Test/Unit/Observer/UpdateItemsStockUponConfigChangeObserverTest.php
index e232c5ccc66e33f47ee81f27b59b1df23463ca3f..f22faca1bacec684a098bde06ae0c39c1d39d2d5 100644
--- a/app/code/Magento/CatalogInventory/Test/Unit/Observer/UpdateItemsStockUponConfigChangeObserverTest.php
+++ b/app/code/Magento/CatalogInventory/Test/Unit/Observer/UpdateItemsStockUponConfigChangeObserverTest.php
@@ -15,7 +15,7 @@ class UpdateItemsStockUponConfigChangeObserverTest extends \PHPUnit_Framework_Te
     protected $observer;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceStock;
 
@@ -31,7 +31,7 @@ class UpdateItemsStockUponConfigChangeObserverTest extends \PHPUnit_Framework_Te
 
     protected function setUp()
     {
-        $this->resourceStock = $this->getMock('Magento\CatalogInventory\Model\Resource\Stock', [], [], '', false);
+        $this->resourceStock = $this->getMock('Magento\CatalogInventory\Model\ResourceModel\Stock', [], [], '', false);
 
         $this->event = $this->getMockBuilder('Magento\Framework\Event')
             ->disableOriginalConstructor()
diff --git a/app/code/Magento/CatalogInventory/etc/di.xml b/app/code/Magento/CatalogInventory/etc/di.xml
index f16ec07ea279a7b6e9a3073f14b671ff47d5a920..0be7b2f24b5dfeef55422a7345a7a2c07cfdfd0e 100644
--- a/app/code/Magento/CatalogInventory/etc/di.xml
+++ b/app/code/Magento/CatalogInventory/etc/di.xml
@@ -10,13 +10,13 @@
     <preference for="Magento\CatalogInventory\Api\Data\StockItemInterface" type="Magento\CatalogInventory\Model\Stock\Item" />
     <preference for="Magento\CatalogInventory\Api\Data\StockStatusInterface" type="Magento\CatalogInventory\Model\Stock\Status" />
 
-    <preference for="Magento\CatalogInventory\Api\Data\StockCollectionInterface" type="Magento\CatalogInventory\Model\Resource\Stock\Collection" />
-    <preference for="Magento\CatalogInventory\Api\Data\StockItemCollectionInterface" type="Magento\CatalogInventory\Model\Resource\Stock\Item\Collection" />
-    <preference for="Magento\CatalogInventory\Api\Data\StockStatusCollectionInterface" type="Magento\CatalogInventory\Model\Resource\Stock\Status\Collection" />
+    <preference for="Magento\CatalogInventory\Api\Data\StockCollectionInterface" type="Magento\CatalogInventory\Model\ResourceModel\Stock\Collection" />
+    <preference for="Magento\CatalogInventory\Api\Data\StockItemCollectionInterface" type="Magento\CatalogInventory\Model\ResourceModel\Stock\Item\Collection" />
+    <preference for="Magento\CatalogInventory\Api\Data\StockStatusCollectionInterface" type="Magento\CatalogInventory\Model\ResourceModel\Stock\Status\Collection" />
 
-    <preference for="Magento\CatalogInventory\Api\StockCriteriaInterface" type="Magento\CatalogInventory\Model\Resource\Stock\StockCriteria" />
-    <preference for="Magento\CatalogInventory\Api\StockItemCriteriaInterface" type="Magento\CatalogInventory\Model\Resource\Stock\Item\StockItemCriteria" />
-    <preference for="Magento\CatalogInventory\Api\StockStatusCriteriaInterface" type="Magento\CatalogInventory\Model\Resource\Stock\Status\StockStatusCriteria" />
+    <preference for="Magento\CatalogInventory\Api\StockCriteriaInterface" type="Magento\CatalogInventory\Model\ResourceModel\Stock\StockCriteria" />
+    <preference for="Magento\CatalogInventory\Api\StockItemCriteriaInterface" type="Magento\CatalogInventory\Model\ResourceModel\Stock\Item\StockItemCriteria" />
+    <preference for="Magento\CatalogInventory\Api\StockStatusCriteriaInterface" type="Magento\CatalogInventory\Model\ResourceModel\Stock\Status\StockStatusCriteria" />
 
     <preference for="Magento\CatalogInventory\Api\StockConfigurationInterface" type="Magento\CatalogInventory\Model\Configuration" />
     <preference for="Magento\CatalogInventory\Api\StockManagementInterface" type="Magento\CatalogInventory\Model\StockManagement" />
@@ -31,11 +31,11 @@
     <preference for="Magento\CatalogInventory\Model\Spi\StockRegistryProviderInterface" type="Magento\CatalogInventory\Model\StockRegistryProvider" />
     <preference for="Magento\CatalogInventory\Model\Spi\StockStateProviderInterface" type="Magento\CatalogInventory\Model\StockStateProvider" />
     
-    <preference for="Magento\CatalogInventory\Model\Resource\QtyCounterInterface" type="\Magento\CatalogInventory\Model\Resource\Stock" />
+    <preference for="Magento\CatalogInventory\Model\ResourceModel\QtyCounterInterface" type="\Magento\CatalogInventory\Model\ResourceModel\Stock" />
 
     <type name="Magento\CatalogInventory\Observer\UpdateItemsStockUponConfigChangeObserver">
         <arguments>
-            <argument name="resourceStock" xsi:type="object">Magento\CatalogInventory\Model\Resource\Stock\Proxy</argument>
+            <argument name="resourceStock" xsi:type="object">Magento\CatalogInventory\Model\ResourceModel\Stock\Proxy</argument>
         </arguments>
     </type>
     <type name="Magento\Catalog\Model\Layer">
@@ -48,7 +48,7 @@
             </argument>
         </arguments>
     </type>
-    <type name="Magento\Store\Model\Resource\Group">
+    <type name="Magento\Store\Model\ResourceModel\Group">
         <plugin name="storeGroupResourceAroundBeforeSave" type="\Magento\CatalogInventory\Model\Indexer\Stock\Plugin\StoreGroup"/>
     </type>
     <type name="Magento\Catalog\Block\Product\View">
diff --git a/app/code/Magento/CatalogInventory/etc/events.xml b/app/code/Magento/CatalogInventory/etc/events.xml
index 536c465e4b3e68788b7812e42ac56359590068b6..4252a093c4fe710f7a8a0cb64abb5777f0b5ef1a 100644
--- a/app/code/Magento/CatalogInventory/etc/events.xml
+++ b/app/code/Magento/CatalogInventory/etc/events.xml
@@ -7,45 +7,45 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_block_product_status_display">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\DisplayProductStatusInfoObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\DisplayProductStatusInfoObserver"/>
     </event>
     <event name="catalog_product_load_after">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\AddInventoryDataObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\AddInventoryDataObserver"/>
     </event>
     <event name="catalog_product_collection_load_after">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\AddStockStatusToCollectionObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\AddStockStatusToCollectionObserver"/>
     </event>
     <event name="sales_quote_item_collection_products_after_load">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\AddStockStatusToCollectionObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\AddStockStatusToCollectionObserver"/>
     </event>
     <event name="sales_quote_item_qty_set_after">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\QuantityValidatorObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\QuantityValidatorObserver"/>
     </event>
     <event name="checkout_submit_all_after">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\CheckoutAllSubmitAfterObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\CheckoutAllSubmitAfterObserver"/>
     </event>
     <event name="sales_model_service_quote_submit_before">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\SubtractQuoteInventoryObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\SubtractQuoteInventoryObserver"/>
     </event>
     <event name="sales_model_service_quote_submit_success">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\ReindexQuoteInventoryObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\ReindexQuoteInventoryObserver"/>
     </event>
     <event name="sales_model_service_quote_submit_failure">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\RevertQuoteInventoryObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\RevertQuoteInventoryObserver"/>
     </event>
     <event name="restore_quote">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\RevertQuoteInventoryObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\RevertQuoteInventoryObserver"/>
     </event>
     <event name="sales_order_item_cancel">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\CancelOrderItemObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\CancelOrderItemObserver"/>
     </event>
     <event name="sales_order_creditmemo_save_after">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\RefundOrderInventoryObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\RefundOrderInventoryObserver"/>
     </event>
     <event name="catalog_product_save_after">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\SaveInventoryDataObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\SaveInventoryDataObserver"/>
     </event>
     <event name="admin_system_config_changed_section_cataloginventory">
-        <observer name="inventory" instance="Magento\CatalogInventory\Observer\UpdateItemsStockUponConfigChangeObserver" method="execute"/>
+        <observer name="inventory" instance="Magento\CatalogInventory\Observer\UpdateItemsStockUponConfigChangeObserver"/>
     </event>
 </config>
diff --git a/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml b/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml
index 01bd9d50c93f5f69ac9b17c0bf06f292f4301373..a4f0f8c41ec975ac84ec5f1050952e6a73c52e34 100644
--- a/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml
+++ b/app/code/Magento/CatalogInventory/view/adminhtml/ui_component/product_listing.xml
@@ -6,49 +6,12 @@
  */
 -->
 <listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Ui/etc/ui_configuration.xsd">
-    <container name="listing_top">
-        <filters name="listing_filters" class="Magento\Catalog\Ui\Component\Listing\Filters">
-            <filterRange name="qty">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">qty</item>
-                        <item name="label" xsi:type="string" translate="true">Quantity</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">product_listing.product_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-        </filters>
-    </container>
     <columns name="product_columns" class="Magento\Catalog\Ui\Component\Listing\Columns">
         <column name="qty">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="add_field" xsi:type="boolean">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Quantity</item>
                     <item name="sortOrder" xsi:type="number">75</item>
                 </item>
diff --git a/app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Widget/Chooser/Sku.php b/app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Widget/Chooser/Sku.php
index 00a189513c74be1bbf762104c83e0d92f1028473..ca2ab8c4331f7a767d7ff362a29e9fba136bdbfa 100644
--- a/app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Widget/Chooser/Sku.php
+++ b/app/code/Magento/CatalogRule/Block/Adminhtml/Promo/Widget/Chooser/Sku.php
@@ -22,33 +22,33 @@ class Sku extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_catalogType;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_cpCollection;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     protected $_cpCollectionInstance;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory
      */
     protected $_eavAttSetCollection;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $eavAttSetCollection
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $cpCollection
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $eavAttSetCollection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $cpCollection
      * @param \Magento\Catalog\Model\Product\Type $catalogType
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $eavAttSetCollection,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $cpCollection,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $eavAttSetCollection,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $cpCollection,
         \Magento\Catalog\Model\Product\Type $catalogType,
         array $data = []
     ) {
@@ -128,7 +128,7 @@ class Sku extends \Magento\Backend\Block\Widget\Grid\Extended
     /**
      * Get catalog product resource collection instance
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     protected function _getCpCollectionInstance()
     {
diff --git a/app/code/Magento/CatalogRule/Model/Indexer/IndexBuilder.php b/app/code/Magento/CatalogRule/Model/Indexer/IndexBuilder.php
index a4627d0c12c75ed3a1db9e542c739c2bc716803c..06aa14fc933c7451a483e9bf15ca6e74e252b441 100644
--- a/app/code/Magento/CatalogRule/Model/Indexer/IndexBuilder.php
+++ b/app/code/Magento/CatalogRule/Model/Indexer/IndexBuilder.php
@@ -7,9 +7,9 @@
 namespace Magento\CatalogRule\Model\Indexer;
 
 use Magento\Catalog\Model\Product;
-use Magento\CatalogRule\Model\Resource\Rule\CollectionFactory as RuleCollectionFactory;
+use Magento\CatalogRule\Model\ResourceModel\Rule\CollectionFactory as RuleCollectionFactory;
 use Magento\CatalogRule\Model\Rule;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Pricing\PriceCurrencyInterface;
 
 /**
@@ -29,7 +29,7 @@ class IndexBuilder
     protected $_catalogRuleGroupWebsiteColumnsList = ['rule_id', 'customer_group_id', 'website_id'];
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $resource;
 
@@ -91,7 +91,7 @@ class IndexBuilder
     /**
      * @param RuleCollectionFactory $ruleCollectionFactory
      * @param PriceCurrencyInterface $priceCurrency
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Eav\Model\Config $eavConfig
@@ -104,7 +104,7 @@ class IndexBuilder
     public function __construct(
         RuleCollectionFactory $ruleCollectionFactory,
         PriceCurrencyInterface $priceCurrency,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Eav\Model\Config $eavConfig,
diff --git a/app/code/Magento/CatalogRule/Model/Resource/Grid/Collection.php b/app/code/Magento/CatalogRule/Model/ResourceModel/Grid/Collection.php
similarity index 67%
rename from app/code/Magento/CatalogRule/Model/Resource/Grid/Collection.php
rename to app/code/Magento/CatalogRule/Model/ResourceModel/Grid/Collection.php
index d5802370fd3f293f96e3c4467f2b3b476b393c10..d40b0d40f9ec3bbd479daa23841dfca3084087a2 100644
--- a/app/code/Magento/CatalogRule/Model/Resource/Grid/Collection.php
+++ b/app/code/Magento/CatalogRule/Model/ResourceModel/Grid/Collection.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogRule\Model\Resource\Grid;
+namespace Magento\CatalogRule\Model\ResourceModel\Grid;
 
-class Collection extends \Magento\CatalogRule\Model\Resource\Rule\Collection
+class Collection extends \Magento\CatalogRule\Model\ResourceModel\Rule\Collection
 {
     /**
      * @return $this
diff --git a/app/code/Magento/CatalogRule/Model/Resource/Rule.php b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule.php
similarity index 96%
rename from app/code/Magento/CatalogRule/Model/Resource/Rule.php
rename to app/code/Magento/CatalogRule/Model/ResourceModel/Rule.php
index bdde3d9370fe5a63427d032250978fcd6ed898ba..7a0e2cec1f24c6cabddc457a7061f103f227a59c 100644
--- a/app/code/Magento/CatalogRule/Model/Resource/Rule.php
+++ b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule.php
@@ -9,7 +9,7 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\CatalogRule\Model\Resource;
+namespace Magento\CatalogRule\Model\ResourceModel;
 
 use Magento\Catalog\Model\Product;
 use Magento\Framework\Model\AbstractModel;
@@ -18,7 +18,7 @@ use Magento\Framework\Pricing\PriceCurrencyInterface;
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Rule extends \Magento\Rule\Model\Resource\AbstractResource
+class Rule extends \Magento\Rule\Model\ResourceModel\AbstractResource
 {
     /**
      * Store number of seconds in a day
@@ -93,7 +93,7 @@ class Rule extends \Magento\Rule\Model\Resource\AbstractResource
     protected $priceCurrency;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param Product\ConditionFactory $conditionFactory
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate
@@ -107,7 +107,7 @@ class Rule extends \Magento\Rule\Model\Resource\AbstractResource
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Product\ConditionFactory $conditionFactory,
         \Magento\Framework\Stdlib\DateTime\DateTime $coreDate,
@@ -146,7 +146,7 @@ class Rule extends \Magento\Rule\Model\Resource\AbstractResource
      * Add customer group ids and website ids to rule data after load
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _afterLoad(AbstractModel $object)
     {
diff --git a/app/code/Magento/CatalogRule/Model/Resource/Rule/Collection.php b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Collection.php
similarity index 84%
rename from app/code/Magento/CatalogRule/Model/Resource/Rule/Collection.php
rename to app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Collection.php
index bda374dbafac623adce4a2c9bc7d122575ce9a98..33a9c5c81320f086de8ca5dec1570407939ad977 100644
--- a/app/code/Magento/CatalogRule/Model/Resource/Rule/Collection.php
+++ b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Collection.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogRule\Model\Resource\Rule;
+namespace Magento\CatalogRule\Model\ResourceModel\Rule;
 
-class Collection extends \Magento\Rule\Model\Resource\Rule\Collection\AbstractCollection
+class Collection extends \Magento\Rule\Model\ResourceModel\Rule\Collection\AbstractCollection
 {
     /**
      * Store associated with rule entities information map
@@ -28,7 +28,7 @@ class Collection extends \Magento\Rule\Model\Resource\Rule\Collection\AbstractCo
      */
     protected function _construct()
     {
-        $this->_init('Magento\CatalogRule\Model\Rule', 'Magento\CatalogRule\Model\Resource\Rule');
+        $this->_init('Magento\CatalogRule\Model\Rule', 'Magento\CatalogRule\Model\ResourceModel\Rule');
     }
 
     /**
diff --git a/app/code/Magento/CatalogRule/Model/Resource/Rule/Product/Price.php b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price.php
similarity index 91%
rename from app/code/Magento/CatalogRule/Model/Resource/Rule/Product/Price.php
rename to app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price.php
index edf1560e579112db8db6b8747bbb80416ee17e88..071c788d65e96f069af88ac4ed19a60fa0e8f4f3 100644
--- a/app/code/Magento/CatalogRule/Model/Resource/Rule/Product/Price.php
+++ b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\CatalogRule\Model\Resource\Rule\Product;
+namespace Magento\CatalogRule\Model\ResourceModel\Rule\Product;
 
-class Price extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Price extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
@@ -34,7 +34,7 @@ class Price extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * @param string $websiteId
      * @param array $updateFields       the array of fields for compare with rule price and update
      * @param string $websiteDate
-     * @return \Magento\CatalogRule\Model\Resource\Rule\Product\Price
+     * @return \Magento\CatalogRule\Model\ResourceModel\Rule\Product\Price
      */
     public function applyPriceRuleToIndexTable(
         \Magento\Framework\DB\Select $select,
diff --git a/app/code/Magento/CatalogRule/Model/Resource/Rule/Product/Price/Collection.php b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price/Collection.php
similarity index 79%
rename from app/code/Magento/CatalogRule/Model/Resource/Rule/Product/Price/Collection.php
rename to app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price/Collection.php
index 1172aa40df95c01b080c761294855a758a4466a5..13c7d3fc3b96fdbe82349f8d219954c0a112c4bf 100644
--- a/app/code/Magento/CatalogRule/Model/Resource/Rule/Product/Price/Collection.php
+++ b/app/code/Magento/CatalogRule/Model/ResourceModel/Rule/Product/Price/Collection.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogRule\Model\Resource\Rule\Product\Price;
+namespace Magento\CatalogRule\Model\ResourceModel\Rule\Product\Price;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @return void
@@ -16,7 +16,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         parent::_construct();
         $this->_init(
             'Magento\CatalogRule\Model\Rule\Product\Price',
-            'Magento\CatalogRule\Model\Resource\Rule\Product\Price'
+            'Magento\CatalogRule\Model\ResourceModel\Rule\Product\Price'
         );
     }
 
diff --git a/app/code/Magento/CatalogRule/Model/Rule.php b/app/code/Magento/CatalogRule/Model/Rule.php
index ff05ab857f3be04a6769137d3a6d89cf184b26c3..66f3affdcea910662767f599d9bf3767194a7ba0 100644
--- a/app/code/Magento/CatalogRule/Model/Rule.php
+++ b/app/code/Magento/CatalogRule/Model/Rule.php
@@ -10,8 +10,8 @@ use Magento\Catalog\Model\Product;
 /**
  * Catalog Rule data model
  *
- * @method \Magento\CatalogRule\Model\Resource\Rule _getResource()
- * @method \Magento\CatalogRule\Model\Resource\Rule getResource()
+ * @method \Magento\CatalogRule\Model\ResourceModel\Rule _getResource()
+ * @method \Magento\CatalogRule\Model\ResourceModel\Rule getResource()
  * @method string getName()
  * @method \Magento\CatalogRule\Model\Rule setName(string $value)
  * @method string getDescription()
@@ -104,7 +104,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
     protected $_relatedCacheTypes;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Iterator
+     * @var \Magento\Framework\Model\ResourceModel\Iterator
      */
     protected $_resourceIterator;
 
@@ -134,7 +134,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
     protected $_storeManager;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_productCollectionFactory;
 
@@ -153,18 +153,18 @@ class Rule extends \Magento\Rule\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\CatalogRule\Model\Rule\Condition\CombineFactory $combineFactory
      * @param \Magento\CatalogRule\Model\Rule\Action\CollectionFactory $actionCollectionFactory
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
-     * @param \Magento\Framework\Model\Resource\Iterator $resourceIterator
+     * @param \Magento\Framework\Model\ResourceModel\Iterator $resourceIterator
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\CatalogRule\Helper\Data $catalogRuleData
      * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypesList
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor $ruleProductProcessor
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $relatedCacheTypes
      * @param array $data
@@ -175,18 +175,18 @@ class Rule extends \Magento\Rule\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Data\FormFactory $formFactory,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\CatalogRule\Model\Rule\Condition\CombineFactory $combineFactory,
         \Magento\CatalogRule\Model\Rule\Action\CollectionFactory $actionCollectionFactory,
         \Magento\Catalog\Model\ProductFactory $productFactory,
-        \Magento\Framework\Model\Resource\Iterator $resourceIterator,
+        \Magento\Framework\Model\ResourceModel\Iterator $resourceIterator,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\CatalogRule\Helper\Data $catalogRuleData,
         \Magento\Framework\App\Cache\TypeListInterface $cacheTypesList,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor $ruleProductProcessor,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $relatedCacheTypes = [],
         array $data = []
@@ -214,7 +214,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\CatalogRule\Model\Resource\Rule');
+        $this->_init('Magento\CatalogRule\Model\ResourceModel\Rule');
         $this->setIdFieldName('rule_id');
     }
 
@@ -289,7 +289,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
             $this->setCollectedAttributes([]);
 
             if ($this->getWebsiteIds()) {
-                /** @var $productCollection \Magento\Catalog\Model\Resource\Product\Collection */
+                /** @var $productCollection \Magento\Catalog\Model\ResourceModel\Product\Collection */
                 $productCollection = $this->_productCollectionFactory->create();
                 $productCollection->addWebsiteFilter($this->getWebsiteIds());
                 if ($this->_productsFilter) {
diff --git a/app/code/Magento/CatalogRule/Model/Rule/Product/Price.php b/app/code/Magento/CatalogRule/Model/Rule/Product/Price.php
index 7cf2789bb6593322732ce4ffd4eb39decbbc3dde..6ab64587c1ffb6e62fac7a5415932f93e162c109 100644
--- a/app/code/Magento/CatalogRule/Model/Rule/Product/Price.php
+++ b/app/code/Magento/CatalogRule/Model/Rule/Product/Price.php
@@ -7,8 +7,8 @@
 /**
  * Catalog Rule Product Aggregated Price per date Model
  *
- * @method \Magento\CatalogRule\Model\Resource\Rule\Product\Price _getResource()
- * @method \Magento\CatalogRule\Model\Resource\Rule\Product\Price getResource()
+ * @method \Magento\CatalogRule\Model\ResourceModel\Rule\Product\Price _getResource()
+ * @method \Magento\CatalogRule\Model\ResourceModel\Rule\Product\Price getResource()
  * @method string getRuleDate()
  * @method \Magento\CatalogRule\Model\Rule\Product\Price setRuleDate(string $value)
  * @method int getCustomerGroupId()
@@ -39,7 +39,7 @@ class Price extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\CatalogRule\Model\Resource\Rule\Product\Price');
+        $this->_init('Magento\CatalogRule\Model\ResourceModel\Rule\Product\Price');
     }
 
     /**
diff --git a/app/code/Magento/CatalogRule/Observer/PrepareCatalogProductCollectionPricesObserver.php b/app/code/Magento/CatalogRule/Observer/PrepareCatalogProductCollectionPricesObserver.php
index 15a13e20c8b55515dbeed0d954f5a85158afdd1d..05116074458941a523de082b19433b6ffd7ca215 100644
--- a/app/code/Magento/CatalogRule/Observer/PrepareCatalogProductCollectionPricesObserver.php
+++ b/app/code/Magento/CatalogRule/Observer/PrepareCatalogProductCollectionPricesObserver.php
@@ -39,7 +39,7 @@ class PrepareCatalogProductCollectionPricesObserver implements ObserverInterface
     protected $localeDate;
 
     /**
-     * @var \Magento\CatalogRule\Model\Resource\RuleFactory
+     * @var \Magento\CatalogRule\Model\ResourceModel\RuleFactory
      */
     protected $resourceRuleFactory;
 
@@ -53,7 +53,7 @@ class PrepareCatalogProductCollectionPricesObserver implements ObserverInterface
 
     /**
      * @param RulePricesStorage $rulePricesStorage
-     * @param \Magento\CatalogRule\Model\Resource\RuleFactory $resourceRuleFactory
+     * @param \Magento\CatalogRule\Model\ResourceModel\RuleFactory $resourceRuleFactory
      * @param StoreManagerInterface $storeManager
      * @param TimezoneInterface $localeDate
      * @param CustomerModelSession $customerSession
@@ -61,7 +61,7 @@ class PrepareCatalogProductCollectionPricesObserver implements ObserverInterface
      */
     public function __construct(
         RulePricesStorage $rulePricesStorage,
-        \Magento\CatalogRule\Model\Resource\RuleFactory $resourceRuleFactory,
+        \Magento\CatalogRule\Model\ResourceModel\RuleFactory $resourceRuleFactory,
         StoreManagerInterface $storeManager,
         TimezoneInterface $localeDate,
         CustomerModelSession $customerSession,
diff --git a/app/code/Magento/CatalogRule/Observer/ProcessAdminFinalPriceObserver.php b/app/code/Magento/CatalogRule/Observer/ProcessAdminFinalPriceObserver.php
index e6e45d0ad350288180471305fb062562b056c6f8..ce056c921fe07c608720bd57504fb08adb48e312 100644
--- a/app/code/Magento/CatalogRule/Observer/ProcessAdminFinalPriceObserver.php
+++ b/app/code/Magento/CatalogRule/Observer/ProcessAdminFinalPriceObserver.php
@@ -32,7 +32,7 @@ class ProcessAdminFinalPriceObserver implements ObserverInterface
     protected $localeDate;
 
     /**
-     * @var \Magento\CatalogRule\Model\Resource\RuleFactory
+     * @var \Magento\CatalogRule\Model\ResourceModel\RuleFactory
      */
     protected $resourceRuleFactory;
 
@@ -42,13 +42,13 @@ class ProcessAdminFinalPriceObserver implements ObserverInterface
     /**
      * @param RulePricesStorage $rulePricesStorage
      * @param Registry $coreRegistry
-     * @param \Magento\CatalogRule\Model\Resource\RuleFactory $resourceRuleFactory
+     * @param \Magento\CatalogRule\Model\ResourceModel\RuleFactory $resourceRuleFactory
      * @param TimezoneInterface $localeDate
      */
     public function __construct(
         RulePricesStorage $rulePricesStorage,
         Registry $coreRegistry,
-        \Magento\CatalogRule\Model\Resource\RuleFactory $resourceRuleFactory,
+        \Magento\CatalogRule\Model\ResourceModel\RuleFactory $resourceRuleFactory,
         TimezoneInterface $localeDate
     ) {
         $this->rulePricesStorage = $rulePricesStorage;
diff --git a/app/code/Magento/CatalogRule/Observer/ProcessFrontFinalPriceObserver.php b/app/code/Magento/CatalogRule/Observer/ProcessFrontFinalPriceObserver.php
index 7ea5b13d63c4f755d42a0c779009457f434b7999..0e31acc7fcdc261e5637be7e5e15c4c4f4ad87a6 100644
--- a/app/code/Magento/CatalogRule/Observer/ProcessFrontFinalPriceObserver.php
+++ b/app/code/Magento/CatalogRule/Observer/ProcessFrontFinalPriceObserver.php
@@ -35,7 +35,7 @@ class ProcessFrontFinalPriceObserver implements ObserverInterface
     protected $localeDate;
 
     /**
-     * @var \Magento\CatalogRule\Model\Resource\RuleFactory
+     * @var \Magento\CatalogRule\Model\ResourceModel\RuleFactory
      */
     protected $resourceRuleFactory;
 
@@ -44,14 +44,14 @@ class ProcessFrontFinalPriceObserver implements ObserverInterface
 
     /**
      * @param RulePricesStorage $rulePricesStorage
-     * @param \Magento\CatalogRule\Model\Resource\RuleFactory $resourceRuleFactory
+     * @param \Magento\CatalogRule\Model\ResourceModel\RuleFactory $resourceRuleFactory
      * @param StoreManagerInterface $storeManager
      * @param TimezoneInterface $localeDate
      * @param CustomerModelSession $customerSession
      */
     public function __construct(
         RulePricesStorage $rulePricesStorage,
-        \Magento\CatalogRule\Model\Resource\RuleFactory $resourceRuleFactory,
+        \Magento\CatalogRule\Model\ResourceModel\RuleFactory $resourceRuleFactory,
         StoreManagerInterface $storeManager,
         TimezoneInterface $localeDate,
         CustomerModelSession $customerSession
diff --git a/app/code/Magento/CatalogRule/Plugin/Indexer/Product/Attribute.php b/app/code/Magento/CatalogRule/Plugin/Indexer/Product/Attribute.php
index 4a4450057ea0d5d92659fe003fac53b19538bc89..78a2426a9e86229b9f6a985f3c591e254028bffa 100644
--- a/app/code/Magento/CatalogRule/Plugin/Indexer/Product/Attribute.php
+++ b/app/code/Magento/CatalogRule/Plugin/Indexer/Product/Attribute.php
@@ -6,7 +6,7 @@
 namespace Magento\CatalogRule\Plugin\Indexer\Product;
 
 use Magento\CatalogRule\Model\Indexer\Rule\RuleProductProcessor;
-use Magento\CatalogRule\Model\Resource\Rule\CollectionFactory as RuleCollectionFactory;
+use Magento\CatalogRule\Model\ResourceModel\Rule\CollectionFactory as RuleCollectionFactory;
 use Magento\CatalogRule\Model\Rule;
 use Magento\CatalogRule\Model\Rule\Condition\Combine;
 use Magento\Framework\Message\ManagerInterface;
@@ -45,15 +45,15 @@ class Attribute
     }
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $subject
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $subject
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function afterSave(
-        \Magento\Catalog\Model\Resource\Eav\Attribute $subject,
-        \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+        \Magento\Catalog\Model\ResourceModel\Eav\Attribute $subject,
+        \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
     ) {
         if ($attribute->dataHasChangedFor('is_used_for_promo_rules') && !$attribute->getIsUsedForPromoRules()) {
             $this->checkCatalogRulesAvailability($attribute->getAttributeCode());
@@ -62,15 +62,15 @@ class Attribute
     }
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $subject
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $subject
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function afterDelete(
-        \Magento\Catalog\Model\Resource\Eav\Attribute $subject,
-        \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+        \Magento\Catalog\Model\ResourceModel\Eav\Attribute $subject,
+        \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
     ) {
         if ($attribute->getIsUsedForPromoRules()) {
             $this->checkCatalogRulesAvailability($attribute->getAttributeCode());
diff --git a/app/code/Magento/CatalogRule/Pricing/Price/CatalogRulePrice.php b/app/code/Magento/CatalogRule/Pricing/Price/CatalogRulePrice.php
index 5140f4a55eee011fca72375dc48118fac012f658..5d31098ae96d5bde6e96f28dbb21e8e74d45b417 100644
--- a/app/code/Magento/CatalogRule/Pricing/Price/CatalogRulePrice.php
+++ b/app/code/Magento/CatalogRule/Pricing/Price/CatalogRulePrice.php
@@ -7,7 +7,7 @@
 namespace Magento\CatalogRule\Pricing\Price;
 
 use Magento\Catalog\Model\Product;
-use Magento\CatalogRule\Model\Resource\RuleFactory;
+use Magento\CatalogRule\Model\ResourceModel\RuleFactory;
 use Magento\Customer\Model\Session;
 use Magento\Framework\Pricing\Adjustment\Calculator;
 use Magento\Framework\Pricing\Price\AbstractPrice;
@@ -41,7 +41,7 @@ class CatalogRulePrice extends AbstractPrice implements BasePriceProviderInterfa
     protected $customerSession;
 
     /**
-     * @var \Magento\CatalogRule\Model\Resource\RuleFactory
+     * @var \Magento\CatalogRule\Model\ResourceModel\RuleFactory
      */
     protected $resourceRuleFactory;
 
diff --git a/app/code/Magento/CatalogRule/Test/Unit/Model/Indexer/IndexBuilderTest.php b/app/code/Magento/CatalogRule/Test/Unit/Model/Indexer/IndexBuilderTest.php
index 390543bf74ffcbbac61fa26431ec4af2b37b3655..518a116d910db77386f2caede19037d404730ac2 100644
--- a/app/code/Magento/CatalogRule/Test/Unit/Model/Indexer/IndexBuilderTest.php
+++ b/app/code/Magento/CatalogRule/Test/Unit/Model/Indexer/IndexBuilderTest.php
@@ -18,7 +18,7 @@ class IndexBuilderTest extends \PHPUnit_Framework_TestCase
     protected $indexBuilder;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -28,7 +28,7 @@ class IndexBuilderTest extends \PHPUnit_Framework_TestCase
     protected $storeManager;
 
     /**
-     * @var \Magento\CatalogRule\Model\Resource\Rule\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\CatalogRule\Model\ResourceModel\Rule\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $ruleCollectionFactory;
 
@@ -116,14 +116,14 @@ class IndexBuilderTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->resource = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             ['getConnection', 'getTableName'],
             [],
             '',
             false
         );
         $this->ruleCollectionFactory = $this->getMock(
-            'Magento\CatalogRule\Model\Resource\Rule\CollectionFactory',
+            'Magento\CatalogRule\Model\ResourceModel\Rule\CollectionFactory',
             ['create', 'addFieldToFilter'],
             [],
             '',
@@ -219,7 +219,7 @@ class IndexBuilderTest extends \PHPUnit_Framework_TestCase
             false
         );
         $resourceMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice',
+            'Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice',
             ['getMainTable'],
             [],
             '',
diff --git a/app/code/Magento/CatalogRule/Test/Unit/Model/Rule/Condition/ProductTest.php b/app/code/Magento/CatalogRule/Test/Unit/Model/Rule/Condition/ProductTest.php
index 9d5a6d146bfa7cb1260ec098c92ddce2a9259fd3..5755ee804517be305257e9b1ba0fcdc33c3f4995 100644
--- a/app/code/Magento/CatalogRule/Test/Unit/Model/Rule/Condition/ProductTest.php
+++ b/app/code/Magento/CatalogRule/Test/Unit/Model/Rule/Condition/ProductTest.php
@@ -22,10 +22,10 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject */
     protected $productModel;
 
-    /** @var \Magento\Catalog\Model\Resource\Product|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Product|\PHPUnit_Framework_MockObject_MockObject */
     protected $productResource;
 
-    /** @var \Magento\Catalog\Model\Resource\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject */
     protected $eavAttributeResource;
 
     protected function setUp()
@@ -48,7 +48,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->productResource = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product',
+            'Magento\Catalog\Model\ResourceModel\Product',
             ['loadAllAttributes',
                 'getAttributesByCode',
                 'getAttribute'
@@ -58,7 +58,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->eavAttributeResource = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Eav\Attribute',
+            '\Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             [
                 '__wakeup',
                 'isAllowedForRuleCondition',
diff --git a/app/code/Magento/CatalogRule/Test/Unit/Model/RuleTest.php b/app/code/Magento/CatalogRule/Test/Unit/Model/RuleTest.php
index 80f4ef5eed5ece794faef9fdc4b19f22ca4bb9af..bb8b7521642abf18e67f47170c0d7d75d39400c8 100644
--- a/app/code/Magento/CatalogRule/Test/Unit/Model/RuleTest.php
+++ b/app/code/Magento/CatalogRule/Test/Unit/Model/RuleTest.php
@@ -42,12 +42,12 @@ class RuleTest extends \PHPUnit_Framework_TestCase
     protected $_ruleProductProcessor;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_productCollectionFactory;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Iterator|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Iterator|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_resourceIterator;
 
@@ -113,7 +113,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->_productCollectionFactory = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\CollectionFactory',
+            '\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory',
             ['create'],
             [],
             '',
@@ -121,7 +121,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->_resourceIterator = $this->getMock(
-            '\Magento\Framework\Model\Resource\Iterator',
+            '\Magento\Framework\Model\ResourceModel\Iterator',
             ['walk'],
             [],
             '',
diff --git a/app/code/Magento/CatalogRule/Test/Unit/Pricing/Price/CatalogRulePriceTest.php b/app/code/Magento/CatalogRule/Test/Unit/Pricing/Price/CatalogRulePriceTest.php
index 44a3efcdd797a126098241b25e74e2796dac3c2d..a4f42f663b64832deddfa08aa52873e90315cdba 100644
--- a/app/code/Magento/CatalogRule/Test/Unit/Pricing/Price/CatalogRulePriceTest.php
+++ b/app/code/Magento/CatalogRule/Test/Unit/Pricing/Price/CatalogRulePriceTest.php
@@ -19,7 +19,7 @@ class CatalogRulePriceTest extends \PHPUnit_Framework_TestCase
     protected $object;
 
     /**
-     * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $saleableItemMock;
 
@@ -44,12 +44,12 @@ class CatalogRulePriceTest extends \PHPUnit_Framework_TestCase
     protected $priceInfoMock;
 
     /**
-     * @var \Magento\CatalogRule\Model\Resource\RuleFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\CatalogRule\Model\ResourceModel\RuleFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $catalogRuleResourceFactoryMock;
 
     /**
-     * @var \Magento\CatalogRule\Model\Resource\Rule|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\CatalogRule\Model\ResourceModel\Rule|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $catalogRuleResourceMock;
 
@@ -110,14 +110,14 @@ class CatalogRulePriceTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->catalogRuleResourceFactoryMock = $this->getMock(
-            '\Magento\CatalogRule\Model\Resource\RuleFactory',
+            '\Magento\CatalogRule\Model\ResourceModel\RuleFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->catalogRuleResourceMock = $this->getMock(
-            '\Magento\CatalogRule\Model\Resource\Rule',
+            '\Magento\CatalogRule\Model\ResourceModel\Rule',
             [],
             [],
             '',
diff --git a/app/code/Magento/CatalogRule/composer.json b/app/code/Magento/CatalogRule/composer.json
index 6ecef40f903ca08d8c204d9b1f7bf2b953d4e76c..f102bad5722811f46e6199faab84d9267bbd5eb0 100644
--- a/app/code/Magento/CatalogRule/composer.json
+++ b/app/code/Magento/CatalogRule/composer.json
@@ -12,7 +12,8 @@
         "magento/framework": "1.0.0-beta"
     },
     "suggest": {
-        "magento/module-import-export": "1.0.0-beta"
+        "magento/module-import-export": "1.0.0-beta",
+        "magento/module-catalog-rule-sample-data": "Sample Data version:1.0.0-beta"
     },
     "type": "magento2-module",
     "version": "1.0.0-beta",
diff --git a/app/code/Magento/CatalogRule/etc/adminhtml/di.xml b/app/code/Magento/CatalogRule/etc/adminhtml/di.xml
index e9fc1e75afd4acc163923db923f8d06bb6559539..c9149770a0ffdd8d7ea5d3a11ceaf387be030ac1 100644
--- a/app/code/Magento/CatalogRule/etc/adminhtml/di.xml
+++ b/app/code/Magento/CatalogRule/etc/adminhtml/di.xml
@@ -29,7 +29,7 @@
     <type name="Magento\ImportExport\Model\Import">
         <plugin name="reindex_after_import" type="Magento\CatalogRule\Plugin\Indexer\ImportExport"/>
     </type>
-    <type name="Magento\Catalog\Model\Resource\Eav\Attribute">
+    <type name="Magento\Catalog\Model\ResourceModel\Eav\Attribute">
         <plugin name="change_product_attribute" type="Magento\CatalogRule\Plugin\Indexer\Product\Attribute"/>
     </type>
     <type name="Magento\Catalog\Model\Product\Action">
diff --git a/app/code/Magento/CatalogRule/etc/adminhtml/events.xml b/app/code/Magento/CatalogRule/etc/adminhtml/events.xml
index bf3988a2062fdb34ded651b2594d99a216b021bd..cd4cf6fbdb6ca0f4024fa880d11d4eb3899db20b 100644
--- a/app/code/Magento/CatalogRule/etc/adminhtml/events.xml
+++ b/app/code/Magento/CatalogRule/etc/adminhtml/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_get_final_price">
-        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessAdminFinalPriceObserver" method="execute" />
+        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessAdminFinalPriceObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/CatalogRule/etc/crontab/events.xml b/app/code/Magento/CatalogRule/etc/crontab/events.xml
index bf3988a2062fdb34ded651b2594d99a216b021bd..cd4cf6fbdb6ca0f4024fa880d11d4eb3899db20b 100644
--- a/app/code/Magento/CatalogRule/etc/crontab/events.xml
+++ b/app/code/Magento/CatalogRule/etc/crontab/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_get_final_price">
-        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessAdminFinalPriceObserver" method="execute" />
+        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessAdminFinalPriceObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/CatalogRule/etc/di.xml b/app/code/Magento/CatalogRule/etc/di.xml
index 769d2bb38a30b5078ce1609956447246badcd567..da4a8ad03cba674808869e161054a5c31f6a5413 100644
--- a/app/code/Magento/CatalogRule/etc/di.xml
+++ b/app/code/Magento/CatalogRule/etc/di.xml
@@ -6,12 +6,12 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
-    <type name="Magento\CatalogRule\Model\Resource\Rule">
+    <type name="Magento\CatalogRule\Model\ResourceModel\Rule">
         <arguments>
             <argument name="eventManager" xsi:type="object">Magento\Framework\Event\Manager\Proxy</argument>
         </arguments>
     </type>
-    <type name="Magento\CatalogRule\Model\Resource\Rule\Collection" shared="false" />
+    <type name="Magento\CatalogRule\Model\ResourceModel\Rule\Collection" shared="false" />
     <type name="Magento\Catalog\Model\Product\PriceModifier\Composite">
         <arguments>
             <argument name="modifiers" xsi:type="array">
diff --git a/app/code/Magento/CatalogRule/etc/frontend/events.xml b/app/code/Magento/CatalogRule/etc/frontend/events.xml
index cab8eb3c1dbd586223d1f1e221bc212e4d1a451e..1badd08192d481e03ccf18d15cd9ac1cda7cf984 100644
--- a/app/code/Magento/CatalogRule/etc/frontend/events.xml
+++ b/app/code/Magento/CatalogRule/etc/frontend/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_get_final_price">
-        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" method="execute" />
+        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" />
     </event>
     <event name="prepare_catalog_product_collection_prices">
-        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" method="execute" />
+        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/CatalogRule/etc/webapi_rest/events.xml b/app/code/Magento/CatalogRule/etc/webapi_rest/events.xml
index cab8eb3c1dbd586223d1f1e221bc212e4d1a451e..1badd08192d481e03ccf18d15cd9ac1cda7cf984 100644
--- a/app/code/Magento/CatalogRule/etc/webapi_rest/events.xml
+++ b/app/code/Magento/CatalogRule/etc/webapi_rest/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_get_final_price">
-        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" method="execute" />
+        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" />
     </event>
     <event name="prepare_catalog_product_collection_prices">
-        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" method="execute" />
+        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/CatalogRule/etc/webapi_soap/events.xml b/app/code/Magento/CatalogRule/etc/webapi_soap/events.xml
index cab8eb3c1dbd586223d1f1e221bc212e4d1a451e..1badd08192d481e03ccf18d15cd9ac1cda7cf984 100644
--- a/app/code/Magento/CatalogRule/etc/webapi_soap/events.xml
+++ b/app/code/Magento/CatalogRule/etc/webapi_soap/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_get_final_price">
-        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" method="execute" />
+        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\ProcessFrontFinalPriceObserver" />
     </event>
     <event name="prepare_catalog_product_collection_prices">
-        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" method="execute" />
+        <observer name="catalogrule" instance="Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPricesObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/CatalogRule/view/adminhtml/layout/catalog_rule_promo_catalog_block.xml b/app/code/Magento/CatalogRule/view/adminhtml/layout/catalog_rule_promo_catalog_block.xml
index 56bc29579bb4261b184c99b3ae31e92ee72fb97e..6068253a53c2dd9caca048d6d462b342827f7057 100644
--- a/app/code/Magento/CatalogRule/view/adminhtml/layout/catalog_rule_promo_catalog_block.xml
+++ b/app/code/Magento/CatalogRule/view/adminhtml/layout/catalog_rule_promo_catalog_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="promo.catalog.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">promo_catalog_grid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\CatalogRule\Model\Resource\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\CatalogRule\Model\ResourceModel\Grid\Collection</argument>
                     <argument name="default_sort" xsi:type="string">name</argument>
                     <argument name="default_dir" xsi:type="string">ASC</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
diff --git a/app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/ConfigurableProductsProvider.php b/app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/ConfigurableProductsProvider.php
index c9a049eac678545bc27a8265aa6693e32b2f8966..7899c1bcbd33117479af255361e5ebfa1a9c4fc3 100644
--- a/app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/ConfigurableProductsProvider.php
+++ b/app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/ConfigurableProductsProvider.php
@@ -8,13 +8,13 @@ namespace Magento\CatalogRuleConfigurable\Plugin\CatalogRule\Model;
 
 class ConfigurableProductsProvider
 {
-    /** @var \Magento\Framework\App\Resource */
+    /** @var \Magento\Framework\App\ResourceConnection */
     private $resource;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
-    public function __construct(\Magento\Framework\App\Resource $resource)
+    public function __construct(\Magento\Framework\App\ResourceConnection $resource)
     {
         $this->resource = $resource;
     }
diff --git a/app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandler.php b/app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandler.php
index 156ec7edd7ef743117ce6b61bd6259e92473b51c..b8f8b78108fc9bd18d4c6e9a57a39c0836651611 100644
--- a/app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandler.php
+++ b/app/code/Magento/CatalogRuleConfigurable/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandler.php
@@ -14,7 +14,7 @@ use Magento\CatalogRuleConfigurable\Plugin\CatalogRule\Model\ConfigurableProduct
  */
 class ConfigurableProductHandler
 {
-    /** @var \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable */
+    /** @var \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable */
     private $configurable;
 
     /** @var ConfigurableProductsProvider */
@@ -24,11 +24,11 @@ class ConfigurableProductHandler
     private $subProductsValidationResults = [];
 
     /**
-     * @param \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable $configurable
+     * @param \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable $configurable
      * @param ConfigurableProductsProvider $configurableProductsProvider
      */
     public function __construct(
-        \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable $configurable,
+        \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable $configurable,
         ConfigurableProductsProvider $configurableProductsProvider
     ) {
         $this->configurable = $configurable;
diff --git a/app/code/Magento/CatalogRuleConfigurable/Test/Unit/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandlerTest.php b/app/code/Magento/CatalogRuleConfigurable/Test/Unit/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandlerTest.php
index 54ced70d8e033151a87f5afed9de8a7eea947652..5878f7eea8702c555b62f790fee6482d3beb1b1d 100644
--- a/app/code/Magento/CatalogRuleConfigurable/Test/Unit/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandlerTest.php
+++ b/app/code/Magento/CatalogRuleConfigurable/Test/Unit/Plugin/CatalogRule/Model/Rule/ConfigurableProductHandlerTest.php
@@ -7,7 +7,7 @@
 namespace Magento\CatalogRuleConfigurable\Test\Unit\Plugin\CatalogRule\Model\Rule;
 
 use Magento\CatalogRuleConfigurable\Plugin\CatalogRule\Model\Rule\ConfigurableProductHandler;
-use Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable;
+use Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable;
 use Magento\CatalogRuleConfigurable\Plugin\CatalogRule\Model\ConfigurableProductsProvider;
 
 /**
@@ -39,7 +39,7 @@ class ConfigurableProductHandlerTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->configurableMock = $this->getMock(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable',
             ['getChildrenIds'],
             [],
             '',
diff --git a/app/code/Magento/CatalogSearch/Block/Advanced/Result.php b/app/code/Magento/CatalogSearch/Block/Advanced/Result.php
index 96c4756601b4bcec4c78e5e87f5a7aca14ab8efe..2c4d18995ecbb00b6039c3ab269595b1fa5e52c1 100644
--- a/app/code/Magento/CatalogSearch/Block/Advanced/Result.php
+++ b/app/code/Magento/CatalogSearch/Block/Advanced/Result.php
@@ -7,7 +7,7 @@ namespace Magento\CatalogSearch\Block\Advanced;
 
 use Magento\Catalog\Model\Layer\Resolver as LayerResolver;
 use Magento\CatalogSearch\Model\Advanced;
-use Magento\CatalogSearch\Model\Resource\Advanced\Collection;
+use Magento\CatalogSearch\Model\ResourceModel\Advanced\Collection;
 use Magento\Framework\UrlFactory;
 use Magento\Framework\View\Element\AbstractBlock;
 use Magento\Framework\View\Element\Template;
diff --git a/app/code/Magento/CatalogSearch/Block/Result.php b/app/code/Magento/CatalogSearch/Block/Result.php
index 4a041db739158817e34ca329c3f3c175b68c59f0..6670743efd1ce02381a8aec41196d934eb3c4253 100644
--- a/app/code/Magento/CatalogSearch/Block/Result.php
+++ b/app/code/Magento/CatalogSearch/Block/Result.php
@@ -8,7 +8,7 @@ namespace Magento\CatalogSearch\Block;
 use Magento\Catalog\Block\Product\ListProduct;
 use Magento\Catalog\Model\Layer\Resolver as LayerResolver;
 use Magento\CatalogSearch\Helper\Data;
-use Magento\CatalogSearch\Model\Resource\Fulltext\Collection;
+use Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection;
 use Magento\Framework\View\Element\Template;
 use Magento\Framework\View\Element\Template\Context;
 use Magento\Search\Model\QueryFactory;
@@ -133,12 +133,13 @@ class Result extends Template
         /* @var $category \Magento\Catalog\Model\Category */
         $availableOrders = $category->getAvailableSortByOptions();
         unset($availableOrders['position']);
+        $availableOrders['relevance'] = __('Relevance');
 
         $this->getListBlock()->setAvailableOrders(
             $availableOrders
         )->setDefaultDirection(
             'desc'
-        )->setSortBy(
+        )->setDefaultSortBy(
             'relevance'
         );
 
diff --git a/app/code/Magento/CatalogSearch/Controller/Result/Index.php b/app/code/Magento/CatalogSearch/Controller/Result/Index.php
index f5e611a4e0218a4d5001525d3207aa445c6f1812..4a682161c6d6bc8edc3d0ed80a7b45e00f0b1a5c 100644
--- a/app/code/Magento/CatalogSearch/Controller/Result/Index.php
+++ b/app/code/Magento/CatalogSearch/Controller/Result/Index.php
@@ -9,7 +9,7 @@ namespace Magento\CatalogSearch\Controller\Result;
 use Magento\Catalog\Model\Layer\Resolver;
 use Magento\Catalog\Model\Session;
 use Magento\Framework\App\Action\Context;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Store\Model\StoreManagerInterface;
 use Magento\Search\Model\QueryFactory;
 
diff --git a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider.php b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider.php
index 4a8eb4ffead46da40c95211f71ec0c5228be99db..7824202ffb31c2069f1f49c38cc396045990df00 100644
--- a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider.php
+++ b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Aggregation/DataProvider.php
@@ -8,7 +8,7 @@ namespace Magento\CatalogSearch\Model\Adapter\Mysql\Aggregation;
 use Magento\Catalog\Model\Product;
 use Magento\Customer\Model\Session;
 use Magento\Eav\Model\Config;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\App\ScopeResolverInterface;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\DB\Ddl\Table;
@@ -48,13 +48,13 @@ class DataProvider implements DataProviderInterface
 
     /**
      * @param Config $eavConfig
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param ScopeResolverInterface $scopeResolver
      * @param Session $customerSession
      */
     public function __construct(
         Config $eavConfig,
-        Resource $resource,
+        ResourceConnection $resource,
         ScopeResolverInterface $scopeResolver,
         Session $customerSession
     ) {
diff --git a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Dynamic/DataProvider.php b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Dynamic/DataProvider.php
index 754d803ab1eaca54cc03676856ab382f2926388d..b486feeafb601bd65ce186d80dc76de39bc63b97 100644
--- a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Dynamic/DataProvider.php
+++ b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Dynamic/DataProvider.php
@@ -7,7 +7,7 @@ namespace Magento\CatalogSearch\Model\Adapter\Mysql\Dynamic;
 
 use Magento\Catalog\Model\Layer\Filter\Price\Range;
 use Magento\Customer\Model\Session;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\DB\Ddl\Table;
 use Magento\Framework\DB\Select;
@@ -52,14 +52,14 @@ class DataProvider implements DataProviderInterface
     private $connection;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param Range $range
      * @param Session $customerSession
      * @param MysqlDataProviderInterface $dataProvider
      * @param IntervalFactory $intervalFactory
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         Range $range,
         Session $customerSession,
         MysqlDataProviderInterface $dataProvider,
diff --git a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Field/Resolver.php b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Field/Resolver.php
index f358659563ada4422a774b61585c34f0f232f2af..2b7e81750d4bf12a682af90a5981e7384a404126 100644
--- a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Field/Resolver.php
+++ b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Field/Resolver.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CatalogSearch\Model\Adapter\Mysql\Field;
 
-use Magento\Catalog\Model\Resource\Product\Attribute\Collection as AttributeCollection;
+use Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection as AttributeCollection;
 use Magento\Framework\Search\Adapter\Mysql\Field\FieldFactory;
 use Magento\Framework\Search\Adapter\Mysql\Field\FieldInterface;
 use Magento\Framework\Search\Adapter\Mysql\Field\ResolverInterface;
diff --git a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Filter/Preprocessor.php b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Filter/Preprocessor.php
index 8f8fb11c19d8513f40427af224ee2fe6921cb783..98aa6bb7e710ab1492fff90a66ae24dd7f5391ea 100644
--- a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Filter/Preprocessor.php
+++ b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Filter/Preprocessor.php
@@ -8,7 +8,7 @@ namespace Magento\CatalogSearch\Model\Adapter\Mysql\Filter;
 use Magento\Catalog\Model\Product;
 use Magento\CatalogSearch\Model\Search\TableMapper;
 use Magento\Eav\Model\Config;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\App\ScopeResolverInterface;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\Search\Adapter\Mysql\ConditionManager;
@@ -60,7 +60,7 @@ class Preprocessor implements PreprocessorInterface
      * @param ConditionManager $conditionManager
      * @param ScopeResolverInterface $scopeResolver
      * @param Config $config
-     * @param Resource|Resource $resource
+     * @param ResourceConnection $resource
      * @param TableMapper $tableMapper
      * @param string $attributePrefix
      */
@@ -68,7 +68,7 @@ class Preprocessor implements PreprocessorInterface
         ConditionManager $conditionManager,
         ScopeResolverInterface $scopeResolver,
         Config $config,
-        Resource $resource,
+        ResourceConnection $resource,
         TableMapper $tableMapper,
         $attributePrefix
     ) {
@@ -97,7 +97,7 @@ class Preprocessor implements PreprocessorInterface
      */
     private function processQueryWithField(FilterInterface $filter, $isNegation, $query)
     {
-        /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attribute */
+        /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
         $attribute = $this->config->getAttribute(Product::ENTITY, $filter->getField());
         if ($filter->getField() === 'price') {
             $resultQuery = str_replace(
diff --git a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Plugin/Aggregation/Category/DataProvider.php b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Plugin/Aggregation/Category/DataProvider.php
index 74f1b498cffddf7c8610dd39be9c958afde2e8cf..6220d75179e7ed252f5b2f32e3c1693b0f279b6d 100644
--- a/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Plugin/Aggregation/Category/DataProvider.php
+++ b/app/code/Magento/CatalogSearch/Model/Adapter/Mysql/Plugin/Aggregation/Category/DataProvider.php
@@ -6,7 +6,7 @@
 namespace Magento\CatalogSearch\Model\Adapter\Mysql\Plugin\Aggregation\Category;
 
 use Magento\Catalog\Model\Layer\Resolver;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\App\ScopeResolverInterface;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\DB\Ddl\Table;
@@ -34,12 +34,12 @@ class DataProvider
     protected $categoryFactory;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param ScopeResolverInterface $scopeResolver
      * @param Resolver $layerResolver
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         ScopeResolverInterface $scopeResolver,
         Resolver $layerResolver
     ) {
diff --git a/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php b/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php
index 12cc44bc6c2013ffc65cc8cfbcd6854d98f21256..4e25ed12fc3241f10748f3eb3f5c82cb0bb63490 100644
--- a/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php
+++ b/app/code/Magento/CatalogSearch/Model/Adminhtml/System/Config/Backend/Engine.php
@@ -18,7 +18,7 @@ class Engine extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -27,7 +27,7 @@ class Engine extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/CatalogSearch/Model/Advanced.php b/app/code/Magento/CatalogSearch/Model/Advanced.php
index 05a2a92b54076b7ee2d4849811ca8fd692cfaaf6..277e092dec29124a083a8507dfe988634d3156f0 100644
--- a/app/code/Magento/CatalogSearch/Model/Advanced.php
+++ b/app/code/Magento/CatalogSearch/Model/Advanced.php
@@ -8,11 +8,11 @@ namespace Magento\CatalogSearch\Model;
 use Magento\Catalog\Model\Config;
 use Magento\Catalog\Model\Product\Visibility;
 use Magento\Catalog\Model\ProductFactory;
-use Magento\Catalog\Model\Resource\Eav\Attribute;
-use Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory as AttributeCollectionFactory;
-use Magento\Catalog\Model\Resource\Product\CollectionFactory as ProductCollectionFactory;
-use Magento\CatalogSearch\Model\Resource\Advanced\Collection as ProductCollection;
-use Magento\CatalogSearch\Model\Resource\AdvancedFactory;
+use Magento\Catalog\Model\ResourceModel\Eav\Attribute;
+use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory as AttributeCollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;
+use Magento\CatalogSearch\Model\ResourceModel\Advanced\Collection as ProductCollection;
+use Magento\CatalogSearch\Model\ResourceModel\AdvancedFactory;
 use Magento\Directory\Model\CurrencyFactory;
 use Magento\Eav\Model\Entity\Attribute as EntityAttribute;
 use Magento\Framework\Model\Context;
@@ -22,7 +22,7 @@ use Magento\Store\Model\StoreManagerInterface;
 
 /**
  * Catalog advanced search model
- * @method \Magento\CatalogSearch\Model\Resource\Advanced getResource()
+ * @method \Magento\CatalogSearch\Model\ResourceModel\Advanced getResource()
  * @method int getEntityTypeId()
  * @method \Magento\CatalogSearch\Model\Advanced setEntityTypeId(int $value)
  * @method int getAttributeSetId()
@@ -235,7 +235,7 @@ class Advanced extends \Magento\Framework\Model\AbstractModel
     /**
      * Retrieve array of attributes used in advanced search
      *
-     * @return array|\Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @return array|\Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     public function getAttributes()
     {
diff --git a/app/code/Magento/CatalogSearch/Model/Autocomplete/DataProvider.php b/app/code/Magento/CatalogSearch/Model/Autocomplete/DataProvider.php
index f721b1ea3ac4454ade38208a5e69e6058ab96585..be47520a40c59c359b9270bc31543ea6aa946af5 100644
--- a/app/code/Magento/CatalogSearch/Model/Autocomplete/DataProvider.php
+++ b/app/code/Magento/CatalogSearch/Model/Autocomplete/DataProvider.php
@@ -6,7 +6,7 @@
 
 namespace Magento\CatalogSearch\Model\Autocomplete;
 
-use Magento\Search\Model\Resource\Query\Collection;
+use Magento\Search\Model\ResourceModel\Query\Collection;
 use Magento\Search\Model\QueryFactory;
 use Magento\Search\Model\Autocomplete\DataProviderInterface;
 use Magento\Search\Model\Autocomplete\ItemFactory;
diff --git a/app/code/Magento/CatalogSearch/Model/Fulltext.php b/app/code/Magento/CatalogSearch/Model/Fulltext.php
index f202d5352e409481ae7773c35f0fca5305edf6e9..d701ab40c866d517508308e3724dd5c802fa0410 100644
--- a/app/code/Magento/CatalogSearch/Model/Fulltext.php
+++ b/app/code/Magento/CatalogSearch/Model/Fulltext.php
@@ -8,15 +8,15 @@ namespace Magento\CatalogSearch\Model;
 use Magento\Framework\App\Config\ScopeConfigInterface;
 use Magento\Framework\Data\Collection\AbstractDb as DbCollection;
 use Magento\Framework\Model\Context;
-use Magento\Framework\Model\Resource\AbstractResource;
+use Magento\Framework\Model\ResourceModel\AbstractResource;
 use Magento\Framework\Registry;
 use Magento\Search\Model\QueryFactory;
 
 /**
  * Catalog advanced search model
  *
- * @method \Magento\CatalogSearch\Model\Resource\Fulltext _getResource()
- * @method \Magento\CatalogSearch\Model\Resource\Fulltext getResource()
+ * @method \Magento\CatalogSearch\Model\ResourceModel\Fulltext _getResource()
+ * @method \Magento\CatalogSearch\Model\ResourceModel\Fulltext getResource()
  * @method int getProductId()
  * @method \Magento\CatalogSearch\Model\Fulltext setProductId(int $value)
  * @method int getStoreId()
@@ -70,7 +70,7 @@ class Fulltext extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\CatalogSearch\Model\Resource\Fulltext');
+        $this->_init('Magento\CatalogSearch\Model\ResourceModel\Fulltext');
     }
 
     /**
diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext.php b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext.php
index 385758d0abf3c60b0ba15c202c5690cc206dadf6..c59954933ce3985f928e61926b1249692ce2e758 100644
--- a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext.php
+++ b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext.php
@@ -6,7 +6,7 @@
 namespace Magento\CatalogSearch\Model\Indexer;
 
 use Magento\CatalogSearch\Model\Indexer\Fulltext\Action\FullFactory;
-use Magento\CatalogSearch\Model\Resource\Fulltext as FulltextResource;
+use Magento\CatalogSearch\Model\ResourceModel\Fulltext as FulltextResource;
 use \Magento\Framework\Search\Request\Config as SearchRequestConfig;
 use Magento\Framework\Search\Request\DimensionFactory;
 use Magento\Store\Model\StoreManagerInterface;
diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php
index 504a9c674115d594664eab16fe27e2c8cef007b8..4c0f94351f51d1fc3154880275ef9ec3ca1962bf 100644
--- a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php
+++ b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Action/Full.php
@@ -6,7 +6,7 @@
 namespace Magento\CatalogSearch\Model\Indexer\Fulltext\Action;
 
 use Magento\CatalogSearch\Model\Indexer\Fulltext;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * @SuppressWarnings(PHPMD.TooManyFields)
@@ -55,7 +55,7 @@ class Full
     protected $productEmulators = [];
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     protected $productAttributeCollectionFactory;
 
@@ -102,7 +102,7 @@ class Full
     protected $storeManager;
 
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\Engine
+     * @var \Magento\CatalogSearch\Model\ResourceModel\Engine
      */
     protected $engine;
 
@@ -132,7 +132,7 @@ class Full
     protected $resource;
 
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\Fulltext
+     * @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext
      */
     protected $fulltextResource;
 
@@ -152,13 +152,13 @@ class Full
     protected $connection;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param \Magento\Catalog\Model\Product\Type $catalogProductType
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\Search\Request\Config $searchRequestConfig
      * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $catalogProductStatus
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $productAttributeCollectionFactory
-     * @param \Magento\CatalogSearch\Model\Resource\EngineProvider $engineProvider
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $prodAttributeCollectionFactory
+     * @param \Magento\CatalogSearch\Model\ResourceModel\EngineProvider $engineProvider
      * @param \Magento\CatalogSearch\Model\Indexer\IndexerHandlerFactory $indexHandlerFactory
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
@@ -166,19 +166,19 @@ class Full
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
-     * @param \Magento\CatalogSearch\Model\Resource\Fulltext $fulltextResource
+     * @param \Magento\CatalogSearch\Model\ResourceModel\Fulltext $fulltextResource
      * @param \Magento\Framework\Search\Request\DimensionFactory $dimensionFactory
      * @param \Magento\Framework\Indexer\ConfigInterface $indexerConfig
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         \Magento\Catalog\Model\Product\Type $catalogProductType,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\Search\Request\Config $searchRequestConfig,
         \Magento\Catalog\Model\Product\Attribute\Source\Status $catalogProductStatus,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $productAttributeCollectionFactory,
-        \Magento\CatalogSearch\Model\Resource\EngineProvider $engineProvider,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $prodAttributeCollectionFactory,
+        \Magento\CatalogSearch\Model\ResourceModel\EngineProvider $engineProvider,
         \Magento\CatalogSearch\Model\Indexer\IndexerHandlerFactory $indexHandlerFactory,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
@@ -186,7 +186,7 @@ class Full
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
-        \Magento\CatalogSearch\Model\Resource\Fulltext $fulltextResource,
+        \Magento\CatalogSearch\Model\ResourceModel\Fulltext $fulltextResource,
         \Magento\Framework\Search\Request\DimensionFactory $dimensionFactory,
         \Magento\Framework\Indexer\ConfigInterface $indexerConfig
     ) {
@@ -196,7 +196,7 @@ class Full
         $this->eavConfig = $eavConfig;
         $this->searchRequestConfig = $searchRequestConfig;
         $this->catalogProductStatus = $catalogProductStatus;
-        $this->productAttributeCollectionFactory = $productAttributeCollectionFactory;
+        $this->productAttributeCollectionFactory = $prodAttributeCollectionFactory;
         $this->eventManager = $eventManager;
         $this->scopeConfig = $scopeConfig;
         $this->storeManager = $storeManager;
diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Attribute.php b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Attribute.php
index 3be577512eaab2e9eab29dfd1ef1516e595d5d55..a8bd889c3b24bd8c482d4b41e6c68093fbe7e2dc 100644
--- a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Attribute.php
+++ b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Attribute.php
@@ -29,15 +29,15 @@ class Attribute extends AbstractPlugin
     /**
      * Invalidate indexer on attribute save (searchable flag change)
      *
-     * @param \Magento\Catalog\Model\Resource\Attribute $subject
+     * @param \Magento\Catalog\Model\ResourceModel\Attribute $subject
      * @param \Closure $proceed
      * @param \Magento\Framework\Model\AbstractModel $attribute
      *
-     * @return \Magento\Catalog\Model\Resource\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Attribute
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundSave(
-        \Magento\Catalog\Model\Resource\Attribute $subject,
+        \Magento\Catalog\Model\ResourceModel\Attribute $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $attribute
     ) {
@@ -62,15 +62,15 @@ class Attribute extends AbstractPlugin
     /**
      * Invalidate indexer on searchable attribute delete
      *
-     * @param \Magento\Catalog\Model\Resource\Attribute $subject
+     * @param \Magento\Catalog\Model\ResourceModel\Attribute $subject
      * @param \Closure $proceed
      * @param \Magento\Framework\Model\AbstractModel $attribute
      *
-     * @return \Magento\Catalog\Model\Resource\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Attribute
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundDelete(
-        \Magento\Catalog\Model\Resource\Attribute $subject,
+        \Magento\Catalog\Model\ResourceModel\Attribute $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $attribute
     ) {
diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/Group.php b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/Group.php
index 5b29e7c007508969da72f51d1ba34fc773e0f524..f720d66b071118c23f32ee43b55d12559f21191b 100644
--- a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/Group.php
+++ b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/Group.php
@@ -13,15 +13,15 @@ class Group extends AbstractPlugin
     /**
      * Invalidate indexer on store group save
      *
-     * @param \Magento\Store\Model\Resource\Group $subject
+     * @param \Magento\Store\Model\ResourceModel\Group $subject
      * @param \Closure $proceed
      * @param \Magento\Framework\Model\AbstractModel $group
      *
-     * @return \Magento\Store\Model\Resource\Group
+     * @return \Magento\Store\Model\ResourceModel\Group
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundSave(
-        \Magento\Store\Model\Resource\Group $subject,
+        \Magento\Store\Model\ResourceModel\Group $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $group
     ) {
@@ -37,15 +37,15 @@ class Group extends AbstractPlugin
     /**
      * Invalidate indexer on store group delete
      *
-     * @param \Magento\Store\Model\Resource\Group $subject
-     * @param \Magento\Store\Model\Resource\Group $result
+     * @param \Magento\Store\Model\ResourceModel\Group $subject
+     * @param \Magento\Store\Model\ResourceModel\Group $result
      *
-     * @return \Magento\Store\Model\Resource\Group
+     * @return \Magento\Store\Model\ResourceModel\Group
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function afterDelete(
-        \Magento\Store\Model\Resource\Group $subject,
-        \Magento\Store\Model\Resource\Group $result
+        \Magento\Store\Model\ResourceModel\Group $subject,
+        \Magento\Store\Model\ResourceModel\Group $result
     ) {
         $this->indexerRegistry->get(Fulltext::INDEXER_ID)->invalidate();
         return $result;
diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/View.php b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/View.php
index 3ff1d44fdbc1f361e614bb5c6bac92ecb22708f3..b4368148f77e60120012ca7b3332ce8778d79093 100644
--- a/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/View.php
+++ b/app/code/Magento/CatalogSearch/Model/Indexer/Fulltext/Plugin/Store/View.php
@@ -13,15 +13,15 @@ class View extends AbstractPlugin
     /**
      * Invalidate indexer on store view save
      *
-     * @param \Magento\Store\Model\Resource\Store $subject
+     * @param \Magento\Store\Model\ResourceModel\Store $subject
      * @param \Closure $proceed
      * @param \Magento\Framework\Model\AbstractModel $store
      *
-     * @return \Magento\Store\Model\Resource\Store
+     * @return \Magento\Store\Model\ResourceModel\Store
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundSave(
-        \Magento\Store\Model\Resource\Store $subject,
+        \Magento\Store\Model\ResourceModel\Store $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $store
     ) {
@@ -36,15 +36,15 @@ class View extends AbstractPlugin
     /**
      * Invalidate indexer on store view delete
      *
-     * @param \Magento\Store\Model\Resource\Store $subject
-     * @param \Magento\Store\Model\Resource\Store $result
+     * @param \Magento\Store\Model\ResourceModel\Store $subject
+     * @param \Magento\Store\Model\ResourceModel\Store $result
      *
-     * @return \Magento\Store\Model\Resource\Store
+     * @return \Magento\Store\Model\ResourceModel\Store
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function afterDelete(
-        \Magento\Store\Model\Resource\Store $subject,
-        \Magento\Store\Model\Resource\Store $result
+        \Magento\Store\Model\ResourceModel\Store $subject,
+        \Magento\Store\Model\ResourceModel\Store $result
     ) {
         $this->indexerRegistry->get(Fulltext::INDEXER_ID)->invalidate();
         return $result;
diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/IndexStructure.php b/app/code/Magento/CatalogSearch/Model/Indexer/IndexStructure.php
index 8f18d48b9db8a53b0d04e3b0182b8e8f18cd586d..36dabb37f637fe57e85f26a7dc3488a3a48408e2 100644
--- a/app/code/Magento/CatalogSearch/Model/Indexer/IndexStructure.php
+++ b/app/code/Magento/CatalogSearch/Model/Indexer/IndexStructure.php
@@ -6,7 +6,7 @@
 
 namespace Magento\CatalogSearch\Model\Indexer;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\DB\Ddl\Table;
 use Magento\Framework\Search\Request\Dimension;
@@ -25,11 +25,11 @@ class IndexStructure implements IndexStructureInterface
     private $indexScopeResolver;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param IndexScopeResolver $indexScopeResolver
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         IndexScopeResolver $indexScopeResolver
     ) {
         $this->resource = $resource;
diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/IndexerHandler.php b/app/code/Magento/CatalogSearch/Model/Indexer/IndexerHandler.php
index affc5787532c70a7d001bfe375c717a68220a61c..fa5ca4ba80a39d5de2c384fb244841aa7e28b9ce 100644
--- a/app/code/Magento/CatalogSearch/Model/Indexer/IndexerHandler.php
+++ b/app/code/Magento/CatalogSearch/Model/Indexer/IndexerHandler.php
@@ -6,7 +6,7 @@
 namespace Magento\CatalogSearch\Model\Indexer;
 
 use Magento\Eav\Model\Config;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\Indexer\SaveHandler\IndexerInterface;
 use Magento\Framework\Search\Request\Dimension;
@@ -58,7 +58,7 @@ class IndexerHandler implements IndexerInterface
 
     /**
      * @param IndexStructure $indexStructure
-     * @param Resource|Resource $resource
+     * @param ResourceConnection $resource
      * @param Config $eavConfig
      * @param Batch $batch
      * @param \Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver $indexScopeResolver
@@ -67,7 +67,7 @@ class IndexerHandler implements IndexerInterface
      */
     public function __construct(
         IndexStructure $indexStructure,
-        Resource $resource,
+        ResourceConnection $resource,
         Config $eavConfig,
         Batch $batch,
         IndexScopeResolver $indexScopeResolver,
diff --git a/app/code/Magento/CatalogSearch/Model/Indexer/ProductFieldset.php b/app/code/Magento/CatalogSearch/Model/Indexer/ProductFieldset.php
index e595fe239b4945a59030e0421c6ec88ef16f8a5a..6b96c2e2d0a3a9314ffc3c45df4cbb713e6ae797 100644
--- a/app/code/Magento/CatalogSearch/Model/Indexer/ProductFieldset.php
+++ b/app/code/Magento/CatalogSearch/Model/Indexer/ProductFieldset.php
@@ -6,7 +6,7 @@
 namespace Magento\CatalogSearch\Model\Indexer;
 
 use Magento\Catalog\Model\Product;
-use Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory;
 use Magento\Eav\Model\Config;
 use Magento\Eav\Model\Entity\Attribute;
 
@@ -64,7 +64,7 @@ class ProductFieldset implements \Magento\Framework\Indexer\FieldsetInterface
         if ($this->searchableAttributes === null) {
             $this->searchableAttributes = [];
 
-            /** @var \Magento\Catalog\Model\Resource\Product\Attribute\Collection $productAttributes */
+            /** @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection $productAttributes */
             $productAttributes = $this->collectionFactory->create();
             $productAttributes->addToIndexFilter(true);
 
diff --git a/app/code/Magento/CatalogSearch/Model/Layer/Category/ItemCollectionProvider.php b/app/code/Magento/CatalogSearch/Model/Layer/Category/ItemCollectionProvider.php
index 39bbf72a97609db5b2221142a9873ead66f23909..eef9e409178a35524829b9c5c6f9fd7b67befd7b 100644
--- a/app/code/Magento/CatalogSearch/Model/Layer/Category/ItemCollectionProvider.php
+++ b/app/code/Magento/CatalogSearch/Model/Layer/Category/ItemCollectionProvider.php
@@ -7,7 +7,7 @@
 namespace Magento\CatalogSearch\Model\Layer\Category;
 
 use Magento\Catalog\Model\Layer\ItemCollectionProviderInterface;
-use Magento\Catalog\Model\Resource\Product\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
 
 class ItemCollectionProvider implements ItemCollectionProviderInterface
 {
@@ -26,11 +26,11 @@ class ItemCollectionProvider implements ItemCollectionProviderInterface
 
     /**
      * @param \Magento\Catalog\Model\Category $category
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     public function getCollection(\Magento\Catalog\Model\Category $category)
     {
-        /** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
         $collection = $this->collectionFactory->create();
         $collection->addCategoryFilter($category);
         return $collection;
diff --git a/app/code/Magento/CatalogSearch/Model/Layer/Filter/Attribute.php b/app/code/Magento/CatalogSearch/Model/Layer/Filter/Attribute.php
index e2c5914856f0df23e0945a22a986e3f449baf948..b326b2a59d72db1797d4e5ca36a39012bf85b616 100644
--- a/app/code/Magento/CatalogSearch/Model/Layer/Filter/Attribute.php
+++ b/app/code/Magento/CatalogSearch/Model/Layer/Filter/Attribute.php
@@ -57,7 +57,7 @@ class Attribute extends AbstractFilter
             return $this;
         }
         $attribute = $this->getAttributeModel();
-        /** @var \Magento\CatalogSearch\Model\Resource\Fulltext\Collection $productCollection */
+        /** @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection $productCollection */
         $productCollection = $this->getLayer()
             ->getProductCollection();
         $productCollection->addFieldToFilter($attribute->getAttributeCode(), $attributeValue);
@@ -79,7 +79,7 @@ class Attribute extends AbstractFilter
     protected function _getItemsData()
     {
         $attribute = $this->getAttributeModel();
-        /** @var \Magento\CatalogSearch\Model\Resource\Fulltext\Collection $productCollection */
+        /** @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection $productCollection */
         $productCollection = $this->getLayer()
             ->getProductCollection();
         $optionsFacetedData = $productCollection->getFacetedData($attribute->getAttributeCode());
diff --git a/app/code/Magento/CatalogSearch/Model/Layer/Filter/Category.php b/app/code/Magento/CatalogSearch/Model/Layer/Filter/Category.php
index 3c29805598700f91cab04a2f909941c2527641fa..810ff33d64b5fb0002dbb25734dc41eeba8c29bd 100644
--- a/app/code/Magento/CatalogSearch/Model/Layer/Filter/Category.php
+++ b/app/code/Magento/CatalogSearch/Model/Layer/Filter/Category.php
@@ -106,7 +106,7 @@ class Category extends AbstractFilter
      */
     protected function _getItemsData()
     {
-        /** @var \Magento\CatalogSearch\Model\Resource\Fulltext\Collection $productCollection */
+        /** @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection $productCollection */
         $productCollection = $this->getLayer()->getProductCollection();
         $optionsFacetedData = $productCollection->getFacetedData('category');
         $category = $this->dataProvider->getCategory();
diff --git a/app/code/Magento/CatalogSearch/Model/Layer/Filter/Decimal.php b/app/code/Magento/CatalogSearch/Model/Layer/Filter/Decimal.php
index 6c7a5703df70b8beb89da0e7e2e6accb06ced620..c0861cd8ff8ac1dbf868738deb40fc6237a1af9e 100644
--- a/app/code/Magento/CatalogSearch/Model/Layer/Filter/Decimal.php
+++ b/app/code/Magento/CatalogSearch/Model/Layer/Filter/Decimal.php
@@ -18,7 +18,7 @@ class Decimal extends AbstractFilter
     private $priceCurrency;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Layer\Filter\Decimal
+     * @var \Magento\Catalog\Model\ResourceModel\Layer\Filter\Decimal
      */
     private $resource;
 
@@ -27,7 +27,7 @@ class Decimal extends AbstractFilter
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Model\Layer $layer
      * @param \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder
-     * @param \Magento\Catalog\Model\Resource\Layer\Filter\DecimalFactory $filterDecimalFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Layer\Filter\DecimalFactory $filterDecimalFactory
      * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
      * @param array $data
      */
@@ -36,7 +36,7 @@ class Decimal extends AbstractFilter
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Layer $layer,
         \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder,
-        \Magento\Catalog\Model\Resource\Layer\Filter\DecimalFactory $filterDecimalFactory,
+        \Magento\Catalog\Model\ResourceModel\Layer\Filter\DecimalFactory $filterDecimalFactory,
         \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
         array $data = []
     ) {
@@ -95,7 +95,7 @@ class Decimal extends AbstractFilter
     {
         $attribute = $this->getAttributeModel();
 
-        /** @var \Magento\CatalogSearch\Model\Resource\Fulltext\Collection $productCollection */
+        /** @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection $productCollection */
         $productCollection = $this->getLayer()->getProductCollection();
         $productSize = $productCollection->getSize();
         $facets = $productCollection->getFacetedData($attribute->getAttributeCode());
diff --git a/app/code/Magento/CatalogSearch/Model/Layer/Filter/Price.php b/app/code/Magento/CatalogSearch/Model/Layer/Filter/Price.php
index eed25ab72b04eaaa28a60204a76e392d89abc1b6..6a0b9cd0d24b4dc30601e66229782cbac0004416 100644
--- a/app/code/Magento/CatalogSearch/Model/Layer/Filter/Price.php
+++ b/app/code/Magento/CatalogSearch/Model/Layer/Filter/Price.php
@@ -28,7 +28,7 @@ class Price extends AbstractFilter
     private $priceCurrency;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Layer\Filter\Price
+     * @var \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price
      */
     private $resource;
 
@@ -47,7 +47,7 @@ class Price extends AbstractFilter
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Model\Layer $layer
      * @param \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder
-     * @param \Magento\Catalog\Model\Resource\Layer\Filter\Price $resource
+     * @param \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price $resource
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Search\Dynamic\Algorithm $priceAlgorithm
      * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
@@ -62,7 +62,7 @@ class Price extends AbstractFilter
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Layer $layer,
         \Magento\Catalog\Model\Layer\Filter\Item\DataBuilder $itemDataBuilder,
-        \Magento\Catalog\Model\Resource\Layer\Filter\Price $resource,
+        \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price $resource,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Search\Dynamic\Algorithm $priceAlgorithm,
         \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
@@ -86,7 +86,7 @@ class Price extends AbstractFilter
     }
 
     /**
-     * @return \Magento\Catalog\Model\Resource\Layer\Filter\Price
+     * @return \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price
      */
     public function getResource()
     {
@@ -201,7 +201,7 @@ class Price extends AbstractFilter
         $attribute = $this->getAttributeModel();
         $this->_requestVar = $attribute->getAttributeCode();
 
-        /** @var \Magento\CatalogSearch\Model\Resource\Fulltext\Collection $productCollection */
+        /** @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection $productCollection */
         $productCollection = $this->getLayer()->getProductCollection();
         $facets = $productCollection->getFacetedData($attribute->getAttributeCode());
 
diff --git a/app/code/Magento/CatalogSearch/Model/Layer/Search/Plugin/CollectionFilter.php b/app/code/Magento/CatalogSearch/Model/Layer/Search/Plugin/CollectionFilter.php
index 7df2d048d37038e35a6332ef00b8f4c7a9eb3a85..c2fd3e402ab1bfd5eb41738c3bd966bc16511e35 100644
--- a/app/code/Magento/CatalogSearch/Model/Layer/Search/Plugin/CollectionFilter.php
+++ b/app/code/Magento/CatalogSearch/Model/Layer/Search/Plugin/CollectionFilter.php
@@ -29,7 +29,7 @@ class CollectionFilter
      *
      * @param \Magento\Catalog\Model\Layer\Search\CollectionFilter $subject
      * @param \Closure $proceed
-     * @param \Magento\CatalogSearch\Model\Resource\Fulltext\Collection $collection
+     * @param \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection $collection
      * @param Category $category
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
diff --git a/app/code/Magento/CatalogSearch/Model/Price/Interval.php b/app/code/Magento/CatalogSearch/Model/Price/Interval.php
index 1c2fdd8e5ac3bfee05d80f043f93f36a02cf0882..203f9f62872316912165bb952cb9661425446f17 100644
--- a/app/code/Magento/CatalogSearch/Model/Price/Interval.php
+++ b/app/code/Magento/CatalogSearch/Model/Price/Interval.php
@@ -10,14 +10,14 @@ use Magento\Framework\Search\Dynamic\IntervalInterface;
 class Interval implements IntervalInterface
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Layer\Filter\Price
+     * @var \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price
      */
     private $resource;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Layer\Filter\Price $resource
+     * @param \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price $resource
      */
-    public function __construct(\Magento\Catalog\Model\Resource\Layer\Filter\Price $resource)
+    public function __construct(\Magento\Catalog\Model\ResourceModel\Layer\Filter\Price $resource)
     {
         $this->resource = $resource;
     }
diff --git a/app/code/Magento/CatalogSearch/Model/Resource/Advanced.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php
similarity index 87%
rename from app/code/Magento/CatalogSearch/Model/Resource/Advanced.php
rename to app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php
index 0ae0373aa6870dde2cd28699891b7bf7ef021485..4dafffbf8dfabd33dece9493b9e6d99eef0f0384 100644
--- a/app/code/Magento/CatalogSearch/Model/Resource/Advanced.php
+++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogSearch\Model\Resource;
+namespace Magento\CatalogSearch\Model\ResourceModel;
 
 /**
  * Advanced Catalog Search resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Advanced extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Advanced extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Core event manager proxy
@@ -29,13 +29,13 @@ class Advanced extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         $connectionName = null
@@ -58,7 +58,7 @@ class Advanced extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Prepare search condition for attribute
      *
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
      * @param string|array $value
      * @return string|array
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
diff --git a/app/code/Magento/CatalogSearch/Model/Resource/Advanced/Collection.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced/Collection.php
similarity index 92%
rename from app/code/Magento/CatalogSearch/Model/Resource/Advanced/Collection.php
rename to app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced/Collection.php
index 50024434e3dbd8b2bec4cd77b7256992e3368176..1a43b5b7e2ad703bbf1169df697dd092a42a5a2d 100644
--- a/app/code/Magento/CatalogSearch/Model/Resource/Advanced/Collection.php
+++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/Advanced/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogSearch\Model\Resource\Advanced;
+namespace Magento\CatalogSearch\Model\ResourceModel\Advanced;
 
 use Magento\Catalog\Model\Product;
 use Magento\Framework\Search\Adapter\Mysql\TemporaryStorage;
@@ -14,7 +14,7 @@ use Magento\Framework\Search\Adapter\Mysql\TemporaryStorage;
  * @author      Magento Core Team <core@magentocommerce.com>
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
+class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
 {
     /**
      * List Of filters
@@ -43,16 +43,16 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Module\Manager $moduleManager ,
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrl
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
@@ -69,16 +69,16 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory,
-        \Magento\Catalog\Model\Resource\Url $catalogUrl,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Stdlib\DateTime $dateTime,
diff --git a/app/code/Magento/CatalogSearch/Model/Resource/Engine.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/Engine.php
similarity index 98%
rename from app/code/Magento/CatalogSearch/Model/Resource/Engine.php
rename to app/code/Magento/CatalogSearch/Model/ResourceModel/Engine.php
index 4df79a8f1c2992500662f30bc7db8442357f18cf..51b7aaa37b35f3526b16ea2ed985aa2c354bed95 100644
--- a/app/code/Magento/CatalogSearch/Model/Resource/Engine.php
+++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/Engine.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogSearch\Model\Resource;
+namespace Magento\CatalogSearch\Model\ResourceModel;
 
 /**
  * CatalogSearch Fulltext Index Engine resource model
diff --git a/app/code/Magento/CatalogSearch/Model/Resource/EngineInterface.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/EngineInterface.php
similarity index 95%
rename from app/code/Magento/CatalogSearch/Model/Resource/EngineInterface.php
rename to app/code/Magento/CatalogSearch/Model/ResourceModel/EngineInterface.php
index 59b4efb64985350f44489c101546621d75573b62..71fb78698619b61a7c9d600d034d6ae3a35252f8 100644
--- a/app/code/Magento/CatalogSearch/Model/Resource/EngineInterface.php
+++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/EngineInterface.php
@@ -7,7 +7,7 @@
 /**
  * CatalogSearch Index Engine Interface
  */
-namespace Magento\CatalogSearch\Model\Resource;
+namespace Magento\CatalogSearch\Model\ResourceModel;
 
 interface EngineInterface
 {
diff --git a/app/code/Magento/CatalogSearch/Model/Resource/EngineProvider.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/EngineProvider.php
similarity index 90%
rename from app/code/Magento/CatalogSearch/Model/Resource/EngineProvider.php
rename to app/code/Magento/CatalogSearch/Model/ResourceModel/EngineProvider.php
index 230ff8ca8b965e3657c25d22e2f00a839b9ebfae..2f40cd74d0cc671a759f12d171c9e69993ec4325 100644
--- a/app/code/Magento/CatalogSearch/Model/Resource/EngineProvider.php
+++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/EngineProvider.php
@@ -7,7 +7,7 @@
 /**
  * Catalog Search engine provider
  */
-namespace Magento\CatalogSearch\Model\Resource;
+namespace Magento\CatalogSearch\Model\ResourceModel;
 
 use Magento\Store\Model\ScopeInterface;
 
@@ -16,7 +16,7 @@ class EngineProvider
     const CONFIG_ENGINE_PATH = 'catalog/search/engine';
 
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\EngineInterface
+     * @var \Magento\CatalogSearch\Model\ResourceModel\EngineInterface
      */
     protected $engine;
 
@@ -69,9 +69,9 @@ class EngineProvider
             $engineClassName = $this->enginePool[$currentEngine];
 
             $engine = $this->objectManager->create($engineClassName);
-            if (false === $engine instanceof \Magento\CatalogSearch\Model\Resource\EngineInterface) {
+            if (false === $engine instanceof \Magento\CatalogSearch\Model\ResourceModel\EngineInterface) {
                 throw new \LogicException(
-                    $engineClassName . ' doesn\'t implement \Magento\CatalogSearch\Model\Resource\EngineInterface'
+                    $engineClassName . ' doesn\'t implement \Magento\CatalogSearch\Model\ResourceModel\EngineInterface'
                 );
             }
 
diff --git a/app/code/Magento/CatalogSearch/Model/Resource/Fulltext.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php
similarity index 82%
rename from app/code/Magento/CatalogSearch/Model/Resource/Fulltext.php
rename to app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php
index 518d5c82c1c2657dcb9c2ceecf942e11fcd71712..1e1dd3cda0372b8ace682961dbabdd41b63d688d 100644
--- a/app/code/Magento/CatalogSearch/Model/Resource/Fulltext.php
+++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogSearch\Model\Resource;
+namespace Magento\CatalogSearch\Model\ResourceModel;
 
 /**
  * CatalogSearch Fulltext Index resource model
  */
-class Fulltext extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Fulltext extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Core event manager proxy
@@ -18,12 +18,12 @@ class Fulltext extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_eventManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/CatalogSearch/Model/Resource/Fulltext/Collection.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext/Collection.php
similarity index 94%
rename from app/code/Magento/CatalogSearch/Model/Resource/Fulltext/Collection.php
rename to app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext/Collection.php
index 1f2c4b4090b7863e0c3aeec35ec6af451c177c6d..5338eaddbd12d20af3b93c5e0c57aa85c4dd0db1 100644
--- a/app/code/Magento/CatalogSearch/Model/Resource/Fulltext/Collection.php
+++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/Fulltext/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogSearch\Model\Resource\Fulltext;
+namespace Magento\CatalogSearch\Model\ResourceModel\Fulltext;
 
 use Magento\Framework\DB\Select;
 use Magento\Framework\Exception\StateException;
@@ -16,7 +16,7 @@ use Magento\Framework\Search\Response\QueryResponse;
  * Fulltext Collection
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
+class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
 {
     /** @var  QueryResponse */
     protected $queryResponse;
@@ -58,16 +58,16 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrl
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
@@ -86,16 +86,16 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory,
-        \Magento\Catalog\Model\Resource\Url $catalogUrl,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Stdlib\DateTime $dateTime,
diff --git a/app/code/Magento/CatalogSearch/Model/Resource/Search/Collection.php b/app/code/Magento/CatalogSearch/Model/ResourceModel/Search/Collection.php
similarity index 93%
rename from app/code/Magento/CatalogSearch/Model/Resource/Search/Collection.php
rename to app/code/Magento/CatalogSearch/Model/ResourceModel/Search/Collection.php
index cb016b37d73ad7750fda72f91a6dad2564a40dbe..ac80801ecb13c30170d261521c3c9f081acda083 100644
--- a/app/code/Magento/CatalogSearch/Model/Resource/Search/Collection.php
+++ b/app/code/Magento/CatalogSearch/Model/ResourceModel/Search/Collection.php
@@ -6,14 +6,14 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\CatalogSearch\Model\Resource\Search;
+namespace Magento\CatalogSearch\Model\ResourceModel\Search;
 
 /**
  * Search collection
  *
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Catalog\Model\Resource\Product\Collection implements \Magento\Search\Model\SearchCollectionInterface
+class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection implements \Magento\Search\Model\SearchCollectionInterface
 {
     /**
      * Attribute collection
@@ -32,7 +32,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection impl
     /**
      * Attribute collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     protected $_attributeCollectionFactory;
 
@@ -42,21 +42,21 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection impl
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrl
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Customer\Api\GroupManagementInterface $groupManagement
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -67,21 +67,21 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection impl
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory,
-        \Magento\Catalog\Model\Resource\Url $catalogUrl,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Customer\Api\GroupManagementInterface $groupManagement,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeCollectionFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $this->_attributeCollectionFactory = $attributeCollectionFactory;
diff --git a/app/code/Magento/CatalogSearch/Model/Search/IndexBuilder.php b/app/code/Magento/CatalogSearch/Model/Search/IndexBuilder.php
index 41e7b6304dbfa9fe9bd26282f52eea86a60dc195..05535aaebd2046a2a19ffede6d81162500adbb9b 100644
--- a/app/code/Magento/CatalogSearch/Model/Search/IndexBuilder.php
+++ b/app/code/Magento/CatalogSearch/Model/Search/IndexBuilder.php
@@ -8,7 +8,7 @@ namespace Magento\CatalogSearch\Model\Search;
 
 use Magento\CatalogSearch\Model\Search\TableMapper;
 use Magento\Framework\App\Config\ScopeConfigInterface;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Select;
 use Magento\Framework\Search\Adapter\Mysql\ConditionManager;
 use Magento\Framework\Search\Adapter\Mysql\IndexBuilderInterface;
@@ -58,7 +58,7 @@ class IndexBuilder implements IndexBuilderInterface
     private $tableMapper;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param ScopeConfigInterface $config
      * @param StoreManagerInterface $storeManager
      * @param ConditionManager $conditionManager
@@ -66,7 +66,7 @@ class IndexBuilder implements IndexBuilderInterface
      * @param TableMapper $tableMapper
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         ScopeConfigInterface $config,
         StoreManagerInterface $storeManager,
         ConditionManager $conditionManager,
diff --git a/app/code/Magento/CatalogSearch/Model/Search/RequestGenerator.php b/app/code/Magento/CatalogSearch/Model/Search/RequestGenerator.php
index 6e4c29a2d913972687fdbb51b63be4c884ebdf13..29e103caff773d44689ac9934f2382f294544716 100644
--- a/app/code/Magento/CatalogSearch/Model/Search/RequestGenerator.php
+++ b/app/code/Magento/CatalogSearch/Model/Search/RequestGenerator.php
@@ -7,7 +7,7 @@ namespace Magento\CatalogSearch\Model\Search;
 
 use Magento\Catalog\Api\Data\EavAttributeInterface;
 use Magento\Catalog\Model\Entity\Attribute;
-use Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory;
 use Magento\Framework\Search\Request\BucketInterface;
 use Magento\Framework\Search\Request\FilterInterface;
 use Magento\Framework\Search\Request\QueryInterface;
@@ -131,7 +131,7 @@ class RequestGenerator
      */
     protected function getSearchableAttributes()
     {
-        /** @var \Magento\Catalog\Model\Resource\Product\Attribute\Collection $productAttributes */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection $productAttributes */
         $productAttributes = $this->productAttributeCollectionFactory->create();
         $productAttributes->addFieldToFilter(
             ['is_searchable', 'is_visible_in_advanced_search', 'is_filterable', 'is_filterable_in_search'],
diff --git a/app/code/Magento/CatalogSearch/Model/Search/TableMapper.php b/app/code/Magento/CatalogSearch/Model/Search/TableMapper.php
index 5dd7633026068b4dea7253e9d5d36e1611a265c0..67884082e9568e0d495ae915d89c21a8755f0160 100644
--- a/app/code/Magento/CatalogSearch/Model/Search/TableMapper.php
+++ b/app/code/Magento/CatalogSearch/Model/Search/TableMapper.php
@@ -6,9 +6,9 @@
 
 namespace Magento\CatalogSearch\Model\Search;
 
-use Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory;
 use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
-use Magento\Framework\App\Resource as AppResource;
+use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\Framework\DB\Select;
 use Magento\Framework\Search\Request\FilterInterface;
 use Magento\Framework\Search\Request\Filter\BoolExpression;
@@ -30,7 +30,7 @@ class TableMapper
     private $storeManager;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     private $attributeCollection;
 
@@ -238,7 +238,7 @@ class TableMapper
 
     /**
      * @param string $field
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     private function getAttributeByCode($field)
     {
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Filter/PreprocessorTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Filter/PreprocessorTest.php
index 1208bf32c77a01fe1c692b7142660570be305b38..ccc83be62eb11225e802b6c9f4a54a6890637ff2 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Filter/PreprocessorTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Adapter/Mysql/Filter/PreprocessorTest.php
@@ -98,7 +98,7 @@ class PreprocessorTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['getBackendTable', 'isStatic', 'getAttributeId', 'getAttributeCode', 'getFrontendInput'])
             ->getMockForAbstractClass();
-        $this->resource = $resource = $this->getMockBuilder('\Magento\Framework\App\Resource')
+        $this->resource = $resource = $this->getMockBuilder('\Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->setMethods(['getConnection', 'getTableName'])
             ->getMock();
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/AdvancedTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/AdvancedTest.php
index 1451d0529ee952e7e351a36f49f4af4c7cb2ef33..75393ba5f836b332569998c4cb04e83e76783b75 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/AdvancedTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/AdvancedTest.php
@@ -12,19 +12,19 @@ namespace Magento\CatalogSearch\Test\Unit\Model;
 class AdvancedTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\CatalogSearch\Model\Resource\Advanced\Collection
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\CatalogSearch\Model\ResourceModel\Advanced\Collection
      */
     protected $collection;
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\CatalogSearch\Model\Resource\Advanced
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\CatalogSearch\Model\ResourceModel\Advanced
      */
     protected $resource;
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\CatalogSearch\Model\Resource\ResourceProvider
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\CatalogSearch\Model\ResourceModel\ResourceProvider
      */
     protected $resourceProvider;
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject[]|\Magento\Catalog\Model\Resource\Eav\Attribute[]
+     * @var \PHPUnit_Framework_MockObject_MockObject[]|\Magento\Catalog\Model\ResourceModel\Eav\Attribute[]
      */
     protected $attributes;
     /**
@@ -47,7 +47,7 @@ class AdvancedTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->collection = $this->getMock(
-            'Magento\CatalogSearch\Model\Resource\Advanced\Collection',
+            'Magento\CatalogSearch\Model\ResourceModel\Advanced\Collection',
             [
                 'addAttributeToSelect',
                 'setStore',
@@ -62,7 +62,7 @@ class AdvancedTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resource = $this->getMock(
-            'Magento\CatalogSearch\Model\Resource\Advanced',
+            'Magento\CatalogSearch\Model\ResourceModel\Advanced',
             ['prepareCondition', '__wakeup', 'getIdFieldName'],
             [],
             '',
@@ -70,7 +70,7 @@ class AdvancedTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->resourceProvider = $this->getMock(
-            'Magento\CatalogSearch\Model\Resource\ResourceProvider',
+            'Magento\CatalogSearch\Model\ResourceModel\ResourceProvider',
             ['getResource', 'getResourceCollection', 'getAdvancedResultCollection'],
             [],
             '',
@@ -199,13 +199,14 @@ class AdvancedTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue(new \ArrayIterator($attributes)));
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
-        $advancedFactory = $this->getMockBuilder('Magento\CatalogSearch\Model\Resource\AdvancedFactory')
+        $advancedFactory = $this->getMockBuilder('Magento\CatalogSearch\Model\ResourceModel\AdvancedFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
         $advancedFactory->expects($this->once())->method('create')->willReturn($this->resource);
 
-        $productCollectionFactory = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\CollectionFactory')
+        $productCollectionFactory =
+            $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -377,7 +378,7 @@ class AdvancedTest extends \PHPUnit_Framework_TestCase
      * @param null $storeLabel
      * @param null $frontendInput
      * @param null $backendType
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject
      */
     private function createAttribute(
         $backend,
@@ -388,7 +389,7 @@ class AdvancedTest extends \PHPUnit_Framework_TestCase
         $backendType = null
     ) {
         $attribute = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             [
                 'getAttributeCode',
                 'getStoreLabel',
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Autocomplete/DataProviderTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Autocomplete/DataProviderTest.php
index 21ad2e71def76ee35795b8e3c8ac84079351f6bf..aa29a8fc1a0b20661b9703b32b9c353fa2e0843c 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Autocomplete/DataProviderTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Autocomplete/DataProviderTest.php
@@ -26,7 +26,7 @@ class DataProviderTest extends \PHPUnit_Framework_TestCase
     private $itemFactory;
 
     /**
-     * @var \Magento\Search\Model\Resource\Query\Collection |\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Search\Model\ResourceModel\Query\Collection |\PHPUnit_Framework_MockObject_MockObject
      */
     private $suggestCollection;
 
@@ -34,7 +34,7 @@ class DataProviderTest extends \PHPUnit_Framework_TestCase
     {
         $helper = new ObjectManager($this);
 
-        $this->suggestCollection = $this->getMockBuilder('Magento\Search\Model\Resource\Query\Collection')
+        $this->suggestCollection = $this->getMockBuilder('Magento\Search\Model\ResourceModel\Query\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['getIterator'])
             ->getMock();
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Action/FullTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Action/FullTest.php
index a4c6bcc15156d4dcf7a1e55dbbb434ab85e16265..bed9a9fc7627027652312c8b21a23dda7cc73624 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Action/FullTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Action/FullTest.php
@@ -17,7 +17,7 @@ class FullTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $resource = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $catalogProductType = $this->getMockBuilder('Magento\Catalog\Model\Product\Type')
@@ -33,7 +33,7 @@ class FullTest extends \PHPUnit_Framework_TestCase
             $this->getMockBuilder('Magento\Catalog\Model\Product\Attribute\Source\Status')
                 ->disableOriginalConstructor()
                 ->getMock();
-        $engineProvider = $this->getMockBuilder('Magento\CatalogSearch\Model\Resource\EngineProvider')
+        $engineProvider = $this->getMockBuilder('Magento\CatalogSearch\Model\ResourceModel\EngineProvider')
             ->disableOriginalConstructor()
             ->getMock();
         $eventManager = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface')
@@ -57,7 +57,7 @@ class FullTest extends \PHPUnit_Framework_TestCase
         $localeDate = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime\TimezoneInterface')
             ->disableOriginalConstructor()
             ->getMock();
-        $fulltextResource = $this->getMockBuilder('Magento\CatalogSearch\Model\Resource\Fulltext')
+        $fulltextResource = $this->getMockBuilder('Magento\CatalogSearch\Model\ResourceModel\Fulltext')
             ->disableOriginalConstructor()
             ->getMock();
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/AttributeTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/AttributeTest.php
index 38d6089b6910e6bc26cdb4b50e5e3eaacc6d8e2f..50d4be8a10d4a897583cc5968b7fdbfff11dd016 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/AttributeTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/AttributeTest.php
@@ -15,7 +15,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     protected $indexerMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Resource\Attribute
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\ResourceModel\Attribute
      */
     protected $subjectMock;
 
@@ -31,7 +31,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->subjectMock = $this->getMock('Magento\Catalog\Model\Resource\Attribute', [], [], '', false);
+        $this->subjectMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Attribute', [], [], '', false);
         $this->indexerMock = $this->getMockForAbstractClass(
             'Magento\Framework\Indexer\IndexerInterface',
             [],
@@ -64,7 +64,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     public function testAroundSave($isObjectNew, $isSearchableChanged, $invalidateCounter)
     {
         $attributeMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Eav\Attribute',
+            '\Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['dataHasChangedFor', 'isObjectNew', '__wakeup'],
             [],
             '',
@@ -76,7 +76,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
 
         $attributeMock->expects($this->any())->method('isObjectNew')->will($this->returnValue($isObjectNew));
 
-        $closureMock = function (\Magento\Catalog\Model\Resource\Eav\Attribute $object) use ($attributeMock) {
+        $closureMock = function (\Magento\Catalog\Model\ResourceModel\Eav\Attribute $object) use ($attributeMock) {
             $this->assertEquals($object, $attributeMock);
             return $this->subjectMock;
         };
@@ -113,7 +113,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     public function testAroundDelete($isObjectNew, $isSearchable, $invalidateCounter)
     {
         $attributeMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Eav\Attribute',
+            '\Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['getIsSearchable', 'isObjectNew', '__wakeup'],
             [],
             '',
@@ -122,7 +122,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
         $attributeMock->expects($this->any())->method('getIsSearchable')->will($this->returnValue($isSearchable));
         $attributeMock->expects($this->once())->method('isObjectNew')->will($this->returnValue($isObjectNew));
 
-        $closureMock = function (\Magento\Catalog\Model\Resource\Eav\Attribute $object) use ($attributeMock) {
+        $closureMock = function (\Magento\Catalog\Model\ResourceModel\Eav\Attribute $object) use ($attributeMock) {
             $this->assertEquals($object, $attributeMock);
             return $this->subjectMock;
         };
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/GroupTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/GroupTest.php
index 96176e560ebc5f6dbc1f0420c41b4fe190d725c6..715804b38992686e6cea313c40dbf073508188d5 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/GroupTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/GroupTest.php
@@ -15,7 +15,7 @@ class GroupTest extends \PHPUnit_Framework_TestCase
     protected $indexerMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Store\Model\Resource\Group
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Store\Model\ResourceModel\Group
      */
     protected $subjectMock;
 
@@ -31,7 +31,7 @@ class GroupTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->subjectMock = $this->getMock('Magento\Store\Model\Resource\Group', [], [], '', false);
+        $this->subjectMock = $this->getMock('Magento\Store\Model\ResourceModel\Group', [], [], '', false);
         $this->indexerMock = $this->getMockForAbstractClass(
             'Magento\Framework\Indexer\IndexerInterface',
             [],
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/ViewTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/ViewTest.php
index 9ca5dc2c13e0ba197adc3cae87248cef9d08c645..b4470611015db93310b5372b9b2aefe8e50a61c7 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/ViewTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/Fulltext/Plugin/Store/ViewTest.php
@@ -15,7 +15,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
     protected $indexerMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Store\Model\Resource\Store
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Store\Model\ResourceModel\Store
      */
     protected $subjectMock;
 
@@ -31,7 +31,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->subjectMock = $this->getMock('Magento\Store\Model\Resource\Store', [], [], '', false);
+        $this->subjectMock = $this->getMock('Magento\Store\Model\ResourceModel\Store', [], [], '', false);
         $this->indexerMock = $this->getMockForAbstractClass(
             'Magento\Framework\Indexer\IndexerInterface',
             [],
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/FulltextTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/FulltextTest.php
index a63731c24c5f4798123d4c713b1f711224a13b13..1118c81f3fa87d889b0ec00d8cfde91926235f83 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/FulltextTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Indexer/FulltextTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CatalogSearch\Test\Unit\Model\Indexer;
 
-use Magento\CatalogSearch\Model\Resource\Fulltext as FulltextResource;
+use Magento\CatalogSearch\Model\ResourceModel\Fulltext as FulltextResource;
 use Magento\Framework\Search\Request\Config as SearchRequestConfig;
 use Magento\Framework\Search\Request\DimensionFactory;
 
@@ -37,7 +37,7 @@ class FulltextTest extends \PHPUnit_Framework_TestCase
     protected $saveHandler;
 
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\Fulltext|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $fulltextResource;
 
@@ -90,7 +90,7 @@ class FulltextTest extends \PHPUnit_Framework_TestCase
         );
         $dimensionFactory->expects($this->any())->method('create')->willReturn($this->dimension);
 
-        $this->fulltextResource = $this->getClassMock('\Magento\CatalogSearch\Model\Resource\Fulltext');
+        $this->fulltextResource = $this->getClassMock('\Magento\CatalogSearch\Model\ResourceModel\Fulltext');
         $this->searchRequestConfig = $this->getClassMock('Magento\Framework\Search\Request\Config');
 
         $this->model = new \Magento\CatalogSearch\Model\Indexer\Fulltext(
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Catalog/ItemCollectionProviderTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Catalog/ItemCollectionProviderTest.php
index 7036f0950ffa183820b100e44f669f82f36a48a9..b687a089c32c8b65dde89473b447a6c71c3ac33c 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Catalog/ItemCollectionProviderTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Catalog/ItemCollectionProviderTest.php
@@ -14,11 +14,11 @@ class ItemCollectionProviderTest extends \PHPUnit_Framework_TestCase
     {
         $categoryMock = $this->getMock('Magento\Catalog\Model\Category', [], [], '', false);
 
-        $collectionMock = $this->getMock('Magento\Catalog\Model\Resource\Product\Collection', [], [], '', false);
+        $collectionMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Product\Collection', [], [], '', false);
         $collectionMock->expects($this->once())->method('addCategoryFilter')->with($categoryMock);
 
         $collectionFactoryMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\CollectionFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/AttributeTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/AttributeTest.php
index 9f08823111c5b2f5767c044ca3b789e910494258..77d097019a37a585a248c65c5cee8910c9571e30 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/AttributeTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/AttributeTest.php
@@ -22,7 +22,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     /** @var  \Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend|MockObject */
     private $frontend;
 
-    /** @var  \Magento\CatalogSearch\Model\Resource\Fulltext\Collection|MockObject */
+    /** @var  \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection|MockObject */
     private $fulltextCollection;
 
     /** @var  \Magento\Catalog\Model\Layer\State|MockObject */
@@ -34,7 +34,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\App\RequestInterface|MockObject */
     private $request;
 
-    /** @var  \Magento\Catalog\Model\Resource\Layer\Filter\AttributeFactory|MockObject */
+    /** @var  \Magento\Catalog\Model\ResourceModel\Layer\Filter\AttributeFactory|MockObject */
     private $filterAttributeFactory;
 
     /** @var  \Magento\Catalog\Model\Layer\Filter\ItemFactory|MockObject */
@@ -67,7 +67,8 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['getState', 'getProductCollection'])
             ->getMock();
-        $this->fulltextCollection = $this->getMockBuilder('\Magento\CatalogSearch\Model\Resource\Fulltext\Collection')
+        $this->fulltextCollection =
+            $this->getMockBuilder('\Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['addFieldToFilter', 'getFacetedData', 'getSize'])
             ->getMock();
@@ -81,7 +82,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->filterAttributeFactory = $this->getMockBuilder(
-            '\Magento\Catalog\Model\Resource\Layer\Filter\AttributeFactory'
+            '\Magento\Catalog\Model\ResourceModel\Layer\Filter\AttributeFactory'
         )
             ->disableOriginalConstructor()
             ->setMethods(['create'])
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/CategoryTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/CategoryTest.php
index c787c8e9df11cda08a21c8b2371da12fe6ebe1f6..301dcf8ea9b69649aa28f3bc68c9cd5c772709bb 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/CategoryTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/CategoryTest.php
@@ -22,7 +22,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
     private $category;
 
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\Fulltext\Collection|MockObject
+     * @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection|MockObject
      */
     private $fulltextCollection;
 
@@ -83,7 +83,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->fulltextCollection = $this->fulltextCollection = $this->getMockBuilder(
-            '\Magento\CatalogSearch\Model\Resource\Fulltext\Collection'
+            '\Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection'
         )
             ->disableOriginalConstructor()
             ->setMethods(['addCategoryFilter', 'getFacetedData', 'getSize'])
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/DecimalTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/DecimalTest.php
index 37f3f1344987c300ae1eed4f0cbf99b0c04ae025..8db49d324acfb75a975da3c3773d993cf63dcbb4 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/DecimalTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/DecimalTest.php
@@ -17,7 +17,7 @@ class DecimalTest extends \PHPUnit_Framework_TestCase
     private $filterItem;
 
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\Fulltext\Collection|MockObject
+     * @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection|MockObject
      */
     private $fulltextCollection;
 
@@ -75,7 +75,7 @@ class DecimalTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($this->filterItem));
 
         $this->fulltextCollection = $this->fulltextCollection = $this->getMockBuilder(
-            '\Magento\CatalogSearch\Model\Resource\Fulltext\Collection'
+            '\Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection'
         )
             ->disableOriginalConstructor()
             ->getMock();
@@ -84,11 +84,12 @@ class DecimalTest extends \PHPUnit_Framework_TestCase
             ->method('getProductCollection')
             ->will($this->returnValue($this->fulltextCollection));
 
-        $filterDecimalFactory = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Layer\Filter\DecimalFactory')
+        $filterDecimalFactory =
+            $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Layer\Filter\DecimalFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $resource = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Layer\Filter\Decimal')
+        $resource = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Layer\Filter\Decimal')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/PriceTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/PriceTest.php
index 100342563cc1fed8562d6fa2320bb4e13b9adcca..7648cda9ea6a169cd5473edf992e27e61b6e17d3 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/PriceTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Layer/Filter/PriceTest.php
@@ -23,7 +23,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
     private $price;
 
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\Fulltext\Collection|MockObject
+     * @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection|MockObject
      */
     private $fulltextCollection;
 
@@ -86,7 +86,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($this->state));
 
         $this->fulltextCollection = $this->fulltextCollection = $this->getMockBuilder(
-            '\Magento\CatalogSearch\Model\Resource\Fulltext\Collection'
+            '\Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection'
         )
             ->disableOriginalConstructor()
             ->setMethods(['addFieldToFilter', 'getFacetedData'])
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Resource/AdvancedTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/AdvancedTest.php
similarity index 87%
rename from app/code/Magento/CatalogSearch/Test/Unit/Model/Resource/AdvancedTest.php
rename to app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/AdvancedTest.php
index 340161cc28bb64d3b31a1ba9e537a7b136f93f48..94bc0686cd20a4d91e2fa410cb2194e6219b40f7 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Resource/AdvancedTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/AdvancedTest.php
@@ -3,15 +3,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogSearch\Test\Unit\Model\Resource;
+namespace Magento\CatalogSearch\Test\Unit\Model\ResourceModel;
 
-use Magento\Catalog\Model\Resource\Eav\Attribute;
+use Magento\Catalog\Model\ResourceModel\Eav\Attribute;
 use PHPUnit_Framework_TestCase;
 
 class AdvancedTest extends PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\Advanced
+     * @var \Magento\CatalogSearch\Model\ResourceModel\Advanced
      */
     private $model;
 
@@ -22,7 +22,7 @@ class AdvancedTest extends PHPUnit_Framework_TestCase
     {
         $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
-        $this->model = $helper->getObject('Magento\CatalogSearch\Model\Resource\Advanced');
+        $this->model = $helper->getObject('Magento\CatalogSearch\Model\ResourceModel\Advanced');
     }
 
     /**
@@ -31,7 +31,7 @@ class AdvancedTest extends PHPUnit_Framework_TestCase
     public function testPrepareCondition($backendType, $value, $expected)
     {
         /** @var Attribute|\PHPUnit_Framework_MockObject_MockObject $attributeMock */
-        $attributeMock = $this->getMockBuilder('Magento\Catalog\Model\Resource\Eav\Attribute')
+        $attributeMock = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->setMethods(['getBackendType'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Resource/EngineTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/EngineTest.php
similarity index 91%
rename from app/code/Magento/CatalogSearch/Test/Unit/Model/Resource/EngineTest.php
rename to app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/EngineTest.php
index 8bac0cd312fd2a3a70772d2aae0befafebb12769..4659f26ffdc5c9c46f06b7c5c8c3e1639076ebab 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Resource/EngineTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/EngineTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\CatalogSearch\Test\Unit\Model\Resource;
+namespace Magento\CatalogSearch\Test\Unit\Model\ResourceModel;
 
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
@@ -12,7 +12,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class EngineTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\Engine
+     * @var \Magento\CatalogSearch\Model\ResourceModel\Engine
      */
     private $target;
 
@@ -27,7 +27,7 @@ class EngineTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['getIfNullSql'])
             ->getMockForAbstractClass();
-        $resource = $this->getMockBuilder('\Magento\Framework\App\Resource')
+        $resource = $this->getMockBuilder('\Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->setMethods(['getConnection', 'getTableName'])
             ->getMock();
@@ -41,7 +41,7 @@ class EngineTest extends \PHPUnit_Framework_TestCase
 
         $objectManager = new ObjectManager($this);
         $this->target = $objectManager->getObject(
-            '\Magento\CatalogSearch\Model\Resource\Engine',
+            '\Magento\CatalogSearch\Model\ResourceModel\Engine',
             [
                 'resource' => $resource,
             ]
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Resource/Fulltext/CollectionTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/Fulltext/CollectionTest.php
similarity index 95%
rename from app/code/Magento/CatalogSearch/Test/Unit/Model/Resource/Fulltext/CollectionTest.php
rename to app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/Fulltext/CollectionTest.php
index 5f5a652d94de56b8332df41c816dea32bb63aea8..f86ce2a29604d73944cd376f28d1c7d60bb7b9f1 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Resource/Fulltext/CollectionTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/Fulltext/CollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogSearch\Test\Unit\Model\Resource\Fulltext;
+namespace Magento\CatalogSearch\Test\Unit\Model\ResourceModel\Fulltext;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use PHPUnit_Framework_TestCase;
@@ -11,7 +11,7 @@ use PHPUnit_Framework_TestCase;
 class CollectionTest extends PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\Fulltext\Collection
+     * @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection
      */
     private $model;
 
@@ -28,7 +28,7 @@ class CollectionTest extends PHPUnit_Framework_TestCase
         $requestBuilder = $this->getRequestBuilder();
 
         $this->model = $helper->getObject(
-            'Magento\CatalogSearch\Model\Resource\Fulltext\Collection',
+            'Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection',
             [
                 'storeManager' => $storeManager,
                 'universalFactory' => $universalFactory,
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Resource/FulltextTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/FulltextTest.php
similarity index 83%
rename from app/code/Magento/CatalogSearch/Test/Unit/Model/Resource/FulltextTest.php
rename to app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/FulltextTest.php
index 6d36e4049a7bcd480cdca23bd12bfdf22cfaf272..df0561cf3b7625cbd83391f82d65dab4d50353aa 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Resource/FulltextTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/ResourceModel/FulltextTest.php
@@ -4,13 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\CatalogSearch\Test\Unit\Model\Resource;
+namespace Magento\CatalogSearch\Test\Unit\Model\ResourceModel;
 
-
-use Magento\CatalogSearch\Model\Resource\Fulltext;
-use Magento\Framework\App\Resource;
+use Magento\CatalogSearch\Model\ResourceModel\Fulltext;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Adapter\AdapterInterface;
-use Magento\Framework\Model\Resource\Db\Context;
+use Magento\Framework\Model\ResourceModel\Db\Context;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 class FulltextTest extends \PHPUnit_Framework_TestCase
@@ -34,10 +33,10 @@ class FulltextTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->context = $this->getMockBuilder('\Magento\Framework\Model\Resource\Db\Context')
+        $this->context = $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\Context')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->resource = $this->getMockBuilder('\Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('\Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->context->expects($this->once())
@@ -52,7 +51,7 @@ class FulltextTest extends \PHPUnit_Framework_TestCase
 
         $objectManager = new ObjectManager($this);
         $this->target = $objectManager->getObject(
-            '\Magento\CatalogSearch\Model\Resource\Fulltext',
+            '\Magento\CatalogSearch\Model\ResourceModel\Fulltext',
             [
                 'context' => $this->context,
             ]
@@ -63,7 +62,7 @@ class FulltextTest extends \PHPUnit_Framework_TestCase
     {
         $this->resource->expects($this->once())
             ->method('getTableName')
-            ->with('search_query', Resource::DEFAULT_CONNECTION)
+            ->with('search_query', ResourceConnection::DEFAULT_CONNECTION)
             ->willReturn('table_name_search_query');
         $this->connection->expects($this->once())
             ->method('update')
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/IndexBuilderTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/IndexBuilderTest.php
index afdff24a2c47001eb268b41d4ebecfb4348291d7..ab297eeab5d7cbd4c28309835e34e106c3b59b0a 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/IndexBuilderTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/IndexBuilderTest.php
@@ -61,7 +61,7 @@ class IndexBuilderTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->will($this->returnValue($this->select));
 
-        $this->resource = $this->getMockBuilder('\Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('\Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->setMethods(['getConnection', 'getTableName'])
             ->getMock();
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/Indexer/IndexStructureTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/Indexer/IndexStructureTest.php
index 8b7bba0b04a4d989ea51d5b3200564f2eda89e46..c028cdd5e52c8828d9c47c6d4fee8abe00be457c 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/Indexer/IndexStructureTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/Indexer/IndexStructureTest.php
@@ -20,7 +20,7 @@ class IndexStructureTest extends \PHPUnit_Framework_TestCase
      */
     private $indexScopeResolver;
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
     /**
@@ -38,7 +38,7 @@ class IndexStructureTest extends \PHPUnit_Framework_TestCase
         $this->connection = $this->getMockBuilder('\Magento\Framework\DB\Adapter\AdapterInterface')
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
-        $this->resource = $this->getMockBuilder('\Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('\Magento\Framework\App\ResourceConnection')
             ->setMethods(['getConnection'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/RequestGeneratorTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/RequestGeneratorTest.php
index 5861e24f5763acd3efc1764a5fa6d5502f58b333..5fa29e1aeefec2f6c2605dd0413fee9fad3b2f4f 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/RequestGeneratorTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/RequestGeneratorTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CatalogSearch\Test\Unit\Model\Search;
 
-use Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory;
+use Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory;
 
 class RequestGeneratorTest extends \PHPUnit_Framework_TestCase
 {
@@ -21,7 +21,7 @@ class RequestGeneratorTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->productAttributeCollectionFactory =
-            $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory')
+            $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory')
                 ->setMethods(['create'])
                 ->disableOriginalConstructor()
                 ->getMock();
@@ -97,7 +97,7 @@ class RequestGeneratorTest extends \PHPUnit_Framework_TestCase
      */
     public function testGenerate($countResult, $attributeOptions)
     {
-        $collection = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Attribute\Collection')
+        $collection = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $collection->expects($this->any())
@@ -148,7 +148,7 @@ class RequestGeneratorTest extends \PHPUnit_Framework_TestCase
      */
     private function createAttributeMock($attributeOptions)
     {
-        $attribute = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Attribute')
+        $attribute = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Attribute')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
diff --git a/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/TableMapperTest.php b/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/TableMapperTest.php
index f888803a1db621e6c9af3c07da658a9a8d32b5ee..f52d5201e8522216351b06a90287dc9275e21d95 100644
--- a/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/TableMapperTest.php
+++ b/app/code/Magento/CatalogSearch/Test/Unit/Model/Search/TableMapperTest.php
@@ -20,7 +20,7 @@ class TableMapperTest extends \PHPUnit_Framework_TestCase
     const STORE_ID = 2514;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $attributeCollection;
 
@@ -50,7 +50,7 @@ class TableMapperTest extends \PHPUnit_Framework_TestCase
     private $storeManager;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
 
@@ -79,7 +79,7 @@ class TableMapperTest extends \PHPUnit_Framework_TestCase
                 }
             );
 
-        $this->resource = $this->getMockBuilder('\Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('\Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->resource->method('getTableName')
@@ -114,12 +114,12 @@ class TableMapperTest extends \PHPUnit_Framework_TestCase
             ->method('getStore')
             ->willReturn($this->store);
         $this->attributeCollection = $this->getMockBuilder(
-            '\Magento\Catalog\Model\Resource\Product\Attribute\Collection'
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection'
         )
             ->disableOriginalConstructor()
             ->getMock();
         $attributeCollectionFactory = $this->getMockBuilder(
-            '\Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory'
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory'
         )
             ->setMethods(['create'])
             ->disableOriginalConstructor()
@@ -574,7 +574,7 @@ class TableMapperTest extends \PHPUnit_Framework_TestCase
         $frontendInput = 'select',
         $positionInCollection = 0
     ) {
-        $attribute = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Eav\Attribute')
+        $attribute = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->setMethods(['getBackendType', 'getBackendTable', 'getId', 'getFrontendInput'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/CatalogSearch/etc/adminhtml/events.xml b/app/code/Magento/CatalogSearch/etc/adminhtml/events.xml
index 3a3a2bc612d81cfbb789d540ae4f557f1858c972..2d8d7925d406296b7756e42f9a13810a5531272b 100644
--- a/app/code/Magento/CatalogSearch/etc/adminhtml/events.xml
+++ b/app/code/Magento/CatalogSearch/etc/adminhtml/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="store_add">
-        <observer name="catalog_search" instance="Magento\CatalogSearch\Model\Indexer\Fulltext\Store" method="execute" />
+        <observer name="catalog_search" instance="Magento\CatalogSearch\Model\Indexer\Fulltext\Store" />
     </event>
 </config>
diff --git a/app/code/Magento/CatalogSearch/etc/di.xml b/app/code/Magento/CatalogSearch/etc/di.xml
index 5c6f16702e85b21f7c7ed1153f69294aa1275933..adc76b143fa3edce8bb42b0869b8618005493479 100644
--- a/app/code/Magento/CatalogSearch/etc/di.xml
+++ b/app/code/Magento/CatalogSearch/etc/di.xml
@@ -13,7 +13,7 @@
     <preference for="Magento\Framework\Search\Adapter\OptionsInterface" type="Magento\CatalogSearch\Model\Adapter\Options" />
     <type name="Magento\CatalogSearch\Model\Indexer\IndexerHandlerFactory">
         <arguments>
-            <argument name="configPath" xsi:type="const">Magento\CatalogSearch\Model\Resource\EngineInterface::CONFIG_ENGINE_PATH</argument>
+            <argument name="configPath" xsi:type="const">Magento\CatalogSearch\Model\ResourceModel\EngineInterface::CONFIG_ENGINE_PATH</argument>
             <argument name="handlers" xsi:type="array">
                 <item name="mysql" xsi:type="string">Magento\CatalogSearch\Model\Indexer\IndexerHandler</item>
             </argument>
@@ -39,13 +39,13 @@
     <type name="Magento\Catalog\Model\Product\Action">
         <plugin name="catalogsearchFulltextMassAction" type="Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Product\Action"/>
     </type>
-    <type name="Magento\Store\Model\Resource\Store">
+    <type name="Magento\Store\Model\ResourceModel\Store">
         <plugin name="catalogsearchFulltextIndexerStoreView" type="Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Store\View" />
     </type>
-    <type name="Magento\Store\Model\Resource\Group">
+    <type name="Magento\Store\Model\ResourceModel\Group">
         <plugin name="catalogsearchFulltextIndexerStoreGroup" type="Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Store\Group"/>
     </type>
-    <type name="Magento\Catalog\Model\Resource\Attribute">
+    <type name="Magento\Catalog\Model\ResourceModel\Attribute">
         <plugin name="catalogsearchFulltextIndexerAttribute" type="Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\Attribute"/>
     </type>
     <type name="Magento\Framework\Search\EntityMetadata" />
@@ -69,7 +69,7 @@
     </type>
     <type name="Magento\Framework\Search\Dynamic\IntervalFactory">
         <arguments>
-            <argument name="configPath" xsi:type="const">Magento\CatalogSearch\Model\Resource\EngineInterface::CONFIG_ENGINE_PATH</argument>
+            <argument name="configPath" xsi:type="const">Magento\CatalogSearch\Model\ResourceModel\EngineInterface::CONFIG_ENGINE_PATH</argument>
             <argument name="intervals" xsi:type="array">
                 <item name="mysql" xsi:type="string">Magento\Framework\Search\Adapter\Mysql\Aggregation\Interval</item>
             </argument>
@@ -78,7 +78,7 @@
     </type>
     <type name="Magento\Framework\Search\Dynamic\DataProviderFactory">
         <arguments>
-            <argument name="configPath" xsi:type="const">Magento\CatalogSearch\Model\Resource\EngineInterface::CONFIG_ENGINE_PATH</argument>
+            <argument name="configPath" xsi:type="const">Magento\CatalogSearch\Model\ResourceModel\EngineInterface::CONFIG_ENGINE_PATH</argument>
             <argument name="dataProviders" xsi:type="array">
                 <item name="mysql" xsi:type="string">Magento\CatalogSearch\Model\Adapter\Mysql\Dynamic\DataProvider</item>
             </argument>
@@ -95,7 +95,7 @@
             </argument>
         </arguments>
     </type>
-    <preference for="Magento\Search\Model\SearchCollectionInterface" type="Magento\CatalogSearch\Model\Resource\Search\Collection" />
+    <preference for="Magento\Search\Model\SearchCollectionInterface" type="Magento\CatalogSearch\Model\ResourceModel\Search\Collection" />
     <type name="Magento\Catalog\Model\Layer\Search\CollectionFilter">
         <plugin name="searchQuery" type="Magento\CatalogSearch\Model\Layer\Search\Plugin\CollectionFilter" />
     </type>
@@ -119,43 +119,43 @@
             </argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\CatalogSearch\Model\Resource\Fulltext\CollectionFactory" type="Magento\Catalog\Model\Resource\Product\CollectionFactory">
+    <virtualType name="Magento\CatalogSearch\Model\ResourceModel\Fulltext\CollectionFactory" type="Magento\Catalog\Model\ResourceModel\Product\CollectionFactory">
         <arguments>
-            <argument name="instanceName" xsi:type="string">Magento\CatalogSearch\Model\Resource\Fulltext\Collection</argument>
+            <argument name="instanceName" xsi:type="string">Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection</argument>
         </arguments>
     </virtualType>
     <type name="Magento\CatalogSearch\Model\Layer\Category\ItemCollectionProvider">
         <arguments>
-            <argument name="collectionFactory" xsi:type="object">Magento\CatalogSearch\Model\Resource\Fulltext\CollectionFactory</argument>
+            <argument name="collectionFactory" xsi:type="object">Magento\CatalogSearch\Model\ResourceModel\Fulltext\CollectionFactory</argument>
         </arguments>
     </type>
 
-    <virtualType name="Magento\CatalogSearch\Model\Resource\Fulltext\SearchCollection" type="Magento\CatalogSearch\Model\Resource\Fulltext\Collection">
+    <virtualType name="Magento\CatalogSearch\Model\ResourceModel\Fulltext\SearchCollection" type="Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection">
         <arguments>
             <argument name="searchRequestName" xsi:type="string">quick_search_container</argument>
         </arguments>
     </virtualType>
 
-    <virtualType name="Magento\CatalogSearch\Model\Resource\Fulltext\SearchCollectionFactory" type="Magento\Catalog\Model\Resource\Product\CollectionFactory">
+    <virtualType name="Magento\CatalogSearch\Model\ResourceModel\Fulltext\SearchCollectionFactory" type="Magento\Catalog\Model\ResourceModel\Product\CollectionFactory">
         <arguments>
-            <argument name="instanceName" xsi:type="string">Magento\CatalogSearch\Model\Resource\Fulltext\SearchCollection</argument>
+            <argument name="instanceName" xsi:type="string">Magento\CatalogSearch\Model\ResourceModel\Fulltext\SearchCollection</argument>
         </arguments>
     </virtualType>
 
     <virtualType name="Magento\CatalogSearch\Model\Layer\Search\ItemCollectionProvider" type="Magento\Catalog\Model\Layer\Search\ItemCollectionProvider">
         <arguments>
-            <argument name="collectionFactory" xsi:type="object">Magento\CatalogSearch\Model\Resource\Fulltext\SearchCollectionFactory</argument>
+            <argument name="collectionFactory" xsi:type="object">Magento\CatalogSearch\Model\ResourceModel\Fulltext\SearchCollectionFactory</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\CatalogSearch\Model\Resource\Advanced\CollectionFactory"
-                 type="Magento\Catalog\Model\Resource\Product\CollectionFactory">
+    <virtualType name="Magento\CatalogSearch\Model\ResourceModel\Advanced\CollectionFactory"
+                 type="Magento\Catalog\Model\ResourceModel\Product\CollectionFactory">
         <arguments>
-            <argument name="instanceName" xsi:type="string">Magento\CatalogSearch\Model\Resource\Advanced\Collection</argument>
+            <argument name="instanceName" xsi:type="string">Magento\CatalogSearch\Model\ResourceModel\Advanced\Collection</argument>
         </arguments>
     </virtualType>
     <type name="Magento\CatalogSearch\Model\Advanced">
         <arguments>
-            <argument name="productCollectionFactory" xsi:type="object">Magento\CatalogSearch\Model\Resource\Advanced\CollectionFactory</argument>
+            <argument name="productCollectionFactory" xsi:type="object">Magento\CatalogSearch\Model\ResourceModel\Advanced\CollectionFactory</argument>
         </arguments>
     </type>
     <virtualType name="Magento\CatalogSearch\Model\Layer\Category\Context" type="Magento\Catalog\Model\Layer\Category\Context">
@@ -195,19 +195,19 @@
     </type>
     <type name="Magento\CatalogSearch\Model\Adapter\Mysql\Filter\Preprocessor">
         <arguments>
-            <argument name="attributePrefix" xsi:type="const">Magento\CatalogSearch\Model\Resource\Engine::ATTRIBUTE_PREFIX</argument>
+            <argument name="attributePrefix" xsi:type="const">Magento\CatalogSearch\Model\ResourceModel\Engine::ATTRIBUTE_PREFIX</argument>
         </arguments>
     </type>
-    <type name="Magento\CatalogSearch\Model\Resource\EngineProvider">
+    <type name="Magento\CatalogSearch\Model\ResourceModel\EngineProvider">
         <arguments>
             <argument name="engines" xsi:type="array">
-                <item name="mysql" xsi:type="string">Magento\CatalogSearch\Model\Resource\Engine</item>
+                <item name="mysql" xsi:type="string">Magento\CatalogSearch\Model\ResourceModel\Engine</item>
             </argument>
         </arguments>
     </type>
     <type name="Magento\Search\Model\AdapterFactory">
         <arguments>
-            <argument name="path" xsi:type="const">Magento\CatalogSearch\Model\Resource\EngineInterface::CONFIG_ENGINE_PATH</argument>
+            <argument name="path" xsi:type="const">Magento\CatalogSearch\Model\ResourceModel\EngineInterface::CONFIG_ENGINE_PATH</argument>
             <argument name="scopeType" xsi:type="const">\Magento\Store\Model\ScopeInterface::SCOPE_STORE</argument>
         </arguments>
     </type>
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Category/Move.php b/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Category/Move.php
index 9d0870370b967da452d4d23a6d62f4da14a1a95a..72fa14875e68263bd2032fae87a3c931bf5acb84 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Category/Move.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Category/Move.php
@@ -27,7 +27,7 @@ class Move
     }
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Category $subject
+     * @param \Magento\Catalog\Model\ResourceModel\Category $subject
      * @param callable $proceed
      * @param Category $category
      * @param Category $newParent
@@ -36,7 +36,7 @@ class Move
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundChangeParent(
-        \Magento\Catalog\Model\Resource\Category $subject,
+        \Magento\Catalog\Model\ResourceModel\Category $subject,
         \Closure $proceed,
         $category,
         $newParent,
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Category/Remove.php b/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Category/Remove.php
index 4f4c8feaae9e54670efcd61e760f7cb18dd696b9..de93ca008e15e7dea95224135681d1fcc39157f6 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Category/Remove.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Category/Remove.php
@@ -41,14 +41,14 @@ class Remove
     /**
      * Remove product urls from storage
      *
-     * @param \Magento\Catalog\Model\Resource\Category $subject
+     * @param \Magento\Catalog\Model\ResourceModel\Category $subject
      * @param callable $proceed
      * @param CategoryInterface $category
      * @return mixed
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundDelete(
-        \Magento\Catalog\Model\Resource\Category $subject,
+        \Magento\Catalog\Model\ResourceModel\Category $subject,
         \Closure $proceed,
         CategoryInterface $category
     ) {
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Store/Group.php b/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Store/Group.php
index 9bebcf6b59ea8a5fe0d1be3b7aa9c1bd16a33a32..1aebd7f405060e1322c15b299d7f935f2759b0ec 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Store/Group.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Store/Group.php
@@ -63,14 +63,14 @@ class Group
     }
 
     /**
-     * @param \Magento\Store\Model\Resource\Group $object
+     * @param \Magento\Store\Model\ResourceModel\Group $object
      * @param callable $proceed
      * @param AbstractModel $group
-     * @return \Magento\Store\Model\Resource\Group
+     * @return \Magento\Store\Model\ResourceModel\Group
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundSave(
-        \Magento\Store\Model\Resource\Group $object,
+        \Magento\Store\Model\ResourceModel\Group $object,
         \Closure $proceed,
         AbstractModel $group
     ) {
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Store/View.php b/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Store/View.php
index d70919670a0c51c56baa02706c9584697a79b7d4..78c7cfbd5db2afc9ab20ef0f2e10bf8401f10bdf 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Store/View.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/Category/Plugin/Store/View.php
@@ -53,14 +53,14 @@ class View
     }
 
     /**
-     * @param \Magento\Store\Model\Resource\Store $object
+     * @param \Magento\Store\Model\ResourceModel\Store $object
      * @param callable $proceed
      * @param AbstractModel $store
-     * @return \Magento\Store\Model\Resource\Store
+     * @return \Magento\Store\Model\ResourceModel\Store
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundSave(
-        \Magento\Store\Model\Resource\Store $object,
+        \Magento\Store\Model\ResourceModel\Store $object,
         \Closure $proceed,
         AbstractModel $store
     ) {
@@ -134,14 +134,14 @@ class View
     }
 
     /**
-     * @param \Magento\Store\Model\Resource\Store $object
+     * @param \Magento\Store\Model\ResourceModel\Store $object
      * @param callable $proceed
      * @param AbstractModel $store
      * @return mixed
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundDelete(
-        \Magento\Store\Model\Resource\Store $object,
+        \Magento\Store\Model\ResourceModel\Store $object,
         \Closure $proceed,
         AbstractModel $store
     ) {
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Category/Product.php b/app/code/Magento/CatalogUrlRewrite/Model/Category/Product.php
index da2304809314c7abc158418b331ac5f46c9a0909..0e5d4998fa69c02e357577275878ac960363ea1b 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Category/Product.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/Category/Product.php
@@ -16,6 +16,6 @@ class Product extends AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\CatalogUrlRewrite\Model\Resource\Category\Product');
+        $this->_init('Magento\CatalogUrlRewrite\Model\ResourceModel\Category\Product');
     }
 }
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Resource/Category/Product.php b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php
similarity index 92%
rename from app/code/Magento/CatalogUrlRewrite/Model/Resource/Category/Product.php
rename to app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php
index 07ecdb8f1d0f7d7e71ab18314d4139e6eecc3c05..316b9a6d5c118e94375e6c9159285250de4886d6 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Resource/Category/Product.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/Product.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogUrlRewrite\Model\Resource\Category;
+namespace Magento\CatalogUrlRewrite\Model\ResourceModel\Category;
 
-use Magento\Framework\Model\Resource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 
 class Product extends AbstractDb
 {
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Resource/Category/ProductCollection.php b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/ProductCollection.php
similarity index 53%
rename from app/code/Magento/CatalogUrlRewrite/Model/Resource/Category/ProductCollection.php
rename to app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/ProductCollection.php
index f27df9b64a411a7762342d5f482b250e94554c3a..a012da577c58b663599162e25febfd5e35806aa4 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Resource/Category/ProductCollection.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/ResourceModel/Category/ProductCollection.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CatalogUrlRewrite\Model\Resource\Category;
+namespace Magento\CatalogUrlRewrite\Model\ResourceModel\Category;
 
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 class ProductCollection extends AbstractCollection
 {
diff --git a/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php
index a676505daeab64157875142be4114bd03f5c54c6..5304c8859dbac6d3cc9d674647a1dfb760eb1f50 100644
--- a/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php
+++ b/app/code/Magento/CatalogUrlRewrite/Model/Storage/DbStorage.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CatalogUrlRewrite\Model\Storage;
 
-use Magento\CatalogUrlRewrite\Model\Resource\Category\Product;
+use Magento\CatalogUrlRewrite\Model\ResourceModel\Category\Product;
 use Magento\UrlRewrite\Model\Storage\DbStorage as BaseDbStorage;
 use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
 
diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/AfterImportDataObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/AfterImportDataObserver.php
index 670acb8635d708a8c927fe4e651fa668a5ee3a29..fa7a1b0b386988fac65e504512e8843c3e52d14c 100644
--- a/app/code/Magento/CatalogUrlRewrite/Observer/AfterImportDataObserver.php
+++ b/app/code/Magento/CatalogUrlRewrite/Observer/AfterImportDataObserver.php
@@ -10,7 +10,7 @@ use Magento\Catalog\Model\Product;
 use Magento\CatalogImportExport\Model\Import\Product as ImportProduct;
 use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
 use Magento\Framework\Event\Observer;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\ImportExport\Model\Import as ImportExport;
 use Magento\Store\Model\Store;
 use Magento\UrlRewrite\Model\UrlPersistInterface;
@@ -103,7 +103,7 @@ class AfterImportDataObserver implements ObserverInterface
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\CatalogUrlRewrite\Model\ObjectRegistryFactory $objectRegistryFactory
      * @param \Magento\CatalogUrlRewrite\Model\ProductUrlPathGenerator $productUrlPathGenerator
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\CatalogUrlRewrite\Service\V1\StoreViewService $storeViewService
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param UrlPersistInterface $urlPersist
@@ -117,7 +117,7 @@ class AfterImportDataObserver implements ObserverInterface
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\CatalogUrlRewrite\Model\ObjectRegistryFactory $objectRegistryFactory,
         \Magento\CatalogUrlRewrite\Model\ProductUrlPathGenerator $productUrlPathGenerator,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\CatalogUrlRewrite\Service\V1\StoreViewService $storeViewService,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         UrlPersistInterface $urlPersist,
diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/ClearProductUrlsObserver.php b/app/code/Magento/CatalogUrlRewrite/Observer/ClearProductUrlsObserver.php
index fe70c831703893385ad85431f1aa8754b938da02..026d778966dbf31abbbbe3336de6cb0da299d0a5 100644
--- a/app/code/Magento/CatalogUrlRewrite/Observer/ClearProductUrlsObserver.php
+++ b/app/code/Magento/CatalogUrlRewrite/Observer/ClearProductUrlsObserver.php
@@ -6,7 +6,7 @@
 namespace Magento\CatalogUrlRewrite\Observer;
 
 use Magento\CatalogImportExport\Model\Import\Product as ImportProduct;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\UrlRewrite\Model\UrlPersistInterface;
 use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
 use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
diff --git a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php
index ed7d0f3558bd05eba8459acee5f2a23d0358ebc1..9d4acc1bbf1ceee50ce36f402836792a120e984e 100644
--- a/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php
+++ b/app/code/Magento/CatalogUrlRewrite/Observer/UrlRewriteHandler.php
@@ -29,7 +29,7 @@ class UrlRewriteHandler
     /** @var array */
     protected $isSkippedProduct;
 
-    /** @var \Magento\Catalog\Model\Resource\Product\CollectionFactory */
+    /** @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory */
     protected $productCollectionFactory;
 
     /**
@@ -37,14 +37,14 @@ class UrlRewriteHandler
      * @param CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator
      * @param ProductUrlRewriteGenerator $productUrlRewriteGenerator
      * @param UrlPersistInterface $urlPersist
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
      */
     public function __construct(
         \Magento\CatalogUrlRewrite\Model\Category\ChildrenCategoriesProvider $childrenCategoriesProvider,
         CategoryUrlRewriteGenerator $categoryUrlRewriteGenerator,
         ProductUrlRewriteGenerator $productUrlRewriteGenerator,
         UrlPersistInterface $urlPersist,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
     ) {
         $this->childrenCategoriesProvider = $childrenCategoriesProvider;
         $this->categoryUrlRewriteGenerator = $categoryUrlRewriteGenerator;
@@ -101,7 +101,7 @@ class UrlRewriteHandler
      */
     public function getCategoryProductsUrlRewrites(Category $category, $storeId, $saveRewriteHistory)
     {
-        /** @var \Magento\Catalog\Model\Resource\Product\Collection $productCollection */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */
         $productCollection = $category->getProductCollection()
             ->addAttributeToSelect('name')
             ->addAttributeToSelect('url_key')
diff --git a/app/code/Magento/CatalogUrlRewrite/Service/V1/StoreViewService.php b/app/code/Magento/CatalogUrlRewrite/Service/V1/StoreViewService.php
index ba80d63b0b6711a38656ca0dfd846e16c0f870c0..958e882c46013b2153bb3a782c779fdd960acfb9 100644
--- a/app/code/Magento/CatalogUrlRewrite/Service/V1/StoreViewService.php
+++ b/app/code/Magento/CatalogUrlRewrite/Service/V1/StoreViewService.php
@@ -6,7 +6,7 @@
 namespace Magento\CatalogUrlRewrite\Service\V1;
 
 use Magento\Eav\Model\Config;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Store view service
@@ -25,11 +25,11 @@ class StoreViewService
 
     /**
      * @param Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
     public function __construct(
         Config $eavConfig,
-        Resource $resource
+        ResourceConnection $resource
     ) {
         $this->eavConfig = $eavConfig;
         $this->connection = $resource->getConnection();
diff --git a/app/code/Magento/CatalogUrlRewrite/Setup/InstallData.php b/app/code/Magento/CatalogUrlRewrite/Setup/InstallData.php
index 4a54abb32f14b634ede2a756c40c1a5538df212f..56ae25a6bbbb53cf087b73f999dbbae7e0cf9986 100644
--- a/app/code/Magento/CatalogUrlRewrite/Setup/InstallData.php
+++ b/app/code/Magento/CatalogUrlRewrite/Setup/InstallData.php
@@ -50,7 +50,7 @@ class InstallData implements InstallDataInterface
                 'input' => 'text',
                 'required' => false,
                 'sort_order' => 3,
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                 'group' => 'General Information',
             ]
         );
@@ -62,7 +62,7 @@ class InstallData implements InstallDataInterface
                 'type' => 'varchar',
                 'required' => false,
                 'sort_order' => 17,
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                 'visible' => false,
                 'group' => 'General Information',
             ]
@@ -77,7 +77,7 @@ class InstallData implements InstallDataInterface
                 'input' => 'text',
                 'required' => false,
                 'sort_order' => 10,
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                 'used_in_product_listing' => true,
                 'group' => 'Search Engine Optimization',
                 'is_used_in_grid' => true,
@@ -93,7 +93,7 @@ class InstallData implements InstallDataInterface
                 'type' => 'varchar',
                 'required' => false,
                 'sort_order' => 11,
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                 'visible' => false,
             ]
         );
diff --git a/app/code/Magento/CatalogUrlRewrite/Setup/InstallSchema.php b/app/code/Magento/CatalogUrlRewrite/Setup/InstallSchema.php
index 88acf7808b614cd0654f92eecd70e37f27cc9200..19a96e41cf3cd1ce41b36d7f38a1dfd2b79931fd 100644
--- a/app/code/Magento/CatalogUrlRewrite/Setup/InstallSchema.php
+++ b/app/code/Magento/CatalogUrlRewrite/Setup/InstallSchema.php
@@ -24,7 +24,7 @@ class InstallSchema implements InstallSchemaInterface
 
         $installer->startSetup();
 
-        $tableName = \Magento\CatalogUrlRewrite\Model\Resource\Category\Product::TABLE_NAME;
+        $tableName = \Magento\CatalogUrlRewrite\Model\ResourceModel\Category\Product::TABLE_NAME;
         $table = $installer->getConnection()
             ->newTable($installer->getTable($tableName))
             ->addColumn(
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Category/ChildrenCategoriesProviderTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Category/ChildrenCategoriesProviderTest.php
index 45443dae942a1a4446e0498c41a6238fe00a9127..6450cc399948be1842620fee6fcd57d578944288 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Category/ChildrenCategoriesProviderTest.php
+++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/Category/ChildrenCategoriesProviderTest.php
@@ -29,7 +29,7 @@ class ChildrenCategoriesProviderTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['getPath', 'getResourceCollection', 'getResource', 'getLevel', '__wakeup', 'isObjectNew'])
             ->getMock();
         $categoryCollection = $this->getMockBuilder(
-            'Magento\Catalog\Model\Resource\Collection\AbstractCollection'
+            'Magento\Catalog\Model\ResourceModel\Collection\AbstractCollection'
         )->disableOriginalConstructor()->setMethods(['addAttributeToSelect', 'addIdFilter'])->getMock();
         $this->category->expects($this->any())->method('getPath')->willReturn('category-path');
         $this->category->expects($this->any())->method('getResourceCollection')->willReturn($categoryCollection);
@@ -38,7 +38,7 @@ class ChildrenCategoriesProviderTest extends \PHPUnit_Framework_TestCase
         $this->select = $this->getMockBuilder('Magento\Framework\DB\Select')
             ->disableOriginalConstructor()->setMethods(['from', 'where', 'deleteFromSelect'])->getMock();
         $this->connection = $this->getMock('Magento\Framework\DB\Adapter\AdapterInterface');
-        $categoryResource = $this->getMockBuilder('Magento\Catalog\Model\Resource\Category')
+        $categoryResource = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Category')
             ->disableOriginalConstructor()->getMock();
         $this->category->expects($this->any())->method('getResource')->willReturn($categoryResource);
         $categoryResource->expects($this->any())->method('getConnection')->willReturn($this->connection);
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/ProductUrlRewriteGeneratorTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/ProductUrlRewriteGeneratorTest.php
index 861516a338f1bc8c92f86d98815741f78ef899b5..15bb2f2bda8adb095386572a3445a2607307280d 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/ProductUrlRewriteGeneratorTest.php
+++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Model/ProductUrlRewriteGeneratorTest.php
@@ -37,7 +37,7 @@ class ProductUrlRewriteGeneratorTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $storeManager;
 
-    /** @var \Magento\Catalog\Model\Resource\Category\Collection|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Category\Collection|\PHPUnit_Framework_MockObject_MockObject */
     protected $categoriesCollection;
 
     /**
@@ -46,7 +46,7 @@ class ProductUrlRewriteGeneratorTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->product = $this->getMock('Magento\Catalog\Model\Product', [], [], '', false);
-        $this->categoriesCollection = $this->getMockBuilder('Magento\Catalog\Model\Resource\Category\Collection')
+        $this->categoriesCollection = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Category\Collection')
             ->disableOriginalConstructor()->getMock();
         $this->product->expects($this->any())->method('getCategoryCollection')
             ->will($this->returnValue($this->categoriesCollection));
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/AfterImportDataObserverTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/AfterImportDataObserverTest.php
index 71513c9365445fd9b5361cc3fa68df0474ea7fe1..5c50b55ecc926f96e3d127cb46d73a1219a3a1a7 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/AfterImportDataObserverTest.php
+++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/AfterImportDataObserverTest.php
@@ -96,7 +96,7 @@ class AfterImportDataObserverTest extends \PHPUnit_Framework_TestCase
     protected $eavConfig;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -242,7 +242,7 @@ class AfterImportDataObserverTest extends \PHPUnit_Framework_TestCase
             ->willReturn($attribute);
 
         $this->resource = $this->getMock(
-            '\Magento\Framework\App\Resource',
+            '\Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/CategoryUrlPathAutogeneratorObserverTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/CategoryUrlPathAutogeneratorObserverTest.php
index 48c662f5b8a3b292375e1f78cddc3ed92b1b700a..8088fcf653a18e0699e7533aeb54097ceedc9165 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/CategoryUrlPathAutogeneratorObserverTest.php
+++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/CategoryUrlPathAutogeneratorObserverTest.php
@@ -89,7 +89,7 @@ class CategoryUrlPathAutogeneratorObserverTest extends \PHPUnit_Framework_TestCa
         $this->category->expects($this->once())->method('setUrlPath')->willReturnSelf();
         $this->category->expects($this->once())->method('isObjectNew')->willReturn(false);
         $this->category->expects($this->once())->method('dataHasChangedFor')->with('url_path')->willReturn(true);
-        $categoryResource = $this->getMockBuilder('Magento\Catalog\Model\Resource\Category')
+        $categoryResource = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Category')
             ->disableOriginalConstructor()->getMock();
         $this->category->expects($this->once())->method('getResource')->willReturn($categoryResource);
         $categoryResource->expects($this->once())->method('saveAttribute')->with($this->category, 'url_path');
@@ -99,7 +99,7 @@ class CategoryUrlPathAutogeneratorObserverTest extends \PHPUnit_Framework_TestCa
             ->disableOriginalConstructor()->getMock();
 
         $this->childrenCategoriesProvider->expects($this->once())->method('getChildren')->willReturn([$childCategory]);
-        $childCategoryResource = $this->getMockBuilder('Magento\Catalog\Model\Resource\Category')
+        $childCategoryResource = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Category')
             ->disableOriginalConstructor()->getMock();
         $childCategory->expects($this->once())->method('unsUrlPath')->willReturnSelf();
         $childCategory->expects($this->once())->method('getResource')->willReturn($childCategoryResource);
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/ClearProductUrlsObserverTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/ClearProductUrlsObserverTest.php
index 31c1039e1f82c9a1c0af00f3a03ad03edf0f4763..ee7036215c6cbde0d1abe13a271108525e20f5f9 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/ClearProductUrlsObserverTest.php
+++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Observer/ClearProductUrlsObserverTest.php
@@ -11,7 +11,7 @@ use Magento\ImportExport\Model\Import as ImportExport;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 use Magento\CatalogImportExport\Model\Import\Product as ImportProduct;
 use Magento\Store\Model\Store;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Class ImportTest
diff --git a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Service/V1/StoreViewServiceTest.php b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Service/V1/StoreViewServiceTest.php
index 00b9f3c2c9d833259226a92da5bbf69f6ab9e4a2..de314ab64b190456348fd5f3de1d3c50008ad84c 100644
--- a/app/code/Magento/CatalogUrlRewrite/Test/Unit/Service/V1/StoreViewServiceTest.php
+++ b/app/code/Magento/CatalogUrlRewrite/Test/Unit/Service/V1/StoreViewServiceTest.php
@@ -15,7 +15,7 @@ class StoreViewServiceTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Eav\Model\Config|\PHPUnit_Framework_MockObject_MockObject */
     protected $config;
 
-    /** @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject */
     protected $resource;
 
     /** @var \Magento\Framework\DB\Adapter\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject */
@@ -29,7 +29,7 @@ class StoreViewServiceTest extends \PHPUnit_Framework_TestCase
         $this->config = $this->getMock('Magento\Eav\Model\Config', [], [], '', false);
         $this->select = $this->getMock('Magento\Framework\Db\Select', [], [], '', false);
         $this->connection = $this->getMock('Magento\Framework\DB\Adapter\AdapterInterface', [], [], '', false);
-        $this->resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resource->expects($this->any())->method('getConnection')->will($this->returnValue($this->connection));
 
         $this->storeViewService = (new ObjectManager($this))->getObject(
diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml
index 65314e7076e9544bca0605a337c2f40814a52c2d..bfe126bbae028b81a2924aaa768410a5edc89db6 100644
--- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml
+++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/di.xml
@@ -6,13 +6,13 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
-    <type name="Magento\Store\Model\Resource\Store">
+    <type name="Magento\Store\Model\ResourceModel\Store">
         <plugin name="store_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Store\View"/>
     </type>
-    <type name="Magento\Store\Model\Resource\Group">
+    <type name="Magento\Store\Model\ResourceModel\Group">
         <plugin name="group_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Store\Group"/>
     </type>
-    <type name="Magento\Catalog\Model\Resource\Category">
+    <type name="Magento\Catalog\Model\ResourceModel\Category">
         <plugin name="category_move_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Category\Move"/>
         <plugin name="category_delete_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Category\Remove"/>
     </type>
diff --git a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml
index 101d948e3af5a45a6c12f032d80eb8765719970d..194b45d59a41ab1754da85805935bb7d82e968ea 100644
--- a/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml
+++ b/app/code/Magento/CatalogUrlRewrite/etc/adminhtml/events.xml
@@ -7,24 +7,24 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_category_prepare_save">
-        <observer name="category_save_rewrites_history_setter" instance="Magento\CatalogUrlRewrite\Observer\CategorySaveRewritesHistorySetterObserver" method="execute"/>
+        <observer name="category_save_rewrites_history_setter" instance="Magento\CatalogUrlRewrite\Observer\CategorySaveRewritesHistorySetterObserver"/>
     </event>
     <event name="catalog_category_save_before">
-        <observer name="category_url_path_autogeneration" instance="Magento\CatalogUrlRewrite\Observer\CategoryUrlPathAutogeneratorObserver" method="execute"/>
+        <observer name="category_url_path_autogeneration" instance="Magento\CatalogUrlRewrite\Observer\CategoryUrlPathAutogeneratorObserver"/>
     </event>
     <event name="catalog_product_delete_before">
-        <observer name="process_url_rewrite_removing" instance="Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteRemovingObserver" method="execute"/>
+        <observer name="process_url_rewrite_removing" instance="Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteRemovingObserver"/>
     </event>
     <event name="catalog_category_save_after">
-        <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver" method="execute"/>
+        <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver"/>
     </event>
     <event name="catalog_product_save_before">
-        <observer name="product_url_key_autogeneration" instance="Magento\CatalogUrlRewrite\Observer\ProductUrlKeyAutogeneratorObserver" method="execute"/>
+        <observer name="product_url_key_autogeneration" instance="Magento\CatalogUrlRewrite\Observer\ProductUrlKeyAutogeneratorObserver"/>
     </event>
     <event name="catalog_product_save_after">
-        <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteSavingObserver" method="execute"/>
+        <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteSavingObserver"/>
     </event>
     <event name="catalog_category_move_after">
-        <observer name="process_url_rewrite_moving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteMovingObserver" method="execute"/>
+        <observer name="process_url_rewrite_moving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteMovingObserver"/>
     </event>
 </config>
diff --git a/app/code/Magento/CatalogUrlRewrite/etc/di.xml b/app/code/Magento/CatalogUrlRewrite/etc/di.xml
index b08033b7e45a417331280eaf04248853cd90976c..eab00485dd403c31319f8a65255ab3205dced158 100644
--- a/app/code/Magento/CatalogUrlRewrite/etc/di.xml
+++ b/app/code/Magento/CatalogUrlRewrite/etc/di.xml
@@ -16,7 +16,7 @@
             <argument name="urlFinder" xsi:type="object">Magento\CatalogUrlRewrite\Model\Storage\DbStorage</argument>
         </arguments>
     </type>
-    <type name="Magento\Catalog\Model\Resource\Category">
+    <type name="Magento\Catalog\Model\ResourceModel\Category">
         <plugin name="category_move_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Category\Move"/>
         <plugin name="category_delete_plugin" type="Magento\CatalogUrlRewrite\Model\Category\Plugin\Category\Remove"/>
     </type>
diff --git a/app/code/Magento/CatalogUrlRewrite/etc/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/events.xml
index 24dd48a69cd0564a363766817abaee05d4013f7d..3b913ee08aac91540a735221b7dffd9a9c94c793 100644
--- a/app/code/Magento/CatalogUrlRewrite/etc/events.xml
+++ b/app/code/Magento/CatalogUrlRewrite/etc/events.xml
@@ -7,15 +7,15 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_category_prepare_save">
-        <observer name="category_save_rewrites_history_setter" instance="Magento\CatalogUrlRewrite\Observer\CategorySaveRewritesHistorySetterObserver" method="execute"/>
+        <observer name="category_save_rewrites_history_setter" instance="Magento\CatalogUrlRewrite\Observer\CategorySaveRewritesHistorySetterObserver"/>
     </event>
     <event name="catalog_category_save_after">
-        <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver" method="execute"/>
+        <observer name="process_url_rewrite_saving" instance="Magento\CatalogUrlRewrite\Observer\CategoryProcessUrlRewriteSavingObserver"/>
     </event>
     <event name="catalog_product_import_bunch_save_after">
-        <observer name="catalog_product_import_rewrites_generation" instance="Magento\CatalogUrlRewrite\Observer\AfterImportDataObserver" method="execute"/>
+        <observer name="catalog_product_import_rewrites_generation" instance="Magento\CatalogUrlRewrite\Observer\AfterImportDataObserver"/>
     </event>
     <event name="catalog_product_import_bunch_delete_after">
-        <observer name="catalog_product_import_rewrites_delete" instance="Magento\CatalogUrlRewrite\Observer\ClearProductUrlsObserver" method="execute"/>
+        <observer name="catalog_product_import_rewrites_delete" instance="Magento\CatalogUrlRewrite\Observer\ClearProductUrlsObserver"/>
     </event>
 </config>
diff --git a/app/code/Magento/CatalogUrlRewrite/etc/setup/events.xml b/app/code/Magento/CatalogUrlRewrite/etc/setup/events.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b09be7f9dc0ddfcc951764e970b6e871ae5fe57c
--- /dev/null
+++ b/app/code/Magento/CatalogUrlRewrite/etc/setup/events.xml
@@ -0,0 +1,12 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
+    <event name="catalog_product_save_after">
+        <observer name="process_url_rewrite_saving" instance="\Magento\CatalogUrlRewrite\Observer\ProductProcessUrlRewriteSavingObserver"/>
+    </event>
+</config>
diff --git a/app/code/Magento/CatalogWidget/Block/Product/ProductsList.php b/app/code/Magento/CatalogWidget/Block/Product/ProductsList.php
index c62346b5e0ff6d51740a3a14fe6cc43d77f3e2ba..1d4d77943dca1b009403a774e6b3b9a6152d26f7 100644
--- a/app/code/Magento/CatalogWidget/Block/Product/ProductsList.php
+++ b/app/code/Magento/CatalogWidget/Block/Product/ProductsList.php
@@ -57,7 +57,7 @@ class ProductsList extends \Magento\Catalog\Block\Product\AbstractProduct implem
     /**
      * Product collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $productCollectionFactory;
 
@@ -78,7 +78,7 @@ class ProductsList extends \Magento\Catalog\Block\Product\AbstractProduct implem
 
     /**
      * @param \Magento\Catalog\Block\Product\Context $context
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
      * @param \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility
      * @param \Magento\Framework\App\Http\Context $httpContext
      * @param \Magento\Rule\Model\Condition\Sql\Builder $sqlBuilder
@@ -88,7 +88,7 @@ class ProductsList extends \Magento\Catalog\Block\Product\AbstractProduct implem
      */
     public function __construct(
         \Magento\Catalog\Block\Product\Context $context,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
         \Magento\Catalog\Model\Product\Visibility $catalogProductVisibility,
         \Magento\Framework\App\Http\Context $httpContext,
         \Magento\Rule\Model\Condition\Sql\Builder $sqlBuilder,
@@ -197,11 +197,11 @@ class ProductsList extends \Magento\Catalog\Block\Product\AbstractProduct implem
     /**
      * Prepare and return product collection
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     public function createCollection()
     {
-        /** @var $collection \Magento\Catalog\Model\Resource\Product\Collection */
+        /** @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
         $collection = $this->productCollectionFactory->create();
         $collection->setVisibility($this->catalogProductVisibility->getVisibleInCatalogIds());
 
diff --git a/app/code/Magento/CatalogWidget/Model/Rule.php b/app/code/Magento/CatalogWidget/Model/Rule.php
index 2a0988671f70a5f80056f143b537cc603a39c0a5..5ad9c4c4877fefb1ae598c198d729fe918f87e9b 100644
--- a/app/code/Magento/CatalogWidget/Model/Rule.php
+++ b/app/code/Magento/CatalogWidget/Model/Rule.php
@@ -22,7 +22,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
      * @param \Magento\Framework\Data\FormFactory $formFactory
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param Rule\Condition\CombineFactory $conditionsFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
         \Magento\Framework\Data\FormFactory $formFactory,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\CatalogWidget\Model\Rule\Condition\CombineFactory $conditionsFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/CatalogWidget/Model/Rule/Condition/Combine.php b/app/code/Magento/CatalogWidget/Model/Rule/Condition/Combine.php
index 8d6b7e62387f7f3710e7d2adac32e1798a85080b..38238314c7134d43dd815f7980833696ed6d8ce8 100644
--- a/app/code/Magento/CatalogWidget/Model/Rule/Condition/Combine.php
+++ b/app/code/Magento/CatalogWidget/Model/Rule/Condition/Combine.php
@@ -66,7 +66,7 @@ class Combine extends \Magento\Rule\Model\Condition\Combine
     /**
      * Collect validated attributes for Product Collection
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $productCollection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection
      * @return $this
      */
     public function collectValidatedAttributes($productCollection)
diff --git a/app/code/Magento/CatalogWidget/Model/Rule/Condition/Product.php b/app/code/Magento/CatalogWidget/Model/Rule/Condition/Product.php
index 45a8af7fcd905fc9494a9ab345ffe5948c55d2bc..730e12b8a5d1ff8572be6ca0398230b6d413073d 100644
--- a/app/code/Magento/CatalogWidget/Model/Rule/Condition/Product.php
+++ b/app/code/Magento/CatalogWidget/Model/Rule/Condition/Product.php
@@ -38,8 +38,8 @@ class Product extends \Magento\Rule\Model\Condition\Product\AbstractProduct
      * @param \Magento\Eav\Model\Config $config
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
-     * @param \Magento\Catalog\Model\Resource\Product $productResource
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection $attrSetCollection
+     * @param \Magento\Catalog\Model\ResourceModel\Product $productResource
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection $attrSetCollection
      * @param \Magento\Framework\Locale\FormatInterface $localeFormat
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param array $data
@@ -51,8 +51,8 @@ class Product extends \Magento\Rule\Model\Condition\Product\AbstractProduct
         \Magento\Eav\Model\Config $config,
         \Magento\Catalog\Model\ProductFactory $productFactory,
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
-        \Magento\Catalog\Model\Resource\Product $productResource,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection $attrSetCollection,
+        \Magento\Catalog\Model\ResourceModel\Product $productResource,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection $attrSetCollection,
         \Magento\Framework\Locale\FormatInterface $localeFormat,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         array $data = []
@@ -106,7 +106,7 @@ class Product extends \Magento\Rule\Model\Condition\Product\AbstractProduct
     /**
      * Add condition to collection
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @return $this
      */
     public function addToCollection($collection)
@@ -130,13 +130,13 @@ class Product extends \Magento\Rule\Model\Condition\Product\AbstractProduct
     }
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @return $this
      */
     protected function addGlobalAttribute(
-        \Magento\Catalog\Model\Resource\Eav\Attribute $attribute,
-        \Magento\Catalog\Model\Resource\Product\Collection $collection
+        \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute,
+        \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
     ) {
         $storeId =  $this->storeManager->getStore()->getId();
 
@@ -163,13 +163,13 @@ class Product extends \Magento\Rule\Model\Condition\Product\AbstractProduct
     }
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @return $this
      */
     protected function addNotGlobalAttribute(
-        \Magento\Catalog\Model\Resource\Eav\Attribute $attribute,
-        \Magento\Catalog\Model\Resource\Product\Collection $collection
+        \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute,
+        \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
     ) {
         $storeId =  $this->storeManager->getStore()->getId();
         $values = $collection->getAllAttributeValues($attribute);
diff --git a/app/code/Magento/CatalogWidget/Test/Unit/Block/Product/ProductsListTest.php b/app/code/Magento/CatalogWidget/Test/Unit/Block/Product/ProductsListTest.php
index d4559628ef0844bd47821c365eb9f3093e20ca2f..4ba2358bc00cfac60f4f27d790f70c16069c3649 100644
--- a/app/code/Magento/CatalogWidget/Test/Unit/Block/Product/ProductsListTest.php
+++ b/app/code/Magento/CatalogWidget/Test/Unit/Block/Product/ProductsListTest.php
@@ -23,7 +23,7 @@ class ProductsListTest extends \PHPUnit_Framework_TestCase
     protected $productsList;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collectionFactory;
 
@@ -74,7 +74,8 @@ class ProductsListTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->collectionFactory = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\CollectionFactory')
+        $this->collectionFactory =
+            $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()->getMock();
         $this->visibility = $this->getMockBuilder('Magento\Catalog\Model\Product\Visibility')
@@ -172,7 +173,7 @@ class ProductsListTest extends \PHPUnit_Framework_TestCase
 
     public function testGetPagerHtml()
     {
-        $collection = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Product\Collection')
+        $collection = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Product\Collection')
             ->setMethods(['getSize'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -220,7 +221,7 @@ class ProductsListTest extends \PHPUnit_Framework_TestCase
     {
         $this->visibility->expects($this->once())->method('getVisibleInCatalogIds')
             ->willReturn([Visibility::VISIBILITY_IN_CATALOG, Visibility::VISIBILITY_BOTH]);
-        $collection = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Product\Collection')
+        $collection = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Product\Collection')
             ->setMethods([
                 'setVisibility',
                 'addMinimalPrice',
diff --git a/app/code/Magento/CatalogWidget/Test/Unit/Model/Rule/Condition/CombineTest.php b/app/code/Magento/CatalogWidget/Test/Unit/Model/Rule/Condition/CombineTest.php
index 7bcd3c09f734548c2d55dc13f8ad73737df75f6b..10fb6d89ee0c7f225d9e7bde0e3ec60f0f31160f 100644
--- a/app/code/Magento/CatalogWidget/Test/Unit/Model/Rule/Condition/CombineTest.php
+++ b/app/code/Magento/CatalogWidget/Test/Unit/Model/Rule/Condition/CombineTest.php
@@ -72,7 +72,7 @@ class CombineTest extends \PHPUnit_Framework_TestCase
 
     public function testCollectValidatedAttributes()
     {
-        $collection = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Product\Collection')
+        $collection = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Product\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $condition = $this->getMockBuilder('Magento\CatalogWidget\Model\Rule\Condition\Combine')
diff --git a/app/code/Magento/Checkout/Block/Cart.php b/app/code/Magento/Checkout/Block/Cart.php
index 1a95a130f8ef1a38b4b38880950f6f572fe1f7fe..567fdc511a74c6daa33c5b0089cdb72f73e303c8 100644
--- a/app/code/Magento/Checkout/Block/Cart.php
+++ b/app/code/Magento/Checkout/Block/Cart.php
@@ -13,7 +13,7 @@ use Magento\Customer\Model\Context;
 class Cart extends \Magento\Checkout\Block\Cart\AbstractCart
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Url
+     * @var \Magento\Catalog\Model\ResourceModel\Url
      */
     protected $_catalogUrlBuilder;
 
@@ -31,7 +31,7 @@ class Cart extends \Magento\Checkout\Block\Cart\AbstractCart
      * @param \Magento\Framework\View\Element\Template\Context $context
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Checkout\Model\Session $checkoutSession
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrlBuilder
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrlBuilder
      * @param \Magento\Checkout\Helper\Cart $cartHelper
      * @param \Magento\Framework\App\Http\Context $httpContext
      * @param array $data
@@ -41,7 +41,7 @@ class Cart extends \Magento\Checkout\Block\Cart\AbstractCart
         \Magento\Framework\View\Element\Template\Context $context,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Checkout\Model\Session $checkoutSession,
-        \Magento\Catalog\Model\Resource\Url $catalogUrlBuilder,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrlBuilder,
         \Magento\Checkout\Helper\Cart $cartHelper,
         \Magento\Framework\App\Http\Context $httpContext,
         array $data = []
diff --git a/app/code/Magento/Checkout/Block/Cart/Crosssell.php b/app/code/Magento/Checkout/Block/Cart/Crosssell.php
index ba11d5c4aad2a22dd40d45f17b68ffe044af8445..a0359dff3d18a09cce6c4746f5e1163bcc90aa6d 100644
--- a/app/code/Magento/Checkout/Block/Cart/Crosssell.php
+++ b/app/code/Magento/Checkout/Block/Cart/Crosssell.php
@@ -185,11 +185,11 @@ class Crosssell extends \Magento\Catalog\Block\Product\AbstractProduct
     /**
      * Get crosssell products collection
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Link\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection
      */
     protected function _getCollection()
     {
-        /** @var \Magento\Catalog\Model\Resource\Product\Link\Product\Collection $collection */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection $collection */
         $collection = $this->_productLinkFactory->create()->useCrossSellLinks()->getProductCollection()->setStoreId(
             $this->_storeManager->getStore()->getId()
         )->addStoreFilter()->setPageSize(
diff --git a/app/code/Magento/Checkout/Block/Cart/LayoutProcessor.php b/app/code/Magento/Checkout/Block/Cart/LayoutProcessor.php
index bbdba7177576eed90265df4dfbd2c7f6eae9bc40..819693334aa20557a8856580685f53e0569f0c96 100644
--- a/app/code/Magento/Checkout/Block/Cart/LayoutProcessor.php
+++ b/app/code/Magento/Checkout/Block/Cart/LayoutProcessor.php
@@ -13,12 +13,12 @@ class LayoutProcessor implements \Magento\Checkout\Block\Checkout\LayoutProcesso
     protected $merger;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\Collection
+     * @var \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     protected $countryCollection;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Region\Collection
+     * @var \Magento\Directory\Model\ResourceModel\Region\Collection
      */
     protected $regionCollection;
 
@@ -29,14 +29,14 @@ class LayoutProcessor implements \Magento\Checkout\Block\Checkout\LayoutProcesso
 
     /**
      * @param \Magento\Checkout\Block\Checkout\AttributeMerger $merger
-     * @param \Magento\Directory\Model\Resource\Country\Collection $countryCollection
-     * @param \Magento\Directory\Model\Resource\Region\Collection $regionCollection
+     * @param \Magento\Directory\Model\ResourceModel\Country\Collection $countryCollection
+     * @param \Magento\Directory\Model\ResourceModel\Region\Collection $regionCollection
      * @codeCoverageIgnore
      */
     public function __construct(
         \Magento\Checkout\Block\Checkout\AttributeMerger $merger,
-        \Magento\Directory\Model\Resource\Country\Collection $countryCollection,
-        \Magento\Directory\Model\Resource\Region\Collection $regionCollection
+        \Magento\Directory\Model\ResourceModel\Country\Collection $countryCollection,
+        \Magento\Directory\Model\ResourceModel\Region\Collection $regionCollection
     ) {
         $this->merger = $merger;
         $this->countryCollection = $countryCollection;
diff --git a/app/code/Magento/Checkout/Block/Checkout/AttributeMerger.php b/app/code/Magento/Checkout/Block/Checkout/AttributeMerger.php
index d6c71a80bd6ab75a8c1cbb77831d54b222303b60..46e2240eee9a7b1c0d363ceaf200d907ea6995c2 100644
--- a/app/code/Magento/Checkout/Block/Checkout/AttributeMerger.php
+++ b/app/code/Magento/Checkout/Block/Checkout/AttributeMerger.php
@@ -193,6 +193,8 @@ class AttributeMerger
 
         if (isset($attributeConfig['value']) && $attributeConfig['value'] != null) {
             $element['value'] = $attributeConfig['value'];
+        } elseif (isset($attributeConfig['default']) && $attributeConfig['default'] != null) {
+            $element['value'] = $attributeConfig['default'];
         } else {
             $defaultValue = $this->getDefaultValue($attributeCode);
             if (null !== $defaultValue) {
@@ -254,7 +256,7 @@ class AttributeMerger
         unset($attributeConfig['validation']['required-entry']);
         for ($lineIndex = 0; $lineIndex < (int)$attributeConfig['size']; $lineIndex++) {
             $isFirstLine = $lineIndex === 0;
-            $lines[] = [
+            $line = [
                 'component' => 'Magento_Ui/js/form/element/abstract',
                 'config' => [
                     // customScope is used to group elements within a single form e.g. they can be validated separately
@@ -271,7 +273,12 @@ class AttributeMerger
                     )
                     : $attributeConfig['validation'],
                 'additionalClasses' => $isFirstLine ? : 'additional'
+
             ];
+            if ($isFirstLine && isset($attributeConfig['default']) && $attributeConfig['default'] != null) {
+                $line['value'] = $attributeConfig['default'];
+            }
+            $lines[] = $line;
         }
         return [
             'component' => 'Magento_Ui/js/form/components/group',
diff --git a/app/code/Magento/Checkout/Block/Onepage.php b/app/code/Magento/Checkout/Block/Onepage.php
index bf573b0ffd115b92d2a65c0316df478c9c3c47b0..d298599319540e5cbdf5143567e4e04fda46246b 100644
--- a/app/code/Magento/Checkout/Block/Onepage.php
+++ b/app/code/Magento/Checkout/Block/Onepage.php
@@ -46,8 +46,8 @@ class Onepage extends \Magento\Checkout\Block\Onepage\AbstractOnepage
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Checkout\Model\Session $resourceSession
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
      * @param CustomerRepositoryInterface $customerRepository
      * @param AddressConfig $addressConfig
      * @param \Magento\Framework\App\Http\Context $httpContext
@@ -65,8 +65,8 @@ class Onepage extends \Magento\Checkout\Block\Onepage\AbstractOnepage
         \Magento\Framework\App\Cache\Type\Config $configCacheType,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Checkout\Model\Session $resourceSession,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
         CustomerRepositoryInterface $customerRepository,
         AddressConfig $addressConfig,
         \Magento\Framework\App\Http\Context $httpContext,
diff --git a/app/code/Magento/Checkout/Block/Onepage/AbstractOnepage.php b/app/code/Magento/Checkout/Block/Onepage/AbstractOnepage.php
index 8cf9596488da2abea1b2d6f60eea332cb996da77..6b4e92640ec7090878068aed4f6f6be55afee980 100644
--- a/app/code/Magento/Checkout/Block/Onepage/AbstractOnepage.php
+++ b/app/code/Magento/Checkout/Block/Onepage/AbstractOnepage.php
@@ -7,8 +7,8 @@ namespace Magento\Checkout\Block\Onepage;
 
 use Magento\Customer\Api\CustomerRepositoryInterface;
 use Magento\Customer\Model\Address\Config as AddressConfig;
-use Magento\Directory\Model\Resource\Country\Collection;
-use Magento\Directory\Model\Resource\Region\Collection as RegionCollection;
+use Magento\Directory\Model\ResourceModel\Country\Collection;
+use Magento\Directory\Model\ResourceModel\Region\Collection as RegionCollection;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Quote\Model\Quote;
 
@@ -54,12 +54,12 @@ abstract class AbstractOnepage extends \Magento\Framework\View\Element\Template
     protected $_checkoutSession;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Region\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory
      */
     protected $_regionCollectionFactory;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Country\CollectionFactory
      */
     protected $_countryCollectionFactory;
 
@@ -94,8 +94,8 @@ abstract class AbstractOnepage extends \Magento\Framework\View\Element\Template
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Checkout\Model\Session $resourceSession
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
      * @param CustomerRepositoryInterface $customerRepository
      * @param AddressConfig $addressConfig
      * @param \Magento\Framework\App\Http\Context $httpContext
@@ -109,8 +109,8 @@ abstract class AbstractOnepage extends \Magento\Framework\View\Element\Template
         \Magento\Framework\App\Cache\Type\Config $configCacheType,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Checkout\Model\Session $resourceSession,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
         CustomerRepositoryInterface $customerRepository,
         AddressConfig $addressConfig,
         \Magento\Framework\App\Http\Context $httpContext,
diff --git a/app/code/Magento/Checkout/Block/Onepage/Billing.php b/app/code/Magento/Checkout/Block/Onepage/Billing.php
index ceba318dbe6e28e213a85601bd52de9fcc7ef6c2..1aee1948f0f3518fd9480e9e2992db5fca543824 100644
--- a/app/code/Magento/Checkout/Block/Onepage/Billing.php
+++ b/app/code/Magento/Checkout/Block/Onepage/Billing.php
@@ -40,8 +40,8 @@ class Billing extends \Magento\Checkout\Block\Onepage\AbstractOnepage
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Checkout\Model\Session $resourceSession
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
      * @param CustomerRepositoryInterface $customerRepository
      * @param AddressConfig $addressConfig
      * @param \Magento\Framework\App\Http\Context $httpContext
@@ -56,8 +56,8 @@ class Billing extends \Magento\Checkout\Block\Onepage\AbstractOnepage
         \Magento\Framework\App\Cache\Type\Config $configCacheType,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Checkout\Model\Session $resourceSession,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
         CustomerRepositoryInterface $customerRepository,
         AddressConfig $addressConfig,
         \Magento\Framework\App\Http\Context $httpContext,
@@ -115,7 +115,7 @@ class Billing extends \Magento\Checkout\Block\Onepage\AbstractOnepage
     /**
      * Return country collection
      *
-     * @return \Magento\Directory\Model\Resource\Country\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     public function getCountries()
     {
diff --git a/app/code/Magento/Checkout/Block/Onepage/Shipping.php b/app/code/Magento/Checkout/Block/Onepage/Shipping.php
index 9c5902dec74738a14e892c1cffc5f6ce4b785c2a..d8dcad11e01c0e50a726c2f85e2f1a10165ac12c 100644
--- a/app/code/Magento/Checkout/Block/Onepage/Shipping.php
+++ b/app/code/Magento/Checkout/Block/Onepage/Shipping.php
@@ -33,8 +33,8 @@ class Shipping extends \Magento\Checkout\Block\Onepage\AbstractOnepage
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Checkout\Model\Session $resourceSession
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
      * @param CustomerRepositoryInterface $customerRepository
      * @param AddressConfig $addressConfig
      * @param \Magento\Framework\App\Http\Context $httpContext
@@ -49,8 +49,8 @@ class Shipping extends \Magento\Checkout\Block\Onepage\AbstractOnepage
         \Magento\Framework\App\Cache\Type\Config $configCacheType,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Checkout\Model\Session $resourceSession,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
         CustomerRepositoryInterface $customerRepository,
         AddressConfig $addressConfig,
         \Magento\Framework\App\Http\Context $httpContext,
diff --git a/app/code/Magento/Checkout/Block/Onepage/Shipping/Method/Available.php b/app/code/Magento/Checkout/Block/Onepage/Shipping/Method/Available.php
index e054809319ca13169ec6810570d1eb2927c5f233..582beafbbb5f4710f9be6558cc1644cad16e8376 100644
--- a/app/code/Magento/Checkout/Block/Onepage/Shipping/Method/Available.php
+++ b/app/code/Magento/Checkout/Block/Onepage/Shipping/Method/Available.php
@@ -32,8 +32,8 @@ class Available extends \Magento\Checkout\Block\Onepage\AbstractOnepage
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Checkout\Model\Session $resourceSession
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
      * @param CustomerRepositoryInterface $customerRepository
      * @param AddressConfig $addressConfig
      * @param \Magento\Framework\App\Http\Context $httpContext
@@ -47,8 +47,8 @@ class Available extends \Magento\Checkout\Block\Onepage\AbstractOnepage
         \Magento\Framework\App\Cache\Type\Config $configCacheType,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Checkout\Model\Session $resourceSession,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
         CustomerRepositoryInterface $customerRepository,
         AddressConfig $addressConfig,
         \Magento\Framework\App\Http\Context $httpContext,
diff --git a/app/code/Magento/Checkout/Controller/Cart/Add.php b/app/code/Magento/Checkout/Controller/Cart/Add.php
index f6d27ec895b5fb2e7baae1456b8e4a88b507cd6c..6e4b71de00fa2b25d7f4f6078e95ccbb55b1a792 100644
--- a/app/code/Magento/Checkout/Controller/Cart/Add.php
+++ b/app/code/Magento/Checkout/Controller/Cart/Add.php
@@ -77,6 +77,10 @@ class Add extends \Magento\Checkout\Controller\Cart
      */
     public function execute()
     {
+        if (!$this->_formKeyValidator->validate($this->getRequest())) {
+            return $this->resultRedirectFactory->create()->setPath('*/*/');
+        }
+
         $params = $this->getRequest()->getParams();
         try {
             if (isset($params['qty'])) {
diff --git a/app/code/Magento/Checkout/Controller/Cart/Addgroup.php b/app/code/Magento/Checkout/Controller/Cart/Addgroup.php
index 44260ba75a5d65255dc1f640cd1fff94be97e825..0665e0c29155277400dfa3f25a3951b7c0722881 100644
--- a/app/code/Magento/Checkout/Controller/Cart/Addgroup.php
+++ b/app/code/Magento/Checkout/Controller/Cart/Addgroup.php
@@ -19,7 +19,7 @@ class Addgroup extends \Magento\Checkout\Controller\Cart
                 ->getCollection()
                 ->addIdFilter($orderItemIds)
                 ->load();
-            /* @var $itemsCollection \Magento\Sales\Model\Resource\Order\Item\Collection */
+            /* @var $itemsCollection \Magento\Sales\Model\ResourceModel\Order\Item\Collection */
             foreach ($itemsCollection as $item) {
                 try {
                     $this->cart->addOrderItem($item, 1);
diff --git a/app/code/Magento/Checkout/CustomerData/Cart.php b/app/code/Magento/Checkout/CustomerData/Cart.php
index ddc6753581db892c1a9faead3313d7ff848b162b..9782c438a11b5c7600cb113642e9682fff5d5c13 100644
--- a/app/code/Magento/Checkout/CustomerData/Cart.php
+++ b/app/code/Magento/Checkout/CustomerData/Cart.php
@@ -24,7 +24,7 @@ class Cart extends \Magento\Framework\DataObject implements SectionSourceInterfa
     protected $checkoutCart;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Url
+     * @var \Magento\Catalog\Model\ResourceModel\Url
      */
     protected $catalogUrl;
 
@@ -55,7 +55,7 @@ class Cart extends \Magento\Framework\DataObject implements SectionSourceInterfa
 
     /**
      * @param \Magento\Checkout\Model\Session $checkoutSession
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrl
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
      * @param \Magento\Checkout\Model\Cart $checkoutCart
      * @param \Magento\Checkout\Helper\Data $checkoutHelper
      * @param ItemPoolInterface $itemPoolInterface
@@ -65,7 +65,7 @@ class Cart extends \Magento\Framework\DataObject implements SectionSourceInterfa
      */
     public function __construct(
         \Magento\Checkout\Model\Session $checkoutSession,
-        \Magento\Catalog\Model\Resource\Url $catalogUrl,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
         \Magento\Checkout\Model\Cart $checkoutCart,
         \Magento\Checkout\Helper\Data $checkoutHelper,
         ItemPoolInterface $itemPoolInterface,
diff --git a/app/code/Magento/Checkout/Model/Cart.php b/app/code/Magento/Checkout/Model/Cart.php
index 952ee677f7c8f3f91fdf49361ec6769fc5a8d302..9cc015b2271cdf002eaec6dfa959789f18061193 100644
--- a/app/code/Magento/Checkout/Model/Cart.php
+++ b/app/code/Magento/Checkout/Model/Cart.php
@@ -51,7 +51,7 @@ class Cart extends DataObject implements CartInterface
     protected $_storeManager;
 
     /**
-     * @var \Magento\Checkout\Model\Resource\Cart
+     * @var \Magento\Checkout\Model\ResourceModel\Cart
      */
     protected $_resourceCart;
 
@@ -94,7 +94,7 @@ class Cart extends DataObject implements CartInterface
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param Resource\Cart $resourceCart
+     * @param \Magento\Checkout\Model\ResourceModel\Cart $resourceCart
      * @param Session $checkoutSession
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Message\ManagerInterface $messageManager
@@ -110,7 +110,7 @@ class Cart extends DataObject implements CartInterface
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Checkout\Model\Resource\Cart $resourceCart,
+        \Magento\Checkout\Model\ResourceModel\Cart $resourceCart,
         Session $checkoutSession,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Message\ManagerInterface $messageManager,
@@ -137,7 +137,7 @@ class Cart extends DataObject implements CartInterface
     /**
      * Get shopping cart resource model
      *
-     * @return \Magento\Checkout\Model\Resource\Cart
+     * @return \Magento\Checkout\Model\ResourceModel\Cart
      * @codeCoverageIgnore
      */
     protected function _getResource()
diff --git a/app/code/Magento/Checkout/Model/Resource/Cart.php b/app/code/Magento/Checkout/Model/ResourceModel/Cart.php
similarity index 91%
rename from app/code/Magento/Checkout/Model/Resource/Cart.php
rename to app/code/Magento/Checkout/Model/ResourceModel/Cart.php
index 277ea3234687169c6ee4f348a48e48f0f06a4d16..f415ada130fb4426d93621767f7e0f61557c409e 100644
--- a/app/code/Magento/Checkout/Model/Resource/Cart.php
+++ b/app/code/Magento/Checkout/Model/ResourceModel/Cart.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Checkout\Model\Resource;
+namespace Magento\Checkout\Model\ResourceModel;
 
 /**
  * Resource model for Checkout Cart
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Cart extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Cart extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Model initialization
@@ -65,7 +65,7 @@ class Cart extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Make collection not to load products that are in specified quote
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @param int $quoteId
      * @return $this
      */
diff --git a/app/code/Magento/Checkout/Model/Type/Onepage.php b/app/code/Magento/Checkout/Model/Type/Onepage.php
index 775c0dcb632322ab0ab4daa3c8300c4ae8d8ed8c..8d9f2ed620c1ab9c79059480f38ddb6006f5625a 100644
--- a/app/code/Magento/Checkout/Model/Type/Onepage.php
+++ b/app/code/Magento/Checkout/Model/Type/Onepage.php
@@ -379,149 +379,6 @@ class Onepage
         return [];
     }
 
-    /**
-     * Save billing address information to quote
-     * This method is called by One Page Checkout JS (AJAX) while saving the billing information.
-     *
-     * @param   array $data
-     * @param   int $customerAddressId
-     * @return  array
-     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
-     * @SuppressWarnings(PHPMD.NPathComplexity)
-     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
-     */
-    public function saveBilling($data, $customerAddressId)
-    {
-        if (empty($data)) {
-            return ['error' => -1, 'message' => __('Invalid data')];
-        }
-
-        $address = $this->getQuote()->getBillingAddress();
-        $addressForm = $this->_formFactory->create(
-            AddressMetadata::ENTITY_TYPE_ADDRESS,
-            'customer_address_edit',
-            [],
-            $this->_request->isAjax(),
-            Form::IGNORE_INVISIBLE,
-            []
-        );
-
-        if ($customerAddressId) {
-            try {
-                $customerAddress = $this->addressRepository->getById($customerAddressId);
-                if ($customerAddress->getCustomerId() != $this->getQuote()->getCustomerId()) {
-                    return ['error' => 1, 'message' => __('The customer address is not valid.')];
-                }
-                $address->importCustomerAddressData($customerAddress)->setSaveInAddressBook(0);
-            } catch (\Exception $e) {
-                return ['error' => 1, 'message' => __('Address does not exist.')];
-            }
-        } else {
-            // emulate request object
-            $addressData = $addressForm->extractData($addressForm->prepareRequest($data));
-            $addressErrors = $addressForm->validateData($addressData);
-            if ($addressErrors !== true) {
-                return ['error' => 1, 'message' => array_values($addressErrors)];
-            }
-            $address->addData($addressForm->compactData($addressData));
-            //unset billing address attributes which were not shown in form
-            foreach ($addressForm->getAttributes() as $attribute) {
-                if (!isset($data[$attribute->getAttributeCode()])) {
-                    $address->setData($attribute->getAttributeCode(), null);
-                }
-            }
-            $address->setCustomerAddressId(null);
-            // Additional form data, not fetched by extractData (as it fetches only attributes)
-            $address->setSaveInAddressBook(empty($data['save_in_address_book']) ? 0 : 1);
-            $this->getQuote()->setBillingAddress($address);
-        }
-
-        // validate billing address
-        if (($validateRes = $address->validate()) !== true) {
-            return ['error' => 1, 'message' => $validateRes];
-        }
-
-        if (true !== ($result = $this->_validateCustomerData($data))) {
-            return $result;
-        } else {
-            /** Even though _validateCustomerData should not modify data, it does */
-            $address = $this->getQuote()->getBillingAddress();
-        }
-
-        if (!$this->getQuote()->getCustomerId() && $this->isCheckoutMethodRegister()) {
-            if ($this->_customerEmailExists($address->getEmail(), $this->_storeManager->getWebsite()->getId())) {
-                return [
-                    'error' => 1,
-                    // @codingStandardsIgnoreStart
-                    'message' => __(
-                        'This email address already belongs to a registered customer. You can sign in or create an account with a different email address.'
-                    )
-                    // @codingStandardsIgnoreEnd
-                ];
-            }
-        }
-
-        if (!$this->getQuote()->isVirtual()) {
-            /**
-             * Billing address using options
-             */
-            $usingCase = isset($data['use_for_shipping'])
-                ? (bool)$data['use_for_shipping']
-                : self::NOT_USE_FOR_SHIPPING;
-
-            switch ($usingCase) {
-                case self::NOT_USE_FOR_SHIPPING:
-                    $shipping = $this->getQuote()->getShippingAddress();
-                    $shipping->setSameAsBilling(0);
-                    $shipping->save();
-                    break;
-                case self::USE_FOR_SHIPPING:
-                    $billing = clone $address;
-                    $billing->unsAddressId()->unsAddressType();
-                    $shipping = $this->getQuote()->getShippingAddress();
-                    $shippingMethod = $shipping->getShippingMethod();
-
-                    // Billing address properties that must be always copied to shipping address
-                    $requiredBillingAttributes = ['customer_address_id'];
-
-                    // don't reset original shipping data, if it was not changed by customer
-                    foreach ($shipping->getData() as $shippingKey => $shippingValue) {
-                        if ($shippingValue !== null
-                            && $billing->getData($shippingKey) !== null
-                            && !isset($data[$shippingKey])
-                            && !in_array($shippingKey, $requiredBillingAttributes)
-                        ) {
-                            $billing->unsetData($shippingKey);
-                        }
-                    }
-                    $shipping->addData($billing->getData())
-                        ->setSameAsBilling(1)
-                        ->setSaveInAddressBook(0)
-                        ->setShippingMethod($shippingMethod)
-                        ->setCollectShippingRates(true);
-                    $this->totalsCollector->collectAddressTotals($this->getQuote(), $shipping);
-
-                    if (!$this->isCheckoutMethodRegister()) {
-                        $shipping->save();
-                    }
-                    $this->getCheckout()->setStepData('shipping', 'complete', true);
-                    break;
-            }
-        }
-
-        if ($this->isCheckoutMethodRegister()) {
-            $this->quoteRepository->save($this->getQuote());
-        } else {
-            $address->save();
-        }
-
-        $this->getCheckout()
-            ->setStepData('billing', 'allow', true)
-            ->setStepData('billing', 'complete', true)
-            ->setStepData('shipping', 'allow', true);
-        return [];
-    }
-
     /**
      * Check whether checkout method is "register"
      *
@@ -532,100 +389,6 @@ class Onepage
         return $this->getQuote()->getCheckoutMethod() == self::METHOD_REGISTER;
     }
 
-    /**
-     * Validate customer data and set some its data for further usage in quote
-     *
-     * Will return either true or array with error messages
-     *
-     * @param array $data
-     * @return bool|array
-     */
-    protected function _validateCustomerData(array $data)
-    {
-        $quote = $this->getQuote();
-        $isCustomerNew = !$quote->getCustomerId();
-        $customer = $quote->getCustomer();
-        $customerData = $this->extensibleDataObjectConverter->toFlatArray(
-            $customer,
-            [],
-            '\Magento\Customer\Api\Data\CustomerInterface'
-        );
-
-        /** @var Form $customerForm */
-        $customerForm = $this->_formFactory->create(
-            \Magento\Customer\Api\CustomerMetadataInterface::ENTITY_TYPE_CUSTOMER,
-            'checkout_register',
-            $customerData,
-            $this->_request->isAjax(),
-            Form::IGNORE_INVISIBLE,
-            []
-        );
-
-        if ($isCustomerNew) {
-            $customerRequest = $customerForm->prepareRequest($data);
-            $customerData = $customerForm->extractData($customerRequest);
-        }
-
-        $customerErrors = $customerForm->validateData($customerData);
-        if ($customerErrors !== true) {
-            return ['error' => -1, 'message' => implode(', ', $customerErrors)];
-        }
-
-        if (!$isCustomerNew) {
-            return true;
-        }
-
-        $customer = $this->customerDataFactory->create();
-        $this->dataObjectHelper->populateWithArray(
-            $customer,
-            $customerData,
-            '\Magento\Customer\Api\Data\CustomerInterface'
-        );
-
-        if ($quote->getCheckoutMethod() == self::METHOD_REGISTER) {
-            // We always have $customerRequest here, otherwise we would have been kicked off the function several
-            // lines above
-            $password = $customerRequest->getParam('customer_password');
-            if ($password != $customerRequest->getParam('confirm_password')) {
-                return [
-                    'error'   => -1,
-                    'message' => __('Password and password confirmation are not equal.')
-                ];
-            }
-            $quote->setPasswordHash($this->accountManagement->getPasswordHash($password));
-        } else {
-            // set NOT LOGGED IN group id explicitly,
-            // otherwise copyFieldsetToTarget('customer_account', 'to_quote') will fill it with default group id value
-            $customer->setGroupId(GroupInterface::NOT_LOGGED_IN_ID);
-        }
-
-        //validate customer
-        $result = $this->accountManagement->validate($customer);
-        if (!$result->isValid()) {
-            return [
-                'error' => -1,
-                'message' => implode(', ', $result->getMessages())
-            ];
-        }
-
-        // copy customer/guest email to address
-        $quote->getBillingAddress()->setEmail($customer->getEmail());
-
-        // copy customer data to quote
-        $this->_objectCopyService->copyFieldsetToTarget(
-            'customer_account',
-            'to_quote',
-            $this->extensibleDataObjectConverter->toFlatArray(
-                $customer,
-                [],
-                '\Magento\Customer\Api\Data\CustomerInterface'
-            ),
-            $quote
-        );
-
-        return true;
-    }
-
     /**
      * Save checkout shipping address
      *
diff --git a/app/code/Magento/Checkout/Test/Unit/Block/Cart/LayoutProcessorTest.php b/app/code/Magento/Checkout/Test/Unit/Block/Cart/LayoutProcessorTest.php
index 77f87fcfd11f8fc65c77450ef53f2d6ad523d341..774fe8f1a56b4604edd18242b44eaa870d743607 100644
--- a/app/code/Magento/Checkout/Test/Unit/Block/Cart/LayoutProcessorTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Block/Cart/LayoutProcessorTest.php
@@ -31,14 +31,14 @@ class LayoutProcessorTest extends \PHPUnit_Framework_TestCase
     {
         $this->merger = $this->getMock('\Magento\Checkout\Block\Checkout\AttributeMerger', [], [], '', false);
         $this->countryCollection = $this->getMock(
-            '\Magento\Directory\Model\Resource\Country\Collection',
+            '\Magento\Directory\Model\ResourceModel\Country\Collection',
             [],
             [],
             '',
             false
         );
         $this->regionCollection = $this->getMock(
-            '\Magento\Directory\Model\Resource\Region\Collection',
+            '\Magento\Directory\Model\ResourceModel\Region\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Checkout/Test/Unit/Block/OnepageTest.php b/app/code/Magento/Checkout/Test/Unit/Block/OnepageTest.php
index a5a38f3982c193775c1d93f7463fa8dd2ce62997..e3ef9b58e827f6031b03c6678e8aeea99f0dd536 100644
--- a/app/code/Magento/Checkout/Test/Unit/Block/OnepageTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Block/OnepageTest.php
@@ -51,14 +51,14 @@ class OnepageTest extends \PHPUnit_Framework_TestCase
             false
         );
         $countryCollectionFactoryMock = $this->getMock(
-            'Magento\Directory\Model\Resource\Country\CollectionFactory',
+            'Magento\Directory\Model\ResourceModel\Country\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $regionCollectionFactoryMock = $this->getMock(
-            'Magento\Directory\Model\Resource\Region\CollectionFactory',
+            'Magento\Directory\Model\ResourceModel\Region\CollectionFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Checkout/Test/Unit/CustomerData/CartTest.php b/app/code/Magento/Checkout/Test/Unit/CustomerData/CartTest.php
index 9af0bbea2da80787f24a3c7e242483e025031d23..4c85bd10abdfa690e031cc990a31ea7bd96aaa23 100644
--- a/app/code/Magento/Checkout/Test/Unit/CustomerData/CartTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/CustomerData/CartTest.php
@@ -47,7 +47,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
     {
         $this->checkoutSessionMock = $this->getMock('\Magento\Checkout\Model\Session', [], [], '', false);
         $this->catalogUrlMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Url',
+            '\Magento\Catalog\Model\ResourceModel\Url',
             ['getRewriteByProductStore'],
             [],
             '',
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 0c319e19e1f377c2deea8799eb6a5e12ff461032..15275b9c11905052e18b7e4b776d2532bde7974e 100644
--- a/app/code/Magento/Checkout/Test/Unit/Model/Type/OnepageTest.php
+++ b/app/code/Magento/Checkout/Test/Unit/Model/Type/OnepageTest.php
@@ -367,280 +367,6 @@ class OnepageTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals([], $this->onepage->saveCheckoutMethod('someMethod'));
     }
 
-    public function testSaveBillingInvalidData()
-    {
-        $this->assertEquals(['error' => -1, 'message' => 'Invalid data'], $this->onepage->saveBilling([], 0));
-    }
-
-    /**
-     * @dataProvider saveBillingDataProvider
-     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
-     * @SuppressWarnings(PHPMD.ExcessiveParameterList)
-     * @SuppressWarnings(PHPMD.NPathComplexity)
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
-     * @SuppressWarnings(PHPMD.CyclomaticComplexity)
-     */
-    public function testSaveBilling(
-        $data,
-        $customerAddressId,
-        $quoteCustomerId,
-        $addressCustomerId,
-        $isAddress,
-        $validateDataResult,
-        $validateResult,
-        $checkoutMethod,
-        $customerPassword,
-        $confirmPassword,
-        $validationResultMessages,
-        $isEmailAvailable,
-        $isVirtual,
-        $getStepDataResult,
-        $expected
-    ) {
-        $useForShipping = (int)$data['use_for_shipping'];
-
-        $passwordHash = 'password hash';
-        $this->requestMock->expects($this->any())->method('isAjax')->will($this->returnValue(false));
-        $customerValidationResultMock = $this->getMock(
-            'Magento\Customer\Api\Data\ValidationResultsInterface', [], [], '', false
-        );
-        $customerValidationResultMock
-            ->expects($this->any())
-            ->method('isValid')
-            ->will($this->returnValue(empty($validationResultMessages)));
-        $customerValidationResultMock
-            ->expects($this->any())
-            ->method('getMessages')
-            ->will($this->returnValue($validationResultMessages));
-        $this->accountManagementMock
-            ->expects($this->any())
-            ->method('getPasswordHash')
-            ->with($customerPassword)
-            ->will($this->returnValue($passwordHash));
-        $this->accountManagementMock
-            ->expects($this->any())
-            ->method('validate')
-            ->will($this->returnValue($customerValidationResultMock));
-        $this->accountManagementMock
-            ->expects($this->any())
-            ->method('isEmailAvailable')
-            ->will($this->returnValue($isEmailAvailable));
-        /** @var \Magento\Quote\Model\Quote|\PHPUnit_Framework_MockObject_MockObject $quoteMock */
-        $quoteMock = $this->getMock(
-            'Magento\Quote\Model\Quote',
-            [
-                'getData',
-                'getCustomerId',
-                '__wakeup',
-                'getBillingAddress',
-                'setPasswordHash',
-                'getCheckoutMethod',
-                'isVirtual',
-                'getShippingAddress',
-                'getCustomerData',
-                'collectTotals',
-                'save',
-                'getCustomer'
-            ],
-            [],
-            '',
-            false
-        );
-        $customerMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Api\AbstractExtensibleObject',
-            [],
-            '',
-            false,
-            true,
-            true,
-            ['__toArray']
-        );
-        $shippingAddressMock = $this->getMock(
-            'Magento\Quote\Model\Quote\Address',
-            [
-                'setSameAsBilling',
-                'save',
-                'collectTotals',
-                'addData',
-                'setShippingMethod',
-                'setCollectShippingRates',
-                '__wakeup'
-            ],
-            [],
-            '',
-            false
-        );
-        $quoteMock->expects($this->any())->method('getShippingAddress')->will($this->returnValue($shippingAddressMock));
-
-        $shippingAddressMock->expects($useForShipping ? $this->any() : $this->once())
-            ->method('setSameAsBilling')
-            ->with($useForShipping)
-            ->will($this->returnSelf());
-
-        $expects = (!$useForShipping || ($checkoutMethod != Onepage::METHOD_REGISTER)) ? $this->once() : $this->never();
-        $shippingAddressMock->expects($expects)
-            ->method('save');
-
-        $shippingAddressMock->expects($useForShipping ? $this->once() : $this->never())
-            ->method('addData')
-            ->will($this->returnSelf());
-
-        $shippingAddressMock->expects($this->any())
-            ->method('setSaveInAddressBook')
-            ->will($this->returnSelf());
-
-        $shippingAddressMock->expects($useForShipping ? $this->once() : $this->never())
-            ->method('setShippingMethod')
-            ->will($this->returnSelf());
-
-        $shippingAddressMock->expects($useForShipping ? $this->once() : $this->never())
-            ->method('setCollectShippingRates')
-            ->will($this->returnSelf());
-
-        if ($useForShipping === \Magento\Checkout\Model\Type\Onepage::USE_FOR_SHIPPING) {
-            $this->totalsCollectorMock
-                ->expects($this->once())
-                ->method('collectAddressTotals')
-                ->with($quoteMock, $shippingAddressMock);
-        } else {
-            $this->totalsCollectorMock
-                ->expects($this->never())
-                ->method('collectAddressTotals')
-                ->with($quoteMock, $shippingAddressMock);
-        }
-
-        $quoteMock->expects($this->any())->method('setPasswordHash')->with($passwordHash);
-        $quoteMock->expects($this->any())->method('getCheckoutMethod')->will($this->returnValue($checkoutMethod));
-        $quoteMock->expects($this->any())->method('isVirtual')->will($this->returnValue($isVirtual));
-
-        $addressMock = $this->getMock(
-            'Magento\Quote\Model\Quote\Address',
-            [
-                'setSaveInAddressBook',
-                'getData',
-                'setEmail',
-                '__wakeup',
-                'importCustomerAddressData',
-                'validate',
-                'save'
-            ],
-            [],
-            '',
-            false
-        );
-        $addressMock->expects($this->any())->method('importCustomerAddressData')->will($this->returnSelf());
-        $addressMock->expects($this->atLeastOnce())->method('validate')->will($this->returnValue($validateResult));
-        $addressMock->expects($this->any())->method('getData')->will($this->returnValue([]));
-
-        $quoteMock->expects($this->any())->method('getBillingAddress')->will($this->returnValue($addressMock));
-        $quoteMock->expects($this->any())->method('getCustomerId')->will($this->returnValue($quoteCustomerId));
-
-        $this->quoteRepositoryMock
-            ->expects($checkoutMethod === Onepage::METHOD_REGISTER ? $this->once() : $this->never())
-            ->method('save')
-            ->with($quoteMock);
-
-        $addressMock->expects($checkoutMethod === Onepage::METHOD_REGISTER ? $this->never() : $this->once())
-            ->method('save');
-
-        $quoteMock->expects($this->any())->method('getCustomer')->will($this->returnValue($customerMock));
-        $data1 = [];
-        $extensibleDataObjectConverterMock = $this->getMock(
-            'Magento\Framework\Api\ExtensibleDataObjectConverter',
-            ['toFlatArray'],
-            [],
-            '',
-            false
-        );
-        $extensibleDataObjectConverterMock->expects($this->any())
-            ->method('toFlatArray')
-            ->with($customerMock)
-            ->will($this->returnValue($data1));
-
-        $formMock = $this->getMock('Magento\Customer\Model\Metadata\Form', [], [], '', false);
-        $formMock->expects($this->atLeastOnce())->method('validateData')->will($this->returnValue($validateDataResult));
-
-        $this->formFactoryMock->expects($this->any())->method('create')->will($this->returnValue($formMock));
-        $formMock->expects($this->any())->method('prepareRequest')->will($this->returnValue($this->requestMock));
-        $formMock->expects($this->any())
-            ->method('extractData')
-            ->with($this->requestMock)
-            ->will($this->returnValue([]));
-        $formMock->expects($this->any())
-            ->method('validateData')
-            ->with([])
-            ->will($this->returnValue(false));
-
-        $customerDataMock = $this->getMock('Magento\Customer\Api\Data\CustomerInterface', [], [], '', false);
-
-        $this->customerDataFactoryMock
-            ->expects($this->any())
-            ->method('create')
-            ->will($this->returnValue($customerDataMock));
-
-        $this->checkoutSessionMock->expects($this->any())->method('getQuote')->will($this->returnValue($quoteMock));
-        $this->checkoutSessionMock->expects($this->any())
-            ->method('getStepData')
-            ->will($this->returnValue($useForShipping ? true : $getStepDataResult));
-        $this->checkoutSessionMock->expects($this->any())->method('setStepData')->will($this->returnSelf());
-        $customerAddressMock = $this->getMockForAbstractClass(
-            'Magento\Customer\Api\Data\AddressInterface',
-            [],
-            '',
-            false
-        );
-        $customerAddressMock->expects($this->any())
-            ->method('getCustomerId')
-            ->will($this->returnValue($addressCustomerId));
-        $this->addressRepositoryMock->expects($this->any())
-            ->method('getById')
-            ->will($isAddress ? $this->returnValue($customerAddressMock) : $this->throwException(new \Exception()));
-
-        $websiteMock = $this->getMock('Magento\Store\Model\Website', [], [], '', false);
-        $this->storeManagerMock->expects($this->any())->method('getWebsite')->will($this->returnValue($websiteMock));
-        $this->assertEquals($expected, $this->onepage->saveBilling($data, $customerAddressId));
-    }
-
-    public function saveBillingDataProvider()
-    {
-        return [
-            [
-                ['use_for_shipping' => 0], // $data
-                1, // $customerAddressId
-                1, // $quoteCustomerId
-                1, // $addressCustomerId
-                true, //$isAddress
-                true, // $validateDataResult
-                true, // $validateResult
-                Onepage::METHOD_REGISTER, // $checkoutMethod
-                'password', // $customerPassword
-                'password', // $confirmPassword
-                [], // $validationResultMessages
-                true, // $isEmailAvailable
-                false, // $isVirtual
-                false, // $getStepDataResult
-                [], // $expected
-            ],
-            [
-                ['use_for_shipping' => 1], // $data
-                1, // $customerAddressId
-                1, // $quoteCustomerId
-                1, // $addressCustomerId
-                true, //$isAddress
-                true, // $validateDataResult
-                true, // $validateResult
-                Onepage::METHOD_CUSTOMER, // $checkoutMethod
-                'password', // $customerPassword
-                'password', // $confirmPassword
-                [], // $validationResultMessages
-                true, // $isEmailAvailable
-                false, // $isVirtual
-                false, // $getStepDataResult
-                [], // $expected
-            ]
-        ];
-    }
-
     public function testGetLastOrderId()
     {
         $orderIncrementId = 100001;
diff --git a/app/code/Magento/Checkout/etc/events.xml b/app/code/Magento/Checkout/etc/events.xml
index 24e284722a55fc42ca5ca0a3b859e0321c70a5e8..b243b1f649deef085642c937728657db9bb8127a 100644
--- a/app/code/Magento/Checkout/etc/events.xml
+++ b/app/code/Magento/Checkout/etc/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_quote_save_after">
-        <observer name="set_checkout_quote_id" instance="Magento\Checkout\Observer\SalesQuoteSaveAfterObserver" method="execute" />
+        <observer name="set_checkout_quote_id" instance="Magento\Checkout\Observer\SalesQuoteSaveAfterObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Checkout/etc/frontend/events.xml b/app/code/Magento/Checkout/etc/frontend/events.xml
index 891b460f3aa219bcab335820673bee85c3f51914..13eaf23168ab81515e941b22792d582d5c8c7bf8 100644
--- a/app/code/Magento/Checkout/etc/frontend/events.xml
+++ b/app/code/Magento/Checkout/etc/frontend/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="customer_login">
-        <observer name="loadCustomerQuote" instance="Magento\Checkout\Observer\LoadCustomerQuoteObserver" method="execute" />
+        <observer name="loadCustomerQuote" instance="Magento\Checkout\Observer\LoadCustomerQuoteObserver" />
     </event>
     <event name="customer_logout">
-        <observer name="unsetAll" instance="Magento\Checkout\Observer\UnsetAllObserver" method="execute" />
+        <observer name="unsetAll" instance="Magento\Checkout\Observer\UnsetAllObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xml b/app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xml
index da33d39e159aadb17af734a5bc01548cc5704c71..d63de55391c74e623a2f9af03e36372e78973069 100644
--- a/app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xml
+++ b/app/code/Magento/Checkout/view/frontend/layout/checkout_index_index.xml
@@ -261,6 +261,9 @@
                                                                 <item name="component" xsi:type="string">uiComponent</item>
                                                                 <item name="children" xsi:type="array">
                                                                     <!-- merge payment validators here -->
+                                                                    <item name="email-validator" xsi:type="array">
+                                                                        <item name="component" xsi:type="string">Magento_Checkout/js/view/payment/email-validator</item>
+                                                                    </item>
                                                                 </item>
                                                             </item>
                                                             <item name="customer-email" xsi:type="array">
@@ -331,6 +334,9 @@
                                         <item name="displayArea" xsi:type="string">sidebar</item>
                                         <item name="config" xsi:type="array">
                                             <item name="template" xsi:type="string">Magento_Checkout/sidebar</item>
+                                            <item name="deps" xsi:type="array">
+                                                <item name="0" xsi:type="string">checkout.steps</item>
+                                            </item>
                                         </item>
                                         <item name="children" xsi:type="array">
                                             <item name="summary" xsi:type="array">
@@ -341,7 +347,7 @@
                                                 </item>
                                                 <item name="children" xsi:type="array">
                                                     <item name="totals" xsi:type="array">
-                                                        <item name="component" xsi:type="string">uiComponent</item>
+                                                        <item name="component" xsi:type="string">Magento_Checkout/js/view/summary/totals</item>
                                                         <item name="displayArea" xsi:type="string">totals</item>
                                                         <item name="config" xsi:type="array">
                                                             <item name="template" xsi:type="string">Magento_Checkout/summary/totals</item>
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/place-order.js b/app/code/Magento/Checkout/view/frontend/web/js/action/place-order.js
index 73398b2555aa1eab43f1e0c745819b2a2857e6f3..7e477c3b0a72a3def8c59eab6e011ed1066e5053 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/action/place-order.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/action/place-order.js
@@ -42,8 +42,9 @@ define(
             }
 
             fullScreenLoader.startLoader();
+
             return storage.post(
-                serviceUrl, JSON.stringify(payload), false
+                serviceUrl, JSON.stringify(payload)
             ).done(
                 function () {
                     if (redirectOnSuccess) {
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/set-billing-address.js b/app/code/Magento/Checkout/view/frontend/web/js/action/set-billing-address.js
new file mode 100644
index 0000000000000000000000000000000000000000..2090bdabfe69b2af20f08e340af079cd76d551bd
--- /dev/null
+++ b/app/code/Magento/Checkout/view/frontend/web/js/action/set-billing-address.js
@@ -0,0 +1,78 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define(
+    [
+        'jquery',
+        'Magento_Checkout/js/model/quote',
+        'Magento_Checkout/js/model/url-builder',
+        'mage/storage',
+        'Magento_Checkout/js/model/error-processor',
+        'Magento_Customer/js/model/customer',
+        'Magento_Checkout/js/action/get-totals',
+        'Magento_Checkout/js/model/full-screen-loader',
+        'Magento_Checkout/js/action/get-payment-information'
+    ],
+    function ($,
+              quote,
+              urlBuilder,
+              storage,
+              errorProcessor,
+              customer,
+              getTotalsAction,
+              fullScreenLoader,
+              getPaymentInformationAction
+    ) {
+        'use strict';
+
+        return function (messageContainer) {
+            var serviceUrl,
+                payload;
+
+            /**
+             * Checkout for guest and registered customer.
+             */
+            if (!customer.isLoggedIn()) {
+                serviceUrl = urlBuilder.createUrl('/guest-carts/:cartId/billing-address', {
+                    cartId: quote.getQuoteId()
+                });
+                payload = {
+                    cartId: quote.getQuoteId(),
+                    address: quote.billingAddress()
+                };
+            } else {
+                serviceUrl = urlBuilder.createUrl('/carts/mine/billing-address', {});
+                payload = {
+                    cartId: quote.getQuoteId(),
+                    address: quote.billingAddress()
+                };
+            }
+
+            fullScreenLoader.startLoader();
+
+            return storage.post(
+                serviceUrl, JSON.stringify(payload)
+            ).done(
+                function () {
+                    var deferred = null;
+
+                    if (!quote.isVirtual()) {
+                        getTotalsAction([]);
+                    } else {
+                        deferred = $.Deferred();
+                        getPaymentInformationAction(deferred);
+                        $.when(deferred).done(function () {
+                            fullScreenLoader.stopLoader();
+                        });
+                    }
+                }
+            ).fail(
+                function (response) {
+                    errorProcessor.process(response, messageContainer);
+                    fullScreenLoader.stopLoader();
+                }
+            );
+        };
+    }
+);
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js b/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js
index 85314e6a4478bf13a00c6a8679a9de60bf7de4ec..b031a693a8cf8a0a4d10e59daf921ed510c7e3c9 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js
@@ -9,9 +9,10 @@ define(
         'mage/storage',
         'Magento_Checkout/js/model/error-processor',
         'Magento_Customer/js/model/customer',
+        'Magento_Checkout/js/action/get-totals',
         'Magento_Checkout/js/model/full-screen-loader'
     ],
-    function (quote, urlBuilder, storage, errorProcessor, customer, fullScreenLoader) {
+    function (quote, urlBuilder, storage, errorProcessor, customer, getTotalsAction, fullScreenLoader) {
         'use strict';
 
         return function (messageContainer, paymentData) {
@@ -41,15 +42,15 @@ define(
             }
 
             fullScreenLoader.startLoader();
+
             return storage.post(
-                serviceUrl, JSON.stringify(payload), false
-            ).done(
-                function () {
-                    //do nothing
-                }
+                serviceUrl, JSON.stringify(payload)
             ).fail(
                 function (response) {
                     errorProcessor.process(response, messageContainer);
+                }
+            ).always(
+                function () {
                     fullScreenLoader.stopLoader();
                 }
             );
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/customer-email-validator.js b/app/code/Magento/Checkout/view/frontend/web/js/model/customer-email-validator.js
new file mode 100644
index 0000000000000000000000000000000000000000..2bee8a03603d1324f8468006cf6f9fcad0fc64f2
--- /dev/null
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/customer-email-validator.js
@@ -0,0 +1,36 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+/*jshint browser:true jquery:true*/
+/*global alert*/
+define(
+    [
+        'jquery',
+        'Magento_Customer/js/model/customer',
+        'mage/validation'
+    ],
+    function ($, customer) {
+        'use strict';
+
+        return {
+
+            /**
+             * Validate checkout agreements
+             *
+             * @returns {Boolean}
+             */
+            validate: function () {
+                var emailValidationResult = customer.isLoggedIn(),
+                    loginFormSelector = 'form[data-role=email-with-possible-login]';
+
+                if (!customer.isLoggedIn()) {
+                    $(loginFormSelector).validation();
+                    emailValidationResult = Boolean($(loginFormSelector + ' input[name=username]').valid());
+                }
+
+                return emailValidationResult;
+            }
+        };
+    }
+);
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rates-validator.js b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rates-validator.js
index 28685a41bbe7ffc74b26066c95a7d30acfd3d415..c510194a2087382d07fed7f8367408ce95aafdb9 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rates-validator.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rates-validator.js
@@ -81,13 +81,14 @@ define(
                 var countryId = $('select[name="shippingAddress[country_id]"]').val();
                 var validationResult = postcodeValidator.validate(postcodeElement.value(), countryId);
 
-                postcodeElement.error(null);
+                postcodeElement.warn(null);
                 if (!validationResult) {
-                    var errorMessage = $t('Invalid Zip/Postal code for current country!');
+                    var warnMessage = $t('Provided Zip/Postal Code seems to be invalid.');
                     if (postcodeValidator.validatedPostCodeExample.length) {
-                        errorMessage += $t(' Example: ') + postcodeValidator.validatedPostCodeExample.join('; ');
+                        warnMessage += $t(' Example: ') + postcodeValidator.validatedPostCodeExample.join('; ') + '. ';
                     }
-                    postcodeElement.error(errorMessage);
+                    warnMessage += $t('If you believe it is the right one you can ignore this notice.');
+                    postcodeElement.warn(warnMessage);
                 }
                 return validationResult;
             },
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/totals.js b/app/code/Magento/Checkout/view/frontend/web/js/model/totals.js
index b23d1f2ecbe6a251a9266c738dd6cc9fec9c630a..b3c39c2e7de36e01f1edf7e3ec0b48540e91da94 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/model/totals.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/totals.js
@@ -9,27 +9,43 @@ define(
         'ko',
         'Magento_Checkout/js/model/quote'
     ],
-    function(ko, quote) {
+    function (ko, quote) {
         'use strict';
+
+        var quoteItems = ko.observable(quote.totals().items);
+
+        quote.totals.subscribe(function (newValue) {
+            quoteItems(newValue.items);
+        });
+
         return {
             totals: quote.totals,
             isLoading: ko.observable(false),
-            getItems: function() {
-                if (!this.totals() || !this.totals().items) {
-                    return [];
-                }
-                return this.totals().items;
+
+            /**
+             * @return {Function}
+             */
+            getItems: function () {
+                return quoteItems;
             },
-            getSegment: function(code) {
+
+            /**
+             * @param code
+             * @return {*}
+             */
+            getSegment: function (code) {
                 if (!this.totals()) {
                     return null;
                 }
+
                 for (var i in this.totals().total_segments) {
                     var total = this.totals().total_segments[i];
+
                     if (total.code == code) {
                         return total;
                     }
                 }
+
                 return null;
             }
         };
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js
index dd675d53117b01cc785f8497b7e324c100a351a3..0f92f6ea63362f1de7e995e7db9ee721d012b15c 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-checkout-method.js
@@ -12,10 +12,11 @@
 define([
     "jquery",
     "accordion",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "mage/validation/validation",
     "mage/translate"
-], function($, accordion){
+], function($, accordion, alert){
     'use strict';
 
     // Base widget, handle ajax events and first section(Checkout Method) in one page checkout accordion
@@ -182,7 +183,9 @@ define([
             if (json.isGuestCheckoutAllowed) {
                 
                 if( !guestChecked && !registerChecked ){
-                    alert( $.mage.__('Please create an account or check out as a guest.') );
+                    alert({
+                        content: $.mage.__('Please create an account or check out as a guest.')
+                    });
                     
                     return false;
                 }
@@ -244,7 +247,9 @@ define([
 
                                 $(this.options.countrySelector).trigger('change');
 
-                                alert(msg);
+                                alert({
+                                    content: msg
+                                });
                             }
 
                             return;
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js
index 8d6793b5ad461d4e63ea69682fa3b81469473b74..bfa87548aea2a170d7372bbc547266c482e9d7f6 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-payment-info.js
@@ -12,10 +12,11 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'mage/translate',
     'Magento_Checkout/js/opc-shipping-method'
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
     'use strict';
 
     // Extension for mage.opcheckout - fifth section(Payment Information) in one page checkout accordion
@@ -120,7 +121,9 @@ define([
             var methods = this.element.find('[name^="payment["]');
 
             if (methods.length === 0) {
-                alert($.mage.__('We can\'t complete your order because you don\'t have a payment method set up.'));
+                alert({
+                    content: $.mage.__('We can\'t complete your order because you don\'t have a payment method set up.')
+                });
 
                 return false;
             }
@@ -131,7 +134,9 @@ define([
                 return true;
             }
 
-            alert($.mage.__('Please choose a payment method.'));
+            alert({
+                content: $.mage.__('Please choose a payment method.')
+            });
 
             return false;
         },
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js b/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js
index 6dd87549e1bcfc7ad4d3494d9df4b4aa24da81b8..505db47ab57901c4dcc73330ed27ebf66d0a4968 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/opc-shipping-method.js
@@ -11,11 +11,12 @@
  */
 define([
     "jquery",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "Magento_Checkout/js/opc-shipping-info",
     "mage/validation",
     "mage/translate"
-], function($){
+], function($, alert){
     'use strict';    
 
     // Extension for mage.opcheckout - fourth section(Shipping Method) in one page checkout accordion
@@ -62,13 +63,20 @@ define([
         _validateShippingMethod: function() {
             var methods = this.element.find('[name="shipping_method"]');
             if (methods.length === 0) {
-                alert($.mage.__('We can\'t ship to this address. Please enter another address or edit this one.'));
+                alert({
+                    content: $.mage.__('We can\'t ship to this address. Please enter another address or edit this one.')
+                });
+
                 return false;
             }
+
             if (methods.filter(':checked').length) {
                 return true;
             }
-            alert($.mage.__('Please specify a shipping method.'));
+            alert({
+                content:$.mage.__('Please specify a shipping method.')
+            });
+
             return false;
         }
     });
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/opcheckout.js b/app/code/Magento/Checkout/view/frontend/web/js/opcheckout.js
index b7665f89c0db66e94c016cf4835a7a499da17da5..570dd9edf2d892eb39266dc467fc85f2861c84fc 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/opcheckout.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/opcheckout.js
@@ -10,10 +10,11 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'mage/validation',
     'mage/translate'
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
     'use strict';
 
     // Base widget, handle ajax events and first section(Checkout Method) in one page checkout accordion
@@ -155,7 +156,9 @@ define([
 
                     this.element.find(this.options.checkout.registerCustomerPasswordSelector).show();
                 } else {
-                    alert($.mage.__('Please create an account or check out as a guest.'));
+                    alert({
+                        content: $.mage.__('Please create an account or check out as a guest.')
+                    });
 
                     return false;
                 }
@@ -201,9 +204,13 @@ define([
 
                                 $(this.options.countrySelector).trigger('change');
 
-                                alert(msg);
+                                alert({
+                                    content: msg
+                                });
                             } else {
-                                alert(response.error);
+                                alert({
+                                    content: response.error
+                                });
                             }
 
                             return;
@@ -426,7 +433,9 @@ define([
             var methods = this.element.find('[name="shipping_method"]');
 
             if (methods.length === 0) {
-                alert($.mage.__('We can\'t ship to this address. Please choose another address or edit the current one.'));
+                alert({
+                    content: $.mage.__('We can\'t ship to this address. Please choose another address or edit the current one.')
+                });
 
                 return false;
             }
@@ -435,7 +444,9 @@ define([
                 return true;
             }
 
-            alert($.mage.__('Please specify a shipping method.'));
+            alert({
+                content: $.mage.__('Please specify a shipping method.')
+            });
 
             return false;
         }
@@ -550,7 +561,9 @@ define([
             var methods = this.element.find('[name^="payment["]');
 
             if (methods.length === 0) {
-                alert($.mage.__('We can\'t complete your order because you don\'t have a payment method set up.'));
+                alert({
+                    content: $.mage.__('We can\'t complete your order because you don\'t have a payment method set up.')
+                });
 
                 return false;
             }
@@ -561,7 +574,9 @@ define([
                 return true;
             }
 
-            alert($.mage.__('Please choose a payment method.'));
+            alert({
+                content: $.mage.__('Please choose a payment method.')
+            });
 
             return false;
         },
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/payment.js b/app/code/Magento/Checkout/view/frontend/web/js/payment.js
index 507322ba4a200b87d773aaf1f60d3690ccfe7a3f..1442bb787605236b3b40abfe430e9b98af6afd24 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/payment.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/payment.js
@@ -10,9 +10,10 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'mage/translate'
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
     'use strict';
 
     $.widget('mage.payment', {
@@ -78,13 +79,17 @@ define([
                 isValid = false;
 
             if (methods.length === 0) {
-                alert($.mage.__('We can\'t complete your order because you don\'t have a payment method set up.'));
+                alert({
+                    content: $.mage.__('We can\'t complete your order because you don\'t have a payment method set up.')
+                });
             } else if (this.options.checkoutPrice < this.options.minBalance) {
                 isValid = true;
             } else if (methods.filter('input:radio:checked').length) {
                 isValid = true;
             } else {
-                alert($.mage.__('Please choose a payment method.'));
+                alert({
+                    content: $.mage.__('Please choose a payment method.')
+                });
             }
 
             return isValid;
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/proceed-to-checkout.js b/app/code/Magento/Checkout/view/frontend/web/js/proceed-to-checkout.js
index 8441f18a1fb3920b846190b1f7208671be9407de..7a6b4e88be10c65b823c7616ac0e46a3ed5720a1 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/proceed-to-checkout.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/proceed-to-checkout.js
@@ -15,7 +15,7 @@ define([
                 var cart = customerData.get('cart'),
                     customer = customerData.get('customer');
 
-                if (customer() == false && !cart().isGuestCheckoutAllowed) {
+                if (!customer().firstname && !cart().isGuestCheckoutAllowed) {
                     authenticationPopup.showModal();
                     return false;
                 }
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
index dbffd0358d18f149c74041e72cf18dedf663c09e..34501bbeb107889899f1e26478fa41aadb772847 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/sidebar.js
@@ -8,9 +8,11 @@ define([
     "jquery",
     'Magento_Customer/js/model/authentication-popup',
     'Magento_Customer/js/customer-data',
+    'Magento_Ui/js/modal/alert',
+    'Magento_Ui/js/modal/confirm',
     "jquery/ui",
     "mage/decorate"
-], function($, authenticationPopup, customerData){
+], function($, authenticationPopup, customerData, alert, confirm){
 
     $.widget('mage.sidebar', {
         options: {
@@ -37,7 +39,7 @@ define([
                 var cart = customerData.get('cart'),
                     customer = customerData.get('customer');
 
-                if (customer() == false && !cart().isGuestCheckoutAllowed) {
+                if (!customer().firstname && !cart().isGuestCheckoutAllowed) {
                     authenticationPopup.showModal();
 
                     return false;
@@ -46,9 +48,14 @@ define([
             }, this);
             events['click ' + this.options.button.remove] =  function(event) {
                 event.stopPropagation();
-                if (confirm(self.options.confirmMessage)) {
-                    self._removeItem($(event.target));
-                }
+                confirm({
+                    content: self.options.confirmMessage,
+                    actions: {
+                        confirm: function () {
+                            self._removeItem($(event.currentTarget));
+                        }
+                    }
+                });
             };
             events['keyup ' + this.options.item.qty] = function(event) {
                 self._showItemButton($(event.target));
@@ -169,7 +176,9 @@ define([
                     } else {
                         var msg = response.error_message;
                         if (msg) {
-                            window.alert($.mage.__(msg));
+                            alert({
+                                content: $.mage.__(msg)
+                            });
                         }
                     }
                 })
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js b/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
index 33f490765686258f1b3062f21854d3da6fd58909..80d9a5982a6ab575ab68f6500ec72d0e2117d788 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/billing-address.js
@@ -16,6 +16,8 @@ define(
         'Magento_Checkout/js/checkout-data',
         'Magento_Checkout/js/model/checkout-data-resolver',
         'Magento_Customer/js/customer-data',
+        'Magento_Checkout/js/action/set-billing-address',
+        'Magento_Ui/js/model/messageList',
         'mage/translate'
     ],
     function (
@@ -29,20 +31,21 @@ define(
         checkoutData,
         checkoutDataResolver,
         customerData,
+        setBillingAddressAction,
+        globalMessageList,
         $t
     ) {
         'use strict';
 
         var lastSelectedBillingAddress = null,
             newAddressOption = {
-            getAddressInline: function() {
+                getAddressInline: function () {
                 return $t('New Address');
             },
-            customerAddressId: null
+                customerAddressId: null
             },
-            countryData = customerData.get('directory-data');
-
-        var addressOptions = addressList().filter(function(address) {
+            countryData = customerData.get('directory-data'),
+            addressOptions = addressList().filter(function (address) {
             return address.getType() == 'customer-address';
         });
         addressOptions.push(newAddressOption);
@@ -51,14 +54,23 @@ define(
             defaults: {
                 template: 'Magento_Checkout/billing-address'
             },
+            currentBillingAddress: quote.billingAddress,
+            addressOptions: addressOptions,
+            customerHasAddresses: addressOptions.length > 1,
 
+            /**
+             * Init component
+             */
             initialize: function () {
                 this._super();
-                quote.paymentMethod.subscribe(function() {
+                quote.paymentMethod.subscribe(function () {
                     checkoutDataResolver.resolveBillingAddress();
                 }, this);
             },
 
+            /**
+             * @return {exports.initObservable}
+             */
             initObservable: function () {
                 this._super()
                     .observe({
@@ -69,12 +81,13 @@ define(
                         saveInAddressBook: true
                     });
 
-                quote.billingAddress.subscribe(function(newAddress) {
+                quote.billingAddress.subscribe(function (newAddress) {
                     this.isAddressSameAsShipping(
-                        newAddress != null
-                            && newAddress.getCacheKey() == quote.shippingAddress().getCacheKey()
-                            && !quote.isVirtual()
+                        newAddress != null &&
+                            newAddress.getCacheKey() == quote.shippingAddress().getCacheKey() &&
+                            !quote.isVirtual()
                     );
+
                     if (newAddress != null && newAddress.saveInAddressBook !== undefined) {
                         this.saveInAddressBook(newAddress.saveInAddressBook);
                     }
@@ -84,21 +97,21 @@ define(
                 return this;
             },
 
-            canUseShippingAddress: ko.computed(function(){
-                return !quote.isVirtual() && quote.shippingAddress()
-                    && quote.shippingAddress().canUseForBilling();
+            canUseShippingAddress: ko.computed(function () {
+                return !quote.isVirtual() && quote.shippingAddress() && quote.shippingAddress().canUseForBilling();
             }),
 
-            currentBillingAddress: quote.billingAddress,
-
-            addressOptions: addressOptions,
-
-            customerHasAddresses: addressOptions.length > 1,
-
-            addressOptionsText: function(address) {
+            /**
+             * @param {Object} address
+             * @return {*}
+             */
+            addressOptionsText: function (address) {
                 return address.getAddressInline();
             },
 
+            /**
+             * @return {Boolean}
+             */
             useShippingAddress: function () {
                 if (this.isAddressSameAsShipping()) {
                     selectBillingAddress(quote.shippingAddress());
@@ -109,19 +122,28 @@ define(
                     this.isAddressDetailsVisible(false);
                 }
                 checkoutData.setSelectedBillingAddress(null);
+
                 return true;
             },
 
+            /**
+             * Update address action
+             */
             updateAddress: function () {
                 if (this.selectedAddress() && this.selectedAddress() != newAddressOption) {
                     selectBillingAddress(this.selectedAddress());
                     checkoutData.setSelectedBillingAddress(this.selectedAddress().getKey());
+                    if (window.checkoutConfig.reloadOnBillingAddress) {
+                        setBillingAddressAction(globalMessageList);
+                    }
                 } else {
                     this.source.set('params.invalid', false);
                     this.source.trigger(this.dataScopePrefix + '.data.validate');
+
                     if (!this.source.get('params.invalid')) {
                         var addressData = this.source.get(this.dataScopePrefix),
                             newBillingAddress = createBillingAddress(addressData);
+
                         if (this.isCustomerLoggedIn && !this.customerHasAddresses) {
                             this.saveInAddressBook(true);
                         }
@@ -131,41 +153,62 @@ define(
                         selectBillingAddress(newBillingAddress);
                         checkoutData.setSelectedBillingAddress(newBillingAddress.getKey());
                         checkoutData.setNewCustomerBillingAddress(addressData);
+
+                        if (window.checkoutConfig.reloadOnBillingAddress) {
+                            setBillingAddressAction(globalMessageList);
+                        }
                     }
                 }
             },
 
+            /**
+             * Edit address action
+             */
             editAddress: function () {
                 lastSelectedBillingAddress = quote.billingAddress();
                 quote.billingAddress(null);
                 this.isAddressDetailsVisible(false);
             },
 
+            /**
+             * Cancel address edit action
+             */
             cancelAddressEdit: function () {
                 this.restoreBillingAddress();
+
                 if (quote.billingAddress()) {
                     // restore 'Same As Shipping' checkbox state
                     this.isAddressSameAsShipping(
-                        quote.billingAddress() != null
-                            && quote.billingAddress().getCacheKey() == quote.shippingAddress().getCacheKey()
-                            && !quote.isVirtual()
+                        quote.billingAddress() != null &&
+                            quote.billingAddress().getCacheKey() == quote.shippingAddress().getCacheKey() &&
+                            !quote.isVirtual()
                     );
                     this.isAddressDetailsVisible(true);
                 }
             },
 
+            /**
+             * Restore billing address
+             */
             restoreBillingAddress: function () {
                 if (lastSelectedBillingAddress != null) {
                     selectBillingAddress(lastSelectedBillingAddress);
                 }
             },
 
+            /**
+             * @param {Object} address
+             */
             onAddressChange: function (address) {
                 this.isAddressFormVisible(address == newAddressOption);
             },
 
-            getCountryName: function(countryId) {
-                return (countryData()[countryId] != undefined) ? countryData()[countryId].name : "";
+            /**
+             * @param {int} countryId
+             * @return {*}
+             */
+            getCountryName: function (countryId) {
+                return countryData()[countryId] != undefined ? countryData()[countryId].name : '';
             }
         });
     }
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/cart/shipping-rates.js b/app/code/Magento/Checkout/view/frontend/web/js/view/cart/shipping-rates.js
index e569f88a11125b175001015e70581d65b7fbc410..f8a63000aa8ff75024939cfd7543562c6f79b0c6 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/cart/shipping-rates.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/cart/shipping-rates.js
@@ -42,7 +42,7 @@ define(
             /**
              * @override
              */
-            initProperties: function () {
+            initObservable: function () {
                 var self = this;
                 this._super();
 
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js b/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js
index 76e34d4cbf5207e185eeb395a7284c37e8dbcac4..f1f92feb37ad7710f38fd77111718aa4b99c1148 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/estimation.js
@@ -13,6 +13,7 @@ define(
     function (Component, quote, priceUtils, totals, sidebarModel) {
         'use strict';
         return Component.extend({
+            isLoading: totals.isLoading,
             getQuantity: function() {
                 if (totals.totals()) {
                     return parseFloat(totals.totals().items_qty);
@@ -34,7 +35,6 @@ define(
             getValue: function () {
                 return this.getFormattedPrice(this.getPureValue());
             }
-
         });
     }
 );
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js b/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js
index 68f02b5d5722412fa17880c59124cf5ee84cdb03..7c4025a51c2e5a66b37de845cb9f7ccf02273227 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/minicart.js
@@ -72,6 +72,12 @@ define([
                 this.isLoading(addToCartCalls > 0);
                 sidebarInitialized = false;
                 initSidebar();
+
+                /**TODO: Extra options support. Should be refactored after MAGETWO-43159. */
+                setInterval(function(){
+                    minicart.trigger('contentUpdated');
+                }, 500);
+
             }, this);
             $('[data-block="minicart"]').on('contentLoading', function(event) {
                 addToCartCalls++;
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js
index 542cbd1100e43bd8617bd41da4968c5c200f5be6..4d80012fd1ffe3b143f89e4b4430aa296e61b56a 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/default.js
@@ -17,7 +17,7 @@ define(
         'uiRegistry',
         'Magento_Checkout/js/model/payment/additional-validators',
         'Magento_Ui/js/model/messages',
-        'Magento_Ui/js/core/renderer/layout'
+        'uiLayout'
     ],
     function (
         ko,
@@ -117,18 +117,14 @@ define(
              * Place order.
              */
             placeOrder: function (data, event) {
+                var self = this,
+                    placeOrder;
+
                 if (event) {
                     event.preventDefault();
                 }
-                var self = this,
-                    placeOrder,
-                    emailValidationResult = customer.isLoggedIn(),
-                    loginFormSelector = 'form[data-role=email-with-possible-login]';
-                if (!customer.isLoggedIn()) {
-                    $(loginFormSelector).validation();
-                    emailValidationResult = Boolean($(loginFormSelector + ' input[name=username]').valid());
-                }
-                if (emailValidationResult && this.validate() && additionalValidators.validate()) {
+
+                if (this.validate() && additionalValidators.validate()) {
                     this.isPlaceOrderActionAllowed(false);
                     placeOrder = placeOrderAction(this.getData(), this.redirectAfterPlaceOrder, this.messageContainer);
 
@@ -161,11 +157,6 @@ define(
                 return {
                     "method": this.item.method,
                     "po_number": null,
-                    "cc_owner": null,
-                    "cc_number": null,
-                    "cc_type": null,
-                    "cc_exp_year": null,
-                    "cc_exp_month": null,
                     "additional_data": null
                 };
             },
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/email-validator.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/email-validator.js
new file mode 100644
index 0000000000000000000000000000000000000000..101528f3a6f82ac8e92b6f700f4757d482e6b617
--- /dev/null
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/email-validator.js
@@ -0,0 +1,18 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define(
+    [
+        'uiComponent',
+        'Magento_Checkout/js/model/payment/additional-validators',
+        'Magento_Checkout/js/model/customer-email-validator'
+    ],
+    function (Component, additionalValidators, agreementValidator) {
+        'use strict';
+
+        additionalValidators.registerValidator(agreementValidator);
+
+        return Component.extend({});
+    }
+);
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js
index 4559bbbc745f0ebb7eab1cfd6ec8e848c9f10874..a65ec36aea72ea2b59f23585b986b49155e868c3 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/payment/list.js
@@ -9,7 +9,7 @@ define([
     'uiComponent',
     'Magento_Checkout/js/model/payment/method-list',
     'Magento_Checkout/js/model/payment/renderer-list',
-    'Magento_Ui/js/core/renderer/layout',
+    'uiLayout',
     'Magento_Checkout/js/model/checkout-data-resolver'
 ], function (_, ko, utils, Component, paymentMethods, rendererList, layout, checkoutDataResolver) {
     'use strict';
@@ -30,11 +30,16 @@ define([
             paymentMethods.subscribe(
                 function (changes) {
                     checkoutDataResolver.resolvePaymentMethod();
+                    //remove renderer for "deleted" payment methods
+                    _.each(changes, function (change) {
+                        if (change.status === 'deleted') {
+                            this.removeRenderer(change.value.method);
+                        }
+                    }, this);
+                    //add renderer for "added" payment methods
                     _.each(changes, function (change) {
                         if (change.status === 'added') {
                             this.createRenderer(change.value);
-                        } else if (change.status === 'deleted') {
-                            this.removeRenderer(change.value.method);
                         }
                     }, this);
                 }, this, 'arrayChange');
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/address-renderer/default.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/address-renderer/default.js
index 221e9f6f1514cc48740413f6271766ead7e4f6c4..0b932a29e52d99a48db84b7c8ea93ea1a56eec8b 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/address-renderer/default.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/address-renderer/default.js
@@ -20,7 +20,7 @@ define([
             template: 'Magento_Checkout/shipping-address/address-renderer/default'
         },
 
-        initProperties: function () {
+        initObservable: function () {
             this._super();
             this.isSelected = ko.computed(function() {
                 var isSelected = false;
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js
index 352d8e628e37f4a598115181c8a3c576e56b8ed2..5ee2b5d4ed9fe79316b88265380e8c45c1fba929 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-address/list.js
@@ -8,7 +8,7 @@ define([
     'ko',
     'mageUtils',
     'uiComponent',
-    'Magento_Ui/js/core/renderer/layout',
+    'uiLayout',
     'Magento_Customer/js/model/address-list'
 ], function (_, ko, utils, Component, layout, addressList) {
     'use strict';
@@ -44,7 +44,7 @@ define([
             return this;
         },
 
-        initProperties: function () {
+        initConfig: function () {
             this._super();
             // the list of child components that are responsible for address rendering
             this.rendererComponents = [];
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js
index 36342149c66e6fcc140e5c1d6ab9316c45e26958..f024358ae0dace9e0cb362f195e6234e3e6181fe 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/shipping-information/list.js
@@ -8,7 +8,7 @@ define([
     'ko',
     'mageUtils',
     'uiComponent',
-    'Magento_Ui/js/core/renderer/layout',
+    'uiLayout',
     'Magento_Checkout/js/model/quote'
 ], function ($, ko, utils, Component, layout, quote) {
     'use strict';
@@ -35,7 +35,7 @@ define([
             return this;
         },
 
-        initProperties: function () {
+        initConfig: function () {
             this._super();
             // the list of child components that are responsible for address rendering
             this.rendererComponents = {};
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/view/summary/totals.js b/app/code/Magento/Checkout/view/frontend/web/js/view/summary/totals.js
new file mode 100644
index 0000000000000000000000000000000000000000..1c9d6be5c6b8c47100ab6e4f598a9dd0295781d8
--- /dev/null
+++ b/app/code/Magento/Checkout/view/frontend/web/js/view/summary/totals.js
@@ -0,0 +1,24 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+/*jshint browser:true jquery:true*/
+/*global alert*/
+define(
+    [
+        'Magento_Checkout/js/view/summary/abstract-total'
+    ],
+    function (Component) {
+        'use strict';
+
+        return Component.extend({
+
+            /**
+             * @return {*}
+             */
+            isDisplayed: function () {
+                return this.isFullMode();
+            }
+        });
+    }
+);
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/estimation.html b/app/code/Magento/Checkout/view/frontend/web/template/estimation.html
index dd037ff8d36229c824777641c8045b9dfbab5890..36009ab7b4634ab66da8c232712b33c6aa052fd1 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/estimation.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/estimation.html
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<div class="opc-estimated-wrapper">
+<div class="opc-estimated-wrapper" data-bind="blockLoader: isLoading">
     <div class="estimated-block">
         <span class="estimated-label" data-bind="i18n: 'Estimated Total'"></span>
         <span class="estimated-price" data-bind="i18n: getValue()"></span>
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/registration.html b/app/code/Magento/Checkout/view/frontend/web/template/registration.html
index 69f9eb7b0a02769205ec7197cb35281268ca7f90..1cb610134a90caf59dcf99c6982563142c9df138 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/registration.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/registration.html
@@ -6,7 +6,7 @@
 -->
 <div>
     <!-- ko ifnot: accountCreated -->
-    <p data-bind="i18n: 'You can track your order status by creating an account'"></p>
+    <p data-bind="i18n: 'You can track your order status by creating an account.'"></p>
     <p><span data-bind="i18n: 'Email Address'"></span>: <span data-bind="text: getEmailAddress()"></span></p>
     <form method="post" data-bind="submit: createAccount">
         <input type="submit" class="action primary" data-bind="value: $t('Create Account'), disable: creationStarted" />
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/summary/cart-items.html b/app/code/Magento/Checkout/view/frontend/web/template/summary/cart-items.html
index d4f0994a38e5a88e32b08480c2311d5712eb4e15..5922f277360006bcf92537f6b623da8cb3f841a9 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/summary/cart-items.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/summary/cart-items.html
@@ -19,7 +19,7 @@
     <div class="content minicart-items" data-role="content">
         <div class="minicart-items-wrapper overflowed">
             <ol class="minicart-items">
-                <!-- ko foreach: getItems -->
+                <!-- ko foreach: getItems() -->
                 <li class="product-item">
                     <div class="product">
                         <!-- ko foreach: $parent.elems() -->
@@ -48,7 +48,7 @@
     <div class="content minicart-items" data-role="content">
         <div class="minicart-items-wrapper overflowed">
             <ol class="minicart-items">
-                <!-- ko foreach: getItems -->
+                <!-- ko foreach: getItems() -->
                 <li class="product-item">
                     <div class="product">
                         <!-- ko foreach: $parent.elems() -->
diff --git a/app/code/Magento/Checkout/view/frontend/web/template/summary/totals.html b/app/code/Magento/Checkout/view/frontend/web/template/summary/totals.html
index 12fb8acb37d7795e406bf47d843a3fedb955d81b..30628a026738864c2e22a9a377bbacf09b31f4cc 100644
--- a/app/code/Magento/Checkout/view/frontend/web/template/summary/totals.html
+++ b/app/code/Magento/Checkout/view/frontend/web/template/summary/totals.html
@@ -4,6 +4,7 @@
  * See COPYING.txt for license details.
  */
 -->
+<!-- ko if: isDisplayed() -->
 <table class="data table table-totals">
     <caption class="table-caption" data-bind="i18n: 'Order Summary'"></caption>
     <tbody>
@@ -12,3 +13,4 @@
     <!-- /ko -->
     </tbody>
 </table>
+<!-- /ko -->
diff --git a/app/code/Magento/CheckoutAgreements/Block/Adminhtml/Agreement/Grid.php b/app/code/Magento/CheckoutAgreements/Block/Adminhtml/Agreement/Grid.php
index 40e0f3adc877ee58b19cb1a8e69792376a5a5c14..8e4694266cb22f542cb38ce0ce91ad0105ae7472 100644
--- a/app/code/Magento/CheckoutAgreements/Block/Adminhtml/Agreement/Grid.php
+++ b/app/code/Magento/CheckoutAgreements/Block/Adminhtml/Agreement/Grid.php
@@ -8,21 +8,21 @@ namespace Magento\CheckoutAgreements\Block\Adminhtml\Agreement;
 class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
 {
     /**
-     * @var \Magento\CheckoutAgreements\Model\Resource\Agreement\CollectionFactory
+     * @var \Magento\CheckoutAgreements\Model\ResourceModel\Agreement\CollectionFactory
      */
     protected $_collectionFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\CheckoutAgreements\Model\Resource\Agreement\CollectionFactory $collectionFactory
+     * @param \Magento\CheckoutAgreements\Model\ResourceModel\Agreement\CollectionFactory $collectionFactory
      * @param array $data
      * @codeCoverageIgnore
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\CheckoutAgreements\Model\Resource\Agreement\CollectionFactory $collectionFactory,
+        \Magento\CheckoutAgreements\Model\ResourceModel\Agreement\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_collectionFactory = $collectionFactory;
diff --git a/app/code/Magento/CheckoutAgreements/Block/Agreements.php b/app/code/Magento/CheckoutAgreements/Block/Agreements.php
index 0efb639e14765245b285f8157170a01a50b44804..de8ca30b28d0b441d221bc9f22c7e226096749d0 100644
--- a/app/code/Magento/CheckoutAgreements/Block/Agreements.php
+++ b/app/code/Magento/CheckoutAgreements/Block/Agreements.php
@@ -11,19 +11,19 @@ use Magento\Store\Model\ScopeInterface;
 class Agreements extends \Magento\Framework\View\Element\Template
 {
     /**
-     * @var \Magento\CheckoutAgreements\Model\Resource\Agreement\CollectionFactory
+     * @var \Magento\CheckoutAgreements\Model\ResourceModel\Agreement\CollectionFactory
      */
     protected $_agreementCollectionFactory;
 
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
-     * @param \Magento\CheckoutAgreements\Model\Resource\Agreement\CollectionFactory $agreementCollectionFactory
+     * @param \Magento\CheckoutAgreements\Model\ResourceModel\Agreement\CollectionFactory $agreementCollectionFactory
      * @param array $data
      * @codeCoverageIgnore
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
-        \Magento\CheckoutAgreements\Model\Resource\Agreement\CollectionFactory $agreementCollectionFactory,
+        \Magento\CheckoutAgreements\Model\ResourceModel\Agreement\CollectionFactory $agreementCollectionFactory,
         array $data = []
     ) {
         $this->_agreementCollectionFactory = $agreementCollectionFactory;
@@ -38,7 +38,7 @@ class Agreements extends \Magento\Framework\View\Element\Template
         if (!$this->hasAgreements()) {
             $agreements = [];
             if ($this->_scopeConfig->isSetFlag('checkout/options/enable_agreements', ScopeInterface::SCOPE_STORE)) {
-                /** @var \Magento\CheckoutAgreements\Model\Resource\Agreement\Collection $agreements */
+                /** @var \Magento\CheckoutAgreements\Model\ResourceModel\Agreement\Collection $agreements */
                 $agreements = $this->_agreementCollectionFactory->create();
                 $agreements->addStoreFilter($this->_storeManager->getStore()->getId());
                 $agreements->addFieldToFilter('is_active', 1);
diff --git a/app/code/Magento/CheckoutAgreements/Model/Agreement.php b/app/code/Magento/CheckoutAgreements/Model/Agreement.php
index 4d5c8bb180fff4d61c4a5477fe86cca3d04a649f..f95e0de59e8f9d830fa7f7c7b89f8203537a9f8c 100644
--- a/app/code/Magento/CheckoutAgreements/Model/Agreement.php
+++ b/app/code/Magento/CheckoutAgreements/Model/Agreement.php
@@ -22,7 +22,7 @@ class Agreement extends \Magento\Framework\Model\AbstractExtensibleModel impleme
      */
     protected function _construct()
     {
-        $this->_init('Magento\CheckoutAgreements\Model\Resource\Agreement');
+        $this->_init('Magento\CheckoutAgreements\Model\ResourceModel\Agreement');
     }
 
     /**
diff --git a/app/code/Magento/CheckoutAgreements/Model/AgreementsProvider.php b/app/code/Magento/CheckoutAgreements/Model/AgreementsProvider.php
index 24151a35d0718e16cccabc4f2bfa69bada6e9242..3cc92bdeb8c492e5765527e1137f0d60e9f94ce0 100644
--- a/app/code/Magento/CheckoutAgreements/Model/AgreementsProvider.php
+++ b/app/code/Magento/CheckoutAgreements/Model/AgreementsProvider.php
@@ -6,6 +6,7 @@
 namespace Magento\CheckoutAgreements\Model;
 
 use Magento\Store\Model\ScopeInterface;
+use Magento\CheckoutAgreements\Model\ResourceModel\Agreement\CollectionFactory as AgreementCollectionFactory;
 
 /**
  * Provide Agreements stored in db
@@ -18,7 +19,7 @@ class AgreementsProvider implements AgreementsProviderInterface
     const PATH_ENABLED = 'checkout/options/enable_agreements';
 
     /**
-     * @var Resource\Agreement\CollectionFactory
+     * @var AgreementCollectionFactory
      */
     protected $agreementCollectionFactory;
 
@@ -33,13 +34,13 @@ class AgreementsProvider implements AgreementsProviderInterface
     protected $storeManager;
 
     /**
-     * @param Resource\Agreement\CollectionFactory $agreementCollectionFactory
+     * @param AgreementCollectionFactory $agreementCollectionFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @codeCoverageIgnore
      */
     public function __construct(
-        \Magento\CheckoutAgreements\Model\Resource\Agreement\CollectionFactory $agreementCollectionFactory,
+        AgreementCollectionFactory $agreementCollectionFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
     ) {
diff --git a/app/code/Magento/CheckoutAgreements/Model/CheckoutAgreementsRepository.php b/app/code/Magento/CheckoutAgreements/Model/CheckoutAgreementsRepository.php
index 9eb329ffca8d717df8e5d853efbafc09c216f01c..01653546d38bc25312ea3f3df39f76802f324ed8 100644
--- a/app/code/Magento/CheckoutAgreements/Model/CheckoutAgreementsRepository.php
+++ b/app/code/Magento/CheckoutAgreements/Model/CheckoutAgreementsRepository.php
@@ -6,14 +6,14 @@
 
 namespace Magento\CheckoutAgreements\Model;
 
-use Magento\CheckoutAgreements\Model\Resource\Agreement\CollectionFactory as AgreementCollectionFactory;
-use Magento\CheckoutAgreements\Model\Resource\Agreement\Collection as AgreementCollection;
+use Magento\CheckoutAgreements\Model\ResourceModel\Agreement\CollectionFactory as AgreementCollectionFactory;
+use Magento\CheckoutAgreements\Model\ResourceModel\Agreement\Collection as AgreementCollection;
 use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface;
 use Magento\Framework\App\Config\ScopeConfigInterface;
 use Magento\Store\Model\StoreManagerInterface;
 use Magento\Store\Model\ScopeInterface;
 use Magento\CheckoutAgreements\Api\CheckoutAgreementsRepositoryInterface;
-use Magento\CheckoutAgreements\Model\Resource\Agreement as AgreementResource;
+use Magento\CheckoutAgreements\Model\ResourceModel\Agreement as AgreementResource;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Store\Model\Store;
 
diff --git a/app/code/Magento/CheckoutAgreements/Model/Resource/Agreement.php b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php
similarity index 93%
rename from app/code/Magento/CheckoutAgreements/Model/Resource/Agreement.php
rename to app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php
index 04945a4e4cd9d35895f1210f0d6816b1082cdaff..1be4a1482327452f2eb955ec935860f489820276 100644
--- a/app/code/Magento/CheckoutAgreements/Model/Resource/Agreement.php
+++ b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CheckoutAgreements\Model\Resource;
+namespace Magento\CheckoutAgreements\Model\ResourceModel;
 
 /**
  * Resource Model for Checkout Agreement
  */
-class Agreement extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Agreement extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Filter\FilterManager
@@ -16,13 +16,13 @@ class Agreement extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $filterManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param string $connectionName
      * @codeCoverageIgnore
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Filter\FilterManager $filterManager,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/CheckoutAgreements/Model/Resource/Agreement/Collection.php b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement/Collection.php
similarity index 89%
rename from app/code/Magento/CheckoutAgreements/Model/Resource/Agreement/Collection.php
rename to app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement/Collection.php
index 00d7c97900ccd020f7aa762ed43a2943cc8d5671..6356de345f57ca06b6f95f6f8d156ad14a9e3e4b 100644
--- a/app/code/Magento/CheckoutAgreements/Model/Resource/Agreement/Collection.php
+++ b/app/code/Magento/CheckoutAgreements/Model/ResourceModel/Agreement/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CheckoutAgreements\Model\Resource\Agreement;
+namespace Magento\CheckoutAgreements\Model\ResourceModel\Agreement;
 
 /**
  * Resource Model for Agreement Collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var array
@@ -35,7 +35,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     {
         $this->_init(
             'Magento\CheckoutAgreements\Model\Agreement',
-            'Magento\CheckoutAgreements\Model\Resource\Agreement'
+            'Magento\CheckoutAgreements\Model\ResourceModel\Agreement'
         );
     }
 
diff --git a/app/code/Magento/CheckoutAgreements/Test/Unit/Block/AgreementsTest.php b/app/code/Magento/CheckoutAgreements/Test/Unit/Block/AgreementsTest.php
index c1c83990eda0d65a818950b00ed8630ffa7d0349..8ffbe9e40811ff2069760d85e1a9aa68bbe32909 100644
--- a/app/code/Magento/CheckoutAgreements/Test/Unit/Block/AgreementsTest.php
+++ b/app/code/Magento/CheckoutAgreements/Test/Unit/Block/AgreementsTest.php
@@ -34,7 +34,7 @@ class AgreementsTest extends \PHPUnit_Framework_TestCase
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->agreementCollFactoryMock = $this->getMock(
-            '\Magento\CheckoutAgreements\Model\Resource\Agreement\CollectionFactory',
+            '\Magento\CheckoutAgreements\Model\ResourceModel\Agreement\CollectionFactory',
             ['create'],
             [],
             '',
@@ -66,7 +66,7 @@ class AgreementsTest extends \PHPUnit_Framework_TestCase
             ->willReturn(true);
 
         $agreementCollection = $this->getMock(
-            '\Magento\CheckoutAgreements\Model\Resource\Agreement\Collection',
+            '\Magento\CheckoutAgreements\Model\ResourceModel\Agreement\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/CheckoutAgreements/Test/Unit/Model/AgreementsProviderTest.php b/app/code/Magento/CheckoutAgreements/Test/Unit/Model/AgreementsProviderTest.php
index da0d0d82372ffe682d6de26ff60857cc2c1ef42f..d506c152adbb86603b2cd5c2d19b2e37e28420b5 100644
--- a/app/code/Magento/CheckoutAgreements/Test/Unit/Model/AgreementsProviderTest.php
+++ b/app/code/Magento/CheckoutAgreements/Test/Unit/Model/AgreementsProviderTest.php
@@ -36,7 +36,7 @@ class AgreementsProviderTest extends \PHPUnit_Framework_TestCase
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
         $this->agreementCollFactoryMock = $this->getMock(
-            '\Magento\CheckoutAgreements\Model\Resource\Agreement\CollectionFactory',
+            '\Magento\CheckoutAgreements\Model\ResourceModel\Agreement\CollectionFactory',
             ['create'],
             [],
             '',
@@ -65,7 +65,7 @@ class AgreementsProviderTest extends \PHPUnit_Framework_TestCase
             ->willReturn(true);
 
         $agreementCollection = $this->getMock(
-            '\Magento\CheckoutAgreements\Model\Resource\Agreement\Collection',
+            '\Magento\CheckoutAgreements\Model\ResourceModel\Agreement\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/CheckoutAgreements/Test/Unit/Model/CheckoutAgreementsRepositoryTest.php b/app/code/Magento/CheckoutAgreements/Test/Unit/Model/CheckoutAgreementsRepositoryTest.php
index 04543777e3470676e9406bf57f32e91fea02dfab..2c983149e819064480caaa3939442e0e2f0a7a52 100644
--- a/app/code/Magento/CheckoutAgreements/Test/Unit/Model/CheckoutAgreementsRepositoryTest.php
+++ b/app/code/Magento/CheckoutAgreements/Test/Unit/Model/CheckoutAgreementsRepositoryTest.php
@@ -66,7 +66,7 @@ class CheckoutAgreementsRepositoryTest extends \PHPUnit_Framework_TestCase
         $this->objectManager = new ObjectManager($this);
 
         $this->factoryMock = $this->getMock(
-            'Magento\CheckoutAgreements\Model\Resource\Agreement\CollectionFactory',
+            'Magento\CheckoutAgreements\Model\ResourceModel\Agreement\CollectionFactory',
             ['create'],
             [],
             '',
@@ -74,7 +74,13 @@ class CheckoutAgreementsRepositoryTest extends \PHPUnit_Framework_TestCase
         );
         $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface');
         $this->scopeConfigMock = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface');
-        $this->resourceMock = $this->getMock('Magento\CheckoutAgreements\Model\Resource\Agreement', [], [], '', false);
+        $this->resourceMock = $this->getMock(
+            'Magento\CheckoutAgreements\Model\ResourceModel\Agreement',
+            [],
+            [],
+            '',
+            false
+        );
         $this->agrFactoryMock = $this->getMock(
             'Magento\CheckoutAgreements\Model\AgreementFactory',
             ['create'],
@@ -120,7 +126,7 @@ class CheckoutAgreementsRepositoryTest extends \PHPUnit_Framework_TestCase
     {
         $this->extensionAttributesJoinProcessorMock->expects($this->once())
             ->method('process')
-            ->with($this->isInstanceOf('Magento\CheckoutAgreements\Model\Resource\Agreement\Collection'));
+            ->with($this->isInstanceOf('Magento\CheckoutAgreements\Model\ResourceModel\Agreement\Collection'));
 
         $this->scopeConfigMock->expects($this->once())
             ->method('isSetFlag')
@@ -133,7 +139,7 @@ class CheckoutAgreementsRepositoryTest extends \PHPUnit_Framework_TestCase
         $this->storeManagerMock->expects($this->any())->method('getStore')->will($this->returnValue($storeMock));
 
         $collectionMock = $this->objectManager->getCollectionMock(
-            'Magento\CheckoutAgreements\Model\Resource\Agreement\Collection',
+            'Magento\CheckoutAgreements\Model\ResourceModel\Agreement\Collection',
             [$this->agreementMock]
         );
         $this->factoryMock->expects($this->once())->method('create')->will($this->returnValue($collectionMock));
diff --git a/app/code/Magento/Cms/Block/Adminhtml/Block/Widget/Chooser.php b/app/code/Magento/Cms/Block/Adminhtml/Block/Widget/Chooser.php
index 11a83c181d64f504d267524440423a30c90b2970..378402ffe9119436d5e4d1e8fc1134d1f48b508d 100644
--- a/app/code/Magento/Cms/Block/Adminhtml/Block/Widget/Chooser.php
+++ b/app/code/Magento/Cms/Block/Adminhtml/Block/Widget/Chooser.php
@@ -16,7 +16,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_blockFactory;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Block\CollectionFactory
+     * @var \Magento\Cms\Model\ResourceModel\Block\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -24,14 +24,14 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Cms\Model\BlockFactory $blockFactory
-     * @param \Magento\Cms\Model\Resource\Block\CollectionFactory $collectionFactory
+     * @param \Magento\Cms\Model\ResourceModel\Block\CollectionFactory $collectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Cms\Model\BlockFactory $blockFactory,
-        \Magento\Cms\Model\Resource\Block\CollectionFactory $collectionFactory,
+        \Magento\Cms\Model\ResourceModel\Block\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_blockFactory = $blockFactory;
diff --git a/app/code/Magento/Cms/Block/Adminhtml/Page/Grid.php b/app/code/Magento/Cms/Block/Adminhtml/Page/Grid.php
index 4986f395d2a119fad998218ee53807e83d851c9a..17ba3fe6256096a9ddc464f9604fb8bbc6f96e36 100644
--- a/app/code/Magento/Cms/Block/Adminhtml/Page/Grid.php
+++ b/app/code/Magento/Cms/Block/Adminhtml/Page/Grid.php
@@ -11,7 +11,7 @@ namespace Magento\Cms\Block\Adminhtml\Page;
 class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
 {
     /**
-     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory
+     * @var \Magento\Cms\Model\ResourceModel\Page\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -29,7 +29,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Cms\Model\Page $cmsPage
-     * @param \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory
+     * @param \Magento\Cms\Model\ResourceModel\Page\CollectionFactory $collectionFactory
      * @param \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder
      * @param array $data
      */
@@ -37,7 +37,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Cms\Model\Page $cmsPage,
-        \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory,
+        \Magento\Cms\Model\ResourceModel\Page\CollectionFactory $collectionFactory,
         \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder,
         array $data = []
     ) {
@@ -66,7 +66,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
     protected function _prepareCollection()
     {
         $collection = $this->_collectionFactory->create();
-        /* @var $collection \Magento\Cms\Model\Resource\Page\Collection */
+        /* @var $collection \Magento\Cms\Model\ResourceModel\Page\Collection */
         $collection->setFirstStoreFlag(true);
         $this->setCollection($collection);
 
diff --git a/app/code/Magento/Cms/Block/Adminhtml/Page/Widget/Chooser.php b/app/code/Magento/Cms/Block/Adminhtml/Page/Widget/Chooser.php
index 54c169c890a9b8f8901203bff0a9a3a6d4e69275..3c1e1e9de789cbccd565016506081e3f7dc4f34a 100644
--- a/app/code/Magento/Cms/Block/Adminhtml/Page/Widget/Chooser.php
+++ b/app/code/Magento/Cms/Block/Adminhtml/Page/Widget/Chooser.php
@@ -23,7 +23,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_pageFactory;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory
+     * @var \Magento\Cms\Model\ResourceModel\Page\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -37,7 +37,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Cms\Model\Page $cmsPage
      * @param \Magento\Cms\Model\PageFactory $pageFactory
-     * @param \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory
+     * @param \Magento\Cms\Model\ResourceModel\Page\CollectionFactory $collectionFactory
      * @param \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder
      * @param array $data
      */
@@ -46,7 +46,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Cms\Model\Page $cmsPage,
         \Magento\Cms\Model\PageFactory $pageFactory,
-        \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory,
+        \Magento\Cms\Model\ResourceModel\Page\CollectionFactory $collectionFactory,
         \Magento\Framework\View\Model\PageLayout\Config\BuilderInterface $pageLayoutBuilder,
         array $data = []
     ) {
@@ -141,7 +141,7 @@ class Chooser extends \Magento\Backend\Block\Widget\Grid\Extended
     protected function _prepareCollection()
     {
         $collection = $this->_collectionFactory->create();
-        /* @var $collection \Magento\Cms\Model\Resource\Page\CollectionFactory */
+        /* @var $collection \Magento\Cms\Model\ResourceModel\Page\CollectionFactory */
         $collection->setFirstStoreFlag(true);
         $this->setCollection($collection);
 
diff --git a/app/code/Magento/Cms/Block/Widget/Page/Link.php b/app/code/Magento/Cms/Block/Widget/Page/Link.php
index ce24888551612f3c3021653b7627966c75c8bbc0..ee9cf53cca87f1c0d6185e3a535b2b90a7df785b 100644
--- a/app/code/Magento/Cms/Block/Widget/Page/Link.php
+++ b/app/code/Magento/Cms/Block/Widget/Page/Link.php
@@ -32,7 +32,7 @@ class Link extends \Magento\Framework\View\Element\Html\Link implements \Magento
     protected $_anchorText;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page
+     * @var \Magento\Cms\Model\ResourceModel\Page
      */
     protected $_resourcePage;
 
@@ -45,13 +45,13 @@ class Link extends \Magento\Framework\View\Element\Html\Link implements \Magento
 
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
-     * @param \Magento\Cms\Model\Resource\Page $resourcePage
+     * @param \Magento\Cms\Model\ResourceModel\Page $resourcePage
      * @param \Magento\Cms\Helper\Page $cmsPage
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
-        \Magento\Cms\Model\Resource\Page $resourcePage,
+        \Magento\Cms\Model\ResourceModel\Page $resourcePage,
         \Magento\Cms\Helper\Page $cmsPage,
         array $data = []
     ) {
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php b/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php
index 6004e737bb04be25f2a5365dcc89de11a55381a9..a173e9f3dac6becf1d6496bb85c8edd2e09dac3e 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Block/MassDelete.php
@@ -9,7 +9,7 @@ namespace Magento\Cms\Controller\Adminhtml\Block;
 use Magento\Framework\Controller\ResultFactory;
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Cms\Model\Resource\Block\CollectionFactory;
+use Magento\Cms\Model\ResourceModel\Block\CollectionFactory;
 
 /**
  * Class MassDelete
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/InlineEdit.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/InlineEdit.php
index 678ff962b23d67d3002608f9e18318815e540036..52882ff71fddf063388e2a6139606ea86610d36f 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/InlineEdit.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/InlineEdit.php
@@ -10,6 +10,11 @@ use Magento\Cms\Api\PageRepositoryInterface as PageRepository;
 use Magento\Framework\Controller\Result\JsonFactory;
 use Magento\Cms\Api\Data\PageInterface;
 
+/**
+ * Cms page grid inline edit controller
+ *
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class InlineEdit extends \Magento\Backend\App\Action
 {
     /** @var PostDataProcessor */
@@ -63,7 +68,8 @@ class InlineEdit extends \Magento\Backend\App\Action
             try {
                 $pageData = $this->dataProcessor->filter($postItems[$pageId]);
                 $this->validatePost($pageData, $page, $error, $messages);
-                $page->setData(array_merge($page->getData(), $pageData));
+                $extendedPageData = $page->getData();
+                $this->setCmsPageData($page, $extendedPageData, $pageData);
                 $this->pageRepository->save($page);
             } catch (\Magento\Framework\Exception\LocalizedException $e) {
                 $messages[] = $this->getErrorWithPageId($page, $e->getMessage());
@@ -116,4 +122,18 @@ class InlineEdit extends \Magento\Backend\App\Action
     {
         return '[Page ID: ' . $page->getId() . '] ' . $errorText;
     }
+
+    /**
+     * Set cms page data
+     *
+     * @param \Magento\Cms\Model\Page $page
+     * @param array $extendedPageData
+     * @param array $pageData
+     * @return $this
+     */
+    public function setCmsPageData(\Magento\Cms\Model\Page $page, array $extendedPageData, array $pageData)
+    {
+        $page->setData(array_merge($page->getData(), $extendedPageData, $pageData));
+        return $this;
+    }
 }
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
index 6505b7e6b7d8dd01fb28990d3ab60715ea12de06..45314ebf2d9e15eb7c309a7bef47bbbaac838ccc 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDelete.php
@@ -8,7 +8,7 @@ namespace Magento\Cms\Controller\Adminhtml\Page;
 use Magento\Framework\Controller\ResultFactory;
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Cms\Model\Resource\Page\CollectionFactory;
+use Magento\Cms\Model\ResourceModel\Page\CollectionFactory;
 
 /**
  * Class MassDelete
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDisable.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDisable.php
index e3d39c9a6f2acd03a368e1c916c9c96ac443a299..8d8da00375cd22a85bfd4f90b7f3ebb9eb920e16 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDisable.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassDisable.php
@@ -8,7 +8,7 @@ namespace Magento\Cms\Controller\Adminhtml\Page;
 use Magento\Framework\Controller\ResultFactory;
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Cms\Model\Resource\Page\CollectionFactory;
+use Magento\Cms\Model\ResourceModel\Page\CollectionFactory;
 
 /**
  * Class MassDisable
diff --git a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassEnable.php b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassEnable.php
index a6c7415d9d5f119788dafe16b1b28a13d1b94548..aa44d34ea78618f26ed735ae5f5e55ca2601f003 100644
--- a/app/code/Magento/Cms/Controller/Adminhtml/Page/MassEnable.php
+++ b/app/code/Magento/Cms/Controller/Adminhtml/Page/MassEnable.php
@@ -8,7 +8,7 @@ namespace Magento\Cms\Controller\Adminhtml\Page;
 use Magento\Framework\Controller\ResultFactory;
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Cms\Model\Resource\Page\CollectionFactory;
+use Magento\Cms\Model\ResourceModel\Page\CollectionFactory;
 
 /**
  * Class MassEnable
diff --git a/app/code/Magento/Cms/Model/Block.php b/app/code/Magento/Cms/Model/Block.php
index d2a367784ced22738052d4ad6d15fe19fefb894f..996d0fbb94eeed62419983c4a93d7dc612fb294e 100644
--- a/app/code/Magento/Cms/Model/Block.php
+++ b/app/code/Magento/Cms/Model/Block.php
@@ -11,8 +11,8 @@ use Magento\Framework\DataObject\IdentityInterface;
 /**
  * CMS block model
  *
- * @method \Magento\Cms\Model\Resource\Block _getResource()
- * @method \Magento\Cms\Model\Resource\Block getResource()
+ * @method \Magento\Cms\Model\ResourceModel\Block _getResource()
+ * @method \Magento\Cms\Model\ResourceModel\Block getResource()
  */
 class Block extends \Magento\Framework\Model\AbstractModel implements BlockInterface, IdentityInterface
 {
@@ -38,7 +38,7 @@ class Block extends \Magento\Framework\Model\AbstractModel implements BlockInter
      */
     protected function _construct()
     {
-        $this->_init('Magento\Cms\Model\Resource\Block');
+        $this->_init('Magento\Cms\Model\ResourceModel\Block');
     }
 
     /**
diff --git a/app/code/Magento/Cms/Model/BlockRepository.php b/app/code/Magento/Cms/Model/BlockRepository.php
index d283374c4206762e4f6be332f8e5fd46edc27e5c..05af6db57303a1e8dae456297423aa3dad686ae6 100644
--- a/app/code/Magento/Cms/Model/BlockRepository.php
+++ b/app/code/Magento/Cms/Model/BlockRepository.php
@@ -13,6 +13,8 @@ use Magento\Framework\Exception\CouldNotDeleteException;
 use Magento\Framework\Exception\CouldNotSaveException;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Framework\Reflection\DataObjectProcessor;
+use Magento\Cms\Model\ResourceModel\Block as ResourceBlock;
+use Magento\Cms\Model\ResourceModel\Block\CollectionFactory as BlockCollectionFactory;
 
 /**
  * Class BlockRepository
@@ -21,7 +23,7 @@ use Magento\Framework\Reflection\DataObjectProcessor;
 class BlockRepository implements BlockRepositoryInterface
 {
     /**
-     * @var Resource\Block
+     * @var ResourceBlock
      */
     protected $resource;
 
@@ -31,7 +33,7 @@ class BlockRepository implements BlockRepositoryInterface
     protected $blockFactory;
 
     /**
-     * @var Resource\Block\CollectionFactory
+     * @var BlockCollectionFactory
      */
     protected $blockCollectionFactory;
 
@@ -56,19 +58,19 @@ class BlockRepository implements BlockRepositoryInterface
     protected $dataBlockFactory;
 
     /**
-     * @param Resource\Block $resource
+     * @param ResourceBlock $resource
      * @param BlockFactory $blockFactory
      * @param Data\BlockInterfaceFactory $dataBlockFactory
-     * @param Resource\Block\CollectionFactory $blockCollectionFactory
+     * @param BlockCollectionFactory $blockCollectionFactory
      * @param Data\BlockSearchResultsInterfaceFactory $searchResultsFactory
      * @param DataObjectHelper $dataObjectHelper
      * @param DataObjectProcessor $dataObjectProcessor
      */
     public function __construct(
-        Resource\Block $resource,
+        ResourceBlock $resource,
         BlockFactory $blockFactory,
         \Magento\Cms\Api\Data\BlockInterfaceFactory $dataBlockFactory,
-        Resource\Block\CollectionFactory $blockCollectionFactory,
+        BlockCollectionFactory $blockCollectionFactory,
         Data\BlockSearchResultsInterfaceFactory $searchResultsFactory,
         DataObjectHelper $dataObjectHelper,
         DataObjectProcessor $dataObjectProcessor
@@ -122,7 +124,7 @@ class BlockRepository implements BlockRepositoryInterface
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @param \Magento\Framework\Api\SearchCriteriaInterface $criteria
-     * @return Resource\Block\Collection
+     * @return \Magento\Cms\Model\ResourceModel\Block\Collection
      */
     public function getList(\Magento\Framework\Api\SearchCriteriaInterface $criteria)
     {
diff --git a/app/code/Magento/Cms/Model/Config/Source/Page.php b/app/code/Magento/Cms/Model/Config/Source/Page.php
index 6d0d87680ef5a386c7fde21be6a542beb1335793..013386482955ee850ce6f36bf889fb1deb0c5c94 100644
--- a/app/code/Magento/Cms/Model/Config/Source/Page.php
+++ b/app/code/Magento/Cms/Model/Config/Source/Page.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Cms\Model\Config\Source;
 
-use Magento\Cms\Model\Resource\Page\CollectionFactory;
+use Magento\Cms\Model\ResourceModel\Page\CollectionFactory;
 
 /**
  * Class Page
diff --git a/app/code/Magento/Cms/Model/Page.php b/app/code/Magento/Cms/Model/Page.php
index fcf8edb84322256612d340e657ee00df36d860ce..04da7105c4d65afb0f816efd72863f725f2269e7 100644
--- a/app/code/Magento/Cms/Model/Page.php
+++ b/app/code/Magento/Cms/Model/Page.php
@@ -11,8 +11,8 @@ use Magento\Framework\DataObject\IdentityInterface;
 /**
  * Cms Page Model
  *
- * @method \Magento\Cms\Model\Resource\Page _getResource()
- * @method \Magento\Cms\Model\Resource\Page getResource()
+ * @method \Magento\Cms\Model\ResourceModel\Page _getResource()
+ * @method \Magento\Cms\Model\ResourceModel\Page getResource()
  */
 class Page extends \Magento\Framework\Model\AbstractModel implements PageInterface, IdentityInterface
 {
@@ -52,7 +52,7 @@ class Page extends \Magento\Framework\Model\AbstractModel implements PageInterfa
      */
     protected function _construct()
     {
-        $this->_init('Magento\Cms\Model\Resource\Page');
+        $this->_init('Magento\Cms\Model\ResourceModel\Page');
     }
 
     /**
diff --git a/app/code/Magento/Cms/Model/Page/Source/IsActive.php b/app/code/Magento/Cms/Model/Page/Source/IsActive.php
index 81ec863288e3d739deb7dfd6ac84f4f55b948260..dda8f257c0e483b2f929600e1a850aac852a127f 100644
--- a/app/code/Magento/Cms/Model/Page/Source/IsActive.php
+++ b/app/code/Magento/Cms/Model/Page/Source/IsActive.php
@@ -34,8 +34,8 @@ class IsActive implements OptionSourceInterface
      */
     public function toOptionArray()
     {
-        $options[] = ['label' => '', 'value' => ''];
         $availableOptions = $this->cmsPage->getAvailableStatuses();
+        $options = [];
         foreach ($availableOptions as $key => $value) {
             $options[] = [
                 'label' => $value,
diff --git a/app/code/Magento/Cms/Model/Page/Source/IsActiveFilter.php b/app/code/Magento/Cms/Model/Page/Source/IsActiveFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..30af93149c5b2213cf023c653822cd4f941a48a8
--- /dev/null
+++ b/app/code/Magento/Cms/Model/Page/Source/IsActiveFilter.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Model\Page\Source;
+
+/**
+ * Is active filter source
+ */
+class IsActiveFilter extends IsActive
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function toOptionArray()
+    {
+        return array_merge([['label' => '', 'value' => '']], parent::toOptionArray());
+    }
+}
diff --git a/app/code/Magento/Cms/Model/Page/Source/PageLayout.php b/app/code/Magento/Cms/Model/Page/Source/PageLayout.php
index 071e071a7aa740b699e36db241f15b2e8e05467b..3400f5810931e4c0d83324faaa8dde36d4b06019 100644
--- a/app/code/Magento/Cms/Model/Page/Source/PageLayout.php
+++ b/app/code/Magento/Cms/Model/Page/Source/PageLayout.php
@@ -43,8 +43,9 @@ class PageLayout implements OptionSourceInterface
         if ($this->options !== null) {
             return $this->options;
         }
-        $options[] = ['label' => '', 'value' => ''];
+
         $configOptions = $this->pageLayoutBuilder->getPageLayoutsConfig()->getOptions();
+        $options = [];
         foreach ($configOptions as $key => $value) {
             $options[] = [
                 'label' => $value,
diff --git a/app/code/Magento/Cms/Model/Page/Source/PageLayoutFilter.php b/app/code/Magento/Cms/Model/Page/Source/PageLayoutFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..fe2dfccc023a64f9f8f3a59283f71b585b568357
--- /dev/null
+++ b/app/code/Magento/Cms/Model/Page/Source/PageLayoutFilter.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Model\Page\Source;
+
+/**
+ * Page layout filter source
+ */
+class PageLayoutFilter extends PageLayout
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function toOptionArray()
+    {
+        return array_merge([['label' => '', 'value' => '']], parent::toOptionArray());
+    }
+}
diff --git a/app/code/Magento/Cms/Model/Page/Source/Theme.php b/app/code/Magento/Cms/Model/Page/Source/Theme.php
index dc0568a2b4c54fc063f06b2c2740555d1c3c4546..ab6b005a5e38075ecb70e1a2ea7c1c87bf43f8fd 100644
--- a/app/code/Magento/Cms/Model/Page/Source/Theme.php
+++ b/app/code/Magento/Cms/Model/Page/Source/Theme.php
@@ -35,8 +35,6 @@ class Theme implements OptionSourceInterface
      */
     public function toOptionArray()
     {
-        $options[] = ['label' => '', 'value' => ''];
-        return $options + $this->themeList->getLabels();
-
+        return $this->themeList->getLabels();
     }
 }
diff --git a/app/code/Magento/Cms/Model/Page/Source/ThemeFilter.php b/app/code/Magento/Cms/Model/Page/Source/ThemeFilter.php
new file mode 100644
index 0000000000000000000000000000000000000000..946799c2214b7221733397d83bef9043a41ce235
--- /dev/null
+++ b/app/code/Magento/Cms/Model/Page/Source/ThemeFilter.php
@@ -0,0 +1,20 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Model\Page\Source;
+
+/**
+ * Theme filter source
+ */
+class ThemeFilter extends Theme
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function toOptionArray()
+    {
+        return array_merge([['label' => '', 'value' => '']], parent::toOptionArray());
+    }
+}
diff --git a/app/code/Magento/Cms/Model/PageRepository.php b/app/code/Magento/Cms/Model/PageRepository.php
index 500d0efd260098a3f6bcf540d0c05e0b579e53df..99b0eb5d8b6fe119d605b7cb6f45ec019444f80a 100644
--- a/app/code/Magento/Cms/Model/PageRepository.php
+++ b/app/code/Magento/Cms/Model/PageRepository.php
@@ -13,6 +13,8 @@ use Magento\Framework\Exception\CouldNotDeleteException;
 use Magento\Framework\Exception\CouldNotSaveException;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Framework\Reflection\DataObjectProcessor;
+use Magento\Cms\Model\ResourceModel\Page as ResourcePage;
+use Magento\Cms\Model\ResourceModel\Page\CollectionFactory as PageCollectionFactory;
 
 /**
  * Class PageRepository
@@ -21,7 +23,7 @@ use Magento\Framework\Reflection\DataObjectProcessor;
 class PageRepository implements PageRepositoryInterface
 {
     /**
-     * @var Resource\Page
+     * @var ResourcePage
      */
     protected $resource;
 
@@ -31,7 +33,7 @@ class PageRepository implements PageRepositoryInterface
     protected $pageFactory;
 
     /**
-     * @var Resource\Page\CollectionFactory
+     * @var PageCollectionFactory
      */
     protected $pageCollectionFactory;
 
@@ -56,19 +58,19 @@ class PageRepository implements PageRepositoryInterface
     protected $dataPageFactory;
 
     /**
-     * @param Resource\Page $resource
+     * @param ResourcePage $resource
      * @param PageFactory $pageFactory
      * @param Data\PageInterfaceFactory $dataPageFactory
-     * @param Resource\Page\CollectionFactory $pageCollectionFactory
+     * @param PageCollectionFactory $pageCollectionFactory
      * @param Data\PageSearchResultsInterfaceFactory $searchResultsFactory
      * @param DataObjectHelper $dataObjectHelper
      * @param DataObjectProcessor $dataObjectProcessor
      */
     public function __construct(
-        Resource\Page $resource,
+        ResourcePage $resource,
         PageFactory $pageFactory,
         Data\PageInterfaceFactory $dataPageFactory,
-        Resource\Page\CollectionFactory $pageCollectionFactory,
+        PageCollectionFactory $pageCollectionFactory,
         Data\PageSearchResultsInterfaceFactory $searchResultsFactory,
         DataObjectHelper $dataObjectHelper,
         DataObjectProcessor $dataObjectProcessor
@@ -122,7 +124,7 @@ class PageRepository implements PageRepositoryInterface
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @param \Magento\Framework\Api\SearchCriteriaInterface $criteria
-     * @return Resource\Page\Collection
+     * @return \Magento\Cms\Model\ResourceModel\Page\Collection
      */
     public function getList(\Magento\Framework\Api\SearchCriteriaInterface $criteria)
     {
diff --git a/app/code/Magento/Cms/Model/Resource/AbstractCollection.php b/app/code/Magento/Cms/Model/ResourceModel/AbstractCollection.php
similarity index 95%
rename from app/code/Magento/Cms/Model/Resource/AbstractCollection.php
rename to app/code/Magento/Cms/Model/ResourceModel/AbstractCollection.php
index 48188c96b7706d76e23f1b89b6d1f7f123628499..7b2e0829cf4d350458bae135b08986d9e68f61c7 100644
--- a/app/code/Magento/Cms/Model/Resource/AbstractCollection.php
+++ b/app/code/Magento/Cms/Model/ResourceModel/AbstractCollection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Cms\Model\Resource;
+namespace Magento\Cms\Model\ResourceModel;
 
 /**
  * Abstract collection of CMS pages and blocks
  */
-abstract class AbstractCollection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+abstract class AbstractCollection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store manager
@@ -24,7 +24,7 @@ abstract class AbstractCollection extends \Magento\Framework\Model\Resource\Db\C
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb|null $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
@@ -33,7 +33,7 @@ abstract class AbstractCollection extends \Magento\Framework\Model\Resource\Db\C
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->storeManager = $storeManager;
diff --git a/app/code/Magento/Cms/Model/Resource/Block.php b/app/code/Magento/Cms/Model/ResourceModel/Block.php
similarity index 95%
rename from app/code/Magento/Cms/Model/Resource/Block.php
rename to app/code/Magento/Cms/Model/ResourceModel/Block.php
index d8c49e5358765272df33d5e4e2e060d649f3c4b4..32469ae77ac3abb4c42dbd351cab9e57dee77af8 100644
--- a/app/code/Magento/Cms/Model/Resource/Block.php
+++ b/app/code/Magento/Cms/Model/ResourceModel/Block.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Cms\Model\Resource;
+namespace Magento\Cms\Model\ResourceModel;
 
 /**
  * CMS block model
  */
-class Block extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Block extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime\DateTime
@@ -25,13 +25,13 @@ class Block extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         $connectionName = null
@@ -55,7 +55,7 @@ class Block extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * Process block data before deleting
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Cms\Model\Resource\Page
+     * @return \Magento\Cms\Model\ResourceModel\Page
      */
     protected function _beforeDelete(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Cms/Model/Resource/Block/Collection.php b/app/code/Magento/Cms/Model/ResourceModel/Block/Collection.php
similarity index 91%
rename from app/code/Magento/Cms/Model/Resource/Block/Collection.php
rename to app/code/Magento/Cms/Model/ResourceModel/Block/Collection.php
index 2a355ca47bcd6d19f3bfc321a7034478c1ef6567..5d2887f20ca056a9ff017f7a351d31e280fd8bea 100644
--- a/app/code/Magento/Cms/Model/Resource/Block/Collection.php
+++ b/app/code/Magento/Cms/Model/ResourceModel/Block/Collection.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Cms\Model\Resource\Block;
+namespace Magento\Cms\Model\ResourceModel\Block;
 
-use \Magento\Cms\Model\Resource\AbstractCollection;
+use \Magento\Cms\Model\ResourceModel\AbstractCollection;
 
 /**
  * CMS Block Collection
@@ -36,7 +36,7 @@ class Collection extends AbstractCollection
      */
     protected function _construct()
     {
-        $this->_init('Magento\Cms\Model\Block', 'Magento\Cms\Model\Resource\Block');
+        $this->_init('Magento\Cms\Model\Block', 'Magento\Cms\Model\ResourceModel\Block');
         $this->_map['fields']['store'] = 'store_table.store_id';
     }
 
diff --git a/app/code/Magento/Cms/Model/Resource/Block/Grid/Collection.php b/app/code/Magento/Cms/Model/ResourceModel/Block/Grid/Collection.php
similarity index 93%
rename from app/code/Magento/Cms/Model/Resource/Block/Grid/Collection.php
rename to app/code/Magento/Cms/Model/ResourceModel/Block/Grid/Collection.php
index 6f3759681ab8ebeacd63f5c56350d15ff874422f..e658aa86cb571cc3c035f3cdc1b3458f1cb0a55a 100644
--- a/app/code/Magento/Cms/Model/Resource/Block/Grid/Collection.php
+++ b/app/code/Magento/Cms/Model/ResourceModel/Block/Grid/Collection.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Cms\Model\Resource\Block\Grid;
+namespace Magento\Cms\Model\ResourceModel\Block\Grid;
 
 use Magento\Framework\Api\Search\SearchResultInterface;
 use Magento\Framework\Search\AggregationInterface;
-use Magento\Cms\Model\Resource\Block\Collection as BlockCollection;
+use Magento\Cms\Model\ResourceModel\Block\Collection as BlockCollection;
 
 /**
  * Collection for displaying grid of cms blocks
@@ -31,7 +31,7 @@ class Collection extends BlockCollection implements SearchResultInterface
      * @param string $resourceModel
      * @param string $model
      * @param string|null $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -47,7 +47,7 @@ class Collection extends BlockCollection implements SearchResultInterface
         $resourceModel,
         $model = 'Magento\Framework\View\Element\UiComponent\DataProvider\Document',
         $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Cms/Model/Resource/Page.php b/app/code/Magento/Cms/Model/ResourceModel/Page.php
similarity index 97%
rename from app/code/Magento/Cms/Model/Resource/Page.php
rename to app/code/Magento/Cms/Model/ResourceModel/Page.php
index 569a9c7cbc1cc9f7b18e83214894dc62bbc48dbb..a0bcda0d530251d511e0f0b0541d17ac03476fc1 100644
--- a/app/code/Magento/Cms/Model/Resource/Page.php
+++ b/app/code/Magento/Cms/Model/ResourceModel/Page.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Cms\Model\Resource;
+namespace Magento\Cms\Model\ResourceModel;
 
 /**
  * Cms page mysql resource
  */
-class Page extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Page extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store model
@@ -40,14 +40,14 @@ class Page extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Stdlib\DateTime $dateTime,
diff --git a/app/code/Magento/Cms/Model/Resource/Page/Collection.php b/app/code/Magento/Cms/Model/ResourceModel/Page/Collection.php
similarity index 95%
rename from app/code/Magento/Cms/Model/Resource/Page/Collection.php
rename to app/code/Magento/Cms/Model/ResourceModel/Page/Collection.php
index 8ef01de72f127e37f805cf1ac0f4d4a22bbdd4ba..401aac2d6900d2d0fc3777f8229a995410ffcf95 100644
--- a/app/code/Magento/Cms/Model/Resource/Page/Collection.php
+++ b/app/code/Magento/Cms/Model/ResourceModel/Page/Collection.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Cms\Model\Resource\Page;
+namespace Magento\Cms\Model\ResourceModel\Page;
 
-use \Magento\Cms\Model\Resource\AbstractCollection;
+use \Magento\Cms\Model\ResourceModel\AbstractCollection;
 
 /**
  * CMS page collection
@@ -31,7 +31,7 @@ class Collection extends AbstractCollection
      */
     protected function _construct()
     {
-        $this->_init('Magento\Cms\Model\Page', 'Magento\Cms\Model\Resource\Page');
+        $this->_init('Magento\Cms\Model\Page', 'Magento\Cms\Model\ResourceModel\Page');
         $this->_map['fields']['page_id'] = 'main_table.page_id';
         $this->_map['fields']['store'] = 'store_table.store_id';
     }
diff --git a/app/code/Magento/Cms/Model/Resource/Page/Grid/Collection.php b/app/code/Magento/Cms/Model/ResourceModel/Page/Grid/Collection.php
similarity index 91%
rename from app/code/Magento/Cms/Model/Resource/Page/Grid/Collection.php
rename to app/code/Magento/Cms/Model/ResourceModel/Page/Grid/Collection.php
index 5e3cb9254b28e4a2b27368273c68ca8b4e51292d..49fbeaa47d6d84753e543be4e7f3c25d76fb736a 100644
--- a/app/code/Magento/Cms/Model/Resource/Page/Grid/Collection.php
+++ b/app/code/Magento/Cms/Model/ResourceModel/Page/Grid/Collection.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Cms\Model\Resource\Page\Grid;
+namespace Magento\Cms\Model\ResourceModel\Page\Grid;
 
 use Magento\Framework\Api\Search\SearchResultInterface;
 use Magento\Framework\Search\AggregationInterface;
-use Magento\Cms\Model\Resource\Page\Collection as PageCollection;
+use Magento\Cms\Model\ResourceModel\Page\Collection as PageCollection;
 
 /**
  * Class Collection
@@ -27,12 +27,12 @@ class Collection extends PageCollection implements SearchResultInterface
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed|null $mainTable
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $eventPrefix
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $eventPrefix
      * @param mixed $eventObject
      * @param mixed $resourceModel
      * @param string $model
      * @param null $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb|null $resource
      * 
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -48,7 +48,7 @@ class Collection extends PageCollection implements SearchResultInterface
         $resourceModel,
         $model = 'Magento\Framework\View\Element\UiComponent\DataProvider\Document',
         $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Cms/Test/Unit/Block/Widget/Page/LinkTest.php b/app/code/Magento/Cms/Test/Unit/Block/Widget/Page/LinkTest.php
index 421e28ecfc498f8cf89190ea7e05764c6cb8896b..7d14d051bdc8c6a8abe7d08146593b1d7a2b620e 100644
--- a/app/code/Magento/Cms/Test/Unit/Block/Widget/Page/LinkTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Block/Widget/Page/LinkTest.php
@@ -23,7 +23,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
     protected $mockCmsPage;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\ResourceModel\Page|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $mockResourcePage;
 
@@ -31,7 +31,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
     {
         $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->mockCmsPage = $this->getMock('Magento\Cms\Helper\Page', [], [], '', false, false);
-        $this->mockResourcePage = $this->getMock('Magento\Cms\Model\Resource\Page', [], [], '', false, false);
+        $this->mockResourcePage = $this->getMock('Magento\Cms\Model\ResourceModel\Page', [], [], '', false, false);
 
         $this->linkElement = $this->objectManager->getObject(
             'Magento\Cms\Block\Widget\Page\Link',
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
index 2910d63641d65b4f0c49d0cc3478d88bf4e6a8c7..81164feafac104415a7650395d6db20f3ac232fe 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Block/MassDeleteTest.php
@@ -15,12 +15,12 @@ class MassDeleteTest extends AbstractMassActionTest
     protected $massDeleteController;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Block\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\ResourceModel\Block\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collectionFactoryMock;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Block\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\ResourceModel\Block\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $blockCollectionMock;
 
@@ -29,14 +29,15 @@ class MassDeleteTest extends AbstractMassActionTest
         parent::setUp();
 
         $this->collectionFactoryMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Block\CollectionFactory',
+            'Magento\Cms\Model\ResourceModel\Block\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
 
-        $this->blockCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Block\Collection', [], [], '', false);
+        $this->blockCollectionMock =
+            $this->getMock('Magento\Cms\Model\ResourceModel\Block\Collection', [], [], '', false);
 
         $this->massDeleteController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Block\MassDelete',
@@ -85,11 +86,11 @@ class MassDeleteTest extends AbstractMassActionTest
     /**
      * Create Cms Block Collection Mock
      *
-     * @return \Magento\Cms\Model\Resource\Block\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @return \Magento\Cms\Model\ResourceModel\Block\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected function getBlockMock()
     {
-        $blockMock = $this->getMock('Magento\Cms\Model\Resource\Block\Collection', ['delete'], [], '', false);
+        $blockMock = $this->getMock('Magento\Cms\Model\ResourceModel\Block\Collection', ['delete'], [], '', false);
         $blockMock->expects($this->once())->method('delete')->willReturn(true);
 
         return $blockMock;
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Page/InlineEditTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/InlineEditTest.php
similarity index 64%
rename from app/code/Magento/Cms/Test/Unit/Controller/Page/InlineEditTest.php
rename to app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/InlineEditTest.php
index 64218dc835db02febeb3564f7fe1e0e2a3b51141..8402fbc8f3b7fcdb71109b759c8d6b4a7867eb72 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Page/InlineEditTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/InlineEditTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Cms\Test\Unit\Controller\Page;
+namespace Magento\Cms\Test\Unit\Controller\Adminhtml\Page;
 
 use Magento\Cms\Controller\Adminhtml\Page\InlineEdit;
 
@@ -49,38 +49,11 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
     {
         $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
-        $this->request = $this->getMockForAbstractClass(
-            'Magento\Framework\App\RequestInterface',
-            [],
-            '',
-            false
-        );
-        $this->messageManager = $this->getMockForAbstractClass(
-            'Magento\Framework\Message\ManagerInterface',
-            [],
-            '',
-            false
-        );
-        $this->messageCollection = $this->getMock(
-            'Magento\Framework\Message\Collection',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->message = $this->getMockForAbstractClass(
-            'Magento\Framework\Message\MessageInterface',
-            [],
-            '',
-            false
-        );
-        $this->cmsPage = $this->getMock(
-            'Magento\Cms\Model\Page',
-            [],
-            [],
-            '',
-            false
-        );
+        $this->request = $this->getMockForAbstractClass('Magento\Framework\App\RequestInterface');
+        $this->messageManager = $this->getMockForAbstractClass('Magento\Framework\Message\ManagerInterface');
+        $this->messageCollection = $this->getMock('Magento\Framework\Message\Collection', [], [], '', false);
+        $this->message = $this->getMockForAbstractClass('Magento\Framework\Message\MessageInterface');
+        $this->cmsPage = $this->getMock('Magento\Cms\Model\Page', [], [], '', false);
         $this->context = $helper->getObject(
             'Magento\Backend\App\Action\Context',
             [
@@ -95,12 +68,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->pageRepository = $this->getMockForAbstractClass(
-            'Magento\Cms\Api\PageRepositoryInterface',
-            [],
-            '',
-            false
-        );
+        $this->pageRepository = $this->getMockForAbstractClass('Magento\Cms\Api\PageRepositoryInterface');
         $this->resultJson = $this->getMock('Magento\Framework\Controller\Result\Json', [], [], '', false);
         $this->jsonFactory = $this->getMock(
             'Magento\Framework\Controller\Result\JsonFactory',
@@ -125,15 +93,14 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
                 'identifier' => 'no-route'
             ]
         ];
-
-        $this->request->expects($this->at(1))
-            ->method('getParam')
-            ->with('isAjax')
-            ->willReturn(true);
-        $this->request->expects($this->at(0))
+        $this->request->expects($this->any())
             ->method('getParam')
-            ->with('items', [])
-            ->willReturn($postData);
+            ->willReturnMap(
+                [
+                    ['isAjax', null, true],
+                    ['items', [], $postData]
+                ]
+            );
         $this->pageRepository->expects($this->once())
             ->method('getById')
             ->with(1)
@@ -160,7 +127,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
         $this->cmsPage->expects($this->atLeastOnce())
             ->method('getId')
             ->willReturn('1');
-        $this->cmsPage->expects($this->once())
+        $this->cmsPage->expects($this->atLeastOnce())
             ->method('getData')
             ->willReturn([
                 'layout' => '1column',
@@ -196,7 +163,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ])
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->assertSame($this->resultJson, $this->controller->execute());
     }
 
     public function testExecuteWithRuntimeException()
@@ -217,7 +184,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ])
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->assertSame($this->resultJson, $this->controller->execute());
     }
 
     public function testExecuteWithException()
@@ -238,7 +205,7 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ])
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->assertSame($this->resultJson, $this->controller->execute());
     }
 
     public function testExecuteWithoutData()
@@ -246,14 +213,14 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
         $this->jsonFactory->expects($this->once())
             ->method('create')
             ->willReturn($this->resultJson);
-        $this->request->expects($this->at(0))
+        $this->request->expects($this->any())
             ->method('getParam')
-            ->with('items', [])
-            ->willReturn([]);
-        $this->request->expects($this->at(1))
-            ->method('getParam')
-            ->with('isAjax', null)
-            ->willReturn(true);
+            ->willReturnMap(
+                [
+                    ['items', [], []],
+                    ['isAjax', null, true]
+                ]
+            );
         $this->resultJson->expects($this->once())
             ->method('setData')
             ->with([
@@ -264,6 +231,71 @@ class InlineEditTest extends \PHPUnit_Framework_TestCase
             ])
             ->willReturnSelf();
 
-        $this->controller->execute();
+        $this->assertSame($this->resultJson, $this->controller->execute());
+    }
+
+    public function testSetCmsPageData()
+    {
+        $extendedPageData = [
+            'page_id' => '2',
+            'title' => 'Home Page',
+            'page_layout' => '1column',
+            'identifier' => 'home',
+            'content_heading' => 'Home Page',
+            'content' => 'CMS homepage content goes here.',
+            'is_active' => '1',
+            'sort_order' => '1',
+            'custom_theme' => '3',
+            'website_root' => '1',
+            'under_version_control' => '0',
+            'store_id' => ['0']
+        ];
+        $pageData = [
+            'page_id' => '2',
+            'title' => 'Home Page',
+            'page_layout' => '1column',
+            'identifier' => 'home',
+            'is_active' => '1',
+            'custom_theme' => '3',
+            'under_version_control' => '0',
+        ];
+        $getData = [
+            'page_id' => '2',
+            'title' => 'Home Page',
+            'page_layout' => '1column',
+            'identifier' => 'home',
+            'content_heading' => 'Home Page',
+            'content' => 'CMS homepage content goes here.',
+            'is_active' => '1',
+            'sort_order' => '1',
+            'custom_theme' => '3',
+            'custom_root_template' => '1column',
+            'published_revision_id' => '0',
+            'website_root' => '1',
+            'under_version_control' => '0',
+            'store_id' => ['0']
+        ];
+        $mergedData = [
+            'page_id' => '2',
+            'title' => 'Home Page',
+            'page_layout' => '1column',
+            'identifier' => 'home',
+            'content_heading' => 'Home Page',
+            'content' => 'CMS homepage content goes here.',
+            'is_active' => '1',
+            'sort_order' => '1',
+            'custom_theme' => '3',
+            'custom_root_template' => '1column',
+            'published_revision_id' => '0',
+            'website_root' => '1',
+            'under_version_control' => '0',
+            'store_id' => ['0']
+        ];
+        $this->cmsPage->expects($this->once())->method('getData')->willReturn($getData);
+        $this->cmsPage->expects($this->once())->method('setData')->with($mergedData)->willReturnSelf();
+        $this->assertSame(
+            $this->controller,
+            $this->controller->setCmsPageData($this->cmsPage, $extendedPageData, $pageData)
+        );
     }
 }
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
index 6f87c8bca31c90c9507b4461731495f4dd8bf441..98a5df2b6190bc5571ca1843f836330e07dbb569 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDeleteTest.php
@@ -15,12 +15,12 @@ class MassDeleteTest extends AbstractMassActionTest
     protected $massDeleteController;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\ResourceModel\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collectionFactoryMock;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\ResourceModel\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $pageCollectionMock;
 
@@ -29,14 +29,15 @@ class MassDeleteTest extends AbstractMassActionTest
         parent::setUp();
 
         $this->collectionFactoryMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Page\CollectionFactory',
+            'Magento\Cms\Model\ResourceModel\Page\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
 
-        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
+        $this->pageCollectionMock =
+            $this->getMock('Magento\Cms\Model\ResourceModel\Page\Collection', [], [], '', false);
 
         $this->massDeleteController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Page\MassDelete',
@@ -85,11 +86,11 @@ class MassDeleteTest extends AbstractMassActionTest
     /**
      * Create Cms Page Collection Mock
      *
-     * @return \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @return \Magento\Cms\Model\ResourceModel\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected function getPageMock()
     {
-        $pageMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', ['delete'], [], '', false);
+        $pageMock = $this->getMock('Magento\Cms\Model\ResourceModel\Page\Collection', ['delete'], [], '', false);
         $pageMock->expects($this->once())->method('delete')->willReturn(true);
 
         return $pageMock;
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
index 7bc2ee03ecf6ef59d67c817daff9264123f5d736..688cc87fa09e35b1da68abf3d79fcee425a00a97 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassDisableTest.php
@@ -15,12 +15,12 @@ class MassDisableTest extends AbstractMassActionTest
     protected $massDisableController;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\ResourceModel\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collectionFactoryMock;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\ResourceModel\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $pageCollectionMock;
 
@@ -29,14 +29,20 @@ class MassDisableTest extends AbstractMassActionTest
         parent::setUp();
 
         $this->collectionFactoryMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Page\CollectionFactory',
+            'Magento\Cms\Model\ResourceModel\Page\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
 
-        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
+        $this->pageCollectionMock = $this->getMock(
+            'Magento\Cms\Model\ResourceModel\Page\Collection',
+            [],
+            [],
+            '',
+            false
+        );
 
         $this->massDisableController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Page\MassDisable',
@@ -85,12 +91,12 @@ class MassDisableTest extends AbstractMassActionTest
     /**
      * Create Cms Page Collection Mock
      *
-     * @return \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @return \Magento\Cms\Model\ResourceModel\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected function getPageMock()
     {
         $pageMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Page\Collection',
+            'Magento\Cms\Model\ResourceModel\Page\Collection',
             ['setIsActive', 'save'],
             [],
             '',
diff --git a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
index 2fbef8db3345756d5d23fe22b626a0942d2cf1ee..661231aa012bb4ccd4614a845cf47465f19dc527 100644
--- a/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Controller/Adminhtml/Page/MassEnableTest.php
@@ -15,12 +15,12 @@ class MassEnableTest extends AbstractMassActionTest
     protected $massEnableController;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\ResourceModel\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collectionFactoryMock;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\ResourceModel\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $pageCollectionMock;
 
@@ -29,14 +29,20 @@ class MassEnableTest extends AbstractMassActionTest
         parent::setUp();
 
         $this->collectionFactoryMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Page\CollectionFactory',
+            'Magento\Cms\Model\ResourceModel\Page\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
 
-        $this->pageCollectionMock = $this->getMock('Magento\Cms\Model\Resource\Page\Collection', [], [], '', false);
+        $this->pageCollectionMock = $this->getMock(
+            'Magento\Cms\Model\ResourceModel\Page\Collection',
+            [],
+            [],
+            '',
+            false
+        );
 
         $this->massEnableController = $this->objectManager->getObject(
             'Magento\Cms\Controller\Adminhtml\Page\MassEnable',
@@ -85,12 +91,12 @@ class MassEnableTest extends AbstractMassActionTest
     /**
      * Create Cms Page Collection Mock
      *
-     * @return \Magento\Cms\Model\Resource\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @return \Magento\Cms\Model\ResourceModel\Page\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected function getPageMock()
     {
         $pageMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Page\Collection',
+            'Magento\Cms\Model\ResourceModel\Page\Collection',
             ['setIsActive', 'save'],
             [],
             '',
diff --git a/app/code/Magento/Cms/Test/Unit/Model/BlockRepositoryTest.php b/app/code/Magento/Cms/Test/Unit/Model/BlockRepositoryTest.php
index f585155396d9f27c311669a7b23bbea5128d8cc8..9f11caac3ff29116a362e39019ce052d7708e244 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/BlockRepositoryTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/BlockRepositoryTest.php
@@ -19,7 +19,7 @@ class BlockRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $repository;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Resource\Block
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\ResourceModel\Block
      */
     protected $blockResource;
 
@@ -49,7 +49,7 @@ class BlockRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $dataObjectProcessor;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Resource\Block\Collection
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\ResourceModel\Block\Collection
      */
     protected $collection;
 
@@ -58,7 +58,7 @@ class BlockRepositoryTest extends \PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
-        $this->blockResource = $this->getMockBuilder('Magento\Cms\Model\Resource\Block')
+        $this->blockResource = $this->getMockBuilder('Magento\Cms\Model\ResourceModel\Block')
             ->disableOriginalConstructor()
             ->getMock();
         $this->dataObjectProcessor = $this->getMockBuilder('Magento\Framework\Reflection\DataObjectProcessor')
@@ -76,7 +76,7 @@ class BlockRepositoryTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $collectionFactory = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\CollectionFactory')
+        $collectionFactory = $this->getMockBuilder('Magento\Cms\Model\ResourceModel\Block\CollectionFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -86,7 +86,7 @@ class BlockRepositoryTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->blockSearchResult = $this->getMockBuilder('Magento\Cms\Api\Data\BlockSearchResultsInterface')
             ->getMock();
-        $this->collection = $this->getMockBuilder('Magento\Cms\Model\Resource\Block\Collection')
+        $this->collection = $this->getMockBuilder('Magento\Cms\Model\ResourceModel\Block\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['addFieldToFilter', 'getSize', 'setCurPage', 'setPageSize', 'load', 'addOrder'])
             ->getMock();
@@ -107,7 +107,7 @@ class BlockRepositoryTest extends \PHPUnit_Framework_TestCase
          * @var \Magento\Cms\Model\BlockFactory $blockFactory
          * @var \Magento\Cms\Api\Data\BlockInterfaceFactory $blockDataFactory
          * @var \Magento\Cms\Api\Data\BlockSearchResultsInterfaceFactory $blockSearchResultFactory
-         * @var \Magento\Cms\Model\Resource\Block\CollectionFactory $collectionFactory
+         * @var \Magento\Cms\Model\ResourceModel\Block\CollectionFactory $collectionFactory
          */
 
         $this->dataHelper = $this->getMockBuilder('Magento\Framework\Api\DataObjectHelper')
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Config/Source/PageTest.php b/app/code/Magento/Cms/Test/Unit/Model/Config/Source/PageTest.php
index a4602ea501dc26e141aa9003b763bd33ac7c745e..68592d5a02f29cf13cf378782775b300598f1d0d 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/Config/Source/PageTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/Config/Source/PageTest.php
@@ -11,7 +11,7 @@ namespace Magento\Cms\Test\Unit\Model\Config\Source;
 class PageTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Cms\Model\Resource\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\ResourceModel\Page\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collectionFactory;
 
@@ -30,7 +30,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
         $this->collectionFactory = $this->getMock(
-            'Magento\Cms\Model\Resource\Page\CollectionFactory',
+            'Magento\Cms\Model\ResourceModel\Page\CollectionFactory',
             ['create'],
             [],
             '',
@@ -53,7 +53,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
     public function testToOptionArray()
     {
         $pageCollectionMock = $this->getMock(
-            'Magento\Cms\Model\Resource\Page\Collection',
+            'Magento\Cms\Model\ResourceModel\Page\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Page/Source/IsActiveFilterTest.php b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/IsActiveFilterTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..58b6d4ba6012c8b2a8be6e88144f0cec23e78d48
--- /dev/null
+++ b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/IsActiveFilterTest.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Test\Unit\Model\Page\Source;
+
+class IsActiveFilterTest extends IsActiveTest
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function getSourceClassName()
+    {
+        return 'Magento\Cms\Model\Page\Source\IsActiveFilter';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getAvailableStatusesDataProvider()
+    {
+        return [
+            [
+                [],
+                [['label' => '', 'value' => '']],
+            ],
+            [
+                ['testStatus' => 'testValue'],
+                [['label' => '', 'value' => ''], ['label' => 'testValue', 'value' => 'testStatus']],
+            ],
+        ];
+    }
+}
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Page/Source/IsActiveTest.php b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/IsActiveTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..cb9edf9126abcb50a3d2fb1f0273aa45dfec5abc
--- /dev/null
+++ b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/IsActiveTest.php
@@ -0,0 +1,83 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Test\Unit\Model\Page\Source;
+
+use Magento\Cms\Model\Page;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
+class IsActiveTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var Page|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $cmsPageMock;
+
+    /**
+     * @var ObjectManager
+     */
+    protected $objectManagerHelper;
+
+    /**
+     * @var Page\Source\IsActive
+     */
+    protected $object;
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function setUp()
+    {
+        $this->objectManagerHelper = new ObjectManager($this);
+        $this->cmsPageMock = $this->getMockBuilder('Magento\Cms\Model\Page')
+            ->disableOriginalConstructor()
+            ->setMethods(['getAvailableStatuses'])
+            ->getMock();
+
+        $this->object = $this->objectManagerHelper->getObject($this->getSourceClassName(), [
+            'cmsPage' => $this->cmsPageMock,
+        ]);
+    }
+
+    /**
+     * @return string
+     */
+    protected function getSourceClassName()
+    {
+        return 'Magento\Cms\Model\Page\Source\IsActive';
+    }
+
+    /**
+     * @param array $availableStatuses
+     * @param array $expected
+     * @return void
+     * @dataProvider getAvailableStatusesDataProvider
+     */
+    public function testToOptionArray(array $availableStatuses, array $expected)
+    {
+        $this->cmsPageMock->expects($this->once())
+            ->method('getAvailableStatuses')
+            ->willReturn($availableStatuses);
+
+        $this->assertSame($expected, $this->object->toOptionArray());
+    }
+
+    /**
+     * @return array
+     */
+    public function getAvailableStatusesDataProvider()
+    {
+        return [
+            [
+                [],
+                [],
+            ],
+            [
+                ['testStatus' => 'testValue'],
+                [['label' => 'testValue', 'value' => 'testStatus']],
+            ],
+        ];
+    }
+}
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Page/Source/PageLayoutFilterTest.php b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/PageLayoutFilterTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a67820cbfc6afe059c2a91e6e8ee6c05bed31489
--- /dev/null
+++ b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/PageLayoutFilterTest.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Test\Unit\Model\Page\Source;
+
+class PageLayoutFilterTest extends PageLayoutTest
+{
+    /**
+     * @return string
+     */
+    protected function getSourceClassName()
+    {
+        return 'Magento\Cms\Model\Page\Source\PageLayoutFilter';
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getOptionsDataProvider()
+    {
+        return [
+            [
+                [],
+                [['label' => '', 'value' => '']],
+            ],
+            [
+                ['testStatus' => 'testValue'],
+                [['label' => '', 'value' => ''], ['label' => 'testValue', 'value' => 'testStatus']],
+            ],
+        ];
+    }
+}
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Page/Source/PageLayoutTest.php b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/PageLayoutTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ccf58e798ae276c4993c39da4acb2eab648bec9a
--- /dev/null
+++ b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/PageLayoutTest.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Test\Unit\Model\Page\Source;
+
+use Magento\Cms\Model\Page\Source\PageLayout;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Framework\View\Model\PageLayout\Config\BuilderInterface;
+use Magento\Framework\View\PageLayout\Config;
+
+class PageLayoutTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var BuilderInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $builderMock;
+
+    /**
+     * @var Config|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageLayoutConfigMock;
+
+    /**
+     * @var ObjectManager
+     */
+    protected $objectManagerHelper;
+
+    /**
+     * @var PageLayout
+     */
+    protected $object;
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function setUp()
+    {
+        $this->objectManagerHelper = new ObjectManager($this);
+        $this->builderMock = $this->getMockBuilder('Magento\Framework\View\Model\PageLayout\Config\BuilderInterface')
+            ->disableOriginalConstructor()
+            ->setMethods(['getPageLayoutsConfig'])
+            ->getMock();
+        $this->pageLayoutConfigMock = $this->getMockBuilder('Magento\Framework\View\PageLayout\Config')
+            ->disableOriginalConstructor()
+            ->setMethods(['getOptions'])
+            ->getMock();
+
+        $this->builderMock->expects($this->any())
+            ->method('getPageLayoutsConfig')
+            ->willReturn($this->pageLayoutConfigMock);
+
+        $this->object = $this->objectManagerHelper->getObject($this->getSourceClassName(), [
+            'pageLayoutBuilder' => $this->builderMock,
+        ]);
+    }
+
+    /**
+     * @return string
+     */
+    protected function getSourceClassName()
+    {
+        return 'Magento\Cms\Model\Page\Source\PageLayout';
+    }
+
+    /**
+     * @param array $options
+     * @param array $expected
+     * @return void
+     * @dataProvider getOptionsDataProvider
+     */
+    public function testToOptionArray(array $options, array $expected)
+    {
+        $this->pageLayoutConfigMock->expects($this->once())
+            ->method('getOptions')
+            ->willReturn($options);
+
+        $this->assertSame($expected, $this->object->toOptionArray());
+    }
+
+    /**
+     * @return array
+     */
+    public function getOptionsDataProvider()
+    {
+        return [
+            [
+                [],
+                [],
+            ],
+            [
+                ['testStatus' => 'testValue'],
+                [['label' => 'testValue', 'value' => 'testStatus']],
+            ],
+
+        ];
+    }
+}
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Page/Source/ThemeFilterTest.php b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/ThemeFilterTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d0b88e0028bf84bf26e5bd42df5201367ccc383e
--- /dev/null
+++ b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/ThemeFilterTest.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Test\Unit\Model\Page\Source;
+
+class ThemeFilterTest extends ThemeTest
+{
+    /**
+     * {@inheritdoc}
+     */
+    protected function getClassName()
+    {
+        return 'Magento\Cms\Model\Page\Source\ThemeFilter';
+    }
+
+    /**
+     * @return array
+     */
+    public function getOptionsDataProvider()
+    {
+        return [
+            [
+                [],
+                [['label' => '', 'value' => '']],
+            ],
+            [
+                [['label' => 'testValue', 'value' => 'testStatus']],
+                [['label' => '', 'value' => ''], ['label' => 'testValue', 'value' => 'testStatus']],
+            ],
+
+        ];
+    }
+}
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Page/Source/ThemeTest.php b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/ThemeTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..706de05aede0417722126adc345b21256ac13ad0
--- /dev/null
+++ b/app/code/Magento/Cms/Test/Unit/Model/Page/Source/ThemeTest.php
@@ -0,0 +1,84 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Cms\Test\Unit\Model\Page\Source;
+
+use Magento\Cms\Model\Page\Source\Theme;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Framework\View\Design\Theme\Label\ListInterface;
+
+class ThemeTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var ListInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $listMock;
+
+    /**
+     * @var ObjectManager
+     */
+    protected $objectManagerHelper;
+
+    /**
+     * @var Theme
+     */
+    protected $object;
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function setUp()
+    {
+        $this->objectManagerHelper = new ObjectManager($this);
+        $this->listMock = $this->getMockBuilder('Magento\Framework\View\Design\Theme\Label\ListInterface')
+            ->disableOriginalConstructor()
+            ->setMethods(['getLabels'])
+            ->getMock();
+
+        $this->object = $this->objectManagerHelper->getObject($this->getClassName(), [
+            'themeList' => $this->listMock,
+        ]);
+    }
+
+    /**
+     * @return string
+     */
+    protected function getClassName()
+    {
+        return 'Magento\Cms\Model\Page\Source\Theme';
+    }
+
+    /**
+     * @param array $options
+     * @param array $expected
+     * @return void
+     * @dataProvider getOptionsDataProvider
+     */
+    public function testToOptionArray(array $options, array $expected)
+    {
+        $this->listMock->expects($this->once())
+            ->method('getLabels')
+            ->willReturn($options);
+
+        $this->assertSame($expected, $this->object->toOptionArray());
+    }
+
+    /**
+     * @return array
+     */
+    public function getOptionsDataProvider()
+    {
+        return [
+            [
+                [],
+                [],
+            ],
+            [
+                [['label' => 'testValue', 'value' => 'testStatus']],
+                [['label' => 'testValue', 'value' => 'testStatus']],
+            ],
+        ];
+    }
+}
diff --git a/app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php b/app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php
index 916a2e4e15dd742f09ca5d4332baea23dcc39a36..97bc48bc0a471ef4ea6c5f5572d3d7b7bd17777d 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/PageRepositoryTest.php
@@ -19,7 +19,7 @@ class PageRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $repository;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Resource\Page
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\ResourceModel\Page
      */
     protected $pageResource;
 
@@ -49,7 +49,7 @@ class PageRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $dataObjectProcessor;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\Resource\Page\Collection
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Cms\Model\ResourceModel\Page\Collection
      */
     protected $collection;
 
@@ -58,7 +58,7 @@ class PageRepositoryTest extends \PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
-        $this->pageResource = $this->getMockBuilder('Magento\Cms\Model\Resource\Page')
+        $this->pageResource = $this->getMockBuilder('Magento\Cms\Model\ResourceModel\Page')
             ->disableOriginalConstructor()
             ->getMock();
         $this->dataObjectProcessor = $this->getMockBuilder('Magento\Framework\Reflection\DataObjectProcessor')
@@ -76,7 +76,7 @@ class PageRepositoryTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $collectionFactory = $this->getMockBuilder('Magento\Cms\Model\Resource\Page\CollectionFactory')
+        $collectionFactory = $this->getMockBuilder('Magento\Cms\Model\ResourceModel\Page\CollectionFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -86,7 +86,7 @@ class PageRepositoryTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->pageSearchResult = $this->getMockBuilder('Magento\Cms\Api\Data\PageSearchResultsInterface')
             ->getMock();
-        $this->collection = $this->getMockBuilder('Magento\Cms\Model\Resource\Page\Collection')
+        $this->collection = $this->getMockBuilder('Magento\Cms\Model\ResourceModel\Page\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['addFieldToFilter', 'getSize', 'setCurPage', 'setPageSize', 'load', 'addOrder'])
             ->getMock();
@@ -107,7 +107,7 @@ class PageRepositoryTest extends \PHPUnit_Framework_TestCase
          * @var \Magento\Cms\Model\PageFactory $pageFactory
          * @var \Magento\Cms\Api\Data\PageInterfaceFactory $pageDataFactory
          * @var \Magento\Cms\Api\Data\PageSearchResultsInterfaceFactory $pageSearchResultFactory
-         * @var \Magento\Cms\Model\Resource\Page\CollectionFactory $collectionFactory
+         * @var \Magento\Cms\Model\ResourceModel\Page\CollectionFactory $collectionFactory
          */
 
         $this->dataHelper = $this->getMockBuilder('Magento\Framework\Api\DataObjectHelper')
diff --git a/app/code/Magento/Cms/Test/Unit/Model/PageTest.php b/app/code/Magento/Cms/Test/Unit/Model/PageTest.php
index 8a88e04e4f457a9c57b92323ea9b61118daefe2f..b2a025a558962e95c7e25723ccb26f0d47f60c3f 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/PageTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/PageTest.php
@@ -26,7 +26,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
     protected $eventManagerMock;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\ResourceModel\Page|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourcePageMock;
 
@@ -42,7 +42,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
                 'eventDispatcher' => $this->eventManagerMock
             ]
         );
-        $this->resourcePageMock = $this->getMockBuilder('Magento\Cms\Model\Resource\Page')
+        $this->resourcePageMock = $this->getMockBuilder('Magento\Cms\Model\ResourceModel\Page')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
@@ -58,7 +58,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
                     $this->getMockBuilder('Magento\Framework\Registry')
                         ->disableOriginalConstructor()
                         ->getMock(),
-                    $this->getMockBuilder('Magento\Framework\Model\Resource\AbstractResource')
+                    $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource')
                         ->disableOriginalConstructor()
                         ->setMethods(
                             [
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Resource/AbstractCollectionTest.php b/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/AbstractCollectionTest.php
similarity index 89%
rename from app/code/Magento/Cms/Test/Unit/Model/Resource/AbstractCollectionTest.php
rename to app/code/Magento/Cms/Test/Unit/Model/ResourceModel/AbstractCollectionTest.php
index 0f091388cc78593d22ce55e1ac7371dfd7b04fd1..e323765dabef2ffb9cb3d7273379cf8c41207a2e 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/Resource/AbstractCollectionTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/AbstractCollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Cms\Test\Unit\Model\Resource;
+namespace Magento\Cms\Test\Unit\Model\ResourceModel;
 
 abstract class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -23,7 +23,7 @@ abstract class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
     protected $objectManager;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -38,7 +38,7 @@ abstract class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->connection->expects($this->any())->method('select')->willReturn($this->select);
 
-        $this->resource = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $this->resource = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['getConnection', 'getMainTable', 'getTable'])
             ->getMockForAbstractClass();
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Resource/Block/CollectionTest.php b/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/Block/CollectionTest.php
similarity index 86%
rename from app/code/Magento/Cms/Test/Unit/Model/Resource/Block/CollectionTest.php
rename to app/code/Magento/Cms/Test/Unit/Model/ResourceModel/Block/CollectionTest.php
index b87c29ca44249195e87e4859df693e2c0363a6d9..185d0ede5468a4d210cf9aeb84189df4ec7a45ff 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/Resource/Block/CollectionTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/Block/CollectionTest.php
@@ -3,15 +3,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Cms\Test\Unit\Model\Resource\Block;
+namespace Magento\Cms\Test\Unit\Model\ResourceModel\Block;
 
-use Magento\Cms\Test\Unit\Model\Resource\AbstractCollectionTest;
+use Magento\Cms\Test\Unit\Model\ResourceModel\AbstractCollectionTest;
 use Magento\Framework\DataObject;
 
 class CollectionTest extends AbstractCollectionTest
 {
     /**
-     * @var \Magento\Cms\Model\Resource\Block\Collection
+     * @var \Magento\Cms\Model\ResourceModel\Block\Collection
      */
     protected $collection;
 
@@ -20,7 +20,7 @@ class CollectionTest extends AbstractCollectionTest
         parent::setUp();
 
         $this->collection = $this->objectManager->getObject(
-            'Magento\Cms\Model\Resource\Block\Collection',
+            'Magento\Cms\Model\ResourceModel\Block\Collection',
             [
                 'resource' => $this->resource,
                 'connection' => $this->connection
diff --git a/app/code/Magento/Cms/Test/Unit/Model/Resource/Page/CollectionTest.php b/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/Page/CollectionTest.php
similarity index 86%
rename from app/code/Magento/Cms/Test/Unit/Model/Resource/Page/CollectionTest.php
rename to app/code/Magento/Cms/Test/Unit/Model/ResourceModel/Page/CollectionTest.php
index 3ed7babaf1062522497217e154b74e1dc7674ff4..6adff783c0a2b53cce88a8c94f386a7a1de70a39 100644
--- a/app/code/Magento/Cms/Test/Unit/Model/Resource/Page/CollectionTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Model/ResourceModel/Page/CollectionTest.php
@@ -3,15 +3,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Cms\Test\Unit\Model\Resource\Page;
+namespace Magento\Cms\Test\Unit\Model\ResourceModel\Page;
 
-use Magento\Cms\Test\Unit\Model\Resource\AbstractCollectionTest;
+use Magento\Cms\Test\Unit\Model\ResourceModel\AbstractCollectionTest;
 use Magento\Framework\DataObject;
 
 class CollectionTest extends AbstractCollectionTest
 {
     /**
-     * @var \Magento\Cms\Model\Resource\Page\Collection
+     * @var \Magento\Cms\Model\ResourceModel\Page\Collection
      */
     protected $collection;
 
@@ -20,7 +20,7 @@ class CollectionTest extends AbstractCollectionTest
         parent::setUp();
 
         $this->collection = $this->objectManager->getObject(
-            'Magento\Cms\Model\Resource\Page\Collection',
+            'Magento\Cms\Model\ResourceModel\Page\Collection',
             [
                 'resource' => $this->resource,
                 'connection' => $this->connection
diff --git a/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php b/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php
index e50be29ce1130c98691d649fb5bf2dc0677cdb03..59bcbf7a18596f13eb9f3afe36dc7e8f6f686069 100644
--- a/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php
+++ b/app/code/Magento/Cms/Test/Unit/Ui/Component/Listing/Column/PageActionsTest.php
@@ -18,12 +18,19 @@ class PageActionsTest extends \PHPUnit_Framework_TestCase
         $urlBuilderMock = $this->getMockBuilder('Magento\Framework\UrlInterface')
             ->disableOriginalConstructor()
             ->getMock();
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
 
         /** @var \Magento\Cms\Ui\Component\Listing\Column\PageActions $model */
         $model = $objectManager->getObject(
             'Magento\Cms\Ui\Component\Listing\Column\PageActions',
             [
                 'urlBuilder' => $urlBuilderMock,
+                'context' => $contextMock,
             ]
         );
 
diff --git a/app/code/Magento/Cms/composer.json b/app/code/Magento/Cms/composer.json
index 324eb22f51a417359b4f62ce75ab6982a36da6e9..5cf3cb34f5f513f0615a68a96e5552f1eab51133 100644
--- a/app/code/Magento/Cms/composer.json
+++ b/app/code/Magento/Cms/composer.json
@@ -14,6 +14,9 @@
         "magento/module-media-storage": "1.0.0-beta",
         "magento/framework": "1.0.0-beta"
     },
+    "suggest": {
+        "magento/module-cms-sample-data": "Sample Data version:1.0.0-beta"
+    },
     "type": "magento2-module",
     "version": "1.0.0-beta",
     "license": [
diff --git a/app/code/Magento/Cms/etc/di.xml b/app/code/Magento/Cms/etc/di.xml
index caa3df5997c9e2770341723ae2e0f826eca08a82..0c958b7bd00f732a3cf67569d98ed32e7aa3376a 100644
--- a/app/code/Magento/Cms/etc/di.xml
+++ b/app/code/Magento/Cms/etc/di.xml
@@ -59,25 +59,25 @@
     <type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
         <arguments>
             <argument name="collections" xsi:type="array">
-                <item name="cms_page_listing_data_source" xsi:type="string">Magento\Cms\Model\Resource\Page\Grid\Collection</item>
-                <item name="cms_block_listing_data_source" xsi:type="string">Magento\Cms\Model\Resource\Block\Grid\Collection</item>
+                <item name="cms_page_listing_data_source" xsi:type="string">Magento\Cms\Model\ResourceModel\Page\Grid\Collection</item>
+                <item name="cms_block_listing_data_source" xsi:type="string">Magento\Cms\Model\ResourceModel\Block\Grid\Collection</item>
             </argument>
         </arguments>
     </type>
-    <type name="Magento\Cms\Model\Resource\Page\Grid\Collection">
+    <type name="Magento\Cms\Model\ResourceModel\Page\Grid\Collection">
         <arguments>
             <argument name="mainTable" xsi:type="string">cms_page</argument>
             <argument name="eventPrefix" xsi:type="string">cms_page_grid_collection</argument>
             <argument name="eventObject" xsi:type="string">page_grid_collection</argument>
-            <argument name="resourceModel" xsi:type="string">Magento\Cms\Model\Resource\Page</argument>
+            <argument name="resourceModel" xsi:type="string">Magento\Cms\Model\ResourceModel\Page</argument>
         </arguments>
     </type>
-    <type name="Magento\Cms\Model\Resource\Block\Grid\Collection">
+    <type name="Magento\Cms\Model\ResourceModel\Block\Grid\Collection">
         <arguments>
             <argument name="mainTable" xsi:type="string">cms_block</argument>
             <argument name="eventPrefix" xsi:type="string">cms_block_grid_collection</argument>
             <argument name="eventObject" xsi:type="string">block_grid_collection</argument>
-            <argument name="resourceModel" xsi:type="string">Magento\Cms\Model\Resource\Block</argument>
+            <argument name="resourceModel" xsi:type="string">Magento\Cms\Model\ResourceModel\Block</argument>
         </arguments>
     </type>
     <virtualType name="CmsGirdFilterPool" type="Magento\Framework\View\Element\UiComponent\DataProvider\FilterPool">
@@ -90,13 +90,13 @@
     </virtualType>
     <virtualType name="PageGridDataProvider" type="Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider">
         <arguments>
-            <argument name="collection" xsi:type="object" shared="false">Magento\Cms\Model\Resource\Page\Collection</argument>
+            <argument name="collection" xsi:type="object" shared="false">Magento\Cms\Model\ResourceModel\Page\Collection</argument>
             <argument name="filterPool" xsi:type="object" shared="false">CmsGirdFilterPool</argument>
         </arguments>
     </virtualType>
     <virtualType name="BlockGridDataProvider" type="Magento\Framework\View\Element\UiComponent\DataProvider\DataProvider">
         <arguments>
-            <argument name="collection" xsi:type="object" shared="false">Magento\Cms\Model\Resource\Block\Collection</argument>
+            <argument name="collection" xsi:type="object" shared="false">Magento\Cms\Model\ResourceModel\Block\Collection</argument>
             <argument name="filterPool" xsi:type="object" shared="false">CmsGirdFilterPool</argument>
         </arguments>
     </virtualType>
diff --git a/app/code/Magento/Cms/etc/frontend/events.xml b/app/code/Magento/Cms/etc/frontend/events.xml
index 6826c24af7da1b44b9c18197e3e41cda938ebdd0..f153ae9fef1647fe9c842cee768cef20c25ee603 100644
--- a/app/code/Magento/Cms/etc/frontend/events.xml
+++ b/app/code/Magento/Cms/etc/frontend/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="controller_action_noroute">
-        <observer name="cms" instance="Magento\Cms\Observer\NoRouteObserver" method="execute" />
+        <observer name="cms" instance="Magento\Cms\Observer\NoRouteObserver" />
     </event>
     <event name="controller_action_nocookies">
-        <observer name="cms" instance="Magento\Cms\Observer\NoCookiesObserver" method="execute" />
+        <observer name="cms" instance="Magento\Cms\Observer\NoCookiesObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Cms/view/adminhtml/templates/browser/content.phtml b/app/code/Magento/Cms/view/adminhtml/templates/browser/content.phtml
index 54f22698a0ffe64e9630ab42253d1bccd2a65290..d40b8445058cc689523ef8c9e41a6a41892c2bcd 100644
--- a/app/code/Magento/Cms/view/adminhtml/templates/browser/content.phtml
+++ b/app/code/Magento/Cms/view/adminhtml/templates/browser/content.phtml
@@ -20,7 +20,7 @@
                 <div class="title"><?php /* @escapeNotVerified */ echo $block->getHeaderText() ?></div>
             </div>
         </div>
-        <div id="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_images.uploader') ?></div>
+        <div id="contents-uploader" class="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_images.uploader') ?></div>
         <div id="contents"></div>
     </div>
 </div>
diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
index b00694b3d94fa66c478b62b5f8fb495615143bc8..6934d263535b59bde9a0a6c72ead01ec3dc0e0c0 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_block_listing.xml
@@ -48,17 +48,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">cms_block_listing</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -68,12 +64,10 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <filterSearch name="fulltext">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing_data_source</item>
                     <item name="chipsProvider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters_chips</item>
                     <item name="storageConfig" xsi:type="array">
@@ -86,8 +80,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -95,155 +88,28 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
             </argument>
-            <filterRange name="block_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">block_id</item>
-                        <item name="label" xsi:type="string" translate="true">ID</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterInput name="title">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">title</item>
-                        <item name="label" xsi:type="string" translate="true">Title</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="identifier">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">identifier</item>
-                        <item name="label" xsi:type="string" translate="true">Identifier</item>
-                    </item>
-                </argument>
-            </filterInput>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Cms\Ui\Component\Listing\Column\Cms\Options</argument>
                 </argument>
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
                         <item name="dataScope" xsi:type="string">store_id</item>
                         <item name="label" xsi:type="string" translate="true">Store View</item>
+                        <item name="captionValue" xsi:type="string">0</item>
                     </item>
                 </argument>
             </filterSelect>
-            <filterSelect name="is_active">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                        <item name="dataScope" xsi:type="string">is_active</item>
-                        <item name="options" xsi:type="array">
-                            <item name="disable" xsi:type="array">
-                                <item name="value" xsi:type="string">0</item>
-                                <item name="label" xsi:type="string" translate="true">Disabled</item>
-                            </item>
-                            <item name="enable" xsi:type="array">
-                                <item name="value" xsi:type="string">1</item>
-                                <item name="label" xsi:type="string" translate="true">Enabled</item>
-                            </item>
-                        </item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterRange name="creation_time"  class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">creation_time</item>
-                        <item name="label" xsi:type="string" translate="true">Created</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterRange name="update_time" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">update_time</item>
-                        <item name="label" xsi:type="string" translate="true">Modified</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">block_id</item>
                 </item>
             </argument>
@@ -281,7 +147,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">cms_block_listing.cms_block_listing.cms_block_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -298,8 +163,7 @@
                     <item name="enabled" xsi:type="boolean">true</item>
                     <item name="indexField" xsi:type="string">block_id</item>
                     <item name="clientConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="string">cms/block/inlineEdit</item>
-                        <item name="validateUrl" xsi:type="string">/path/to</item>
+                        <item name="saveUrl" xsi:type="url" path="cms/block/inlineEdit"/>
                         <item name="validateBeforeSave" xsi:type="boolean">false</item>
                     </item>
                 </item>
@@ -312,7 +176,6 @@
                             <item name="1" xsi:type="boolean">true</item>
                         </item>
                     </item>
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_block_listing.cms_block_listing.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -321,35 +184,24 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">block_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="block_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
             </argument>
         </column>
         <column name="title">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="array">
                         <item name="editorType" xsi:type="string">text</item>
@@ -357,17 +209,13 @@
                             <item name="required-entry" xsi:type="boolean">true</item>
                         </item>
                     </item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Title</item>
                 </item>
             </argument>
         </column>
         <column name="identifier">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="editor" xsi:type="array">
                         <item name="editorType" xsi:type="string">text</item>
@@ -376,31 +224,22 @@
                             <item name="required-entry" xsi:type="boolean">true</item>
                         </item>
                     </item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Identifier</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Store View</item>
                 </item>
             </argument>
         </column>
         <column name="is_active">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="options" xsi:type="array">
                     <item name="disable" xsi:type="array">
                         <item name="value" xsi:type="string">0</item>
@@ -412,50 +251,40 @@
                     </item>
                 </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="creation_time">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Created</item>
                 </item>
             </argument>
         </column>
         <column name="update_time">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Modified</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Cms\Ui\Component\Listing\Column\BlockActions">
+        <actionsColumn name="actions" class="Magento\Cms\Ui\Component\Listing\Column\BlockActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">block_id</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
index fbef0a00a3a17c807e992660d5fcb5ec4a046093..c55c919be2164d32927ef1dce7d2933fcfb178da 100644
--- a/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
+++ b/app/code/Magento/Cms/view/adminhtml/ui_component/cms_page_listing.xml
@@ -49,17 +49,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">cms_page_listing</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -69,12 +65,10 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <filterSearch name="fulltext">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing_data_source</item>
                     <item name="chipsProvider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters_chips</item>
                     <item name="storageConfig" xsi:type="array">
@@ -87,8 +81,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -96,56 +89,14 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
+                <item name="observers" xsi:type="array">
+                    <item name="column" xsi:type="string">column</item>
+                </item>
             </argument>
-            <filterRange name="page_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">page_id</item>
-                        <item name="label" xsi:type="string" translate="true">ID</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterInput name="title">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">title</item>
-                        <item name="label" xsi:type="string" translate="true">Title</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="identifier">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">identifier</item>
-                        <item name="label" xsi:type="string" translate="true">URL Key</item>
-                    </item>
-                </argument>
-            </filterInput>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Cms\Ui\Component\Listing\Column\Cms\Options</argument>
@@ -153,207 +104,8 @@
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
                         <item name="dataScope" xsi:type="string">store_id</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
                         <item name="label" xsi:type="string" translate="true">Store View</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="is_active">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_active</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                        <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
-                        <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item>
-                        <item name="options" xsi:type="array">
-                            <item name="disable" xsi:type="array">
-                                <item name="value" xsi:type="string">0</item>
-                                <item name="label" xsi:type="string" translate="true">Disabled</item>
-                            </item>
-                            <item name="enable" xsi:type="array">
-                                <item name="value" xsi:type="string">1</item>
-                                <item name="label" xsi:type="string" translate="true">Published</item>
-                            </item>
-                        </item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterRange name="creation_time" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">creation_time</item>
-                        <item name="label" xsi:type="string" translate="true">Created</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterRange name="update_time" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">update_time</item>
-                        <item name="label" xsi:type="string" translate="true">Modified</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterRange name="custom_theme_from" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">custom_theme_from</item>
-                        <item name="label" xsi:type="string" translate="true">Custom design from</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterRange name="custom_theme_to" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">custom_theme_to</item>
-                        <item name="label" xsi:type="string" translate="true">Custom design to</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterSelect name="custom_theme">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Cms\Model\Page\Source\Theme</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">custom_theme</item>
-                        <item name="label" xsi:type="string" translate="true">Custom Theme</item>
-                        <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
-                        <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="custom_root_template">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Cms\Model\Page\Source\PageLayout</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">custom_root_template</item>
-                        <item name="label" xsi:type="string" translate="true">Custom Layout</item>
-                        <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
-                        <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="meta_keywords">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">meta_keywords</item>
-                        <item name="label" xsi:type="string" translate="true">Meta Keywords</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="meta_description">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">meta_description</item>
-                        <item name="label" xsi:type="string" translate="true">Meta Description</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="page_layout">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Cms\Model\Page\Source\PageLayout</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="component" xsi:type="string">Magento_Ui/js/form/element/ui-select</item>
-                        <item name="template" xsi:type="string">ui/grid/filters/elements/ui-select</item>
-                        <item name="dataScope" xsi:type="string">page_layout</item>
-                        <item name="label" xsi:type="string" translate="true">Layout</item>
+                        <item name="captionValue" xsi:type="string">0</item>
                     </item>
                 </argument>
             </filterSelect>
@@ -362,7 +114,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">page_id</item>
                 </item>
             </argument>
@@ -418,7 +169,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">cms_page_listing.cms_page_listing.cms_page_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -435,8 +185,7 @@
                     <item name="enabled" xsi:type="boolean">true</item>
                     <item name="indexField" xsi:type="string">page_id</item>
                     <item name="clientConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="string">cms/page/inlineEdit</item>
-                        <item name="validateUrl" xsi:type="string">/path/to</item>
+                        <item name="saveUrl" xsi:type="url" path="cms/page/inlineEdit"/>
                         <item name="validateBeforeSave" xsi:type="boolean">false</item>
                     </item>
                 </item>
@@ -449,7 +198,6 @@
                             <item name="1" xsi:type="boolean">true</item>
                         </item>
                     </item>
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">cms_page_listing.cms_page_listing.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -458,65 +206,48 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="resizeEnabled" xsi:type="boolean">false</item>
                     <item name="resizeDefaultWidth" xsi:type="string">55</item>
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">page_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="page_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
             </argument>
         </column>
         <column name="title">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="array">
                         <item name="editorType" xsi:type="string">text</item>
                         <item name="validation" xsi:type="array">
                             <item name="required-entry" xsi:type="boolean">true</item>
                         </item>
                     </item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Title</item>
                 </item>
             </argument>
         </column>
         <column name="identifier">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="array">
                         <item name="editorType" xsi:type="string">text</item>
                         <item name="validation" xsi:type="array">
                             <item name="validate-identifier" xsi:type="boolean">true</item>
                         </item>
                     </item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">URL Key</item>
                 </item>
             </argument>
@@ -524,27 +255,20 @@
         <column name="page_layout">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\PageLayout</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Layout</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Store View</item>
                 </item>
             </argument>
@@ -552,50 +276,42 @@
         <column name="is_active">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\IsActive</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="creation_time">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Created</item>
                 </item>
             </argument>
         </column>
         <column name="update_time">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Modified</item>
                 </item>
             </argument>
         </column>
         <column name="custom_theme_from">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="editor" xsi:type="string">date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Custom design from</item>
                     <item name="dateFormat" xsi:type="string">MMM d, y</item>
                     <item name="visible" xsi:type="boolean">false</item>
@@ -604,13 +320,11 @@
         </column>
         <column name="custom_theme_to">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="editor" xsi:type="string">date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Custom design to</item>
                     <item name="dateFormat" xsi:type="string">MMM d, y</item>
                     <item name="visible" xsi:type="boolean">false</item>
@@ -620,13 +334,11 @@
         <column name="custom_theme">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\Theme</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Custom Theme</item>
                     <item name="visible" xsi:type="boolean">false</item>
                 </item>
@@ -635,13 +347,11 @@
         <column name="custom_root_template">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Cms\Model\Page\Source\PageLayout</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Custom Layout</item>
                     <item name="visible" xsi:type="boolean">false</item>
                 </item>
@@ -649,13 +359,9 @@
         </column>
         <column name="meta_keywords">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Meta Keywords</item>
                     <item name="visible" xsi:type="boolean">false</item>
                 </item>
@@ -663,35 +369,23 @@
         </column>
         <column name="meta_description">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Meta Description</item>
                     <item name="visible" xsi:type="boolean">false</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Cms\Ui\Component\Listing\Column\PageActions">
+        <actionsColumn name="actions" class="Magento\Cms\Ui\Component\Listing\Column\PageActions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="resizeEnabled" xsi:type="boolean">false</item>
                     <item name="resizeDefaultWidth" xsi:type="string">107</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">page_id</item>
-                    <item name="blockVisibility" xsi:type="boolean">true</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
     <container name="sticky">
         <argument name="data" xsi:type="array">
diff --git a/app/code/Magento/CmsUrlRewrite/Plugin/Cms/Model/Resource/Page.php b/app/code/Magento/CmsUrlRewrite/Plugin/Cms/Model/ResourceModel/Page.php
similarity index 86%
rename from app/code/Magento/CmsUrlRewrite/Plugin/Cms/Model/Resource/Page.php
rename to app/code/Magento/CmsUrlRewrite/Plugin/Cms/Model/ResourceModel/Page.php
index ba342b2e1e0694782d1ee16359f19c3cdcb688be..4757c950a08704be0dceb27cd7fc89cdc2a5516d 100644
--- a/app/code/Magento/CmsUrlRewrite/Plugin/Cms/Model/Resource/Page.php
+++ b/app/code/Magento/CmsUrlRewrite/Plugin/Cms/Model/ResourceModel/Page.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CmsUrlRewrite\Plugin\Cms\Model\Resource;
+namespace Magento\CmsUrlRewrite\Plugin\Cms\Model\ResourceModel;
 
 use Magento\UrlRewrite\Model\UrlPersistInterface;
 use Magento\CmsUrlRewrite\Model\CmsPageUrlPathGenerator;
@@ -11,7 +11,7 @@ use Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator;
 use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
 
 /**
- * Before save and around delete plugin for \Magento\Cms\Model\Resource\Page:
+ * Before save and around delete plugin for \Magento\Cms\Model\ResourceModel\Page:
  * - autogenerates url_key if the merchant didn't fill this field
  * - remove all url rewrites for cms page on delete
  */
@@ -42,14 +42,14 @@ class Page
     /**
      * Before save handler
      *
-     * @param \Magento\Cms\Model\Resource\Page $subject
+     * @param \Magento\Cms\Model\ResourceModel\Page $subject
      * @param \Magento\Framework\Model\AbstractModel $object
      *
      * @return void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function beforeSave(
-        \Magento\Cms\Model\Resource\Page $subject,
+        \Magento\Cms\Model\ResourceModel\Page $subject,
         \Magento\Framework\Model\AbstractModel $object
     ) {
         /** @var $object \Magento\Cms\Model\Page */
@@ -62,15 +62,15 @@ class Page
     /**
      * On delete handler to remove related url rewrites
      *
-     * @param \Magento\Cms\Model\Resource\Page $subject
+     * @param \Magento\Cms\Model\ResourceModel\Page $subject
      * @param \Closure $proceed
      * @param \Magento\Framework\Model\AbstractModel $page
-     * @return \Magento\Cms\Model\Resource\Page
+     * @return \Magento\Cms\Model\ResourceModel\Page
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundDelete(
-        \Magento\Cms\Model\Resource\Page $subject,
+        \Magento\Cms\Model\ResourceModel\Page $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $page
     ) {
diff --git a/app/code/Magento/CmsUrlRewrite/Test/Unit/Plugin/Cms/Model/Resource/PageTest.php b/app/code/Magento/CmsUrlRewrite/Test/Unit/Plugin/Cms/Model/ResourceModel/PageTest.php
similarity index 91%
rename from app/code/Magento/CmsUrlRewrite/Test/Unit/Plugin/Cms/Model/Resource/PageTest.php
rename to app/code/Magento/CmsUrlRewrite/Test/Unit/Plugin/Cms/Model/ResourceModel/PageTest.php
index 0b2a082ef37e16c9d84990c0744f25c52b86dfe9..046830788104336ff20df21a8c014ff04a43bc50 100644
--- a/app/code/Magento/CmsUrlRewrite/Test/Unit/Plugin/Cms/Model/Resource/PageTest.php
+++ b/app/code/Magento/CmsUrlRewrite/Test/Unit/Plugin/Cms/Model/ResourceModel/PageTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CmsUrlRewrite\Test\Unit\Plugin\Cms\Model\Resource;
+namespace Magento\CmsUrlRewrite\Test\Unit\Plugin\Cms\Model\ResourceModel;
 
 use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
 use Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator;
@@ -11,7 +11,7 @@ use Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator;
 class PageTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\CmsUrlRewrite\Plugin\Cms\Model\Resource\Page
+     * @var \Magento\CmsUrlRewrite\Plugin\Cms\Model\ResourceModel\Page
      */
     protected $pageObject;
 
@@ -26,7 +26,7 @@ class PageTest extends \PHPUnit_Framework_TestCase
     protected $cmsPageMock;
 
     /**
-     * @var \Magento\Cms\Model\Resource\Page|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Cms\Model\ResourceModel\Page|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $cmsPageResourceMock;
 
@@ -50,12 +50,12 @@ class PageTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->cmsPageResourceMock = $this->getMockBuilder('Magento\Cms\Model\Resource\Page')
+        $this->cmsPageResourceMock = $this->getMockBuilder('Magento\Cms\Model\ResourceModel\Page')
             ->disableOriginalConstructor()
             ->getMock();
 
         $this->pageObject = $objectManager->getObject(
-            'Magento\CmsUrlRewrite\Plugin\Cms\Model\Resource\Page',
+            'Magento\CmsUrlRewrite\Plugin\Cms\Model\ResourceModel\Page',
             [
                 'urlPersist' => $this->urlPersistMock
             ]
diff --git a/app/code/Magento/CmsUrlRewrite/etc/adminhtml/di.xml b/app/code/Magento/CmsUrlRewrite/etc/adminhtml/di.xml
index 3466b36a83d72047fd340e73cd6cf9ea9ba9e10c..db295b46b6923da30f5448d1ac4d0c24844ddc5e 100644
--- a/app/code/Magento/CmsUrlRewrite/etc/adminhtml/di.xml
+++ b/app/code/Magento/CmsUrlRewrite/etc/adminhtml/di.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
-    <type name="Magento\Cms\Model\Resource\Page">
-        <plugin name="cms_url_rewrite_plugin" type="Magento\CmsUrlRewrite\Plugin\Cms\Model\Resource\Page"/>
+    <type name="Magento\Cms\Model\ResourceModel\Page">
+        <plugin name="cms_url_rewrite_plugin" type="Magento\CmsUrlRewrite\Plugin\Cms\Model\ResourceModel\Page"/>
     </type>
 </config>
diff --git a/app/code/Magento/CmsUrlRewrite/etc/adminhtml/events.xml b/app/code/Magento/CmsUrlRewrite/etc/adminhtml/events.xml
index 28f880fa12595f4fb65c2dfd4795d90989b92dbf..eb6c3bf239d41253413036e2f026354f7907fb9b 100644
--- a/app/code/Magento/CmsUrlRewrite/etc/adminhtml/events.xml
+++ b/app/code/Magento/CmsUrlRewrite/etc/adminhtml/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="cms_page_save_after">
-        <observer name="process_url_rewrite_saving" instance="Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver" method="execute" />
+        <observer name="process_url_rewrite_saving" instance="Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/CmsUrlRewrite/etc/setup/events.xml b/app/code/Magento/CmsUrlRewrite/etc/setup/events.xml
index 28f880fa12595f4fb65c2dfd4795d90989b92dbf..eb6c3bf239d41253413036e2f026354f7907fb9b 100644
--- a/app/code/Magento/CmsUrlRewrite/etc/setup/events.xml
+++ b/app/code/Magento/CmsUrlRewrite/etc/setup/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="cms_page_save_after">
-        <observer name="process_url_rewrite_saving" instance="Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver" method="execute" />
+        <observer name="process_url_rewrite_saving" instance="Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php
index 21549a5862ae9420010f50d906cf26d9029cccf7..bdb08b0f04b2a12cf29790028a9ef313ca107c92 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Custom.php
@@ -59,7 +59,7 @@ class Custom extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\Storage\WriterInterface $configWriter
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -68,7 +68,7 @@ class Custom extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\Storage\WriterInterface $configWriter,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php
index 4ff70c1b8c35b0381bfad23fcce200a71dc8d2bd..50478bfb7b8ef92f17650328881fe12422aefe73 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Robots.php
@@ -28,7 +28,7 @@ class Robots extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Filesystem $filesystem
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -37,7 +37,7 @@ class Robots extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Filesystem $filesystem,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php
index 8479a0433f5cc9c0400f40d43349daf62edeb42b..ff429986e3afd735f1801ccc88384124ff998f3b 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Usecustom.php
@@ -23,7 +23,7 @@ class Usecustom extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\Storage\WriterInterface $configWriter
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Usecustom extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\Storage\WriterInterface $configWriter,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php b/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php
index 806445b166791f2993739e7cb793483420fcff53..3f77e3b07d1768fb90c10926be824a9e7ed3defe 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Admin/Usesecretkey.php
@@ -21,7 +21,7 @@ class Usesecretkey extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Backend\Model\UrlInterface $backendUrl
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -30,7 +30,7 @@ class Usesecretkey extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Backend\Model\UrlInterface $backendUrl,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Baseurl.php b/app/code/Magento/Config/Model/Config/Backend/Baseurl.php
index aa8bb94c54e137b54f3e36507750072de9819dc8..30e63b7d2bee2e1489a8793e559a9121884c5e09 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Baseurl.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Baseurl.php
@@ -17,7 +17,7 @@ class Baseurl extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\View\Asset\MergeService $mergeService
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -26,7 +26,7 @@ class Baseurl extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\View\Asset\MergeService $mergeService,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php b/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php
index cc9f548670eb92b90592b4cb0b598fe90f85faaf..3daccc80463256313a6861a926267720752dd20c 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/AbstractCurrency.php
@@ -29,7 +29,7 @@ abstract class AbstractCurrency extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -38,7 +38,7 @@ abstract class AbstractCurrency extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php
index f277f3ae33e53a3985ea24c8c34daae856758f9a..cd9a7e643d30918179adb758cd8aba11c1a2b475 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Allow.php
@@ -23,7 +23,7 @@ class Allow extends AbstractCurrency
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\Locale\CurrencyInterface $localeCurrency
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -33,7 +33,7 @@ class Allow extends AbstractCurrency
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\Locale\CurrencyInterface $localeCurrency,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php
index 2ab2b63e5ff629b0cec38313f91df81a13b9fb5a..45470cc06a2a2c1ffe34519cd00ac79fa644b7aa 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Base.php
@@ -21,7 +21,7 @@ class Base extends AbstractCurrency
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -31,7 +31,7 @@ class Base extends AbstractCurrency
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php b/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php
index e484afe0c421f74e70618587345496a8e2aa6ba3..c88d752c82f196b2dce920564343209b7a03c397 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Currency/Cron.php
@@ -22,7 +22,7 @@ class Cron extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -31,7 +31,7 @@ class Cron extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Encrypted.php b/app/code/Magento/Config/Model/Config/Backend/Encrypted.php
index 932a1aa0d2772b4c821d909a5aeac0aa170f50e7..71aa76e17b5c90b902e8b8bd6c3029ca65dcf30f 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Encrypted.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Encrypted.php
@@ -23,7 +23,7 @@ class Encrypted extends \Magento\Framework\App\Config\Value implements
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Encrypted extends \Magento\Framework\App\Config\Value implements
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/File.php b/app/code/Magento/Config/Model/Config/Backend/File.php
index 1d9e16a47cddb76c9d5808f8d80846497a6ffae2..8925877efcb03a162d21b0a625bb75b09bfad6da 100644
--- a/app/code/Magento/Config/Model/Config/Backend/File.php
+++ b/app/code/Magento/Config/Model/Config/Backend/File.php
@@ -50,7 +50,7 @@ class File extends \Magento\Framework\App\Config\Value
      * @param \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory
      * @param \Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface $requestData
      * @param Filesystem $filesystem
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -61,7 +61,7 @@ class File extends \Magento\Framework\App\Config\Value
         \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory,
         \Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface $requestData,
         Filesystem $filesystem,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php b/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php
index 7e8e88e4613a97961ea63cdd55719f85cfed8a82..a8c3fa288623eff7814c90d1737151f49f5ce839 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Image/Adapter.php
@@ -23,7 +23,7 @@ class Adapter extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Image\AdapterFactory $imageFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Adapter extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Image\AdapterFactory $imageFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Locale.php b/app/code/Magento/Config/Model/Config/Backend/Locale.php
index 334a9f3e51c8715a405884c61bd8d42d4d3bbacd..c6cec53f26a2f4525d6bfd8c1b24d8248e9c6111 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Locale.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Locale.php
@@ -14,7 +14,7 @@ use Magento\Framework\App\Config\ScopeConfigInterface;
 class Locale extends \Magento\Framework\App\Config\Value
 {
     /**
-     * @var \Magento\Config\Model\Resource\Config\Data\CollectionFactory
+     * @var \Magento\Config\Model\ResourceModel\Config\Data\CollectionFactory
      */
     protected $_configsFactory;
 
@@ -37,11 +37,11 @@ class Locale extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Config\Model\Resource\Config\Data\CollectionFactory $configsFactory
+     * @param \Magento\Config\Model\ResourceModel\Config\Data\CollectionFactory $configsFactory
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
      * @param \Magento\Store\Model\StoreFactory $storeFactory
      * @param \Magento\Framework\Locale\CurrencyInterface $localeCurrency
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      *
@@ -51,11 +51,11 @@ class Locale extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
-        \Magento\Config\Model\Resource\Config\Data\CollectionFactory $configsFactory,
+        \Magento\Config\Model\ResourceModel\Config\Data\CollectionFactory $configsFactory,
         \Magento\Store\Model\WebsiteFactory $websiteFactory,
         \Magento\Store\Model\StoreFactory $storeFactory,
         \Magento\Framework\Locale\CurrencyInterface $localeCurrency,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -72,7 +72,7 @@ class Locale extends \Magento\Framework\App\Config\Value
      */
     public function afterSave()
     {
-        /** @var $collection \Magento\Config\Model\Resource\Config\Data\Collection */
+        /** @var $collection \Magento\Config\Model\ResourceModel\Config\Data\Collection */
         $collection = $this->_configsFactory->create();
         $collection->addPathFilter('currency/options');
 
diff --git a/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php b/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php
index 8c9e76de4710e6198a266dc9d86ecdb1be2f9b79..61695bcf7421e1354aff23bf28f1aa1f1242716b 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Log/Cron.php
@@ -30,7 +30,7 @@ class Cron extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param string $runModelPath
      * @param array $data
@@ -40,7 +40,7 @@ class Cron extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         $runModelPath = '',
         array $data = []
diff --git a/app/code/Magento/Config/Model/Config/Backend/Secure.php b/app/code/Magento/Config/Model/Config/Backend/Secure.php
index 85e556bac9345dd07c4a355f74879953f7950dee..ef41a60fe4e562cd012d9676cab78b486251ce97 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Secure.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Secure.php
@@ -16,7 +16,7 @@ class Secure extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\View\Asset\MergeService $mergeService
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -25,7 +25,7 @@ class Secure extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\View\Asset\MergeService $mergeService,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Store.php b/app/code/Magento/Config/Model/Config/Backend/Store.php
index 0efe327b7cf35c370541959a323b66f6f5b3962c..69e629569157ab5adcaa6a272b94c19b65aba653 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Store.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Store.php
@@ -21,7 +21,7 @@ class Store extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\MutableScopeConfigInterface $mutableConfig
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -30,7 +30,7 @@ class Store extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\MutableScopeConfigInterface $mutableConfig,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Backend/Translate.php b/app/code/Magento/Config/Model/Config/Backend/Translate.php
index 04b9f7a3a688dee96fda1a09a7fe0507450788ee..28b908668f709afe4ed825b5adc1aae4f2ab19b9 100644
--- a/app/code/Magento/Config/Model/Config/Backend/Translate.php
+++ b/app/code/Magento/Config/Model/Config/Backend/Translate.php
@@ -38,7 +38,7 @@ class Translate extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -48,7 +48,7 @@ class Translate extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Config/Model/Config/Source/Dev/Dbautoup.php b/app/code/Magento/Config/Model/Config/Source/Dev/Dbautoup.php
index 1273b7cd6a1aac07496162772a4ccca955210e81..8d4cd6301363feeed85d2996cea54699f5889a28 100644
--- a/app/code/Magento/Config/Model/Config/Source/Dev/Dbautoup.php
+++ b/app/code/Magento/Config/Model/Config/Source/Dev/Dbautoup.php
@@ -16,9 +16,9 @@ class Dbautoup implements \Magento\Framework\Option\ArrayInterface
     public function toOptionArray()
     {
         return [
-            ['value' => \Magento\Framework\App\Resource::AUTO_UPDATE_ALWAYS, 'label' => __('Always (during development)')],
-            ['value' => \Magento\Framework\App\Resource::AUTO_UPDATE_ONCE, 'label' => __('Only Once (version upgrade)')],
-            ['value' => \Magento\Framework\App\Resource::AUTO_UPDATE_NEVER, 'label' => __('Never (production)')]
+            ['value' => \Magento\Framework\App\ResourceConnection::AUTO_UPDATE_ALWAYS, 'label' => __('Always (during development)')],
+            ['value' => \Magento\Framework\App\ResourceConnection::AUTO_UPDATE_ONCE, 'label' => __('Only Once (version upgrade)')],
+            ['value' => \Magento\Framework\App\ResourceConnection::AUTO_UPDATE_NEVER, 'label' => __('Never (production)')]
         ];
     }
 }
diff --git a/app/code/Magento/Config/Model/Config/Source/Email/Template.php b/app/code/Magento/Config/Model/Config/Source/Email/Template.php
index 4a4107cdc11ef47e421cb602b68f632f63ce981f..f7ad63c29ddad888a5730a7a01aab2b511b7933b 100644
--- a/app/code/Magento/Config/Model/Config/Source/Email/Template.php
+++ b/app/code/Magento/Config/Model/Config/Source/Email/Template.php
@@ -18,19 +18,19 @@ class Template extends \Magento\Framework\DataObject implements \Magento\Framewo
     private $_emailConfig;
 
     /**
-     * @var \Magento\Email\Model\Resource\Template\CollectionFactory
+     * @var \Magento\Email\Model\ResourceModel\Template\CollectionFactory
      */
     protected $_templatesFactory;
 
     /**
      * @param \Magento\Framework\Registry $coreRegistry
-     * @param \Magento\Email\Model\Resource\Template\CollectionFactory $templatesFactory
+     * @param \Magento\Email\Model\ResourceModel\Template\CollectionFactory $templatesFactory
      * @param \Magento\Email\Model\Template\Config $emailConfig
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Registry $coreRegistry,
-        \Magento\Email\Model\Resource\Template\CollectionFactory $templatesFactory,
+        \Magento\Email\Model\ResourceModel\Template\CollectionFactory $templatesFactory,
         \Magento\Email\Model\Template\Config $emailConfig,
         array $data = []
     ) {
@@ -47,7 +47,7 @@ class Template extends \Magento\Framework\DataObject implements \Magento\Framewo
      */
     public function toOptionArray()
     {
-        /** @var $collection \Magento\Email\Model\Resource\Template\Collection */
+        /** @var $collection \Magento\Email\Model\ResourceModel\Template\Collection */
         if (!($collection = $this->_coreRegistry->registry('config_system_email_template'))) {
             $collection = $this->_templatesFactory->create();
             $collection->load();
diff --git a/app/code/Magento/Config/Model/Config/Source/Store.php b/app/code/Magento/Config/Model/Config/Source/Store.php
index 6a013351cd52bf6c7c7f2e8f06b971e5a1993431..0aa70d804f6f2db878390c3abf0b42bc2365e1b7 100644
--- a/app/code/Magento/Config/Model/Config/Source/Store.php
+++ b/app/code/Magento/Config/Model/Config/Source/Store.php
@@ -13,14 +13,14 @@ class Store implements \Magento\Framework\Option\ArrayInterface
     protected $_options;
 
     /**
-     * @var \Magento\Store\Model\Resource\Store\CollectionFactory
+     * @var \Magento\Store\Model\ResourceModel\Store\CollectionFactory
      */
     protected $_storesFactory;
 
     /**
-     * @param \Magento\Store\Model\Resource\Store\CollectionFactory $storesFactory
+     * @param \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storesFactory
      */
-    public function __construct(\Magento\Store\Model\Resource\Store\CollectionFactory $storesFactory)
+    public function __construct(\Magento\Store\Model\ResourceModel\Store\CollectionFactory $storesFactory)
     {
         $this->_storesFactory = $storesFactory;
     }
@@ -31,7 +31,7 @@ class Store implements \Magento\Framework\Option\ArrayInterface
     public function toOptionArray()
     {
         if (!$this->_options) {
-            /** @var $stores \Magento\Store\Model\Resource\Store\Collection */
+            /** @var $stores \Magento\Store\Model\ResourceModel\Store\Collection */
             $stores = $this->_storesFactory->create();
             $this->_options = $stores->load()->toOptionArray();
         }
diff --git a/app/code/Magento/Config/Model/Config/Structure/AbstractElement.php b/app/code/Magento/Config/Model/Config/Structure/AbstractElement.php
index 03ed66f29abec3ebd79735f648aefcd633dc44cc..073d23f450a795d81231a4268bc3dece788a784f 100644
--- a/app/code/Magento/Config/Model/Config/Structure/AbstractElement.php
+++ b/app/code/Magento/Config/Model/Config/Structure/AbstractElement.php
@@ -31,12 +31,19 @@ abstract class AbstractElement implements ElementInterface
      */
     protected $_storeManager;
 
+    /**
+     * @var \Magento\Framework\Module\Manager
+     */
+    protected $moduleManager;
+
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
+     * @param \Magento\Framework\Module\Manager $moduleManager
      */
-    public function __construct(StoreManagerInterface $storeManager)
+    public function __construct(StoreManagerInterface $storeManager, \Magento\Framework\Module\Manager $moduleManager)
     {
         $this->_storeManager = $storeManager;
+        $this->moduleManager = $moduleManager;
     }
 
     /**
@@ -134,6 +141,10 @@ abstract class AbstractElement implements ElementInterface
      */
     public function isVisible()
     {
+        if (isset($this->_data['if_module_enabled']) &&
+            !$this->moduleManager->isOutputEnabled($this->_data['if_module_enabled'])) {
+            return false;
+        }
         $showInScope = [
             \Magento\Store\Model\ScopeInterface::SCOPE_STORE => $this->_hasVisibilityValue('showInStore'),
             \Magento\Store\Model\ScopeInterface::SCOPE_WEBSITE => $this->_hasVisibilityValue('showInWebsite'),
diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/AbstractComposite.php b/app/code/Magento/Config/Model/Config/Structure/Element/AbstractComposite.php
index a25b1688eea4e08951ea0d082f3d1de0572bd16d..d3707277d55951867088dcda4e96f73b2c3b643e 100644
--- a/app/code/Magento/Config/Model/Config/Structure/Element/AbstractComposite.php
+++ b/app/code/Magento/Config/Model/Config/Structure/Element/AbstractComposite.php
@@ -16,13 +16,15 @@ abstract class AbstractComposite extends \Magento\Config\Model\Config\Structure\
 
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
+     * @param \Magento\Framework\Module\Manager $moduleManager
      * @param Iterator $childrenIterator
      */
     public function __construct(
         \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \Magento\Framework\Module\Manager $moduleManager,
         Iterator $childrenIterator
     ) {
-        parent::__construct($storeManager);
+        parent::__construct($storeManager, $moduleManager);
         $this->_childrenIterator = $childrenIterator;
     }
 
diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/Field.php b/app/code/Magento/Config/Model/Config/Structure/Element/Field.php
index 5d7d5d1e329a1e58dae95a030c1041d9de3b4c8a..8f218a34f02296157738514729562ede40cf32b8 100644
--- a/app/code/Magento/Config/Model/Config/Structure/Element/Field.php
+++ b/app/code/Magento/Config/Model/Config/Structure/Element/Field.php
@@ -50,21 +50,23 @@ class Field extends \Magento\Config\Model\Config\Structure\AbstractElement
 
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
+     * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Config\Model\Config\BackendFactory $backendFactory
      * @param \Magento\Config\Model\Config\SourceFactory $sourceFactory
      * @param \Magento\Config\Model\Config\CommentFactory $commentFactory
      * @param \Magento\Framework\View\Element\BlockFactory $blockFactory
-     * @param \Magento\Config\Model\Config\Structure\Element\Dependency\Mapper $dependencyMapper
+     * @param Dependency\Mapper $dependencyMapper
      */
     public function __construct(
         \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Config\Model\Config\BackendFactory $backendFactory,
         \Magento\Config\Model\Config\SourceFactory $sourceFactory,
         \Magento\Config\Model\Config\CommentFactory $commentFactory,
         \Magento\Framework\View\Element\BlockFactory $blockFactory,
         \Magento\Config\Model\Config\Structure\Element\Dependency\Mapper $dependencyMapper
     ) {
-        parent::__construct($storeManager);
+        parent::__construct($storeManager, $moduleManager);
         $this->_backendFactory = $backendFactory;
         $this->_sourceFactory = $sourceFactory;
         $this->_commentFactory = $commentFactory;
diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/Group.php b/app/code/Magento/Config/Model/Config/Structure/Element/Group.php
index 3c1028812a6bef52222847c912585dc141877257..7e523248c3e3fd0b78b572ed67e5301faea305bc 100644
--- a/app/code/Magento/Config/Model/Config/Structure/Element/Group.php
+++ b/app/code/Magento/Config/Model/Config/Structure/Element/Group.php
@@ -25,17 +25,19 @@ class Group extends AbstractComposite
 
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Config\Model\Config\Structure\Element\Iterator\Field $childrenIterator
+     * @param \Magento\Framework\Module\Manager $moduleManager
+     * @param Iterator\Field $childrenIterator
      * @param \Magento\Config\Model\Config\BackendClone\Factory $cloneModelFactory
-     * @param \Magento\Config\Model\Config\Structure\Element\Dependency\Mapper $dependencyMapper
+     * @param Dependency\Mapper $dependencyMapper
      */
     public function __construct(
         \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Config\Model\Config\Structure\Element\Iterator\Field $childrenIterator,
         \Magento\Config\Model\Config\BackendClone\Factory $cloneModelFactory,
         \Magento\Config\Model\Config\Structure\Element\Dependency\Mapper $dependencyMapper
     ) {
-        parent::__construct($storeManager, $childrenIterator);
+        parent::__construct($storeManager, $moduleManager, $childrenIterator);
         $this->_cloneModelFactory = $cloneModelFactory;
         $this->_dependencyMapper = $dependencyMapper;
     }
diff --git a/app/code/Magento/Config/Model/Config/Structure/Element/Section.php b/app/code/Magento/Config/Model/Config/Structure/Element/Section.php
index f8839b215d3dc014b4bee149098e82bfb889ef0f..46696967d31f1c0a11cea6a3fb1d4fde061ad8cd 100644
--- a/app/code/Magento/Config/Model/Config/Structure/Element/Section.php
+++ b/app/code/Magento/Config/Model/Config/Structure/Element/Section.php
@@ -16,15 +16,17 @@ class Section extends AbstractComposite
 
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
+     * @param \Magento\Framework\Module\Manager $moduleManager
      * @param Iterator $childrenIterator
      * @param \Magento\Framework\AuthorizationInterface $authorization
      */
     public function __construct(
         \Magento\Store\Model\StoreManagerInterface $storeManager,
+        \Magento\Framework\Module\Manager $moduleManager,
         Iterator $childrenIterator,
         \Magento\Framework\AuthorizationInterface $authorization
     ) {
-        parent::__construct($storeManager, $childrenIterator);
+        parent::__construct($storeManager, $moduleManager, $childrenIterator);
         $this->_authorization = $authorization;
     }
 
diff --git a/app/code/Magento/Config/Model/Resource/Config.php b/app/code/Magento/Config/Model/ResourceModel/Config.php
similarity index 90%
rename from app/code/Magento/Config/Model/Resource/Config.php
rename to app/code/Magento/Config/Model/ResourceModel/Config.php
index 7d1645cb927b265a4a8aee4a596f33939d5f4462..7f7ccfc88261b3341c57b1ede1606e9427480a70 100644
--- a/app/code/Magento/Config/Model/Resource/Config.php
+++ b/app/code/Magento/Config/Model/ResourceModel/Config.php
@@ -3,17 +3,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-
-// @codingStandardsIgnoreFile
-
-namespace Magento\Config\Model\Resource;
+namespace Magento\Config\Model\ResourceModel;
 
 /**
  * Core Resource Resource Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Config extends \Magento\Framework\Model\Resource\Db\AbstractDb implements \Magento\Framework\App\Config\Resource\ConfigInterface
+class Config extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements
+    \Magento\Framework\App\Config\ConfigResource\ConfigInterface
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Config/Model/Resource/Config/Data.php b/app/code/Magento/Config/Model/ResourceModel/Config/Data.php
similarity index 94%
rename from app/code/Magento/Config/Model/Resource/Config/Data.php
rename to app/code/Magento/Config/Model/ResourceModel/Config/Data.php
index 5a84507dedd1b30cdd3cbe00a48401bf00ca1e5f..fc7566af724ef9520c8c4df17e8ef5c627ee0956 100644
--- a/app/code/Magento/Config/Model/Resource/Config/Data.php
+++ b/app/code/Magento/Config/Model/ResourceModel/Config/Data.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Config\Model\Resource\Config;
+namespace Magento\Config\Model\ResourceModel\Config;
 
 /**
  * Core config data resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Data extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Data extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Config/Model/Resource/Config/Data/Collection.php b/app/code/Magento/Config/Model/ResourceModel/Config/Data/Collection.php
similarity index 86%
rename from app/code/Magento/Config/Model/Resource/Config/Data/Collection.php
rename to app/code/Magento/Config/Model/ResourceModel/Config/Data/Collection.php
index 7cec251d5fcfeb21470242504adfbbbede3bf261..a8eed0304cf707f71addc2c8eb69cbd250b2baf4 100644
--- a/app/code/Magento/Config/Model/Resource/Config/Data/Collection.php
+++ b/app/code/Magento/Config/Model/ResourceModel/Config/Data/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Config\Model\Resource\Config\Data;
+namespace Magento\Config\Model\ResourceModel\Config\Data;
 
 /**
  * Config data collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define resource model
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Framework\App\Config\Value', 'Magento\Config\Model\Resource\Config\Data');
+        $this->_init('Magento\Framework\App\Config\Value', 'Magento\Config\Model\ResourceModel\Config\Data');
     }
 
     /**
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/BaseurlTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/BaseurlTest.php
index d9bc25a401bee968b95d6ab8229a9df9c3135c29..38b195ac3363b5671c99cc718ce6c5fdfa739c5d 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/BaseurlTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/BaseurlTest.php
@@ -32,7 +32,7 @@ class BaseurlTest extends \PHPUnit_Framework_TestCase
             $actionValidatorMock
         );
 
-        $resource = $this->getMock('Magento\Config\Model\Resource\Config\Data', [], [], '', false);
+        $resource = $this->getMock('Magento\Config\Model\ResourceModel\Config\Data', [], [], '', false);
         $resource->expects($this->any())->method('addCommitCallback')->will($this->returnValue($resource));
         $resourceCollection = $this->getMockBuilder('Magento\Framework\Data\Collection\AbstractDb')
             ->disableOriginalConstructor()
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/EncryptedTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/EncryptedTest.php
index 884607629352b3c01131f127d5e43e9d0fcfa36a..ed284eb16dd41915ccc6bf2e1e15d44e4ac642b9 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/EncryptedTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/EncryptedTest.php
@@ -33,7 +33,7 @@ class EncryptedTest extends \PHPUnit_Framework_TestCase
             $this->returnValue($eventDispatcherMock)
         );
         $this->_resourceMock = $this->getMock(
-            'Magento\Framework\Model\Resource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             [
                 '_construct',
                 'getConnection',
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/SecureTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/SecureTest.php
index d1726eabc1f4ee54b96bdfaf828c7f9c38e05108..25280b8967d64b54bba166fac989e9afe0602734 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Backend/SecureTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Backend/SecureTest.php
@@ -28,7 +28,7 @@ class SecureTest extends \PHPUnit_Framework_TestCase
             $actionValidatorMock
         );
 
-        $resource = $this->getMock('Magento\Config\Model\Resource\Config\Data', [], [], '', false);
+        $resource = $this->getMock('Magento\Config\Model\ResourceModel\Config\Data', [], [], '', false);
         $resource->expects($this->any())->method('addCommitCallback')->will($this->returnValue($resource));
         $resourceCollection = $this->getMockBuilder('Magento\Framework\Data\Collection\AbstractDb')
             ->disableOriginalConstructor()
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/LoaderTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/LoaderTest.php
index 5cb9fa68440bbba35100d21697b8f0b74800154b..bd007cb28d0509bfa42a9d758010f3afe6a3c1b6 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/LoaderTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/LoaderTest.php
@@ -34,7 +34,7 @@ class LoaderTest extends \PHPUnit_Framework_TestCase
         $this->_model = new \Magento\Config\Model\Config\Loader($this->_configValueFactory);
 
         $this->_configCollection = $this->getMock(
-            'Magento\Config\Model\Resource\Config\Data\Collection',
+            'Magento\Config\Model\ResourceModel\Config\Data\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Source/Email/TemplateTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Source/Email/TemplateTest.php
index 03dd7a71d0c22c9534beca8babb44334b0ce446b..8b638ab93cd2795c4abbcd0678a04003d4caafd0 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Source/Email/TemplateTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Source/Email/TemplateTest.php
@@ -26,7 +26,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
     protected $_emailConfig;
 
     /**
-     * @var \Magento\Email\Model\Resource\Email\Template\CollectionFactory
+     * @var \Magento\Email\Model\ResourceModel\Email\Template\CollectionFactory
      */
     protected $_templatesFactory;
 
@@ -35,7 +35,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
         $this->_coreRegistry = $this->getMock('Magento\Framework\Registry', [], [], '', false, false);
         $this->_emailConfig = $this->getMock('Magento\Email\Model\Template\Config', [], [], '', false);
         $this->_templatesFactory = $this->getMock(
-            'Magento\Email\Model\Resource\Template\CollectionFactory',
+            'Magento\Email\Model\ResourceModel\Template\CollectionFactory',
             [],
             [],
             '',
@@ -50,7 +50,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
 
     public function testToOptionArray()
     {
-        $collection = $this->getMock('Magento\Email\Model\Resource\Template\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Email\Model\ResourceModel\Template\Collection', [], [], '', false);
         $collection->expects(
             $this->once()
         )->method(
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/AbstractElementTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/AbstractElementTest.php
index 778141ab2132096aa8d0e750f7175bebdcea935b..90e0d13c3e60d1c688ffcdf4a152c8dba3c1439c 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/AbstractElementTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/AbstractElementTest.php
@@ -17,24 +17,33 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
      */
-    protected $_storeManager;
+    protected $storeManagerMock;
+
+    /**
+     * @var \Magento\Config\Model\Config\Structure\AbstractElement | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $moduleManagerMock;
 
     protected function setUp()
     {
-        $this->_storeManager = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
+        $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
+        $this->moduleManagerMock = $this->getMock(
+            'Magento\Framework\Module\Manager',
+            ['isOutputEnabled'],
+            [],
+            '',
+            false
+        );
 
         $this->_model = $this->getMockForAbstractClass(
             'Magento\Config\Model\Config\Structure\AbstractElement',
-            [$this->_storeManager]
+            [
+                'storeManager' => $this->storeManagerMock,
+                'moduleManager' => $this->moduleManagerMock,
+            ]
         );
     }
 
-    protected function tearDown()
-    {
-        unset($this->_model);
-        unset($this->_storeManager);
-    }
-
     public function testGetId()
     {
         $this->assertEquals('', $this->_model->getId());
@@ -76,7 +85,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
 
     public function testIsVisibleReturnsTrueInSingleStoreModeForNonHiddenElements()
     {
-        $this->_storeManager->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true));
+        $this->storeManagerMock->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true));
         $this->_model->setData(
             ['showInDefault' => 1, 'showInStore' => 0, 'showInWebsite' => 0],
             ScopeConfigInterface::SCOPE_TYPE_DEFAULT
@@ -86,7 +95,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
 
     public function testIsVisibleReturnsFalseInSingleStoreModeForHiddenElements()
     {
-        $this->_storeManager->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true));
+        $this->storeManagerMock->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true));
         $this->_model->setData(
             ['hide_in_single_store_mode' => 1, 'showInDefault' => 1, 'showInStore' => 0, 'showInWebsite' => 0],
             ScopeConfigInterface::SCOPE_TYPE_DEFAULT
@@ -99,7 +108,7 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
      */
     public function testIsVisibleReturnsFalseInSingleStoreModeForInvisibleElements()
     {
-        $this->_storeManager->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true));
+        $this->storeManagerMock->expects($this->once())->method('isSingleStoreMode')->will($this->returnValue(true));
         $this->_model->setData(
             ['showInDefault' => 0, 'showInStore' => 0, 'showInWebsite' => 0],
             ScopeConfigInterface::SCOPE_TYPE_DEFAULT
@@ -165,6 +174,25 @@ class AbstractElementTest extends \PHPUnit_Framework_TestCase
         ];
     }
 
+    public function testIsVisibleReturnFalseIfModuleNotEnabled()
+    {
+        $this->moduleManagerMock->expects($this->once())
+            ->method('isOutputEnabled')
+            ->with('test_module')
+            ->willReturn(false);
+        $this->_model->setData(
+            [
+                'showInDefault' => 1,
+                'showInStore' => 0,
+                'showInWebsite' => 0,
+                'if_module_enabled' => 'test_module',
+            ],
+            'default'
+        );
+        $this->assertFalse($this->_model->isVisible());
+
+    }
+
     public function testGetClass()
     {
         $this->assertEquals('', $this->_model->getClass());
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/AbstractCompositeTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/AbstractCompositeTest.php
index 08831a5a364b0f6d3ab9317461f73ca9bd339834..555e59eac7acb95674ebc045324459c7344b3330 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/AbstractCompositeTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/AbstractCompositeTest.php
@@ -22,6 +22,11 @@ class AbstractCompositeTest extends \PHPUnit_Framework_TestCase
      */
     protected $_iteratorMock;
 
+    /**
+     * @var \Magento\Framework\Module\Manager | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $moduleManagerMock;
+
     /**
      * Test element data
      *
@@ -44,10 +49,10 @@ class AbstractCompositeTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
-
+        $this->moduleManagerMock = $this->getMock('Magento\Framework\Module\Manager', [], [], '', false);
         $this->_model = $this->getMockForAbstractClass(
             'Magento\Config\Model\Config\Structure\Element\AbstractComposite',
-            [$this->_storeManagerMock, $this->_iteratorMock]
+            [$this->_storeManagerMock, $this->moduleManagerMock, $this->_iteratorMock]
         );
     }
 
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/FieldTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/FieldTest.php
index bd752f99703a90442d0627423802f7f2f041179b..b20518c411f9eead5bb8adc8de28e1e27da0abc3 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/FieldTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/FieldTest.php
@@ -10,6 +10,8 @@
 
 namespace Magento\Config\Test\Unit\Model\Config\Structure\Element;
 
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
 class FieldTest extends \PHPUnit_Framework_TestCase
 {
     const FIELD_TEST_CONSTANT = "field test constant";
@@ -19,11 +21,6 @@ class FieldTest extends \PHPUnit_Framework_TestCase
      */
     protected $_model;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_storeManagerMock;
-
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
      */
@@ -49,21 +46,10 @@ class FieldTest extends \PHPUnit_Framework_TestCase
      */
     protected $_depMapperMock;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_iteratorMock;
-
     protected function setUp()
     {
-        $this->_iteratorMock = $this->getMock(
-            'Magento\Config\Model\Config\Structure\Element\Iterator',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
+        $objectManager = new ObjectManager($this);
+
         $this->_backendFactoryMock = $this->getMock(
             'Magento\Config\Model\Config\BackendFactory',
             [],
@@ -100,20 +86,20 @@ class FieldTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->_model = new \Magento\Config\Model\Config\Structure\Element\Field(
-            $this->_storeManagerMock,
-            $this->_backendFactoryMock,
-            $this->_sourceFactoryMock,
-            $this->_commentFactoryMock,
-            $this->_blockFactoryMock,
-            $this->_depMapperMock
+        $this->_model = $objectManager->getObject(
+            'Magento\Config\Model\Config\Structure\Element\Field',
+            [
+                'backendFactory' => $this->_backendFactoryMock,
+                'sourceFactory' => $this->_sourceFactoryMock,
+                'commentFactory' => $this->_commentFactoryMock,
+                'blockFactory' => $this->_blockFactoryMock,
+                'dependencyMapper' => $this->_depMapperMock,
+            ]
         );
     }
 
     protected function tearDown()
     {
-        unset($this->_iteratorMock);
-        unset($this->_storeManagerMock);
         unset($this->_backendFactoryMock);
         unset($this->_sourceFactoryMock);
         unset($this->_commentFactoryMock);
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/GroupTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/GroupTest.php
index b92a76069ec3ec6396ff0e3c8ac58fd33fbea6b3..5490eaa0a07cb308c1df02e4751e346e840e4666 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/GroupTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/GroupTest.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Config\Test\Unit\Model\Config\Structure\Element;
 
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
 class GroupTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -12,21 +14,11 @@ class GroupTest extends \PHPUnit_Framework_TestCase
      */
     protected $_model;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_storeManagerMock;
-
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $_cloneFactoryMock;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_iteratorMock;
-
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
      */
@@ -34,14 +26,7 @@ class GroupTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_iteratorMock = $this->getMock(
-            'Magento\Config\Model\Config\Structure\Element\Iterator\Field',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
+        $objectManager = new ObjectManager($this);
         $this->_cloneFactoryMock = $this->getMock(
             'Magento\Config\Model\Config\BackendClone\Factory',
             [],
@@ -57,19 +42,18 @@ class GroupTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->_model = new \Magento\Config\Model\Config\Structure\Element\Group(
-            $this->_storeManagerMock,
-            $this->_iteratorMock,
-            $this->_cloneFactoryMock,
-            $this->_depMapperMock
+        $this->_model = $objectManager->getObject(
+            'Magento\Config\Model\Config\Structure\Element\Group',
+            [
+                'cloneModelFactory' => $this->_cloneFactoryMock,
+                'dependencyMapper' => $this->_depMapperMock,
+            ]
         );
     }
 
     protected function tearDown()
     {
         unset($this->_model);
-        unset($this->_iteratorMock);
-        unset($this->_storeManagerMock);
         unset($this->_cloneFactoryMock);
         unset($this->_depMapperMock);
     }
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/SectionTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/SectionTest.php
index 86812767f156adfaee9faddd74689b05bb31511f..a14a1e4ad22ba73fd3e0596838b1668dafa3b294 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/SectionTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/SectionTest.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Config\Test\Unit\Model\Config\Structure\Element;
 
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
 class SectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -22,34 +24,24 @@ class SectionTest extends \PHPUnit_Framework_TestCase
      */
     protected $_authorizationMock;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_iteratorMock;
-
     protected function setUp()
     {
-        $this->_iteratorMock = $this->getMock(
-            'Magento\Config\Model\Config\Structure\Element\Iterator\Field',
-            [],
-            [],
-            '',
-            false
-        );
+        $objectManager = new ObjectManager($this);
         $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
         $this->_authorizationMock = $this->getMock('Magento\Framework\AuthorizationInterface');
 
-        $this->_model = new \Magento\Config\Model\Config\Structure\Element\Section(
-            $this->_storeManagerMock,
-            $this->_iteratorMock,
-            $this->_authorizationMock
+        $this->_model = $objectManager->getObject(
+            'Magento\Config\Model\Config\Structure\Element\Section',
+            [
+                'storeManager' => $this->_storeManagerMock,
+                'authorization' => $this->_authorizationMock,
+            ]
         );
     }
 
     protected function tearDown()
     {
         unset($this->_model);
-        unset($this->_iteratorMock);
         unset($this->_storeManagerMock);
         unset($this->_authorizationMock);
     }
diff --git a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/TabTest.php b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/TabTest.php
index d8c9af76865c5c78f112c5fa8bae83b0a3812c16..248cc3c18ffb33654d534f6dc045587ec8c1cdc7 100644
--- a/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/TabTest.php
+++ b/app/code/Magento/Config/Test/Unit/Model/Config/Structure/Element/TabTest.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Config\Test\Unit\Model\Config\Structure\Element;
 
+use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
 class TabTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -12,11 +14,6 @@ class TabTest extends \PHPUnit_Framework_TestCase
      */
     protected $_model;
 
-    /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $_storeManagerMock;
-
     /**
      * @var \PHPUnit_Framework_MockObject_MockObject
      */
@@ -31,11 +28,10 @@ class TabTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
 
-        $this->_model = new \Magento\Config\Model\Config\Structure\Element\Tab(
-            $this->_storeManagerMock,
-            $this->_iteratorMock
+        $this->_model = (new ObjectManager($this))->getObject(
+            'Magento\Config\Model\Config\Structure\Element\Tab',
+            ['childrenIterator' => $this->_iteratorMock]
         );
     }
 
@@ -43,7 +39,6 @@ class TabTest extends \PHPUnit_Framework_TestCase
     {
         unset($this->_model);
         unset($this->_iteratorMock);
-        unset($this->_storeManagerMock);
     }
 
     public function testIsVisibleOnlyChecksPresenceOfChildren()
diff --git a/app/code/Magento/Config/etc/adminhtml/events.xml b/app/code/Magento/Config/etc/adminhtml/events.xml
index 432149ddd005d78fef7a8624b15692e034d6b99f..10ae4f19e86ee03e5d11e1fffcd20427e4c647f6 100644
--- a/app/code/Magento/Config/etc/adminhtml/events.xml
+++ b/app/code/Magento/Config/etc/adminhtml/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="admin_system_config_changed_section_admin">
-        <observer name="bind_locale" instance="Magento\Config\Observer\Config\Backend\Admin\AfterCustomUrlChangedObserver" method="execute" />
+        <observer name="bind_locale" instance="Magento\Config\Observer\Config\Backend\Admin\AfterCustomUrlChangedObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Config/etc/di.xml b/app/code/Magento/Config/etc/di.xml
index 73adec65c51356d29a7d080db7d2f30b621d22e3..f0581892d0f508b122b94df4cadf1fbd6b22cd3a 100644
--- a/app/code/Magento/Config/etc/di.xml
+++ b/app/code/Magento/Config/etc/di.xml
@@ -8,7 +8,7 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <preference for="Magento\Config\Model\Config\Structure\SearchInterface" type="Magento\Config\Model\Config\Structure" />
     <preference for="Magento\Config\Model\Config\Backend\File\RequestData\RequestDataInterface" type="Magento\Config\Model\Config\Backend\File\RequestData" />
-    <preference for="Magento\Framework\App\Config\Resource\ConfigInterface" type="Magento\Config\Model\Resource\Config" />
+    <preference for="Magento\Framework\App\Config\ConfigResource\ConfigInterface" type="Magento\Config\Model\ResourceModel\Config" />
     <virtualType name="Magento\Framework\View\TemplateEngine\Xhtml\ConfigCompiler" type="Magento\Framework\View\TemplateEngine\Xhtml\Compiler" shared="false">
         <arguments>
             <argument name="compilerText" xsi:type="object">Magento\Framework\View\TemplateEngine\Xhtml\Compiler\Text</argument>
@@ -65,8 +65,8 @@
     </type>
     <type name="Magento\Framework\App\Config\Value">
         <arguments>
-            <argument name="resource" xsi:type="object">Magento\Config\Model\Resource\Config\Data</argument>
-            <argument name="resourceCollection" xsi:type="object">Magento\Config\Model\Resource\Config\Data\Collection\Proxy</argument>
+            <argument name="resource" xsi:type="object">Magento\Config\Model\ResourceModel\Config\Data</argument>
+            <argument name="resourceCollection" xsi:type="object">Magento\Config\Model\ResourceModel\Config\Data\Collection\Proxy</argument>
         </arguments>
     </type>
 </config>
diff --git a/app/code/Magento/Config/view/adminhtml/templates/system/config/edit.phtml b/app/code/Magento/Config/view/adminhtml/templates/system/config/edit.phtml
index dc585c33cea087bb2aa3774c8e85b66977b8e11a..5c2157d83a930d48abe35f3d969ae25550bc3676 100644
--- a/app/code/Magento/Config/view/adminhtml/templates/system/config/edit.phtml
+++ b/app/code/Magento/Config/view/adminhtml/templates/system/config/edit.phtml
@@ -25,7 +25,7 @@
 <script>
 require([
     "jquery",
-    "Magento_Ui/js/lib/registry/registry",
+    "uiRegistry",
     "jquery/jquery.hashchange",
     "mage/mage",
     "prototype",
diff --git a/app/code/Magento/ConfigurableImportExport/Model/Export/RowCustomizer.php b/app/code/Magento/ConfigurableImportExport/Model/Export/RowCustomizer.php
index 887d3f949cdcfc3269aaa297818427e1d6b851a4..4405feba18426579b23073dcd3e89bfcb1851273 100644
--- a/app/code/Magento/ConfigurableImportExport/Model/Export/RowCustomizer.php
+++ b/app/code/Magento/ConfigurableImportExport/Model/Export/RowCustomizer.php
@@ -18,7 +18,7 @@ class RowCustomizer implements RowCustomizerInterface
     /**
      * Prepare configurable data for export
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $collection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $collection
      * @param int $productIds
      * @return void
      */
diff --git a/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php b/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php
index ef4e5f74101c6b849cf49b17175a31f67d096f57..7ea2507330d85a55f32fc65412febc788db44eb9 100644
--- a/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php
+++ b/app/code/Magento/ConfigurableImportExport/Model/Import/Product/Type/Configurable.php
@@ -125,12 +125,12 @@ class Configurable extends \Magento\CatalogImportExport\Model\Import\Product\Typ
     protected $_productTypesConfig;
 
     /**
-     * @var \Magento\ImportExport\Model\Resource\Helper
+     * @var \Magento\ImportExport\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
@@ -144,7 +144,7 @@ class Configurable extends \Magento\CatalogImportExport\Model\Import\Product\Typ
     /**
      * Instance of product collection factory.
      *
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_productColFac;
 
@@ -184,22 +184,22 @@ class Configurable extends \Magento\CatalogImportExport\Model\Import\Product\Typ
     protected $_nextAttrId;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFac
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $prodAttrColFac
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param array $params
      * @param \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypesConfig
-     * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $_productColFac
+     * @param \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $_productColFac
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFac,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $prodAttrColFac,
+        \Magento\Framework\App\ResourceConnection $resource,
         array $params,
         \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypesConfig,
-        \Magento\ImportExport\Model\Resource\Helper $resourceHelper,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $_productColFac
+        \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $_productColFac
     ) {
         $this->_productTypesConfig = $productTypesConfig;
         $this->_resourceHelper = $resourceHelper;
diff --git a/app/code/Magento/ConfigurableImportExport/Test/Unit/Model/Export/RowCustomizerTest.php b/app/code/Magento/ConfigurableImportExport/Test/Unit/Model/Export/RowCustomizerTest.php
index 7f212fca3a35cfb30e51667f8dac3e8cb9a51239..65732d3df1df550c4b987a87b4005efd3a5bf223 100644
--- a/app/code/Magento/ConfigurableImportExport/Test/Unit/Model/Export/RowCustomizerTest.php
+++ b/app/code/Magento/ConfigurableImportExport/Test/Unit/Model/Export/RowCustomizerTest.php
@@ -23,14 +23,14 @@ class RowCustomizerTest extends \PHPUnit_Framework_TestCase
     protected $_model;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_collectionMock;
 
     protected function setUp()
     {
         $this->_collectionMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Collection',
+            'Magento\Catalog\Model\ResourceModel\Product\Collection',
             ['addAttributeToFilter', 'fetchItem', '__wakeup'],
             [],
             '',
diff --git a/app/code/Magento/ConfigurableImportExport/Test/Unit/Model/Import/Product/Type/ConfigurableTest.php b/app/code/Magento/ConfigurableImportExport/Test/Unit/Model/Import/Product/Type/ConfigurableTest.php
index 019adef514f782906bbd61df992ae66957dec81b..1c91ac937b53b4e36be96cef85786eaaa38e3c4b 100644
--- a/app/code/Magento/ConfigurableImportExport/Test/Unit/Model/Import/Product/Type/ConfigurableTest.php
+++ b/app/code/Magento/ConfigurableImportExport/Test/Unit/Model/Import/Product/Type/ConfigurableTest.php
@@ -19,32 +19,32 @@ class ConfigurableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
     protected $configurable;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $setCollectionFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $setCollection;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $attrCollectionFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $attrCollection;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $productCollectionFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $productCollection;
 
@@ -63,7 +63,7 @@ class ConfigurableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
      */
     protected $_entityModel;
 
-    /** @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject */
     protected $resource;
 
     /** @var \Magento\Framework\DB\Adapter\Pdo\Mysql|\PHPUnit_Framework_MockObject_MockObject */
@@ -80,14 +80,14 @@ class ConfigurableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
         parent::setUp();
 
         $this->setCollectionFactory = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->setCollection = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection',
             ['setEntityTypeFilter'],
             [],
             '',
@@ -109,7 +109,7 @@ class ConfigurableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
             ->will($this->returnValue([$item]));
 
         $this->attrCollectionFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory',
             ['create'],
             [],
             '',
@@ -117,7 +117,7 @@ class ConfigurableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
         );
 
         $this->attrCollection = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Attribute\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection',
             ['setAttributeSetFilter'],
             [],
             '',
@@ -211,7 +211,7 @@ class ConfigurableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
         $this->_connection->expects($this->any())->method('fetchAll')->will($this->returnValue([]));
 
         $this->resource = $this->getMock(
-            '\Magento\Framework\App\Resource',
+            '\Magento\Framework\App\ResourceConnection',
             [
                 'getConnection',
                 'getTableName',
@@ -231,7 +231,7 @@ class ConfigurableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
         );
 
         $this->productCollectionFactory = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\CollectionFactory',
+            '\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory',
             ['create'],
             [],
             '',
@@ -239,7 +239,7 @@ class ConfigurableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
         );
 
         $this->productCollection = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Collection',
             ['addFieldToFilter', 'addAttributeToSelect'],
             [],
             '',
diff --git a/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php b/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php
index 0d91e23db469c1466e8443c049bbd79155cc7458..e48634a2c7d54cc513997d3b742ed612f9594c8b 100644
--- a/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php
+++ b/app/code/Magento/ConfigurableProduct/Block/Adminhtml/Product/Edit/Tab/Super/Config/Matrix.php
@@ -172,7 +172,7 @@ class Matrix extends \Magento\Backend\Block\Template
         foreach ($this->_getAssociatedProducts() as $product) {
             $keys = [];
             foreach ($this->getUsedAttributes() as $attribute) {
-                /** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+                /** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
                 $keys[] = $product->getData($attribute->getAttributeCode());
             }
             $productByUsedAttributes[implode('-', $keys)] = $product;
diff --git a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php
index e2ba278cbc84bc83995ea7c44df653a7880b8670..fce1979115e66199ff8932a3de3dbc8bac44cf5c 100644
--- a/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Block/Product/View/Type/Configurable.php
@@ -198,6 +198,7 @@ class Configurable extends \Magento\Catalog\Block\Product\View\AbstractView
             'productId' => $currentProduct->getId(),
             'chooseText' => __('Choose an Option...'),
             'images' => isset($options['images']) ? $options['images'] : [],
+            'index' => isset($options['index']) ? $options['index'] : [],
         ];
 
         if ($currentProduct->hasPreconfiguredValues() && !empty($attributesData['defaultValues'])) {
diff --git a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php
index 7c8dd72bdd1f614b1d8973b423ec86a733c4ebf8..7516807654af81978cdc400b4bc62ee9a5afc26b 100644
--- a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php
+++ b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/CreateOptions.php
@@ -8,7 +8,7 @@ namespace Magento\ConfigurableProduct\Controller\Adminhtml\Product\Attribute;
 
 use Magento\Backend\App\Action;
 use Magento\Catalog\Controller\Adminhtml\Product;
-use Magento\Catalog\Model\Resource\Eav\AttributeFactory;
+use Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory;
 
 class CreateOptions extends Action
 {
@@ -18,7 +18,7 @@ class CreateOptions extends Action
     protected $jsonHelper;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Eav\AttributeFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory
      */
     protected $attributeFactory;
 
diff --git a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/GetAttributes.php b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/GetAttributes.php
index d75634f6f427eeafa7e8876e9e00defacdbca6d3..39bee40024eee6c39908bf30e2eccfc2d90fd1b3 100644
--- a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/GetAttributes.php
+++ b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Attribute/GetAttributes.php
@@ -23,7 +23,7 @@ class GetAttributes extends Action
     protected $storeManager;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     protected $collectionFactory;
 
@@ -31,13 +31,13 @@ class GetAttributes extends Action
      * @param Action\Context $context
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $collectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $collectionFactory
      */
     public function __construct(
         Action\Context $context,
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $collectionFactory
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $collectionFactory
     ) {
         $this->jsonHelper = $jsonHelper;
         $this->storeManager = $storeManager;
diff --git a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Builder/Plugin.php b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Builder/Plugin.php
index 9dfbb0bdf69d1375db1d272b4bb8e5b1b11bcdf6..f62703cc75d2763171ac030891d37ab49f77f79b 100644
--- a/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Builder/Plugin.php
+++ b/app/code/Magento/ConfigurableProduct/Controller/Adminhtml/Product/Builder/Plugin.php
@@ -77,7 +77,7 @@ class Plugin
 
             $data = [];
             foreach ($configProduct->getTypeInstance()->getEditableAttributes($configProduct) as $attribute) {
-                /* @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+                /* @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
                 if (!$attribute->getIsUnique() &&
                     $attribute->getFrontend()->getInputType() != 'gallery' &&
                     $attribute->getAttributeCode() != 'required_options' &&
diff --git a/app/code/Magento/ConfigurableProduct/Helper/Data.php b/app/code/Magento/ConfigurableProduct/Helper/Data.php
index bfd993d75414c1e21fbfbe23d05016563e3129d1..91dd722424219c550a555622bd165df5e242706d 100644
--- a/app/code/Magento/ConfigurableProduct/Helper/Data.php
+++ b/app/code/Magento/ConfigurableProduct/Helper/Data.php
@@ -30,6 +30,44 @@ class Data
         $this->imageHelper = $imageHelper;
     }
 
+    /**
+     * Retrieve collection of gallery images
+     *
+     * @param \Magento\Catalog\Api\Data\ProductInterface $product
+     * @return \Magento\Catalog\Model\Product\Image[]|null
+     */
+    public function getGalleryImages(\Magento\Catalog\Api\Data\ProductInterface $product)
+    {
+        $images = $product->getMediaGalleryImages();
+        if ($images instanceof \Magento\Framework\Data\Collection) {
+            foreach ($images as &$image) {
+                /** @var $image \Magento\Catalog\Model\Product\Image */
+                $image->setData(
+                    'small_image_url',
+                    $this->imageHelper->init($product, 'product_page_image_small')
+                        ->setImageFile($image->getFile())
+                        ->getUrl()
+                );
+                $image->setData(
+                    'medium_image_url',
+                    $this->imageHelper->init($product, 'product_page_image_medium')
+                        ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
+                        ->setImageFile($image->getFile())
+                        ->getUrl()
+                );
+                $image->setData(
+                    'large_image_url',
+                    $this->imageHelper->init($product, 'product_page_image_large')
+                        ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
+                        ->setImageFile($image->getFile())
+                        ->getUrl()
+                );
+            }
+        }
+
+        return $images;
+    }
+
     /**
      * Get Options for Configurable Product Options
      *
@@ -42,16 +80,27 @@ class Data
         $options = [];
         foreach ($allowedProducts as $product) {
             $productId = $product->getId();
+            $images = $this->getGalleryImages($product);
+            if ($images) {
+                foreach ($images as $image) {
+                    $options['images'][$productId][] =
+                        [
+                            'thumb' => $image->getData('small_image_url'),
+                            'img' => $image->getData('medium_image_url'),
+                            'full' => $image->getData('large_image_url'),
+                            'caption' => $image->getLabel(),
+                            'position' => $image->getPosition(),
+                            'isMain' => $image->getFile() == $product->getImage(),
+                        ];
+                }
+            }
             foreach ($this->getAllowAttributes($currentProduct) as $attribute) {
                 $productAttribute = $attribute->getProductAttribute();
                 $productAttributeId = $productAttribute->getId();
                 $attributeValue = $product->getData($productAttribute->getAttributeCode());
 
                 $options[$productAttributeId][$attributeValue][] = $productId;
-                $imageUrl = (!$product->getImage() || $product->getImage() === 'no_selection')
-                    ? $this->imageHelper->init($currentProduct, 'product_page_image_large')->getUrl()
-                    : $this->imageHelper->init($product, 'product_page_image_large')->getUrl();
-                $options['images'][$productAttributeId][$attributeValue][$productId] = $imageUrl;
+                $options['index'][$productId][$productAttributeId] = $attributeValue;
             }
         }
         return $options;
diff --git a/app/code/Magento/ConfigurableProduct/Model/Attribute/LockValidator.php b/app/code/Magento/ConfigurableProduct/Model/Attribute/LockValidator.php
index abf184927e882efefeccd74bc3540be9ee7fb995..059b7e1f9bfd18ced6418d331bc703f8a43c51e5 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Attribute/LockValidator.php
+++ b/app/code/Magento/ConfigurableProduct/Model/Attribute/LockValidator.php
@@ -6,7 +6,7 @@
 namespace Magento\ConfigurableProduct\Model\Attribute;
 
 use Magento\Catalog\Model\Attribute\LockValidatorInterface;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class LockValidator implements LockValidatorInterface
 {
@@ -16,9 +16,9 @@ class LockValidator implements LockValidatorInterface
     protected $resource;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      */
-    public function __construct(Resource $resource)
+    public function __construct(ResourceConnection $resource)
     {
         $this->resource = $resource;
     }
diff --git a/app/code/Magento/ConfigurableProduct/Model/ConfigurableAttributeHandler.php b/app/code/Magento/ConfigurableProduct/Model/ConfigurableAttributeHandler.php
index 500b487b0a32640595464d8ad5097810f73a2367..239f6d697d745488ce7041b31df0ff7ebfcb92f3 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ConfigurableAttributeHandler.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ConfigurableAttributeHandler.php
@@ -10,15 +10,15 @@ class ConfigurableAttributeHandler
     /**
      * Attribute collection factory
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory
      */
     protected $collectionFactory;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeColFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeColFactory
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $attributeColFactory
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $attributeColFactory
     ) {
         $this->collectionFactory = $attributeColFactory;
     }
@@ -26,11 +26,11 @@ class ConfigurableAttributeHandler
     /**
      * Retrieve list of attributes applicable for configurable product
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     public function getApplicableAttributes()
     {
-        /** @var $collection \Magento\Catalog\Model\Resource\Product\Attribute\Collection */
+        /** @var $collection \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection */
         $collection = $this->collectionFactory->create();
         return $collection->addFieldToFilter(
             'frontend_input',
@@ -40,7 +40,7 @@ class ConfigurableAttributeHandler
             1
         )->addFieldToFilter(
             'is_global',
-            \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL
+            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL
         );
     }
 
diff --git a/app/code/Magento/ConfigurableProduct/Model/ConfigurableProductManagement.php b/app/code/Magento/ConfigurableProduct/Model/ConfigurableProductManagement.php
index 7406d4961acdf9c1b6c6cb9a49b0041995e63b52..aaa182d7be506af6886fd100c7ebadb8bc4d0547 100644
--- a/app/code/Magento/ConfigurableProduct/Model/ConfigurableProductManagement.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ConfigurableProductManagement.php
@@ -9,7 +9,7 @@ namespace Magento\ConfigurableProduct\Model;
 use Magento\Catalog\Api\Data\ProductInterface;
 use Magento\Catalog\Model\Product\Attribute\Source\Status;
 use Magento\ConfigurableProduct\Model\Product\Type\Configurable;
-use Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\CollectionFactory;
+use Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\CollectionFactory;
 
 class ConfigurableProductManagement implements \Magento\ConfigurableProduct\Api\ConfigurableProductManagementInterface
 {
@@ -59,7 +59,9 @@ class ConfigurableProductManagement implements \Magento\ConfigurableProduct\Api\
     public function getCount($status = null)
     {
         $products = $this->productsFactory->create();
-        /** @var \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\Collection $products */
+        // @codingStandardsIgnoreStart
+        /** @var \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection $products */
+        // @codingStandardsIgnoreEnd
         switch ($status) {
             case Status::STATUS_ENABLED:
                 $products->addAttributeToFilter('status', Status::STATUS_ENABLED);
@@ -83,7 +85,7 @@ class ConfigurableProductManagement implements \Magento\ConfigurableProduct\Api\
         /** @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute $option */
         foreach ($options as $option) {
             $configurable = $this->objectToArray($option);
-            /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attribute */
+            /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
             $attribute = $this->attributeRepository->get($option->getAttributeId());
             $attributeOptions = $attribute->getOptions() !== null ? $attribute->getOptions() : [];
 
diff --git a/app/code/Magento/ConfigurableProduct/Model/Entity/Product/Attribute/Group/AttributeMapper/Plugin.php b/app/code/Magento/ConfigurableProduct/Model/Entity/Product/Attribute/Group/AttributeMapper/Plugin.php
index 5aafea883ec42110116ee3a231492559ba20ffeb..487f3835eef6ba3720a3c635974433e9f1f6fc58 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Entity/Product/Attribute/Group/AttributeMapper/Plugin.php
+++ b/app/code/Magento/ConfigurableProduct/Model/Entity/Product/Attribute/Group/AttributeMapper/Plugin.php
@@ -7,13 +7,13 @@
  */
 namespace Magento\ConfigurableProduct\Model\Entity\Product\Attribute\Group\AttributeMapper;
 
-use Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\AttributeFactory;
+use Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\AttributeFactory;
 use Magento\Framework\Registry;
 
 class Plugin
 {
     /**
-     * @var \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\AttributeFactory
+     * @var \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\AttributeFactory
      */
     protected $attributeFactory;
 
diff --git a/app/code/Magento/ConfigurableProduct/Model/LinkManagement.php b/app/code/Magento/ConfigurableProduct/Model/LinkManagement.php
index 51f425d487f302c4062622c25db1e4fa8ef0f1bc..c074175b82473af2abad7696b0248aae4e7de292 100644
--- a/app/code/Magento/ConfigurableProduct/Model/LinkManagement.php
+++ b/app/code/Magento/ConfigurableProduct/Model/LinkManagement.php
@@ -23,7 +23,7 @@ class LinkManagement implements \Magento\ConfigurableProduct\Api\LinkManagementI
     private $productFactory;
 
     /**
-     * @var Resource\Product\Type\Configurable
+     * @var \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable
      */
     private $configurableType;
 
@@ -35,13 +35,13 @@ class LinkManagement implements \Magento\ConfigurableProduct\Api\LinkManagementI
     /**
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
      * @param \Magento\Catalog\Api\Data\ProductInterfaceFactory $productFactory
-     * @param Resource\Product\Type\Configurable $configurableType
+     * @param \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable $configurableType
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
      */
     public function __construct(
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
         \Magento\Catalog\Api\Data\ProductInterfaceFactory $productFactory,
-        \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable $configurableType,
+        \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable $configurableType,
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
     ) {
         $this->productRepository = $productRepository;
diff --git a/app/code/Magento/ConfigurableProduct/Model/OptionRepository.php b/app/code/Magento/ConfigurableProduct/Model/OptionRepository.php
index e62dc6648ab20c6b5481af4b8b27cf47327f6239..d1e08f2367c3518e83a6a6fb92c46edc15af6f67 100644
--- a/app/code/Magento/ConfigurableProduct/Model/OptionRepository.php
+++ b/app/code/Magento/ConfigurableProduct/Model/OptionRepository.php
@@ -38,7 +38,7 @@ class OptionRepository implements \Magento\ConfigurableProduct\Api\OptionReposit
     protected $configurableType;
 
     /**
-     * @var Resource\Product\Type\Configurable\Attribute
+     * @var \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute
      */
     protected $optionResource;
 
@@ -58,7 +58,7 @@ class OptionRepository implements \Magento\ConfigurableProduct\Api\OptionReposit
     protected $configurableAttributeFactory;
 
     /**
-     * @var Resource\Product\Type\Configurable
+     * @var \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable
      */
     private $configurableTypeResource;
 
@@ -66,21 +66,21 @@ class OptionRepository implements \Magento\ConfigurableProduct\Api\OptionReposit
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
      * @param \Magento\ConfigurableProduct\Api\Data\OptionValueInterfaceFactory $optionValueFactory
      * @param ConfigurableType $configurableType
-     * @param Resource\Product\Type\Configurable\Attribute $optionResource
+     * @param \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute $optionResource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Api\ProductAttributeRepositoryInterface $productAttributeRepository
      * @param ConfigurableType\AttributeFactory $configurableAttributeFactory
-     * @param Resource\Product\Type\Configurable $configurableTypeResource
+     * @param \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable $configurableTypeResource
      */
     public function __construct(
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
         \Magento\ConfigurableProduct\Api\Data\OptionValueInterfaceFactory $optionValueFactory,
         \Magento\ConfigurableProduct\Model\Product\Type\Configurable $configurableType,
-        \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute $optionResource,
+        \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute $optionResource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Api\ProductAttributeRepositoryInterface $productAttributeRepository,
         \Magento\ConfigurableProduct\Model\Product\Type\Configurable\AttributeFactory $configurableAttributeFactory,
-        \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable $configurableTypeResource
+        \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable $configurableTypeResource
     ) {
         $this->productRepository = $productRepository;
         $this->optionValueFactory = $optionValueFactory;
diff --git a/app/code/Magento/ConfigurableProduct/Model/Plugin/AroundProductRepositorySave.php b/app/code/Magento/ConfigurableProduct/Model/Plugin/AroundProductRepositorySave.php
index c81d4c736a7901b7d324b801f8b0d5ea0a285eec..de7898af9a19c70c1f4c0025b031e1bff8a79f74 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Plugin/AroundProductRepositorySave.php
+++ b/app/code/Magento/ConfigurableProduct/Model/Plugin/AroundProductRepositorySave.php
@@ -24,19 +24,19 @@ class AroundProductRepositorySave
     /**
      * Type configurable factory
      *
-     * @var \Magento\ConfigurableProduct\Model\Resource\Product\Type\ConfigurableFactory
+     * @var \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\ConfigurableFactory
      */
     protected $typeConfigurableFactory;
 
     /**
      * @param \Magento\ConfigurableProduct\Api\OptionRepositoryInterface $optionRepository
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
-     * @param \Magento\ConfigurableProduct\Model\Resource\Product\Type\ConfigurableFactory $typeConfigurableFactory
+     * @param \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\ConfigurableFactory $typeConfigurableFactory
      */
     public function __construct(
         \Magento\ConfigurableProduct\Api\OptionRepositoryInterface $optionRepository,
         \Magento\Catalog\Model\ProductFactory $productFactory,
-        \Magento\ConfigurableProduct\Model\Resource\Product\Type\ConfigurableFactory $typeConfigurableFactory
+        \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\ConfigurableFactory $typeConfigurableFactory
     ) {
         $this->optionRepository = $optionRepository;
         $this->productFactory = $productFactory;
@@ -135,7 +135,7 @@ class AroundProductRepositorySave
             $configurableAttributes = $configurableProductType->getConfigurableAttributes($product);
             $attributeCodes = [];
             foreach ($configurableAttributes as $configurableAttribute) {
-                /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $productAttribute */
+                /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $productAttribute */
                 $productAttribute = $configurableAttribute->getProductAttribute();
                 $attributeCode = $productAttribute->getAttributeCode();
                 $attributeCodes[] = $attributeCode;
diff --git a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php
index 46db91ca3564b3121fd87f39669eb9a4a0e7f997..85eae4dae7cda194432c754ef9d5e841a42d8da5 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable.php
@@ -87,7 +87,7 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
     /**
      * Catalog product type configurable
      *
-     * @var \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable
+     * @var \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable
      */
     protected $_catalogProductTypeConfigurable;
 
@@ -95,14 +95,14 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
      * Attribute collection factory
      *
      * @var
-     * \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\CollectionFactory
+     * \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\CollectionFactory
      */
     protected $_attributeCollectionFactory;
 
     /**
      * Product collection factory
      *
-     * @var \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\CollectionFactory
+     * @var \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\CollectionFactory
      */
     protected $_productCollectionFactory;
 
@@ -116,14 +116,14 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
     /**
      * Eav attribute factory
      *
-     * @var \Magento\Catalog\Model\Resource\Eav\AttributeFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory
      */
     protected $_eavAttributeFactory;
 
     /**
      * Type configurable factory
      *
-     * @var \Magento\ConfigurableProduct\Model\Resource\Product\Type\ConfigurableFactory
+     * @var \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\ConfigurableFactory
      */
     protected $_typeConfigurableFactory;
 
@@ -144,12 +144,12 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
      * @param \Magento\Framework\Registry $coreRegistry
      * @param \Psr\Log\LoggerInterface $logger
      * @param ProductRepositoryInterface $productRepository
-     * @param \Magento\ConfigurableProduct\Model\Resource\Product\Type\ConfigurableFactory $typeConfigurableFactory
-     * @param \Magento\Catalog\Model\Resource\Eav\AttributeFactory $eavAttributeFactory
+     * @param \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\ConfigurableFactory $typeConfigurableFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory $eavAttributeFactory
      * @param \Magento\ConfigurableProduct\Model\Product\Type\Configurable\AttributeFactory $configurableAttributeFactory
-     * @param \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\CollectionFactory $productCollectionFactory
-     * @param \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\CollectionFactory $attributeCollectionFactory
-     * @param \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable $catalogProductTypeConfigurable
+     * @param \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\CollectionFactory $attributeCollectionFactory
+     * @param \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable $catalogProductTypeConfigurable
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor
      *
@@ -165,12 +165,12 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
         \Magento\Framework\Registry $coreRegistry,
         \Psr\Log\LoggerInterface $logger,
         ProductRepositoryInterface $productRepository,
-        \Magento\ConfigurableProduct\Model\Resource\Product\Type\ConfigurableFactory $typeConfigurableFactory,
-        \Magento\Catalog\Model\Resource\Eav\AttributeFactory $eavAttributeFactory,
+        \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\ConfigurableFactory $typeConfigurableFactory,
+        \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory $eavAttributeFactory,
         \Magento\ConfigurableProduct\Model\Product\Type\Configurable\AttributeFactory $configurableAttributeFactory,
-        \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\CollectionFactory $productCollectionFactory,
-        \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\CollectionFactory $attributeCollectionFactory,
-        \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable $catalogProductTypeConfigurable,
+        \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\CollectionFactory $productCollectionFactory,
+        \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\CollectionFactory $attributeCollectionFactory,
+        \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable $catalogProductTypeConfigurable,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor
     ) {
@@ -243,12 +243,12 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
     /**
      * Check attribute availability for super product creation
      *
-     * @param  \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+     * @param  \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
      * @return bool
      */
-    public function canUseAttribute(\Magento\Catalog\Model\Resource\Eav\Attribute $attribute)
+    public function canUseAttribute(\Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute)
     {
-        return $attribute->getIsGlobal() == \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL &&
+        return $attribute->getIsGlobal() == \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL &&
             $attribute->getIsVisible() &&
             $attribute->usesSource() &&
             $attribute->getIsUserDefined();
@@ -392,7 +392,7 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
      * Retrieve configurable attribute collection
      *
      * @param \Magento\Catalog\Model\Product $product
-     * @return \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\Collection
+     * @return \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection
      */
     public function getConfigurableAttributeCollection(\Magento\Catalog\Model\Product $product)
     {
@@ -440,7 +440,9 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
             }
 
             $usedProducts = [];
-            $collection = $this->getUsedProductCollection($product)->addAttributeToSelect('*')
+            $collection = $this->getUsedProductCollection($product)
+                ->addAttributeToSelect('*')
+                ->addAttributeToSelect('media_gallery')
                 ->addFilterByRequiredOptions()
                 ->setStoreId($product->getStoreId());
 
@@ -454,6 +456,8 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
             }
 
             foreach ($collection as $item) {
+                /** @var \Magento\Catalog\Model\Product $item */
+                $item->getResource()->getAttribute('media_gallery')->getBackend()->afterLoad($item);
                 $usedProducts[] = $item;
             }
 
@@ -467,7 +471,7 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
      * Retrieve related products collection
      *
      * @param  \Magento\Catalog\Model\Product $product
-     * @return \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\Collection
+     * @return \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection
      */
     public function getUsedProductCollection($product)
     {
@@ -560,7 +564,7 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
                     ->setProductId($product->getId())
                     ->save();
             }
-            /** @var $configurableAttributesCollection \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\Collection  */
+            /** @var $configurableAttributesCollection \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection  */
             $configurableAttributesCollection = $this->_attributeCollectionFactory->create();
             $configurableAttributesCollection->setProductFilter($product);
             $configurableAttributesCollection->addFieldToFilter(
@@ -677,7 +681,7 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
 
             foreach ($data as $attributeId => $attributeValue) {
                 if (isset($usedAttributes[$attributeId])) {
-                    /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attribute */
+                    /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
                     $attribute = $usedAttributes[$attributeId]->getProductAttribute();
                     $label = $attribute->getStoreLabel();
                     $value = $attribute;
@@ -1024,7 +1028,7 @@ class Configurable extends \Magento\Catalog\Model\Product\Type\AbstractType
      *
      * @param  int $attributeId
      * @param  \Magento\Catalog\Model\Product $product
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     public function getAttributeById($attributeId, $product)
     {
diff --git a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable/Attribute.php b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable/Attribute.php
index 24ab605afac4de5962ecbf2666bf31f951620cbf..29b866880c2906fbe25d49b284251bd7454b18e8 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable/Attribute.php
+++ b/app/code/Magento/ConfigurableProduct/Model/Product/Type/Configurable/Attribute.php
@@ -35,7 +35,7 @@ class Attribute extends \Magento\Framework\Model\AbstractExtensibleModel impleme
      */
     protected function _construct()
     {
-        $this->_init('Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute');
+        $this->_init('Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute');
     }
 
     /**
@@ -77,7 +77,7 @@ class Attribute extends \Magento\Framework\Model\AbstractExtensibleModel impleme
      * Load counfigurable attribute by product and product's attribute
      *
      * @param \Magento\Catalog\Model\Product $product
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute  $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute  $attribute
      * @return void
      */
     public function loadByProductAndAttribute($product, $attribute)
diff --git a/app/code/Magento/ConfigurableProduct/Model/Resource/Indexer/Stock/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Indexer/Stock/Configurable.php
similarity index 96%
rename from app/code/Magento/ConfigurableProduct/Model/Resource/Indexer/Stock/Configurable.php
rename to app/code/Magento/ConfigurableProduct/Model/ResourceModel/Indexer/Stock/Configurable.php
index 419b2e22d1dfb1555815b2505ce046a3c3ff1fc2..7b7d04e2ceec752b5cb8cfcf9bf93b12b43d432c 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Resource/Indexer/Stock/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Indexer/Stock/Configurable.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ConfigurableProduct\Model\Resource\Indexer\Stock;
+namespace Magento\ConfigurableProduct\Model\ResourceModel\Indexer\Stock;
 
 /**
  * CatalogInventory Configurable Products Stock Status Indexer Resource Model
@@ -14,7 +14,7 @@ namespace Magento\ConfigurableProduct\Model\Resource\Indexer\Stock;
  */
 use Magento\Catalog\Model\Product\Attribute\Source\Status as ProductStatus;
 
-class Configurable extends \Magento\CatalogInventory\Model\Resource\Indexer\Stock\DefaultStock
+class Configurable extends \Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock\DefaultStock
 {
     /**
      * Get the select object for get stock status by configurable product ids
diff --git a/app/code/Magento/ConfigurableProduct/Model/Resource/Product/Indexer/Price/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
similarity index 88%
rename from app/code/Magento/ConfigurableProduct/Model/Resource/Product/Indexer/Price/Configurable.php
rename to app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
index 1a3dd7d1e136931c0c640a43aa7b68b5c406211d..814508cd6295942f92a399db6fc845b9046f2163 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Resource/Product/Indexer/Price/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Indexer/Price/Configurable.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ConfigurableProduct\Model\Resource\Product\Indexer\Price;
+namespace Magento\ConfigurableProduct\Model\ResourceModel\Product\Indexer\Price;
 
-class Configurable extends \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice
+class Configurable extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice
 {
     /**
      * Reindex temporary (price result data) for all products
@@ -33,7 +33,7 @@ class Configurable extends \Magento\Catalog\Model\Resource\Product\Indexer\Price
      * Reindex temporary (price result data) for defined product(s)
      *
      * @param int|array $entityIds
-     * @return \Magento\ConfigurableProduct\Model\Resource\Product\Indexer\Price\Configurable
+     * @return \Magento\ConfigurableProduct\Model\ResourceModel\Product\Indexer\Price\Configurable
      */
     public function reindexEntity($entityIds)
     {
@@ -43,7 +43,7 @@ class Configurable extends \Magento\Catalog\Model\Resource\Product\Indexer\Price
 
     /**
      * @param null|int|array $entityIds
-     * @return \Magento\ConfigurableProduct\Model\Resource\Product\Indexer\Price\Configurable
+     * @return \Magento\ConfigurableProduct\Model\ResourceModel\Product\Indexer\Price\Configurable
      */
     protected function reindex($entityIds = null)
     {
@@ -79,7 +79,7 @@ class Configurable extends \Magento\Catalog\Model\Resource\Product\Indexer\Price
     /**
      * Prepare table structure for custom option temporary aggregation data
      *
-     * @return \Magento\ConfigurableProduct\Model\Resource\Product\Indexer\Price\Configurable
+     * @return \Magento\ConfigurableProduct\Model\ResourceModel\Product\Indexer\Price\Configurable
      */
     protected function _prepareConfigurableOptionAggregateTable()
     {
@@ -90,7 +90,7 @@ class Configurable extends \Magento\Catalog\Model\Resource\Product\Indexer\Price
     /**
      * Prepare table structure for custom option prices data
      *
-     * @return \Magento\ConfigurableProduct\Model\Resource\Product\Indexer\Price\Configurable
+     * @return \Magento\ConfigurableProduct\Model\ResourceModel\Product\Indexer\Price\Configurable
      */
     protected function _prepareConfigurableOptionPriceTable()
     {
@@ -102,7 +102,7 @@ class Configurable extends \Magento\Catalog\Model\Resource\Product\Indexer\Price
      * Calculate minimal and maximal prices for configurable product options
      * and apply it to final price
      *
-     * @return \Magento\ConfigurableProduct\Model\Resource\Product\Indexer\Price\Configurable
+     * @return \Magento\ConfigurableProduct\Model\ResourceModel\Product\Indexer\Price\Configurable
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
      */
     protected function _applyConfigurableOption()
diff --git a/app/code/Magento/ConfigurableProduct/Model/Resource/Product/Type/Configurable.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable.php
similarity index 92%
rename from app/code/Magento/ConfigurableProduct/Model/Resource/Product/Type/Configurable.php
rename to app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable.php
index c90b20f34acbb78266b5fe803a6d1c1e376994d1..f11e401776daf23785789b586f9a7b084b50c210 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Resource/Product/Type/Configurable.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable.php
@@ -5,25 +5,25 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ConfigurableProduct\Model\Resource\Product\Type;
+namespace Magento\ConfigurableProduct\Model\ResourceModel\Product\Type;
 
-class Configurable extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Configurable extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Catalog product relation
      *
-     * @var \Magento\Catalog\Model\Resource\Product\Relation
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Relation
      */
     protected $_catalogProductRelation;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
-     * @param \Magento\Catalog\Model\Resource\Product\Relation $catalogProductRelation
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Relation $catalogProductRelation
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
-        \Magento\Catalog\Model\Resource\Product\Relation $catalogProductRelation,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
+        \Magento\Catalog\Model\ResourceModel\Product\Relation $catalogProductRelation,
         $connectionName = null
     ) {
         $this->_catalogProductRelation = $catalogProductRelation;
diff --git a/app/code/Magento/ConfigurableProduct/Model/Resource/Product/Type/Configurable/Attribute.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute.php
similarity index 95%
rename from app/code/Magento/ConfigurableProduct/Model/Resource/Product/Type/Configurable/Attribute.php
rename to app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute.php
index 1372d41121c341b8285586c110b36b34764f3c5f..f031775006bb5f8a1f16db56c58a274f1a90d406 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Resource/Product/Type/Configurable/Attribute.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute.php
@@ -5,11 +5,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable;
+namespace Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable;
 
 use Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute as ConfigurableAttribute;
 
-class Attribute extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Attribute extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Label table name cache
@@ -33,13 +33,13 @@ class Attribute extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Helper\Data $catalogData
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Helper\Data $catalogData,
         $connectionName = null
diff --git a/app/code/Magento/ConfigurableProduct/Model/Resource/Product/Type/Configurable/Attribute/Collection.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php
similarity index 95%
rename from app/code/Magento/ConfigurableProduct/Model/Resource/Product/Type/Configurable/Attribute/Collection.php
rename to app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php
index fe97351a9afdd441fad3024215a92c481690e59b..dbca1777f450b4c810baa4bc2181fbee1665ac96 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Resource/Product/Type/Configurable/Attribute/Collection.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Attribute/Collection.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute;
+namespace Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute;
 
 use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
 
@@ -13,7 +13,7 @@ use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
  * @SuppressWarnings(PHPMD.LongVariable)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Configurable attributes label table name
@@ -58,7 +58,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\ConfigurableProduct\Model\Product\Type\Configurable $catalogProductTypeConfigurable
      * @param \Magento\Catalog\Helper\Data $catalogData
-     * @param \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute $resource
+     * @param \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute $resource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -70,7 +70,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\ConfigurableProduct\Model\Product\Type\Configurable $catalogProductTypeConfigurable,
         \Magento\Catalog\Helper\Data $catalogData,
-        \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute $resource,
+        \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute $resource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $this->_storeManager = $storeManager;
@@ -88,7 +88,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     {
         $this->_init(
             'Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute',
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute'
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute'
         );
         $this->_labelTable = $this->getTable('catalog_product_super_attribute_label');
     }
diff --git a/app/code/Magento/ConfigurableProduct/Model/Resource/Product/Type/Configurable/Product/Collection.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Product/Collection.php
similarity index 85%
rename from app/code/Magento/ConfigurableProduct/Model/Resource/Product/Type/Configurable/Product/Collection.php
rename to app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Product/Collection.php
index 7d7f62369bcfad074c0015eb4937b24d533c9d2a..7b73e1eabc5debe5e23f072378c9d139075cdf84 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Resource/Product/Type/Configurable/Product/Collection.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Product/Type/Configurable/Product/Collection.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product;
+namespace Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product;
 
-class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
+class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
 {
     /**
      * Link table name
@@ -29,7 +29,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
 
     /**
      * Init select
-     * @return $this|\Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\Collection
+     * @return $this|\Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection
      */
     protected function _initSelect()
     {
diff --git a/app/code/Magento/ConfigurableProduct/Model/Resource/Setup/PropertyMapper.php b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Setup/PropertyMapper.php
similarity index 91%
rename from app/code/Magento/ConfigurableProduct/Model/Resource/Setup/PropertyMapper.php
rename to app/code/Magento/ConfigurableProduct/Model/ResourceModel/Setup/PropertyMapper.php
index 654d9563bc523fe6743838fae78d29c819be99cb..84c9704ee3f1ae752bb21e9821396d4176a0b995 100644
--- a/app/code/Magento/ConfigurableProduct/Model/Resource/Setup/PropertyMapper.php
+++ b/app/code/Magento/ConfigurableProduct/Model/ResourceModel/Setup/PropertyMapper.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ConfigurableProduct\Model\Resource\Setup;
+namespace Magento\ConfigurableProduct\Model\ResourceModel\Setup;
 
 use Magento\Eav\Model\Entity\Setup\PropertyMapperAbstract;
 
diff --git a/app/code/Magento/ConfigurableProduct/Model/SuggestedAttributeList.php b/app/code/Magento/ConfigurableProduct/Model/SuggestedAttributeList.php
index 74b3b0580b83194926c722bca9a6455750337170..352b445a9c12771ee5bf42de45d7e8d5b48cc947 100644
--- a/app/code/Magento/ConfigurableProduct/Model/SuggestedAttributeList.php
+++ b/app/code/Magento/ConfigurableProduct/Model/SuggestedAttributeList.php
@@ -17,16 +17,16 @@ class SuggestedAttributeList
     /**
      * Catalog resource helper
      *
-     * @var \Magento\Catalog\Model\Resource\Helper
+     * @var \Magento\Catalog\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
     /**
      * @param ConfigurableAttributeHandler $configurableAttributeHandler
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      */
     public function __construct(
         \Magento\ConfigurableProduct\Model\ConfigurableAttributeHandler $configurableAttributeHandler,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
     ) {
         $this->configurableAttributeHandler = $configurableAttributeHandler;
         $this->_resourceHelper = $resourceHelper;
@@ -35,19 +35,19 @@ class SuggestedAttributeList
      * Retrieve list of attributes with admin store label containing $labelPart
      *
      * @param string $labelPart
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     public function getSuggestedAttributes($labelPart)
     {
         $escapedLabelPart = $this->_resourceHelper->addLikeEscape($labelPart, ['position' => 'any']);
-        /** @var $collection \Magento\Catalog\Model\Resource\Product\Attribute\Collection */
+        /** @var $collection \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection */
         $collection = $this->configurableAttributeHandler->getApplicableAttributes()->addFieldToFilter(
             'frontend_label',
             ['like' => $escapedLabelPart]
         );
         $result = [];
         foreach ($collection->getItems() as $id => $attribute) {
-            /** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+            /** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
             if ($this->configurableAttributeHandler->isAttributeApplicable($attribute)) {
                 $result[$id] = [
                     'id' => $attribute->getId(),
diff --git a/app/code/Magento/ConfigurableProduct/Plugin/Model/Resource/Product.php b/app/code/Magento/ConfigurableProduct/Plugin/Model/ResourceModel/Product.php
similarity index 78%
rename from app/code/Magento/ConfigurableProduct/Plugin/Model/Resource/Product.php
rename to app/code/Magento/ConfigurableProduct/Plugin/Model/ResourceModel/Product.php
index bc44f0dbf38b6306b0f830d000889529e525eb27..1150ae68fc2799fb3a0804927be0fa4837da4e17 100644
--- a/app/code/Magento/ConfigurableProduct/Plugin/Model/Resource/Product.php
+++ b/app/code/Magento/ConfigurableProduct/Plugin/Model/ResourceModel/Product.php
@@ -4,7 +4,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ConfigurableProduct\Plugin\Model\Resource;
+namespace Magento\ConfigurableProduct\Plugin\Model\ResourceModel;
 
 use Magento\ConfigurableProduct\Model\Product\Type\Configurable;
 
@@ -13,14 +13,14 @@ class Product
     /**
      * We need reset attribute set id to attribute after related simple product was saved
      *
-     * @param \Magento\Catalog\Model\Resource\Product $subject
+     * @param \Magento\Catalog\Model\ResourceModel\Product $subject
      * @param \Magento\Framework\DataObject $object
      * @return void
      *
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function beforeSave(
-        \Magento\Catalog\Model\Resource\Product $subject,
+        \Magento\Catalog\Model\ResourceModel\Product $subject,
         \Magento\Framework\DataObject $object
     ) {
         /** @var \Magento\Catalog\Model\Product $object */
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php
index 8a3a54d17f45b04fc586cca4033f13b2da176c04..d0f2461c96a3e1f866c9eae498c2c3bebd81c741 100644
--- a/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php
+++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurablePriceResolver.php
@@ -37,10 +37,10 @@ class ConfigurablePriceResolver implements PriceResolverInterface
     }
 
     /**
-     * @param \Magento\Framework\Pricing\Object\SaleableInterface $product
+     * @param \Magento\Framework\Pricing\SaleableInterface $product
      * @return float
      */
-    public function resolvePrice(\Magento\Framework\Pricing\Object\SaleableInterface $product)
+    public function resolvePrice(\Magento\Framework\Pricing\SaleableInterface $product)
     {
         $selectedConfigurableOption = $product->getSelectedConfigurableOption();
         if ($selectedConfigurableOption) {
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurableRegularPrice.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurableRegularPrice.php
index 704005ef38b8c6aecbc18ffb797f109363907358..de5ea0dcb0716011e643e34e4f1cef439c9384a4 100644
--- a/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurableRegularPrice.php
+++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/ConfigurableRegularPrice.php
@@ -39,14 +39,14 @@ class ConfigurableRegularPrice extends AbstractPrice implements ConfigurableRegu
     protected $priceResolver;
 
     /**
-     * @param \Magento\Framework\Pricing\Object\SaleableInterface $saleableItem
+     * @param \Magento\Framework\Pricing\SaleableInterface $saleableItem
      * @param float $quantity
      * @param \Magento\Framework\Pricing\Adjustment\CalculatorInterface $calculator
      * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
      * @param PriceResolverInterface $priceResolver
      */
     public function __construct(
-        \Magento\Framework\Pricing\Object\SaleableInterface $saleableItem,
+        \Magento\Framework\Pricing\SaleableInterface $saleableItem,
         $quantity,
         \Magento\Framework\Pricing\Adjustment\CalculatorInterface $calculator,
         \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/FinalPrice.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/FinalPrice.php
index 8a448ac045bd38be1151a935c8f79fcd2a6de8fe..3d7cfd251d54e466fe74514e16c1a58646b44d78 100644
--- a/app/code/Magento/ConfigurableProduct/Pricing/Price/FinalPrice.php
+++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/FinalPrice.php
@@ -17,14 +17,14 @@ class FinalPrice extends \Magento\Catalog\Pricing\Price\FinalPrice
     protected $values = [];
 
     /**
-     * @param \Magento\Framework\Pricing\Object\SaleableInterface $saleableItem
+     * @param \Magento\Framework\Pricing\SaleableInterface $saleableItem
      * @param float $quantity
      * @param \Magento\Framework\Pricing\Adjustment\CalculatorInterface $calculator
      * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
      * @param PriceResolverInterface $priceResolver
      */
     public function __construct(
-        \Magento\Framework\Pricing\Object\SaleableInterface $saleableItem,
+        \Magento\Framework\Pricing\SaleableInterface $saleableItem,
         $quantity,
         \Magento\Framework\Pricing\Adjustment\CalculatorInterface $calculator,
         \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/FinalPriceResolver.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/FinalPriceResolver.php
index c55dd7cd1b2b56d54c56636b8c746fa8352269e6..751c35ba05e5518a99f3ff3699a59eb995348242 100644
--- a/app/code/Magento/ConfigurableProduct/Pricing/Price/FinalPriceResolver.php
+++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/FinalPriceResolver.php
@@ -9,10 +9,10 @@ namespace Magento\ConfigurableProduct\Pricing\Price;
 class FinalPriceResolver implements PriceResolverInterface
 {
     /**
-     * @param \Magento\Framework\Pricing\Object\SaleableInterface $product
+     * @param \Magento\Framework\Pricing\SaleableInterface $product
      * @return float
      */
-    public function resolvePrice(\Magento\Framework\Pricing\Object\SaleableInterface $product)
+    public function resolvePrice(\Magento\Framework\Pricing\SaleableInterface $product)
     {
         return $product->getPriceInfo()->getPrice(\Magento\Catalog\Pricing\Price\FinalPrice::PRICE_CODE)
             ->getAmount()->getValue();
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/PriceResolverInterface.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/PriceResolverInterface.php
index 5aff5c12e16804f8d2b967833aea7eaea24a2a16..c0df9da9e190b3bf2a2a8dc7fb741cf1d926690d 100644
--- a/app/code/Magento/ConfigurableProduct/Pricing/Price/PriceResolverInterface.php
+++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/PriceResolverInterface.php
@@ -9,8 +9,8 @@ namespace Magento\ConfigurableProduct\Pricing\Price;
 interface PriceResolverInterface
 {
     /**
-     * @param \Magento\Framework\Pricing\Object\SaleableInterface $product
+     * @param \Magento\Framework\Pricing\SaleableInterface $product
      * @return float
      */
-    public function resolvePrice(\Magento\Framework\Pricing\Object\SaleableInterface $product);
+    public function resolvePrice(\Magento\Framework\Pricing\SaleableInterface $product);
 }
diff --git a/app/code/Magento/ConfigurableProduct/Pricing/Price/RegularPriceResolver.php b/app/code/Magento/ConfigurableProduct/Pricing/Price/RegularPriceResolver.php
index a8ac2e6d84bf3ad7da02a8db8bbab683c8e3aa90..8e00025121299fa9e51b5938b9aac266e2cb46d0 100644
--- a/app/code/Magento/ConfigurableProduct/Pricing/Price/RegularPriceResolver.php
+++ b/app/code/Magento/ConfigurableProduct/Pricing/Price/RegularPriceResolver.php
@@ -9,10 +9,10 @@ namespace Magento\ConfigurableProduct\Pricing\Price;
 class RegularPriceResolver implements PriceResolverInterface
 {
     /**
-     * @param \Magento\Framework\Pricing\Object\SaleableInterface $product
+     * @param \Magento\Framework\Pricing\SaleableInterface $product
      * @return float
      */
-    public function resolvePrice(\Magento\Framework\Pricing\Object\SaleableInterface $product)
+    public function resolvePrice(\Magento\Framework\Pricing\SaleableInterface $product)
     {
         return $product->getPrice();
     }
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/Builder/PluginTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/Builder/PluginTest.php
index 97b30870804c3f2d55ea0680467e59b9ea0fef23..7537e2b7fcb2a4e33453f0a596ee020996e5cb61 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/Builder/PluginTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Controller/Adminhtml/Product/Builder/PluginTest.php
@@ -86,7 +86,7 @@ class PluginTest extends \PHPUnit_Framework_TestCase
             'getIsUnique',
         ];
         $this->attributeMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             $attributeMethods,
             [],
             '',
@@ -111,7 +111,7 @@ class PluginTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->frontendAttrMock = $this->getMock(
-            'Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend',
+            'Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend',
             [],
             [],
             '',
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php
index 67c6a01be1f3cb81c5c7fbea95abdd89737fe304..ead7283f2d55761c8639fd3994305c4383f83a9f 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Helper/DataTest.php
@@ -139,7 +139,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
         $allowedProducts = [];
         for ($i = 1; $i <= 2; $i++) {
             $productMock = $this->getMock(
-                'Magento\Catalog\Model\Product', ['getData', 'getImage', 'getId', '__wakeup'], [], '', false
+                'Magento\Catalog\Model\Product', ['getData', 'getImage', 'getId', '__wakeup', 'getMediaGalleryImages'], [], '', false
             );
             $productMock->expects($this->any())
                 ->method('getData')
@@ -159,19 +159,17 @@ class DataTest extends \PHPUnit_Framework_TestCase
                 'attribute_id_1' => [
                     'attribute_code_value_1' => ['product_id_1', 'product_id_2'],
                 ],
-                'images' => [
-                    'attribute_id_1' => [
-                        'attribute_code_value_1' => [
-                            'product_id_1' => 'http://example.com/base_img_url',
-                            'product_id_2' => 'http://example.com/base_img_url_2',
-                        ],
-                    ],
-                    'attribute_id_2' => [
-                        'attribute_code_value_2' => [
-                            'product_id_1' => 'http://example.com/base_img_url',
-                            'product_id_2' => 'http://example.com/base_img_url_2',
-                        ],
+                'index' => [
+                    'product_id_1' => [
+                        'attribute_id_1' => 'attribute_code_value_1',
+                        'attribute_id_2' => 'attribute_code_value_2'
                     ],
+
+                    'product_id_2' => [
+                        'attribute_id_1' => 'attribute_code_value_1',
+                        'attribute_id_2' => 'attribute_code_value_2'
+                    ]
+
                 ],
                 'attribute_id_2' => [
                     'attribute_code_value_2' => ['product_id_1', 'product_id_2'],
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Attribute/LockValidatorTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Attribute/LockValidatorTest.php
index ce01ed030a183d815080329523a20c1596213956..71cac64a95d3782ad845d41bc00c3337bef42638 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Attribute/LockValidatorTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Attribute/LockValidatorTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\ConfigurableProduct\Test\Unit\Model\Attribute;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 class LockValidatorTest extends \PHPUnit_Framework_TestCase
@@ -16,7 +16,7 @@ class LockValidatorTest extends \PHPUnit_Framework_TestCase
     private $model;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
 
@@ -34,7 +34,7 @@ class LockValidatorTest extends \PHPUnit_Framework_TestCase
     {
         $helper = new ObjectManager($this);
 
-        $this->resource = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/ConfigurableAttributeDataTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/ConfigurableAttributeDataTest.php
index 1f7336d7e2363fcf6aeb01139612bed9ccc09e1b..74b71e7284c151d639b467b614cc30dbe7546578 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/ConfigurableAttributeDataTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/ConfigurableAttributeDataTest.php
@@ -22,7 +22,7 @@ class ConfigurableAttributeDataTest extends \PHPUnit_Framework_TestCase
     protected $configurableAttributeData;
 
     /**
-     * @var \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute|
+     * @var \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute|
      * \PHPUnit_Framework_MockObject_MockObject
      */
     protected $attributeMock;
@@ -47,7 +47,7 @@ class ConfigurableAttributeDataTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->attributeMock = $this->getMock(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute',
             [],
             [],
             '',
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/ConfigurableProductManagementTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/ConfigurableProductManagementTest.php
index 380e5736d1d1149748751e58a2af762543545205..fe708b8ccb2234fd2ecc9385289085b0d1a032f6 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/ConfigurableProductManagementTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/ConfigurableProductManagementTest.php
@@ -7,7 +7,7 @@
 namespace Magento\ConfigurableProduct\Test\Unit\Model;
 
 use Magento\ConfigurableProduct\Model\ConfigurableProductManagement;
-use Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\CollectionFactory;
+use Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\CollectionFactory;
 
 class ConfigurableProductManagementTest extends \PHPUnit_Framework_TestCase
 {
@@ -60,7 +60,7 @@ class ConfigurableProductManagementTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->productsFactoryMock = $this->getMock(
-            '\Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\CollectionFactory',
+            '\Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\CollectionFactory',
             ['create'],
             [],
             '',
@@ -80,7 +80,7 @@ class ConfigurableProductManagementTest extends \PHPUnit_Framework_TestCase
         $attributeOption = $this->getMock('\Magento\Eav\Model\Entity\Attribute\Option', [], [], '', false);
         $attributeOption->expects($this->once())->method('getData')->willReturn(['key' => 'value']);
 
-        $attribute = $this->getMock('\Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $attribute = $this->getMock('\Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $attribute->expects($this->any())->method('getOptions')->willReturn([$attributeOption]);
         $attribute->expects($this->once())->method('getAttributeCode')->willReturn(10);
 
@@ -110,7 +110,7 @@ class ConfigurableProductManagementTest extends \PHPUnit_Framework_TestCase
     {
         $statusEnabled = 1;
         $productsMock = $this->getMock(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\Collection',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection',
             [],
             [],
             '',
@@ -141,7 +141,7 @@ class ConfigurableProductManagementTest extends \PHPUnit_Framework_TestCase
     {
         $statusDisabled = 2;
         $productsMock = $this->getMock(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\Collection',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Entity/Product/Attribute/Group/AttributeMapper/PluginTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Entity/Product/Attribute/Group/AttributeMapper/PluginTest.php
index ca17ddfc60bd898a6a1f65c3a8abeb50922d65b6..32fbe333de0aeb9926acb384d9a7c9b0f9d83d0e 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Entity/Product/Attribute/Group/AttributeMapper/PluginTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Entity/Product/Attribute/Group/AttributeMapper/PluginTest.php
@@ -45,14 +45,14 @@ class PluginTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->attributeFactory = $this->getMockBuilder(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\AttributeFactory'
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\AttributeFactory'
         )
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
 
         $this->attribute = $this->getMockBuilder(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute'
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute'
         )
             ->setMethods(['getUsedAttributes', 'getAttributeId', '__wakeup'])
             ->disableOriginalConstructor()
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php
index 65fea03ce8930802a7a56b6e2a9c5e620d1d5090..d102adc3da1a049de8d82cea1937343b7258b3eb 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/LinkManagementTest.php
@@ -56,7 +56,7 @@ class LinkManagementTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->configurableType =
-            $this->getMockBuilder('Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable')
+            $this->getMockBuilder('Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable')
                 ->disableOriginalConstructor()->getMock();
 
         $this->object = $this->objectManagerHelper->getObject(
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/OptionRepositoryTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/OptionRepositoryTest.php
index fb7fedfa4e1dd6e0f6435a7a25bdd28c43e408f3..db131d2bb5cb6ca1519c97447c3840304b85093b 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/OptionRepositoryTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/OptionRepositoryTest.php
@@ -40,12 +40,12 @@ class OptionRepositoryTest extends \PHPUnit_Framework_TestCase
         $this->productRepositoryMock = $this->getMock('\Magento\Catalog\Api\ProductRepositoryInterface');
         $this->productMock = $this->getMock('\Magento\Catalog\Api\Data\ProductInterface');
         $this->configurableTypeResource = $this->getMockBuilder(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable'
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable'
         )
             ->disableOriginalConstructor()
             ->getMock();
         $this->optionResource = $this->getMockBuilder(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute'
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute'
         )
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Plugin/AroundProductRepositorySaveTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Plugin/AroundProductRepositorySaveTest.php
index 7197a3c6b83da33041dba8d8c31332f8d117dadf..4e812f684634f6e963d56324f2df1e5170b8a0d9 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Plugin/AroundProductRepositorySaveTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Plugin/AroundProductRepositorySaveTest.php
@@ -62,7 +62,7 @@ class AroundProductRepositorySaveTest extends \PHPUnit_Framework_TestCase
             'Magento\ConfigurableProduct\Api\OptionRepositoryInterface'
         );
         $this->configurableTypeFactoryMock = $this->getMock(
-            '\Magento\ConfigurableProduct\Model\Resource\Product\Type\ConfigurableFactory',
+            '\Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\ConfigurableFactory',
             ['create'],
             [],
             '',
@@ -198,7 +198,7 @@ class AroundProductRepositorySaveTest extends \PHPUnit_Framework_TestCase
             )->setMethods(['getProductAttribute'])
                 ->disableOriginalConstructor()
                 ->getMock();
-            $productAttributeMock = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Eav\Attribute')
+            $productAttributeMock = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Eav\Attribute')
                 ->disableOriginalConstructor()
                 ->getMock();
             $productAttributeMock->expects($this->once())
@@ -238,7 +238,7 @@ class AroundProductRepositorySaveTest extends \PHPUnit_Framework_TestCase
         $this->setupProducts($links, $configurableAttributeCode);
 
         $configurableTypeMock = $this->getMockBuilder(
-            '\Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable'
+            '\Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable'
         )->disableOriginalConstructor()->getMock();
         $this->configurableTypeFactoryMock->expects($this->once())
             ->method('create')
@@ -290,7 +290,7 @@ class AroundProductRepositorySaveTest extends \PHPUnit_Framework_TestCase
             ->willReturn($links);
 
         $configurableTypeMock = $this->getMockBuilder(
-            '\Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable'
+            '\Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable'
         )->disableOriginalConstructor()->getMock();
         $this->configurableTypeFactoryMock->expects($this->once())
             ->method('create')
@@ -338,7 +338,7 @@ class AroundProductRepositorySaveTest extends \PHPUnit_Framework_TestCase
             ->willReturn($links);
 
         $configurableTypeMock = $this->getMockBuilder(
-            '\Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable'
+            '\Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable'
         )->disableOriginalConstructor()->getMock();
         $this->configurableTypeFactoryMock->expects($this->once())
             ->method('create')
@@ -386,7 +386,7 @@ class AroundProductRepositorySaveTest extends \PHPUnit_Framework_TestCase
             ->willReturn($links);
 
         $configurableTypeMock = $this->getMockBuilder(
-            '\Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable'
+            '\Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable'
         )->disableOriginalConstructor()->getMock();
         $this->configurableTypeFactoryMock->expects($this->once())
             ->method('create')
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/ConfigurableTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/ConfigurableTest.php
index 3aa3327487b4d6180fa0b185fa6f8d45ef82c25b..ad3de64ab1043822e1ef9485b54fc98476cd4398 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/ConfigurableTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Product/Type/ConfigurableTest.php
@@ -85,7 +85,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
             ->setMethods([])
             ->getMockForAbstractClass();
         $this->_typeConfigurableFactory = $this->getMock(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\ConfigurableFactory',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\ConfigurableFactory',
             ['create', 'saveProducts'],
             [],
             '',
@@ -99,14 +99,14 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->_productCollectionFactory = $this->getMock(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\CollectionFactory',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->_attributeCollectionFactory = $this->getMock(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\CollectionFactory',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\CollectionFactory',
             ['create'],
             [],
             '',
@@ -192,7 +192,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($attribute));
 
         $attributeCollection = $this->getMockBuilder(
-            '\Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\Collection'
+            '\Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection'
         )->setMethods(['setProductFilter', 'addFieldToFilter', 'walk'])->disableOriginalConstructor()
             ->getMock();
         $this->_attributeCollectionFactory->expects($this->any())->method('create')
@@ -217,7 +217,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
     public function testCanUseAttribute()
     {
         $attribute = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             [
                 'getIsGlobal',
                 'getIsVisible',
@@ -249,7 +249,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
     public function testGetUsedProducts()
     {
         $attributeCollection = $this->getMockBuilder(
-            '\Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\Collection'
+            '\Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection'
         )->setMethods(['setProductFilter', 'addFieldToFilter', 'walk'])->disableOriginalConstructor()
             ->getMock();
         $attributeCollection->expects($this->any())->method('setProductFilter')->will($this->returnSelf());
@@ -288,7 +288,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
         $product->expects($this->any())->method('getData')
             ->will($this->returnValue(1));
         $productCollection = $this->getMockBuilder(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\Collection'
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection'
         )->setMethods(
             [
                 'setFlag',
@@ -341,7 +341,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
         $attributeFrontend->expects($this->any())->method('getLabel')->will($this->returnValue('Label'));
 
         $eavAttribute = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['getFrontend', 'getSource', 'getStoreLabel', '__wakeup', 'setStoreId', '__sleep'],
             [],
             '',
@@ -410,7 +410,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
         $product->expects($this->once())->method('getData')->with($configurableAttributes)->willReturn($expectedData);
 
         $attributeCollection = $this->getMockBuilder(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\Collection'
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection'
         )
             ->setMethods(['setProductFilter', 'orderByPosition', 'load'])
             ->disableOriginalConstructor()
@@ -423,7 +423,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
             ->method('process')
             ->with(
                 $this->isInstanceOf(
-                    'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\Collection'
+                    'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection'
                 )
             );
 
@@ -533,7 +533,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['getProductAttribute'])
             ->disableOriginalConstructor()
             ->getMock();
-        $attributeMock = $this->getMockBuilder('\Magento\Catalog\Model\Resource\Eav\Attribute')
+        $attributeMock = $this->getMockBuilder('\Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->setMethods(['getStoreLabel', 'getSourceModel'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -620,7 +620,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $productCollection = $this->getMockBuilder(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\Collection'
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection'
         )
             ->setMethods(
                 [
@@ -677,7 +677,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $productCollection = $this->getMockBuilder(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\Collection'
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection'
         )
             ->setMethods(
                 [
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Resource/Product/Type/ConfigurableTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/ResourceModel/Product/Type/ConfigurableTest.php
similarity index 92%
rename from app/code/Magento/ConfigurableProduct/Test/Unit/Model/Resource/Product/Type/ConfigurableTest.php
rename to app/code/Magento/ConfigurableProduct/Test/Unit/Model/ResourceModel/Product/Type/ConfigurableTest.php
index b774528a0c78a9806b9e0ef38e5fb8a26136abd3..ca218cf2ea5b20eaef4a636e2506898ccb9931e9 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/Resource/Product/Type/ConfigurableTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/ResourceModel/Product/Type/ConfigurableTest.php
@@ -4,14 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\ConfigurableProduct\Test\Unit\Model\Resource\Product\Type;
+namespace Magento\ConfigurableProduct\Test\Unit\Model\ResourceModel\Product\Type;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
 class ConfigurableTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable
+     * @var \Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable
      */
     protected $configurable;
 
@@ -21,12 +21,12 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
     protected $objectManagerHelper;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Relation|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Relation|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $relation;
 
@@ -34,13 +34,13 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
     {
         $connectionMock = $this->getMockBuilder('\Magento\Framework\DB\Adapter\AdapterInterface')->getMock();
 
-        $this->resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resource->expects($this->any())->method('getConnection')->will($this->returnValue($connectionMock));
-        $this->relation = $this->getMock('Magento\Catalog\Model\Resource\Product\Relation', [], [], '', false);
+        $this->relation = $this->getMock('Magento\Catalog\Model\ResourceModel\Product\Relation', [], [], '', false);
 
         $this->objectManagerHelper = new ObjectManagerHelper($this);
         $this->configurable = $this->objectManagerHelper->getObject(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable',
             [
                 'resource' => $this->resource,
                 'catalogProductRelation' => $this->relation
@@ -84,7 +84,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
     public function testGetConfigurableOptions()
     {
         $configurable = $this->getMock(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable',
             [
                 'getTable',
                 'getConnection',
@@ -152,7 +152,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnSelf());
 
         $superAttribute = $this->getMock(
-            '\Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute',
+            '\Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute',
             [
                 'getBackendTable',
                 'getAttributeId',
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/SuggestedAttributeListTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/SuggestedAttributeListTest.php
index 3bb267383c111ae52a76f35cc9cb777aa1c27a61..d4c06d5a4378315149593e9cc42ea720276a2068 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Model/SuggestedAttributeListTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Model/SuggestedAttributeListTest.php
@@ -50,14 +50,14 @@ class SuggestedAttributeListTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceHelperMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Helper',
+            'Magento\Catalog\Model\ResourceModel\Helper',
             [],
             [],
             '',
             false
         );
         $this->collectionMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Attribute\Collection',
+            'Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection',
             [],
             [],
             '',
@@ -92,7 +92,7 @@ class SuggestedAttributeListTest extends \PHPUnit_Framework_TestCase
         );
         $methods = ['getId', 'getFrontendLabel', 'getAttributeCode', 'getSource'];
         $this->attributeMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             $methods,
             [],
             '',
diff --git a/app/code/Magento/ConfigurableProduct/Test/Unit/Plugin/Model/Resource/ProductTest.php b/app/code/Magento/ConfigurableProduct/Test/Unit/Plugin/Model/ResourceModel/ProductTest.php
similarity index 92%
rename from app/code/Magento/ConfigurableProduct/Test/Unit/Plugin/Model/Resource/ProductTest.php
rename to app/code/Magento/ConfigurableProduct/Test/Unit/Plugin/Model/ResourceModel/ProductTest.php
index c88b142863b36ccb889d717ab4149fb05c958b3b..d114e1f424b191cabb02e8507ccedcfed590e483 100644
--- a/app/code/Magento/ConfigurableProduct/Test/Unit/Plugin/Model/Resource/ProductTest.php
+++ b/app/code/Magento/ConfigurableProduct/Test/Unit/Plugin/Model/ResourceModel/ProductTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\ConfigurableProduct\Test\Unit\Plugin\Model\Resource;
+namespace Magento\ConfigurableProduct\Test\Unit\Plugin\Model\ResourceModel;
 
 use Magento\Catalog\Model\Product\Type;
 use Magento\ConfigurableProduct\Model\Product\Type\Configurable;
@@ -13,7 +13,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
 {
     public function testBeforeSaveConfigurable()
     {
-        $subject = $this->getMock('Magento\Catalog\Model\Resource\Product', [], [], '', false);
+        $subject = $this->getMock('Magento\Catalog\Model\ResourceModel\Product', [], [], '', false);
         $object = $this->getMock('Magento\Catalog\Model\Product', ['getTypeId', 'getTypeInstance'], [], '', false);
         $type = $this->getMock(
             'Magento\ConfigurableProduct\Model\Product\Type\Configurable',
@@ -27,7 +27,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         $object->expects($this->once())->method('getTypeId')->will($this->returnValue(Configurable::TYPE_CODE));
         $object->expects($this->once())->method('getTypeInstance')->will($this->returnValue($type));
 
-        $product = new \Magento\ConfigurableProduct\Plugin\Model\Resource\Product();
+        $product = new \Magento\ConfigurableProduct\Plugin\Model\ResourceModel\Product();
         $product->beforeSave(
             $subject,
             $object
@@ -36,12 +36,12 @@ class ProductTest extends \PHPUnit_Framework_TestCase
 
     public function testBeforeSaveSimple()
     {
-        $subject = $this->getMock('Magento\Catalog\Model\Resource\Product', [], [], '', false);
+        $subject = $this->getMock('Magento\Catalog\Model\ResourceModel\Product', [], [], '', false);
         $object = $this->getMock('Magento\Catalog\Model\Product', ['getTypeId', 'getTypeInstance'], [], '', false);
         $object->expects($this->once())->method('getTypeId')->will($this->returnValue(Type::TYPE_SIMPLE));
         $object->expects($this->never())->method('getTypeInstance');
 
-        $product = new \Magento\ConfigurableProduct\Plugin\Model\Resource\Product();
+        $product = new \Magento\ConfigurableProduct\Plugin\Model\ResourceModel\Product();
         $product->beforeSave(
             $subject,
             $object
diff --git a/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php b/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php
index 8ed9f3d718e21f27955c53048d57721f89f61229..551c8a5f9ba817987980cab217563d66055d53fa 100644
--- a/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php
+++ b/app/code/Magento/ConfigurableProduct/Ui/Component/Listing/AssociatedProduct/Filters.php
@@ -5,43 +5,61 @@
  */
 namespace Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct;
 
-class Filters extends \Magento\Ui\Component\Filters
+use Magento\Catalog\Ui\Component\FilterFactory;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory;
+use Magento\Framework\View\Element\UiComponent\ObserverInterface;
+use Magento\Framework\View\Element\UiComponentInterface;
+
+class Filters implements ObserverInterface
 {
-    /** @var \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface */
-    protected $attributeRepository;
+    /**
+     * @var FilterFactory
+     */
+    protected $filterFactory;
 
     /**
-     * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context
-     * @param \Magento\Catalog\Ui\Component\FilterFactory $filterFactory
-     * @param \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface $attributeRepository
-     * @param array $components
-     * @param array $data
+     * @var CollectionFactory
+     */
+    protected $attributeCollectionFactory;
+
+    /**
+     * @param FilterFactory $filterFactory
+     * @param CollectionFactory $attributeCollectionFactory
      */
     public function __construct(
-        \Magento\Framework\View\Element\UiComponent\ContextInterface $context,
-        \Magento\Catalog\Ui\Component\FilterFactory $filterFactory,
-        \Magento\Catalog\Ui\Component\Listing\Attribute\RepositoryInterface $attributeRepository,
-        array $components = [],
-        array $data = []
+        FilterFactory $filterFactory,
+        CollectionFactory $attributeCollectionFactory
     ) {
-        parent::__construct($context, $components, $data);
         $this->filterFactory = $filterFactory;
-        $this->attributeRepository = $attributeRepository;
+        $this->attributeCollectionFactory = $attributeCollectionFactory;
     }
 
     /**
      * {@inheritdoc}
      */
-    public function prepare()
+    public function update(UiComponentInterface $component)
     {
-        $attributeIds = $this->getContext()->getRequestParam('attributes_codes');
+        if (!$component instanceof \Magento\Ui\Component\Filters) {
+            return;
+        }
+
+        $attributeIds = $component->getContext()->getRequestParam('attribute_ids');
         if ($attributeIds) {
-            foreach ($this->attributeRepository->getList() as $attribute) {
-                $filter = $this->filterFactory->create($attribute, $this->getContext(), ['component' => '']);
+            foreach ($this->getAttributes($attributeIds) as $attribute) {
+                $filter = $this->filterFactory->create($attribute, $component->getContext());
                 $filter->prepare();
-                $this->addComponent($attribute->getAttributeCode(), $filter);
+                $component->addComponent($attribute->getAttributeCode(), $filter);
             }
         }
-        parent::prepare();
+    }
+
+    /**
+     * @param array $attributeIds
+     * @return mixed
+     */
+    protected function getAttributes($attributeIds)
+    {
+        $attributeCollection = $this->attributeCollectionFactory->create();
+        return $attributeCollection->addFieldToFilter('attribute_code', ['in' => $attributeIds]);
     }
 }
diff --git a/app/code/Magento/ConfigurableProduct/Ui/DataProvider/Attributes.php b/app/code/Magento/ConfigurableProduct/Ui/DataProvider/Attributes.php
index 69506ea143107f842ef327c55bae7be76d3b1e2c..cfafd342a7c89972f75f87ff9fb466e75681d8ee 100644
--- a/app/code/Magento/ConfigurableProduct/Ui/DataProvider/Attributes.php
+++ b/app/code/Magento/ConfigurableProduct/Ui/DataProvider/Attributes.php
@@ -9,7 +9,7 @@ namespace Magento\ConfigurableProduct\Ui\DataProvider;
 class Attributes extends \Magento\Ui\DataProvider\AbstractDataProvider
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     protected $collection;
 
@@ -35,7 +35,7 @@ class Attributes extends \Magento\Ui\DataProvider\AbstractDataProvider
     }
 
     /**
-     * @return \Magento\Catalog\Model\Resource\Product\Attribute\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection
      */
     public function getCollection()
     {
diff --git a/app/code/Magento/ConfigurableProduct/composer.json b/app/code/Magento/ConfigurableProduct/composer.json
index bbf56b1cb0475391d4b23edd114833dc75ec34a7..afc2c930378c65e0b20409ca3bb7f483b7d22846 100644
--- a/app/code/Magento/ConfigurableProduct/composer.json
+++ b/app/code/Magento/ConfigurableProduct/composer.json
@@ -17,8 +17,10 @@
         "magento/module-ui": "self.version"
     },
     "suggest": {
-      "magento/module-webapi": "1.0.0-beta",
-      "magento/module-sales": "1.0.0-beta"
+        "magento/module-webapi": "1.0.0-beta",
+        "magento/module-sales": "1.0.0-beta",
+        "magento/module-configurable-sample-data": "Sample Data version:1.0.0-beta",
+        "magento/module-product-links-sample-data": "Sample Data version:1.0.0-beta"
     },
     "type": "magento2-module",
     "version": "1.0.0-beta",
diff --git a/app/code/Magento/ConfigurableProduct/etc/adminhtml/di.xml b/app/code/Magento/ConfigurableProduct/etc/adminhtml/di.xml
index bfcfd49f5e2ee6646332e39bd3be3874083684ce..01de7794b4ab00893e8a99d7f8bfa8dc79a8cc50 100644
--- a/app/code/Magento/ConfigurableProduct/etc/adminhtml/di.xml
+++ b/app/code/Magento/ConfigurableProduct/etc/adminhtml/di.xml
@@ -21,8 +21,8 @@
             <argument name="inputTypeFactory" xsi:type="object">Magento\Catalog\Model\System\Config\Source\InputtypeFactory</argument>
         </arguments>
     </type>
-    <type name="Magento\Catalog\Model\Resource\Product">
-        <plugin name="reload_attributes" type="Magento\ConfigurableProduct\Plugin\Model\Resource\Product" />
+    <type name="Magento\Catalog\Model\ResourceModel\Product">
+        <plugin name="reload_attributes" type="Magento\ConfigurableProduct\Plugin\Model\ResourceModel\Product" />
     </type>
     <type name="Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct\Columns">
         <arguments>
diff --git a/app/code/Magento/ConfigurableProduct/etc/di.xml b/app/code/Magento/ConfigurableProduct/etc/di.xml
index a36abf69f5d48ef81f9ef406c03057f330dec018..ff1173c2e0908c55d8ef1f8fb338eafd562ed4eb 100644
--- a/app/code/Magento/ConfigurableProduct/etc/di.xml
+++ b/app/code/Magento/ConfigurableProduct/etc/di.xml
@@ -35,7 +35,7 @@
             </argument>
         </arguments>
     </type>
-    <type name="Magento\Sales\Model\Resource\Report\Bestsellers">
+    <type name="Magento\Sales\Model\ResourceModel\Report\Bestsellers">
         <arguments>
             <argument name="ignoredProductTypes" xsi:type="array">
                 <item name="configurable" xsi:type="const">\Magento\ConfigurableProduct\Model\Product\Type\Configurable::TYPE_CODE</item>
@@ -45,7 +45,7 @@
     <type name="Magento\Eav\Model\Entity\Setup\PropertyMapper\Composite">
         <arguments>
             <argument name="propertyMappers" xsi:type="array">
-                <item name="configurable" xsi:type="string">Magento\ConfigurableProduct\Model\Resource\Setup\PropertyMapper</item>
+                <item name="configurable" xsi:type="string">Magento\ConfigurableProduct\Model\ResourceModel\Setup\PropertyMapper</item>
             </argument>
         </arguments>
     </type>
diff --git a/app/code/Magento/ConfigurableProduct/etc/product_types.xml b/app/code/Magento/ConfigurableProduct/etc/product_types.xml
index 0462f57a0fb9de1bf607066b1958db9160da1dad..3d7ca9a698f6befd584a1278afb410ccedc948c7 100644
--- a/app/code/Magento/ConfigurableProduct/etc/product_types.xml
+++ b/app/code/Magento/ConfigurableProduct/etc/product_types.xml
@@ -8,8 +8,8 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Catalog:etc/product_types.xsd">
     <type name="configurable" label="Configurable Product" modelInstance="Magento\ConfigurableProduct\Model\Product\Type\Configurable" composite='true' indexPriority="30" sortOrder="20">
         <priceModel instance="Magento\ConfigurableProduct\Model\Product\Type\Configurable\Price" />
-        <indexerModel instance="Magento\ConfigurableProduct\Model\Resource\Product\Indexer\Price\Configurable" />
-        <stockIndexerModel instance="Magento\ConfigurableProduct\Model\Resource\Indexer\Stock\Configurable" />
+        <indexerModel instance="Magento\ConfigurableProduct\Model\ResourceModel\Product\Indexer\Price\Configurable" />
+        <stockIndexerModel instance="Magento\ConfigurableProduct\Model\ResourceModel\Indexer\Stock\Configurable" />
         <customAttributes>
             <attribute name="refundable" value="true"/>
         </customAttributes>
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/new/created.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/new/created.phtml
index 92a4924eab2b82dda46f626952720cebe3aa75bf..78fda69531c9fed40bf93877548d90a4244524c4 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/new/created.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/new/created.phtml
@@ -15,7 +15,7 @@
     } else {
         $('[data-form=edit-product]').trigger('changeAttributeSet', set);
     }
-    $('#create_new_attribute').dialog('close');
+    $('#create_new_attribute').modal('closeModal');
 
 })(window.parent.jQuery);
 </script>
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml
index d78e50b66be1f1e7d334a1078a88ad7a0b17a39e..ea036bbf5d6c0eedfd3cb70d46125ac1d9c80938 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/attribute/set/js.phtml
@@ -9,7 +9,10 @@
 
 ?>
 <script>
-require(["tree-panel"], function(){
+require([
+    "Magento_Ui/js/modal/alert",
+    "tree-panel"
+], function(alert){
 ConfigurableNodeExists = function(currentNode) {
     for (var i in currentNode.childNodes ) {
         if (currentNode.childNodes[i].id) {
@@ -25,7 +28,9 @@ ConfigurableNodeExists = function(currentNode) {
 editSet.submit = editSet.submit.wrap(function(original) {
     if (editSet.currentNode){
         if (ConfigurableNodeExists(editSet.currentNode)) {
-            alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This group contains attributes used in configurable products. Please move these attributes to another group and try again.')) ?>');
+            alert({
+                content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This group contains attributes used in configurable products. Please move these attributes to another group and try again.')) ?>'
+            });
             return;
         }
     }
@@ -34,7 +39,9 @@ editSet.submit = editSet.submit.wrap(function(original) {
 
 editSet.rightBeforeAppend = editSet.rightBeforeAppend.wrap(function(original, tree, nodeThis, node, newParent) {
     if (node.attributes.is_configurable == 1) {
-        alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>');
+        alert({
+            content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>'
+        });
         return false;
     }
     return original(tree, nodeThis, node, newParent);
@@ -42,7 +49,9 @@ editSet.rightBeforeAppend = editSet.rightBeforeAppend.wrap(function(original, tr
 
 editSet.rightBeforeInsert = editSet.rightBeforeInsert.wrap(function(original, tree, nodeThis, node, newParent) {
     if (node.attributes.is_configurable == 1) {
-        alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>');
+        alert({
+            content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('This attribute is used in configurable products. You cannot remove it from the product template.')) ?>'
+        });
         return false;
     }
     return original(tree, nodeThis, node, newParent);
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml
index 9c58b7a7fb6a6ce1e9151fe775f2adaf6c10d74c..8a1b3edc8053e65e07b1f9c59dd2887d0f5c1bb0 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/catalog/product/edit/attribute/steps/bulk.phtml
@@ -225,14 +225,6 @@
                                 </div>
                             </fieldset>
                         </div>
-
-                        <button type="button"
-                                class="action-close"
-                                data-role="close-panel"
-                                title="<?= $block->escapeHtml(__('Close panel')) ?>">
-                            <span><?= /* @escapeNotVerified */  __('Close panel') ?></span>
-                        </button>
-                        <div class="image-pointer"></div>
                     </div>
                 </script>
 
@@ -441,14 +433,6 @@
                                         </div>
                                     </fieldset>
                                 </div>
-
-                                <button type="button"
-                                        class="action-close"
-                                        data-role="close-panel"
-                                        title="<?= $block->escapeHtml(__('Close panel')) ?>">
-                                    <span><?= /* @escapeNotVerified */  __('Close panel') ?></span>
-                                </button>
-                                <div class="image-pointer"></div>
                             </div>
                         </script>
 
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
index 111ab842f22a9143806406e44411b7cea0584d78..704568283748a660aed1941410b28ebf1e99b622 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/templates/product/configurable/affected-attribute-set-selector/js.phtml
@@ -93,6 +93,7 @@
                     }
                 },{
                     text: '<?php /* @escapeNotVerified */ echo __('Cancel'); ?>',
+                    id: '<?php /* @escapeNotVerified */ echo $block->getJsId('close-button') ?>',
                     'class': 'action-close',
                     click: function() {
                         $form.modal('closeModal');
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
index 8212cbc0c4a22e90c63a9473f6875b54b06b82c1..7fd14ff394f9bff99203fe4af1ace655faf37472 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/configurable_associated_product_listing.xml
@@ -37,73 +37,24 @@
                 <item name="template" xsi:type="string">ui/grid/toolbar</item>
             </item>
         </argument>
-        <filters name="listing_filters" class="Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct\Filters">
+        <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
+                    <item name="columnsProvider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns</item>
                     <item name="params" xsi:type="array">
                         <item name="filters_modifier" xsi:type="array" />
                     </item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.listing_filters</item>
+                        <item name="imports" xsi:type="array">
+                            <item name="visible" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns.${ $.index }:visible</item>
+                        </item>
+                    </item>
+                    <item name="observers" xsi:type="array">
+                        <item name="filters" xsi:type="object">Magento\ConfigurableProduct\Ui\Component\Listing\AssociatedProduct\Filters</item>
                     </item>
                 </item>
             </argument>
-            <filterInput name="entity_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="component" xsi:type="string" />
-                        <item name="dataScope" xsi:type="string">entity_id</item>
-                        <item name="label" xsi:type="string" translate="true">Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">name</item>
-                        <item name="label" xsi:type="string" translate="true">Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="sku">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">sku</item>
-                        <item name="label" xsi:type="string" translate="true">SKU</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="price">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">price</item>
-                        <item name="label" xsi:type="string" translate="true">Price</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
             <filterSelect name="status">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Catalog\Model\Product\Attribute\Source\Status</argument>
@@ -121,29 +72,6 @@
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">configurable_associated_product_listing.configurable_associated_product_listing.product_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
-                    <item name="options" xsi:type="array">
-                        <item name="20" xsi:type="array">
-                            <item name="value" xsi:type="number">20</item>
-                            <item name="label" xsi:type="string" translate="true">20</item>
-                        </item>
-                        <item name="30" xsi:type="array">
-                            <item name="value" xsi:type="number">30</item>
-                            <item name="label" xsi:type="string" translate="true">30</item>
-                        </item>
-                        <item name="50" xsi:type="array">
-                            <item name="value" xsi:type="number">50</item>
-                            <item name="label" xsi:type="string" translate="true">50</item>
-                        </item>
-                        <item name="100" xsi:type="array">
-                            <item name="value" xsi:type="number">100</item>
-                            <item name="label" xsi:type="string" translate="true">100</item>
-                        </item>
-                        <item name="200" xsi:type="array">
-                            <item name="value" xsi:type="number">200</item>
-                            <item name="label" xsi:type="string" translate="true">200</item>
-                        </item>
-                    </item>
                 </item>
             </argument>
         </paging>
@@ -159,31 +87,22 @@
                             <item name="0" xsi:type="string">${ $.$data.rowIndex }</item>
                         </item>
                     </item>
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="sortOrder" xsi:type="number">0</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="entity_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                     <item name="sortOrder" xsi:type="number">10</item>
                 </item>
@@ -191,15 +110,12 @@
         </column>
         <column name="thumbnail" class="Magento\Catalog\Ui\Component\Listing\Columns\Thumbnail">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/thumbnail</item>
                     <item name="add_field" xsi:type="boolean">true</item>
                     <item name="sortable" xsi:type="boolean">false</item>
                     <item name="altField" xsi:type="string">name</item>
                     <item name="has_preview" xsi:type="string">1</item>
-                    <item name="dataType" xsi:type="string">text</item>
                     <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Thumbnail</item>
                     <item name="sortOrder" xsi:type="number">20</item>
@@ -208,13 +124,9 @@
         </column>
         <column name="name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="add_field" xsi:type="boolean">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Name</item>
                     <item name="sortOrder" xsi:type="number">30</item>
                 </item>
@@ -222,12 +134,8 @@
         </column>
         <column name="sku">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">SKU</item>
                     <item name="sortOrder" xsi:type="number">60</item>
                 </item>
@@ -235,13 +143,9 @@
         </column>
         <column name="price" class="Magento\Catalog\Ui\Component\Listing\Columns\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="add_field" xsi:type="boolean">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Price</item>
                     <item name="sortOrder" xsi:type="number">70</item>
                 </item>
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
index e72edb975aede0f02d705f2a4f55de072ef3ba9a..edf1f8cae1c9ebb9bd8a2ca89a24ebaaa296c5cf 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/ui_component/product_attributes_listing.xml
@@ -40,17 +40,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">product_attributes_listing</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/columns</item>
@@ -60,15 +56,14 @@
                     </item>
                 </item>
             </argument>
-        </container>
+        </component>
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="links" xsi:type="array">
                         <item name="applied" xsi:type="string">not-save-filter</item>
                     </item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">product_attributes_listing.product_attributes_listing.product_attributes_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">product_attributes_listing.product_attributes_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -76,99 +71,11 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">product_attributes_listing.product_attributes_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">product_attributes_listing.product_attributes_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">product_attributes_listing.product_attributes_listing.product_attributes_columns:${ $.index }.visible</item>
                         </item>
                     </item>
                 </item>
             </argument>
-            <filterInput name="attribute_code">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">attribute_code</item>
-                        <item name="label" xsi:type="string" translate="true">Attribute Code</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="frontend_label">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">frontend_label</item>
-                        <item name="label" xsi:type="string" translate="true">Attribute Label</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="is_required">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_required</item>
-                        <item name="label" xsi:type="string" translate="true">Required</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="is_user_defined">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_user_defined</item>
-                        <item name="label" xsi:type="string" translate="true">System</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="is_visible">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_visible</item>
-                        <item name="label" xsi:type="string" translate="true">Visible</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="is_global">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Catalog\Model\Attribute\Source\Scopes</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_global</item>
-                        <item name="label" xsi:type="string" translate="true">Scope</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="is_searchable">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_searchable</item>
-                        <item name="label" xsi:type="string" translate="true">Searchable</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="is_comparable">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Yesno</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_comparable</item>
-                        <item name="label" xsi:type="string" translate="true">Comparable</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
         </filters>
         <paging name="listing_paging">
             <argument name="data" xsi:type="array">
@@ -178,7 +85,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">product_attributes_listing.product_attributes_listing.product_attributes_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -191,7 +97,6 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">product_attributes_listing.product_attributes_listing.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -200,39 +105,27 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">attribute_id</item>
                     <item name="sortOrder" xsi:type="number">0</item>
-                    <item name="controlVisibility" xsi:type="string">false</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="attribute_code">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Attribute Code</item>
                 </item>
             </argument>
         </column>
         <column name="frontend_label">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Attribute Label</item>
                 </item>
             </argument>
@@ -240,12 +133,10 @@
         <column name="is_required">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Required</item>
                 </item>
             </argument>
@@ -253,12 +144,10 @@
         <column name="is_user_defined">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">System</item>
                 </item>
             </argument>
@@ -266,12 +155,10 @@
         <column name="is_visible">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Visible</item>
                 </item>
             </argument>
@@ -279,12 +166,10 @@
         <column name="is_global">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Catalog\Model\Attribute\Source\Scopes</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Scope</item>
                 </item>
             </argument>
@@ -292,12 +177,10 @@
         <column name="is_searchable">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Searchable</item>
                 </item>
             </argument>
@@ -305,12 +188,10 @@
         <column name="is_comparable">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\Config\Model\Config\Source\Yesno</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Comparable</item>
                 </item>
             </argument>
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js
index 39267f93a149ee3247773d529e7ac8cd293e2860..37d52c6e146895267a96f72e608e96debd4bd65e 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/product-grid.js
@@ -115,9 +115,9 @@ define([
             this.callbackName = callbackName;
             this.productsMassAction(function (massActionComponent) {
                 this.productsColumns().elems().each(function (rowElement) {
-                    rowElement.disableAction(showMassActionColumn);
+                    rowElement.disableAction = showMassActionColumn;
                 });
-                massActionComponent.visible(showMassActionColumn);
+                massActionComponent.visible = showMassActionColumn;
             }.bind(this));
             this._setFilter(filterData);
             this._initGrid(filterData);
@@ -129,10 +129,10 @@ define([
          */
         close: function (rowIndex) {
             try {
-                if (this.productsMassAction().selected().length) {
+                if (this.productsMassAction().selected.length) {
                     this.variationsComponent()[this.callbackName](this.productsMassAction()
                         .selected.map(this.getProductById.bind(this)));
-                    this.productsMassAction().selected([]);
+                    this.productsMassAction().deselectAll();
                 } else if (!_.isNull(rowIndex)) {
                     this.variationsComponent()[this.callbackName]([this.getProductByIndex(rowIndex)]);
                 }
@@ -257,7 +257,7 @@ define([
         _handleManualGridOpening: function (data) {
             if (data.items.length && this.callbackName == 'appendProducts') {
                 this.productsColumns().elems().each(function (rowElement) {
-                    rowElement.disableAction(true);
+                    rowElement.disableAction = true;
                 });
 
                 this._disableRows(data.items);
@@ -314,12 +314,14 @@ define([
          */
         _getVariationKeyMap: function (items) {
             this._variationKeyMap = {};
+
             _.each(items, function (row) {
                 this._variationKeyMap[row['entity_id']] = _.values(
                     _.pick(row, this._getAttributesCodes())
                 ).sort().join('-');
 
-            }.bind(this));
+            }, this);
+
             return this._variationKeyMap;
         },
 
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
index 435a7ace21418d35de1bf96cf4b24b490315258b..5f4af9cd5e3e2e777c05fe58bd5760e938654661 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/bulk.js
@@ -12,9 +12,10 @@ define([
     'underscore',
     'Magento_Ui/js/lib/collapsible',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/file-uploader',
     'mage/translate'
-], function (Component, $, ko, _, Collapsible, mageTemplate) {
+], function (Component, $, ko, _, Collapsible, mageTemplate, alert) {
     'use strict';
 
     return Component.extend({
@@ -365,7 +366,9 @@ define([
                                 $('#' + data.fileId)
                                     .delay(2000)
                                     .hide('highlight');
-                                alert($.mage.__('We don\'t recognize or support this file extension type.'));
+                                alert({
+                                    content: $.mage.__('We don\'t recognize or support this file extension type.')
+                                });
                             }
                             $('#' + data.fileId).remove();
                         },
diff --git a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
index 43c040facf544c8362e30219a16fdff667d36874..862ffe05a6cfc78bfa750cce52b2c2fef1258273 100644
--- a/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
+++ b/app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
@@ -8,8 +8,9 @@ define([
     'uiComponent',
     'jquery',
     'ko',
-    'underscore'
-], function (Component, $, ko, _) {
+    'underscore',
+    'Magento_Ui/js/modal/alert'
+], function (Component, $, ko, _, alert) {
     'use strict';
 
     function UserException(message) {
@@ -337,7 +338,9 @@ define([
                                 parentElement.find('[name$="[image]"]').val(data.result.file);
                                 parentElement.find('[data-toggle=dropdown]').dropdown().show();
                             } else {
-                                alert($.mage.__('We don\'t recognize or support this file extension type.'));
+                                alert({
+                                    content: $.mage.__('We don\'t recognize or support this file extension type.')
+                                });
                             }
                         },
                         start: function (event) {
diff --git a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
index 2fd83c511c802876486a57802c6a4ffe2fec0780..c2f0e189946c1d0e543bfd7bf2bf73651aa309e2 100644
--- a/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
+++ b/app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
@@ -4,30 +4,37 @@
  */
 /*jshint browser:true jquery:true*/
 define([
-    "jquery",
-    "underscore",
-    "mage/template",
-    "priceUtils",
-    "priceBox",
-    "jquery/ui",
-    "jquery/jquery.parsequery"
-], function($, _, mageTemplate, utils){
+    'jquery',
+    'underscore',
+    'mage/template',
+    'priceUtils',
+    'priceBox',
+    'jquery/ui',
+    'jquery/jquery.parsequery'
+], function ($, _, mageTemplate) {
+    'use strict';
 
     $.widget('mage.configurable', {
         options: {
             superSelector: '.super-attribute-select',
             selectSimpleProduct: '[name="selected_configurable_option"]',
             priceHolderSelector: '.price-box',
+            spConfig: {},
             state: {},
             priceFormat: {},
             optionTemplate: '<%- data.label %>' +
-                            '<% if (data.finalPrice.value) { %>' +
-                                ' <%- data.finalPrice.formatted %>' +
-                            '<% } %>',
-            mediaGallerySelector: '[data-role=media-gallery]'
+            '<% if (data.finalPrice.value) { %>' +
+            ' <%- data.finalPrice.formatted %>' +
+            '<% } %>',
+            mediaGallerySelector: '[data-gallery-role=gallery-placeholder]',
+            mediaGalleryInitial: null
         },
 
-        _create: function() {
+        /**
+         * Creates widget
+         * @private
+         */
+        _create: function () {
             // Initial setting of various option values
             this._initializeOptions();
 
@@ -51,29 +58,33 @@ define([
          * Initialize tax configuration, initial settings, and options values.
          * @private
          */
-        _initializeOptions: function() {
-            var priceBoxOptions = $(this.options.priceHolderSelector).priceBox('option');
+        _initializeOptions: function () {
+            var options = this.options,
+                gallery = $(options.mediaGallerySelector),
+                priceBoxOptions = $(this.options.priceHolderSelector).priceBox('option').priceConfig || null;
 
-            if(priceBoxOptions.priceConfig && priceBoxOptions.priceConfig.optionTemplate) {
-                this.options.optionTemplate = priceBoxOptions.priceConfig.optionTemplate;
+            if (priceBoxOptions && priceBoxOptions.optionTemplate) {
+                options.optionTemplate = priceBoxOptions.optionTemplate;
             }
 
-            if(priceBoxOptions.priceConfig && priceBoxOptions.priceConfig.priceFormat) {
-                this.options.priceFormat = priceBoxOptions.priceConfig.priceFormat;
+            if (priceBoxOptions && priceBoxOptions.priceFormat) {
+                options.priceFormat = priceBoxOptions.priceFormat;
             }
-            this.options.optionTemplate = mageTemplate(this.options.optionTemplate);
+            options.optionTemplate = mageTemplate(options.optionTemplate);
+
+            options.settings = options.spConfig.containerId ?
+                $(options.spConfig.containerId).find(options.superSelector) :
+                $(options.superSelector);
 
-            this.options.settings = (this.options.spConfig.containerId) ?
-                $(this.options.spConfig.containerId).find(this.options.superSelector) :
-                $(this.options.superSelector);
+            options.values = options.spConfig.defaultValues || {};
+            options.parentImage = $('[data-role=base-image-container] img').attr('src');
 
-            this.options.values = this.options.spConfig.defaultValues || {};
-            this.options.parentImage = $('[data-role=base-image-container] img').attr('src');
+            this.inputSimpleProduct = this.element.find(options.selectSimpleProduct);
 
-            this.initialGalleryImages = $(this.options.mediaGallerySelector).data('mageGallery')
-                ? $(this.options.mediaGallerySelector).gallery('option', 'images')
-                : [];
-            this.inputSimpleProduct = this.element.find(this.options.selectSimpleProduct);
+            gallery.on('gallery:loaded', function () {
+                var galleryObject = gallery.data('gallery');
+                options.mediaGalleryInitial = galleryObject.returnCurrentImages();
+            });
         },
 
         /**
@@ -81,11 +92,13 @@ define([
          * initialized inputs values.
          * @private
          */
-        _overrideDefaults: function() {
+        _overrideDefaults: function () {
             var hashIndex = window.location.href.indexOf('#');
+
             if (hashIndex !== -1) {
                 this._parseQueryParams(window.location.href.substr(hashIndex + 1));
             }
+
             if (this.options.spConfig.inputsInitialized) {
                 this._setValuesByAttribute();
             }
@@ -94,12 +107,15 @@ define([
         /**
          * Parse query parameters from a query string and set options values based on the
          * key value pairs of the parameters.
-         * @param queryString URL query string containing query parameters.
+         * @param {*} queryString - URL query string containing query parameters.
          * @private
          */
-        _parseQueryParams: function(queryString) {
-            var queryParams = $.parseQuery({query: queryString});
-            $.each(queryParams, $.proxy(function(key, value) {
+        _parseQueryParams: function (queryString) {
+            var queryParams = $.parseQuery({
+                query: queryString
+            });
+
+            $.each(queryParams, $.proxy(function (key, value) {
                 this.options.values[key] = value;
             }, this));
         },
@@ -109,11 +125,13 @@ define([
          * identifier.
          * @private
          */
-        _setValuesByAttribute: function() {
+        _setValuesByAttribute: function () {
             this.options.values = {};
-            $.each(this.options.settings, $.proxy(function(index, element) {
+            $.each(this.options.settings, $.proxy(function (index, element) {
+                var attributeId;
+
                 if (element.value) {
-                    var attributeId = element.id.replace(/[a-z]*/, '');
+                    attributeId = element.id.replace(/[a-z]*/, '');
                     this.options.values[attributeId] = element.value;
                 }
             }, this));
@@ -123,8 +141,8 @@ define([
          * Set up .on('change') events for each option element to configure the option.
          * @private
          */
-        _setupChangeEvents: function() {
-            $.each(this.options.settings, $.proxy(function(index, element) {
+        _setupChangeEvents: function () {
+            $.each(this.options.settings, $.proxy(function (index, element) {
                 $(element).on('change', this, this._configure);
             }, this));
         },
@@ -134,9 +152,10 @@ define([
          * attribute identifier. Set the state based on the attribute identifier.
          * @private
          */
-        _fillState: function() {
-            $.each(this.options.settings, $.proxy(function(index, element) {
+        _fillState: function () {
+            $.each(this.options.settings, $.proxy(function (index, element) {
                 var attributeId = element.id.replace(/[a-z]*/, '');
+
                 if (attributeId && this.options.spConfig.attributes[attributeId]) {
                     element.config = this.options.spConfig.attributes[attributeId];
                     element.attributeId = attributeId;
@@ -150,23 +169,25 @@ define([
          * an option's list of selections as needed or disable an option's setting.
          * @private
          */
-        _setChildSettings: function() {
-            var childSettings   = [],
-                settings        = this.options.settings,
-                index           = settings.length,
+        _setChildSettings: function () {
+            var childSettings = [],
+                settings = this.options.settings,
+                index = settings.length,
                 option;
 
             while (index--) {
                 option = settings[index];
 
-                !index ?
-                    this._fillSelect(option) :
-                    (option.disabled = true);
+                if (index) {
+                    option.disabled = true;
+                } else {
+                    this._fillSelect(option);
+                }
 
                 _.extend(option, {
-                    childSettings:  childSettings.slice(),
-                    prevSetting:    settings[index - 1],
-                    nextSetting:    settings[index + 1]
+                    childSettings: childSettings.slice(),
+                    prevSetting: settings[index - 1],
+                    nextSetting: settings[index + 1]
                 });
 
                 childSettings.push(option);
@@ -178,13 +199,11 @@ define([
          * the option, which sets its state, and initializes the option's choices, etc.
          * @private
          */
-        _configureForValues: function() {
+        _configureForValues: function () {
             if (this.options.values) {
-                this.options.settings.each($.proxy(function(index, element) {
+                this.options.settings.each($.proxy(function (index, element) {
                     var attributeId = element.attributeId;
-                    element.value = (typeof(this.options.values[attributeId]) === 'undefined') ?
-                        '' :
-                        this.options.values[attributeId];
+                    element.value = this.options.values[attributeId] || '';
                     this._configureElement(element);
                 }, this));
             }
@@ -193,9 +212,9 @@ define([
         /**
          * Event handler for configuring an option.
          * @private
-         * @param event Event triggered to configure an option.
+         * @param {Object} event - Event triggered to configure an option.
          */
-        _configure: function(event) {
+        _configure: function (event) {
             event.data._configureElement(this);
         },
 
@@ -203,20 +222,26 @@ define([
          * Configure an option, initializing it's state and enabling related options, which
          * populates the related option's selection and resets child option selections.
          * @private
-         * @param element The element associated with a configurable option.
+         * @param {*} element - The element associated with a configurable option.
          */
-        _configureElement: function(element) {
+        _configureElement: function (element) {
+            this.simpleProduct = this._getSimpleProductId(element);
+
             if (element.value) {
                 this.options.state[element.config.id] = element.value;
+
                 if (element.nextSetting) {
                     element.nextSetting.disabled = false;
                     this._fillSelect(element.nextSetting);
                     this._resetChildren(element.nextSetting);
                 } else {
-                    this.inputSimpleProduct.val(element.selectedOptions[0].config.allowedProducts[0]);
+                    if (!!document.documentMode) {
+                        this.inputSimpleProduct.val(element.options[element.selectedIndex].config.allowedProducts[0]);
+                    } else {
+                        this.inputSimpleProduct.val(element.selectedOptions[0].config.allowedProducts[0]);
+                    }
                 }
-            }
-            else {
+            } else {
                 this._resetChildren(element);
             }
             this._reloadPrice();
@@ -228,38 +253,15 @@ define([
          * @private
          */
         _changeProductImage: function () {
-            var images = this.options.spConfig.images,
-                imagesArray = null,
-                galleryElement = $(this.options.mediaGallerySelector);
-            $.each(this.options.settings, function (k, v) {
-                var selectValue = parseInt(v.value, 10),
-                    attributeId = v.id.replace(/[a-z]*/, '');
-                if (selectValue > 0 && attributeId) {
-                    if (!imagesArray) {
-                        imagesArray = images[attributeId][selectValue];
-                    } else {
-                        var intersectedArray = {};
-                        $.each(imagesArray, function (productId) {
-                            if (images[attributeId][selectValue][productId]) {
-                                intersectedArray[productId] = images[attributeId][selectValue][productId];
-                            }
-                        });
-                        imagesArray = intersectedArray;
-                    }
-                }
-            });
-
-            var result = [];
-            $.each(imagesArray || {}, function (k, v) {
-                result.push({
-                    small: v,
-                    medium: v,
-                    large: v
-                });
-            });
+            var images = this.options.spConfig.images[this.simpleProduct],
+                galleryObject = $(this.options.mediaGallerySelector).data('gallery');
 
-            if (galleryElement.length && galleryElement.data('mageGallery')) {
-                galleryElement.gallery('option', 'images', result.length > 0 ? result : this.initialGalleryImages);
+            if (galleryObject) {
+                if (images) {
+                    galleryObject.updateData(images);
+                } else {
+                    galleryObject.updateData(this.options.mediaGalleryInitial);
+                }
             }
         },
 
@@ -267,16 +269,17 @@ define([
          * For a given option element, reset all of its selectable options. Clear any selected
          * index, disable the option choice, and reset the option's state if necessary.
          * @private
-         * @param element The element associated with a configurable option.
+         * @param {*} element - The element associated with a configurable option.
          */
-        _resetChildren: function(element) {
+        _resetChildren: function (element) {
             if (element.childSettings) {
-                for (var i = 0; i < element.childSettings.length; i++) {
-                    element.childSettings[i].selectedIndex = 0;
-                    element.childSettings[i].disabled = true;
-                    if (element.config) {
-                        this.options.state[element.config.id] = false;
-                    }
+                _.each(element.childSettings, function (set) {
+                    set.selectedIndex = 0;
+                    set.disabled = true;
+                });
+
+                if (element.config) {
+                    this.options.state[element.config.id] = false;
                 }
             }
         },
@@ -284,25 +287,32 @@ define([
         /**
          * Populates an option's selectable choices.
          * @private
-         * @param element Element associated with a configurable option.
+         * @param {*} element - Element associated with a configurable option.
          */
-        _fillSelect: function(element) {
+        _fillSelect: function (element) {
             var attributeId = element.id.replace(/[a-z]*/, ''),
-                options = this._getAttributeOptions(attributeId);
+                options = this._getAttributeOptions(attributeId),
+                prevConfig,
+                index = 1,
+                allowedProducts,
+                i,
+                j;
+
             this._clearSelect(element);
             element.options[0] = new Option('', '');
             element.options[0].innerHTML = this.options.spConfig.chooseText;
+            prevConfig = false;
 
-            var prevConfig = false;
             if (element.prevSetting) {
                 prevConfig = element.prevSetting.options[element.prevSetting.selectedIndex];
             }
+
             if (options) {
-                var index = 1;
-                for (var i = 0; i < options.length; i++) {
-                    var allowedProducts = [];
+                for (i = 0; i < options.length; i++) {
+                    allowedProducts = [];
+
                     if (prevConfig) {
-                        for (var j = 0; j < options[i].products.length; j++) {
+                        for (j = 0; j < options[i].products.length; j++) {
                             // prevConfig.config can be undefined
                             if (prevConfig.config &&
                                 prevConfig.config.allowedProducts &&
@@ -313,12 +323,15 @@ define([
                     } else {
                         allowedProducts = options[i].products.slice(0);
                     }
+
                     if (allowedProducts.length > 0) {
                         options[i].allowedProducts = allowedProducts;
                         element.options[index] = new Option(this._getOptionLabel(options[i]), options[i].id);
+
                         if (typeof options[i].price !== 'undefined') {
                             element.options[index].setAttribute('price', options[i].prices);
                         }
+
                         element.options[index].config = options[i];
                         index++;
                     }
@@ -330,21 +343,22 @@ define([
          * Generate the label associated with a configurable option. This includes the option's
          * label or value and the option's price.
          * @private
-         * @param option A single choice among a group of choices for a configurable option.
-         * @param selOption Current selected option.
+         * @param {*} option - A single choice among a group of choices for a configurable option.
          * @return {String} The option label with option value and price (e.g. Black +1.99)
          */
-        _getOptionLabel: function(option, selOption) {
+        _getOptionLabel: function (option) {
             return option.label;
         },
 
         /**
          * Removes an option's selections.
          * @private
-         * @param element The element associated with a configurable option.
+         * @param {*} element - The element associated with a configurable option.
          */
-        _clearSelect: function(element) {
-            for (var i = element.options.length - 1; i >= 0; i--) {
+        _clearSelect: function (element) {
+            var i;
+
+            for (i = element.options.length - 1; i >= 0; i--) {
                 element.remove(i);
             }
         },
@@ -352,10 +366,10 @@ define([
         /**
          * Retrieve the attribute options associated with a specific attribute Id.
          * @private
-         * @param attributeId The id of the attribute whose configurable options are sought.
+         * @param {Number} attributeId - The id of the attribute whose configurable options are sought.
          * @return {Object} Object containing the attribute options.
          */
-        _getAttributeOptions: function(attributeId) {
+        _getAttributeOptions: function (attributeId) {
             if (this.options.spConfig.attributes[attributeId]) {
                 return this.options.spConfig.attributes[attributeId].options;
             }
@@ -364,19 +378,22 @@ define([
         /**
          * Reload the price of the configurable product incorporating the prices of all of the
          * configurable product's option selections.
-         * @private
-         * @return {Number} The price of the configurable product including selected options.
          */
-        _reloadPrice: function() {
+        _reloadPrice: function () {
             $(this.options.priceHolderSelector).trigger('updatePrice', this._getPrices());
         },
 
+        /**
+         * Get product various prices
+         * @returns {{}}
+         * @private
+         */
         _getPrices: function () {
             var prices = {},
-                elements = _.toArray(this.options.settings);
+                elements = _.toArray(this.options.settings),
+                hasProductPrice = false;
 
-            var hasProductPrice = false;
-            _.each(elements, function(element) {
+            _.each(elements, function (element) {
                 var selected = element.options[element.selectedIndex],
                     config = selected && selected.config,
                     priceValue = {};
@@ -392,16 +409,50 @@ define([
             return prices;
         },
 
+        /**
+         * Returns pracies for configured products
+         *
+         * @param {*} config - Products configuration
+         * @returns {*}
+         * @private
+         */
         _calculatePrice: function (config) {
-            var displayPrices = $(this.options.priceHolderSelector).priceBox('option').prices;
-            var newPrices = this.options.spConfig.optionPrices[_.first(config.allowedProducts)];
+            var displayPrices = $(this.options.priceHolderSelector).priceBox('option').prices,
+                newPrices = this.options.spConfig.optionPrices[_.first(config.allowedProducts)];
 
             _.each(displayPrices, function (price, code) {
                 if (newPrices[code]) {
-                    displayPrices[code].amount =  newPrices[code].amount - displayPrices[code].amount
+                    displayPrices[code].amount = newPrices[code].amount - displayPrices[code].amount;
                 }
             });
+
             return displayPrices;
+        },
+
+        /**
+         * Returns Simple product Id
+         *  depending on current selected option.
+         *
+         * @private
+         * @param {HTMLElement} element
+         * @returns {String|undefined}
+         */
+        _getSimpleProductId: function (element) {
+            // TODO: Rewrite algorithm. It should return ID of
+            //        simple product based on selected options.
+            var allOptions = element.config.options,
+                value = element.value,
+                config;
+
+            config = _.filter(allOptions, function (option) {
+                return option.id === value;
+            });
+            config = _.first(config);
+
+            return _.isEmpty(config) ?
+                undefined :
+                _.first(config.allowedProducts);
+
         }
 
     });
diff --git a/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php b/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php
index e48189a75f8866092197401a073d038168efc883..febdde20240b863408719cd5d1ed3ab59280c9bb 100644
--- a/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php
+++ b/app/code/Magento/Contact/Test/Unit/Model/System/Config/Backend/LinksTest.php
@@ -18,7 +18,7 @@ class LinksTest extends \PHPUnit_Framework_TestCase
             $this->getMock('\Magento\Framework\Model\Context', [], [], '', false),
             $this->getMock('\Magento\Framework\Registry', [], [], '', false),
             $this->getMockForAbstractClass('\Magento\Framework\App\Config\ScopeConfigInterface', [], '', false),
-            $this->getMockForAbstractClass('\Magento\Framework\Model\Resource\AbstractResource', [], '', false),
+            $this->getMockForAbstractClass('\Magento\Framework\Model\ResourceModel\AbstractResource', [], '', false),
             $this->getMock('\Magento\Framework\Data\Collection\AbstractDb', [], [], '', false)
         );
     }
diff --git a/app/code/Magento/Cookie/Model/Config/Backend/Domain.php b/app/code/Magento/Cookie/Model/Config/Backend/Domain.php
index 8d205ea7f23d4d89d2b15a90d79d908ac7d723a9..50e5a4782d9e92ee77789effeb1140a48fd70c7c 100644
--- a/app/code/Magento/Cookie/Model/Config/Backend/Domain.php
+++ b/app/code/Magento/Cookie/Model/Config/Backend/Domain.php
@@ -18,7 +18,7 @@ class Domain extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Session\Config\Validator\CookieDomainValidator $configValidator
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -28,7 +28,7 @@ class Domain extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Session\Config\Validator\CookieDomainValidator $configValidator,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php b/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php
index a32066ce1eaffb6db0fa6b471c393060f069e897..bf2b2805dff6d9a71f5467a3e52eaff20f5638e5 100644
--- a/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php
+++ b/app/code/Magento/Cookie/Model/Config/Backend/Lifetime.php
@@ -18,7 +18,7 @@ class Lifetime extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Session\Config\Validator\CookieLifetimeValidator $configValidator
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -28,7 +28,7 @@ class Lifetime extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Session\Config\Validator\CookieLifetimeValidator $configValidator,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Cookie/Model/Config/Backend/Path.php b/app/code/Magento/Cookie/Model/Config/Backend/Path.php
index 386e2350b261624bb9ffd35b1dd0ed83ea823825..f64d41dc1f0e62f194819c7aec35f293766cddd5 100644
--- a/app/code/Magento/Cookie/Model/Config/Backend/Path.php
+++ b/app/code/Magento/Cookie/Model/Config/Backend/Path.php
@@ -18,7 +18,7 @@ class Path extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Session\Config\Validator\CookiePathValidator $configValidator
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -28,7 +28,7 @@ class Path extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Session\Config\Validator\CookiePathValidator $configValidator,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/DomainTest.php b/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/DomainTest.php
index fbe82c0859c59e0cc38f0ae44f34803f8b097e7e..3e85d8a5dc9843dc04069cc69410e22ab4f3d59f 100644
--- a/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/DomainTest.php
+++ b/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/DomainTest.php
@@ -13,7 +13,7 @@ use Magento\Framework\Session\Config\Validator\CookieDomainValidator;
  */
 class DomainTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\Framework\Model\Resource\AbstractResource | \PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\Model\ResourceModel\AbstractResource | \PHPUnit_Framework_MockObject_MockObject */
     protected $resourceMock;
 
     /** @var \Magento\Cookie\Model\Config\Backend\Domain */
@@ -37,7 +37,7 @@ class DomainTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\Model\Resource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             [
                 '_construct',
                 'getConnection',
diff --git a/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/LifetimeTest.php b/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/LifetimeTest.php
index 173a635a0a685af7595f380922228d7dc8694c61..e9273bebdd06df75f926165e67037f999d7c3b3e 100644
--- a/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/LifetimeTest.php
+++ b/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/LifetimeTest.php
@@ -18,7 +18,7 @@ class LifetimeTest extends \PHPUnit_Framework_TestCase
     /** @var \PHPUnit_Framework_MockObject_MockObject | CookieLifetimeValidator */
     private $validatorMock;
 
-    /** @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Module\Resource */
+    /** @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Module\ModuleResource */
     private $resourceMock;
 
     /** @var \Magento\Cookie\Model\Config\Backend\Lifetime */
@@ -30,7 +30,7 @@ class LifetimeTest extends \PHPUnit_Framework_TestCase
             'Magento\Framework\Session\Config\Validator\CookieLifetimeValidator'
         )->disableOriginalConstructor()
             ->getMock();
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Module\Resource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Module\ModuleResource')
             ->disableOriginalConstructor('delete')
             ->getMock();
 
diff --git a/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/PathTest.php b/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/PathTest.php
index 0c1b6fb54fca276448a011934237edab2bbfa487..af26963faa961fe1db2fb0330418e01ad0b9fc3d 100644
--- a/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/PathTest.php
+++ b/app/code/Magento/Cookie/Test/Unit/Model/Config/Backend/PathTest.php
@@ -18,7 +18,7 @@ class PathTest extends \PHPUnit_Framework_TestCase
     /** @var \PHPUnit_Framework_MockObject_MockObject | CookiePathValidator */
     private $validatorMock;
 
-    /** @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Module\Resource */
+    /** @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Module\ModuleResource */
     private $resourceMock;
 
     /** @var \Magento\Cookie\Model\Config\Backend\Path */
@@ -29,7 +29,7 @@ class PathTest extends \PHPUnit_Framework_TestCase
         $this->validatorMock = $this->getMockBuilder('Magento\Framework\Session\Config\Validator\CookiePathValidator')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Module\Resource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Module\ModuleResource')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Cookie/View/adminhtml/requirejs-config.js b/app/code/Magento/Cookie/view/adminhtml/requirejs-config.js
similarity index 100%
rename from app/code/Magento/Cookie/View/adminhtml/requirejs-config.js
rename to app/code/Magento/Cookie/view/adminhtml/requirejs-config.js
diff --git a/app/code/Magento/Cookie/View/frontend/layout/default.xml b/app/code/Magento/Cookie/view/frontend/layout/default.xml
similarity index 100%
rename from app/code/Magento/Cookie/View/frontend/layout/default.xml
rename to app/code/Magento/Cookie/view/frontend/layout/default.xml
diff --git a/app/code/Magento/Cookie/View/frontend/requirejs-config.js b/app/code/Magento/Cookie/view/frontend/requirejs-config.js
similarity index 100%
rename from app/code/Magento/Cookie/View/frontend/requirejs-config.js
rename to app/code/Magento/Cookie/view/frontend/requirejs-config.js
diff --git a/app/code/Magento/Cookie/View/frontend/templates/html/notices.phtml b/app/code/Magento/Cookie/view/frontend/templates/html/notices.phtml
similarity index 100%
rename from app/code/Magento/Cookie/View/frontend/templates/html/notices.phtml
rename to app/code/Magento/Cookie/view/frontend/templates/html/notices.phtml
diff --git a/app/code/Magento/Cookie/View/frontend/templates/require_cookie.phtml b/app/code/Magento/Cookie/view/frontend/templates/require_cookie.phtml
similarity index 100%
rename from app/code/Magento/Cookie/View/frontend/templates/require_cookie.phtml
rename to app/code/Magento/Cookie/view/frontend/templates/require_cookie.phtml
diff --git a/app/code/Magento/Cookie/View/frontend/web/js/notices.js b/app/code/Magento/Cookie/view/frontend/web/js/notices.js
similarity index 97%
rename from app/code/Magento/Cookie/View/frontend/web/js/notices.js
rename to app/code/Magento/Cookie/view/frontend/web/js/notices.js
index 09094b971a26649ad5215ce28f573579dd15ae93..5c82ce314686ad05421be3b53447b6a4486aafa2 100644
--- a/app/code/Magento/Cookie/View/frontend/web/js/notices.js
+++ b/app/code/Magento/Cookie/view/frontend/web/js/notices.js
@@ -8,6 +8,7 @@ define([
     "jquery/ui",
     "mage/cookies"
 ], function($){
+    "use strict";
 
     $.widget('mage.cookieNotices', {
         _create: function() {
@@ -18,6 +19,7 @@ define([
             }
             $(this.options.cookieAllowButtonSelector).on('click', $.proxy(function() {
                 var cookieExpires = new Date(new Date().getTime() + this.options.cookieLifetime * 1000);
+
                 $.mage.cookies.set(this.options.cookieName, this.options.cookieValue, {expires: cookieExpires});
                 if ($.mage.cookies.get(this.options.cookieName)) {
                     window.location.reload();
@@ -29,4 +31,4 @@ define([
     });
 
     return $.mage.cookieNotices;
-});
\ No newline at end of file
+});
diff --git a/app/code/Magento/Cookie/View/frontend/web/js/require-cookie.js b/app/code/Magento/Cookie/view/frontend/web/js/require-cookie.js
similarity index 99%
rename from app/code/Magento/Cookie/View/frontend/web/js/require-cookie.js
rename to app/code/Magento/Cookie/view/frontend/web/js/require-cookie.js
index 22abfc82d56a686059fad13a7e141d8e9c7a22cc..6aedd8ac9b5b15f12e9e08c25fb05bb02805bbc0 100644
--- a/app/code/Magento/Cookie/View/frontend/web/js/require-cookie.js
+++ b/app/code/Magento/Cookie/view/frontend/web/js/require-cookie.js
@@ -30,6 +30,7 @@ define([
          */
         _bind: function() {
             var events = {};
+
             $.each(this.options.triggers, function(index, value) {
                 events['click ' + value] = '_checkCookie';
             });
@@ -50,4 +51,4 @@ define([
     });
 
     return $.mage.requireCookie;
-});
\ No newline at end of file
+});
diff --git a/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php b/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php
index ec0b6fe4634c73889cc1984b1a564491ebab308f..67d69dfe2b5d6ef2ae6866c12f4cddd71a80a1d8 100644
--- a/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php
+++ b/app/code/Magento/Cron/Model/Config/Backend/Product/Alert.php
@@ -38,7 +38,7 @@ class Alert extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param string $runModelPath
      * @param array $data
@@ -48,7 +48,7 @@ class Alert extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         $runModelPath = '',
         array $data = []
diff --git a/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php b/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php
index 383357c9c204e802e877983d8a910cb91d159d06..fecbc2d676eb7e8393eab69f0eace5a99dead111 100644
--- a/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php
+++ b/app/code/Magento/Cron/Model/Config/Backend/Sitemap.php
@@ -38,7 +38,7 @@ class Sitemap extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param string $runModelPath
      * @param array $data
@@ -48,7 +48,7 @@ class Sitemap extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         $runModelPath = '',
         array $data = []
diff --git a/app/code/Magento/Cron/Model/Resource/Schedule.php b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php
similarity index 90%
rename from app/code/Magento/Cron/Model/Resource/Schedule.php
rename to app/code/Magento/Cron/Model/ResourceModel/Schedule.php
index 643b291889ded403442485605d6593471c3e612b..469171d9e15432cc5818bfb4b9662eb78d4f577f 100644
--- a/app/code/Magento/Cron/Model/Resource/Schedule.php
+++ b/app/code/Magento/Cron/Model/ResourceModel/Schedule.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Cron\Model\Resource;
+namespace Magento\Cron\Model\ResourceModel;
 
 /**
  * Schedule resource
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Schedule extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Schedule extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize resource
diff --git a/app/code/Magento/Cron/Model/Resource/Schedule/Collection.php b/app/code/Magento/Cron/Model/ResourceModel/Schedule/Collection.php
similarity index 68%
rename from app/code/Magento/Cron/Model/Resource/Schedule/Collection.php
rename to app/code/Magento/Cron/Model/ResourceModel/Schedule/Collection.php
index d747527492a9611e79da6edfd4e6a4d784c7445f..bbb579babc472bcd144e7d35844e4cf025bb360e 100644
--- a/app/code/Magento/Cron/Model/Resource/Schedule/Collection.php
+++ b/app/code/Magento/Cron/Model/ResourceModel/Schedule/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Cron\Model\Resource\Schedule;
+namespace Magento\Cron\Model\ResourceModel\Schedule;
 
 /**
  * Schedules Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource collection
@@ -19,6 +19,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     public function _construct()
     {
-        $this->_init('Magento\Cron\Model\Schedule', 'Magento\Cron\Model\Resource\Schedule');
+        $this->_init('Magento\Cron\Model\Schedule', 'Magento\Cron\Model\ResourceModel\Schedule');
     }
 }
diff --git a/app/code/Magento/Cron/Model/Schedule.php b/app/code/Magento/Cron/Model/Schedule.php
index 7ab51af8cda0a222981940937ee51bf7f733cc9b..fbcb1fe5b27c4bfe8b61919c89cfa85e39ce35e7 100644
--- a/app/code/Magento/Cron/Model/Schedule.php
+++ b/app/code/Magento/Cron/Model/Schedule.php
@@ -11,8 +11,8 @@ use Magento\Framework\Exception\CronException;
 /**
  * Crontab schedule model
  *
- * @method \Magento\Cron\Model\Resource\Schedule _getResource()
- * @method \Magento\Cron\Model\Resource\Schedule getResource()
+ * @method \Magento\Cron\Model\ResourceModel\Schedule _getResource()
+ * @method \Magento\Cron\Model\ResourceModel\Schedule getResource()
  * @method string getJobCode()
  * @method \Magento\Cron\Model\Schedule setJobCode(string $value)
  * @method string getStatus()
@@ -47,14 +47,14 @@ class Schedule extends \Magento\Framework\Model\AbstractModel
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -66,7 +66,7 @@ class Schedule extends \Magento\Framework\Model\AbstractModel
      */
     public function _construct()
     {
-        $this->_init('Magento\Cron\Model\Resource\Schedule');
+        $this->_init('Magento\Cron\Model\ResourceModel\Schedule');
     }
 
     /**
diff --git a/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php b/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php
index 7a8135c3b0deebe52e97a43fb22bea65d90fa3c8..12b988b8764def054b12d869d6fd10840735135f 100644
--- a/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php
+++ b/app/code/Magento/Cron/Observer/ProcessCronQueueObserver.php
@@ -56,7 +56,7 @@ class ProcessCronQueueObserver implements ObserverInterface
     const SECONDS_IN_MINUTE = 60;
 
     /**
-     * @var \Magento\Cron\Model\Resource\Schedule\Collection
+     * @var \Magento\Cron\Model\ResourceModel\Schedule\Collection
      */
     protected $_pendingSchedules;
 
@@ -247,7 +247,7 @@ class ProcessCronQueueObserver implements ObserverInterface
     /**
      * Return job collection from data base with status 'pending'
      *
-     * @return \Magento\Cron\Model\Resource\Schedule\Collection
+     * @return \Magento\Cron\Model\ResourceModel\Schedule\Collection
      */
     protected function _getPendingSchedules()
     {
@@ -365,7 +365,7 @@ class ProcessCronQueueObserver implements ObserverInterface
         $scheduleLifetime = $scheduleLifetime * self::SECONDS_IN_MINUTE;
 
         /**
-         * @var \Magento\Cron\Model\Resource\Schedule\Collection $history
+         * @var \Magento\Cron\Model\ResourceModel\Schedule\Collection $history
          */
         $history = $this->_scheduleFactory->create()->getCollection()->addFieldToFilter(
             'status',
diff --git a/app/code/Magento/Cron/Test/Unit/Model/ScheduleTest.php b/app/code/Magento/Cron/Test/Unit/Model/ScheduleTest.php
index 8b757c187c23e4af107017c8f06ee832f9ac9c70..98cd2accffe6d3b39b7973f75c332c8f14852bb5 100644
--- a/app/code/Magento/Cron/Test/Unit/Model/ScheduleTest.php
+++ b/app/code/Magento/Cron/Test/Unit/Model/ScheduleTest.php
@@ -21,7 +21,7 @@ class ScheduleTest extends \PHPUnit_Framework_TestCase
     {
         $this->helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
-        $this->resourceJobMock = $this->getMockBuilder('Magento\Cron\Model\Resource\Schedule')
+        $this->resourceJobMock = $this->getMockBuilder('Magento\Cron\Model\ResourceModel\Schedule')
             ->disableOriginalConstructor()
             ->setMethods(['trySetJobStatusAtomic', '__wakeup', 'getIdFieldName'])
             ->getMockForAbstractClass();
diff --git a/app/code/Magento/Cron/Test/Unit/Observer/ProcessCronQueueObserverTest.php b/app/code/Magento/Cron/Test/Unit/Observer/ProcessCronQueueObserverTest.php
index 97547d1f49a01f9e23f7a5eb7936ee700404ca9b..40a3f7e935733b637ccc5d41eb2f3a9e85d71d08 100644
--- a/app/code/Magento/Cron/Test/Unit/Observer/ProcessCronQueueObserverTest.php
+++ b/app/code/Magento/Cron/Test/Unit/Observer/ProcessCronQueueObserverTest.php
@@ -54,7 +54,7 @@ class ProcessCronQueueObserverTest extends \PHPUnit_Framework_TestCase
      */
     protected $_shell;
 
-    /** @var \Magento\Cron\Model\Resource\Schedule\Collection|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Cron\Model\ResourceModel\Schedule\Collection|\PHPUnit_Framework_MockObject_MockObject */
     protected $_collection;
 
     /**
@@ -86,7 +86,7 @@ class ProcessCronQueueObserverTest extends \PHPUnit_Framework_TestCase
             'Magento\Framework\App\Config\ScopeConfigInterface'
         )->disableOriginalConstructor()->getMock();
         $this->_collection = $this->getMockBuilder(
-            'Magento\Cron\Model\Resource\Schedule\Collection'
+            'Magento\Cron\Model\ResourceModel\Schedule\Collection'
         )->setMethods(
             ['addFieldToFilter', 'load', '__wakeup']
         )->disableOriginalConstructor()->getMock();
@@ -616,7 +616,7 @@ class ProcessCronQueueObserverTest extends \PHPUnit_Framework_TestCase
         $this->_scheduleFactory->expects($this->at(0))->method('create')->will($this->returnValue($scheduleMock));
 
         $collection = $this->getMockBuilder(
-            'Magento\Cron\Model\Resource\Schedule\Collection'
+            'Magento\Cron\Model\ResourceModel\Schedule\Collection'
         )->setMethods(
             ['addFieldToFilter', 'load', '__wakeup']
         )->disableOriginalConstructor()->getMock();
@@ -695,7 +695,7 @@ class ProcessCronQueueObserverTest extends \PHPUnit_Framework_TestCase
         $this->_scheduleFactory->expects($this->at(0))->method('create')->will($this->returnValue($scheduleMock));
 
         $collection = $this->getMockBuilder(
-            'Magento\Cron\Model\Resource\Schedule\Collection'
+            'Magento\Cron\Model\ResourceModel\Schedule\Collection'
         )->setMethods(
             ['addFieldToFilter', 'load', '__wakeup']
         )->disableOriginalConstructor()->getMock();
diff --git a/app/code/Magento/Cron/etc/crontab/events.xml b/app/code/Magento/Cron/etc/crontab/events.xml
index db50815fbe89d12210001b756a54edf837f19cfa..19b0fa3d139d1261bbc7d170caad0bceb0d38280 100644
--- a/app/code/Magento/Cron/etc/crontab/events.xml
+++ b/app/code/Magento/Cron/etc/crontab/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="default">
-        <observer name="cron_observer" instance="Magento\Cron\Observer\ProcessCronQueueObserver" method="execute" />
+        <observer name="cron_observer" instance="Magento\Cron\Observer\ProcessCronQueueObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/CurrencySymbol/etc/events.xml b/app/code/Magento/CurrencySymbol/etc/events.xml
index 57abb36aff585f552a2bccc9841a85ad312443e5..98ee087948f2af1371ee9add122e238c5cb40839 100644
--- a/app/code/Magento/CurrencySymbol/etc/events.xml
+++ b/app/code/Magento/CurrencySymbol/etc/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="currency_display_options_forming">
-        <observer name="magento_currencysymbol_currency_display_options" instance="Magento\CurrencySymbol\Observer\CurrencyDisplayOptions" method="execute" />
+        <observer name="magento_currencysymbol_currency_display_options" instance="Magento\CurrencySymbol\Observer\CurrencyDisplayOptions" />
     </event>
 </config>
diff --git a/app/code/Magento/Customer/Block/Address/Edit.php b/app/code/Magento/Customer/Block/Address/Edit.php
index 4904907f797818ca22a1e0b5336d975316dc3a2c..d01e16928ed6d0dbd14c56fbb09b3af95b8d7bcd 100644
--- a/app/code/Magento/Customer/Block/Address/Edit.php
+++ b/app/code/Magento/Customer/Block/Address/Edit.php
@@ -51,8 +51,8 @@ class Edit extends \Magento\Directory\Block\Data
      * @param \Magento\Directory\Helper\Data $directoryHelper
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Customer\Api\AddressRepositoryInterface $addressRepository
      * @param \Magento\Customer\Api\Data\AddressInterfaceFactory $addressDataFactory
@@ -67,8 +67,8 @@ class Edit extends \Magento\Directory\Block\Data
         \Magento\Directory\Helper\Data $directoryHelper,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
         \Magento\Framework\App\Cache\Type\Config $configCacheType,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Customer\Api\AddressRepositoryInterface $addressRepository,
         \Magento\Customer\Api\Data\AddressInterfaceFactory $addressDataFactory,
diff --git a/app/code/Magento/Customer/Block/Adminhtml/Edit/DeleteButton.php b/app/code/Magento/Customer/Block/Adminhtml/Edit/DeleteButton.php
index c2961ece3dd4b6938635711b7836721cc243886e..9b69d9bd2f947ede85fc1ee02881d14bca0526ed 100644
--- a/app/code/Magento/Customer/Block/Adminhtml/Edit/DeleteButton.php
+++ b/app/code/Magento/Customer/Block/Adminhtml/Edit/DeleteButton.php
@@ -47,9 +47,11 @@ class DeleteButton extends GenericButton implements ButtonProviderInterface
             $data = [
                 'label' => __('Delete Customer'),
                 'class' => 'delete',
-                'on_click' => 'deleteConfirm(\'' . __(
-                    'Are you sure you want to do this?'
-                ) . '\', \'' . $this->getDeleteUrl() . '\')',
+                'id' => 'customer-edit-delete-button',
+                'data_attribute' => [
+                    'url' => $this->getDeleteUrl()
+                ],
+                'on_click' => '',
                 'sort_order' => 20,
             ];
         }
diff --git a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/Newsletter/Grid.php b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/Newsletter/Grid.php
index d3257d4c45232f5d20abd47f374456c1848dffc3..48d57dbeeb7b87204dd234508b62df62c60c50f8 100644
--- a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/Newsletter/Grid.php
+++ b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/Newsletter/Grid.php
@@ -20,21 +20,21 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_coreRegistry = null;
 
     /**
-     * @var \Magento\Newsletter\Model\Resource\Queue\CollectionFactory
+     * @var \Magento\Newsletter\Model\ResourceModel\Queue\CollectionFactory
      */
     protected $_collectionFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Newsletter\Model\Resource\Queue\CollectionFactory $collectionFactory
+     * @param \Magento\Newsletter\Model\ResourceModel\Queue\CollectionFactory $collectionFactory
      * @param \Magento\Framework\Registry $coreRegistry
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Newsletter\Model\Resource\Queue\CollectionFactory $collectionFactory,
+        \Magento\Newsletter\Model\ResourceModel\Queue\CollectionFactory $collectionFactory,
         \Magento\Framework\Registry $coreRegistry,
         array $data = []
     ) {
@@ -71,7 +71,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
      */
     protected function _prepareCollection()
     {
-        /** @var $collection \Magento\Newsletter\Model\Resource\Queue\Collection */
+        /** @var $collection \Magento\Newsletter\Model\ResourceModel\Queue\Collection */
         $collection = $this->_collectionFactory->create()->addTemplateInfo()->addSubscriberFilter(
             $this->_coreRegistry->registry('subscriber')->getId()
         );
diff --git a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/View/Sales.php b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/View/Sales.php
index 1866a1a0b1cdabe73c9bbc745498fe63d2397a95..0b115f82e6d3f5eb553fc302673a9b38de140a89 100644
--- a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/View/Sales.php
+++ b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/View/Sales.php
@@ -17,7 +17,7 @@ class Sales extends \Magento\Backend\Block\Template
     /**
      * Sales entity collection
      *
-     * @var \Magento\Sales\Model\Resource\Sale\Collection
+     * @var \Magento\Sales\Model\ResourceModel\Sale\Collection
      */
     protected $_collection;
 
@@ -51,7 +51,7 @@ class Sales extends \Magento\Backend\Block\Template
     protected $_currencyFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Sale\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Sale\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -60,14 +60,14 @@ class Sales extends \Magento\Backend\Block\Template
      *
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
-     * @param \Magento\Sales\Model\Resource\Sale\CollectionFactory $collectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Sale\CollectionFactory $collectionFactory
      * @param \Magento\Framework\Registry $coreRegistry
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
-        \Magento\Sales\Model\Resource\Sale\CollectionFactory $collectionFactory,
+        \Magento\Sales\Model\ResourceModel\Sale\CollectionFactory $collectionFactory,
         \Magento\Framework\Registry $coreRegistry,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/View/Wishlist.php b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/View/Wishlist.php
index de0c973ddd167162b11ce9935d71263de1954a54..3aa9bf439679041dee733a7bf376fc5e77a5772e 100644
--- a/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/View/Wishlist.php
+++ b/app/code/Magento/Customer/Block/Adminhtml/Edit/Tab/View/Wishlist.php
@@ -22,7 +22,7 @@ class Wishlist extends \Magento\Backend\Block\Widget\Grid\Extended
     /**
      * Wishlist item collection factory.
      *
-     * @var \Magento\Wishlist\Model\Resource\Item\CollectionFactory
+     * @var \Magento\Wishlist\Model\ResourceModel\Item\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -31,14 +31,14 @@ class Wishlist extends \Magento\Backend\Block\Widget\Grid\Extended
      *
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Wishlist\Model\Resource\Item\CollectionFactory $collectionFactory
+     * @param \Magento\Wishlist\Model\ResourceModel\Item\CollectionFactory $collectionFactory
      * @param \Magento\Framework\Registry $coreRegistry
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Wishlist\Model\Resource\Item\CollectionFactory $collectionFactory,
+        \Magento\Wishlist\Model\ResourceModel\Item\CollectionFactory $collectionFactory,
         \Magento\Framework\Registry $coreRegistry,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Block/Adminhtml/Grid/Filter/Country.php b/app/code/Magento/Customer/Block/Adminhtml/Grid/Filter/Country.php
index 521b5fcfc744373af5c9c68cbba1314e55a286a7..8c501a9e18ff9548beb9d13342d31d3db91d7232 100644
--- a/app/code/Magento/Customer/Block/Adminhtml/Grid/Filter/Country.php
+++ b/app/code/Magento/Customer/Block/Adminhtml/Grid/Filter/Country.php
@@ -13,20 +13,20 @@ namespace Magento\Customer\Block\Adminhtml\Grid\Filter;
 class Country extends \Magento\Backend\Block\Widget\Grid\Column\Filter\Select
 {
     /**
-     * @var \Magento\Directory\Model\Resource\Country\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Country\CollectionFactory
      */
     protected $_collectionFactory;
 
     /**
      * @param \Magento\Backend\Block\Context $context
      * @param \Magento\Framework\DB\Helper $resourceHelper
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $collectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $collectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Context $context,
         \Magento\Framework\DB\Helper $resourceHelper,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $collectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_collectionFactory = $collectionFactory;
diff --git a/app/code/Magento/Customer/Block/CustomerData.php b/app/code/Magento/Customer/Block/CustomerData.php
index 66d4043f152e6cc2a65324a1735da0b7837e3993..9d30a56de217b6df858d2aa6cff24c421bab3341 100644
--- a/app/code/Magento/Customer/Block/CustomerData.php
+++ b/app/code/Magento/Customer/Block/CustomerData.php
@@ -7,24 +7,14 @@ namespace Magento\Customer\Block;
 
 class CustomerData extends \Magento\Framework\View\Element\Template
 {
-    /**
-     * Sections that can not be cached on frontend-side
-     *
-     * @var array
-     */
-    protected $nonCachedSections = [];
-
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
      * @param array $data
-     * @param array $nonCachedSections
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
-        array $data = [],
-        array $nonCachedSections = []
+        array $data = []
     ) {
-        $this->nonCachedSections = $nonCachedSections;
         parent::__construct($context, $data);
     }
 
@@ -50,24 +40,4 @@ class CustomerData extends \Magento\Framework\View\Element\Template
     {
         return $this->getUrl($route, ['_secure' => $this->getRequest()->isSecure()]);
     }
-
-    /**
-     * Get sections that can not be cached on frontend-side
-     *
-     * @return array
-     */
-    public function getNotCachedSections()
-    {
-        return $this->nonCachedSections;
-    }
-
-    /**
-     * Get keys of sections that can not be cached on frontend-side
-     *
-     * @return array
-     */
-    public function getNonCachedSectionKeys()
-    {
-        return array_keys($this->nonCachedSections);
-    }
 }
diff --git a/app/code/Magento/Customer/Block/Form/Register.php b/app/code/Magento/Customer/Block/Form/Register.php
index 3500d10a67c9331c9450d9104a003267ed701a57..e6e77a075a8274e0a0315e12802158e53b64cd43 100644
--- a/app/code/Magento/Customer/Block/Form/Register.php
+++ b/app/code/Magento/Customer/Block/Form/Register.php
@@ -30,8 +30,8 @@ class Register extends \Magento\Directory\Block\Data
      * @param \Magento\Directory\Helper\Data $directoryHelper
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Customer\Model\Url $customerUrl
@@ -44,8 +44,8 @@ class Register extends \Magento\Directory\Block\Data
         \Magento\Directory\Helper\Data $directoryHelper,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
         \Magento\Framework\App\Cache\Type\Config $configCacheType,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Customer\Model\Url $customerUrl,
@@ -63,7 +63,7 @@ class Register extends \Magento\Directory\Block\Data
             $countryCollectionFactory,
             $data
         );
-        $this->_isScopePrivate = false;
+        $this->_isScopePrivate = true;
     }
 
     /**
diff --git a/app/code/Magento/Customer/Console/Command/UpgradeHashAlgorithmCommand.php b/app/code/Magento/Customer/Console/Command/UpgradeHashAlgorithmCommand.php
index c07ca309622d5735dc3db4153440a956ada5c691..275b185492ea51d74e7625af89de766f95cd8a86 100644
--- a/app/code/Magento/Customer/Console/Command/UpgradeHashAlgorithmCommand.php
+++ b/app/code/Magento/Customer/Console/Command/UpgradeHashAlgorithmCommand.php
@@ -7,8 +7,8 @@ namespace Magento\Customer\Console\Command;
 
 use Magento\Customer\Model\Customer;
 use Magento\Framework\Encryption\Encryptor;
-use Magento\Customer\Model\Resource\Customer\Collection;
-use Magento\Customer\Model\Resource\Customer\CollectionFactory;
+use Magento\Customer\Model\ResourceModel\Customer\Collection;
+use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory;
 use Symfony\Component\Console\Command\Command;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
diff --git a/app/code/Magento/Customer/Controller/Account/LoginPost.php b/app/code/Magento/Customer/Controller/Account/LoginPost.php
index 2faeca50ad9e158b75edac0a55191e5c40b79800..7b6191eb2556b8e4c6eb2325519a96fbc23ee21b 100644
--- a/app/code/Magento/Customer/Controller/Account/LoginPost.php
+++ b/app/code/Magento/Customer/Controller/Account/LoginPost.php
@@ -92,15 +92,12 @@ class LoginPost extends Action implements AccountInterface
                     );
                     $this->messageManager->addError($message);
                     $this->session->setUsername($login['username']);
-                }
-                catch (AuthenticationException $e) {
+                } catch (AuthenticationException $e) {
                     $message = __('Invalid login or password.');
                     $this->messageManager->addError($message);
                     $this->session->setUsername($login['username']);
                 } catch (\Exception $e) {
-                    $this->messageManager->addError(
-                        __('Something went wrong while validating the login and password.')
-                    );
+                    $this->messageManager->addError(__('Invalid login or password.'));
                 }
             } else {
                 $this->messageManager->addError(__('A login and a password are required.'));
diff --git a/app/code/Magento/Customer/Controller/Address/FormPost.php b/app/code/Magento/Customer/Controller/Address/FormPost.php
index a3275491f6c3e4056659cbb96ded6bf7541bbd31..9360ca0f7d6d369f589a534a1cba0bd7ca489270 100644
--- a/app/code/Magento/Customer/Controller/Address/FormPost.php
+++ b/app/code/Magento/Customer/Controller/Address/FormPost.php
@@ -106,7 +106,6 @@ class FormPost extends \Magento\Customer\Controller\Address
             array_merge($existingAddressData, $attributeValues),
             '\Magento\Customer\Api\Data\AddressInterface'
         );
-
         $addressDataObject->setCustomerId($this->_getSession()->getCustomerId())
             ->setIsDefaultBilling($this->getRequest()->getParam('default_billing', false))
             ->setIsDefaultShipping($this->getRequest()->getParam('default_shipping', false));
@@ -118,12 +117,16 @@ class FormPost extends \Magento\Customer\Controller\Address
      * Retrieve existing address data
      *
      * @return array
+     * @throws \Exception
      */
     protected function getExistingAddressData()
     {
         $existingAddressData = [];
         if ($addressId = $this->getRequest()->getParam('id')) {
             $existingAddress = $this->_addressRepository->getById($addressId);
+            if ($existingAddress->getCustomerId() !== $this->_getSession()->getCustomerId()) {
+                throw new \Exception();
+            }
             $existingAddressData = $this->_dataProcessor->buildOutputDataArray(
                 $existingAddress,
                 '\Magento\Customer\Api\Data\AddressInterface'
@@ -175,6 +178,7 @@ class FormPost extends \Magento\Customer\Controller\Address
      */
     public function execute()
     {
+        $redirectUrl = null;
         if (!$this->_formKeyValidator->validate($this->getRequest())) {
             return $this->resultRedirectFactory->create()->setPath('*/*/');
         }
@@ -198,11 +202,16 @@ class FormPost extends \Magento\Customer\Controller\Address
                 $this->messageManager->addError($error->getMessage());
             }
         } catch (\Exception $e) {
+            $redirectUrl = $this->_buildUrl('*/*/index');
             $this->messageManager->addException($e, __('We can\'t save the address.'));
         }
 
-        $this->_getSession()->setAddressFormData($this->getRequest()->getPostValue());
-        $url = $this->_buildUrl('*/*/edit', ['id' => $this->getRequest()->getParam('id')]);
+        $url = $redirectUrl;
+        if (!$redirectUrl) {
+            $this->_getSession()->setAddressFormData($this->getRequest()->getPostValue());
+            $url = $this->_buildUrl('*/*/edit', ['id' => $this->getRequest()->getParam('id')]);
+        }
+
         return $this->resultRedirectFactory->create()->setUrl($this->_redirect->error($url));
     }
 }
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/AbstractMassAction.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/AbstractMassAction.php
index 94fd533646ebef4e57f841c0438e408da07121aa..9a3ca5645f5c73b97be37c20bc7ef6810902927e 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/AbstractMassAction.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/AbstractMassAction.php
@@ -11,7 +11,7 @@ use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\Controller\ResultInterface;
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Customer\Model\Resource\Customer\CollectionFactory;
+use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory;
 
 /**
  * Class AbstractMassStatus
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/Delete.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/Delete.php
index 51afccd016346ed11bc370784b45c9354a5f6752..503969226aa201cbcf2c74a7643f094bdd380612 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/Delete.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/Delete.php
@@ -16,6 +16,14 @@ class Delete extends \Magento\Customer\Controller\Adminhtml\Index
      */
     public function execute()
     {
+        $resultRedirect = $this->resultRedirectFactory->create();
+        $formKeyIsValid = $this->_formKeyValidator->validate($this->getRequest());
+        $isPost = $this->getRequest()->isPost();
+        if (!$formKeyIsValid || !$isPost) {
+            $this->messageManager->addError(__('Customer could not be deleted.'));
+            return $resultRedirect->setPath('customer/index');
+        }
+
         $customerId = $this->initCurrentCustomer();
         if (!empty($customerId)) {
             try {
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/MassAssignGroup.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/MassAssignGroup.php
index 8dbb56f59c163ff8c7c4dd2e7a4818bc3bd03f56..82bcdfccfdde932f70c10b8a59543c24d857e66c 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/MassAssignGroup.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/MassAssignGroup.php
@@ -6,7 +6,7 @@
 namespace Magento\Customer\Controller\Adminhtml\Index;
 
 use Magento\Backend\App\Action\Context;
-use Magento\Customer\Model\Resource\Customer\CollectionFactory;
+use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory;
 use Magento\Eav\Model\Entity\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Customer\Api\CustomerRepositoryInterface;
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/MassDelete.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/MassDelete.php
index 443cf7c72a5e40a1ddca07e8c9cf88df5640b5e7..0bd610c2cf3e0a88de9ebf80703a9c528547a09a 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/MassDelete.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/MassDelete.php
@@ -6,7 +6,7 @@
 namespace Magento\Customer\Controller\Adminhtml\Index;
 
 use Magento\Backend\App\Action\Context;
-use Magento\Customer\Model\Resource\Customer\CollectionFactory;
+use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory;
 use Magento\Eav\Model\Entity\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Customer\Api\CustomerRepositoryInterface;
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/MassSubscribe.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/MassSubscribe.php
index 0ba982ebbfa2e8bd4fe613c6367dbd950f6a8887..9f22130ca6b416a8b51277c26fca15cf2ea0990c 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/MassSubscribe.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/MassSubscribe.php
@@ -7,7 +7,7 @@ namespace Magento\Customer\Controller\Adminhtml\Index;
 
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Customer\Model\Resource\Customer\CollectionFactory;
+use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory;
 use Magento\Customer\Api\CustomerRepositoryInterface;
 use Magento\Newsletter\Model\SubscriberFactory;
 use Magento\Eav\Model\Entity\Collection\AbstractCollection;
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/Index/MassUnsubscribe.php b/app/code/Magento/Customer/Controller/Adminhtml/Index/MassUnsubscribe.php
index 56f5c054fa6f6288b1639814e87f7e89a56f9bb1..e3ff00a9a58c8c042ba3417ef9774365395af0cc 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/Index/MassUnsubscribe.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/Index/MassUnsubscribe.php
@@ -10,7 +10,7 @@ use Magento\Framework\Controller\ResultFactory;
 use Magento\Backend\App\Action\Context;
 use Magento\Newsletter\Model\SubscriberFactory;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Customer\Model\Resource\Customer\CollectionFactory;
+use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory;
 use Magento\Eav\Model\Entity\Collection\AbstractCollection;
 
 /**
diff --git a/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php b/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php
index b20ff74c9039ffb4a623a9e2c2931f50a9d7eb41..f1f638a852e2e21d213cd0bb6a89b49f69a7695a 100644
--- a/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php
+++ b/app/code/Magento/Customer/Controller/Adminhtml/System/Config/Validatevat/Validate.php
@@ -1,40 +1,45 @@
 <?php
 /**
- *
- * Copyright © 2015 Magento. All rights reserved.
+ * * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
 namespace Magento\Customer\Controller\Adminhtml\System\Config\Validatevat;
 
+use Magento\Framework\Controller\Result\JsonFactory;
+
 class Validate extends \Magento\Customer\Controller\Adminhtml\System\Config\Validatevat
 {
     /**
-     * @var \Magento\Framework\Controller\Result\RawFactory
+     * @var JsonFactory
      */
-    protected $resultRawFactory;
+    protected $resultJsonFactory;
 
     /**
      * @param \Magento\Backend\App\Action\Context $context
-     * @param \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
+     * @param JsonFactory $resultJsonFactory
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
-        \Magento\Framework\Controller\Result\RawFactory $resultRawFactory
+        JsonFactory $resultJsonFactory
     ) {
         parent::__construct($context);
-        $this->resultRawFactory = $resultRawFactory;
+        $this->resultJsonFactory = $resultJsonFactory;
     }
 
     /**
      * Check whether vat is valid
      *
-     * @return \Magento\Framework\Controller\Result\Raw
+     * @return \Magento\Framework\Controller\Result\Json
      */
     public function execute()
     {
         $result = $this->_validate();
-        /** @var \Magento\Framework\Controller\Result\Raw $resultRaw */
-        $resultRaw = $this->resultRawFactory->create();
-        return $resultRaw->setContents((int)$result->getIsValid());
+
+        /** @var \Magento\Framework\Controller\Result\Json $resultJson */
+        $resultJson = $this->resultJsonFactory->create();
+        return $resultJson->setData([
+            'valid' => (int)$result->getIsValid(),
+            'message' => $result->getRequestMessage(),
+        ]);
     }
 }
diff --git a/app/code/Magento/Customer/Controller/Ajax/Login.php b/app/code/Magento/Customer/Controller/Ajax/Login.php
index 8491d5b08e4092774ed5b441d6d0010c63456c80..4258ebf1ef0e18d1c4042425036a343860e8ab38 100644
--- a/app/code/Magento/Customer/Controller/Ajax/Login.php
+++ b/app/code/Magento/Customer/Controller/Ajax/Login.php
@@ -116,7 +116,7 @@ class Login extends \Magento\Framework\App\Action\Action
         } catch (\Exception $e) {
             $response = [
                 'errors' => true,
-                'message' => __('Something went wrong while validating the login and password.')
+                'message' => __('Invalid login or password.')
             ];
         }
         /** @var \Magento\Framework\Controller\Result\Json $resultJson */
diff --git a/app/code/Magento/Customer/Model/Address.php b/app/code/Magento/Customer/Model/Address.php
index f5d0ff2f06e60f6c4d508aea339b8c13810a64b6..9318f0eb6a076cdd5e49a0b6b9e37a13bac2966c 100644
--- a/app/code/Magento/Customer/Model/Address.php
+++ b/app/code/Magento/Customer/Model/Address.php
@@ -64,7 +64,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress
      * @param CustomerFactory $customerFactory
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataProcessor
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
-     * @param \Magento\Framework\Model\Resource\AbstractResource|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
      * @param array $data
      *
@@ -87,7 +87,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress
         CustomerFactory $customerFactory,
         \Magento\Framework\Reflection\DataObjectProcessor $dataProcessor,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -119,7 +119,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress
      */
     protected function _construct()
     {
-        $this->_init('Magento\Customer\Model\Resource\Address');
+        $this->_init('Magento\Customer\Model\ResourceModel\Address');
     }
 
     /**
diff --git a/app/code/Magento/Customer/Model/Address/AbstractAddress.php b/app/code/Magento/Customer/Model/Address/AbstractAddress.php
index 1cb5d95310fabe611868538812e4a2922714ec47..783b8c40017335e7151aeb24f332c83fb2c87fca 100644
--- a/app/code/Magento/Customer/Model/Address/AbstractAddress.php
+++ b/app/code/Magento/Customer/Model/Address/AbstractAddress.php
@@ -127,7 +127,7 @@ class AbstractAddress extends AbstractExtensibleModel implements AddressModelInt
      * @param AddressInterfaceFactory $addressDataFactory
      * @param RegionInterfaceFactory $regionDataFactory
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -146,7 +146,7 @@ class AbstractAddress extends AbstractExtensibleModel implements AddressModelInt
         AddressInterfaceFactory $addressDataFactory,
         RegionInterfaceFactory $regionDataFactory,
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -253,7 +253,7 @@ class AbstractAddress extends AbstractExtensibleModel implements AddressModelInt
     }
 
     /**
-     * Enforce format of the street field
+     * Enforce format of the street field or other multiline custom attributes
      *
      * @param array|string $key
      * @param null $value
@@ -263,12 +263,22 @@ class AbstractAddress extends AbstractExtensibleModel implements AddressModelInt
     {
         if (is_array($key)) {
             $key = $this->_implodeArrayField($key);
-        } elseif (is_array($value)) {
+        } elseif (is_array($value) && $this->isAddressMultilineAttribute($key)) {
             $value = $this->_implodeArrayValues($value);
         }
         return parent::setData($key, $value);
     }
 
+    /**
+     * Check that address can have multiline attribute by this code (as street or some custom attribute)
+     * @param string $code
+     * @return bool
+     */
+    protected function isAddressMultilineAttribute($code)
+    {
+        return $code == 'street' || in_array($code, $this->getCustomAttributesCodes());
+    }
+
     /**
      * Implode value of the array field, if it is present among other fields
      *
@@ -278,7 +288,7 @@ class AbstractAddress extends AbstractExtensibleModel implements AddressModelInt
     protected function _implodeArrayField(array $data)
     {
         foreach ($data as $key => $value) {
-            if (is_array($value)) {
+            if (is_array($value) && $this->isAddressMultilineAttribute($key)) {
                 $data[$key] = $this->_implodeArrayValues($data[$key]);
             }
         }
diff --git a/app/code/Magento/Customer/Model/Attribute.php b/app/code/Magento/Customer/Model/Attribute.php
index ebb6d54bce354503c80aacfe1a415828e9416ad0..e1e56c1e78c07f44bf2695be7fa6361f99cb4033 100644
--- a/app/code/Magento/Customer/Model/Attribute.php
+++ b/app/code/Magento/Customer/Model/Attribute.php
@@ -49,7 +49,7 @@ class Attribute extends \Magento\Eav\Model\Attribute
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Eav\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
@@ -59,7 +59,7 @@ class Attribute extends \Magento\Eav\Model\Attribute
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param DateTimeFormatterInterface $dateTimeFormatter
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
-     * @param \Magento\Framework\Model\Resource\AbstractResource|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
      * @param array $data
      *
@@ -73,7 +73,7 @@ class Attribute extends \Magento\Eav\Model\Attribute
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Eav\Model\Resource\Helper $resourceHelper,
+        \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory,
         \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor,
@@ -83,7 +83,7 @@ class Attribute extends \Magento\Eav\Model\Attribute
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         DateTimeFormatterInterface $dateTimeFormatter,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -118,7 +118,7 @@ class Attribute extends \Magento\Eav\Model\Attribute
      */
     protected function _construct()
     {
-        $this->_init('Magento\Customer\Model\Resource\Attribute');
+        $this->_init('Magento\Customer\Model\ResourceModel\Attribute');
     }
 
     /**
diff --git a/app/code/Magento/Customer/Model/AttributeMetadataDataProvider.php b/app/code/Magento/Customer/Model/AttributeMetadataDataProvider.php
index bdf27d3dfe8e2339fceade6e90b6b4cfd878157c..84b499ec6aa025eb20980192abfa0b575a100de5 100644
--- a/app/code/Magento/Customer/Model/AttributeMetadataDataProvider.php
+++ b/app/code/Magento/Customer/Model/AttributeMetadataDataProvider.php
@@ -19,7 +19,7 @@ class AttributeMetadataDataProvider
     private $eavConfig;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Form\Attribute\CollectionFactory
+     * @var \Magento\Customer\Model\ResourceModel\Form\Attribute\CollectionFactory
      */
     private $attrFormCollectionFactory;
 
@@ -32,12 +32,12 @@ class AttributeMetadataDataProvider
      * Initialize data provider with data source
      *
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Customer\Model\Resource\Form\Attribute\CollectionFactory $attrFormCollectionFactory
+     * @param \Magento\Customer\Model\ResourceModel\Form\Attribute\CollectionFactory $attrFormCollectionFactory
      * @param \Magento\Store\Model\StoreManager $storeManager
      */
     public function __construct(
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Customer\Model\Resource\Form\Attribute\CollectionFactory $attrFormCollectionFactory,
+        \Magento\Customer\Model\ResourceModel\Form\Attribute\CollectionFactory $attrFormCollectionFactory,
         \Magento\Store\Model\StoreManager $storeManager
     ) {
         $this->eavConfig = $eavConfig;
@@ -84,7 +84,7 @@ class AttributeMetadataDataProvider
      *
      * @param string $entityType
      * @param string $formCode
-     * @return \Magento\Customer\Model\Resource\Form\Attribute\Collection
+     * @return \Magento\Customer\Model\ResourceModel\Form\Attribute\Collection
      */
     public function loadAttributesCollection($entityType, $formCode)
     {
diff --git a/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php b/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
index 5870718e4634eb99d597a6be6cce894d690fa20e..d456491e5c33462e25d49386eb0c77fbf7674684 100644
--- a/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
+++ b/app/code/Magento/Customer/Model/Config/Backend/Address/Street.php
@@ -28,7 +28,7 @@ class Street extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -38,7 +38,7 @@ class Street extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php b/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php
index 347fe6ad2e69f04eb3db3a4f6bd30d4d95531a71..2f889d0f7c0788ab8d8a0162fe0fea4b9d046484 100644
--- a/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php
+++ b/app/code/Magento/Customer/Model/Config/Backend/CreateAccount/DisableAutoGroupAssignDefault.php
@@ -17,7 +17,7 @@ class DisableAutoGroupAssignDefault extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -26,7 +26,7 @@ class DisableAutoGroupAssignDefault extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php b/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php
index 58b1009006af86a3c1388a4fc56b5a47790d99b1..31ed960864fcad1679749f632a44a348f21ecf49 100644
--- a/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php
+++ b/app/code/Magento/Customer/Model/Config/Backend/Show/Customer.php
@@ -28,7 +28,7 @@ class Customer extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -38,7 +38,7 @@ class Customer extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/Config/Share.php b/app/code/Magento/Customer/Model/Config/Share.php
index 2b1cddc76719819d63676936773930ae826aa671..5fb8bacb5743c439a0b19e4e0f16e81d64b06083 100644
--- a/app/code/Magento/Customer/Model/Config/Share.php
+++ b/app/code/Magento/Customer/Model/Config/Share.php
@@ -27,7 +27,7 @@ class Share extends \Magento\Framework\App\Config\Value implements \Magento\Fram
     const SHARE_WEBSITE = 1;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer
+     * @var \Magento\Customer\Model\ResourceModel\Customer
      */
     protected $_customerResource;
 
@@ -41,8 +41,8 @@ class Share extends \Magento\Framework\App\Config\Value implements \Magento\Fram
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Customer\Model\Resource\Customer $customerResource
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -51,8 +51,8 @@ class Share extends \Magento\Framework\App\Config\Value implements \Magento\Fram
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Customer\Model\Resource\Customer $customerResource,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Customer\Model\ResourceModel\Customer $customerResource,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Customer/Model/Customer.php b/app/code/Magento/Customer/Model/Customer.php
index 60d88415ffcf34e804dcd8015b348febd13b4398..4516a33962aeaf0dc49c9494185833f9b70da240 100644
--- a/app/code/Magento/Customer/Model/Customer.php
+++ b/app/code/Magento/Customer/Model/Customer.php
@@ -8,8 +8,8 @@ namespace Magento\Customer\Model;
 use Magento\Customer\Api\CustomerMetadataInterface;
 use Magento\Customer\Api\GroupRepositoryInterface;
 use Magento\Customer\Model\Config\Share;
-use Magento\Customer\Model\Resource\Address\CollectionFactory;
-use Magento\Customer\Model\Resource\Customer as ResourceCustomer;
+use Magento\Customer\Model\ResourceModel\Address\CollectionFactory;
+use Magento\Customer\Model\ResourceModel\Customer as ResourceCustomer;
 use Magento\Customer\Api\Data\CustomerInterfaceFactory;
 use Magento\Framework\App\Config\ScopeConfigInterface;
 use Magento\Framework\Reflection\DataObjectProcessor;
@@ -22,7 +22,7 @@ use Magento\Framework\Indexer\StateInterface;
  * Customer model
  *
  * @method int getWebsiteId() getWebsiteId()
- * @method Customer setWebsiteId(int)
+ * @method Customer setWebsiteId($value)
  * @method int getStoreId() getStoreId()
  * @method string getEmail() getEmail()
  * @method ResourceCustomer _getResource()
@@ -108,7 +108,7 @@ class Customer extends \Magento\Framework\Model\AbstractModel
     /**
      * Customer addresses collection
      *
-     * @var \Magento\Customer\Model\Resource\Address\Collection
+     * @var \Magento\Customer\Model\ResourceModel\Address\Collection
      */
     protected $_addressesCollection;
 
@@ -236,10 +236,10 @@ class Customer extends \Magento\Framework\Model\AbstractModel
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Eav\Model\Config $config,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Customer\Model\Resource\Customer $resource,
+        \Magento\Customer\Model\ResourceModel\Customer $resource,
         \Magento\Customer\Model\Config\Share $configShare,
         \Magento\Customer\Model\AddressFactory $addressFactory,
-        \Magento\Customer\Model\Resource\Address\CollectionFactory $addressesFactory,
+        \Magento\Customer\Model\ResourceModel\Address\CollectionFactory $addressesFactory,
         \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder,
         GroupRepositoryInterface $groupRepository,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
@@ -283,7 +283,7 @@ class Customer extends \Magento\Framework\Model\AbstractModel
      */
     public function _construct()
     {
-        $this->_init('Magento\Customer\Model\Resource\Customer');
+        $this->_init('Magento\Customer\Model\ResourceModel\Customer');
     }
 
     /**
@@ -476,7 +476,7 @@ class Customer extends \Magento\Framework\Model\AbstractModel
     /**
      * Retrieve not loaded address collection
      *
-     * @return \Magento\Customer\Model\Resource\Address\Collection
+     * @return \Magento\Customer\Model\ResourceModel\Address\Collection
      */
     public function getAddressCollection()
     {
@@ -486,7 +486,7 @@ class Customer extends \Magento\Framework\Model\AbstractModel
     /**
      * Customer addresses collection
      *
-     * @return \Magento\Customer\Model\Resource\Address\Collection
+     * @return \Magento\Customer\Model\ResourceModel\Address\Collection
      */
     public function getAddressesCollection()
     {
@@ -531,7 +531,7 @@ class Customer extends \Magento\Framework\Model\AbstractModel
      * Get customer attribute model object
      *
      * @param   string $attributeCode
-     * @return  \Magento\Customer\Model\Resource\Attribute | null
+     * @return  \Magento\Customer\Model\ResourceModel\Attribute | null
      */
     public function getAttribute($attributeCode)
     {
@@ -1325,7 +1325,7 @@ class Customer extends \Magento\Framework\Model\AbstractModel
     }
 
     /**
-     * @return \Magento\Customer\Model\Resource\Address\Collection
+     * @return \Magento\Customer\Model\ResourceModel\Address\Collection
      */
     protected function _createAddressCollection()
     {
diff --git a/app/code/Magento/Customer/Model/Customer/Attribute/Source/Group.php b/app/code/Magento/Customer/Model/Customer/Attribute/Source/Group.php
index 48c1f680deefa905b92a73de696c0db1dd209bc1..540642cdbba7f9934261cb4c48d187fd46154d92 100644
--- a/app/code/Magento/Customer/Model/Customer/Attribute/Source/Group.php
+++ b/app/code/Magento/Customer/Model/Customer/Attribute/Source/Group.php
@@ -25,14 +25,14 @@ class Group extends \Magento\Eav\Model\Entity\Attribute\Source\Table
     protected $_converter;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory
      * @param GroupManagementInterface $groupManagement
      * @param \Magento\Framework\Convert\DataObject $converter
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory,
         GroupManagementInterface $groupManagement,
         \Magento\Framework\Convert\DataObject $converter
     ) {
diff --git a/app/code/Magento/Customer/Model/Customer/Attribute/Source/Store.php b/app/code/Magento/Customer/Model/Customer/Attribute/Source/Store.php
index 35c1ac0599900956e56ee019c65b7d073d4c2464..b89dc818f079bba37bf6121b438a61e072c30df9 100644
--- a/app/code/Magento/Customer/Model/Customer/Attribute/Source/Store.php
+++ b/app/code/Magento/Customer/Model/Customer/Attribute/Source/Store.php
@@ -18,21 +18,21 @@ class Store extends \Magento\Eav\Model\Entity\Attribute\Source\Table
     protected $_store;
 
     /**
-     * @var \Magento\Store\Model\Resource\Store\CollectionFactory
+     * @var \Magento\Store\Model\ResourceModel\Store\CollectionFactory
      */
     protected $_storesFactory;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory
      * @param \Magento\Store\Model\System\Store $store
-     * @param \Magento\Store\Model\Resource\Store\CollectionFactory $storesFactory
+     * @param \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storesFactory
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory,
         \Magento\Store\Model\System\Store $store,
-        \Magento\Store\Model\Resource\Store\CollectionFactory $storesFactory
+        \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storesFactory
     ) {
         parent::__construct($attrOptionCollectionFactory, $attrOptionFactory);
         $this->_store = $store;
@@ -95,7 +95,7 @@ class Store extends \Magento\Eav\Model\Entity\Attribute\Source\Table
     }
 
     /**
-     * @return \Magento\Store\Model\Resource\Store\Collection
+     * @return \Magento\Store\Model\ResourceModel\Store\Collection
      */
     protected function _createStoresCollection()
     {
diff --git a/app/code/Magento/Customer/Model/Customer/Attribute/Source/Website.php b/app/code/Magento/Customer/Model/Customer/Attribute/Source/Website.php
index c771c6a685297bdfbdeab3b49c8f3dde213b391a..2833a1681791358bbfc515b16117f94207eb6e01 100644
--- a/app/code/Magento/Customer/Model/Customer/Attribute/Source/Website.php
+++ b/app/code/Magento/Customer/Model/Customer/Attribute/Source/Website.php
@@ -18,13 +18,13 @@ class Website extends \Magento\Eav\Model\Entity\Attribute\Source\Table
     protected $_store;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory
      * @param \Magento\Store\Model\System\Store $store
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory,
         \Magento\Store\Model\System\Store $store
     ) {
         parent::__construct($attrOptionCollectionFactory, $attrOptionFactory);
diff --git a/app/code/Magento/Customer/Model/Customer/DataProvider.php b/app/code/Magento/Customer/Model/Customer/DataProvider.php
index ae03f4c85038125ae0ee4c970c79f6960ff8e44d..e38902cb14170a0695b926fe0ae090cb2aeec50d 100644
--- a/app/code/Magento/Customer/Model/Customer/DataProvider.php
+++ b/app/code/Magento/Customer/Model/Customer/DataProvider.php
@@ -10,8 +10,8 @@ use Magento\Eav\Model\Entity\Type;
 use Magento\Customer\Model\Address;
 use Magento\Customer\Model\Customer;
 use Magento\Ui\DataProvider\EavValidationRules;
-use Magento\Customer\Model\Resource\Customer\Collection;
-use Magento\Customer\Model\Resource\Customer\CollectionFactory as CustomerCollectionFactory;
+use Magento\Customer\Model\ResourceModel\Customer\Collection;
+use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory as CustomerCollectionFactory;
 use Magento\Framework\View\Element\UiComponent\DataProvider\FilterPool;
 
 /**
diff --git a/app/code/Magento/Customer/Model/CustomerManagement.php b/app/code/Magento/Customer/Model/CustomerManagement.php
index 9737ba4fd6dc116b0084caf7d1a5ba5f8a1ee11d..a911a32a27223470b63612d6e5d687e77f0935b3 100644
--- a/app/code/Magento/Customer/Model/CustomerManagement.php
+++ b/app/code/Magento/Customer/Model/CustomerManagement.php
@@ -6,7 +6,7 @@
 namespace Magento\Customer\Model;
 
 use Magento\Customer\Api\CustomerManagementInterface;
-use Magento\Customer\Model\Resource\Customer\CollectionFactory;
+use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory;
 
 class CustomerManagement implements CustomerManagementInterface
 {
@@ -29,7 +29,7 @@ class CustomerManagement implements CustomerManagementInterface
     public function getCount()
     {
         $customers = $this->customersFactory->create();
-        /** @var \Magento\Customer\Model\Resource\Customer\Collection $customers */
+        /** @var \Magento\Customer\Model\ResourceModel\Customer\Collection $customers */
         return $customers->getSize();
     }
 }
diff --git a/app/code/Magento/Customer/Model/Form.php b/app/code/Magento/Customer/Model/Form.php
index a7ab6f73d701ef4aa80ddca9068caca95b071aa7..cb6510eff997dfa558d99c5d7ba055e958ca1944 100644
--- a/app/code/Magento/Customer/Model/Form.php
+++ b/app/code/Magento/Customer/Model/Form.php
@@ -36,7 +36,7 @@ class Form extends \Magento\Eav\Model\Form
      * Get EAV Entity Form Attribute Collection for Customer
      * exclude 'created_at'
      *
-     * @return \Magento\Customer\Model\Resource\Form\Attribute\Collection
+     * @return \Magento\Customer\Model\ResourceModel\Form\Attribute\Collection
      */
     protected function _getFormAttributeCollection()
     {
diff --git a/app/code/Magento/Customer/Model/Group.php b/app/code/Magento/Customer/Model/Group.php
index a912f5b56382e89d818719b02351b9e60a718ad3..8045a4056954eb64d455abf1d65095666a5fd1a0 100644
--- a/app/code/Magento/Customer/Model/Group.php
+++ b/app/code/Magento/Customer/Model/Group.php
@@ -8,8 +8,8 @@ namespace Magento\Customer\Model;
 /**
  * Customer group model
  *
- * @method \Magento\Customer\Model\Resource\Group _getResource()
- * @method \Magento\Customer\Model\Resource\Group getResource()
+ * @method \Magento\Customer\Model\ResourceModel\Group _getResource()
+ * @method \Magento\Customer\Model\ResourceModel\Group getResource()
  * @method string getCustomerGroupCode()
  * @method \Magento\Customer\Model\Group setCustomerGroupCode(string $value)
  * @method \Magento\Customer\Model\Group setTaxClassId(int $value)
@@ -64,7 +64,7 @@ class Group extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Store\Model\StoresConfig $storesConfig
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
      * @param \Magento\Tax\Model\ClassModelFactory $classModelFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -75,7 +75,7 @@ class Group extends \Magento\Framework\Model\AbstractModel
         \Magento\Store\Model\StoresConfig $storesConfig,
         \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor,
         \Magento\Tax\Model\ClassModelFactory $classModelFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -96,7 +96,7 @@ class Group extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Customer\Model\Resource\Group');
+        $this->_init('Magento\Customer\Model\ResourceModel\Group');
     }
 
     /**
diff --git a/app/code/Magento/Customer/Model/Indexer/Address/AttributeProvider.php b/app/code/Magento/Customer/Model/Indexer/Address/AttributeProvider.php
index b2a607b535cc2fb7c9eeaede541057998e17e705..06e9b8d2168247508f86b2f7776d9830014f228d 100644
--- a/app/code/Magento/Customer/Model/Indexer/Address/AttributeProvider.php
+++ b/app/code/Magento/Customer/Model/Indexer/Address/AttributeProvider.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Customer\Model\Indexer\Address;
 
-use Magento\Customer\Model\Resource\Address\Attribute\Collection;
+use Magento\Customer\Model\ResourceModel\Address\Attribute\Collection;
 use Magento\Eav\Model\Config;
 use Magento\Eav\Model\Entity\Attribute;
 
diff --git a/app/code/Magento/Customer/Model/Indexer/Attribute/Filter.php b/app/code/Magento/Customer/Model/Indexer/Attribute/Filter.php
index 8c954838797bcc18a39843d803361552d6433d8f..2e1b5b43c7c4ec90d4ddaa3c464ba11d0de5fbe2 100644
--- a/app/code/Magento/Customer/Model/Indexer/Attribute/Filter.php
+++ b/app/code/Magento/Customer/Model/Indexer/Attribute/Filter.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Customer\Model\Indexer\Attribute;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Indexer\ScopeResolver\FlatScopeResolver;
 use Magento\Customer\Model\Customer;
 use Magento\Framework\Indexer\IndexerRegistry;
@@ -23,12 +23,12 @@ class Filter
     protected $indexerRegistry;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param FlatScopeResolver $flatScopeResolver
      * @param IndexerRegistry $indexerRegistry
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         FlatScopeResolver $flatScopeResolver,
         IndexerRegistry $indexerRegistry
     ) {
diff --git a/app/code/Magento/Customer/Model/Indexer/AttributeProvider.php b/app/code/Magento/Customer/Model/Indexer/AttributeProvider.php
index 53f7a695e4cd9e61d721db5d58bbd7c1fb62377e..93366595dd929704b9c7229c7630c08b0fccca49 100644
--- a/app/code/Magento/Customer/Model/Indexer/AttributeProvider.php
+++ b/app/code/Magento/Customer/Model/Indexer/AttributeProvider.php
@@ -61,7 +61,7 @@ class AttributeProvider implements FieldsetInterface
             $entityType = $this->eavConfig->getEntityType(static::ENTITY);
             /** @var \Magento\Customer\Model\Attribute[] $attributes */
             $attributes = $entityType->getAttributeCollection()->getItems();
-            /** @var \Magento\Customer\Model\Resource\Customer $entity */
+            /** @var \Magento\Customer\Model\ResourceModel\Customer $entity */
             $entity = $entityType->getEntity();
 
             foreach ($attributes as $attribute) {
diff --git a/app/code/Magento/Customer/Model/Logger.php b/app/code/Magento/Customer/Model/Logger.php
index 195c123b738ec0f13bf7c6635d90259592d66772..2ae7b0dddf6e0909882605dc00dd4b44c2885270 100644
--- a/app/code/Magento/Customer/Model/Logger.php
+++ b/app/code/Magento/Customer/Model/Logger.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Customer\Model;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Customer log data logger.
@@ -27,11 +27,11 @@ class Logger
     protected $logFactory;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param \Magento\Customer\Model\LogFactory $logFactory
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         \Magento\Customer\Model\LogFactory $logFactory
     ) {
         $this->resource = $resource;
@@ -55,7 +55,7 @@ class Logger
         }
 
         /** @var \Magento\Framework\DB\Adapter\AdapterInterface $connection */
-        $connection = $this->resource->getConnection(Resource::DEFAULT_CONNECTION);
+        $connection = $this->resource->getConnection(ResourceConnection::DEFAULT_CONNECTION);
 
         $connection->insertOnDuplicate(
             $this->resource->getTableName('customer_log'),
diff --git a/app/code/Magento/Customer/Model/Observer/Grid.php b/app/code/Magento/Customer/Model/Observer/Grid.php
index 7b958a5f251b7be98638e25a017adad25a3681a3..e3118ff2c8fb3226e69a256d7bea1e68bb27c12b 100644
--- a/app/code/Magento/Customer/Model/Observer/Grid.php
+++ b/app/code/Magento/Customer/Model/Observer/Grid.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Customer\Model\Observer;
 
-use Magento\Customer\Model\Resource\Customer\Grid as CustomerGrid;
+use Magento\Customer\Model\ResourceModel\Customer\Grid as CustomerGrid;
 
 class Grid
 {
diff --git a/app/code/Magento/Customer/Model/Resource/Address.php b/app/code/Magento/Customer/Model/ResourceModel/Address.php
similarity index 88%
rename from app/code/Magento/Customer/Model/Resource/Address.php
rename to app/code/Magento/Customer/Model/ResourceModel/Address.php
index c4565cde2f6df7376b717f11dadf426e4ce192f5..53502f748395b8eb7504edcf591bb5ffbbf70161 100644
--- a/app/code/Magento/Customer/Model/Resource/Address.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Address.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource;
+namespace Magento\Customer\Model\ResourceModel;
 
 class Address extends \Magento\Eav\Model\Entity\VersionControl\AbstractEntity
 {
@@ -21,16 +21,16 @@ class Address extends \Magento\Eav\Model\Entity\VersionControl\AbstractEntity
 
     /**
      * @param \Magento\Eav\Model\Entity\Context $context
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite,
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
      * @param \Magento\Framework\Validator\Factory $validatorFactory
      * @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
      * @param array $data
      */
     public function __construct(
         \Magento\Eav\Model\Entity\Context $context,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
-        \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
         \Magento\Framework\Validator\Factory $validatorFactory,
         \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
         $data = []
diff --git a/app/code/Magento/Customer/Model/Resource/Address/Attribute/Backend/Region.php b/app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Backend/Region.php
similarity index 94%
rename from app/code/Magento/Customer/Model/Resource/Address/Attribute/Backend/Region.php
rename to app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Backend/Region.php
index ac8d8e119fbb0dc27b233a4c0766f45351d358b8..82f845140eea8e144a7db585f63eba1fc465e69a 100644
--- a/app/code/Magento/Customer/Model/Resource/Address/Attribute/Backend/Region.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Backend/Region.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Address\Attribute\Backend;
+namespace Magento\Customer\Model\ResourceModel\Address\Attribute\Backend;
 
 /**
  * Address region attribute backend
diff --git a/app/code/Magento/Customer/Model/Resource/Address/Attribute/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Collection.php
similarity index 71%
rename from app/code/Magento/Customer/Model/Resource/Address/Attribute/Collection.php
rename to app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Collection.php
index cc13234b1728ea57b7cdbfb4fde14d3cd5826d96..63c4e606088a0d840db421f38d138f10cfd677b2 100644
--- a/app/code/Magento/Customer/Model/Resource/Address/Attribute/Collection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Customer\Model\Resource\Address\Attribute;
+namespace Magento\Customer\Model\ResourceModel\Address\Attribute;
 
-class Collection extends \Magento\Customer\Model\Resource\Attribute\Collection
+class Collection extends \Magento\Customer\Model\ResourceModel\Attribute\Collection
 {
     /**
      * Default attribute entity type code
diff --git a/app/code/Magento/Customer/Model/Resource/Address/Attribute/Source/Country.php b/app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Source/Country.php
similarity index 55%
rename from app/code/Magento/Customer/Model/Resource/Address/Attribute/Source/Country.php
rename to app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Source/Country.php
index 76bd776e07fe84515300779b86ded23e6ed8acc1..f5f5cfac30af8ff2f7ce55671cbfa5f86ea3f315 100644
--- a/app/code/Magento/Customer/Model/Resource/Address/Attribute/Source/Country.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Source/Country.php
@@ -9,24 +9,24 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Customer\Model\Resource\Address\Attribute\Source;
+namespace Magento\Customer\Model\ResourceModel\Address\Attribute\Source;
 
 class Country extends \Magento\Eav\Model\Entity\Attribute\Source\Table
 {
     /**
-     * @var \Magento\Directory\Model\Resource\Country\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Country\CollectionFactory
      */
     protected $_countriesFactory;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countriesFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countriesFactory
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countriesFactory
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countriesFactory
     ) {
         $this->_countriesFactory = $countriesFactory;
         parent::__construct($attrOptionCollectionFactory, $attrOptionFactory);
@@ -48,7 +48,7 @@ class Country extends \Magento\Eav\Model\Entity\Attribute\Source\Table
     }
 
     /**
-     * @return \Magento\Directory\Model\Resource\Country\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     protected function _createCountriesCollection()
     {
diff --git a/app/code/Magento/Customer/Model/Resource/Address/Attribute/Source/Region.php b/app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Source/Region.php
similarity index 53%
rename from app/code/Magento/Customer/Model/Resource/Address/Attribute/Source/Region.php
rename to app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Source/Region.php
index 22e6f5a75b9730776b2eec2fdab152d2d7102380..339c4d124824270eadd0fd13e9b2b6dc95b0853e 100644
--- a/app/code/Magento/Customer/Model/Resource/Address/Attribute/Source/Region.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Address/Attribute/Source/Region.php
@@ -9,24 +9,24 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Customer\Model\Resource\Address\Attribute\Source;
+namespace Magento\Customer\Model\ResourceModel\Address\Attribute\Source;
 
 class Region extends \Magento\Eav\Model\Entity\Attribute\Source\Table
 {
     /**
-     * @var \Magento\Directory\Model\Resource\Region\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory
      */
     protected $_regionsFactory;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionsFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionsFactory
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionsFactory
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionsFactory
     ) {
         $this->_regionsFactory = $regionsFactory;
         parent::__construct($attrOptionCollectionFactory, $attrOptionFactory);
@@ -46,7 +46,7 @@ class Region extends \Magento\Eav\Model\Entity\Attribute\Source\Table
     }
 
     /**
-     * @return \Magento\Directory\Model\Resource\Region\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Region\Collection
      */
     protected function _createRegionsCollection()
     {
diff --git a/app/code/Magento/Customer/Model/Resource/Address/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Address/Collection.php
similarity index 91%
rename from app/code/Magento/Customer/Model/Resource/Address/Collection.php
rename to app/code/Magento/Customer/Model/ResourceModel/Address/Collection.php
index 771db1c598ca9d09e88de1444bdcd30a27c57adc..a806e094555e6cf7460d8b014d3a25f58b00b770 100644
--- a/app/code/Magento/Customer/Model/Resource/Address/Collection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Address/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Address;
+namespace Magento\Customer\Model\ResourceModel\Address;
 
 /**
  * Customers collection
@@ -19,7 +19,7 @@ class Collection extends \Magento\Eav\Model\Entity\Collection\VersionControl\Abs
      */
     protected function _construct()
     {
-        $this->_init('Magento\Customer\Model\Address', 'Magento\Customer\Model\Resource\Address');
+        $this->_init('Magento\Customer\Model\Address', 'Magento\Customer\Model\ResourceModel\Address');
     }
 
     /**
diff --git a/app/code/Magento/Customer/Model/Resource/Address/Relation.php b/app/code/Magento/Customer/Model/ResourceModel/Address/Relation.php
similarity index 94%
rename from app/code/Magento/Customer/Model/Resource/Address/Relation.php
rename to app/code/Magento/Customer/Model/ResourceModel/Address/Relation.php
index 236332b060bf322006f8e079def06ccaa050bc1c..3267ab03cb61daa4b1777e062fd15c5674c2cb8d 100644
--- a/app/code/Magento/Customer/Model/Resource/Address/Relation.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Address/Relation.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Address;
+namespace Magento\Customer\Model\ResourceModel\Address;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 
 /**
  * Class represents save operations for customer address relations
diff --git a/app/code/Magento/Customer/Model/Resource/AddressRepository.php b/app/code/Magento/Customer/Model/ResourceModel/AddressRepository.php
similarity index 94%
rename from app/code/Magento/Customer/Model/Resource/AddressRepository.php
rename to app/code/Magento/Customer/Model/ResourceModel/AddressRepository.php
index beee1746318b13a9fe1b898c5a43bf2489828177..3942385c8cc611c7f2587738eb3c94c4ef9b2c1e 100644
--- a/app/code/Magento/Customer/Model/Resource/AddressRepository.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/AddressRepository.php
@@ -5,10 +5,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource;
+namespace Magento\Customer\Model\ResourceModel;
 
 use Magento\Customer\Model\Address as CustomerAddressModel;
-use Magento\Customer\Model\Resource\Address\Collection;
+use Magento\Customer\Model\ResourceModel\Address\Collection;
 use Magento\Framework\Api\Search\FilterGroup;
 use Magento\Framework\Api\SearchCriteriaInterface;
 use Magento\Framework\Api\SortOrder;
@@ -42,7 +42,7 @@ class AddressRepository implements \Magento\Customer\Api\AddressRepositoryInterf
     protected $customerRegistry;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Address
+     * @var \Magento\Customer\Model\ResourceModel\Address
      */
     protected $addressResourceModel;
 
@@ -52,7 +52,7 @@ class AddressRepository implements \Magento\Customer\Api\AddressRepositoryInterf
     protected $addressSearchResultsFactory;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Address\CollectionFactory
+     * @var \Magento\Customer\Model\ResourceModel\Address\CollectionFactory
      */
     protected $addressCollectionFactory;
 
@@ -65,20 +65,20 @@ class AddressRepository implements \Magento\Customer\Api\AddressRepositoryInterf
      * @param \Magento\Customer\Model\AddressFactory $addressFactory
      * @param \Magento\Customer\Model\AddressRegistry $addressRegistry
      * @param \Magento\Customer\Model\CustomerRegistry $customerRegistry
-     * @param \Magento\Customer\Model\Resource\Address $addressResourceModel
+     * @param \Magento\Customer\Model\ResourceModel\Address $addressResourceModel
      * @param \Magento\Directory\Helper\Data $directoryData
      * @param \Magento\Customer\Api\Data\AddressSearchResultsInterfaceFactory $addressSearchResultsFactory
-     * @param \Magento\Customer\Model\Resource\Address\CollectionFactory $addressCollectionFactory
+     * @param \Magento\Customer\Model\ResourceModel\Address\CollectionFactory $addressCollectionFactory
      * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor
      */
     public function __construct(
         \Magento\Customer\Model\AddressFactory $addressFactory,
         \Magento\Customer\Model\AddressRegistry $addressRegistry,
         \Magento\Customer\Model\CustomerRegistry $customerRegistry,
-        \Magento\Customer\Model\Resource\Address $addressResourceModel,
+        \Magento\Customer\Model\ResourceModel\Address $addressResourceModel,
         \Magento\Directory\Helper\Data $directoryData,
         \Magento\Customer\Api\Data\AddressSearchResultsInterfaceFactory $addressSearchResultsFactory,
-        \Magento\Customer\Model\Resource\Address\CollectionFactory $addressCollectionFactory,
+        \Magento\Customer\Model\ResourceModel\Address\CollectionFactory $addressCollectionFactory,
         \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor
     ) {
         $this->addressFactory = $addressFactory;
@@ -120,7 +120,7 @@ class AddressRepository implements \Magento\Customer\Api\AddressRepositoryInterf
         }
         $addressModel->save();
         // Clean up the customer registry since the Address save has a
-        // side effect on customer : \Magento\Customer\Model\Resource\Address::_afterSave
+        // side effect on customer : \Magento\Customer\Model\ResourceModel\Address::_afterSave
         $this->customerRegistry->remove($address->getCustomerId());
         $this->addressRegistry->push($addressModel);
         $customerModel->getAddressesCollection()->clear();
diff --git a/app/code/Magento/Customer/Model/Resource/Attribute.php b/app/code/Magento/Customer/Model/ResourceModel/Attribute.php
similarity index 88%
rename from app/code/Magento/Customer/Model/Resource/Attribute.php
rename to app/code/Magento/Customer/Model/ResourceModel/Attribute.php
index e7332c413d6b16344e501177d16a80c7ad568607..b716fbb4e4409ed54dbc0dd0867ec2f6c112e6dd 100644
--- a/app/code/Magento/Customer/Model/Resource/Attribute.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Attribute.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Customer\Model\Resource;
+namespace Magento\Customer\Model\ResourceModel;
 
-class Attribute extends \Magento\Eav\Model\Resource\Attribute
+class Attribute extends \Magento\Eav\Model\ResourceModel\Attribute
 {
     /**
      * Get EAV website table
diff --git a/app/code/Magento/Customer/Model/Resource/Attribute/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Attribute/Collection.php
similarity index 87%
rename from app/code/Magento/Customer/Model/Resource/Attribute/Collection.php
rename to app/code/Magento/Customer/Model/ResourceModel/Attribute/Collection.php
index face7030ebf2dd03ffb2da24e08daccd32bffbd2..a05fc1a9deae5fda8f59de24c554f1c8a38a2632 100644
--- a/app/code/Magento/Customer/Model/Resource/Attribute/Collection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Attribute/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Customer\Model\Resource\Attribute;
+namespace Magento\Customer\Model\ResourceModel\Attribute;
 
-class Collection extends \Magento\Eav\Model\Resource\Attribute\Collection
+class Collection extends \Magento\Eav\Model\ResourceModel\Attribute\Collection
 {
     /**
      * Default attribute entity type code
diff --git a/app/code/Magento/Customer/Model/Resource/Customer.php b/app/code/Magento/Customer/Model/ResourceModel/Customer.php
similarity index 95%
rename from app/code/Magento/Customer/Model/Resource/Customer.php
rename to app/code/Magento/Customer/Model/ResourceModel/Customer.php
index 1742f50bf0f34dc95e529865aa11d8e7c068e33b..e96b8c1b2a4df9ef57b91033b6ffe9275c1a4629 100644
--- a/app/code/Magento/Customer/Model/Resource/Customer.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Customer.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource;
+namespace Magento\Customer\Model\ResourceModel;
 
 use Magento\Framework\Validator\Exception as ValidatorException;
 use Magento\Framework\Exception\AlreadyExistsException;
@@ -38,8 +38,8 @@ class Customer extends \Magento\Eav\Model\Entity\VersionControl\AbstractEntity
 
     /**
      * @param \Magento\Eav\Model\Entity\Context $context
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\Validator\Factory $validatorFactory
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
@@ -48,8 +48,8 @@ class Customer extends \Magento\Eav\Model\Entity\VersionControl\AbstractEntity
      */
     public function __construct(
         \Magento\Eav\Model\Entity\Context $context,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
-        \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\Validator\Factory $validatorFactory,
         \Magento\Framework\Stdlib\DateTime $dateTime,
diff --git a/app/code/Magento/Customer/Model/Resource/Customer/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Customer/Collection.php
similarity index 91%
rename from app/code/Magento/Customer/Model/Resource/Customer/Collection.php
rename to app/code/Magento/Customer/Model/ResourceModel/Customer/Collection.php
index 1fb4b1268113158340b0aa79262ee862d0147864..e8982afaba93cae57bef390cd236b8cdda58a8b4 100644
--- a/app/code/Magento/Customer/Model/Resource/Customer/Collection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Customer/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Customer;
+namespace Magento\Customer\Model\ResourceModel\Customer;
 
 /**
  * Customers collection
@@ -34,11 +34,11 @@ class Collection extends \Magento\Eav\Model\Entity\Collection\VersionControl\Abs
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Eav\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Framework\DataObject\Copy\Config $fieldsetConfig
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      * @param string $modelName
@@ -51,11 +51,11 @@ class Collection extends \Magento\Eav\Model\Entity\Collection\VersionControl\Abs
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Eav\Model\Resource\Helper $resourceHelper,
+        \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DataObject\Copy\Config $fieldsetConfig,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
         $modelName = self::CUSTOMER_MODEL_NAME
@@ -84,7 +84,7 @@ class Collection extends \Magento\Eav\Model\Entity\Collection\VersionControl\Abs
      */
     protected function _construct()
     {
-        $this->_init($this->_modelName, 'Magento\Customer\Model\Resource\Customer');
+        $this->_init($this->_modelName, 'Magento\Customer\Model\ResourceModel\Customer');
     }
 
     /**
diff --git a/app/code/Magento/Customer/Model/Resource/Customer/Grid.php b/app/code/Magento/Customer/Model/ResourceModel/Customer/Grid.php
similarity index 92%
rename from app/code/Magento/Customer/Model/Resource/Customer/Grid.php
rename to app/code/Magento/Customer/Model/ResourceModel/Customer/Grid.php
index 0c216fcc6e811f489c3e93e44586a2e51d73d6a4..deed36f3e576ba8af26f3203ebb3683d4638fa5c 100644
--- a/app/code/Magento/Customer/Model/Resource/Customer/Grid.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Customer/Grid.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Customer;
+namespace Magento\Customer\Model\ResourceModel\Customer;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Indexer\IndexerRegistry;
 use Magento\Framework\Indexer\ScopeResolver\FlatScopeResolver;
 use Magento\Customer\Model\Customer;
@@ -24,12 +24,12 @@ class Grid
     protected $flatScopeResolver;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param IndexerRegistry $indexerRegistry
      * @param FlatScopeResolver $flatScopeResolver
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         IndexerRegistry $indexerRegistry,
         FlatScopeResolver $flatScopeResolver
     ) {
diff --git a/app/code/Magento/Customer/Model/Resource/Customer/Relation.php b/app/code/Magento/Customer/Model/ResourceModel/Customer/Relation.php
similarity index 94%
rename from app/code/Magento/Customer/Model/Resource/Customer/Relation.php
rename to app/code/Magento/Customer/Model/ResourceModel/Customer/Relation.php
index fd67dcb422ffaa482391784404947f1b57f07a1e..b809549ed79f35bb2908c43419a7cd5aa74864fd 100644
--- a/app/code/Magento/Customer/Model/Resource/Customer/Relation.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Customer/Relation.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Customer\Model\Resource\Customer;
+namespace Magento\Customer\Model\ResourceModel\Customer;
 
 /**
  * Class Relation
  */
-class Relation implements \Magento\Framework\Model\Resource\Db\VersionControl\RelationInterface
+class Relation implements \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface
 {
     /**
      * Save relations for Customer
diff --git a/app/code/Magento/Customer/Model/Resource/CustomerRepository.php b/app/code/Magento/Customer/Model/ResourceModel/CustomerRepository.php
similarity index 95%
rename from app/code/Magento/Customer/Model/Resource/CustomerRepository.php
rename to app/code/Magento/Customer/Model/ResourceModel/CustomerRepository.php
index 429210512de90ab81b93290918b34e533ba1d879..6959b0da8ab10549ff29bbade5236febbe306c98 100644
--- a/app/code/Magento/Customer/Model/Resource/CustomerRepository.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/CustomerRepository.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Customer\Model\Resource;
+namespace Magento\Customer\Model\ResourceModel;
 
 use Magento\Customer\Api\CustomerMetadataInterface;
 use Magento\Customer\Model\Data\CustomerSecure;
@@ -37,12 +37,12 @@ class CustomerRepository implements \Magento\Customer\Api\CustomerRepositoryInte
     protected $customerRegistry;
 
     /**
-     * @var \Magento\Customer\Model\Resource\AddressRepository
+     * @var \Magento\Customer\Model\ResourceModel\AddressRepository
      */
     protected $addressRepository;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer
+     * @var \Magento\Customer\Model\ResourceModel\Customer
      */
     protected $customerResourceModel;
 
@@ -90,8 +90,8 @@ class CustomerRepository implements \Magento\Customer\Api\CustomerRepositoryInte
      * @param \Magento\Customer\Model\CustomerFactory $customerFactory
      * @param \Magento\Customer\Model\Data\CustomerSecureFactory $customerSecureFactory
      * @param \Magento\Customer\Model\CustomerRegistry $customerRegistry
-     * @param \Magento\Customer\Model\Resource\AddressRepository $addressRepository
-     * @param \Magento\Customer\Model\Resource\Customer $customerResourceModel
+     * @param \Magento\Customer\Model\ResourceModel\AddressRepository $addressRepository
+     * @param \Magento\Customer\Model\ResourceModel\Customer $customerResourceModel
      * @param \Magento\Customer\Api\CustomerMetadataInterface $customerMetadata
      * @param \Magento\Customer\Api\Data\CustomerSearchResultsInterfaceFactory $searchResultsFactory
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
@@ -106,8 +106,8 @@ class CustomerRepository implements \Magento\Customer\Api\CustomerRepositoryInte
         \Magento\Customer\Model\CustomerFactory $customerFactory,
         \Magento\Customer\Model\Data\CustomerSecureFactory $customerSecureFactory,
         \Magento\Customer\Model\CustomerRegistry $customerRegistry,
-        \Magento\Customer\Model\Resource\AddressRepository $addressRepository,
-        \Magento\Customer\Model\Resource\Customer $customerResourceModel,
+        \Magento\Customer\Model\ResourceModel\AddressRepository $addressRepository,
+        \Magento\Customer\Model\ResourceModel\Customer $customerResourceModel,
         \Magento\Customer\Api\CustomerMetadataInterface $customerMetadata,
         \Magento\Customer\Api\Data\CustomerSearchResultsInterfaceFactory $searchResultsFactory,
         \Magento\Framework\Event\ManagerInterface $eventManager,
@@ -257,7 +257,7 @@ class CustomerRepository implements \Magento\Customer\Api\CustomerRepositoryInte
     {
         $searchResults = $this->searchResultsFactory->create();
         $searchResults->setSearchCriteria($searchCriteria);
-        /** @var \Magento\Customer\Model\Resource\Customer\Collection $collection */
+        /** @var \Magento\Customer\Model\ResourceModel\Customer\Collection $collection */
         $collection = $this->customerFactory->create()->getCollection();
         $this->extensionAttributesJoinProcessor->process($collection, 'Magento\Customer\Api\Data\CustomerInterface');
         // This is needed to make sure all the attributes are properly loaded
@@ -391,13 +391,13 @@ class CustomerRepository implements \Magento\Customer\Api\CustomerRepositoryInte
      * Helper function that adds a FilterGroup to the collection.
      *
      * @param \Magento\Framework\Api\Search\FilterGroup $filterGroup
-     * @param \Magento\Customer\Model\Resource\Customer\Collection $collection
+     * @param \Magento\Customer\Model\ResourceModel\Customer\Collection $collection
      * @return void
      * @throws \Magento\Framework\Exception\InputException
      */
     protected function addFilterGroupToCollection(
         \Magento\Framework\Api\Search\FilterGroup $filterGroup,
-        \Magento\Customer\Model\Resource\Customer\Collection $collection
+        \Magento\Customer\Model\ResourceModel\Customer\Collection $collection
     ) {
         $fields = [];
         $conditions = [];
diff --git a/app/code/Magento/Customer/Model/Resource/Form/Attribute.php b/app/code/Magento/Customer/Model/ResourceModel/Form/Attribute.php
similarity index 77%
rename from app/code/Magento/Customer/Model/Resource/Form/Attribute.php
rename to app/code/Magento/Customer/Model/ResourceModel/Form/Attribute.php
index 28241f5b90d300e87c9e598ee739819c3a6c1689..63324eb627f1e0b674c48e113c7848b7b66d7375 100644
--- a/app/code/Magento/Customer/Model/Resource/Form/Attribute.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Form/Attribute.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Form;
+namespace Magento\Customer\Model\ResourceModel\Form;
 
 /**
  * Customer Form Attribute Resource Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Attribute extends \Magento\Eav\Model\Resource\Form\Attribute
+class Attribute extends \Magento\Eav\Model\ResourceModel\Form\Attribute
 {
     /**
      * Initialize connection and define main table
diff --git a/app/code/Magento/Customer/Model/Resource/Form/Attribute/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Form/Attribute/Collection.php
similarity index 84%
rename from app/code/Magento/Customer/Model/Resource/Form/Attribute/Collection.php
rename to app/code/Magento/Customer/Model/ResourceModel/Form/Attribute/Collection.php
index b6c354d5af2d65576f6b8e6fc13d8370d0ddee89..6b4f7cea57bdebad47452fd09d9119bc944969c1 100644
--- a/app/code/Magento/Customer/Model/Resource/Form/Attribute/Collection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Form/Attribute/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Form\Attribute;
+namespace Magento\Customer\Model\ResourceModel\Form\Attribute;
 
 /**
  * Customer Form Attribute Resource Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Eav\Model\Resource\Form\Attribute\Collection
+class Collection extends \Magento\Eav\Model\ResourceModel\Form\Attribute\Collection
 {
     /**
      * Current module pathname
@@ -34,7 +34,7 @@ class Collection extends \Magento\Eav\Model\Resource\Form\Attribute\Collection
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\Eav\Model\Attribute', 'Magento\Customer\Model\Resource\Form\Attribute');
+        $this->_init('Magento\Eav\Model\Attribute', 'Magento\Customer\Model\ResourceModel\Form\Attribute');
     }
 
     /**
diff --git a/app/code/Magento/Customer/Model/Resource/Group.php b/app/code/Magento/Customer/Model/ResourceModel/Group.php
similarity index 84%
rename from app/code/Magento/Customer/Model/Resource/Group.php
rename to app/code/Magento/Customer/Model/ResourceModel/Group.php
index abf6717d1ee7a62dd78f7ca1bd6d45c355b46132..7c793f8fc9e9310571038692a9d5718e2509acb4 100644
--- a/app/code/Magento/Customer/Model/Resource/Group.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Group.php
@@ -3,17 +3,17 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource;
+namespace Magento\Customer\Model\ResourceModel;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
 
 /**
  * Customer group resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Group extends \Magento\Framework\Model\Resource\Db\VersionControl\AbstractDb
+class Group extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb
 {
     /**
      * Group Management
@@ -23,12 +23,12 @@ class Group extends \Magento\Framework\Model\Resource\Db\VersionControl\Abstract
     protected $_groupManagement;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer\CollectionFactory
+     * @var \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory
      */
     protected $_customersFactory;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param Snapshot $entitySnapshot,
      * @param RelationComposite $entityRelationComposite,
      * @param \Magento\Customer\Api\GroupManagementInterface $groupManagement
@@ -36,11 +36,11 @@ class Group extends \Magento\Framework\Model\Resource\Db\VersionControl\Abstract
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
         RelationComposite $entityRelationComposite,
         \Magento\Customer\Api\GroupManagementInterface $groupManagement,
-        \Magento\Customer\Model\Resource\Customer\CollectionFactory $customersFactory,
+        \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customersFactory,
         $connectionName = null
     ) {
         $this->_groupManagement = $groupManagement;
@@ -110,7 +110,7 @@ class Group extends \Magento\Framework\Model\Resource\Db\VersionControl\Abstract
     }
 
     /**
-     * @return \Magento\Customer\Model\Resource\Customer\Collection
+     * @return \Magento\Customer\Model\ResourceModel\Customer\Collection
      */
     protected function _createCustomersCollection()
     {
diff --git a/app/code/Magento/Customer/Model/Resource/Group/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Group/Collection.php
similarity index 89%
rename from app/code/Magento/Customer/Model/Resource/Group/Collection.php
rename to app/code/Magento/Customer/Model/ResourceModel/Group/Collection.php
index b5f6a27375562fb4de56a5a657449ffd9ed026da..52d37da5646e30bd01228ac421bae204804624c3 100644
--- a/app/code/Magento/Customer/Model/Resource/Group/Collection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Group/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Group;
+namespace Magento\Customer\Model\ResourceModel\Group;
 
 /**
  * Customer group collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Customer\Model\Group', 'Magento\Customer\Model\Resource\Group');
+        $this->_init('Magento\Customer\Model\Group', 'Magento\Customer\Model\ResourceModel\Group');
     }
 
     /**
diff --git a/app/code/Magento/Customer/Model/Resource/Group/Grid/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Group/Grid/Collection.php
similarity index 71%
rename from app/code/Magento/Customer/Model/Resource/Group/Grid/Collection.php
rename to app/code/Magento/Customer/Model/ResourceModel/Group/Grid/Collection.php
index 0768e467f6b47b73a8ff69294f9ba580b041749d..1300077687af527920765fae7dac7940f28a809b 100644
--- a/app/code/Magento/Customer/Model/Resource/Group/Grid/Collection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Group/Grid/Collection.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Group\Grid;
+namespace Magento\Customer\Model\ResourceModel\Group\Grid;
 
-class Collection extends \Magento\Customer\Model\Resource\Group\Collection
+class Collection extends \Magento\Customer\Model\ResourceModel\Group\Collection
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Customer/Model/Resource/Group/Grid/ServiceCollection.php b/app/code/Magento/Customer/Model/ResourceModel/Group/Grid/ServiceCollection.php
similarity index 97%
rename from app/code/Magento/Customer/Model/Resource/Group/Grid/ServiceCollection.php
rename to app/code/Magento/Customer/Model/ResourceModel/Group/Grid/ServiceCollection.php
index dee81e8af82f5a4f7c93f894cbbe59232bdfe0cf..6794bc269002d7afd3c517a4583b74e5b14d112b 100644
--- a/app/code/Magento/Customer/Model/Resource/Group/Grid/ServiceCollection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Group/Grid/ServiceCollection.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Customer\Model\Resource\Group\Grid;
+namespace Magento\Customer\Model\ResourceModel\Group\Grid;
 
 use Magento\Framework\Data\Collection\EntityFactory;
 use Magento\Customer\Api\Data\GroupInterface;
diff --git a/app/code/Magento/Customer/Model/Resource/GroupRepository.php b/app/code/Magento/Customer/Model/ResourceModel/GroupRepository.php
similarity index 96%
rename from app/code/Magento/Customer/Model/Resource/GroupRepository.php
rename to app/code/Magento/Customer/Model/ResourceModel/GroupRepository.php
index 48c800bf23125ebf7362f8b09b7577880d42305f..af526f255f885244ba82d896feb3213e419806df 100644
--- a/app/code/Magento/Customer/Model/Resource/GroupRepository.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/GroupRepository.php
@@ -4,10 +4,10 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Customer\Model\Resource;
+namespace Magento\Customer\Model\ResourceModel;
 
 use Magento\Customer\Api\Data\GroupInterface;
-use Magento\Customer\Model\Resource\Group\Collection;
+use Magento\Customer\Model\ResourceModel\Group\Collection;
 use Magento\Framework\Api\Search\FilterGroup;
 use Magento\Framework\Api\SearchCriteriaInterface;
 use Magento\Framework\Api\SortOrder;
@@ -46,7 +46,7 @@ class GroupRepository implements \Magento\Customer\Api\GroupRepositoryInterface
     protected $groupDataFactory;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Group
+     * @var \Magento\Customer\Model\ResourceModel\Group
      */
     protected $groupResourceModel;
 
@@ -74,7 +74,7 @@ class GroupRepository implements \Magento\Customer\Api\GroupRepositoryInterface
      * @param \Magento\Customer\Model\GroupRegistry $groupRegistry
      * @param \Magento\Customer\Model\GroupFactory $groupFactory
      * @param \Magento\Customer\Api\Data\GroupInterfaceFactory $groupDataFactory
-     * @param \Magento\Customer\Model\Resource\Group $groupResourceModel
+     * @param \Magento\Customer\Model\ResourceModel\Group $groupResourceModel
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
      * @param \Magento\Customer\Api\Data\GroupSearchResultsInterfaceFactory $searchResultsFactory
      * @param \Magento\Tax\Api\TaxClassRepositoryInterface $taxClassRepositoryInterface
@@ -84,7 +84,7 @@ class GroupRepository implements \Magento\Customer\Api\GroupRepositoryInterface
         \Magento\Customer\Model\GroupRegistry $groupRegistry,
         \Magento\Customer\Model\GroupFactory $groupFactory,
         \Magento\Customer\Api\Data\GroupInterfaceFactory $groupDataFactory,
-        \Magento\Customer\Model\Resource\Group $groupResourceModel,
+        \Magento\Customer\Model\ResourceModel\Group $groupResourceModel,
         \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor,
         \Magento\Customer\Api\Data\GroupSearchResultsInterfaceFactory $searchResultsFactory,
         \Magento\Tax\Api\TaxClassRepositoryInterface $taxClassRepositoryInterface,
@@ -173,7 +173,7 @@ class GroupRepository implements \Magento\Customer\Api\GroupRepositoryInterface
         $searchResults = $this->searchResultsFactory->create();
         $searchResults->setSearchCriteria($searchCriteria);
 
-        /** @var \Magento\Customer\Model\Resource\Group\Collection $collection */
+        /** @var \Magento\Customer\Model\ResourceModel\Group\Collection $collection */
         $collection = $this->groupFactory->create()->getCollection();
         $groupInterfaceName = 'Magento\Customer\Api\Data\GroupInterface';
         $this->extensionAttributesJoinProcessor->process($collection, $groupInterfaceName);
diff --git a/app/code/Magento/Customer/Model/Resource/Online/Grid/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Online/Grid/Collection.php
similarity index 96%
rename from app/code/Magento/Customer/Model/Resource/Online/Grid/Collection.php
rename to app/code/Magento/Customer/Model/ResourceModel/Online/Grid/Collection.php
index 1298b4003ee3a99c1793e72f9fddf51a806108ff..6e98f95fe8f96ee08f7574fdf62fef7580d8ecdb 100644
--- a/app/code/Magento/Customer/Model/Resource/Online/Grid/Collection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Online/Grid/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Online\Grid;
+namespace Magento\Customer\Model\ResourceModel\Online\Grid;
 
 use Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult;
 use Magento\Customer\Model\Visitor;
@@ -92,7 +92,7 @@ class Collection extends SearchResult
      *
      * @param string|array $field
      * @param string|int|array|null $condition
-     * @return \Magento\Cms\Model\Resource\Block\Collection
+     * @return \Magento\Cms\Model\ResourceModel\Block\Collection
      */
     public function addFieldToFilter($field, $condition = null)
     {
diff --git a/app/code/Magento/Customer/Model/Resource/Setup/PropertyMapper.php b/app/code/Magento/Customer/Model/ResourceModel/Setup/PropertyMapper.php
similarity index 96%
rename from app/code/Magento/Customer/Model/Resource/Setup/PropertyMapper.php
rename to app/code/Magento/Customer/Model/ResourceModel/Setup/PropertyMapper.php
index f375962b7dbfc6a7f6391039a0202da22c55f3b3..483b8430bd34f30116a6d660522ee32a0b72dca3 100644
--- a/app/code/Magento/Customer/Model/Resource/Setup/PropertyMapper.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Setup/PropertyMapper.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Setup;
+namespace Magento\Customer\Model\ResourceModel\Setup;
 
 use Magento\Eav\Model\Entity\Setup\PropertyMapperAbstract;
 
diff --git a/app/code/Magento/Customer/Model/Resource/Visitor.php b/app/code/Magento/Customer/Model/ResourceModel/Visitor.php
similarity index 88%
rename from app/code/Magento/Customer/Model/Resource/Visitor.php
rename to app/code/Magento/Customer/Model/ResourceModel/Visitor.php
index 808953d576c3a3752f81cc344fe9305460d6ac4a..1e3adf4d6ce6ff18e1fa8cabf55a24489c7e5b69 100644
--- a/app/code/Magento/Customer/Model/Resource/Visitor.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Visitor.php
@@ -4,13 +4,13 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Customer\Model\Resource;
+namespace Magento\Customer\Model\ResourceModel;
 
 /**
  * Class Visitor
- * @package Magento\Customer\Model\Resource
+ * @package Magento\Customer\Model\ResourceModel
  */
-class Visitor extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Visitor extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime\DateTime
@@ -23,13 +23,13 @@ class Visitor extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
diff --git a/app/code/Magento/Customer/Model/Resource/Visitor/Collection.php b/app/code/Magento/Customer/Model/ResourceModel/Visitor/Collection.php
similarity index 60%
rename from app/code/Magento/Customer/Model/Resource/Visitor/Collection.php
rename to app/code/Magento/Customer/Model/ResourceModel/Visitor/Collection.php
index bfb12448688c2250749e8e015801fea4da826b39..5ce707c294d9bfd0ebfc787bcbd420b281810b98 100644
--- a/app/code/Magento/Customer/Model/Resource/Visitor/Collection.php
+++ b/app/code/Magento/Customer/Model/ResourceModel/Visitor/Collection.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Visitor;
+namespace Magento\Customer\Model\ResourceModel\Visitor;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
@@ -14,6 +14,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Customer\Model\Visitor', 'Magento\Customer\Model\Resource\Visitor');
+        $this->_init('Magento\Customer\Model\Visitor', 'Magento\Customer\Model\ResourceModel\Visitor');
     }
 }
diff --git a/app/code/Magento/Customer/Model/Session.php b/app/code/Magento/Customer/Model/Session.php
index 72881c58d4890ac61abe7af93a298be9bcbff826..6687aa0a4199061685f8e1ca0f53ce4f335dcf27 100644
--- a/app/code/Magento/Customer/Model/Session.php
+++ b/app/code/Magento/Customer/Model/Session.php
@@ -9,8 +9,7 @@ use Magento\Customer\Api\CustomerRepositoryInterface;
 use Magento\Customer\Api\Data\CustomerInterface as CustomerData;
 use Magento\Customer\Api\GroupManagementInterface;
 use Magento\Customer\Model\Config\Share;
-use Magento\Customer\Model\Resource\Customer as ResourceCustomer;
-use Magento\Framework\App\ActionInterface;
+use Magento\Customer\Model\ResourceModel\Customer as ResourceCustomer;
 
 /**
  * Customer session model
@@ -26,6 +25,11 @@ class Session extends \Magento\Framework\Session\SessionManager
      */
     protected $_customer;
 
+    /**
+     * @var ResourceCustomer
+     */
+    protected $_customerResource;
+
     /**
      * Customer model
      *
@@ -137,7 +141,7 @@ class Session extends \Magento\Framework\Session\SessionManager
         Config\Share $configShare,
         \Magento\Framework\Url\Helper\Data $coreUrl,
         \Magento\Customer\Model\Url $customerUrl,
-        Resource\Customer $customerResource,
+        ResourceCustomer $customerResource,
         CustomerFactory $customerFactory,
         \Magento\Framework\UrlFactory $urlFactory,
         \Magento\Framework\Session\Generic $session,
diff --git a/app/code/Magento/Customer/Model/Vat.php b/app/code/Magento/Customer/Model/Vat.php
index 78fd927507f72990fd8d637d5cbe7de8ac7891de..43c883b5d0e6947b4a94ef95f1d55a3a1273d19c 100644
--- a/app/code/Magento/Customer/Model/Vat.php
+++ b/app/code/Magento/Customer/Model/Vat.php
@@ -166,7 +166,8 @@ class Vat
             'is_valid' => false,
             'request_date' => '',
             'request_identifier' => '',
-            'request_success' => false
+            'request_success' => false,
+            'request_message' => __('Error during VAT Number verification.'),
         ]);
 
         if (!extension_loaded('soap')) {
@@ -194,6 +195,12 @@ class Vat
             $gatewayResponse->setRequestDate((string)$result->requestDate);
             $gatewayResponse->setRequestIdentifier((string)$result->requestIdentifier);
             $gatewayResponse->setRequestSuccess(true);
+
+            if ($gatewayResponse->getIsValid()) {
+                $gatewayResponse->setRequestMessage(__('VAT Number is valid.'));
+            } else {
+                $gatewayResponse->setRequestMessage(__('Please enter a valid VAT number.'));
+            }
         } catch (\Exception $exception) {
             $gatewayResponse->setIsValid(false);
             $gatewayResponse->setRequestDate('');
diff --git a/app/code/Magento/Customer/Model/Visitor.php b/app/code/Magento/Customer/Model/Visitor.php
index 164490b95300572f66197a0607b433ea2150b509..6f4a1d58b3b233dc29fa8422077adf624b3172a3 100644
--- a/app/code/Magento/Customer/Model/Visitor.php
+++ b/app/code/Magento/Customer/Model/Visitor.php
@@ -75,7 +75,7 @@ class Visitor extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry
-     * @param \Magento\Framework\Model\Resource\AbstractResource|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
      * @param array $ignoredUserAgents
      * @param array $ignores
@@ -91,7 +91,7 @@ class Visitor extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\Indexer\IndexerRegistry $indexerRegistry,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $ignoredUserAgents = [],
         array $ignores = [],
@@ -114,7 +114,7 @@ class Visitor extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Customer\Model\Resource\Visitor');
+        $this->_init('Magento\Customer\Model\ResourceModel\Visitor');
         $userAgent = $this->httpHeader->getHttpUserAgent();
         if ($this->ignoredUserAgents) {
             if (in_array($userAgent, $this->ignoredUserAgents)) {
diff --git a/app/code/Magento/Customer/Setup/CustomerSetup.php b/app/code/Magento/Customer/Setup/CustomerSetup.php
index d96f2469f983ec0f74863f13965229c789002a27..81ee07f17785e39e82669206582610125e88c7d5 100644
--- a/app/code/Magento/Customer/Setup/CustomerSetup.php
+++ b/app/code/Magento/Customer/Setup/CustomerSetup.php
@@ -12,7 +12,7 @@ use Magento\Eav\Model\Entity\Setup\Context;
 use Magento\Eav\Setup\EavSetup;
 use Magento\Framework\App\CacheInterface;
 use Magento\Framework\Setup\ModuleDataSetupInterface;
-use Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory;
 
 /**
  * @codeCoverageIgnore
@@ -126,12 +126,12 @@ class CustomerSetup extends EavSetup
     {
         $entities = [
             'customer' => [
-                'entity_model' => 'Magento\Customer\Model\Resource\Customer',
+                'entity_model' => 'Magento\Customer\Model\ResourceModel\Customer',
                 'attribute_model' => 'Magento\Customer\Model\Attribute',
                 'table' => 'customer_entity',
-                'increment_model' => 'Magento\Eav\Model\Entity\Increment\Numeric',
+                'increment_model' => 'Magento\Eav\Model\Entity\Increment\NumericValue',
                 'additional_attribute_table' => 'customer_eav_attribute',
-                'entity_attribute_collection' => 'Magento\Customer\Model\Resource\Attribute\Collection',
+                'entity_attribute_collection' => 'Magento\Customer\Model\ResourceModel\Attribute\Collection',
                 'attributes' => [
                     'website_id' => [
                         'type' => 'static',
@@ -338,11 +338,11 @@ class CustomerSetup extends EavSetup
                 ],
             ],
             'customer_address' => [
-                'entity_model' => 'Magento\Customer\Model\Resource\Address',
+                'entity_model' => 'Magento\Customer\Model\ResourceModel\Address',
                 'attribute_model' => 'Magento\Customer\Model\Attribute',
                 'table' => 'customer_address_entity',
                 'additional_attribute_table' => 'customer_eav_attribute',
-                'entity_attribute_collection' => 'Magento\Customer\Model\Resource\Address\Attribute\Collection',
+                'entity_attribute_collection' => 'Magento\Customer\Model\ResourceModel\Address\Attribute\Collection',
                 'attributes' => [
                     'prefix' => [
                         'type' => 'static',
@@ -421,7 +421,7 @@ class CustomerSetup extends EavSetup
                         'type' => 'static',
                         'label' => 'Country',
                         'input' => 'select',
-                        'source' => 'Magento\Customer\Model\Resource\Address\Attribute\Source\Country',
+                        'source' => 'Magento\Customer\Model\ResourceModel\Address\Attribute\Source\Country',
                         'sort_order' => 90,
                         'position' => 90,
                     ],
@@ -429,7 +429,7 @@ class CustomerSetup extends EavSetup
                         'type' => 'static',
                         'label' => 'State/Province',
                         'input' => 'text',
-                        'backend' => 'Magento\Customer\Model\Resource\Address\Attribute\Backend\Region',
+                        'backend' => 'Magento\Customer\Model\ResourceModel\Address\Attribute\Backend\Region',
                         'required' => false,
                         'sort_order' => 100,
                         'position' => 100,
@@ -438,7 +438,7 @@ class CustomerSetup extends EavSetup
                         'type' => 'static',
                         'label' => 'State/Province',
                         'input' => 'hidden',
-                        'source' => 'Magento\Customer\Model\Resource\Address\Attribute\Source\Region',
+                        'source' => 'Magento\Customer\Model\ResourceModel\Address\Attribute\Source\Region',
                         'required' => false,
                         'sort_order' => 100,
                         'position' => 100,
diff --git a/app/code/Magento/Customer/Setup/UpgradeData.php b/app/code/Magento/Customer/Setup/UpgradeData.php
index a37210bd9fb8842bb56515853295cea334d0cad0..1f4da520fd0b28394e89e32e1a5cf04a4cfd580e 100644
--- a/app/code/Magento/Customer/Setup/UpgradeData.php
+++ b/app/code/Magento/Customer/Setup/UpgradeData.php
@@ -240,6 +240,58 @@ class UpgradeData implements UpgradeDataInterface
             ];
             $this->upgradeAttributes($entityAttributes, $customerSetup);
         }
+        if (version_compare($context->getVersion(), '2.0.6', '<')) {
+            $customerSetup->updateEntityType(
+                \Magento\Customer\Model\Customer::ENTITY,
+                'entity_model',
+                'Magento\Customer\Model\ResourceModel\Customer'
+            );
+            $customerSetup->updateEntityType(
+                \Magento\Customer\Model\Customer::ENTITY,
+                'increment_model',
+                'Magento\Eav\Model\Entity\Increment\NumericValue'
+            );
+            $customerSetup->updateEntityType(
+                \Magento\Customer\Model\Customer::ENTITY,
+                'entity_attribute_collection',
+                'Magento\Customer\Model\ResourceModel\Attribute\Collection'
+            );
+            $customerSetup->updateEntityType(
+                'customer_address',
+                'entity_model',
+                'Magento\Customer\Model\ResourceModel\Address'
+            );
+            $customerSetup->updateEntityType(
+                'customer_address',
+                'entity_attribute_collection',
+                'Magento\Customer\Model\ResourceModel\Address\Attribute\Collection'
+            );
+            $customerSetup->updateAttribute(
+                'customer_address',
+                'country_id',
+                'source_model',
+                'Magento\Customer\Model\ResourceModel\Address\Attribute\Source\Country'
+            );
+            $customerSetup->updateAttribute(
+                'customer_address',
+                'region',
+                'backend_model',
+                'Magento\Customer\Model\ResourceModel\Address\Attribute\Backend\Region'
+            );
+            $customerSetup->updateAttribute(
+                'customer_address',
+                'region_id',
+                'source_model',
+                'Magento\Customer\Model\ResourceModel\Address\Attribute\Source\Region'
+            );
+        }
+
+        if (version_compare($context->getVersion(), '2.0.6', '<')) {
+            $setup->getConnection()->delete(
+                $setup->getTable('customer_form_attribute'),
+                ['form_code = ?' => 'checkout_register']
+            );
+        }
 
         $indexer = $this->indexerRegistry->get(Customer::CUSTOMER_GRID_INDEXER_ID);
         $indexer->reindexAll();
diff --git a/app/code/Magento/Customer/Test/Unit/Block/Form/RegisterTest.php b/app/code/Magento/Customer/Test/Unit/Block/Form/RegisterTest.php
index 604df29a48b602dc9d1e0c9084b22c472f648336..78d006e097da66baf54eb2f4b48e8c7613998eb5 100644
--- a/app/code/Magento/Customer/Test/Unit/Block/Form/RegisterTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Block/Form/RegisterTest.php
@@ -67,8 +67,8 @@ class RegisterTest extends \PHPUnit_Framework_TestCase
             $this->directoryHelperMock,
             $this->getMockForAbstractClass('Magento\Framework\Json\EncoderInterface', [], '', false),
             $this->getMock('Magento\Framework\App\Cache\Type\Config', [], [], '', false),
-            $this->getMock('Magento\Directory\Model\Resource\Region\CollectionFactory', [], [], '', false),
-            $this->getMock('Magento\Directory\Model\Resource\Country\CollectionFactory', [], [], '', false),
+            $this->getMock('Magento\Directory\Model\ResourceModel\Region\CollectionFactory', [], [], '', false),
+            $this->getMock('Magento\Directory\Model\ResourceModel\Country\CollectionFactory', [], [], '', false),
             $this->_moduleManager,
             $this->_customerSession,
             $this->_customerUrl
diff --git a/app/code/Magento/Customer/Test/Unit/Console/Command/UpgradeHashAlgorithmCommandTest.php b/app/code/Magento/Customer/Test/Unit/Console/Command/UpgradeHashAlgorithmCommandTest.php
index fa83775eeb2058793c96777aeb516135f9f52186..cb2306777376c4fa5bcd901f69d17fd9d7b894cb 100644
--- a/app/code/Magento/Customer/Test/Unit/Console/Command/UpgradeHashAlgorithmCommandTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Console/Command/UpgradeHashAlgorithmCommandTest.php
@@ -7,7 +7,7 @@ namespace Magento\Customer\Test\Unit\Console\Command;
 
 use Magento\Customer\Console\Command\UpgradeHashAlgorithmCommand;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
-use Magento\Customer\Model\Resource\Customer\CollectionFactory;
+use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory;
 
 class UpgradeHashAlgorithmCommandTest extends \PHPUnit_Framework_TestCase
 {
@@ -29,7 +29,7 @@ class UpgradeHashAlgorithmCommandTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->customerCollectionFactory = $this->getMockBuilder(
-            'Magento\Customer\Model\Resource\Customer\CollectionFactory'
+            'Magento\Customer\Model\ResourceModel\Customer\CollectionFactory'
         )->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php
index 6c2d57a9f95a8f3a098600fb66fb7c442e429625..e71e413d7e11738df8aa86059139958cd34584d8 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Account/LoginPostTest.php
@@ -423,7 +423,7 @@ class LoginPostTest extends \PHPUnit_Framework_TestCase
             case '\Exception':
                 $this->messageManager->expects($this->once())
                     ->method('addError')
-                    ->with(__('Something went wrong while validating the login and password.'))
+                    ->with(__('Invalid login or password.'))
                     ->willReturnSelf();
                 break;
         }
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Address/FormPostTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Address/FormPostTest.php
index 3b351f5160cb0a7cdf58cf86f47438887b94afa4..39fa2018cff7a821bf4fbfa42055ed74aec74986 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Address/FormPostTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Address/FormPostTest.php
@@ -528,7 +528,10 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
                 ],
             ]);
 
-        $this->session->expects($this->once())
+        $this->session->expects($this->atLeastOnce())
+            ->method('getCustomerId')
+            ->willReturn($customerId);
+        $this->addressData->expects($this->once())
             ->method('getCustomerId')
             ->willReturn($customerId);
 
@@ -682,11 +685,11 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
         $this->request->expects($this->once())
             ->method('isPost')
             ->willReturn(true);
-        $this->request->expects($this->exactly(2))
+        $this->request->expects($this->once())
             ->method('getParam')
             ->with('id')
             ->willReturn($addressId);
-        $this->request->expects($this->once())
+        $this->request->expects($this->never())
             ->method('getPostValue')
             ->willReturn($postValue);
 
@@ -701,7 +704,7 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
             ->with($exception, __('We can\'t save the address.'))
             ->willReturnSelf();
 
-        $this->session->expects($this->once())
+        $this->session->expects($this->never())
             ->method('setAddressFormData')
             ->with($postValue)
             ->willReturnSelf();
@@ -710,7 +713,7 @@ class FormPostTest extends \PHPUnit_Framework_TestCase
             ->getMockForAbstractClass();
         $urlBuilder->expects($this->once())
             ->method('getUrl')
-            ->with('*/*/edit', ['id' => $addressId])
+            ->with('*/*/index')
             ->willReturn($url);
 
         $this->objectManager->expects($this->once())
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassAssignGroupTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassAssignGroupTest.php
index 3b9c1c6a1ccc61dde131a7d14cd2e2ee45c88be4..4cbd57be53837fa04ad2072efaba9338370e7041 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassAssignGroupTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassAssignGroupTest.php
@@ -51,12 +51,12 @@ class MassAssignGroupTest extends \PHPUnit_Framework_TestCase
     protected $objectManagerMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Customer\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $customerCollectionMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $customerCollectionFactoryMock;
 
@@ -93,11 +93,12 @@ class MassAssignGroupTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->messageManagerMock = $this->getMock('Magento\Framework\Message\Manager', [], [], '', false);
-        $this->customerCollectionMock = $this->getMockBuilder('Magento\Customer\Model\Resource\Customer\Collection')
+        $this->customerCollectionMock =
+            $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->customerCollectionFactoryMock =
-            $this->getMockBuilder('Magento\Customer\Model\Resource\Customer\CollectionFactory')
+            $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer\CollectionFactory')
                 ->disableOriginalConstructor()
                 ->setMethods(['create'])
                 ->getMock();
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassDeleteTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassDeleteTest.php
index b59404ba8bb482e721f881ed46fbfe7a1dd1ac67..de91d73d10a762d36ab8cdc07b815a1bdae853ac 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassDeleteTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassDeleteTest.php
@@ -51,12 +51,12 @@ class MassDeleteTest extends \PHPUnit_Framework_TestCase
     protected $objectManagerMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Customer\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $customerCollectionMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $customerCollectionFactoryMock;
 
@@ -93,11 +93,12 @@ class MassDeleteTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->messageManagerMock = $this->getMock('Magento\Framework\Message\Manager', [], [], '', false);
-        $this->customerCollectionMock = $this->getMockBuilder('Magento\Customer\Model\Resource\Customer\Collection')
+        $this->customerCollectionMock =
+            $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->customerCollectionFactoryMock =
-            $this->getMockBuilder('Magento\Customer\Model\Resource\Customer\CollectionFactory')
+            $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer\CollectionFactory')
                 ->disableOriginalConstructor()
                 ->setMethods(['create'])
                 ->getMock();
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassSubscribeTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassSubscribeTest.php
index eab3d880dbf9379b5697eeaf27bb51a7cfff7122..8aff6b96313fc0e0a2f95bff9e66dc4a00591a91 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassSubscribeTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassSubscribeTest.php
@@ -51,12 +51,12 @@ class MassSubscribeTest extends \PHPUnit_Framework_TestCase
     protected $objectManagerMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Customer\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $customerCollectionMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $customerCollectionFactoryMock;
 
@@ -98,11 +98,12 @@ class MassSubscribeTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->messageManagerMock = $this->getMock('Magento\Framework\Message\Manager', [], [], '', false);
-        $this->customerCollectionMock = $this->getMockBuilder('Magento\Customer\Model\Resource\Customer\Collection')
+        $this->customerCollectionMock =
+            $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->customerCollectionFactoryMock =
-            $this->getMockBuilder('Magento\Customer\Model\Resource\Customer\CollectionFactory')
+            $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer\CollectionFactory')
                 ->disableOriginalConstructor()
                 ->setMethods(['create'])
                 ->getMock();
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassUnsubscribeTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassUnsubscribeTest.php
index 4e167af550fbe39218095e86e56212ec3c476b30..00eaa7546e7df9c4db3d7fae1e4a7ddf2a6ef9c7 100644
--- a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassUnsubscribeTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/Index/MassUnsubscribeTest.php
@@ -51,12 +51,12 @@ class MassUnsubscribeTest extends \PHPUnit_Framework_TestCase
     protected $objectManagerMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Customer\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $customerCollectionMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $customerCollectionFactoryMock;
 
@@ -98,11 +98,12 @@ class MassUnsubscribeTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->messageManagerMock = $this->getMock('Magento\Framework\Message\Manager', [], [], '', false);
-        $this->customerCollectionMock = $this->getMockBuilder('Magento\Customer\Model\Resource\Customer\Collection')
+        $this->customerCollectionMock =
+            $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->customerCollectionFactoryMock =
-            $this->getMockBuilder('Magento\Customer\Model\Resource\Customer\CollectionFactory')
+            $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer\CollectionFactory')
                 ->disableOriginalConstructor()
                 ->setMethods(['create'])
                 ->getMock();
diff --git a/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ac5625eadef26d993703ae10a3a29d25d43653ec
--- /dev/null
+++ b/app/code/Magento/Customer/Test/Unit/Controller/Adminhtml/System/Config/Validatevat/ValidateTest.php
@@ -0,0 +1,130 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Customer\Test\Unit\Controller\Adminhtml\System\Config\Validatevat;
+
+class ValidateTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Customer\Controller\Adminhtml\System\Config\Validatevat\Validate
+     */
+    protected $controller;
+
+    /**
+     * @var \Magento\Backend\App\Action\Context
+     */
+    protected $context;
+
+    /**
+     * @var \Magento\Framework\Controller\Result\Json | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultJson;
+
+    /**
+     * @var \Magento\Framework\ObjectManagerInterface | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $objectManager;
+
+    /**
+     * @var \Magento\Framework\App\Request\Http | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $request;
+
+    protected function setUp()
+    {
+        $resultJsonFactory = $this->mockResultJson();
+
+        $this->request = $this->getMockBuilder('Magento\Framework\App\Request\Http')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->objectManager = $this->getMockBuilder('Magento\Framework\ObjectManagerInterface')
+            ->getMockForAbstractClass();
+
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->context = $objectManager->getObject(
+            'Magento\Backend\App\Action\Context',
+            [
+                'request' => $this->request,
+                'objectManager' => $this->objectManager,
+            ]
+        );
+        $this->controller = $objectManager->getObject(
+            'Magento\Customer\Controller\Adminhtml\System\Config\Validatevat\Validate',
+            [
+                'context' => $this->context,
+                'resultJsonFactory' => $resultJsonFactory,
+            ]
+        );
+    }
+
+    public function testExecute()
+    {
+        $country = 'US';
+        $vat = '123456789';
+
+        $isValid = true;
+        $requestMessage = 'test';
+
+        $json = '{"valid":' . (int)$isValid . ',"message":"' . $requestMessage . '"}';
+
+        $gatewayResponse = new \Magento\Framework\DataObject([
+            'is_valid' => $isValid,
+            'request_message' => $requestMessage,
+        ]);
+
+        $this->request->expects($this->any())
+            ->method('getParam')
+            ->willReturnMap([
+                ['country', null, $country],
+                ['vat', null, $vat],
+            ]);
+
+        $vatMock = $this->getMockBuilder('Magento\Customer\Model\Vat')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $vatMock->expects($this->once())
+            ->method('checkVatNumber')
+            ->with($country, $vat)
+            ->willReturn($gatewayResponse);
+
+        $this->objectManager->expects($this->once())
+            ->method('get')
+            ->with('Magento\Customer\Model\Vat')
+            ->willReturn($vatMock);
+
+        $this->resultJson->expects($this->once())
+            ->method('setData')
+            ->with([
+                'valid' => $gatewayResponse->getIsValid(),
+                'message' => $gatewayResponse->getRequestMessage()
+            ])
+            ->willReturn($json);
+
+        $this->assertEquals($json, $this->controller->execute());
+    }
+
+    /**
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function mockResultJson()
+    {
+        $this->resultJson = $this->getMockBuilder('Magento\Framework\Controller\Result\Json')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $resultJsonFactory = $this->getMockBuilder('Magento\Framework\Controller\Result\JsonFactory')
+            ->setMethods(['create'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $resultJsonFactory->expects($this->any())
+            ->method('create')
+            ->willReturn($this->resultJson);
+
+        return $resultJsonFactory;
+    }
+}
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Address/AbstractAddressTest.php b/app/code/Magento/Customer/Test/Unit/Model/Address/AbstractAddressTest.php
index 86bb7c3d157047e28a9a9f522d32a1da502c0289..70ef22aef76ce400b7558f9ff418a8a6535d75f6 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Address/AbstractAddressTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/Address/AbstractAddressTest.php
@@ -29,7 +29,7 @@ class AbstractAddressTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Directory\Model\CountryFactory|\PHPUnit_Framework_MockObject_MockObject  */
     protected $countryFactoryMock;
 
-    /** @var \Magento\Customer\Model\Resource\Customer|\PHPUnit_Framework_MockObject_MockObject  */
+    /** @var \Magento\Customer\Model\ResourceModel\Customer|\PHPUnit_Framework_MockObject_MockObject  */
     protected $resourceMock;
 
     /** @var \Magento\Framework\Data\Collection\AbstractDb|\PHPUnit_Framework_MockObject_MockObject  */
@@ -60,7 +60,7 @@ class AbstractAddressTest extends \PHPUnit_Framework_TestCase
             false
         );
         $regionCollectionMock = $this->getMock(
-            'Magento\Directory\Model\Resource\Region\Collection',
+            'Magento\Directory\Model\ResourceModel\Region\Collection',
             [],
             [],
             '',
@@ -77,7 +77,7 @@ class AbstractAddressTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($countryMock));
 
-        $this->resourceMock = $this->getMock('Magento\Customer\Model\Resource\Customer', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Customer\Model\ResourceModel\Customer', [], [], '', false);
         $this->resourceCollectionMock = $this->getMockBuilder('Magento\Framework\Data\Collection\AbstractDb')
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
@@ -242,6 +242,7 @@ class AbstractAddressTest extends \PHPUnit_Framework_TestCase
      */
     public function testSetDataWithMultidimensionalArray()
     {
+        $this->markTestSkipped('Need to revert changes from  MAGETWO-39106 and then modify this test.');
         $expected = [
             'key' => 'value',
             'array' => 'value1',
@@ -266,10 +267,10 @@ class AbstractAddressTest extends \PHPUnit_Framework_TestCase
     public function testSetDataWithValue()
     {
         $value = [
-            'key' => 'value',
+            'street' => 'value',
         ];
 
-        $this->model->setData('key', $value);
+        $this->model->setData('street', $value);
         $this->assertEquals($value, $this->model->getData());
     }
 
diff --git a/app/code/Magento/Customer/Test/Unit/Model/AddressTest.php b/app/code/Magento/Customer/Test/Unit/Model/AddressTest.php
index 537113be2be7bcf0ae87d941fa3c0adf3cca425d..e1fcec88672633ca3a607811f7cb626f1437c600 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/AddressTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/AddressTest.php
@@ -32,7 +32,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     protected $customerFactory;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Address | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Address | \PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -59,7 +59,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($this->customer));
 
-        $this->resource = $this->getMockBuilder('Magento\Customer\Model\Resource\Address')
+        $this->resource = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Address')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Customer/Test/Unit/Model/AttributeTest.php b/app/code/Magento/Customer/Test/Unit/Model/AttributeTest.php
index 06c6c2a3ecb2f111606d611314dbf2cbfbb304e6..c779cd5d3f418a66360cee2c00f509703f60e274 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/AttributeTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/AttributeTest.php
@@ -55,7 +55,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     protected $storeManagerMock;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Helper|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Helper|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $helperMock;
 
@@ -70,7 +70,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     protected $timezoneMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resourceMock;
 
@@ -148,7 +148,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->storeManagerMock = $this->getMockBuilder('Magento\Store\Model\StoreManagerInterface')
             ->getMock();
-        $this->helperMock = $this->getMockBuilder('Magento\Eav\Model\Resource\Helper')
+        $this->helperMock = $this->getMockBuilder('Magento\Eav\Model\ResourceModel\Helper')
             ->disableOriginalConstructor()
             ->getMock();
         $this->universalFactoryMock = $this->getMockBuilder('Magento\Framework\Validator\UniversalFactory')
@@ -173,7 +173,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->dateTimeFormatter = $this->getMock('Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface');
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\AbstractResource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource')
             ->setMethods(['_construct', 'getConnection', 'getIdFieldName', 'saveInSetIncluding'])
             ->getMockForAbstractClass();
         $this->cacheManager = $this->getMockBuilder('Magento\Framework\App\CacheInterface')
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Customer/Attribute/Source/WebsiteTest.php b/app/code/Magento/Customer/Test/Unit/Model/Customer/Attribute/Source/WebsiteTest.php
index 6cddec488a31b6de5621e816ff7c8b43f64ded94..36e7639ec31168d75e1b0e831a31cc97893cfa8f 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Customer/Attribute/Source/WebsiteTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/Customer/Attribute/Source/WebsiteTest.php
@@ -6,7 +6,7 @@
 namespace Magento\Customer\Test\Unit\Model\Customer\Attribute\Source;
 
 use Magento\Customer\Model\Customer\Attribute\Source\Website;
-use Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory;
 
 class WebsiteTest extends \PHPUnit_Framework_TestCase
 {
@@ -16,7 +16,7 @@ class WebsiteTest extends \PHPUnit_Framework_TestCase
     /** @var CollectionFactory|\PHPUnit_Framework_MockObject_MockObject */
     protected $collectionFactoryMock;
 
-    /** @var \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory|\PHPUnit_Framework_MockObject_MockObject */
     protected $optionFactoryMock;
 
     /** @var \Magento\Store\Model\System\Store|\PHPUnit_Framework_MockObject_MockObject */
@@ -25,10 +25,11 @@ class WebsiteTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->collectionFactoryMock =
-            $this->getMockBuilder('Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory')
+            $this->getMockBuilder('Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->optionFactoryMock = $this->getMockBuilder('Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory')
+        $this->optionFactoryMock =
+            $this->getMockBuilder('Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory')
             ->disableOriginalConstructor()
             ->getMock();
         $this->storeMock = $this->getMockBuilder('Magento\Store\Model\System\Store')
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Customer/DataProviderTest.php b/app/code/Magento/Customer/Test/Unit/Model/Customer/DataProviderTest.php
index 7fdd3b9f3eed5bbbe3be9e4ac75072dbaff7bc5e..59b8dde83dcf5417d721bb347616da67078ca104 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Customer/DataProviderTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/Customer/DataProviderTest.php
@@ -11,7 +11,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use Magento\Ui\DataProvider\EavValidationRules;
 use Magento\Customer\Model\Customer\DataProvider;
 use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
-use Magento\Customer\Model\Resource\Customer\CollectionFactory;
+use Magento\Customer\Model\ResourceModel\Customer\CollectionFactory;
 
 /**
  * Class DataProviderTest
@@ -49,7 +49,7 @@ class DataProviderTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $this->customerCollectionFactoryMock = $this->getMock(
-            'Magento\Customer\Model\Resource\Customer\CollectionFactory',
+            'Magento\Customer\Model\ResourceModel\Customer\CollectionFactory',
             ['create'],
             [],
             '',
@@ -141,7 +141,7 @@ class DataProviderTest extends \PHPUnit_Framework_TestCase
      */
     protected function getCustomerCollectionFactoryMock()
     {
-        $collectionMock = $this->getMockBuilder('Magento\Customer\Model\Resource\Customer\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -255,7 +255,7 @@ class DataProviderTest extends \PHPUnit_Framework_TestCase
         $address = $this->getMockBuilder('Magento\Customer\Model\Address')
             ->disableOriginalConstructor()
             ->getMock();
-        $collectionMock = $this->getMockBuilder('Magento\Customer\Model\Resource\Customer\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Customer/Test/Unit/Model/CustomerManagementTest.php b/app/code/Magento/Customer/Test/Unit/Model/CustomerManagementTest.php
index 19abc7edb4eb95afe95f1766cfc5ec36cbc64c45..a90988c9997588153756c957573873fe1afeb684 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/CustomerManagementTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/CustomerManagementTest.php
@@ -13,14 +13,14 @@ class CustomerManagementTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $customersFactoryMock;
 
     protected function setUp()
     {
         $this->customersFactoryMock = $this->getMock(
-            'Magento\Customer\Model\Resource\Customer\CollectionFactory',
+            'Magento\Customer\Model\ResourceModel\Customer\CollectionFactory',
             ['create'],
             [],
             '',
@@ -33,7 +33,7 @@ class CustomerManagementTest extends \PHPUnit_Framework_TestCase
 
     public function testGetCount()
     {
-        $customersMock = $this->getMock('\Magento\Customer\Model\Resource\Customer\Collection', [], [], '', false);
+        $customersMock = $this->getMock('\Magento\Customer\Model\ResourceModel\Customer\Collection', [], [], '', false);
 
         $this->customersFactoryMock
             ->expects($this->once())
diff --git a/app/code/Magento/Customer/Test/Unit/Model/CustomerTest.php b/app/code/Magento/Customer/Test/Unit/Model/CustomerTest.php
index ac9dedaebdce235c095a18802694e64a2ece5152..9ebc457d66dbccbfeb8fd3ff0672cd502cc80745 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/CustomerTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/CustomerTest.php
@@ -52,7 +52,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
     /** @var  \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject */
     protected $registryMock;
 
-    /** @var \Magento\Customer\Model\Resource\Customer|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Customer\Model\ResourceModel\Customer|\PHPUnit_Framework_MockObject_MockObject */
     protected $resourceMock;
 
     protected function setUp()
@@ -92,7 +92,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceMock = $this->getMock(
-            '\Magento\Customer\Model\Resource\Customer', //'\Magento\Framework\DataObject',
+            '\Magento\Customer\Model\ResourceModel\Customer', //'\Magento\Framework\DataObject',
             ['getIdFieldName'],
             [],
             '',
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Indexer/Attribute/FilterTest.php b/app/code/Magento/Customer/Test/Unit/Model/Indexer/Attribute/FilterTest.php
index 33f3701d9a002ce2f6c929e9fc7d8a8a1723ffe0..48a9ab56ddbaa687c724e59f7ec9ab0e29e05efd 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Indexer/Attribute/FilterTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/Indexer/Attribute/FilterTest.php
@@ -10,7 +10,7 @@ use Magento\Customer\Api\Data\AttributeMetadataInterface;
 
 class FilterTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject */
     protected $resource;
 
     /** @var \Magento\Framework\DB\Adapter\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject */
@@ -33,7 +33,7 @@ class FilterTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->connection = $this->getMockForAbstractClass(
             'Magento\Framework\DB\Adapter\AdapterInterface',
             [],
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Indexer/AttributeProviderTest.php b/app/code/Magento/Customer/Test/Unit/Model/Indexer/AttributeProviderTest.php
index 908a74a3b78b19686e0604dc4c21eab9b89364eb..f1a610860db2deec2d0c2221183cd0caf6a29839 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Indexer/AttributeProviderTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/Indexer/AttributeProviderTest.php
@@ -7,7 +7,7 @@ namespace Magento\Customer\Test\Unit\Model\Indexer;
 
 use Magento\Customer\Model\Customer;
 use Magento\Customer\Model\Indexer\AttributeProvider;
-use Magento\Eav\Model\Resource\Entity\Attribute\Collection;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection;
 
 class AttributeProviderTest extends \PHPUnit_Framework_TestCase
 {
@@ -55,11 +55,11 @@ class AttributeProviderTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
-        $collectionMock = $this->getMockBuilder('Magento\Eav\Model\Resource\Entity\Attribute\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection')
             ->disableOriginalConstructor()
             ->getMock();
-        /** @var \Magento\Customer\Model\Resource\Customer|\PHPUnit_Framework_MockObject_MockObject $entity */
-        $entity = $this->getMockBuilder('Magento\Customer\Model\Resource\Customer')
+        /** @var \Magento\Customer\Model\ResourceModel\Customer|\PHPUnit_Framework_MockObject_MockObject $entity */
+        $entity = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer')
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \Magento\Customer\Model\Attribute|\PHPUnit_Framework_MockObject_MockObject $attribute */
@@ -158,11 +158,11 @@ class AttributeProviderTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
-        $collectionMock = $this->getMockBuilder('Magento\Eav\Model\Resource\Entity\Attribute\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection')
             ->disableOriginalConstructor()
             ->getMock();
-        /** @var \Magento\Customer\Model\Resource\Customer|\PHPUnit_Framework_MockObject_MockObject $entity */
-        $entity = $this->getMockBuilder('Magento\Customer\Model\Resource\Customer')
+        /** @var \Magento\Customer\Model\ResourceModel\Customer|\PHPUnit_Framework_MockObject_MockObject $entity */
+        $entity = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer')
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \Magento\Customer\Model\Attribute|\PHPUnit_Framework_MockObject_MockObject $attribute */
@@ -257,11 +257,11 @@ class AttributeProviderTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
-        $collectionMock = $this->getMockBuilder('Magento\Eav\Model\Resource\Entity\Attribute\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection')
             ->disableOriginalConstructor()
             ->getMock();
-        /** @var \Magento\Customer\Model\Resource\Customer|\PHPUnit_Framework_MockObject_MockObject $entity */
-        $entity = $this->getMockBuilder('Magento\Customer\Model\Resource\Customer')
+        /** @var \Magento\Customer\Model\ResourceModel\Customer|\PHPUnit_Framework_MockObject_MockObject $entity */
+        $entity = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer')
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \Magento\Customer\Model\Attribute|\PHPUnit_Framework_MockObject_MockObject $attribute */
diff --git a/app/code/Magento/Customer/Test/Unit/Model/LoggerTest.php b/app/code/Magento/Customer/Test/Unit/Model/LoggerTest.php
index 8d0376d68c2bf1f3c3e4b43ab815586fe022bb77..6709cbd097fd8166dfe2bb2bbc8aace3e1e8ebde 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/LoggerTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/LoggerTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Customer\Test\Unit\Model;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Customer log data logger test.
@@ -27,7 +27,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase
     /**
      * Resource instance.
      *
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -50,7 +50,7 @@ class LoggerTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->logFactory = $this->getMock('\Magento\Customer\Model\LogFactory', ['create'], [], '', false);
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Metadata/AddressMetadataTest.php b/app/code/Magento/Customer/Test/Unit/Model/Metadata/AddressMetadataTest.php
index 95838e09126eddf59125cac72313bf5145154281..4de1c643eeb653113d114ac27342e5cecd0377d1 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Metadata/AddressMetadataTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/Metadata/AddressMetadataTest.php
@@ -11,7 +11,7 @@ use Magento\Customer\Model\Attribute;
 use Magento\Customer\Model\AttributeMetadataConverter;
 use Magento\Customer\Model\AttributeMetadataDataProvider;
 use Magento\Customer\Model\Metadata\AddressMetadata;
-use Magento\Customer\Model\Resource\Form\Attribute\Collection;
+use Magento\Customer\Model\ResourceModel\Form\Attribute\Collection;
 use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
 
 class AddressMetadataTest extends \PHPUnit_Framework_TestCase
@@ -52,7 +52,7 @@ class AddressMetadataTest extends \PHPUnit_Framework_TestCase
         $attributes = [$attributeMock];
 
         /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
-        $collectionMock = $this->getMockBuilder('Magento\Customer\Model\Resource\Form\Attribute\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Form\Attribute\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -93,7 +93,7 @@ class AddressMetadataTest extends \PHPUnit_Framework_TestCase
         $attributes = [];
 
         /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
-        $collectionMock = $this->getMockBuilder('Magento\Customer\Model\Resource\Form\Attribute\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Form\Attribute\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Resource/Address/Attribute/Backend/RegionTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/Attribute/Backend/RegionTest.php
similarity index 94%
rename from app/code/Magento/Customer/Test/Unit/Model/Resource/Address/Attribute/Backend/RegionTest.php
rename to app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/Attribute/Backend/RegionTest.php
index e14242b4ebd69cd98d8d6c1372f0761ed0df9406..ee632ae7a19ce6adb6f775cbb674489573d4560b 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Resource/Address/Attribute/Backend/RegionTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/Attribute/Backend/RegionTest.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Customer\Test\Unit\Model\Resource\Address\Attribute\Backend;
+namespace Magento\Customer\Test\Unit\Model\ResourceModel\Address\Attribute\Backend;
 
-use Magento\Customer\Model\Resource\Address\Attribute\Backend\Region;
+use Magento\Customer\Model\ResourceModel\Address\Attribute\Backend\Region;
 
 class RegionTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Resource/Address/RelationTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/RelationTest.php
similarity index 94%
rename from app/code/Magento/Customer/Test/Unit/Model/Resource/Address/RelationTest.php
rename to app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/RelationTest.php
index 3caa4bcc1c6e5b0a95492518fb900e3173f9470b..890d19c00ad2ee27e62907165d5ddd94f1be3a3e 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Resource/Address/RelationTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Address/RelationTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Test\Unit\Model\Resource\Address;
+namespace Magento\Customer\Test\Unit\Model\ResourceModel\Address;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
@@ -15,7 +15,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
     /** @var  \Magento\Customer\Model\CustomerFactory | \PHPUnit_Framework_MockObject_MockObject */
     protected $customerFactoryMock;
 
-    /** @var  \Magento\Customer\Model\Resource\Address\Relation */
+    /** @var  \Magento\Customer\Model\ResourceModel\Address\Relation */
     protected $relation;
 
     protected function setUp()
@@ -28,7 +28,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->relation = (new ObjectManagerHelper($this))->getObject(
-            'Magento\Customer\Model\Resource\Address\Relation',
+            'Magento\Customer\Model\ResourceModel\Address\Relation',
             [
                 'customerFactory' => $this->customerFactoryMock
             ]
@@ -69,7 +69,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
             false
         );
         $customerResource = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Resource/AddressRepositoryTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressRepositoryTest.php
similarity index 92%
rename from app/code/Magento/Customer/Test/Unit/Model/Resource/AddressRepositoryTest.php
rename to app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressRepositoryTest.php
index 738f6ba46c772e458fb28d270d70cfb5524a36af..8d86d4421e50f0bb582a00a4677cbd4024afce20 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Resource/AddressRepositoryTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressRepositoryTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Test\Unit\Model\Resource;
+namespace Magento\Customer\Test\Unit\Model\ResourceModel;
 
 class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
 {
@@ -28,7 +28,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $customerRegistry;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Address|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Address|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $addressResourceModel;
 
@@ -38,7 +38,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $addressSearchResultsFactory;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Address\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Address\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $addressCollectionFactory;
 
@@ -58,7 +58,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $address;
 
     /**
-     * @var \Magento\Customer\Model\Resource\AddressRepository
+     * @var \Magento\Customer\Model\ResourceModel\AddressRepository
      */
     protected $repository;
 
@@ -67,7 +67,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
         $this->addressFactory = $this->getMock('Magento\Customer\Model\AddressFactory', ['create'], [], '', false);
         $this->addressRegistry = $this->getMock('Magento\Customer\Model\AddressRegistry', [], [], '', false);
         $this->customerRegistry = $this->getMock('Magento\Customer\Model\CustomerRegistry', [], [], '', false);
-        $this->addressResourceModel = $this->getMock('Magento\Customer\Model\Resource\Address', [], [], '', false);
+        $this->addressResourceModel = $this->getMock('Magento\Customer\Model\ResourceModel\Address', [], [], '', false);
         $this->directoryData = $this->getMock('Magento\Directory\Helper\Data', [], [], '', false);
         $this->addressSearchResultsFactory = $this->getMock(
             'Magento\Customer\Api\Data\AddressSearchResultsInterfaceFactory',
@@ -77,7 +77,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->addressCollectionFactory = $this->getMock(
-            'Magento\Customer\Model\Resource\Address\CollectionFactory',
+            'Magento\Customer\Model\ResourceModel\Address\CollectionFactory',
             ['create'],
             [],
             '',
@@ -114,7 +114,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->repository = new \Magento\Customer\Model\Resource\AddressRepository(
+        $this->repository = new \Magento\Customer\Model\ResourceModel\AddressRepository(
             $this->addressFactory,
             $this->addressRegistry,
             $this->customerRegistry,
@@ -131,7 +131,8 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
         $customerId = 34;
         $addressId = 53;
         $customerAddress = $this->getMockForAbstractClass('Magento\Customer\Api\Data\AddressInterface', [], '', false);
-        $addressCollection = $this->getMock('Magento\Customer\Model\Resource\Address\Collection', [], [], '', false);
+        $addressCollection =
+            $this->getMock('Magento\Customer\Model\ResourceModel\Address\Collection', [], [], '', false);
         $customerAddress->expects($this->atLeastOnce())
             ->method('getCustomerId')
             ->willReturn($customerId);
@@ -213,7 +214,13 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
     protected function prepareMocksForInvalidAddressValidation()
     {
         $countryModel = $this->getMock('Magento\Directory\Model\Country', [], [], '', false);
-        $regionCollection = $this->getMock('Magento\Directory\Model\Resource\Region\Collection', [], [], '', false);
+        $regionCollection = $this->getMock(
+            'Magento\Directory\Model\ResourceModel\Region\Collection',
+            [],
+            [],
+            '',
+            false
+        );
 
         $this->address->expects($this->once())
             ->method('getShouldIgnoreValidation')
@@ -271,7 +278,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
     {
         $filterGroup = $this->getMock('Magento\Framework\Api\Search\FilterGroup', [], [], '', false);
         $filter = $this->getMock('Magento\Framework\Api\Filter', [], [], '', false);
-        $collection = $this->getMock('Magento\Customer\Model\Resource\Address\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Customer\Model\ResourceModel\Address\Collection', [], [], '', false);
         $searchResults = $this->getMockForAbstractClass(
             'Magento\Customer\Api\Data\AddressSearchResultsInterface',
             [],
@@ -371,7 +378,13 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
         $addressId = 12;
         $customerId = 43;
 
-        $addressCollection = $this->getMock('Magento\Customer\Model\Resource\Address\Collection', [], [], '', false);
+        $addressCollection = $this->getMock(
+            'Magento\Customer\Model\ResourceModel\Address\Collection',
+            [],
+            [],
+            '',
+            false
+        );
         $customerAddress = $this->getMockForAbstractClass('Magento\Customer\Api\Data\AddressInterface', [], '', false);
         $customerAddress->expects($this->once())
             ->method('getId')
@@ -412,7 +425,13 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
         $this->address->expects($this->once())
             ->method('getCustomerId')
             ->willReturn($customerId);
-        $addressCollection = $this->getMock('Magento\Customer\Model\Resource\Address\Collection', [], [], '', false);
+        $addressCollection = $this->getMock(
+            'Magento\Customer\Model\ResourceModel\Address\Collection',
+            [],
+            [],
+            '',
+            false
+        );
         $this->addressRegistry->expects($this->once())
             ->method('retrieve')
             ->with($addressId)
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Resource/AddressTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressTest.php
similarity index 93%
rename from app/code/Magento/Customer/Test/Unit/Model/Resource/AddressTest.php
rename to app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressTest.php
index 368afb3f167a33c8054bac52d0dcdcecce3a42ee..61f3adb3dab7a1411b8faa4b3e83d575b22862e6 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Resource/AddressTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/AddressTest.php
@@ -6,15 +6,15 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Customer\Test\Unit\Model\Resource;
+namespace Magento\Customer\Test\Unit\Model\ResourceModel;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite;
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
 class AddressTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\Customer\Model\Resource\Address */
+    /** @var \Magento\Customer\Model\ResourceModel\Address */
     protected $addressResource;
 
     /** @var \Magento\Customer\Model\CustomerFactory|\PHPUnit_Framework_MockObject_MockObject */
@@ -32,7 +32,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -41,7 +41,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
 
 
         $this->entityRelationCompositeMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite',
             [],
             [],
             '',
@@ -49,7 +49,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->addressResource = (new ObjectManagerHelper($this))->getObject(
-            'Magento\Customer\Model\Resource\Address',
+            'Magento\Customer\Model\ResourceModel\Address',
             [
                 'resource' => $this->prepareResource(),
                 'entitySnapshot' => $this->entitySnapshotMock,
@@ -122,7 +122,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     /**
      * Prepare resource mock object
      *
-     * @return \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @return \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected function prepareResource()
     {
@@ -151,7 +151,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
         $dbAdapter->expects($this->any())->method('lastInsertId');
         $dbAdapter->expects($this->any())->method('select')->willReturn($dbSelect);
 
-        $resource = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Resource/Customer/GridTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Customer/GridTest.php
similarity index 94%
rename from app/code/Magento/Customer/Test/Unit/Model/Resource/Customer/GridTest.php
rename to app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Customer/GridTest.php
index 14768adf1d50ddbd93b6844ca8b83ad797fc7ffa..66f925fa08ee905d984f14a9653eb5d617c77dd2 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Resource/Customer/GridTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Customer/GridTest.php
@@ -3,13 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Test\Unit\Model\Resource\Customer;
+namespace Magento\Customer\Test\Unit\Model\ResourceModel\Customer;
 
-use Magento\Customer\Model\Resource\Customer\Grid;
+use Magento\Customer\Model\ResourceModel\Customer\Grid;
 
 class GridTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject */
     protected $resource;
 
     /** @var \Magento\Framework\Indexer\IndexerRegistry|\PHPUnit_Framework_MockObject_MockObject */
@@ -35,7 +35,7 @@ class GridTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->indexerRegistry = $this->getMock('Magento\Framework\Indexer\IndexerRegistry', [], [], '', false);
         $this->flatScopeResolver = $this->getMock(
             'Magento\Framework\Indexer\ScopeResolver\FlatScopeResolver',
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Resource/CustomerRepositoryTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/CustomerRepositoryTest.php
similarity index 97%
rename from app/code/Magento/Customer/Test/Unit/Model/Resource/CustomerRepositoryTest.php
rename to app/code/Magento/Customer/Test/Unit/Model/ResourceModel/CustomerRepositoryTest.php
index 9461c4b04d8dbfc0f93857fe4ca414f69cda2b15..413e95826681ed4af766ba038946f975fd31488c 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Resource/CustomerRepositoryTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/CustomerRepositoryTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Customer\Test\Unit\Model\Resource;
+namespace Magento\Customer\Test\Unit\Model\ResourceModel;
 
 use Magento\Customer\Api\CustomerMetadataInterface;
 
@@ -29,12 +29,12 @@ class CustomerRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $customerRegistry;
 
     /**
-     * @var \Magento\Customer\Model\Resource\AddressRepository|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\AddressRepository|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $addressRepository;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Customer|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $customerResourceModel;
 
@@ -84,13 +84,14 @@ class CustomerRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $customer;
 
     /**
-     * @var \Magento\Customer\Model\Resource\CustomerRepository
+     * @var \Magento\Customer\Model\ResourceModel\CustomerRepository
      */
     protected $model;
     
     public function setUp()
     {
-        $this->customerResourceModel = $this->getMock('Magento\Customer\Model\Resource\Customer', [], [], '', false);
+        $this->customerResourceModel =
+            $this->getMock('Magento\Customer\Model\ResourceModel\Customer', [], [], '', false);
         $this->customerRegistry = $this->getMock('Magento\Customer\Model\CustomerRegistry', [], [], '', false);
         $this->dataObjectHelper = $this->getMock('Magento\Framework\Api\DataObjectHelper', [], [], '', false);
         $this->customerFactory  = $this->getMock('Magento\Customer\Model\CustomerFactory', ['create'], [], '', false);
@@ -103,7 +104,7 @@ class CustomerRepositoryTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->addressRepository = $this->getMock(
-            'Magento\Customer\Model\Resource\AddressRepository',
+            'Magento\Customer\Model\ResourceModel\AddressRepository',
             [],
             [],
             '',
@@ -161,7 +162,7 @@ class CustomerRepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->model = new \Magento\Customer\Model\Resource\CustomerRepository(
+        $this->model = new \Magento\Customer\Model\ResourceModel\CustomerRepository(
             $this->customerFactory,
             $this->customerSecureFactory,
             $this->customerRegistry,
@@ -627,7 +628,7 @@ class CustomerRepositoryTest extends \PHPUnit_Framework_TestCase
         $sortOrder = $this->getMock('Magento\Framework\Api\SortOrder', [], [], '', false);
         $filterGroup = $this->getMock('Magento\Framework\Api\Search\FilterGroup', [], [], '', false);
         $filter = $this->getMock('Magento\Framework\Api\Filter', [], [], '', false);
-        $collection = $this->getMock('Magento\Customer\Model\Resource\Customer\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Customer\Model\ResourceModel\Customer\Collection', [], [], '', false);
         $searchResults = $this->getMockForAbstractClass(
             'Magento\Customer\Api\Data\AddressSearchResultsInterface',
             [],
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Resource/Group/Grid/ServiceCollectionTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Group/Grid/ServiceCollectionTest.php
similarity index 96%
rename from app/code/Magento/Customer/Test/Unit/Model/Resource/Group/Grid/ServiceCollectionTest.php
rename to app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Group/Grid/ServiceCollectionTest.php
index b506acdf4ec3d781c37df6f6837c52a803d6891c..93bffe140ab4c8fdf06541c6e4353f06005eb143 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Resource/Group/Grid/ServiceCollectionTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/Group/Grid/ServiceCollectionTest.php
@@ -4,14 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Customer\Test\Unit\Model\Resource\Group\Grid;
+namespace Magento\Customer\Test\Unit\Model\ResourceModel\Group\Grid;
 
 use Magento\Framework\Api\SearchCriteria;
-use Magento\Customer\Model\Resource\Group\Grid\ServiceCollection;
+use Magento\Customer\Model\ResourceModel\Group\Grid\ServiceCollection;
 use Magento\Framework\Api\SortOrder;
 
 /**
- * Unit test for \Magento\Customer\Model\Resource\Group\Grid\ServiceCollection
+ * Unit test for \Magento\Customer\Model\ResourceModel\Group\Grid\ServiceCollection
  */
 class ServiceCollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -68,7 +68,7 @@ class ServiceCollectionTest extends \PHPUnit_Framework_TestCase
 
         $this->serviceCollection = $this->objectManager
             ->getObject(
-                'Magento\Customer\Model\Resource\Group\Grid\ServiceCollection',
+                'Magento\Customer\Model\ResourceModel\Group\Grid\ServiceCollection',
                 [
                     'filterBuilder' => $this->filterBuilder,
                     'searchCriteriaBuilder' => $this->searchCriteriaBuilder,
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Resource/GroupRepositoryTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupRepositoryTest.php
similarity index 98%
rename from app/code/Magento/Customer/Test/Unit/Model/Resource/GroupRepositoryTest.php
rename to app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupRepositoryTest.php
index ff0aa87cead17b7baba65decc1ce0bc458bc1c91..9bd4d000596bb2c9c398ad20bca08ac51350cad7 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Resource/GroupRepositoryTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupRepositoryTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Customer\Test\Unit\Model\Resource;
+namespace Magento\Customer\Test\Unit\Model\ResourceModel;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -37,7 +37,7 @@ class GroupRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $group;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Group|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Group|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $groupResourceModel;
 
@@ -67,7 +67,7 @@ class GroupRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $extensionAttributesJoinProcessor;
 
     /**
-     * @var \Magento\Customer\Model\Resource\GroupRepository
+     * @var \Magento\Customer\Model\ResourceModel\GroupRepository
      */
     protected $model;
     
@@ -116,7 +116,7 @@ class GroupRepositoryTest extends \PHPUnit_Framework_TestCase
         $this->group = $this->getMockForAbstractClass('Magento\Customer\Api\Data\GroupInterface', [], 'group', false);
 
         $this->groupResourceModel = $this->getMock(
-            'Magento\Customer\Model\Resource\Group',
+            'Magento\Customer\Model\ResourceModel\Group',
             [],
             [],
             '',
@@ -154,7 +154,7 @@ class GroupRepositoryTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->model = new \Magento\Customer\Model\Resource\GroupRepository(
+        $this->model = new \Magento\Customer\Model\ResourceModel\GroupRepository(
             $this->groupRegistry,
             $this->groupFactory,
             $this->groupDataFactory,
@@ -348,7 +348,7 @@ class GroupRepositoryTest extends \PHPUnit_Framework_TestCase
         $groupExtension = $this->getMock('Magento\Customer\Api\Data\GroupExtensionInterface', [], [], '', false);
         $filterGroup = $this->getMock('Magento\Framework\Api\Search\FilterGroup', [], [], '', false);
         $filter = $this->getMock('Magento\Framework\Api\Filter', [], [], '', false);
-        $collection = $this->getMock('Magento\Customer\Model\Resource\Group\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Customer\Model\ResourceModel\Group\Collection', [], [], '', false);
         $sortOrder = $this->getMock('Magento\Framework\Api\SortOrder', [], [], '', false);
         $searchCriteria = $this->getMockForAbstractClass(
             'Magento\Framework\Api\SearchCriteriaInterface',
@@ -494,7 +494,7 @@ class GroupRepositoryTest extends \PHPUnit_Framework_TestCase
         $groupExtension = $this->getMock('Magento\Customer\Api\Data\GroupExtensionInterface', [], [], '', false);
         $filterGroup = $this->getMock('Magento\Framework\Api\Search\FilterGroup', [], [], '', false);
         $filter = $this->getMock('Magento\Framework\Api\Filter', [], [], '', false);
-        $collection = $this->getMock('Magento\Customer\Model\Resource\Group\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Customer\Model\ResourceModel\Group\Collection', [], [], '', false);
         $searchCriteria = $this->getMockForAbstractClass(
             'Magento\Framework\Api\SearchCriteriaInterface',
             [],
diff --git a/app/code/Magento/Customer/Test/Unit/Model/Resource/GroupTest.php b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupTest.php
similarity index 87%
rename from app/code/Magento/Customer/Test/Unit/Model/Resource/GroupTest.php
rename to app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupTest.php
index 6f1bcaa0fb43c012b0c99eecf008d11475bef32d..2577c7fb4018f8374f95e8c472ee15e876ce6d62 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/Resource/GroupTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/ResourceModel/GroupTest.php
@@ -6,16 +6,16 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Customer\Test\Unit\Model\Resource;
+namespace Magento\Customer\Test\Unit\Model\ResourceModel;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
 class GroupTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\Customer\Model\Resource\Group */
+    /** @var \Magento\Customer\Model\ResourceModel\Group */
     protected $groupResourceModel;
 
-    /** @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject */
     protected $resource;
 
     /** @var \Magento\Customer\Model\Vat|\PHPUnit_Framework_MockObject_MockObject */
@@ -35,10 +35,10 @@ class GroupTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->customerVat = $this->getMock('Magento\Customer\Model\Vat', [], [], '', false);
         $this->customersFactory = $this->getMock(
-            'Magento\Customer\Model\Resource\Customer\CollectionFactory',
+            'Magento\Customer\Model\ResourceModel\Customer\CollectionFactory',
             ['create'],
             [],
             '',
@@ -53,18 +53,18 @@ class GroupTest extends \PHPUnit_Framework_TestCase
 
         $this->groupModel = $this->getMock('Magento\Customer\Model\Group', [], [], '', false);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resource);
 
         $this->relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\Resource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $transactionManagerMock = $this->getMock('\Magento\Framework\Model\Resource\Db\TransactionManagerInterface');
+        $transactionManagerMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface');
         $transactionManagerMock->expects($this->once())
             ->method('start')
             ->willReturn($this->getMock('\Magento\Framework\DB\Adapter\AdapterInterface'));
@@ -76,7 +76,7 @@ class GroupTest extends \PHPUnit_Framework_TestCase
             ->willReturn($this->relationProcessorMock);
 
         $this->groupResourceModel = (new ObjectManagerHelper($this))->getObject(
-            'Magento\Customer\Model\Resource\Group',
+            'Magento\Customer\Model\ResourceModel\Group',
             [
                 'context' => $contextMock,
                 'groupManagement' => $this->groupManagement,
@@ -112,7 +112,7 @@ class GroupTest extends \PHPUnit_Framework_TestCase
         $defaultCustomerGroup->expects($this->once())->method('getId')
             ->will($this->returnValue(1));
         $customer->expects($this->once())->method('setGroupId')->with(1);
-        $customerCollection = $this->getMock('Magento\Customer\Model\Resource\Customer\Collection', [], [], '', false);
+        $customerCollection = $this->getMock('Magento\Customer\Model\ResourceModel\Customer\Collection', [], [], '', false);
         $customerCollection->expects($this->once())->method('addAttributeToFilter')->will($this->returnSelf());
         $customerCollection->expects($this->once())->method('load')->will($this->returnValue([$customer]));
         $this->customersFactory->expects($this->once())->method('create')
diff --git a/app/code/Magento/Customer/Test/Unit/Model/VisitorTest.php b/app/code/Magento/Customer/Test/Unit/Model/VisitorTest.php
index 48ae8de81dc204ed5ad0316c618846d468b69c72..833748a03c51d069ad8dfa603257c9548c59d347 100644
--- a/app/code/Magento/Customer/Test/Unit/Model/VisitorTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Model/VisitorTest.php
@@ -30,7 +30,7 @@ class VisitorTest extends \PHPUnit_Framework_TestCase
     protected $registry;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Visitor|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Visitor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -49,7 +49,7 @@ class VisitorTest extends \PHPUnit_Framework_TestCase
 
         $this->objectManagerHelper = new ObjectManagerHelper($this);
 
-        $this->resource = $this->getMockBuilder('Magento\Customer\Model\Resource\Visitor')
+        $this->resource = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Visitor')
             ->setMethods([
                 'beginTransaction',
                 '__sleep',
diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/DataProviderTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/DataProviderTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..7e1b9f9d43779ed11698f2fa05eafa2b568026a6
--- /dev/null
+++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/DataProviderTest.php
@@ -0,0 +1,164 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Customer\Test\Unit\Ui\Component;
+
+use Magento\Customer\Api\Data\AttributeMetadataInterface;
+use Magento\Customer\Ui\Component\DataProvider;
+use Magento\Customer\Ui\Component\Listing\AttributeRepository;
+use Magento\Framework\Api\FilterBuilder;
+use Magento\Framework\Api\Search\SearchCriteriaInterface;
+use Magento\Framework\View\Element\UiComponent\DataProvider\Reporting;
+
+class DataProviderTest extends \PHPUnit_Framework_TestCase
+{
+    const TEST_REQUEST_NAME = 'test_request_name';
+
+    /**
+     * @var DataProvider
+     */
+    protected $model;
+
+    /**
+     * @var Reporting | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $reporting;
+
+    /**
+     * @var SearchCriteriaInterface | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $searchCriteria;
+
+    /**
+     * @var \Magento\Framework\App\RequestInterface | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $request;
+
+    /**
+     * @var FilterBuilder | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $filterBuilder;
+
+    /**
+     * @var AttributeRepository | \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $attributeRepository;
+
+    public function setUp()
+    {
+        $this->reporting = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\DataProvider\Reporting')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $searchCriteriaBuilder = $this->mockSearchCriteria();
+
+        $this->request = $this->getMockBuilder('Magento\Framework\App\RequestInterface')
+            ->getMockForAbstractClass();
+
+        $this->filterBuilder = $this->getMockBuilder('Magento\Framework\Api\FilterBuilder')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->attributeRepository = $this->getMockBuilder('Magento\Customer\Ui\Component\Listing\AttributeRepository')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->model = new DataProvider(
+            self::TEST_REQUEST_NAME,
+            '',
+            '',
+            $this->reporting,
+            $searchCriteriaBuilder,
+            $this->request,
+            $this->filterBuilder,
+            $this->attributeRepository
+        );
+    }
+
+    public function testGetData()
+    {
+        $attributeCode = 'attribute_code';
+        $attributeValue = [
+            AttributeMetadataInterface::OPTIONS => [
+                [
+                    'label' => 'opt1_label',
+                    'value' => 'opt1_value',
+                ],
+            ],
+        ];
+
+        $expected = [
+            [
+                'attribute_code' => ['opt1_value'],
+            ],
+        ];
+
+        $attributeMock = $this->getMockBuilder('Magento\Framework\Api\AttributeInterface')
+            ->getMockForAbstractClass();
+        $attributeMock->expects($this->once())
+            ->method('getAttributeCode')
+            ->willReturn($attributeCode);
+        $attributeMock->expects($this->once())
+            ->method('getValue')
+            ->willReturn('opt1_value');
+
+        $searchDocumentMock = $this->getMockBuilder('Magento\Framework\Api\Search\DocumentInterface')
+            ->getMockForAbstractClass();
+        $searchDocumentMock->expects($this->once())
+            ->method('getCustomAttributes')
+            ->willReturn([$attributeMock]);
+
+        $searchResultMock = $this->getMockBuilder('Magento\Framework\Api\Search\SearchResultInterface')
+            ->getMockForAbstractClass();
+        $searchResultMock->expects($this->once())
+            ->method('getTotalCount')
+            ->willReturn(1);
+        $searchResultMock->expects($this->once())
+            ->method('getItems')
+            ->willReturn([$searchDocumentMock]);
+
+        $this->searchCriteria->expects($this->once())
+            ->method('setRequestName')
+            ->with(self::TEST_REQUEST_NAME)
+            ->willReturnSelf();
+
+        $this->reporting->expects($this->once())
+            ->method('search')
+            ->with($this->searchCriteria)
+            ->willReturn($searchResultMock);
+
+        $this->attributeRepository->expects($this->once())
+            ->method('getList')
+            ->willReturn([$attributeCode => $attributeValue]);
+
+        $result = $this->model->getData();
+
+        $this->assertTrue(is_array($result));
+        $this->assertArrayHasKey('totalRecords', $result);
+        $this->assertEquals(1, $result['totalRecords']);
+        $this->assertArrayHasKey('items', $result);
+        $this->assertTrue(is_array($result['items']));
+        $this->assertEquals($result['items'], $expected);
+    }
+
+    /**
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function mockSearchCriteria()
+    {
+        $this->searchCriteria = $this->getMockBuilder('Magento\Framework\Api\Search\SearchCriteriaInterface')
+            ->getMockForAbstractClass();
+
+        $searchCriteriaBuilder = $this->getMockBuilder('Magento\Framework\Api\Search\SearchCriteriaBuilder')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $searchCriteriaBuilder->expects($this->any())
+            ->method('create')
+            ->willReturn($this->searchCriteria);
+
+        return $searchCriteriaBuilder;
+    }
+}
diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ActionsTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ActionsTest.php
index 19809e6e5ae13e5629156909bccf0babbdc9d9b6..92df9f65692f64d3e6cda9aff0e2aa64fd7fb29a 100644
--- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ActionsTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/ActionsTest.php
@@ -23,12 +23,12 @@ class ActionsTest extends \PHPUnit_Framework_TestCase
 
     public function setup()
     {
-        $this->context = $this->getMockForAbstractClass(
-            'Magento\Framework\View\Element\UiComponent\ContextInterface',
-            [],
-            '',
-            false
-        );
+        $this->context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->context->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             [],
diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AttributeColumnTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AttributeColumnTest.php
index 68853c63e37515538ccc35e427120ab7200f9071..292f73888809a420b5055320577d49a5e1d5633e 100644
--- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AttributeColumnTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/Column/AttributeColumnTest.php
@@ -27,12 +27,12 @@ class AttributeColumnTest extends \PHPUnit_Framework_TestCase
 
     public function setup()
     {
-        $this->context = $this->getMockForAbstractClass(
-            'Magento\Framework\View\Element\UiComponent\ContextInterface',
-            [],
-            '',
-            false
-        );
+        $this->context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->context->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             [],
diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/ColumnsTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/ColumnsTest.php
index fbdfdf3ff4798c2e0b034a175ca92a6d6844922e..2ff207ba75f96d75a54e8bd91a63ff175e0ae023 100644
--- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/ColumnsTest.php
+++ b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/ColumnsTest.php
@@ -32,12 +32,12 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->context = $this->getMockForAbstractClass(
-            'Magento\Framework\View\Element\UiComponent\ContextInterface',
-            [],
-            '',
-            false
-        );
+        $this->context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->context->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->columnFactory = $this->getMock(
             'Magento\Customer\Ui\Component\ColumnFactory',
             ['create'],
@@ -173,6 +173,7 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase
                 [
                     'name' => $attributeCode,
                     'dataType' => $backendType,
+                    'filter' => 'text',
                     'visible' => true
                 ]
             );
diff --git a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/FiltersTest.php b/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/FiltersTest.php
deleted file mode 100644
index 2dc73c58104a5746ba8513e3816d646aba770240..0000000000000000000000000000000000000000
--- a/app/code/Magento/Customer/Test/Unit/Ui/Component/Listing/FiltersTest.php
+++ /dev/null
@@ -1,135 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Customer\Test\Unit\Ui\Component\Listing;
-
-use Magento\Customer\Ui\Component\Listing\Filters;
-
-class FiltersTest extends \PHPUnit_Framework_TestCase
-{
-    /** @var \Magento\Framework\View\Element\UiComponent\ContextInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $context;
-
-    /** @var \Magento\Customer\Ui\Component\FilterFactory|\PHPUnit_Framework_MockObject_MockObject */
-    protected $filterFactory;
-
-    /** @var \Magento\Customer\Ui\Component\Listing\AttributeRepository|\PHPUnit_Framework_MockObject_MockObject */
-    protected $attributeRepository;
-
-    /** @var \Magento\Customer\Api\Data\AttributeMetadataInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $attributeMetadata;
-
-    /** @var \Magento\Ui\Component\Listing\Columns\ColumnInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $filter;
-
-    /** @var Filters */
-    protected $component;
-
-    public function setUp()
-    {
-        $this->context = $this->getMockForAbstractClass(
-            'Magento\Framework\View\Element\UiComponent\ContextInterface',
-            [],
-            '',
-            false
-        );
-        $this->filterFactory = $this->getMock(
-            'Magento\Customer\Ui\Component\FilterFactory',
-            ['create'],
-            [],
-            '',
-            false
-        );
-        $this->attributeRepository = $this->getMock(
-            'Magento\Customer\Ui\Component\Listing\AttributeRepository',
-            [],
-            [],
-            '',
-            false
-        );
-        $this->attributeMetadata = $this->getMockForAbstractClass(
-            'Magento\Customer\Api\Data\AttributeMetadataInterface',
-            [],
-            '',
-            false
-        );
-        $this->filter = $this->getMockForAbstractClass(
-            'Magento\Ui\Component\Listing\Columns\ColumnInterface',
-            [],
-            '',
-            false
-        );
-
-        $this->component = new Filters(
-            $this->context,
-            $this->filterFactory,
-            $this->attributeRepository
-        );
-    }
-
-    public function testPrepare()
-    {
-        $attributeCode = 'billing_attribute_code';
-        $attributeData = [
-            'attribute_code' => $attributeCode,
-            'frontend_input' => 'frontend-input',
-            'frontend_label' => 'frontend-label',
-            'backend_type' => 'backend-type',
-            'options' => [
-                [
-                    'label' => 'Label',
-                    'value' => 'Value'
-                ]
-            ],
-            'is_used_in_grid' => true,
-            'is_visible_in_grid' => true,
-            'is_filterable_in_grid' => true,
-            'is_searchable_in_grid' => true,
-        ];
-
-        $this->attributeRepository->expects($this->atLeastOnce())
-            ->method('getList')
-            ->willReturn([$attributeCode => $attributeData]);
-        $this->filterFactory->expects($this->once())
-            ->method('create')
-            ->with($attributeData, $this->context)
-            ->willReturn($this->filter);
-        $this->filter->expects($this->once())
-            ->method('prepare');
-
-        $this->component->prepare();
-        $this->assertSame($this->filter, $this->component->getComponent($attributeCode));
-    }
-
-    public function testPrepareWithAlreadyAddedComponent()
-    {
-        $attributeCode = 'billing_attribute_code';
-        $attributeData = [
-            'attribute_code' => $attributeCode,
-            'frontend_input' => 'frontend-input',
-            'frontend_label' => 'frontend-label',
-            'backend_type' => 'backend-type',
-            'options' => [
-                [
-                    'label' => 'Label',
-                    'value' => 'Value'
-                ]
-            ],
-            'is_used_in_grid' => true,
-            'is_visible_in_grid' => true,
-            'is_filterable_in_grid' => false,
-            'is_searchable_in_grid' => true,
-        ];
-
-        $this->component->addComponent($attributeCode, $this->filter);
-
-        $this->attributeRepository->expects($this->atLeastOnce())
-            ->method('getList')
-            ->willReturn([$attributeCode => $attributeData]);
-
-        $this->component->prepare();
-        $this->assertEquals(null, $this->component->getComponent($attributeCode));
-    }
-}
diff --git a/app/code/Magento/Customer/Ui/Component/Listing/Column/Group/Options.php b/app/code/Magento/Customer/Ui/Component/Listing/Column/Group/Options.php
index 75ef85805d9dfe3f6aea3a34255273a37c5b4db0..4d54b6ffb61ee979ae2c4345f45f9edaa8e323a0 100644
--- a/app/code/Magento/Customer/Ui/Component/Listing/Column/Group/Options.php
+++ b/app/code/Magento/Customer/Ui/Component/Listing/Column/Group/Options.php
@@ -6,7 +6,7 @@
 namespace Magento\Customer\Ui\Component\Listing\Column\Group;
 
 use Magento\Framework\Data\OptionSourceInterface;
-use Magento\Customer\Model\Resource\Group\CollectionFactory;
+use Magento\Customer\Model\ResourceModel\Group\CollectionFactory;
 
 /**
  * Class Options
diff --git a/app/code/Magento/Customer/Ui/Component/Listing/Columns.php b/app/code/Magento/Customer/Ui/Component/Listing/Columns.php
index 36b2f42d3b020710b6fa2e653a6778e0926fa36f..bcb43fb4bfc2123dd62678e27fee5127c0fcd361 100644
--- a/app/code/Magento/Customer/Ui/Component/Listing/Columns.php
+++ b/app/code/Magento/Customer/Ui/Component/Listing/Columns.php
@@ -23,6 +23,17 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
     /** @var InlineEditUpdater */
     protected $inlineEditUpdater;
 
+    /**
+     * @var array
+     */
+    protected $filterMap = [
+        'default' => 'text',
+        'select' => 'select',
+        'boolean' => 'select',
+        'multiselect' => 'select',
+        'date' => 'dateRange',
+    ];
+
     /**
      * @param ContextInterface $context
      * @param ColumnFactory $columnFactory
@@ -103,6 +114,9 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
     public function addColumn(array $attributeData, $columnName)
     {
         $config['sortOrder'] = ++$this->columnSortOrder;
+        if ($attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID]) {
+            $config['filter'] = $this->getFilterType($attributeData[AttributeMetadata::FRONTEND_INPUT]);
+        }
         $column = $this->columnFactory->create($attributeData, $columnName, $this->getContext(), $config);
         $column->prepare();
         $this->addComponent($attributeData[AttributeMetadata::ATTRIBUTE_CODE], $column);
@@ -128,6 +142,9 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
                         'visible' => (bool)$attributeData[AttributeMetadata::IS_VISIBLE_IN_GRID]
                     ]
                 );
+                if ($attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID]) {
+                    $config['filter'] = $this->getFilterType($attributeData[AttributeMetadata::FRONTEND_INPUT]);
+                }
                 $component->setData('config', $config);
             }
         } else {
@@ -168,4 +185,15 @@ class Columns extends \Magento\Ui\Component\Listing\Columns
             );
         }
     }
+
+    /**
+     * Retrieve filter type by $frontendInput
+     *
+     * @param string $frontendInput
+     * @return string
+     */
+    protected function getFilterType($frontendInput)
+    {
+        return isset($this->filterMap[$frontendInput]) ? $this->filterMap[$frontendInput] : $this->filterMap['default'];
+    }
 }
diff --git a/app/code/Magento/Customer/Ui/Component/Listing/Filters.php b/app/code/Magento/Customer/Ui/Component/Listing/Filters.php
deleted file mode 100644
index 2e0816d079729756e70f826148fcb86c66fd3835..0000000000000000000000000000000000000000
--- a/app/code/Magento/Customer/Ui/Component/Listing/Filters.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Customer\Ui\Component\Listing;
-
-use Magento\Customer\Api\Data\AttributeMetadataInterface as AttributeMetadata;
-
-class Filters extends \Magento\Ui\Component\Filters
-{
-    /**
-     * @param \Magento\Framework\View\Element\UiComponent\ContextInterface $context
-     * @param \Magento\Customer\Ui\Component\FilterFactory $filterFactory
-     * @param AttributeRepository $attributeRepository
-     * @param array $components
-     * @param array $data
-     */
-    public function __construct(
-        \Magento\Framework\View\Element\UiComponent\ContextInterface $context,
-        \Magento\Customer\Ui\Component\FilterFactory $filterFactory,
-        \Magento\Customer\Ui\Component\Listing\AttributeRepository $attributeRepository,
-        array $components = [],
-        array $data = []
-    ) {
-        parent::__construct($context, $components, $data);
-        $this->filterFactory = $filterFactory;
-        $this->attributeRepository = $attributeRepository;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function prepare()
-    {
-        /** @var \Magento\Customer\Model\Attribute $attribute */
-        foreach ($this->attributeRepository->getList() as $attributeCode => $attributeData) {
-            if (!isset($this->components[$attributeCode])) {
-                if (!$attributeData[AttributeMetadata::BACKEND_TYPE] != 'static'
-                    && $attributeData[AttributeMetadata::IS_USED_IN_GRID]
-                    && $attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID]
-                ) {
-                    $filter = $this->filterFactory->create($attributeData, $this->getContext());
-                    $filter->prepare();
-                    $this->addComponent($attributeCode, $filter);
-                }
-            } elseif ($attributeData[AttributeMetadata::IS_USED_IN_GRID]
-                && !$attributeData[AttributeMetadata::IS_FILTERABLE_IN_GRID]
-            ) {
-                unset($this->components[$attributeCode]);
-            }
-        }
-        parent::prepare();
-    }
-}
diff --git a/app/code/Magento/Customer/Ui/Component/MassAction/Group/Options.php b/app/code/Magento/Customer/Ui/Component/MassAction/Group/Options.php
index e2b9e8e4688509f795445c6aa2fd52d0265d45c5..e7b8ee53dec42fb01dd70a87f22cf50a150ce3d4 100644
--- a/app/code/Magento/Customer/Ui/Component/MassAction/Group/Options.php
+++ b/app/code/Magento/Customer/Ui/Component/MassAction/Group/Options.php
@@ -7,7 +7,7 @@ namespace Magento\Customer\Ui\Component\MassAction\Group;
 
 use Magento\Framework\UrlInterface;
 use Zend\Stdlib\JsonSerializable;
-use Magento\Customer\Model\Resource\Group\CollectionFactory;
+use Magento\Customer\Model\ResourceModel\Group\CollectionFactory;
 
 /**
  * Class Options
diff --git a/app/code/Magento/Customer/composer.json b/app/code/Magento/Customer/composer.json
index 5bf95b1f878c100a33ffe0eec5e96cc3a87b146e..b7ef85fb4be9087bc1637fb9364a4a8c00419e21 100644
--- a/app/code/Magento/Customer/composer.json
+++ b/app/code/Magento/Customer/composer.json
@@ -25,7 +25,8 @@
         "magento/module-quote": "1.0.0-beta"
     },
     "suggest": {
-        "magento/module-cookie": "1.0.0-beta"
+        "magento/module-cookie": "1.0.0-beta",
+        "magento/module-customer-sample-data": "Sample Data version:1.0.0-beta"
     },
     "type": "magento2-module",
     "version": "1.0.0-beta",
diff --git a/app/code/Magento/Customer/etc/adminhtml/di.xml b/app/code/Magento/Customer/etc/adminhtml/di.xml
index ebde7213624e788b957d2eff2e8db16ee441002e..7e539557df1ddaf57d31f46b628e4c54f2f69918 100644
--- a/app/code/Magento/Customer/etc/adminhtml/di.xml
+++ b/app/code/Magento/Customer/etc/adminhtml/di.xml
@@ -7,7 +7,7 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <preference for="Magento\Customer\Model\Customer" type="Magento\Customer\Model\Backend\Customer" />
-    <type name="Magento\Customer\Model\Resource\Customer\Collection">
+    <type name="Magento\Customer\Model\ResourceModel\Customer\Collection">
         <arguments>
             <argument name="modelName" xsi:type="string">Magento\Customer\Model\Backend\Customer</argument>
         </arguments>
diff --git a/app/code/Magento/Customer/etc/di.xml b/app/code/Magento/Customer/etc/di.xml
index 30b47cdf9f9795b05dd243dc857269d416317200..0b8450f053a0786ca82977d55e6b9510140fc0fe 100644
--- a/app/code/Magento/Customer/etc/di.xml
+++ b/app/code/Magento/Customer/etc/di.xml
@@ -7,13 +7,13 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <preference for="Magento\Customer\Api\AddressRepositoryInterface"
-                type="Magento\Customer\Model\Resource\AddressRepository" />
+                type="Magento\Customer\Model\ResourceModel\AddressRepository" />
     <preference for="Magento\Customer\Api\CustomerRepositoryInterface"
-                type="Magento\Customer\Model\Resource\CustomerRepository" />
+                type="Magento\Customer\Model\ResourceModel\CustomerRepository" />
     <preference for="Magento\Customer\Api\GroupManagementInterface"
                 type="Magento\Customer\Model\GroupManagement" />
     <preference for="Magento\Customer\Api\GroupRepositoryInterface"
-                type="Magento\Customer\Model\Resource\GroupRepository" />
+                type="Magento\Customer\Model\ResourceModel\GroupRepository" />
     <preference for="Magento\Customer\Api\Data\CustomerInterface" type="Magento\Customer\Model\Data\Customer" />
     <preference for="Magento\Customer\Api\Data\AddressInterface" type="Magento\Customer\Model\Data\Address" />
     <preference for="Magento\Customer\Api\Data\RegionInterface" type="Magento\Customer\Model\Data\Region" />
@@ -47,7 +47,7 @@
         <arguments>
             <argument name="configShare" xsi:type="object">Magento\Customer\Model\Config\Share\Proxy</argument>
             <argument name="customerUrl" xsi:type="object">Magento\Customer\Model\Url\Proxy</argument>
-            <argument name="customerResource" xsi:type="object">Magento\Customer\Model\Resource\Customer\Proxy</argument>
+            <argument name="customerResource" xsi:type="object">Magento\Customer\Model\ResourceModel\Customer\Proxy</argument>
             <argument name="storage" xsi:type="object">Magento\Customer\Model\Session\Storage</argument>
             <argument name="customerRepository" xsi:type="object">Magento\Customer\Api\CustomerRepositoryInterface\Proxy</argument>
         </arguments>
@@ -59,13 +59,13 @@
     </type>
     <type name="Magento\Customer\Model\Config\Share">
         <arguments>
-            <argument name="customerResource" xsi:type="object">Magento\Customer\Model\Resource\Customer\Proxy</argument>
+            <argument name="customerResource" xsi:type="object">Magento\Customer\Model\ResourceModel\Customer\Proxy</argument>
         </arguments>
     </type>
     <type name="Magento\Eav\Model\Entity\Setup\PropertyMapper\Composite">
         <arguments>
             <argument name="propertyMappers" xsi:type="array">
-                <item name="customer" xsi:type="string">Magento\Customer\Model\Resource\Setup\PropertyMapper</item>
+                <item name="customer" xsi:type="string">Magento\Customer\Model\ResourceModel\Setup\PropertyMapper</item>
             </argument>
         </arguments>
     </type>
@@ -76,7 +76,7 @@
             </argument>
         </arguments>
     </type>
-    <type name="Magento\Customer\Model\Resource\Address">
+    <type name="Magento\Customer\Model\ResourceModel\Address">
         <arguments>
             <argument name="customerRepository" xsi:type="object">Magento\Customer\Api\CustomerRepositoryInterface\Proxy</argument>
             <argument name="entitySnapshot" xsi:type="object">EavVersionControlSnapshot</argument>
@@ -97,7 +97,7 @@
             </argument>
         </arguments>
     </type>
-    <type name="Magento\Customer\Model\Resource\Group" shared="false">
+    <type name="Magento\Customer\Model\ResourceModel\Group" shared="false">
         <arguments>
             <argument name="groupManagement" xsi:type="object">Magento\Customer\Api\GroupManagementInterface\Proxy</argument>
         </arguments>
@@ -139,52 +139,52 @@
             </argument>
         </arguments>
     </type>
-    <virtualType name="EavVersionControlSnapshot" type="Magento\Framework\Model\Resource\Db\VersionControl\Snapshot">
+    <virtualType name="EavVersionControlSnapshot" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot">
         <arguments>
             <argument name="metadata" xsi:type="object">Magento\Eav\Model\Entity\VersionControl\Metadata</argument>
         </arguments>
     </virtualType>
-    <virtualType name="CustomerRelationsComposite" type="Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite">
+    <virtualType name="CustomerRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
-                <item name="default" xsi:type="object">Magento\Customer\Model\Resource\Customer\Relation</item>
+                <item name="default" xsi:type="object">Magento\Customer\Model\ResourceModel\Customer\Relation</item>
             </argument>
         </arguments>
     </virtualType>
-    <virtualType name="CustomerAddressRelationsComposite" type="Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite">
+    <virtualType name="CustomerAddressRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
-                <item name="default" xsi:type="object">Magento\Customer\Model\Resource\Address\Relation</item>
+                <item name="default" xsi:type="object">Magento\Customer\Model\ResourceModel\Address\Relation</item>
             </argument>
         </arguments>
     </virtualType>
-    <type name="Magento\Customer\Model\Resource\Customer">
+    <type name="Magento\Customer\Model\ResourceModel\Customer">
         <arguments>
             <argument name="entitySnapshot" xsi:type="object">EavVersionControlSnapshot</argument>
             <argument name="entityRelationComposite" xsi:type="object">CustomerRelationsComposite</argument>
         </arguments>
     </type>
-    <type name="Magento\Customer\Model\Resource\Customer\Collection">
+    <type name="Magento\Customer\Model\ResourceModel\Customer\Collection">
         <arguments>
             <argument name="entitySnapshot" xsi:type="object">EavVersionControlSnapshot</argument>
         </arguments>
     </type>
-    <type name="Magento\Customer\Model\Resource\Address\Collection">
+    <type name="Magento\Customer\Model\ResourceModel\Address\Collection">
         <arguments>
             <argument name="entitySnapshot" xsi:type="object">EavVersionControlSnapshot</argument>
         </arguments>
     </type>
-    <virtualType name="Magento\Customer\Model\Resource\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
+    <virtualType name="Magento\Customer\Model\ResourceModel\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
         <arguments>
             <argument name="mainTable" xsi:type="string">customer_grid_flat</argument>
-            <argument name="resourceModel" xsi:type="string">Magento\Customer\Model\Resource\Customer</argument>
+            <argument name="resourceModel" xsi:type="string">Magento\Customer\Model\ResourceModel\Customer</argument>
         </arguments>
     </virtualType>
     <type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
         <arguments>
             <argument name="collections" xsi:type="array">
-                <item name="customer_listing_data_source" xsi:type="string">Magento\Customer\Model\Resource\Grid\Collection</item>
-                <item name="customer_online_grid_data_source" xsi:type="string">Magento\Customer\Model\Resource\Online\Grid\Collection</item>
+                <item name="customer_listing_data_source" xsi:type="string">Magento\Customer\Model\ResourceModel\Grid\Collection</item>
+                <item name="customer_online_grid_data_source" xsi:type="string">Magento\Customer\Model\ResourceModel\Online\Grid\Collection</item>
             </argument>
         </arguments>
     </type>
@@ -296,18 +296,18 @@
     </virtualType>
     <type name="Magento\Customer\Model\Indexer\AttributeProvider">
         <arguments>
-            <argument name="collection" xsi:type="object" shared="false">Magento\Customer\Model\Resource\Attribute\Collection</argument>
+            <argument name="collection" xsi:type="object" shared="false">Magento\Customer\Model\ResourceModel\Attribute\Collection</argument>
         </arguments>
     </type>
     <type name="Magento\Customer\Model\Indexer\Address\AttributeProvider">
         <arguments>
-            <argument name="collection" xsi:type="object" shared="false">Magento\Customer\Model\Resource\Address\Attribute\Collection</argument>
+            <argument name="collection" xsi:type="object" shared="false">Magento\Customer\Model\ResourceModel\Address\Attribute\Collection</argument>
         </arguments>
     </type>
-    <type name="Magento\Customer\Model\Resource\Online\Grid\Collection">
+    <type name="Magento\Customer\Model\ResourceModel\Online\Grid\Collection">
         <arguments>
             <argument name="mainTable" xsi:type="string">customer_visitor</argument>
-            <argument name="resourceModel" xsi:type="string">Magento\Customer\Model\Resource\Visitor</argument>
+            <argument name="resourceModel" xsi:type="string">Magento\Customer\Model\ResourceModel\Visitor</argument>
         </arguments>
     </type>
     <type name="Magento\Framework\Console\CommandList">
diff --git a/app/code/Magento/Customer/etc/events.xml b/app/code/Magento/Customer/etc/events.xml
index c4e0f72765f836bef4422d59fd51f2fd73e13d0a..5486118de8d1901b5d6b422f6790dc04c885eaaf 100644
--- a/app/code/Magento/Customer/etc/events.xml
+++ b/app/code/Magento/Customer/etc/events.xml
@@ -7,12 +7,12 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="customer_address_save_before">
-        <observer name="customer_address_before_save_viv_observer" instance="Magento\Customer\Observer\BeforeAddressSaveObserver" method="execute" />
+        <observer name="customer_address_before_save_viv_observer" instance="Magento\Customer\Observer\BeforeAddressSaveObserver" />
     </event>
     <event name="customer_address_save_after">
-        <observer name="customer_addres_after_save_viv_observer" instance="Magento\Customer\Observer\AfterAddressSaveObserver" method="execute" />
+        <observer name="customer_addres_after_save_viv_observer" instance="Magento\Customer\Observer\AfterAddressSaveObserver" />
     </event>
     <event name="sales_quote_save_after">
-        <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindQuoteCreateObserver" method="execute" />
+        <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindQuoteCreateObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Customer/etc/frontend/events.xml b/app/code/Magento/Customer/etc/frontend/events.xml
index d82220f964d756d3791d4bd3115e55e71e2f3443..7bd2182dd361ece1f93623fbfbd90825750ff9ba 100644
--- a/app/code/Magento/Customer/etc/frontend/events.xml
+++ b/app/code/Magento/Customer/etc/frontend/events.xml
@@ -7,25 +7,25 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="controller_action_predispatch">
-        <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\InitByRequestObserver" method="execute" />
+        <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\InitByRequestObserver" />
     </event>
     <event name="controller_action_postdispatch">
-        <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\SaveByRequestObserver" method="execute" />
+        <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\SaveByRequestObserver" />
     </event>
     <event name="customer_data_object_login">
-        <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindCustomerLoginObserver" method="execute" />
+        <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindCustomerLoginObserver" />
     </event>
     <event name="customer_logout">
-        <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindCustomerLogoutObserver" method="execute" />
-        <observer name="customer_log_logout" instance="Magento\Customer\Observer\LogLastLogoutAtObserver" method="execute" />
+        <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindCustomerLogoutObserver" />
+        <observer name="customer_log_logout" instance="Magento\Customer\Observer\LogLastLogoutAtObserver" />
     </event>
     <event name="checkout_quote_destroy">
-        <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindQuoteDestroyObserver" method="execute" />
+        <observer name="customer_visitor" instance="Magento\Customer\Observer\Visitor\BindQuoteDestroyObserver" />
     </event>
     <event name="customer_login">
-        <observer name="customer_log_login" instance="Magento\Customer\Observer\LogLastLoginAtObserver" method="execute" />
+        <observer name="customer_log_login" instance="Magento\Customer\Observer\LogLastLoginAtObserver" />
     </event>
     <event name="customer_customer_authenticated">
-        <observer name="customer_password" instance="Magento\Customer\Observer\UpgradeCustomerPasswordObserver" method="execute" />
+        <observer name="customer_password" instance="Magento\Customer\Observer\UpgradeCustomerPasswordObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Customer/etc/frontend/sections.xml b/app/code/Magento/Customer/etc/frontend/sections.xml
index f10f811db93c8350a0ccd52b532c992e3c9b3640..fc5b6efcb84a829833f23ca4a07eead802927b91 100644
--- a/app/code/Magento/Customer/etc/frontend/sections.xml
+++ b/app/code/Magento/Customer/etc/frontend/sections.xml
@@ -12,5 +12,6 @@
     <action name="customer/account/createPost"/>
     <action name="customer/ajax/login">
         <section name="checkout-data"/>
+        <section name="cart"/>
     </action>
 </config>
diff --git a/app/code/Magento/Customer/etc/indexer.xml b/app/code/Magento/Customer/etc/indexer.xml
index 3843c29d8e86d4b8d743378ce18702cd7ae3dfb0..77f25ab228e03da0633fb0d55e543bdb81bc0534 100644
--- a/app/code/Magento/Customer/etc/indexer.xml
+++ b/app/code/Magento/Customer/etc/indexer.xml
@@ -11,7 +11,7 @@
         <title translate="true">Customer Grid</title>
         <description translate="true">Rebuild Customer grid index</description>
 
-        <fieldset name="customer" source="Magento\Customer\Model\Resource\Customer\Collection"
+        <fieldset name="customer" source="Magento\Customer\Model\ResourceModel\Customer\Collection"
                   provider="Magento\Customer\Model\Indexer\AttributeProvider">
             <field name="name" xsi:type="searchable" dataType="text" handler="CustomerNameHandler"/>
             <field name="email" xsi:type="searchable" dataType="varchar"/>
@@ -26,12 +26,12 @@
             <field name="last_visit_at" xsi:type="filterable" dataType="datetime" handler="LastVisitAtHandler"/>
         </fieldset>
 
-        <fieldset name="shipping" source="Magento\Customer\Model\Resource\Address\Collection">
+        <fieldset name="shipping" source="Magento\Customer\Model\ResourceModel\Address\Collection">
             <reference fieldset="customer" from="entity_id" to="default_shipping"/>
             <field name="full" xsi:type="searchable" dataType="text" handler="ShippingAddressHandler"/>
         </fieldset>
 
-        <fieldset name="billing" source="Magento\Customer\Model\Resource\Address\Collection"
+        <fieldset name="billing" source="Magento\Customer\Model\ResourceModel\Address\Collection"
                   provider="Magento\Customer\Model\Indexer\Address\AttributeProvider">
             <reference fieldset="customer" from="entity_id" to="default_billing"/>
             <field name="full" xsi:type="searchable" dataType="text" handler="BillingAddressHandler"/>
diff --git a/app/code/Magento/Customer/etc/module.xml b/app/code/Magento/Customer/etc/module.xml
index a2b9b1eacfe848a8c9f392d5c2cdf09da8062161..20c352f8c538ccad9400b5a01de968b3fff7101d 100644
--- a/app/code/Magento/Customer/etc/module.xml
+++ b/app/code/Magento/Customer/etc/module.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="Magento_Customer" setup_version="2.0.5">
+    <module name="Magento_Customer" setup_version="2.0.6">
         <sequence>
             <module name="Magento_Eav"/>
             <module name="Magento_Directory"/>
diff --git a/app/code/Magento/Customer/view/adminhtml/layout/customer_group_index.xml b/app/code/Magento/Customer/view/adminhtml/layout/customer_group_index.xml
index b7181bbe45e4e49bac475872c560dd964173d66a..93a76b10e5bfb5d9b4f4cf72541774c53acdf6a3 100644
--- a/app/code/Magento/Customer/view/adminhtml/layout/customer_group_index.xml
+++ b/app/code/Magento/Customer/view/adminhtml/layout/customer_group_index.xml
@@ -12,7 +12,7 @@
                 <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.block.customer.group.grid" as="grid">
                     <arguments>
                         <argument name="id" xsi:type="string">customerGroupGrid</argument>
-                        <argument name="dataSource" xsi:type="object">Magento\Customer\Model\Resource\Group\Grid\ServiceCollection</argument>
+                        <argument name="dataSource" xsi:type="object">Magento\Customer\Model\ResourceModel\Group\Grid\ServiceCollection</argument>
                         <argument name="default_sort" xsi:type="string">type</argument>
                         <argument name="default_dir" xsi:type="string">asc</argument>
                         <argument name="save_parameters_in_session" xsi:type="string">1</argument>
diff --git a/app/code/Magento/Customer/view/adminhtml/layout/customer_index_edit.xml b/app/code/Magento/Customer/view/adminhtml/layout/customer_index_edit.xml
index df07e62835ea7430c51e704e0746008c61c6c7ea..1ae0c8e97db2e33367b44747bfb0052f456d7b63 100644
--- a/app/code/Magento/Customer/view/adminhtml/layout/customer_index_edit.xml
+++ b/app/code/Magento/Customer/view/adminhtml/layout/customer_index_edit.xml
@@ -7,6 +7,9 @@
 -->
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left"
       xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
+    <head>
+        <link src="Magento_Customer::js/bootstrap/customer-post-action.js"/>
+    </head>
     <body>
         <referenceContainer name="admin.scope.col.wrap" htmlClass="admin__old" /> <!-- ToDo UI: remove this wrapper with old styles removal. The class name "admin__old" is for tests only, we shouldn't use it in any way -->
         <referenceContainer name="content">
diff --git a/app/code/Magento/Customer/view/adminhtml/templates/system/config/validatevat.phtml b/app/code/Magento/Customer/view/adminhtml/templates/system/config/validatevat.phtml
index d9916cb30d0d24873fa52d22c669268651caab7d..208394342e1f4e3a3db8363077a020a275cbccc8 100644
--- a/app/code/Magento/Customer/view/adminhtml/templates/system/config/validatevat.phtml
+++ b/app/code/Magento/Customer/view/adminhtml/templates/system/config/validatevat.phtml
@@ -27,11 +27,13 @@ require(['prototype'], function(){
         new Ajax.Request('<?php /* @escapeNotVerified */ echo $block->getAjaxUrl() ?>', {
             parameters: params,
             onSuccess: function(response) {
-                result = '<?php /* @escapeNotVerified */ echo __('Please enter a valid VAT number.') ?>';
+                var result = '<?php /* @escapeNotVerified */ echo __('Error during VAT Number verification.') ?>';
                 try {
-                    response = response.responseText;
-                    if (response == 1) {
-                        result = '<?php /* @escapeNotVerified */ echo __('VAT Number is valid.') ?>';
+                    if (response.responseText.isJSON()) {
+                        response = response.responseText.evalJSON();
+                        result = response.message;
+                    }
+                    if (response.valid == 1) {
                         validationMessage.removeClassName('hidden').addClassName('success')
                     } else {
                         validationMessage.removeClassName('hidden').addClassName('error')
diff --git a/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml b/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml
index 82cd7c7066718720a42ff7239656bb3956f838bb..f7d93b699c1af76a20db9c3aa4f522d07701c838 100644
--- a/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml
+++ b/app/code/Magento/Customer/view/adminhtml/templates/tab/cart.phtml
@@ -24,8 +24,10 @@
 ?>
 <script>
 require([
+    "Magento_Ui/js/modal/alert",
+    "Magento_Ui/js/modal/confirm",
     "Magento_Catalog/catalog/product/composite/configure"
-], function(){
+], function(alert, confirm){
 
 <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>cartControl = {
     reload: function (params) {
@@ -51,17 +53,24 @@ require([
     },
 
     removeItem: function (itemId) {
+        var self = this;
+
         if (!itemId) {
-            alert('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('No item specified.')) ?>');
-            return false;
-        }
-        if(!confirm('<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('Are you sure you want to remove this item?')) ?>')) {
+            alert({
+                content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('No item specified.')) ?>'
+            });
+
             return false;
         }
 
-        this.reload({'delete':itemId});
-
-        return false;
+        confirm({
+            content: '<?php /* @escapeNotVerified */ echo $block->escapeJsQuote(__('Are you sure you want to remove this item?')) ?>',
+            actions: {
+                confirm: function(){
+                    self.reload({'delete':itemId});
+                }
+            }
+        });
     }
 };
 
diff --git a/app/code/Magento/Customer/view/adminhtml/templates/tab/view/personal_info.phtml b/app/code/Magento/Customer/view/adminhtml/templates/tab/view/personal_info.phtml
index ade28198142c2e515ab19be9c1f4ad6f4a67832b..74b855e01b140d3a9f93e922c494b9e10b0be65f 100644
--- a/app/code/Magento/Customer/view/adminhtml/templates/tab/view/personal_info.phtml
+++ b/app/code/Magento/Customer/view/adminhtml/templates/tab/view/personal_info.phtml
@@ -7,7 +7,7 @@
 // @codingStandardsIgnoreFile
 
 /**
- * Template for block \Magento\Customer\Block\Adminhtml\Edit\Tab\View\Status\PersonalInfo
+ * @var $block \Magento\Customer\Block\Adminhtml\Edit\Tab\View\PersonalInfo
  */
 
 $lastLoginDateAdmin = $block->getLastLoginDate();
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
index fe0584651a288a31ae6c7b2d911c95c08210d8b9..5c01b2cb6c7b8aced92bd6ddd731325c7abcc3bd 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_listing.xml
@@ -48,17 +48,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">customer_listing</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -68,7 +64,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -79,8 +75,6 @@
         <filterSearch name="fulltext">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item>
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
                     <item name="provider" xsi:type="string">customer_listing.customer_listing_data_source</item>
                     <item name="chipsProvider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters_chips</item>
                     <item name="storageConfig" xsi:type="array">
@@ -90,11 +84,10 @@
                 </item>
             </argument>
         </filterSearch>
-        <filters name="listing_filters" class="Magento\Customer\Ui\Component\Listing\Filters">
+        <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">customer_listing.customer_listing.customer_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -102,154 +95,17 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">customer_listing.customer_listing.customer_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
             </argument>
-            <filterRange name="entity_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">entity_id</item>
-                        <item name="label" xsi:type="string" translate="true">ID</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">from</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">to</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterInput name="name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">name</item>
-                        <item name="label" xsi:type="string" translate="true">Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">email</item>
-                        <item name="label" xsi:type="string" translate="true">Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Model\Config\Source\Group\Multiselect</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Group</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="billing_telephone">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_telephone</item>
-                        <item name="label" xsi:type="string" translate="true">Phone</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="billing_postcode">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_postcode</item>
-                        <item name="label" xsi:type="string" translate="true">ZIP</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="billing_country_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Directory\Model\Resource\Country\Collection</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_country_id</item>
-                        <item name="label" xsi:type="string" translate="true">Country</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="billing_region">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_region</item>
-                        <item name="label" xsi:type="string" translate="true">State/Province</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Since</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterSelect name="website_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Config\Model\Config\Source\Website</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">website_id</item>
-                        <item name="label" xsi:type="string" translate="true">Website</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">customer_listing.customer_listing.customer_columns.ids</item>
                     <item name="component" xsi:type="string">Magento_Ui/js/grid/tree-massactions</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -328,7 +184,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">customer_listing.customer_listing.customer_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -345,8 +200,7 @@
                     <item name="enabled" xsi:type="boolean">true</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                     <item name="clientConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="string">customer/index/inlineEdit</item>
-                        <item name="validateUrl" xsi:type="string">/path/to</item>
+                        <item name="saveUrl" xsi:type="url" path="customer/index/inlineEdit"/>
                         <item name="validateBeforeSave" xsi:type="boolean">false</item>
                     </item>
                 </item>
@@ -359,7 +213,6 @@
                             <item name="1" xsi:type="boolean">true</item>
                         </item>
                     </item>
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_listing.customer_listing.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -368,28 +221,19 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                     <item name="sortOrder" xsi:type="number">10</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="entity_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="sortable" xsi:type="string">true</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                     <item name="sortOrder" xsi:type="number">20</item>
                 </item>
@@ -397,13 +241,8 @@
         </column>
         <column name="name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Name</item>
                     <item name="sortOrder" xsi:type="number">30</item>
                 </item>
@@ -411,14 +250,9 @@
         </column>
         <column name="email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                     <item name="sortOrder" xsi:type="number">40</item>
                 </item>
@@ -426,16 +260,11 @@
         </column>
         <column name="group_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="editor" xsi:type="array">
-                        <item name="editorType" xsi:type="string">select</item>
-                    </item>
-                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="editor" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Group</item>
                     <item name="sortOrder" xsi:type="number">50</item>
                 </item>
@@ -443,14 +272,9 @@
         </column>
         <column name="billing_telephone">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Phone</item>
                     <item name="sortOrder" xsi:type="number">60</item>
                 </item>
@@ -458,14 +282,9 @@
         </column>
         <column name="billing_postcode">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ZIP</item>
                     <item name="sortOrder" xsi:type="number">70</item>
                 </item>
@@ -473,12 +292,10 @@
         </column>
         <column name="billing_country_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Country</item>
                     <item name="sortOrder" xsi:type="number">80</item>
                 </item>
@@ -486,13 +303,8 @@
         </column>
         <column name="billing_region">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">State/Province</item>
                     <item name="sortOrder" xsi:type="number">90</item>
                 </item>
@@ -500,13 +312,9 @@
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Since</item>
                     <item name="sortOrder" xsi:type="number">100</item>
                 </item>
@@ -514,30 +322,23 @@
         </column>
         <column name="website_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="editor" xsi:type="array">
-                        <item name="editorType" xsi:type="string">select</item>
-                    </item>
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="editor" xsi:type="string">select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="label" xsi:type="string" translate="true">Web Site</item>
                     <item name="sortOrder" xsi:type="number">110</item>
                 </item>
             </argument>
         </column>
-        <column name="last_visit_at" >
+        <column name="last_visit_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Last Logged In</item>
                     <item name="sortOrder" xsi:type="number">120</item>
                 </item>
@@ -545,14 +346,8 @@
         </column>
         <column name="confirmation">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Confirmed email</item>
                     <item name="sortOrder" xsi:type="number">130</item>
                 </item>
@@ -560,14 +355,8 @@
         </column>
         <column name="created_in">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Account Created in</item>
                     <item name="sortOrder" xsi:type="number">140</item>
                 </item>
@@ -575,13 +364,8 @@
         </column>
         <column name="billing_full">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                     <item name="sortOrder" xsi:type="number">150</item>
                 </item>
@@ -589,13 +373,8 @@
         </column>
         <column name="shipping_full">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                     <item name="sortOrder" xsi:type="number">160</item>
                 </item>
@@ -603,31 +382,22 @@
         </column>
         <column name="dob">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="editor" xsi:type="string">date</item>
-                    <item name="sortable" xsi:type="string">true</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="visible" xsi:type="boolean">false</item>
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="label" xsi:type="string" translate="true">Date Of Birth</item>
+                    <item name="label" xsi:type="string" translate="true">Date of Birth</item>
                     <item name="sortOrder" xsi:type="number">170</item>
                 </item>
             </argument>
         </column>
         <column name="taxvat">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Tax VAT Number</item>
                     <item name="sortOrder" xsi:type="number">180</item>
                 </item>
@@ -635,14 +405,12 @@
         </column>
         <column name="gender">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="editor" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Gender</item>
                     <item name="sortOrder" xsi:type="number">190</item>
                 </item>
@@ -650,13 +418,8 @@
         </column>
         <column name="billing_street">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Street Address</item>
                     <item name="sortOrder" xsi:type="number">200</item>
                 </item>
@@ -664,15 +427,10 @@
         </column>
         <column name="billing_city">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">City</item>
                     <item name="sortOrder" xsi:type="number">210</item>
                 </item>
@@ -680,15 +438,10 @@
         </column>
         <column name="billing_fax">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Fax</item>
                     <item name="sortOrder" xsi:type="number">220</item>
                 </item>
@@ -696,15 +449,10 @@
         </column>
         <column name="billing_vat_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">VAT Number</item>
                     <item name="sortOrder" xsi:type="number">230</item>
                 </item>
@@ -712,15 +460,10 @@
         </column>
         <column name="billing_company">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Company</item>
                     <item name="sortOrder" xsi:type="number">240</item>
                 </item>
@@ -728,15 +471,10 @@
         </column>
         <column name="billing_firstname">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Firstname</item>
                     <item name="sortOrder" xsi:type="number">250</item>
                 </item>
@@ -744,33 +482,21 @@
         </column>
         <column name="billing_lastname">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="editor" xsi:type="string">text</item>
-                    <item name="sortable" xsi:type="string">true</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Lastname</item>
                     <item name="sortOrder" xsi:type="number">260</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Customer\Ui\Component\Listing\Column\Actions">
+        <actionsColumn name="actions" class="Magento\Customer\Ui\Component\Listing\Column\Actions">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
index 4c7b5ed565fb1c03faebb1afcdde2f34b2a8c49c..c864f2ac240f44a160f0420ce22dcbfaee91081f 100644
--- a/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
+++ b/app/code/Magento/Customer/view/adminhtml/ui_component/customer_online_grid.xml
@@ -40,17 +40,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">customer_online_grid</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -60,12 +56,11 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">customer_online_grid.customer_online_grid.customer_online_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -73,107 +68,11 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">customer_online_grid.customer_online_grid.customer_online_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
             </argument>
-            <filterRange name="customer_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_id</item>
-                        <item name="label" xsi:type="string" translate="true">ID</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterInput name="firstname">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">firstname</item>
-                        <item name="label" xsi:type="string" translate="true">First Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="lastname">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">lastname</item>
-                        <item name="label" xsi:type="string" translate="true">Last Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">email</item>
-                        <item name="label" xsi:type="string" translate="true">Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="last_visit_at"  class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">last_visit_at</item>
-                        <item name="label" xsi:type="string" translate="true">Last Activity</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterSelect name="visitor_type">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Online\Type\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">visitor_type</item>
-                        <item name="label" xsi:type="string" translate="true">Type</item>
-                    </item>
-                </argument>
-            </filterSelect>
         </filters>
         <paging name="listing_paging">
             <argument name="data" xsi:type="array">
@@ -183,7 +82,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">customer_online_grid.customer_online_grid.customer_online_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -196,9 +94,6 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">customer_online_grid.customer_online_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -207,125 +102,80 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
-            <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
-                <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
-                    <item name="indexField" xsi:type="string">visitor_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
-                </item>
-            </argument>
-        </column>
         <column name="customer_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">textRange</item>
+                    <item name="sorting" xsi:type="string">asc</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
             </argument>
         </column>
         <column name="firstname">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">First Name</item>
                 </item>
             </argument>
         </column>
         <column name="lastname">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Last Name</item>
                 </item>
             </argument>
         </column>
         <column name="email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <!--<column name="remote_addr">-->
-            <!--<argument name="data" xsi:type="array">-->
-                <!--<item name="js_config" xsi:type="array">-->
-                    <!--<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>-->
-                <!--</item>-->
-                <!--<item name="config" xsi:type="array">-->
-                    <!--<item name="dataType" xsi:type="string">text</item>-->
-                    <!--<item name="align" xsi:type="string">left</item>-->
-                    <!--<item name="label" xsi:type="string" translate="true">IP Address</item>-->
-                <!--</item>-->
-            <!--</argument>-->
-        <!--</column>-->
-        <column name="first_visit_at">
+        <!-- <column name="remote_addr">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
+                <item name="config" xsi:type="array">
+                    <item name="label" xsi:type="string" translate="true">IP Address</item>
                 </item>
+            </argument>
+        </column> -->
+        <column name="first_visit_at">
+            <argument name="data" xsi:type="array">                
                 <item name="config" xsi:type="array">
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Session Start Time</item>
                 </item>
             </argument>
         </column>
         <column name="last_visit_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Last Activity</item>
                 </item>
             </argument>
         </column>
-        <column name="visitor_type" class="Magento\Customer\Ui\Component\Listing\Column\Online\Type">
+        <column name="visitor_type">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Online\Type\Options</item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Type</item>
                 </item>
             </argument>
         </column>
-        <!--<column name="last_url">-->
-            <!--<argument name="data" xsi:type="array">-->
-                <!--<item name="js_config" xsi:type="array">-->
-                    <!--<item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>-->
-                <!--</item>-->
-                <!--<item name="config" xsi:type="array">-->
-                    <!--<item name="dataType" xsi:type="string">text</item>-->
-                    <!--<item name="align" xsi:type="string">left</item>-->
-                    <!--<item name="label" xsi:type="string" translate="true">Last URL</item>-->
-                <!--</item>-->
-            <!--</argument>-->
-        <!--</column>-->
+        <!-- <column name="last_url">
+            <argument name="data" xsi:type="array">
+                <item name="config" xsi:type="array">
+                    <item name="label" xsi:type="string" translate="true">Last URL</item>
+                </item>
+            </argument>
+        </column> -->
     </columns>
 </listing>
diff --git a/app/code/Magento/Customer/view/adminhtml/web/edit/post-wrapper.js b/app/code/Magento/Customer/view/adminhtml/web/edit/post-wrapper.js
new file mode 100644
index 0000000000000000000000000000000000000000..2b03bc3e304932194459573361fea61218b8ac39
--- /dev/null
+++ b/app/code/Magento/Customer/view/adminhtml/web/edit/post-wrapper.js
@@ -0,0 +1,47 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'jquery',
+    'Magento_Ui/js/modal/confirm',
+    'mage/translate'
+], function ($, confirm) {
+    'use strict';
+
+    /**
+     * @param {String} url
+     * @returns {Object}
+     */
+    function getForm(url) {
+        return $('<form>', {
+            'action': url,
+            'method': 'POST'
+        }).append($('<input>', {
+            'name': 'form_key',
+            'value': window.FORM_KEY,
+            'type': 'hidden'
+        }));
+    }
+
+    $('#customer-edit-delete-button').click(function () {
+        var msg = $.mage.__('Are you sure you want to do this?'),
+            url = $('#customer-edit-delete-button').data('url');
+
+        confirm({
+            'content': msg,
+            'actions': {
+
+                /**
+                 * 'Confirm' action handler.
+                 */
+                confirm: function () {
+                    getForm(url).appendTo('body').submit();
+                }
+            }
+        });
+
+        return false;
+    });
+});
diff --git a/app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js b/app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js
index 7067fbe2e153bed002acf81ced41a5daba3fefe0..cbaaafb86bcdf51b31d9f8f93e389f9c09ac346d 100644
--- a/app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js
+++ b/app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js
@@ -5,9 +5,10 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/confirm',
     'jquery/ui',
     'mage/backend/tabs'
-], function ($, mageTemplate) {
+], function ($, mageTemplate, confirm) {
     'use strict';
 
     $.widget('mage.addressTabs', $.mage.tabs, {
@@ -136,9 +137,16 @@ define([
          * @private
          */
         _deleteItemPrompt: function (event, data) {
-            if (window.confirm(this.options.deleteConfirmPrompt)) {
-                this._deleteItem(data.item);
-            }
+            var self = this;
+
+            confirm({
+                content: this.options.deleteConfirmPrompt,
+                actions: {
+                    confirm: function () {
+                        self._deleteItem(data.item);
+                    }
+                }
+            });
         },
 
         /**
diff --git a/setup/src/Magento/Setup/SampleDataException.php b/app/code/Magento/Customer/view/adminhtml/web/js/bootstrap/customer-post-action.js
similarity index 55%
rename from setup/src/Magento/Setup/SampleDataException.php
rename to app/code/Magento/Customer/view/adminhtml/web/js/bootstrap/customer-post-action.js
index 05337f2ab72a84c3ded343546ace82c41bcdf61e..d0d6ede875441331cb9c1c4f224fb0ad1338db5f 100644
--- a/setup/src/Magento/Setup/SampleDataException.php
+++ b/app/code/Magento/Customer/view/adminhtml/web/js/bootstrap/customer-post-action.js
@@ -1,11 +1,8 @@
-<?php
 /**
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Setup;
-
-class SampleDataException extends \Exception
-{
-}
+require([
+    'Magento_Customer/edit/post-wrapper'
+]);
diff --git a/app/code/Magento/Customer/view/base/ui_component/customer_form.xml b/app/code/Magento/Customer/view/base/ui_component/customer_form.xml
index b7646d9b11f48af4e8f40c5154be6897150f9877..0fa2ab59bcc75e9d49a6c72c7475adafefca3332 100644
--- a/app/code/Magento/Customer/view/base/ui_component/customer_form.xml
+++ b/app/code/Magento/Customer/view/base/ui_component/customer_form.xml
@@ -120,10 +120,8 @@
         <container name="container_group">
             <argument name="data" xsi:type="array">
                 <item name="type" xsi:type="string">group</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item>
                     <item name="label" xsi:type="string" translate="true">Group</item>
                     <item name="required" xsi:type="boolean">true</item>
                     <item name="dataScope" xsi:type="boolean">false</item>
@@ -351,10 +349,8 @@
         <container name="street_container">
             <argument name="data" xsi:type="array">
                 <item name="type" xsi:type="string">group</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/form/components/group</item>
                     <item name="label" xsi:type="string" translate="true">Street Address</item>
                     <item name="required" xsi:type="boolean">true</item>
                     <item name="dataScope" xsi:type="string">street</item>
diff --git a/app/code/Magento/Customer/view/frontend/layout/default.xml b/app/code/Magento/Customer/view/frontend/layout/default.xml
index ffc589dff636e27508f6d28e553b84ac9e88428f..8f6afa398a20ade932135811b5910d497e735dc0 100644
--- a/app/code/Magento/Customer/view/frontend/layout/default.xml
+++ b/app/code/Magento/Customer/view/frontend/layout/default.xml
@@ -20,6 +20,8 @@
             </block>
             <block class="Magento\Customer\Block\Account\AuthorizationLink" name="authorization-link"
                    template="account/link/authorization.phtml"/>
+        </referenceBlock>
+        <referenceContainer name="content">
             <block class="Magento\Customer\Block\Account\AuthenticationPopup" name="authentication-popup" as="authentication-popup" template="account/authentication-popup.phtml">
                 <arguments>
                     <argument name="jsLayout" xsi:type="array">
@@ -37,8 +39,6 @@
                     </argument>
                 </arguments>
             </block>
-        </referenceBlock>
-        <referenceContainer name="content">
             <block name="customer.section.config" class="Magento\Customer\Block\SectionConfig"
                    template="Magento_Customer::js/section-config.phtml"/>
             <block name="customer.customer.data"
diff --git a/app/code/Magento/Customer/view/frontend/templates/account/authentication-popup.phtml b/app/code/Magento/Customer/view/frontend/templates/account/authentication-popup.phtml
index c352b72105154647b65f7fb4a342c5d38df755bd..1a3cf33bff04ed46b081069c9a7d45181a49e8aa 100644
--- a/app/code/Magento/Customer/view/frontend/templates/account/authentication-popup.phtml
+++ b/app/code/Magento/Customer/view/frontend/templates/account/authentication-popup.phtml
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 ?>
-<li id="authenticationPopup" data-bind="scope:'authenticationPopup'">
+<div id="authenticationPopup" data-bind="scope:'authenticationPopup'" style="display: none;">
     <script>
         window.authenticationPopup = <?php /* @escapeNotVerified */ echo \Zend_Json::encode($block->getConfig()); ?>;
     </script>
@@ -21,4 +21,4 @@
             }
         }
     </script>
-</li>
+</div>
diff --git a/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml b/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
index 60441eb039d7267340a22e87e5d18e4dcbd2bb6c..b34e7c871d3bf455e5295f3c8f80226ded3b0c38 100644
--- a/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
+++ b/app/code/Magento/Customer/view/frontend/templates/js/customer-data.phtml
@@ -13,7 +13,6 @@
         '*' => ['Magento_Customer/js/customer-data' => [
             'sectionLoadUrl' => $block->getCustomerDataUrl('customer/section/load'),
             'cookieLifeTime' => $block->getCookieLifeTime(),
-            'nonCachedSections' => $block->getNonCachedSectionKeys(),
         ]],
     ]);
 ?>
diff --git a/app/code/Magento/Customer/view/frontend/web/address.js b/app/code/Magento/Customer/view/frontend/web/address.js
index 5a6ea1b6ee3e76127760dd8759bdd742b8b8ea2e..4ea88c7067b400500e22917c25ec5dc21084d6f5 100644
--- a/app/code/Magento/Customer/view/frontend/web/address.js
+++ b/app/code/Magento/Customer/view/frontend/web/address.js
@@ -6,9 +6,10 @@
 /*global confirm:true*/
 define([
     "jquery",
+    'Magento_Ui/js/modal/confirm',
     "jquery/ui",
     "mage/translate"
-], function($){
+], function($, confirm){
     "use strict";
     
     $.widget('mage.address', {
@@ -53,14 +54,22 @@ define([
          * @return {Boolean}
          */
         _deleteAddress: function(e) {
-            if (confirm(this.options.deleteConfirmMessage)) {
-                if (typeof $(e.target).parent().data('address') !== 'undefined') {
-                    window.location = this.options.deleteUrlPrefix + $(e.target).parent().data('address');
-                }
-                else {
-                    window.location = this.options.deleteUrlPrefix + $(e.target).data('address');
+            var self = this;
+
+            confirm({
+                content: this.options.deleteConfirmMessage,
+                actions: {
+                    confirm: function() {
+                        if (typeof $(e.target).parent().data('address') !== 'undefined') {
+                            window.location = self.options.deleteUrlPrefix + $(e.target).parent().data('address');
+                        }
+                        else {
+                            window.location = self.options.deleteUrlPrefix + $(e.target).data('address');
+                        }
+                    }
                 }
-            }
+            });
+
             return false;
         }
     });
diff --git a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
index 92de6ddcdbae908bcf8fdc353faac2898a2d3396..bfec0bf920246edbbacbeba286727b53d23b0c30 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/customer-data.js
@@ -23,8 +23,6 @@ define([
             storage.removeAll();
             var date = new Date(Date.now() + parseInt(options.cookieLifeTime, 10) * 1000);
             $.localStorage.set('mage-cache-timeout', date);
-        } else {
-            invalidateNonCachedSections(options);
         }
     };
 
@@ -35,12 +33,6 @@ define([
         }
     };
 
-    var invalidateNonCachedSections = function(options) {
-        _.each(options.nonCachedSections, function (sectionName) {
-            storageInvalidation.set(sectionName, true);
-        });
-    }
-
     var dataProvider = {
         getFromStorage: function (sectionNames) {
             var result = {};
@@ -115,6 +107,9 @@ define([
             if (_.isEmpty(storage.keys())) {
                 this.reload([], false);
             } else if (this.needReload()) {
+                _.each(dataProvider.getFromStorage(storage.keys()), function (sectionData, sectionName) {
+                    buffer.notify(sectionName, sectionData);
+                });
                 this.reload(this.getExpiredKeys(), false);
             } else {
                 _.each(dataProvider.getFromStorage(storage.keys()), function (sectionData, sectionName) {
@@ -170,7 +165,16 @@ define([
             });
         },
         invalidate: function (sectionNames) {
+            var sectionDataIds;
+
             buffer.remove(_.contains(sectionNames, '*') ? buffer.keys() : sectionNames);
+            sectionDataIds = $.cookieStorage.get('section_data_ids') || {};
+
+            // Invalidate section in cookie (increase version of section with 1000)
+            _.each(sectionNames, function (sectionName) {
+                sectionDataIds[sectionName] += 1000;
+            });
+            $.cookieStorage.set('section_data_ids', sectionDataIds);
         },
         'Magento_Customer/js/customer-data': function (settings) {
             options = settings;
@@ -182,21 +186,27 @@ define([
 
     /** Events listener **/
     $(document).on('ajaxComplete', function (event, xhr, settings) {
+        var sections,
+            redirects;
+
         if (settings.type.match(/post|put/i)) {
-            var sections = sectionConfig.getAffectedSections(settings.url);
+            sections = sectionConfig.getAffectedSections(settings.url);
             if (sections) {
                 customerData.invalidate(sections);
-                var redirects = ['redirect', 'backUrl'];
+                redirects = ['redirect', 'backUrl'];
+
                 if (_.isObject(xhr.responseJSON) && !_.isEmpty(_.pick(xhr.responseJSON, redirects))) {
-                    return ;
+                    return;
                 }
                 customerData.reload(sections, true);
             }
         }
     });
     $(document).on('submit', function (event) {
+        var sections;
+
         if (event.target.method.match(/post|put/i)) {
-            var sections = sectionConfig.getAffectedSections(event.target.action);
+            sections = sectionConfig.getAffectedSections(event.target.action);
             if (sections) {
                 customerData.invalidate(sections);
             }
diff --git a/app/code/Magento/Customer/view/frontend/web/js/view/authentication-popup.js b/app/code/Magento/Customer/view/frontend/web/js/view/authentication-popup.js
index 324b0711f6b0381c7d323d3b9f1f9d0c25cc1996..dffbc6c380eade6a17adfd1b7d26c01b9ba5bc46 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/view/authentication-popup.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/view/authentication-popup.js
@@ -14,9 +14,10 @@ define(
         'Magento_Customer/js/model/authentication-popup',
         'mage/translate',
         'mage/url',
+        'Magento_Ui/js/modal/alert',
         'mage/validation'
     ],
-    function($, ko, Component, loginAction, customerData, authenticationPopup, $t, url) {
+    function($, ko, Component, loginAction, customerData, authenticationPopup, $t, url, alert) {
         'use strict';
         return Component.extend({
             registerUrl: window.authenticationPopup.customerRegisterUrl,
@@ -55,7 +56,9 @@ define(
                 if (this.modalWindow) {
                     $(this.modalWindow).modal('openModal');
                 } else {
-                    alert($t('Guest checkout is disabled.'));
+                    alert({
+                        content: $t('Guest checkout is disabled.')
+                    });
                 }
             },
 
diff --git a/app/code/Magento/CustomerImportExport/Model/Export/Address.php b/app/code/Magento/CustomerImportExport/Model/Export/Address.php
index 539cca19721adf98332fa87cc8016900e762677c..cf229b06b9551cd0d1b3069d9ee5db1c56b7aa8a 100644
--- a/app/code/Magento/CustomerImportExport/Model/Export/Address.php
+++ b/app/code/Magento/CustomerImportExport/Model/Export/Address.php
@@ -36,7 +36,7 @@ class Address extends \Magento\ImportExport\Model\Export\Entity\AbstractEav
     /**#@+
      * Attribute collection name
      */
-    const ATTRIBUTE_COLLECTION_NAME = 'Magento\Customer\Model\Resource\Address\Attribute\Collection';
+    const ATTRIBUTE_COLLECTION_NAME = 'Magento\Customer\Model\ResourceModel\Address\Attribute\Collection';
 
     /**#@-*/
 
@@ -67,14 +67,14 @@ class Address extends \Magento\ImportExport\Model\Export\Entity\AbstractEav
     /**
      * Customers whose addresses are exported
      *
-     * @var \Magento\Customer\Model\Resource\Customer\Collection
+     * @var \Magento\Customer\Model\ResourceModel\Customer\Collection
      */
     protected $_customerCollection;
 
     /**
      * Customer addresses collection
      *
-     * @var \Magento\Customer\Model\Resource\Address\Collection
+     * @var \Magento\Customer\Model\ResourceModel\Address\Collection
      */
     protected $_addressCollection;
 
@@ -105,12 +105,12 @@ class Address extends \Magento\ImportExport\Model\Export\Entity\AbstractEav
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\ImportExport\Model\Export\Factory $collectionFactory
-     * @param \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $resourceColFactory
+     * @param \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $resourceColFactory
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Customer\Model\Resource\Customer\CollectionFactory $customerColFactory
+     * @param \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerColFactory
      * @param \Magento\CustomerImportExport\Model\Export\CustomerFactory $eavCustomerFactory
-     * @param \Magento\Customer\Model\Resource\Address\CollectionFactory $addressColFactory
+     * @param \Magento\Customer\Model\ResourceModel\Address\CollectionFactory $addressColFactory
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -118,12 +118,12 @@ class Address extends \Magento\ImportExport\Model\Export\Entity\AbstractEav
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\ImportExport\Model\Export\Factory $collectionFactory,
-        \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $resourceColFactory,
+        \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $resourceColFactory,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Customer\Model\Resource\Customer\CollectionFactory $customerColFactory,
+        \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerColFactory,
         \Magento\CustomerImportExport\Model\Export\CustomerFactory $eavCustomerFactory,
-        \Magento\Customer\Model\Resource\Address\CollectionFactory $addressColFactory,
+        \Magento\Customer\Model\ResourceModel\Address\CollectionFactory $addressColFactory,
         array $data = []
     ) {
         parent::__construct(
@@ -192,7 +192,7 @@ class Address extends \Magento\ImportExport\Model\Export\Entity\AbstractEav
     /**
      * Get customers collection
      *
-     * @return \Magento\Customer\Model\Resource\Address\Collection
+     * @return \Magento\Customer\Model\ResourceModel\Address\Collection
      */
     protected function _getEntityCollection()
     {
diff --git a/app/code/Magento/CustomerImportExport/Model/Export/Customer.php b/app/code/Magento/CustomerImportExport/Model/Export/Customer.php
index f611129b7aa9d60c3b84f460fc0030f13f3a0c5f..5edbb4385fc09d0d5c4fcbef41a2fc35b0ee8736 100644
--- a/app/code/Magento/CustomerImportExport/Model/Export/Customer.php
+++ b/app/code/Magento/CustomerImportExport/Model/Export/Customer.php
@@ -8,7 +8,7 @@ namespace Magento\CustomerImportExport\Model\Export;
 /**
  * Export entity customer model
  *
- * @method \Magento\Customer\Model\Resource\Attribute\Collection getAttributeCollection() getAttributeCollection()
+ * @method \Magento\Customer\Model\ResourceModel\Attribute\Collection getAttributeCollection() getAttributeCollection()
  */
 class Customer extends \Magento\ImportExport\Model\Export\Entity\AbstractEav
 {
@@ -29,7 +29,7 @@ class Customer extends \Magento\ImportExport\Model\Export\Entity\AbstractEav
     /**#@+
      * Attribute collection name
      */
-    const ATTRIBUTE_COLLECTION_NAME = 'Magento\Customer\Model\Resource\Attribute\Collection';
+    const ATTRIBUTE_COLLECTION_NAME = 'Magento\Customer\Model\ResourceModel\Attribute\Collection';
 
     /**#@-*/
 
@@ -75,7 +75,7 @@ class Customer extends \Magento\ImportExport\Model\Export\Entity\AbstractEav
     /**
      * Customers whose data is exported
      *
-     * @var \Magento\Customer\Model\Resource\Customer\Collection
+     * @var \Magento\Customer\Model\ResourceModel\Customer\Collection
      */
     protected $_customerCollection;
 
@@ -83,20 +83,20 @@ class Customer extends \Magento\ImportExport\Model\Export\Entity\AbstractEav
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\ImportExport\Model\Export\Factory $collectionFactory
-     * @param \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $resourceColFactory
+     * @param \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $resourceColFactory
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Customer\Model\Resource\Customer\CollectionFactory $customerColFactory
+     * @param \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerColFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\ImportExport\Model\Export\Factory $collectionFactory,
-        \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $resourceColFactory,
+        \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $resourceColFactory,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Customer\Model\Resource\Customer\CollectionFactory $customerColFactory,
+        \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerColFactory,
         array $data = []
     ) {
         parent::__construct(
@@ -136,7 +136,7 @@ class Customer extends \Magento\ImportExport\Model\Export\Entity\AbstractEav
     /**
      * Get customers collection
      *
-     * @return \Magento\Customer\Model\Resource\Customer\Collection
+     * @return \Magento\Customer\Model\ResourceModel\Customer\Collection
      */
     protected function _getEntityCollection()
     {
diff --git a/app/code/Magento/CustomerImportExport/Model/Import/AbstractCustomer.php b/app/code/Magento/CustomerImportExport/Model/Import/AbstractCustomer.php
index 87b29e5e6867e1958a2afa40635a298f56b4b675..762b7db001546b25500efbf5043633439b07b59e 100644
--- a/app/code/Magento/CustomerImportExport/Model/Import/AbstractCustomer.php
+++ b/app/code/Magento/CustomerImportExport/Model/Import/AbstractCustomer.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\CustomerImportExport\Model\Import;
 
-use Magento\CustomerImportExport\Model\Resource\Import\Customer\Storage;
+use Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\Storage;
 use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface;
 
 /**
@@ -66,7 +66,7 @@ abstract class AbstractCustomer extends \Magento\ImportExport\Model\Import\Entit
     protected $_customerStorage;
 
     /**
-     * @var \Magento\CustomerImportExport\Model\Resource\Import\Customer\StorageFactory
+     * @var \Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\StorageFactory
      */
     protected $_storageFactory;
 
@@ -86,13 +86,13 @@ abstract class AbstractCustomer extends \Magento\ImportExport\Model\Import\Entit
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\ImportExport\Model\ImportFactory $importFactory
-     * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param ProcessingErrorAggregatorInterface $errorAggregator
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\ImportExport\Model\Export\Factory $collectionFactory
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\CustomerImportExport\Model\Resource\Import\Customer\StorageFactory $storageFactory
+     * @param \Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\StorageFactory $storageFactory
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -100,13 +100,13 @@ abstract class AbstractCustomer extends \Magento\ImportExport\Model\Import\Entit
         \Magento\Framework\Stdlib\StringUtils $string,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\ImportExport\Model\ImportFactory $importFactory,
-        \Magento\ImportExport\Model\Resource\Helper $resourceHelper,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper,
+        \Magento\Framework\App\ResourceConnection $resource,
         ProcessingErrorAggregatorInterface $errorAggregator,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\ImportExport\Model\Export\Factory $collectionFactory,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\CustomerImportExport\Model\Resource\Import\Customer\StorageFactory $storageFactory,
+        \Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\StorageFactory $storageFactory,
         array $data = []
     ) {
         $this->_storageFactory = $storageFactory;
diff --git a/app/code/Magento/CustomerImportExport/Model/Import/Address.php b/app/code/Magento/CustomerImportExport/Model/Import/Address.php
index 712e13fd0268d1d69de16b3ae3fabbceb3efabc6..d34262c4855cb5cb90251701b60ec3ff974ada09 100644
--- a/app/code/Magento/CustomerImportExport/Model/Import/Address.php
+++ b/app/code/Magento/CustomerImportExport/Model/Import/Address.php
@@ -16,7 +16,7 @@ class Address extends AbstractCustomer
     /**#@+
      * Attribute collection name
      */
-    const ATTRIBUTE_COLLECTION_NAME = 'Magento\Customer\Model\Resource\Address\Attribute\Collection';
+    const ATTRIBUTE_COLLECTION_NAME = 'Magento\Customer\Model\ResourceModel\Address\Attribute\Collection';
 
     /**#@-*/
 
@@ -171,14 +171,14 @@ class Address extends AbstractCustomer
     /**
      * Address attributes collection
      *
-     * @var \Magento\Customer\Model\Resource\Address\Attribute\Collection
+     * @var \Magento\Customer\Model\ResourceModel\Address\Attribute\Collection
      */
     protected $_attributeCollection;
 
     /**
      * Collection of existent addresses
      *
-     * @var \Magento\Customer\Model\Resource\Address\Collection
+     * @var \Magento\Customer\Model\ResourceModel\Address\Collection
      */
     protected $_addressCollection;
 
@@ -190,7 +190,7 @@ class Address extends AbstractCustomer
     protected $_importedRowPks = [];
 
     /**
-     * @var \Magento\ImportExport\Model\Resource\Helper
+     * @var \Magento\ImportExport\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
@@ -234,18 +234,18 @@ class Address extends AbstractCustomer
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\ImportExport\Model\ImportFactory $importFactory
-     * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param ProcessingErrorAggregatorInterface $errorAggregator
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\ImportExport\Model\Export\Factory $collectionFactory
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\CustomerImportExport\Model\Resource\Import\Customer\StorageFactory $storageFactory
+     * @param \Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\StorageFactory $storageFactory
      * @param \Magento\Customer\Model\AddressFactory $addressFactory
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionColFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionColFactory
      * @param \Magento\Customer\Model\CustomerFactory $customerFactory
-     * @param \Magento\Customer\Model\Resource\Address\CollectionFactory $addressColFactory
-     * @param \Magento\Customer\Model\Resource\Address\Attribute\CollectionFactory $attributesFactory
+     * @param \Magento\Customer\Model\ResourceModel\Address\CollectionFactory $addressColFactory
+     * @param \Magento\Customer\Model\ResourceModel\Address\Attribute\CollectionFactory $attributesFactory
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param array $data
      * @SuppressWarnings(PHPMD.NPathComplexity)
@@ -255,18 +255,18 @@ class Address extends AbstractCustomer
         \Magento\Framework\Stdlib\StringUtils $string,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\ImportExport\Model\ImportFactory $importFactory,
-        \Magento\ImportExport\Model\Resource\Helper $resourceHelper,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper,
+        \Magento\Framework\App\ResourceConnection $resource,
         ProcessingErrorAggregatorInterface $errorAggregator,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\ImportExport\Model\Export\Factory $collectionFactory,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\CustomerImportExport\Model\Resource\Import\Customer\StorageFactory $storageFactory,
+        \Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\StorageFactory $storageFactory,
         \Magento\Customer\Model\AddressFactory $addressFactory,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionColFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionColFactory,
         \Magento\Customer\Model\CustomerFactory $customerFactory,
-        \Magento\Customer\Model\Resource\Address\CollectionFactory $addressColFactory,
-        \Magento\Customer\Model\Resource\Address\Attribute\CollectionFactory $attributesFactory,
+        \Magento\Customer\Model\ResourceModel\Address\CollectionFactory $addressColFactory,
+        \Magento\Customer\Model\ResourceModel\Address\Attribute\CollectionFactory $attributesFactory,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         array $data = []
     ) {
@@ -277,7 +277,7 @@ class Address extends AbstractCustomer
         $this->dateTime = $dateTime;
 
         if (!isset($data['attribute_collection'])) {
-            /** @var $attributeCollection \Magento\Customer\Model\Resource\Address\Attribute\Collection */
+            /** @var $attributeCollection \Magento\Customer\Model\ResourceModel\Address\Attribute\Collection */
             $attributeCollection = $attributesFactory->create();
             $attributeCollection->addSystemHiddenFilter()->addExcludeHiddenFrontendFilter();
             $data['attribute_collection'] = $attributeCollection;
@@ -342,7 +342,7 @@ class Address extends AbstractCustomer
     protected function _getNextEntityId()
     {
         if (!$this->_nextEntityId) {
-            /** @var $addressResource \Magento\Customer\Model\Resource\Address */
+            /** @var $addressResource \Magento\Customer\Model\ResourceModel\Address */
             $addressResource = $this->_addressFactory->create()->getResource();
             $addressTable = $addressResource->getEntityTable();
             $this->_nextEntityId = $this->_resourceHelper->getNextAutoincrement($addressTable);
diff --git a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
index f980fb1eaca3e45e18bdc161c3b64be7c1761ff9..6cf06f839c175efd29b42a98d63b1ecf8f959b82 100644
--- a/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
+++ b/app/code/Magento/CustomerImportExport/Model/Import/Customer.php
@@ -15,7 +15,7 @@ class Customer extends AbstractCustomer
     /**
      * Attribute collection name
      */
-    const ATTRIBUTE_COLLECTION_NAME = 'Magento\Customer\Model\Resource\Attribute\Collection';
+    const ATTRIBUTE_COLLECTION_NAME = 'Magento\Customer\Model\ResourceModel\Attribute\Collection';
 
     /**#@+
      * Permanent column names
@@ -107,12 +107,12 @@ class Customer extends AbstractCustomer
     /**
      * Address attributes collection
      *
-     * @var \Magento\Customer\Model\Resource\Attribute\Collection
+     * @var \Magento\Customer\Model\ResourceModel\Attribute\Collection
      */
     protected $_attributeCollection;
 
     /**
-     * @var \Magento\ImportExport\Model\Resource\Helper
+     * @var \Magento\ImportExport\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
@@ -159,14 +159,14 @@ class Customer extends AbstractCustomer
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\ImportExport\Model\ImportFactory $importFactory
-     * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param ProcessingErrorAggregatorInterface $errorAggregator
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\ImportExport\Model\Export\Factory $collectionFactory
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\CustomerImportExport\Model\Resource\Import\Customer\StorageFactory $storageFactory
-     * @param \Magento\Customer\Model\Resource\Attribute\CollectionFactory $attrCollectionFactory
+     * @param \Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\StorageFactory $storageFactory
+     * @param \Magento\Customer\Model\ResourceModel\Attribute\CollectionFactory $attrCollectionFactory
      * @param \Magento\Customer\Model\CustomerFactory $customerFactory
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -175,14 +175,14 @@ class Customer extends AbstractCustomer
         \Magento\Framework\Stdlib\StringUtils $string,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\ImportExport\Model\ImportFactory $importFactory,
-        \Magento\ImportExport\Model\Resource\Helper $resourceHelper,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper,
+        \Magento\Framework\App\ResourceConnection $resource,
         ProcessingErrorAggregatorInterface $errorAggregator,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\ImportExport\Model\Export\Factory $collectionFactory,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\CustomerImportExport\Model\Resource\Import\Customer\StorageFactory $storageFactory,
-        \Magento\Customer\Model\Resource\Attribute\CollectionFactory $attrCollectionFactory,
+        \Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\StorageFactory $storageFactory,
+        \Magento\Customer\Model\ResourceModel\Attribute\CollectionFactory $attrCollectionFactory,
         \Magento\Customer\Model\CustomerFactory $customerFactory,
         array $data = []
     ) {
@@ -243,7 +243,7 @@ class Customer extends AbstractCustomer
         );
 
         $this->_customerModel = $customerFactory->create();
-        /** @var $customerResource \Magento\Customer\Model\Resource\Customer */
+        /** @var $customerResource \Magento\Customer\Model\ResourceModel\Customer */
         $customerResource = $this->_customerModel->getResource();
         $this->_entityTable = $customerResource->getEntityTable();
     }
diff --git a/app/code/Magento/CustomerImportExport/Model/Import/CustomerComposite.php b/app/code/Magento/CustomerImportExport/Model/Import/CustomerComposite.php
index cd9e70e7fe225cc6e1a683234822c77ce7cef4fd..ed7d2f8fe9e85b92ffaf8da22c75b85fb9ffa7b2 100644
--- a/app/code/Magento/CustomerImportExport/Model/Import/CustomerComposite.php
+++ b/app/code/Magento/CustomerImportExport/Model/Import/CustomerComposite.php
@@ -121,7 +121,7 @@ class CustomerComposite extends \Magento\ImportExport\Model\Import\AbstractEntit
     /**
      * DB data source models
      *
-     * @var \Magento\ImportExport\Model\Resource\Import\Data[]
+     * @var \Magento\ImportExport\Model\ResourceModel\Import\Data[]
      */
     protected $_dataSourceModels;
 
@@ -152,10 +152,10 @@ class CustomerComposite extends \Magento\ImportExport\Model\Import\AbstractEntit
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\ImportExport\Model\ImportFactory $importFactory
-     * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param ProcessingErrorAggregatorInterface $errorAggregator
-     * @param \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\DataFactory $dataFactory
+     * @param \Magento\CustomerImportExport\Model\ResourceModel\Import\CustomerComposite\DataFactory $dataFactory
      * @param \Magento\CustomerImportExport\Model\Import\CustomerFactory $customerFactory
      * @param \Magento\CustomerImportExport\Model\Import\AddressFactory $addressFactory
      * @param array $data
@@ -167,10 +167,10 @@ class CustomerComposite extends \Magento\ImportExport\Model\Import\AbstractEntit
         \Magento\Framework\Stdlib\StringUtils $string,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\ImportExport\Model\ImportFactory $importFactory,
-        \Magento\ImportExport\Model\Resource\Helper $resourceHelper,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper,
+        \Magento\Framework\App\ResourceConnection $resource,
         ProcessingErrorAggregatorInterface $errorAggregator,
-        \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\DataFactory $dataFactory,
+        \Magento\CustomerImportExport\Model\ResourceModel\Import\CustomerComposite\DataFactory $dataFactory,
         \Magento\CustomerImportExport\Model\Import\CustomerFactory $customerFactory,
         \Magento\CustomerImportExport\Model\Import\AddressFactory $addressFactory,
         array $data = []
diff --git a/app/code/Magento/CustomerImportExport/Model/Resource/Import/Customer/Storage.php b/app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/Customer/Storage.php
similarity index 82%
rename from app/code/Magento/CustomerImportExport/Model/Resource/Import/Customer/Storage.php
rename to app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/Customer/Storage.php
index 0d79a11cacb74e8e5e8a03d4bb13d3ff1adba8dc..fbc30a49b794f9c145b38a0b61ca40e2f1716dc6 100644
--- a/app/code/Magento/CustomerImportExport/Model/Resource/Import/Customer/Storage.php
+++ b/app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/Customer/Storage.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CustomerImportExport\Model\Resource\Import\Customer;
+namespace Magento\CustomerImportExport\Model\ResourceModel\Import\Customer;
 
 class Storage
 {
@@ -17,7 +17,7 @@ class Storage
     /**
      * Customer collection
      *
-     * @var \Magento\Customer\Model\Resource\Customer\Collection
+     * @var \Magento\Customer\Model\ResourceModel\Customer\Collection
      */
     protected $_customerCollection;
 
@@ -45,18 +45,18 @@ class Storage
     /**
      * Collection by pages iterator
      *
-     * @var \Magento\ImportExport\Model\Resource\CollectionByPagesIterator
+     * @var \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIterator
      */
     protected $_byPagesIterator;
 
     /**
-     * @param \Magento\Customer\Model\Resource\Customer\CollectionFactory $collectionFactory
-     * @param \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $colIteratorFactory
+     * @param \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $collectionFactory
+     * @param \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $colIteratorFactory
      * @param array $data
      */
     public function __construct(
-        \Magento\Customer\Model\Resource\Customer\CollectionFactory $collectionFactory,
-        \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $colIteratorFactory,
+        \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $collectionFactory,
+        \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $colIteratorFactory,
         array $data = []
     ) {
         $this->_customerCollection = isset(
diff --git a/app/code/Magento/CustomerImportExport/Model/Resource/Import/CustomerComposite/Data.php b/app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/CustomerComposite/Data.php
similarity index 91%
rename from app/code/Magento/CustomerImportExport/Model/Resource/Import/CustomerComposite/Data.php
rename to app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/CustomerComposite/Data.php
index 98de3b1280b66322e08a57f6963eed807ba5045c..c1df86ca09f903344b9f2a058b42df85fcd030ce 100644
--- a/app/code/Magento/CustomerImportExport/Model/Resource/Import/CustomerComposite/Data.php
+++ b/app/code/Magento/CustomerImportExport/Model/ResourceModel/Import/CustomerComposite/Data.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite;
+namespace Magento\CustomerImportExport\Model\ResourceModel\Import\CustomerComposite;
 
 use Magento\CustomerImportExport\Model\Import\CustomerComposite;
 
-class Data extends \Magento\ImportExport\Model\Resource\Import\Data
+class Data extends \Magento\ImportExport\Model\ResourceModel\Import\Data
 {
     /**
      * Entity type
@@ -26,13 +26,13 @@ class Data extends \Magento\ImportExport\Model\Resource\Import\Data
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Json\Helper\Data $coreHelper
      * @param string $connectionName
      * @param array $arguments
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         $connectionName = null,
         array $arguments = []
diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/AddressTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/AddressTest.php
index ba9d067a69e19dbae661609ed6452ded047bf174..8525b9d21793d6856d94a2781d1a0a92752b2dae 100644
--- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/AddressTest.php
+++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/AddressTest.php
@@ -81,7 +81,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             $storeManager,
             $this->getMock('Magento\ImportExport\Model\Export\Factory', [], [], '', false),
             $this->getMock(
-                'Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory',
+                'Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory',
                 [],
                 [],
                 '',
@@ -89,7 +89,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             ),
             $this->getMock('Magento\Framework\Stdlib\DateTime\TimezoneInterface', [], [], '', false),
             $this->getMock('Magento\Eav\Model\Config', [], [], '', false),
-            $this->getMock('Magento\Customer\Model\Resource\Customer\CollectionFactory', [], [], '', false),
+            $this->getMock('Magento\Customer\Model\ResourceModel\Customer\CollectionFactory', [], [], '', false),
             $this->getMock(
                 'Magento\CustomerImportExport\Model\Export\CustomerFactory',
                 [],
@@ -97,7 +97,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
                 '',
                 false
             ),
-            $this->getMock('Magento\Customer\Model\Resource\Address\CollectionFactory', [], [], '', false),
+            $this->getMock('Magento\Customer\Model\ResourceModel\Address\CollectionFactory', [], [], '', false),
             $this->_getModelDependencies()
         );
     }
@@ -217,7 +217,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     public function iterate(\Magento\Framework\Data\Collection\AbstractDb $collection, $pageSize, array $callbacks)
     {
         $resource = $this->getMock(
-            'Magento\Customer\Model\Resource\Customer',
+            'Magento\Customer\Model\ResourceModel\Customer',
             ['getIdFieldName'],
             [],
             '',
@@ -229,7 +229,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             'resource' => $resource,
             $this->getMock('Magento\Customer\Model\Config\Share', [], [], '', false),
             $this->getMock('Magento\Customer\Model\AddressFactory', [], [], '', false),
-            $this->getMock('Magento\Customer\Model\Resource\Address\CollectionFactory', [], [], '', false),
+            $this->getMock('Magento\Customer\Model\ResourceModel\Address\CollectionFactory', [], [], '', false),
             $this->getMock('Magento\Customer\Model\GroupFactory', [], [], '', false),
             $this->getMock('Magento\Customer\Model\AttributeFactory', [], [], '', false),
         ];
diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/CustomerTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/CustomerTest.php
index 89bd751e83a9ee57bc6ecdc135f63f7785f2fc94..558ab602233234cd2e1fcb8d44a8225d2382c6c7 100644
--- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/CustomerTest.php
+++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Export/CustomerTest.php
@@ -76,7 +76,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
             $storeManager,
             $this->getMock('Magento\ImportExport\Model\Export\Factory', [], [], '', false),
             $this->getMock(
-                'Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory',
+                'Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory',
                 [],
                 [],
                 '',
@@ -84,7 +84,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
             ),
             $this->getMock('Magento\Framework\Stdlib\DateTime\TimezoneInterface', [], [], '', false),
             $this->getMock('Magento\Eav\Model\Config', [], [], '', false),
-            $this->getMock('Magento\Customer\Model\Resource\Customer\CollectionFactory', [], [], '', false),
+            $this->getMock('Magento\Customer\Model\ResourceModel\Customer\CollectionFactory', [], [], '', false),
             $this->_getModelDependencies()
         );
     }
diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/AddressTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/AddressTest.php
index 5aa8f1c34cb0509f1efe0f419ed533de9225db03..76569a498a622afe61b96c43f78f267382537417 100644
--- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/AddressTest.php
+++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/AddressTest.php
@@ -209,7 +209,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
                     $this->getMock('Magento\Eav\Model\Config', [], [], '', false, false),
                     $this->getMock('Magento\Eav\Model\Entity\TypeFactory', [], [], '', false),
                     $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false, false),
-                    $this->getMock('Magento\Eav\Model\Resource\Helper', [], [], '', false, false),
+                    $this->getMock('Magento\Eav\Model\ResourceModel\Helper', [], [], '', false, false),
                     $this->getMock('Magento\Framework\Validator\UniversalFactory', [], [], '', false, false)
                 ]
             );
@@ -238,14 +238,14 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     protected function _createCustomerStorageMock()
     {
         $customerStorage = $this->getMock(
-            'Magento\CustomerImportExport\Model\Resource\Import\Customer\Storage',
+            'Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\Storage',
             ['load'],
             [],
             '',
             false
         );
         $resourceMock = $this->getMock(
-            'Magento\Customer\Model\Resource\Customer',
+            'Magento\Customer\Model\ResourceModel\Customer',
             ['getIdFieldName'],
             [],
             '',
@@ -259,7 +259,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
                 $this->getMock('Magento\Customer\Model\Config\Share', [], [], '', false),
                 $this->getMock('Magento\Customer\Model\AddressFactory', [], [], '', false),
                 $this->getMock(
-                    'Magento\Customer\Model\Resource\Address\CollectionFactory',
+                    'Magento\Customer\Model\ResourceModel\Address\CollectionFactory',
                     [],
                     [],
                     '',
@@ -380,7 +380,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
 
         // mock to imitate data source model
         $dataSourceMock = $this->getMock(
-            'Magento\ImportExport\Model\Resource\Import\Data',
+            'Magento\ImportExport\Model\ResourceModel\Import\Data',
             ['getNextBunch', '__wakeup'],
             [],
             '',
@@ -441,8 +441,8 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             $this->_stringLib,
             $scopeConfig,
             $this->getMock('Magento\ImportExport\Model\ImportFactory', [], [], '', false),
-            $this->getMock('Magento\ImportExport\Model\Resource\Helper', [], [], '', false),
-            $this->getMock('Magento\Framework\App\Resource', [], [], '', false),
+            $this->getMock('Magento\ImportExport\Model\ResourceModel\Helper', [], [], '', false),
+            $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false),
             $this->getMock(
                 'Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface',
                 [],
@@ -454,17 +454,23 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             $this->getMock('Magento\ImportExport\Model\Export\Factory', [], [], '', false),
             $this->getMock('Magento\Eav\Model\Config', [], [], '', false),
             $this->getMock(
-                'Magento\CustomerImportExport\Model\Resource\Import\Customer\StorageFactory',
+                'Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\StorageFactory',
                 [],
                 [],
                 '',
                 false
             ),
             $this->getMock('Magento\Customer\Model\AddressFactory', [], [], '', false),
-            $this->getMock('Magento\Directory\Model\Resource\Region\CollectionFactory', [], [], '', false),
+            $this->getMock('Magento\Directory\Model\ResourceModel\Region\CollectionFactory', [], [], '', false),
             $this->getMock('Magento\Customer\Model\CustomerFactory', [], [], '', false),
-            $this->getMock('Magento\Customer\Model\Resource\Address\CollectionFactory', [], [], '', false),
-            $this->getMock('Magento\Customer\Model\Resource\Address\Attribute\CollectionFactory', [], [], '', false),
+            $this->getMock('Magento\Customer\Model\ResourceModel\Address\CollectionFactory', [], [], '', false),
+            $this->getMock(
+                'Magento\Customer\Model\ResourceModel\Address\Attribute\CollectionFactory',
+                [],
+                [],
+                '',
+                false
+            ),
             new \Magento\Framework\Stdlib\DateTime(),
             $this->_getModelDependencies()
         );
diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/CustomerCompositeTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/CustomerCompositeTest.php
index a66a1bb84af1d4583176550bedf161f3eba6fc44..c24fcb08c765888106191427f26b699c8942251e 100644
--- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/CustomerCompositeTest.php
+++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/CustomerCompositeTest.php
@@ -44,17 +44,17 @@ class CustomerCompositeTest extends \PHPUnit_Framework_TestCase
     protected $_importFactory;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
     /**
-     * @var \Magento\ImportExport\Model\Resource\Helper
+     * @var \Magento\ImportExport\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
     /**
-     * @var \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\DataFactory
+     * @var \Magento\CustomerImportExport\Model\ResourceModel\Import\CustomerComposite\DataFactory
      */
     protected $_dataFactory;
 
@@ -138,16 +138,16 @@ class CustomerCompositeTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->_resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->_resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->_resourceHelper = $this->getMock(
-            'Magento\ImportExport\Model\Resource\Helper',
+            'Magento\ImportExport\Model\ResourceModel\Helper',
             [],
             [],
             '',
             false
         );
         $this->_dataFactory = $this->getMock(
-            'Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\DataFactory',
+            'Magento\CustomerImportExport\Model\ResourceModel\Import\CustomerComposite\DataFactory',
             [],
             [],
             '',
@@ -665,7 +665,7 @@ class CustomerCompositeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * Callback for \Magento\ImportExport\Model\Resource\Import\Data::saveBunch to verify correctness of data
+     * Callback for \Magento\ImportExport\Model\ResourceModel\Import\Data::saveBunch to verify correctness of data
      * for method CustomerComposite::_prepareRowForDb
      *
      * @param string $entityType
diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/CustomerTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/CustomerTest.php
index d59e5cc96dc35fc0a33148ebc7ddb92bfdf4cf52..41affb06864f293bc97524082e02fb20692afab3 100644
--- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/CustomerTest.php
+++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/Import/CustomerTest.php
@@ -108,7 +108,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
         $availableBehaviors->setValue($modelMock, $this->_availableBehaviors);
 
         // mock to imitate data source model
-        $dataSourceModelMock = $this->getMockBuilder('Magento\ImportExport\Model\Resource\Import\Data')
+        $dataSourceModelMock = $this->getMockBuilder('Magento\ImportExport\Model\ResourceModel\Import\Data')
             ->disableOriginalConstructor()
             ->setMethods([
                     'getNextBunch',
diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Resource/Import/Customer/StorageTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/Customer/StorageTest.php
similarity index 92%
rename from app/code/Magento/CustomerImportExport/Test/Unit/Model/Resource/Import/Customer/StorageTest.php
rename to app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/Customer/StorageTest.php
index f74e35e22f5f8787bb319622c9b23ca06d1221a4..5c2bba03d6437dedd96d846ac7f539479f93dbba 100644
--- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Resource/Import/Customer/StorageTest.php
+++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/Customer/StorageTest.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\CustomerImportExport\Test\Unit\Model\Resource\Import\Customer;
+namespace Magento\CustomerImportExport\Test\Unit\Model\ResourceModel\Import\Customer;
 
-use Magento\CustomerImportExport\Model\Resource\Import\Customer\Storage;
+use Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\Storage;
 
 class StorageTest extends \PHPUnit_Framework_TestCase
 {
@@ -26,11 +26,11 @@ class StorageTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_model = new \Magento\CustomerImportExport\Model\Resource\Import\Customer\Storage(
-            $this->getMockBuilder('Magento\Customer\Model\Resource\Customer\CollectionFactory')
+        $this->_model = new \Magento\CustomerImportExport\Model\ResourceModel\Import\Customer\Storage(
+            $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer\CollectionFactory')
                 ->disableOriginalConstructor()
                 ->getMock(),
-            $this->getMockBuilder('Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory')
+            $this->getMockBuilder('Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory')
                 ->disableOriginalConstructor()
                 ->getMock(),
             $this->_getModelDependencies()
@@ -55,7 +55,7 @@ class StorageTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['from'])
             ->getMock();
         $select->expects($this->any())->method('from')->will($this->returnCallback([$this, 'validateFrom']));
-        $customerCollection = $this->getMockBuilder('Magento\Customer\Model\Resource\Customer\Collection')
+        $customerCollection = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['load', 'removeAttributeToSelect', 'getResource', 'getSelect'])
             ->getMock();
diff --git a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Resource/Import/CustomerComposite/DataTest.php b/app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/CustomerComposite/DataTest.php
similarity index 92%
rename from app/code/Magento/CustomerImportExport/Test/Unit/Model/Resource/Import/CustomerComposite/DataTest.php
rename to app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/CustomerComposite/DataTest.php
index e25e98c0c80b2eff3bb9d977c0912bafe6964db4..d68c554241d3f7ad830fdf74f79e5acc5cd9f05b 100644
--- a/app/code/Magento/CustomerImportExport/Test/Unit/Model/Resource/Import/CustomerComposite/DataTest.php
+++ b/app/code/Magento/CustomerImportExport/Test/Unit/Model/ResourceModel/Import/CustomerComposite/DataTest.php
@@ -5,9 +5,9 @@
  */
 
 /**
- * Test class for \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\Data
+ * Test class for \Magento\CustomerImportExport\Model\ResourceModel\Import\CustomerComposite\Data
  */
-namespace Magento\CustomerImportExport\Test\Unit\Model\Resource\Import\CustomerComposite;
+namespace Magento\CustomerImportExport\Test\Unit\Model\ResourceModel\Import\CustomerComposite;
 
 use Magento\CustomerImportExport\Model\Import\Address;
 use Magento\CustomerImportExport\Model\Import\CustomerComposite;
@@ -62,9 +62,9 @@ class DataTest extends \PHPUnit_Framework_TestCase
         $connectionMock->expects($this->any())->method('select')->will($this->returnValue($selectMock));
         $connectionMock->expects($this->any())->method('query')->will($this->returnValue($statementMock));
 
-        /** @var $resourceModelMock \Magento\Framework\App\Resource */
+        /** @var $resourceModelMock \Magento\Framework\App\ResourceConnection */
         $resourceModelMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -82,9 +82,9 @@ class DataTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\Data::getNextBunch
-     * @covers \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\Data::_prepareRow
-     * @covers \Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\Data::_prepareAddressRowData
+     * @covers \Magento\CustomerImportExport\Model\ResourceModel\Import\CustomerComposite\Data::getNextBunch
+     * @covers \Magento\CustomerImportExport\Model\ResourceModel\Import\CustomerComposite\Data::_prepareRow
+     * @covers \Magento\CustomerImportExport\Model\ResourceModel\Import\CustomerComposite\Data::_prepareAddressRowData
      *
      * @dataProvider getNextBunchDataProvider
      * @param string $entityType
@@ -111,12 +111,12 @@ class DataTest extends \PHPUnit_Framework_TestCase
         );
         unset($dependencies['resource'], $dependencies['json_helper']);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($resource);
 
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $object = $objectManager->getObject(
-            '\Magento\CustomerImportExport\Model\Resource\Import\CustomerComposite\Data',
+            '\Magento\CustomerImportExport\Model\ResourceModel\Import\CustomerComposite\Data',
             [
                 'context' => $contextMock,
                 'jsonHelper' => $jsonHelper,
diff --git a/app/code/Magento/CustomerImportExport/etc/import.xml b/app/code/Magento/CustomerImportExport/etc/import.xml
index 8a0fa98d2b2053c664fb771ebbf04fdefc53341a..5c625b53804b22c0ffb36eede408321c6164dabd 100644
--- a/app/code/Magento/CustomerImportExport/etc/import.xml
+++ b/app/code/Magento/CustomerImportExport/etc/import.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_ImportExport:etc/import.xsd">
-    <entity name="customer_composite" label="Customers" model="Magento\CustomerImportExport\Model\Import\CustomerComposite" behaviorModel="Magento\ImportExport\Model\Source\Import\Behavior\Basic" />
+    <entity name="customer_composite" label="Customers and Addresses (single file)" model="Magento\CustomerImportExport\Model\Import\CustomerComposite" behaviorModel="Magento\ImportExport\Model\Source\Import\Behavior\Basic" />
     <entity name="customer" label="Customers Main File" model="Magento\CustomerImportExport\Model\Import\Customer" behaviorModel="Magento\ImportExport\Model\Source\Import\Behavior\Custom" />
     <entity name="customer_address" label="Customer Addresses" model="Magento\CustomerImportExport\Model\Import\Address" behaviorModel="Magento\ImportExport\Model\Source\Import\Behavior\Custom" />
 </config>
diff --git a/app/code/Magento/Deploy/Console/Command/SetModeCommand.php b/app/code/Magento/Deploy/Console/Command/SetModeCommand.php
index 0d6e790c593cce729f7c231cfa021e4eeba50f1a..c258c2b811926005ebb1a156f15fa11be5e34ba1 100644
--- a/app/code/Magento/Deploy/Console/Command/SetModeCommand.php
+++ b/app/code/Magento/Deploy/Console/Command/SetModeCommand.php
@@ -52,7 +52,7 @@ class SetModeCommand extends Command
      */
     protected function configure()
     {
-        $description = 'Displays current application mode.';
+        $description = 'Set application mode.';
 
         $this->setName('deploy:mode:set')
             ->setDescription($description)
diff --git a/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php b/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php
index 234d2e6707f0b82287f4b6f7abc455eb508e6eea..531e4fc64c3907c591edcc5a1256dc392cec6b4b 100644
--- a/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php
+++ b/app/code/Magento/Developer/Model/Config/Backend/AllowedIps.php
@@ -32,7 +32,7 @@ class AllowedIps extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Message\ManagerInterface $messageManager
      * @param \Magento\Framework\Escaper $escaper
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -42,7 +42,7 @@ class AllowedIps extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Message\ManagerInterface $messageManager,
         \Magento\Framework\Escaper $escaper,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Directory/Block/Data.php b/app/code/Magento/Directory/Block/Data.php
index 08242cb6e25dc0fb494970fef8839820e4b26dec..aaab4c44fde45126245c8d2048784da6651a500c 100644
--- a/app/code/Magento/Directory/Block/Data.php
+++ b/app/code/Magento/Directory/Block/Data.php
@@ -13,12 +13,12 @@ class Data extends \Magento\Framework\View\Element\Template
     protected $_configCacheType;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Region\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory
      */
     protected $_regionCollectionFactory;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Country\CollectionFactory
      */
     protected $_countryCollectionFactory;
 
@@ -37,8 +37,8 @@ class Data extends \Magento\Framework\View\Element\Template
      * @param \Magento\Directory\Helper\Data $directoryHelper
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
      * @param array $data
      */
     public function __construct(
@@ -46,8 +46,8 @@ class Data extends \Magento\Framework\View\Element\Template
         \Magento\Directory\Helper\Data $directoryHelper,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
         \Magento\Framework\App\Cache\Type\Config $configCacheType,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
         array $data = []
     ) {
         parent::__construct($context, $data);
@@ -67,7 +67,7 @@ class Data extends \Magento\Framework\View\Element\Template
     }
 
     /**
-     * @return \Magento\Directory\Model\Resource\Country\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     public function getCountryCollection()
     {
@@ -138,7 +138,7 @@ class Data extends \Magento\Framework\View\Element\Template
     }
 
     /**
-     * @return \Magento\Directory\Model\Resource\Region\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Region\Collection
      */
     public function getRegionCollection()
     {
diff --git a/app/code/Magento/Directory/Controller/Adminhtml/Json/CountryRegion.php b/app/code/Magento/Directory/Controller/Adminhtml/Json/CountryRegion.php
index 5b62238ef2ad6b62d0928cf0800ddd73564c8bc3..412028bdd8f78bb0fcf36eb8f492055575004b1a 100644
--- a/app/code/Magento/Directory/Controller/Adminhtml/Json/CountryRegion.php
+++ b/app/code/Magento/Directory/Controller/Adminhtml/Json/CountryRegion.php
@@ -20,7 +20,7 @@ class CountryRegion extends \Magento\Backend\App\Action
         $countryId = $this->getRequest()->getParam('parent');
         if (!empty($countryId)) {
             $arrRegions = $this->_objectManager->create(
-                'Magento\Directory\Model\Resource\Region\Collection'
+                'Magento\Directory\Model\ResourceModel\Region\Collection'
             )->addCountryFilter(
                 $countryId
             )->load()->toOptionArray();
diff --git a/app/code/Magento/Directory/Helper/Data.php b/app/code/Magento/Directory/Helper/Data.php
index a247903fdf1649387ceea3f540362762aaa4e1ad..836851386b2dc484900ba25b92929b918d417e2f 100644
--- a/app/code/Magento/Directory/Helper/Data.php
+++ b/app/code/Magento/Directory/Helper/Data.php
@@ -9,6 +9,8 @@
  */
 namespace Magento\Directory\Helper;
 
+use Magento\Store\Model\ScopeInterface;
+
 class Data extends \Magento\Framework\App\Helper\AbstractHelper
 {
     /**
@@ -40,17 +42,22 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
      */
     const XML_PATH_TOP_COUNTRIES = 'general/country/destinations';
 
+    /**
+     * Path to config value that contains weight unit
+     */
+    const XML_PATH_WEIGHT_UNIT = 'general/locale/weight_unit';
+
     /**
      * Country collection
      *
-     * @var \Magento\Directory\Model\Resource\Country\Collection
+     * @var \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     protected $_countryCollection;
 
     /**
      * Region collection
      *
-     * @var \Magento\Directory\Model\Resource\Region\Collection
+     * @var \Magento\Directory\Model\ResourceModel\Region\Collection
      */
     protected $_regionCollection;
 
@@ -81,7 +88,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     protected $_configCacheType;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Region\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory
      */
     protected $_regCollectionFactory;
 
@@ -103,8 +110,8 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     /**
      * @param \Magento\Framework\App\Helper\Context $context
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
-     * @param \Magento\Directory\Model\Resource\Country\Collection $countryCollection
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regCollectionFactory,
+     * @param \Magento\Directory\Model\ResourceModel\Country\Collection $countryCollection
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regCollectionFactory,
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
@@ -112,8 +119,8 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     public function __construct(
         \Magento\Framework\App\Helper\Context $context,
         \Magento\Framework\App\Cache\Type\Config $configCacheType,
-        \Magento\Directory\Model\Resource\Country\Collection $countryCollection,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\Collection $countryCollection,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regCollectionFactory,
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory
@@ -130,7 +137,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     /**
      * Retrieve region collection
      *
-     * @return \Magento\Directory\Model\Resource\Region\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Region\Collection
      */
     public function getRegionCollection()
     {
@@ -145,7 +152,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
      * Retrieve country collection
      *
      * @param null|int|string|\Magento\Store\Model\Store $store
-     * @return \Magento\Directory\Model\Resource\Country\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     public function getCountryCollection($store = null)
     {
@@ -214,7 +221,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
             $value = trim(
                 $this->scopeConfig->getValue(
                     self::OPTIONAL_ZIP_COUNTRIES_CONFIG_PATH,
-                    \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+                    ScopeInterface::SCOPE_STORE
                 )
             );
             $this->_optZipCountries = preg_split('/\,/', $value, 0, PREG_SPLIT_NO_EMPTY);
@@ -248,7 +255,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
         $value = trim(
             $this->scopeConfig->getValue(
                 self::XML_PATH_STATES_REQUIRED,
-                \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+                ScopeInterface::SCOPE_STORE
             )
         );
         $countryList = preg_split('/\,/', $value, 0, PREG_SPLIT_NO_EMPTY);
@@ -267,7 +274,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     {
         return (bool)$this->scopeConfig->getValue(
             self::XML_PATH_DISPLAY_ALL_STATES,
-            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            ScopeInterface::SCOPE_STORE
         );
     }
 
@@ -306,7 +313,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     {
         return $this->scopeConfig->getValue(
             self::XML_PATH_DEFAULT_COUNTRY,
-            \Magento\Store\Model\ScopeInterface::SCOPE_STORE,
+            ScopeInterface::SCOPE_STORE,
             $store
         );
     }
@@ -352,8 +359,18 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     {
         $configValue = (string)$this->scopeConfig->getValue(
             self::XML_PATH_TOP_COUNTRIES,
-            \Magento\Store\Model\ScopeInterface::SCOPE_STORE
+            ScopeInterface::SCOPE_STORE
         );
         return !empty($configValue) ? explode(',', $configValue) : [];
     }
+
+    /**
+     * Retrieve weight unit
+     *
+     * @return string
+     */
+    public function getWeightUnit()
+    {
+        return $this->scopeConfig->getValue(self::XML_PATH_WEIGHT_UNIT, ScopeInterface::SCOPE_STORE);
+    }
 }
diff --git a/app/code/Magento/Directory/Model/Config/Source/Allregion.php b/app/code/Magento/Directory/Model/Config/Source/Allregion.php
index 18f512fad968927efc7a5de56f7e0d1844aee861..60bb9b3f4a8079034f8086b9a6214533eb672006 100644
--- a/app/code/Magento/Directory/Model/Config/Source/Allregion.php
+++ b/app/code/Magento/Directory/Model/Config/Source/Allregion.php
@@ -18,22 +18,22 @@ class Allregion implements \Magento\Framework\Option\ArrayInterface
     protected $_options;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Country\CollectionFactory
      */
     protected $_countryCollectionFactory;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Region\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory
      */
     protected $_regionCollectionFactory;
 
     /**
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
      */
     public function __construct(
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
     ) {
         $this->_countryCollectionFactory = $countryCollectionFactory;
         $this->_regionCollectionFactory = $regionCollectionFactory;
diff --git a/app/code/Magento/Directory/Model/Config/Source/Country.php b/app/code/Magento/Directory/Model/Config/Source/Country.php
index fe6dcf44535ef77698eeb6e1379c3f37d2cb5211..0885949b3c1639b2c55e6c5539b966a13b12169b 100644
--- a/app/code/Magento/Directory/Model/Config/Source/Country.php
+++ b/app/code/Magento/Directory/Model/Config/Source/Country.php
@@ -10,14 +10,14 @@ class Country implements \Magento\Framework\Option\ArrayInterface
     /**
      * Countries
      *
-     * @var \Magento\Directory\Model\Resource\Country\Collection
+     * @var \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     protected $_countryCollection;
 
     /**
-     * @param \Magento\Directory\Model\Resource\Country\Collection $countryCollection
+     * @param \Magento\Directory\Model\ResourceModel\Country\Collection $countryCollection
      */
-    public function __construct(\Magento\Directory\Model\Resource\Country\Collection $countryCollection)
+    public function __construct(\Magento\Directory\Model\ResourceModel\Country\Collection $countryCollection)
     {
         $this->_countryCollection = $countryCollection;
     }
diff --git a/app/code/Magento/Directory/Model/Config/Source/WeightUnit.php b/app/code/Magento/Directory/Model/Config/Source/WeightUnit.php
new file mode 100644
index 0000000000000000000000000000000000000000..912e4bbb385a50ad568997f98c300c7ec92ff2f5
--- /dev/null
+++ b/app/code/Magento/Directory/Model/Config/Source/WeightUnit.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Directory\Model\Config\Source;
+
+class WeightUnit implements \Magento\Framework\Option\ArrayInterface
+{
+    /**
+     * {@inheritdoc}
+     */
+    public function toOptionArray()
+    {
+        return [['value' => 'lbs', 'label' => __('lbs')], ['value' => 'kgs', 'label' => __('kgs')]];
+    }
+}
diff --git a/app/code/Magento/Directory/Model/Country.php b/app/code/Magento/Directory/Model/Country.php
index 11efe02c6135159ab3be6c274283c39868cec28a..fca0524c09595913e148b53e2f6f60f6d883419f 100644
--- a/app/code/Magento/Directory/Model/Country.php
+++ b/app/code/Magento/Directory/Model/Country.php
@@ -9,8 +9,8 @@
 /**
  * Country model
  *
- * @method \Magento\Directory\Model\Resource\Country _getResource()
- * @method \Magento\Directory\Model\Resource\Country getResource()
+ * @method \Magento\Directory\Model\ResourceModel\Country _getResource()
+ * @method \Magento\Directory\Model\ResourceModel\Country getResource()
  * @method string getCountryId()
  * @method \Magento\Directory\Model\Country setCountryId(string $value)
  */
@@ -34,7 +34,7 @@ class Country extends \Magento\Framework\Model\AbstractModel
     protected $_formatFactory;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Region\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory
      */
     protected $_regionCollectionFactory;
 
@@ -43,8 +43,8 @@ class Country extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Locale\ListsInterface $localeLists
      * @param Country\FormatFactory $formatFactory
-     * @param Resource\Region\CollectionFactory $regionCollectionFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -53,8 +53,8 @@ class Country extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Locale\ListsInterface $localeLists,
         \Magento\Directory\Model\Country\FormatFactory $formatFactory,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -69,7 +69,7 @@ class Country extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Directory\Model\Resource\Country');
+        $this->_init('Magento\Directory\Model\ResourceModel\Country');
     }
 
     /**
@@ -87,7 +87,7 @@ class Country extends \Magento\Framework\Model\AbstractModel
     /**
      * Get regions
      *
-     * @return \Magento\Directory\Model\Resource\Region\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Region\Collection
      */
     public function getRegions()
     {
@@ -95,7 +95,7 @@ class Country extends \Magento\Framework\Model\AbstractModel
     }
 
     /**
-     * @return \Magento\Directory\Model\Resource\Region\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Region\Collection
      */
     public function getLoadedRegionCollection()
     {
@@ -105,7 +105,7 @@ class Country extends \Magento\Framework\Model\AbstractModel
     }
 
     /**
-     * @return \Magento\Directory\Model\Resource\Region\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Region\Collection
      */
     public function getRegionCollection()
     {
@@ -158,7 +158,7 @@ T: {{telephone}}";
     /**
      * Retrieve country formats
      *
-     * @return \Magento\Directory\Model\Resource\Country\Format\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Country\Format\Collection
      */
     public function getFormats()
     {
diff --git a/app/code/Magento/Directory/Model/Country/Format.php b/app/code/Magento/Directory/Model/Country/Format.php
index cff95910dfcb3121d876f210762943fedfe66cd6..ef8ebc4ebde1e887344567dab985cbc336f050af 100644
--- a/app/code/Magento/Directory/Model/Country/Format.php
+++ b/app/code/Magento/Directory/Model/Country/Format.php
@@ -8,8 +8,8 @@ namespace Magento\Directory\Model\Country;
 /**
  * \Directory country format model
  *
- * @method \Magento\Directory\Model\Resource\Country\Format _getResource()
- * @method \Magento\Directory\Model\Resource\Country\Format getResource()
+ * @method \Magento\Directory\Model\ResourceModel\Country\Format _getResource()
+ * @method \Magento\Directory\Model\ResourceModel\Country\Format getResource()
  * @method string getCountryId()
  * @method \Magento\Directory\Model\Country\Format setCountryId(string $value)
  * @method string getType()
@@ -26,6 +26,6 @@ class Format extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Directory\Model\Resource\Country\Format');
+        $this->_init('Magento\Directory\Model\ResourceModel\Country\Format');
     }
 }
diff --git a/app/code/Magento/Directory/Model/CountryInformationAcquirer.php b/app/code/Magento/Directory/Model/CountryInformationAcquirer.php
index b2cfc89be67147fcd1986a9002d8f48a3d91becd..178edd321d8c3b658b6d411e5eb96615d18efa9c 100644
--- a/app/code/Magento/Directory/Model/CountryInformationAcquirer.php
+++ b/app/code/Magento/Directory/Model/CountryInformationAcquirer.php
@@ -114,7 +114,7 @@ class CountryInformationAcquirer implements \Magento\Directory\Api\CountryInform
     /**
      * Creates and initializes the information for \Magento\Directory\Model\Data\CountryInformation
      *
-     * @param \Magento\Directory\Model\Resource\Country $country
+     * @param \Magento\Directory\Model\ResourceModel\Country $country
      * @param array $regions
      * @param string $storeLocale
      * @return \Magento\Directory\Model\Data\CountryInformation
diff --git a/app/code/Magento/Directory/Model/Currency.php b/app/code/Magento/Directory/Model/Currency.php
index 13b1cbf821338ade269c242c970224ee1bff51d8..576c946d0d64775ab62357f11286426129923524 100644
--- a/app/code/Magento/Directory/Model/Currency.php
+++ b/app/code/Magento/Directory/Model/Currency.php
@@ -73,7 +73,7 @@ class Currency extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Directory\Helper\Data $directoryHelper
      * @param Currency\FilterFactory $currencyFilterFactory
      * @param \Magento\Framework\Locale\CurrencyInterface $localeCurrency
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -86,7 +86,7 @@ class Currency extends \Magento\Framework\Model\AbstractModel
         \Magento\Directory\Helper\Data $directoryHelper,
         \Magento\Directory\Model\Currency\FilterFactory $currencyFilterFactory,
         \Magento\Framework\Locale\CurrencyInterface $localeCurrency,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -109,7 +109,7 @@ class Currency extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Directory\Model\Resource\Currency');
+        $this->_init('Magento\Directory\Model\ResourceModel\Currency');
     }
 
     /**
diff --git a/app/code/Magento/Directory/Model/Region.php b/app/code/Magento/Directory/Model/Region.php
index 1e401a7ce745602de9a61d0458d40d310ba3fd64..3e295733f23b699f1249a4bb980fcc89daffe574 100644
--- a/app/code/Magento/Directory/Model/Region.php
+++ b/app/code/Magento/Directory/Model/Region.php
@@ -7,8 +7,8 @@
 /**
  * Region
  *
- * @method \Magento\Directory\Model\Resource\Region _getResource()
- * @method \Magento\Directory\Model\Resource\Region getResource()
+ * @method \Magento\Directory\Model\ResourceModel\Region _getResource()
+ * @method \Magento\Directory\Model\ResourceModel\Region getResource()
  * @method string getRegionId()
  * @method string getCountryId()
  * @method \Magento\Directory\Model\Region setCountryId(string $value)
@@ -28,7 +28,7 @@ class Region extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Directory\Model\Resource\Region');
+        $this->_init('Magento\Directory\Model\ResourceModel\Region');
     }
 
     /**
diff --git a/app/code/Magento/Directory/Model/Resource/Country.php b/app/code/Magento/Directory/Model/ResourceModel/Country.php
similarity index 85%
rename from app/code/Magento/Directory/Model/Resource/Country.php
rename to app/code/Magento/Directory/Model/ResourceModel/Country.php
index 8b49b1a490bab2b6befd6bc59e823910fd02bca3..09ef9f9aba63e88fe0f0553490e24fcc36f6464f 100644
--- a/app/code/Magento/Directory/Model/Resource/Country.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Country.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Directory\Model\Resource;
+namespace Magento\Directory\Model\ResourceModel;
 
 /**
  * Directory Country Resource Model
  */
-class Country extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Country extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
@@ -25,7 +25,7 @@ class Country extends \Magento\Framework\Model\Resource\Db\AbstractDb
      *
      * @param \Magento\Directory\Model\Country $country
      * @param string $code
-     * @return \Magento\Directory\Model\Resource\Country
+     * @return \Magento\Directory\Model\ResourceModel\Country
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function loadByCode(\Magento\Directory\Model\Country $country, $code)
diff --git a/app/code/Magento/Directory/Model/Resource/Country/Collection.php b/app/code/Magento/Directory/Model/ResourceModel/Country/Collection.php
similarity index 91%
rename from app/code/Magento/Directory/Model/Resource/Country/Collection.php
rename to app/code/Magento/Directory/Model/ResourceModel/Country/Collection.php
index a5209e1a809cd49b59c5980a88220ceaed3b580e..da1d524f7ab4c644ceb188e1287329c887dabe3c 100644
--- a/app/code/Magento/Directory/Model/Resource/Country/Collection.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Country/Collection.php
@@ -9,13 +9,13 @@
 /**
  * Directory Country Resource Collection
  */
-namespace Magento\Directory\Model\Resource\Country;
+namespace Magento\Directory\Model\ResourceModel\Country;
 
 /**
  * Class Collection
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Locale model
@@ -32,7 +32,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected $_scopeConfig;
 
     /**
-     * @var \Magento\Directory\Model\Resource\CountryFactory
+     * @var \Magento\Directory\Model\ResourceModel\CountryFactory
      */
     protected $_countryFactory;
 
@@ -60,12 +60,12 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Locale\ListsInterface $localeLists
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
-     * @param \Magento\Directory\Model\Resource\CountryFactory $countryFactory
+     * @param \Magento\Directory\Model\ResourceModel\CountryFactory $countryFactory
      * @param \Magento\Framework\Stdlib\ArrayUtils $arrayUtils
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param \Magento\Framework\App\Helper\AbstractHelper $helperData
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
@@ -75,12 +75,12 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Locale\ListsInterface $localeLists,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Directory\Model\Resource\CountryFactory $countryFactory,
+        \Magento\Directory\Model\ResourceModel\CountryFactory $countryFactory,
         \Magento\Framework\Stdlib\ArrayUtils $arrayUtils,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         \Magento\Framework\App\Helper\AbstractHelper $helperData,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->_scopeConfig = $scopeConfig;
@@ -105,14 +105,14 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Directory\Model\Country', 'Magento\Directory\Model\Resource\Country');
+        $this->_init('Magento\Directory\Model\Country', 'Magento\Directory\Model\ResourceModel\Country');
     }
 
     /**
      * Load allowed countries for current store
      *
      * @param null|int|string|\Magento\Store\Model\Store $store
-     * @return \Magento\Directory\Model\Resource\Country\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     public function loadByStore($store = null)
     {
@@ -133,7 +133,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * Loads Item By Id
      *
      * @param string $countryId
-     * @return \Magento\Directory\Model\Resource\Country
+     * @return \Magento\Directory\Model\ResourceModel\Country
      */
     public function getItemById($countryId)
     {
diff --git a/app/code/Magento/Directory/Model/Resource/Country/Format.php b/app/code/Magento/Directory/Model/ResourceModel/Country/Format.php
similarity index 79%
rename from app/code/Magento/Directory/Model/Resource/Country/Format.php
rename to app/code/Magento/Directory/Model/ResourceModel/Country/Format.php
index 45228c206991f2d63793fb4cb699be695160a430..ad8e077284910cf5fb49114d7fd2c8dc76ed467f 100644
--- a/app/code/Magento/Directory/Model/Resource/Country/Format.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Country/Format.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Directory\Model\Resource\Country;
+namespace Magento\Directory\Model\ResourceModel\Country;
 
 /**
  * \Directory country format resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Format extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Format extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
@@ -25,7 +25,7 @@ class Format extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Initialize unique fields
      *
-     * @return \Magento\Directory\Model\Resource\Country\Format
+     * @return \Magento\Directory\Model\ResourceModel\Country\Format
      */
     protected function _initUniqueFields()
     {
diff --git a/app/code/Magento/Directory/Model/Resource/Country/Format/Collection.php b/app/code/Magento/Directory/Model/ResourceModel/Country/Format/Collection.php
similarity index 73%
rename from app/code/Magento/Directory/Model/Resource/Country/Format/Collection.php
rename to app/code/Magento/Directory/Model/ResourceModel/Country/Format/Collection.php
index 92c0e6a6203bebc73057bbe23bb88d6dd106acf6..25982b5729fcaf5a57b5d44fe2894d8f78c07e97 100644
--- a/app/code/Magento/Directory/Model/Resource/Country/Format/Collection.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Country/Format/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Directory\Model\Resource\Country\Format;
+namespace Magento\Directory\Model\ResourceModel\Country\Format;
 
 /**
  * \Directory country format resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define main table
@@ -19,14 +19,14 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Directory\Model\Country\Format', 'Magento\Directory\Model\Resource\Country\Format');
+        $this->_init('Magento\Directory\Model\Country\Format', 'Magento\Directory\Model\ResourceModel\Country\Format');
     }
 
     /**
      * Set country filter
      *
      * @param string|\Magento\Directory\Model\Country $country
-     * @return \Magento\Directory\Model\Resource\Country\Format\Collection
+     * @return \Magento\Directory\Model\ResourceModel\Country\Format\Collection
      */
     public function setCountryFilter($country)
     {
diff --git a/app/code/Magento/Directory/Model/Resource/Currency.php b/app/code/Magento/Directory/Model/ResourceModel/Currency.php
similarity index 98%
rename from app/code/Magento/Directory/Model/Resource/Currency.php
rename to app/code/Magento/Directory/Model/ResourceModel/Currency.php
index 46725468bf56d12062a01984e07ac1bf782ea3c1..7e5b29b6e991ebdfd5ae1e8a1a5ce83e3a7a447c 100644
--- a/app/code/Magento/Directory/Model/Resource/Currency.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Currency.php
@@ -7,9 +7,9 @@
 /**
  * Directory Currency Resource Model
  */
-namespace Magento\Directory\Model\Resource;
+namespace Magento\Directory\Model\ResourceModel;
 
-class Currency extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Currency extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Currency rate table
diff --git a/app/code/Magento/Directory/Model/Resource/Region.php b/app/code/Magento/Directory/Model/ResourceModel/Region.php
similarity index 94%
rename from app/code/Magento/Directory/Model/Resource/Region.php
rename to app/code/Magento/Directory/Model/ResourceModel/Region.php
index f011f27da72c1557f74396f9b93f1274f6e65283..d03ce611e7b61f376b3b4b3d2279298ce0f93e46 100644
--- a/app/code/Magento/Directory/Model/Resource/Region.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Region.php
@@ -9,9 +9,9 @@
 /**
  * Directory Region Resource Model
  */
-namespace Magento\Directory\Model\Resource;
+namespace Magento\Directory\Model\ResourceModel;
 
-class Region extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Region extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Table with localized region names
@@ -26,12 +26,12 @@ class Region extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_localeResolver;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Directory/Model/Resource/Region/Collection.php b/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php
similarity index 94%
rename from app/code/Magento/Directory/Model/Resource/Region/Collection.php
rename to app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php
index 451b7a0afeabebdf682e5b65f86f08e6a6619ea0..23e48367c17f131896fe2c636148614c482856d9 100644
--- a/app/code/Magento/Directory/Model/Resource/Region/Collection.php
+++ b/app/code/Magento/Directory/Model/ResourceModel/Region/Collection.php
@@ -7,9 +7,9 @@
 /**
  * Country collection
  */
-namespace Magento\Directory\Model\Resource\Region;
+namespace Magento\Directory\Model\ResourceModel\Region;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Locale region name table name
@@ -37,7 +37,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -46,7 +46,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_localeResolver = $localeResolver;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
@@ -59,7 +59,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Directory\Model\Region', 'Magento\Directory\Model\Resource\Region');
+        $this->_init('Magento\Directory\Model\Region', 'Magento\Directory\Model\ResourceModel\Region');
 
         $this->_countryTable = $this->getTable('directory_country');
         $this->_regionNameTable = $this->getTable('directory_country_region_name');
diff --git a/app/code/Magento/Directory/Test/Unit/Block/DataTest.php b/app/code/Magento/Directory/Test/Unit/Block/DataTest.php
index 9d5fb0635bd667381ab5cd3f2cba90bc16736cae..ea340dd5bf84200a8479af9b3ae5a084eae773a0 100644
--- a/app/code/Magento/Directory/Test/Unit/Block/DataTest.php
+++ b/app/code/Magento/Directory/Test/Unit/Block/DataTest.php
@@ -7,9 +7,9 @@ namespace Magento\Directory\Test\Unit\Block;
 
 use Magento\Directory\Block\Data;
 use Magento\Directory\Helper\Data as HelperData;
-use Magento\Directory\Model\Resource\Country\Collection as CountryCollection;
-use Magento\Directory\Model\Resource\Country\CollectionFactory as CountryCollectionFactory;
-use Magento\Directory\Model\Resource\Region\CollectionFactory as RegionCollectionFactory;
+use Magento\Directory\Model\ResourceModel\Country\Collection as CountryCollection;
+use Magento\Directory\Model\ResourceModel\Country\CollectionFactory as CountryCollectionFactory;
+use Magento\Directory\Model\ResourceModel\Region\CollectionFactory as RegionCollectionFactory;
 use Magento\Framework\App\Cache\Type\Config;
 use Magento\Framework\App\Config\ScopeConfigInterface;
 use Magento\Framework\Json\EncoderInterface;
@@ -76,7 +76,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->regionCollectionFactory = $this->getMockBuilder(
-            'Magento\Directory\Model\Resource\Region\CollectionFactory'
+            'Magento\Directory\Model\ResourceModel\Region\CollectionFactory'
         )
             ->disableOriginalConstructor()
             ->getMock();
@@ -131,12 +131,12 @@ class DataTest extends \PHPUnit_Framework_TestCase
 
     protected function prepareCountryCollection()
     {
-        $this->countryCollection = $this->getMockBuilder('Magento\Directory\Model\Resource\Country\Collection')
+        $this->countryCollection = $this->getMockBuilder('Magento\Directory\Model\ResourceModel\Country\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
         $this->countryCollectionFactory = $this->getMockBuilder(
-            'Magento\Directory\Model\Resource\Country\CollectionFactory'
+            'Magento\Directory\Model\ResourceModel\Country\CollectionFactory'
         )
             ->disableOriginalConstructor()
             ->setMethods([
diff --git a/app/code/Magento/Directory/Test/Unit/Helper/DataTest.php b/app/code/Magento/Directory/Test/Unit/Helper/DataTest.php
index 21eb07942bfc01d613002939af4b383cd6eb2167..c994b1dff681439188e52a3142ce585cb6d1643c 100644
--- a/app/code/Magento/Directory/Test/Unit/Helper/DataTest.php
+++ b/app/code/Magento/Directory/Test/Unit/Helper/DataTest.php
@@ -10,12 +10,12 @@ use Magento\Directory\Helper\Data;
 class DataTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Directory\Model\Resource\Country\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Directory\Model\ResourceModel\Country\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_countryCollection;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Region\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_regionCollection;
 
@@ -51,7 +51,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
         $configCacheType = $this->getMock('Magento\Framework\App\Cache\Type\Config', [], [], '', false);
 
         $this->_countryCollection = $this->getMock(
-            'Magento\Directory\Model\Resource\Country\Collection',
+            'Magento\Directory\Model\ResourceModel\Country\Collection',
             [],
             [],
             '',
@@ -59,14 +59,14 @@ class DataTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->_regionCollection = $this->getMock(
-            'Magento\Directory\Model\Resource\Region\Collection',
+            'Magento\Directory\Model\ResourceModel\Region\Collection',
             [],
             [],
             '',
             false
         );
         $regCollectionFactory = $this->getMock(
-            'Magento\Directory\Model\Resource\Region\CollectionFactory',
+            'Magento\Directory\Model\ResourceModel\Region\CollectionFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Directory/Test/Unit/Model/Config/Source/AllRegionTest.php b/app/code/Magento/Directory/Test/Unit/Model/Config/Source/AllRegionTest.php
index cc1725909e0bd8ec2939ec12723b4f59a698bad4..cb8e297a959764b85596f4f44da1bea1b89fc8cc 100644
--- a/app/code/Magento/Directory/Test/Unit/Model/Config/Source/AllRegionTest.php
+++ b/app/code/Magento/Directory/Test/Unit/Model/Config/Source/AllRegionTest.php
@@ -13,12 +13,12 @@ class AllRegionTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\Collection
+     * @var \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     protected $countryCollection;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Region\Collection
+     * @var \Magento\Directory\Model\ResourceModel\Region\Collection
      */
     protected $regionCollection;
 
@@ -27,10 +27,10 @@ class AllRegionTest extends \PHPUnit_Framework_TestCase
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
         $countryCollectionFactory = $this->getMockBuilder(
-            'Magento\Directory\Model\Resource\Country\CollectionFactory'
+            'Magento\Directory\Model\ResourceModel\Country\CollectionFactory'
         )->setMethods(['create', '__wakeup', '__sleep'])->disableOriginalConstructor()->getMock();
 
-        $this->countryCollection = $this->getMockBuilder('Magento\Directory\Model\Resource\Country\Collection')
+        $this->countryCollection = $this->getMockBuilder('Magento\Directory\Model\ResourceModel\Country\Collection')
             ->setMethods(['load', 'toOptionArray', '__wakeup', '__sleep'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -42,9 +42,9 @@ class AllRegionTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnSelf());
 
         $regionCollectionFactory = $this->getMockBuilder(
-            'Magento\Directory\Model\Resource\Region\CollectionFactory'
+            'Magento\Directory\Model\ResourceModel\Region\CollectionFactory'
         )->disableOriginalConstructor()->setMethods(['create', '__wakeup', '__sleep'])->getMock();
-        $this->regionCollection = $this->getMockBuilder('Magento\Directory\Model\Resource\Region\Collection')
+        $this->regionCollection = $this->getMockBuilder('Magento\Directory\Model\ResourceModel\Region\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['load', 'getIterator', '__wakeup', '__sleep'])
             ->getMock();
diff --git a/app/code/Magento/Directory/Test/Unit/Model/Config/Source/CountryTest.php b/app/code/Magento/Directory/Test/Unit/Model/Config/Source/CountryTest.php
index 5ad3bd0ce5d89c381c487476b88231b1896b293b..50851db128578bf5c97f4dfee597380ac0241a1f 100644
--- a/app/code/Magento/Directory/Test/Unit/Model/Config/Source/CountryTest.php
+++ b/app/code/Magento/Directory/Test/Unit/Model/Config/Source/CountryTest.php
@@ -13,7 +13,7 @@ class CountryTest extends \PHPUnit_Framework_TestCase
     protected $_model;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\Collection
+     * @var \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     protected $_collectionMock;
 
@@ -21,7 +21,7 @@ class CountryTest extends \PHPUnit_Framework_TestCase
     {
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->_collectionMock = $this->getMock(
-            'Magento\Directory\Model\Resource\Country\Collection',
+            'Magento\Directory\Model\ResourceModel\Country\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Directory/Test/Unit/Model/CountryInformationAcquirerTest.php b/app/code/Magento/Directory/Test/Unit/Model/CountryInformationAcquirerTest.php
index d4aaf5d50dc3f12b8c69ae570f03db1001df0d91..256b5a0d8b733b4367fcde17fa6f338542e70c78 100644
--- a/app/code/Magento/Directory/Test/Unit/Model/CountryInformationAcquirerTest.php
+++ b/app/code/Magento/Directory/Test/Unit/Model/CountryInformationAcquirerTest.php
@@ -122,7 +122,13 @@ class CountryInformationAcquirerTest extends \PHPUnit_Framework_TestCase
         $testCountryInfo->setData('name_default', 'United Arab Emirates');
         $testCountryInfo->setData('name_en_US', 'United Arab Emirates');
 
-        $countryCollection = $this->getMock('\Magento\Directory\Model\Resource\Country\Collection', [], [], '', false);
+        $countryCollection = $this->getMock(
+            '\Magento\Directory\Model\ResourceModel\Country\Collection',
+            [],
+            [],
+            '',
+            false
+        );
         $countryCollection->expects($this->once())->method('addCountryIdFilter')->willReturnSelf();
         $countryCollection->expects($this->once())->method('load')->willReturnSelf();
         $countryCollection->expects($this->once())->method('count')->willReturn(1);
@@ -161,7 +167,13 @@ class CountryInformationAcquirerTest extends \PHPUnit_Framework_TestCase
         $testCountryInfo->setData('name_default', 'United Arab Emirates');
         $testCountryInfo->setData('name_en_US', 'United Arab Emirates');
 
-        $countryCollection = $this->getMock('\Magento\Directory\Model\Resource\Country\Collection', [], [], '', false);
+        $countryCollection = $this->getMock(
+            '\Magento\Directory\Model\ResourceModel\Country\Collection',
+            [],
+            [],
+            '',
+            false
+        );
         $countryCollection->expects($this->once())->method('addCountryIdFilter')->willReturnSelf();
         $countryCollection->expects($this->once())->method('load')->willReturnSelf();
         $countryCollection->expects($this->once())->method('count')->willReturn(0);
diff --git a/app/code/Magento/Directory/Test/Unit/Model/Resource/Country/CollectionTest.php b/app/code/Magento/Directory/Test/Unit/Model/ResourceModel/Country/CollectionTest.php
similarity index 93%
rename from app/code/Magento/Directory/Test/Unit/Model/Resource/Country/CollectionTest.php
rename to app/code/Magento/Directory/Test/Unit/Model/ResourceModel/Country/CollectionTest.php
index 4d1e4471aca2bbb785aff60fade3dc604dafa7dd..dbbd2d935d5e4882703379ed9b17a9aaf6a03475 100644
--- a/app/code/Magento/Directory/Test/Unit/Model/Resource/Country/CollectionTest.php
+++ b/app/code/Magento/Directory/Test/Unit/Model/ResourceModel/Country/CollectionTest.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Directory\Test\Unit\Model\Resource\Country;
+namespace Magento\Directory\Test\Unit\Model\ResourceModel\Country;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Directory\Model\Resource\Country\Collection
+     * @var \Magento\Directory\Model\ResourceModel\Country\Collection
      */
     protected $_model;
 
@@ -21,7 +21,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $select = $this->getMock('Magento\Framework\DB\Select', [], [], '', false);
         $connection->expects($this->once())->method('select')->will($this->returnValue($select));
 
-        $resource = $this->getMockForAbstractClass('Magento\Framework\Model\Resource\Db\AbstractDb',
+        $resource = $this->getMockForAbstractClass('Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -41,7 +41,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $scopeConfigMock = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface');
         $logger = $this->getMock('Psr\Log\LoggerInterface');
         $countryFactory = $this->getMock(
-            'Magento\Directory\Model\Resource\CountryFactory',
+            'Magento\Directory\Model\ResourceModel\CountryFactory',
             [],
             [],
             '',
@@ -66,7 +66,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             'resource' => $resource,
             'helperData' => $helperDataMock
         ];
-        $this->_model = $objectManager->getObject('Magento\Directory\Model\Resource\Country\Collection', $arguments);
+        $this->_model = $objectManager->getObject('Magento\Directory\Model\ResourceModel\Country\Collection', $arguments);
     }
 
     /**
diff --git a/app/code/Magento/Directory/etc/adminhtml/system.xml b/app/code/Magento/Directory/etc/adminhtml/system.xml
index fa22d9f4dd20ca29505fc7585e3b0b27490059ec..170b16c1eb79167627561a6646bcc14bb4cfa2fe 100644
--- a/app/code/Magento/Directory/etc/adminhtml/system.xml
+++ b/app/code/Magento/Directory/etc/adminhtml/system.xml
@@ -103,6 +103,12 @@
                     <source_model>Magento\Config\Model\Config\Source\Yesno</source_model>
                 </field>
             </group>
+            <group id="locale">
+                <field id="weight_unit" translate="label" type="select" sortOrder="7" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>Weight Unit</label>
+                    <source_model>Magento\Directory\Model\Config\Source\WeightUnit</source_model>
+                </field>
+            </group>
         </section>
     </system>
 </config>
diff --git a/app/code/Magento/Directory/etc/config.xml b/app/code/Magento/Directory/etc/config.xml
index d1a23705b3b4ede7f5ad53ba0bc66abd22b4c1d7..3afc87961eb28e7f3633233b2e551ba3d13a17df 100644
--- a/app/code/Magento/Directory/etc/config.xml
+++ b/app/code/Magento/Directory/etc/config.xml
@@ -44,6 +44,7 @@
                 <language>en</language>
                 <code>en_US</code>
                 <timezone>America/Los_Angeles</timezone>
+                <weight_unit>lbs</weight_unit>
             </locale>
         </general>
     </default>
diff --git a/app/code/Magento/Directory/etc/di.xml b/app/code/Magento/Directory/etc/di.xml
index 9b89eb6977e934e9baa20c1fc1a1878b35113b2c..a74e338de4ea76fbc7368c99c5f706efb30ff500 100644
--- a/app/code/Magento/Directory/etc/di.xml
+++ b/app/code/Magento/Directory/etc/di.xml
@@ -22,7 +22,7 @@
             <argument name="instanceName" xsi:type="string">Magento\Directory\Helper\Data</argument>
         </arguments>
     </virtualType>
-    <type name="Magento\Directory\Model\Resource\Country\Collection" shared="false">
+    <type name="Magento\Directory\Model\ResourceModel\Country\Collection" shared="false">
         <arguments>
             <argument name="helperData" xsi:type="object">DirectoryHelperDataProxy</argument>
         </arguments>
diff --git a/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php b/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
index 4b3c95f89150c652b3bf6bab773ee262b30dbcc8..b07b6e82bdc4d04f71bc4c8a46ac686f82bf2332 100644
--- a/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
+++ b/app/code/Magento/Downloadable/Block/Adminhtml/Catalog/Product/Edit/Tab/Downloadable/Links.php
@@ -23,7 +23,7 @@ class Links extends \Magento\Backend\Block\Template
     /**
      * Purchased Separately Attribute cache
      *
-     * @var \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     protected $_purchasedSeparatelyAttribute = null;
 
@@ -140,7 +140,7 @@ class Links extends \Magento\Backend\Block\Template
     /**
      * Retrieve Purchased Separately Attribute object
      *
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     public function getPurchasedSeparatelyAttribute()
     {
diff --git a/app/code/Magento/Downloadable/Block/Adminhtml/Sales/Items/Column/Downloadable/Name.php b/app/code/Magento/Downloadable/Block/Adminhtml/Sales/Items/Column/Downloadable/Name.php
index 5b2edf12c8f4bc1454b2acc42c55dec38c74c4c7..9c3062c24dea15b687cc31d86ce3130cf4837d95 100644
--- a/app/code/Magento/Downloadable/Block/Adminhtml/Sales/Items/Column/Downloadable/Name.php
+++ b/app/code/Magento/Downloadable/Block/Adminhtml/Sales/Items/Column/Downloadable/Name.php
@@ -28,7 +28,7 @@ class Name extends \Magento\Sales\Block\Adminhtml\Items\Column\Name
     protected $_purchasedFactory;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory
      */
     protected $_itemsFactory;
 
@@ -39,7 +39,7 @@ class Name extends \Magento\Sales\Block\Adminhtml\Items\Column\Name
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Catalog\Model\Product\OptionFactory $optionFactory
      * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory
-     * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
      * @param array $data
      */
     public function __construct(
@@ -49,7 +49,7 @@ class Name extends \Magento\Sales\Block\Adminhtml\Items\Column\Name
         \Magento\Framework\Registry $registry,
         \Magento\Catalog\Model\Product\OptionFactory $optionFactory,
         \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory,
-        \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory,
+        \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
         array $data = []
     ) {
         $this->_purchasedFactory = $purchasedFactory;
diff --git a/app/code/Magento/Downloadable/Block/Catalog/Product/Samples.php b/app/code/Magento/Downloadable/Block/Catalog/Product/Samples.php
index 179b2816b92e3e001b32ad04ff40d61861b07e2b..b2ac5bbd9e3a633d27992fae388893e6f3779896 100644
--- a/app/code/Magento/Downloadable/Block/Catalog/Product/Samples.php
+++ b/app/code/Magento/Downloadable/Block/Catalog/Product/Samples.php
@@ -8,7 +8,7 @@
 
 namespace Magento\Downloadable\Block\Catalog\Product;
 
-use Magento\Downloadable\Model\Resource\Sample;
+use Magento\Downloadable\Model\ResourceModel\Sample;
 
 /**
  * Downloadable Product Samples part block
diff --git a/app/code/Magento/Downloadable/Block/Customer/Products/ListProducts.php b/app/code/Magento/Downloadable/Block/Customer/Products/ListProducts.php
index 3e8fb6d11aed21b1134f3c3372ddc9abdcdd2ea7..bb4691a567533b6c02218b5c025f2acf6e06a2d9 100644
--- a/app/code/Magento/Downloadable/Block/Customer/Products/ListProducts.php
+++ b/app/code/Magento/Downloadable/Block/Customer/Products/ListProducts.php
@@ -23,27 +23,27 @@ class ListProducts extends \Magento\Framework\View\Element\Template
     protected $currentCustomer;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link\Purchased\CollectionFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\Link\Purchased\CollectionFactory
      */
     protected $_linksFactory;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory
      */
     protected $_itemsFactory;
 
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
      * @param \Magento\Customer\Helper\Session\CurrentCustomer $currentCustomer
-     * @param \Magento\Downloadable\Model\Resource\Link\Purchased\CollectionFactory $linksFactory
-     * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\CollectionFactory $linksFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
         \Magento\Customer\Helper\Session\CurrentCustomer $currentCustomer,
-        \Magento\Downloadable\Model\Resource\Link\Purchased\CollectionFactory $linksFactory,
-        \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory,
+        \Magento\Downloadable\Model\ResourceModel\Link\Purchased\CollectionFactory $linksFactory,
+        \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
         array $data = []
     ) {
         $this->currentCustomer = $currentCustomer;
diff --git a/app/code/Magento/Downloadable/Block/Sales/Order/Email/Items/Downloadable.php b/app/code/Magento/Downloadable/Block/Sales/Order/Email/Items/Downloadable.php
index 8084494aeddfc77e4ec85ec1cbae4b4b93e9fbe8..5d2eaa4b8e82ee32e3ae961dbd46cf001e696d7d 100644
--- a/app/code/Magento/Downloadable/Block/Sales/Order/Email/Items/Downloadable.php
+++ b/app/code/Magento/Downloadable/Block/Sales/Order/Email/Items/Downloadable.php
@@ -31,7 +31,7 @@ class Downloadable extends \Magento\Sales\Block\Order\Email\Items\DefaultItems
     protected $_purchasedFactory;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory
      */
     protected $_itemsFactory;
 
@@ -43,13 +43,13 @@ class Downloadable extends \Magento\Sales\Block\Order\Email\Items\DefaultItems
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
      * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory
-     * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
         \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory,
-        \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory,
+        \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
         array $data = []
     ) {
         $this->_purchasedFactory = $purchasedFactory;
diff --git a/app/code/Magento/Downloadable/Block/Sales/Order/Email/Items/Order/Downloadable.php b/app/code/Magento/Downloadable/Block/Sales/Order/Email/Items/Order/Downloadable.php
index 03f6daf5856c0ac81a79146d6cb51f10b6d9acc6..e1401c6258509504a798c948b4478bb9706ae02f 100644
--- a/app/code/Magento/Downloadable/Block/Sales/Order/Email/Items/Order/Downloadable.php
+++ b/app/code/Magento/Downloadable/Block/Sales/Order/Email/Items/Order/Downloadable.php
@@ -30,20 +30,20 @@ class Downloadable extends \Magento\Sales\Block\Order\Email\Items\Order\DefaultO
     protected $_purchasedFactory;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory
      */
     protected $_itemsFactory;
 
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
      * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory
-     * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
         \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory,
-        \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory,
+        \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
         array $data = []
     ) {
         $this->_purchasedFactory = $purchasedFactory;
diff --git a/app/code/Magento/Downloadable/Block/Sales/Order/Item/Renderer/Downloadable.php b/app/code/Magento/Downloadable/Block/Sales/Order/Item/Renderer/Downloadable.php
index 006a4271a4114cc0f4eedb5a9fe03a7c5d62785a..6f472a08873844fb0b7c420f6aa98b25c01a458b 100644
--- a/app/code/Magento/Downloadable/Block/Sales/Order/Item/Renderer/Downloadable.php
+++ b/app/code/Magento/Downloadable/Block/Sales/Order/Item/Renderer/Downloadable.php
@@ -28,7 +28,7 @@ class Downloadable extends \Magento\Sales\Block\Order\Item\Renderer\DefaultRende
     protected $_purchasedFactory;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory
      */
     protected $_itemsFactory;
 
@@ -37,7 +37,7 @@ class Downloadable extends \Magento\Sales\Block\Order\Item\Renderer\DefaultRende
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory
      * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory
-     * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
      * @param array $data
      */
     public function __construct(
@@ -45,7 +45,7 @@ class Downloadable extends \Magento\Sales\Block\Order\Item\Renderer\DefaultRende
         \Magento\Framework\Stdlib\StringUtils $string,
         \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory,
         \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory,
-        \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory,
+        \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
         array $data = []
     ) {
         $this->_purchasedFactory = $purchasedFactory;
diff --git a/app/code/Magento/Downloadable/Model/Link.php b/app/code/Magento/Downloadable/Model/Link.php
index 3942fe6db5a4e649f17be859fff41fa88121e765..bfc7c484ffe3a197338802e7a4138d4bdd199b2d 100644
--- a/app/code/Magento/Downloadable/Model/Link.php
+++ b/app/code/Magento/Downloadable/Model/Link.php
@@ -6,7 +6,7 @@
 namespace Magento\Downloadable\Model;
 
 use Magento\Downloadable\Api\Data\LinkInterface;
-use Magento\Downloadable\Model\Resource\Link as Resource;
+use Magento\Downloadable\Model\ResourceModel\Link as Resource;
 
 /**
  * Downloadable link model
@@ -56,7 +56,7 @@ class Link extends \Magento\Framework\Model\AbstractExtensibleModel implements C
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -65,7 +65,7 @@ class Link extends \Magento\Framework\Model\AbstractExtensibleModel implements C
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -87,7 +87,7 @@ class Link extends \Magento\Framework\Model\AbstractExtensibleModel implements C
      */
     protected function _construct()
     {
-        $this->_init('Magento\Downloadable\Model\Resource\Link');
+        $this->_init('Magento\Downloadable\Model\ResourceModel\Link');
         parent::_construct();
     }
 
diff --git a/app/code/Magento/Downloadable/Model/Link/Purchased.php b/app/code/Magento/Downloadable/Model/Link/Purchased.php
index c82de66bdd83eca045667eea7199821b7cfde3b4..6c0325f7ceee8a458e1289626c347eb7a933d11a 100644
--- a/app/code/Magento/Downloadable/Model/Link/Purchased.php
+++ b/app/code/Magento/Downloadable/Model/Link/Purchased.php
@@ -8,8 +8,8 @@ namespace Magento\Downloadable\Model\Link;
 /**
  * Downloadable links purchased model
  *
- * @method \Magento\Downloadable\Model\Resource\Link\Purchased _getResource()
- * @method \Magento\Downloadable\Model\Resource\Link\Purchased getResource()
+ * @method \Magento\Downloadable\Model\ResourceModel\Link\Purchased _getResource()
+ * @method \Magento\Downloadable\Model\ResourceModel\Link\Purchased getResource()
  * @method int getOrderId()
  * @method \Magento\Downloadable\Model\Link\Purchased setOrderId(int $value)
  * @method string getOrderIncrementId()
@@ -40,7 +40,7 @@ class Purchased extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Downloadable\Model\Resource\Link\Purchased');
+        $this->_init('Magento\Downloadable\Model\ResourceModel\Link\Purchased');
         parent::_construct();
     }
 
diff --git a/app/code/Magento/Downloadable/Model/Link/Purchased/Item.php b/app/code/Magento/Downloadable/Model/Link/Purchased/Item.php
index f9ab37d7685914a9ca145192e5ba21290900a9b7..61b96e1219ea0ec2072154f880645e444ef04bc8 100644
--- a/app/code/Magento/Downloadable/Model/Link/Purchased/Item.php
+++ b/app/code/Magento/Downloadable/Model/Link/Purchased/Item.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Downloadable\Model\Link\Purchased;
 
-use Magento\Downloadable\Model\Resource\Link\Purchased\Item as Resource;
+use Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item as Resource;
 
 /**
  * Downloadable links purchased item model
@@ -66,7 +66,7 @@ class Item extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Downloadable\Model\Resource\Link\Purchased\Item');
+        $this->_init('Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item');
         parent::_construct();
     }
 
diff --git a/app/code/Magento/Downloadable/Model/Product/Type.php b/app/code/Magento/Downloadable/Model/Product/Type.php
index 5f3ae6140d7ffefb3ef44542e045bdebdb81138b..a85a58375b044a9ad92eb04b159947b90f75bc9e 100644
--- a/app/code/Magento/Downloadable/Model/Product/Type.php
+++ b/app/code/Magento/Downloadable/Model/Product/Type.php
@@ -26,22 +26,22 @@ class Type extends \Magento\Catalog\Model\Product\Type\Virtual
     protected $_downloadableFile = null;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\SampleFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\SampleFactory
      */
     protected $_sampleResFactory;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link
+     * @var \Magento\Downloadable\Model\ResourceModel\Link
      */
     protected $_linkResource;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link\CollectionFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\Link\CollectionFactory
      */
     protected $_linksFactory;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Sample\CollectionFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\Sample\CollectionFactory
      */
     protected $_samplesFactory;
 
@@ -77,10 +77,10 @@ class Type extends \Magento\Catalog\Model\Product\Type\Virtual
      * @param \Magento\Framework\Registry $coreRegistry
      * @param \Psr\Log\LoggerInterface $logger
      * @param ProductRepositoryInterface $productRepository
-     * @param \Magento\Downloadable\Model\Resource\SampleFactory $sampleResFactory
-     * @param \Magento\Downloadable\Model\Resource\Link $linkResource
-     * @param \Magento\Downloadable\Model\Resource\Link\CollectionFactory $linksFactory
-     * @param \Magento\Downloadable\Model\Resource\Sample\CollectionFactory $samplesFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\SampleFactory $sampleResFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\Link $linkResource
+     * @param \Magento\Downloadable\Model\ResourceModel\Link\CollectionFactory $linksFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\Sample\CollectionFactory $samplesFactory
      * @param \Magento\Downloadable\Model\SampleFactory $sampleFactory
      * @param \Magento\Downloadable\Model\LinkFactory $linkFactory
      * @param TypeHandler\TypeHandlerInterface $typeHandler
@@ -97,10 +97,10 @@ class Type extends \Magento\Catalog\Model\Product\Type\Virtual
         \Magento\Framework\Registry $coreRegistry,
         \Psr\Log\LoggerInterface $logger,
         ProductRepositoryInterface $productRepository,
-        \Magento\Downloadable\Model\Resource\SampleFactory $sampleResFactory,
-        \Magento\Downloadable\Model\Resource\Link $linkResource,
-        \Magento\Downloadable\Model\Resource\Link\CollectionFactory $linksFactory,
-        \Magento\Downloadable\Model\Resource\Sample\CollectionFactory $samplesFactory,
+        \Magento\Downloadable\Model\ResourceModel\SampleFactory $sampleResFactory,
+        \Magento\Downloadable\Model\ResourceModel\Link $linkResource,
+        \Magento\Downloadable\Model\ResourceModel\Link\CollectionFactory $linksFactory,
+        \Magento\Downloadable\Model\ResourceModel\Sample\CollectionFactory $samplesFactory,
         \Magento\Downloadable\Model\SampleFactory $sampleFactory,
         \Magento\Downloadable\Model\LinkFactory $linkFactory,
         \Magento\Downloadable\Model\Product\TypeHandler\TypeHandlerInterface $typeHandler,
@@ -136,7 +136,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\Virtual
     public function getLinks($product)
     {
         if ($product->getDownloadableLinks() === null) {
-            /** @var \Magento\Downloadable\Model\Resource\Link\Collection $linkCollection */
+            /** @var \Magento\Downloadable\Model\ResourceModel\Link\Collection $linkCollection */
             $linkCollection = $this->_linksFactory->create()->addProductToFilter(
                 $product->getId()
             )->addTitleToResult(
@@ -208,7 +208,7 @@ class Type extends \Magento\Catalog\Model\Product\Type\Virtual
      * Get downloadable product samples
      *
      * @param \Magento\Catalog\Model\Product $product
-     * @return \Magento\Downloadable\Model\Resource\Sample\Collection
+     * @return \Magento\Downloadable\Model\ResourceModel\Sample\Collection
      */
     public function getSamples($product)
     {
diff --git a/app/code/Magento/Downloadable/Model/Product/TypeHandler/Link.php b/app/code/Magento/Downloadable/Model/Product/TypeHandler/Link.php
index 959d620e1d1b5048525696d8e3635d2050c5a5d3..094ec6e9c62435f87b6b1fc99df38c1aade2090e 100644
--- a/app/code/Magento/Downloadable/Model/Product/TypeHandler/Link.php
+++ b/app/code/Magento/Downloadable/Model/Product/TypeHandler/Link.php
@@ -24,7 +24,7 @@ class Link extends AbstractTypeHandler
     private $linkFactory;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link
+     * @var \Magento\Downloadable\Model\ResourceModel\Link
      */
     private $linkResource;
 
@@ -32,13 +32,13 @@ class Link extends AbstractTypeHandler
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
      * @param \Magento\Downloadable\Helper\File $downloadableFile
      * @param \Magento\Downloadable\Model\ComponentInterfaceFactory $linkFactory
-     * @param \Magento\Downloadable\Model\Resource\Link $linkResource
+     * @param \Magento\Downloadable\Model\ResourceModel\Link $linkResource
      */
     public function __construct(
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         \Magento\Downloadable\Helper\File $downloadableFile,
         \Magento\Downloadable\Model\LinkFactory $linkFactory,
-        \Magento\Downloadable\Model\Resource\Link $linkResource
+        \Magento\Downloadable\Model\ResourceModel\Link $linkResource
     ) {
         parent::__construct($jsonHelper, $downloadableFile);
         $this->linkFactory = $linkFactory;
diff --git a/app/code/Magento/Downloadable/Model/Product/TypeHandler/Sample.php b/app/code/Magento/Downloadable/Model/Product/TypeHandler/Sample.php
index 6e4ac0cd73368f927ff54dd47581a89b90e0202c..96bdc852d862b4b3273566d8b13f5f0e332d9429 100644
--- a/app/code/Magento/Downloadable/Model/Product/TypeHandler/Sample.php
+++ b/app/code/Magento/Downloadable/Model/Product/TypeHandler/Sample.php
@@ -19,7 +19,7 @@ class Sample extends AbstractTypeHandler
     private $sampleFactory;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\SampleFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\SampleFactory
      */
     private $sampleResourceFactory;
 
@@ -27,13 +27,13 @@ class Sample extends AbstractTypeHandler
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
      * @param \Magento\Downloadable\Helper\File $downloadableFile
      * @param \Magento\Downloadable\Model\SampleFactory $sampleFactory
-     * @param \Magento\Downloadable\Model\Resource\SampleFactory $sampleResourceFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\SampleFactory $sampleResourceFactory
      */
     public function __construct(
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         \Magento\Downloadable\Helper\File $downloadableFile,
         \Magento\Downloadable\Model\SampleFactory $sampleFactory,
-        \Magento\Downloadable\Model\Resource\SampleFactory $sampleResourceFactory
+        \Magento\Downloadable\Model\ResourceModel\SampleFactory $sampleResourceFactory
     ) {
         parent::__construct($jsonHelper, $downloadableFile);
         $this->sampleFactory = $sampleFactory;
diff --git a/app/code/Magento/Downloadable/Model/Resource/Indexer/Price.php b/app/code/Magento/Downloadable/Model/ResourceModel/Indexer/Price.php
similarity index 95%
rename from app/code/Magento/Downloadable/Model/Resource/Indexer/Price.php
rename to app/code/Magento/Downloadable/Model/ResourceModel/Indexer/Price.php
index 3a06503673745993f45d53f5bcf32324efd06783..7ccbfcd28274eb76b02d53cc4ab282a9ae8f8202 100644
--- a/app/code/Magento/Downloadable/Model/Resource/Indexer/Price.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Indexer/Price.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Downloadable\Model\Resource\Indexer;
+namespace Magento\Downloadable\Model\ResourceModel\Indexer;
 
 /**
  * Downloadable products Price indexer resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Price extends \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice
+class Price extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice
 {
     /**
      * Reindex temporary (price result data) for all products
@@ -45,7 +45,7 @@ class Price extends \Magento\Catalog\Model\Resource\Product\Indexer\Price\Defaul
 
     /**
      * @param null|int|array $entityIds
-     * @return \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice
      */
     protected function reindex($entityIds = null)
     {
diff --git a/app/code/Magento/Downloadable/Model/Resource/Link.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link.php
similarity index 96%
rename from app/code/Magento/Downloadable/Model/Resource/Link.php
rename to app/code/Magento/Downloadable/Model/ResourceModel/Link.php
index fa666924d08c0f83a9b7006adaa62a821bbe0ae2..04652bee14cef646f781c5dbfe2ce1696896fa7b 100644
--- a/app/code/Magento/Downloadable/Model/Resource/Link.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Downloadable\Model\Resource;
+namespace Magento\Downloadable\Model\ResourceModel;
 
 /**
  * Downloadable Product  Samples resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Link extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Link extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Catalog data
@@ -35,7 +35,7 @@ class Link extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Catalog\Helper\Data $catalogData
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $configuration
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
@@ -43,7 +43,7 @@ class Link extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Catalog\Helper\Data $catalogData,
         \Magento\Framework\App\Config\ScopeConfigInterface $configuration,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
diff --git a/app/code/Magento/Downloadable/Model/Resource/Link/Collection.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Collection.php
similarity index 92%
rename from app/code/Magento/Downloadable/Model/Resource/Link/Collection.php
rename to app/code/Magento/Downloadable/Model/ResourceModel/Link/Collection.php
index 340d19944f2117953f6553b9e239f5721ceecf7c..37e85d665b7dcb5d5f7f21c2a5cf71f3209c2728 100644
--- a/app/code/Magento/Downloadable/Model/Resource/Link/Collection.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Downloadable\Model\Resource\Link;
+namespace Magento\Downloadable\Model\ResourceModel\Link;
 
 /**
  * Downloadable links resource collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init resource model
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Downloadable\Model\Link', 'Magento\Downloadable\Model\Resource\Link');
+        $this->_init('Magento\Downloadable\Model\Link', 'Magento\Downloadable\Model\ResourceModel\Link');
     }
 
     /**
diff --git a/app/code/Magento/Downloadable/Model/Resource/Link/Purchased.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased.php
similarity index 76%
rename from app/code/Magento/Downloadable/Model/Resource/Link/Purchased.php
rename to app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased.php
index 15cbe9d9c0458b3602f59f568155bd5a926bb5e7..1b108de2f30965256e8fcaec5158a045cde3488a 100644
--- a/app/code/Magento/Downloadable/Model/Resource/Link/Purchased.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Downloadable\Model\Resource\Link;
+namespace Magento\Downloadable\Model\ResourceModel\Link;
 
 /**
  * Downloadable Product link purchased resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Purchased extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Purchased extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Magento class constructor
diff --git a/app/code/Magento/Downloadable/Model/Resource/Link/Purchased/Collection.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Collection.php
similarity index 77%
rename from app/code/Magento/Downloadable/Model/Resource/Link/Purchased/Collection.php
rename to app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Collection.php
index de9b76a84a2e58c4197db59812e6e1de5ecc2220..d7510b23074d84747e69b7be557d5b6d2c50323e 100644
--- a/app/code/Magento/Downloadable/Model/Resource/Link/Purchased/Collection.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Downloadable\Model\Resource\Link\Purchased;
+namespace Magento\Downloadable\Model\ResourceModel\Link\Purchased;
 
 /**
  * Downloadable links purchased resource collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init resource model
@@ -21,7 +21,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     {
         $this->_init(
             'Magento\Downloadable\Model\Link\Purchased',
-            'Magento\Downloadable\Model\Resource\Link\Purchased'
+            'Magento\Downloadable\Model\ResourceModel\Link\Purchased'
         );
     }
 
diff --git a/app/code/Magento/Downloadable/Model/Resource/Link/Purchased/Item.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item.php
similarity index 75%
rename from app/code/Magento/Downloadable/Model/Resource/Link/Purchased/Item.php
rename to app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item.php
index d191d5fcea1bf7a84cc37c47f4b9dcbc62826907..3252860648496c096080c3e62ccb571c2ec60c4e 100644
--- a/app/code/Magento/Downloadable/Model/Resource/Link/Purchased/Item.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Downloadable\Model\Resource\Link\Purchased;
+namespace Magento\Downloadable\Model\ResourceModel\Link\Purchased;
 
 /**
  * Downloadable Product link purchased items resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Item extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Magento class constructor
diff --git a/app/code/Magento/Downloadable/Model/Resource/Link/Purchased/Item/Collection.php b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item/Collection.php
similarity index 64%
rename from app/code/Magento/Downloadable/Model/Resource/Link/Purchased/Item/Collection.php
rename to app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item/Collection.php
index dab67bac68b442dc3fe112e7bfbd9e6bd80dd868..632015fec2ad906bb140b87d2b73b5d3b64c0374 100644
--- a/app/code/Magento/Downloadable/Model/Resource/Link/Purchased/Item/Collection.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Link/Purchased/Item/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Downloadable\Model\Resource\Link\Purchased\Item;
+namespace Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item;
 
 /**
  * Downloadable links purchased items resource collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init resource model
@@ -21,7 +21,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     {
         $this->_init(
             'Magento\Downloadable\Model\Link\Purchased\Item',
-            'Magento\Downloadable\Model\Resource\Link\Purchased\Item'
+            'Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item'
         );
     }
 }
diff --git a/app/code/Magento/Downloadable/Model/Resource/Sample.php b/app/code/Magento/Downloadable/Model/ResourceModel/Sample.php
similarity index 96%
rename from app/code/Magento/Downloadable/Model/Resource/Sample.php
rename to app/code/Magento/Downloadable/Model/ResourceModel/Sample.php
index edf9ef420112b1e95d0728ab9acf30f63986929c..df1708786960ece7e9fa289205da3d250da4ed30 100644
--- a/app/code/Magento/Downloadable/Model/Resource/Sample.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Sample.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Downloadable\Model\Resource;
+namespace Magento\Downloadable\Model\ResourceModel;
 
 /**
  * Downloadable Product  Samples resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Sample extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Sample extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection
diff --git a/app/code/Magento/Downloadable/Model/Resource/Sample/Collection.php b/app/code/Magento/Downloadable/Model/ResourceModel/Sample/Collection.php
similarity index 89%
rename from app/code/Magento/Downloadable/Model/Resource/Sample/Collection.php
rename to app/code/Magento/Downloadable/Model/ResourceModel/Sample/Collection.php
index 8dc06d8ddf5a41491d08bc080d8ada3ce68978f3..8a5878d95e5c94f74eef2176b7d39415ca8c0cf7 100644
--- a/app/code/Magento/Downloadable/Model/Resource/Sample/Collection.php
+++ b/app/code/Magento/Downloadable/Model/ResourceModel/Sample/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Downloadable\Model\Resource\Sample;
+namespace Magento\Downloadable\Model\ResourceModel\Sample;
 
 /**
  * Downloadable samples resource collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init resource model
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Downloadable\Model\Sample', 'Magento\Downloadable\Model\Resource\Sample');
+        $this->_init('Magento\Downloadable\Model\Sample', 'Magento\Downloadable\Model\ResourceModel\Sample');
     }
 
     /**
diff --git a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php
index 368e87d057346d61a6c8ff04ba94208576cf49b8..fcfc62e908747b3f4c01da458084e8301d4bf285 100644
--- a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php
+++ b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/AbstractItems.php
@@ -34,7 +34,7 @@ abstract class AbstractItems extends \Magento\Sales\Model\Order\Pdf\Items\Abstra
     protected $_purchasedFactory;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory
      */
     protected $_itemsFactory;
 
@@ -46,8 +46,8 @@ abstract class AbstractItems extends \Magento\Sales\Model\Order\Pdf\Items\Abstra
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory
-     * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -60,8 +60,8 @@ abstract class AbstractItems extends \Magento\Sales\Model\Order\Pdf\Items\Abstra
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory,
-        \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php
index 09b443ba42685ca6f66dc9f3e229ba84ed45d1b5..ea563923353fecf8c9e2d2b5c618aa50406f332f 100644
--- a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php
+++ b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Creditmemo.php
@@ -23,9 +23,9 @@ class Creditmemo extends \Magento\Downloadable\Model\Sales\Order\Pdf\Items\Abstr
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory
-     * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -38,9 +38,9 @@ class Creditmemo extends \Magento\Downloadable\Model\Sales\Order\Pdf\Items\Abstr
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory,
-        \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory,
+        \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php
index a6f4343baced91b6b8996888ea9154e45c9396ba..952932d1258e567aa2e900328f6e788640b3003e 100644
--- a/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php
+++ b/app/code/Magento/Downloadable/Model/Sales/Order/Pdf/Items/Invoice.php
@@ -23,9 +23,9 @@ class Invoice extends \Magento\Downloadable\Model\Sales\Order\Pdf\Items\Abstract
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory
-     * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -38,9 +38,9 @@ class Invoice extends \Magento\Downloadable\Model\Sales\Order\Pdf\Items\Abstract
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory,
-        \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory,
+        \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Downloadable/Model/Sample.php b/app/code/Magento/Downloadable/Model/Sample.php
index c8fe44159d1a54b88d494d2c1d39ab0ae486bd30..3fcc4cebb82ef7683a1a1a1ec6f179ce3d4e4041 100644
--- a/app/code/Magento/Downloadable/Model/Sample.php
+++ b/app/code/Magento/Downloadable/Model/Sample.php
@@ -10,8 +10,8 @@ use Magento\Downloadable\Api\Data\SampleInterface;
 /**
  * Downloadable sample model
  *
- * @method \Magento\Downloadable\Model\Resource\Sample _getResource()
- * @method \Magento\Downloadable\Model\Resource\Sample getResource()
+ * @method \Magento\Downloadable\Model\ResourceModel\Sample _getResource()
+ * @method \Magento\Downloadable\Model\ResourceModel\Sample getResource()
  * @method int getProductId()
  *
  * @author      Magento Core Team <core@magentocommerce.com>
@@ -36,7 +36,7 @@ class Sample extends \Magento\Framework\Model\AbstractExtensibleModel implements
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -45,7 +45,7 @@ class Sample extends \Magento\Framework\Model\AbstractExtensibleModel implements
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -67,7 +67,7 @@ class Sample extends \Magento\Framework\Model\AbstractExtensibleModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Downloadable\Model\Resource\Sample');
+        $this->_init('Magento\Downloadable\Model\ResourceModel\Sample');
         parent::_construct();
     }
 
diff --git a/app/code/Magento/Downloadable/Observer/SaveDownloadableOrderItemObserver.php b/app/code/Magento/Downloadable/Observer/SaveDownloadableOrderItemObserver.php
index 756a46432aa772e4a7c2e7f2d2ef62e7ae5284f9..6f8fd2fe8e2220e6b09e7bebc1781afa9f8649c4 100644
--- a/app/code/Magento/Downloadable/Observer/SaveDownloadableOrderItemObserver.php
+++ b/app/code/Magento/Downloadable/Observer/SaveDownloadableOrderItemObserver.php
@@ -41,7 +41,7 @@ class SaveDownloadableOrderItemObserver implements ObserverInterface
     protected $_objectCopyService;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory
      */
     protected $_itemsFactory;
 
@@ -50,7 +50,7 @@ class SaveDownloadableOrderItemObserver implements ObserverInterface
      * @param \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
      * @param \Magento\Downloadable\Model\Link\Purchased\ItemFactory $itemFactory
-     * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
      * @param \Magento\Framework\DataObject\Copy $objectCopyService
      */
     public function __construct(
@@ -58,7 +58,7 @@ class SaveDownloadableOrderItemObserver implements ObserverInterface
         \Magento\Downloadable\Model\Link\PurchasedFactory $purchasedFactory,
         \Magento\Catalog\Model\ProductFactory $productFactory,
         \Magento\Downloadable\Model\Link\Purchased\ItemFactory $itemFactory,
-        \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory,
+        \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory,
         \Magento\Framework\DataObject\Copy $objectCopyService
     ) {
         $this->_scopeConfig = $scopeConfig;
@@ -190,7 +190,7 @@ class SaveDownloadableOrderItemObserver implements ObserverInterface
     }
 
     /**
-     * @return \Magento\Downloadable\Model\Resource\Link\Purchased\Item\Collection
+     * @return \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\Collection
      */
     protected function _createItemsCollection()
     {
diff --git a/app/code/Magento/Downloadable/Observer/SetLinkStatusObserver.php b/app/code/Magento/Downloadable/Observer/SetLinkStatusObserver.php
index 082635382599ada07dda690af2c7c981f635590b..b4387259110bb8b9e7891c9198788d5fefeb4788 100644
--- a/app/code/Magento/Downloadable/Observer/SetLinkStatusObserver.php
+++ b/app/code/Magento/Downloadable/Observer/SetLinkStatusObserver.php
@@ -18,17 +18,17 @@ class SetLinkStatusObserver implements ObserverInterface
     protected $_scopeConfig;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory
+     * @var \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory
      */
     protected $_itemsFactory;
 
     /**
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
-     * @param \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory
+     * @param \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
      */
     public function __construct(
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory $itemsFactory
+        \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory $itemsFactory
     ) {
         $this->_scopeConfig = $scopeConfig;
         $this->_itemsFactory = $itemsFactory;
@@ -146,7 +146,7 @@ class SetLinkStatusObserver implements ObserverInterface
     }
 
     /**
-     * @return \Magento\Downloadable\Model\Resource\Link\Purchased\Item\Collection
+     * @return \Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\Collection
      */
     protected function _createItemsCollection()
     {
diff --git a/app/code/Magento/Downloadable/Setup/InstallData.php b/app/code/Magento/Downloadable/Setup/InstallData.php
index ef18bb25f1d18b0402dfd1518cfc33005d5aef39..28b92d361ce2c926c445bac20c57b9ca94253459 100644
--- a/app/code/Magento/Downloadable/Setup/InstallData.php
+++ b/app/code/Magento/Downloadable/Setup/InstallData.php
@@ -56,7 +56,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
                 'visible' => false,
                 'required' => true,
                 'user_defined' => false,
@@ -82,7 +82,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                 'visible' => false,
                 'required' => true,
                 'user_defined' => false,
@@ -107,7 +107,7 @@ class InstallData implements InstallDataInterface
                 'input' => '',
                 'class' => '',
                 'source' => '',
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                 'visible' => false,
                 'required' => true,
                 'user_defined' => false,
diff --git a/app/code/Magento/Downloadable/Test/Unit/Block/Adminhtml/Sales/Items/Column/Downloadable/NameTest.php b/app/code/Magento/Downloadable/Test/Unit/Block/Adminhtml/Sales/Items/Column/Downloadable/NameTest.php
index c5641d1dd96693211dc3a150c3eb304527eef4d8..3e830dd68969a8b753b0acc43c6c8ecb1d3413c4 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Block/Adminhtml/Sales/Items/Column/Downloadable/NameTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Block/Adminhtml/Sales/Items/Column/Downloadable/NameTest.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Downloadable\Test\Unit\Block\Adminhtml\Sales\Items\Column\Downloadable;
 
-use Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory;
+use Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory;
 
 /**
  * Tests Magento\Downloadable\Block\Adminhtml\Sales\Items\Column\Downloadable\Name
@@ -39,7 +39,7 @@ class NameTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['create'])
             ->getMock();
         $this->itemsFactory = $this->getMockBuilder(
-            'Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory'
+            'Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory'
         )
             ->disableOriginalConstructor()
             ->setMethods(['create'])
@@ -65,7 +65,8 @@ class NameTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['load'])
             ->getMock();
-        $itemCollection = $this->getMockBuilder('Magento\Downloadable\Model\Resource\Link\Purchased\Item\Collection')
+        $itemCollection =
+            $this->getMockBuilder('Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['addFieldToFilter'])
             ->getMock();
diff --git a/app/code/Magento/Downloadable/Test/Unit/Block/Sales/Order/Email/Items/DownloadableTest.php b/app/code/Magento/Downloadable/Test/Unit/Block/Sales/Order/Email/Items/DownloadableTest.php
index d5826f3ab8620c8819f5f1bbe3213b6c3126fcdd..e4d09a80548ea933147c9a55858b1cbcf99b9a1b 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Block/Sales/Order/Email/Items/DownloadableTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Block/Sales/Order/Email/Items/DownloadableTest.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Downloadable\Test\Unit\Block\Sales\Order\Email\Items;
 
-use Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory;
+use Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory;
 
 /**
  * Tests Magento\Downloadable\Test\Unit\Block\Sales\Order\Email\Items\Downloadable
@@ -39,7 +39,7 @@ class DownloadableTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['create'])
             ->getMock();
         $this->itemsFactory = $this->getMockBuilder(
-            'Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory'
+            'Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory'
         )
             ->disableOriginalConstructor()
             ->setMethods(['create'])
@@ -65,7 +65,8 @@ class DownloadableTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['load'])
             ->getMock();
-        $itemCollection = $this->getMockBuilder('Magento\Downloadable\Model\Resource\Link\Purchased\Item\Collection')
+        $itemCollection =
+            $this->getMockBuilder('Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['addFieldToFilter'])
             ->getMock();
diff --git a/app/code/Magento/Downloadable/Test/Unit/Block/Sales/Order/Email/Items/Order/DownloadableTest.php b/app/code/Magento/Downloadable/Test/Unit/Block/Sales/Order/Email/Items/Order/DownloadableTest.php
index ca5a5aebe9ca1e72f2cd663502de09cbd111329b..98a6297967636db91fdec23dc25c3ecb2e1caba0 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Block/Sales/Order/Email/Items/Order/DownloadableTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Block/Sales/Order/Email/Items/Order/DownloadableTest.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Downloadable\Test\Unit\Block\Sales\Order\Email\Items\Order;
 
-use Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory;
+use Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory;
 
 /**
  * Tests Magento\Downloadable\Test\Unit\Block\Sales\Order\Email\Items\Order\Downloadable
@@ -39,7 +39,7 @@ class DownloadableTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['create'])
             ->getMock();
         $this->itemsFactory = $this->getMockBuilder(
-            'Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory'
+            'Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory'
         )
             ->disableOriginalConstructor()
             ->setMethods(['create'])
@@ -65,7 +65,8 @@ class DownloadableTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['load'])
             ->getMock();
-        $itemCollection = $this->getMockBuilder('Magento\Downloadable\Model\Resource\Link\Purchased\Item\Collection')
+        $itemCollection =
+            $this->getMockBuilder('Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['addFieldToFilter'])
             ->getMock();
diff --git a/app/code/Magento/Downloadable/Test/Unit/Block/Sales/Order/Item/Renderer/DownloadableTest.php b/app/code/Magento/Downloadable/Test/Unit/Block/Sales/Order/Item/Renderer/DownloadableTest.php
index 557ece057d31d0a3f932a788e513c1523eb66462..f0565e723073ac3ed04e6248a2726404c4fb4de9 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Block/Sales/Order/Item/Renderer/DownloadableTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Block/Sales/Order/Item/Renderer/DownloadableTest.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Downloadable\Test\Unit\Block\Sales\Order\Item\Renderer;
 
-use Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory;
+use Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory;
 
 /**
  * Tests Magento\Downloadable\Test\Unit\Block\Sales\Order\Item\Renderer\Downloadable
@@ -39,7 +39,7 @@ class DownloadableTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['create'])
             ->getMock();
         $this->itemsFactory = $this->getMockBuilder(
-            'Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory'
+            'Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory'
         )
             ->disableOriginalConstructor()
             ->setMethods(['create'])
@@ -65,7 +65,8 @@ class DownloadableTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['load'])
             ->getMock();
-        $itemCollection = $this->getMockBuilder('Magento\Downloadable\Model\Resource\Link\Purchased\Item\Collection')
+        $itemCollection =
+            $this->getMockBuilder('Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['addFieldToFilter'])
             ->getMock();
diff --git a/app/code/Magento/Downloadable/Test/Unit/Model/Product/TypeHandler/LinkTest.php b/app/code/Magento/Downloadable/Test/Unit/Model/Product/TypeHandler/LinkTest.php
index a644236288de33add61b89c4815dd8e65df85f48..d523d59dcd1ab4df611dc24728dad47c4ac11d33 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Model/Product/TypeHandler/LinkTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Model/Product/TypeHandler/LinkTest.php
@@ -14,7 +14,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
 {
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Downloadable\Model\ResourceModel\Link|\PHPUnit_Framework_MockObject_MockObject
      */
     private $linkResource;
 
@@ -35,7 +35,7 @@ class LinkTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $this->linkResource = $this->getMockBuilder('\Magento\Downloadable\Model\Resource\Link')
+        $this->linkResource = $this->getMockBuilder('\Magento\Downloadable\Model\ResourceModel\Link')
             ->disableOriginalConstructor()
             ->setMethods(['deleteItems'])
             ->getMock();
diff --git a/app/code/Magento/Downloadable/Test/Unit/Model/Product/TypeHandler/SampleTest.php b/app/code/Magento/Downloadable/Test/Unit/Model/Product/TypeHandler/SampleTest.php
index c716b57434312de21707b744655dfda785ed1a6a..86fcec0ce443673a9738c120f177db5866438ec2 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Model/Product/TypeHandler/SampleTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Model/Product/TypeHandler/SampleTest.php
@@ -14,7 +14,7 @@ class SampleTest extends \PHPUnit_Framework_TestCase
 {
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Downloadable\Model\ResourceModel\Link|\PHPUnit_Framework_MockObject_MockObject
      */
     private $sampleResource;
 
@@ -35,11 +35,11 @@ class SampleTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $this->sampleResource = $this->getMockBuilder('\Magento\Downloadable\Model\Resource\Sample')
+        $this->sampleResource = $this->getMockBuilder('\Magento\Downloadable\Model\ResourceModel\Sample')
             ->disableOriginalConstructor()
             ->setMethods(['deleteItems'])
             ->getMock();
-        $sampleResourceFactory = $this->getMockBuilder('\Magento\Downloadable\Model\Resource\SampleFactory')
+        $sampleResourceFactory = $this->getMockBuilder('\Magento\Downloadable\Model\ResourceModel\SampleFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
diff --git a/app/code/Magento/Downloadable/Test/Unit/Model/Product/TypeTest.php b/app/code/Magento/Downloadable/Test/Unit/Model/Product/TypeTest.php
index 3d9522b0b57f6da0f788feaf01e4f68d4c920c8d..3e623660451b71cad2b89d82a4382268fe4a3f61 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Model/Product/TypeTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Model/Product/TypeTest.php
@@ -43,11 +43,17 @@ class TypeTest extends \PHPUnit_Framework_TestCase
         $coreRegistry = $this->getMock('Magento\Framework\Registry', [], [], '', false);
         $logger = $this->getMock('Psr\Log\LoggerInterface');
         $productFactoryMock = $this->getMock('Magento\Catalog\Model\ProductFactory', [], [], '', false);
-        $sampleResFactory = $this->getMock('Magento\Downloadable\Model\Resource\SampleFactory', [], [], '', false);
-        $linkResource = $this->getMock('Magento\Downloadable\Model\Resource\Link', [], [], '', false);
-        $linksFactory = $this->getMock('Magento\Downloadable\Model\Resource\Link\CollectionFactory', [], [], '', false);
+        $sampleResFactory = $this->getMock('Magento\Downloadable\Model\ResourceModel\SampleFactory', [], [], '', false);
+        $linkResource = $this->getMock('Magento\Downloadable\Model\ResourceModel\Link', [], [], '', false);
+        $linksFactory = $this->getMock(
+            'Magento\Downloadable\Model\ResourceModel\Link\CollectionFactory',
+            [],
+            [],
+            '',
+            false
+        );
         $samplesFactory = $this->getMock(
-            'Magento\Downloadable\Model\Resource\Sample\CollectionFactory',
+            'Magento\Downloadable\Model\ResourceModel\Sample\CollectionFactory',
             [],
             [],
             '',
@@ -58,7 +64,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
 
         $entityTypeMock = $this->getMock('Magento\Eav\Model\Entity\Type', [], [], '', false);
         $resourceProductMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product',
+            'Magento\Catalog\Model\ResourceModel\Product',
             ['getEntityType'],
             [],
             '',
diff --git a/app/code/Magento/Downloadable/Test/Unit/Model/Sales/Order/Pdf/Items/CreditmemoTest.php b/app/code/Magento/Downloadable/Test/Unit/Model/Sales/Order/Pdf/Items/CreditmemoTest.php
index 022d621aa91fb290198c67ebb8a8786be4c4bca6..9a162a8f477d6ab079e51b0e9dee02087a62fede 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Model/Sales/Order/Pdf/Items/CreditmemoTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Model/Sales/Order/Pdf/Items/CreditmemoTest.php
@@ -28,7 +28,7 @@ class CreditmemoTest extends \PHPUnit_Framework_TestCase
         $arguments = [
             'productFactory' => $this->getMock('Magento\Catalog\Model\ProductFactory', [], [], '', false),
             'orderItemCollectionFactory' => $this->getMock(
-                'Magento\Sales\Model\Resource\Order\Item\CollectionFactory',
+                'Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory',
                 [],
                 [],
                 '',
@@ -56,7 +56,7 @@ class CreditmemoTest extends \PHPUnit_Framework_TestCase
                 false
             ),
             'orderTaxCollectionFactory' => $this->getMock(
-                'Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory',
+                'Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory',
                 [],
                 [],
                 '',
diff --git a/app/code/Magento/Downloadable/Test/Unit/Observer/IsAllowedGuestCheckoutObserverTest.php b/app/code/Magento/Downloadable/Test/Unit/Observer/IsAllowedGuestCheckoutObserverTest.php
index d7c5dcf6bf5043c4cb99622207086ad9cdf46a78..70d22b68215f5dff592e68fc8796a94cbcf0b86d 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Observer/IsAllowedGuestCheckoutObserverTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Observer/IsAllowedGuestCheckoutObserverTest.php
@@ -7,7 +7,7 @@ namespace Magento\Downloadable\Test\Unit\Observer;
 
 use Magento\Downloadable\Observer\IsAllowedGuestCheckoutObserver;
 use Magento\Downloadable\Model\Product\Type;
-use Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory;
+use Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory;
 use Magento\Store\Model\ScopeInterface;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
diff --git a/app/code/Magento/Downloadable/Test/Unit/Observer/SaveDownloadableOrderItemObserverTest.php b/app/code/Magento/Downloadable/Test/Unit/Observer/SaveDownloadableOrderItemObserverTest.php
index 302206b26c0299146d8f7f5ce8e3c7803175084d..2c98b681d5ba9af99c03e92c0c28ab22df283553 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Observer/SaveDownloadableOrderItemObserverTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Observer/SaveDownloadableOrderItemObserverTest.php
@@ -7,7 +7,7 @@ namespace Magento\Downloadable\Test\Unit\Observer;
 
 use Magento\Downloadable\Observer\SaveDownloadableOrderItemObserver;
 use Magento\Downloadable\Model\Product\Type as DownloadableProductType;
-use Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory;
+use Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
 class SaveDownloadableOrderItemObserverTest extends \PHPUnit_Framework_TestCase
@@ -95,7 +95,7 @@ class SaveDownloadableOrderItemObserverTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->itemsFactory = $this->getMockBuilder(
-            '\Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory'
+            '\Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory'
         )
             ->setMethods(['create'])
             ->disableOriginalConstructor()
diff --git a/app/code/Magento/Downloadable/Test/Unit/Observer/SetLinkStatusObserverTest.php b/app/code/Magento/Downloadable/Test/Unit/Observer/SetLinkStatusObserverTest.php
index b50916cf20b0cf5d1ad0e35183c7adf2e7621bd7..f5f4415991b800fdfa78549339bf0e346183f355 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Observer/SetLinkStatusObserverTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Observer/SetLinkStatusObserverTest.php
@@ -6,8 +6,8 @@
 namespace Magento\Downloadable\Test\Unit\Observer;
 
 use Magento\Downloadable\Observer\SetLinkStatusObserver;
-use Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory;
-use Magento\Downloadable\Model\Resource\Link\Purchased\Item\Collection as LinkItemCollection;
+use Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory;
+use Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\Collection as LinkItemCollection;
 use Magento\Downloadable\Model\Product\Type as DownloadableProductType;
 use Magento\Store\Model\ScopeInterface;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
@@ -62,7 +62,7 @@ class SetLinkStatusObserverTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->itemsFactory = $this->getMockBuilder(
-            '\Magento\Downloadable\Model\Resource\Link\Purchased\Item\CollectionFactory'
+            '\Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\CollectionFactory'
         )
             ->setMethods(['create'])
             ->disableOriginalConstructor()
@@ -369,7 +369,7 @@ class SetLinkStatusObserverTest extends \PHPUnit_Framework_TestCase
     private function createLinkItemCollection(array $expectedOrderItemIds, array $items)
     {
         $linkItemCollection = $this->getMockBuilder(
-            '\Magento\Downloadable\Model\Resource\Link\Purchased\Item\Collection'
+            '\Magento\Downloadable\Model\ResourceModel\Link\Purchased\Item\Collection'
         )
             ->disableOriginalConstructor()
             ->setMethods(['addFieldToFilter'])
diff --git a/app/code/Magento/Downloadable/Test/Unit/Pricing/Price/LinkPriceTest.php b/app/code/Magento/Downloadable/Test/Unit/Pricing/Price/LinkPriceTest.php
index 59233b547515b8428e52ed29a2abe8d5e6be8682..dab2cfb92018d2df767ea723663b61751de209de 100644
--- a/app/code/Magento/Downloadable/Test/Unit/Pricing/Price/LinkPriceTest.php
+++ b/app/code/Magento/Downloadable/Test/Unit/Pricing/Price/LinkPriceTest.php
@@ -32,7 +32,7 @@ class LinkPriceTest extends \PHPUnit_Framework_TestCase
     protected $calculatorMock;
 
     /**
-     * @var \Magento\Downloadable\Model\Resource\Link|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Downloadable\Model\ResourceModel\Link|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $linkMock;
 
@@ -59,7 +59,12 @@ class LinkPriceTest extends \PHPUnit_Framework_TestCase
 
         $this->priceCurrencyMock = $this->getMock('\Magento\Framework\Pricing\PriceCurrencyInterface');
 
-        $this->linkPrice = new \Magento\Downloadable\Pricing\Price\LinkPrice($this->saleableItemMock, 1, $this->calculatorMock, $this->priceCurrencyMock);
+        $this->linkPrice = new \Magento\Downloadable\Pricing\Price\LinkPrice(
+            $this->saleableItemMock,
+            1,
+            $this->calculatorMock,
+            $this->priceCurrencyMock
+        );
     }
 
     public function testGetLinkAmount()
diff --git a/app/code/Magento/Downloadable/composer.json b/app/code/Magento/Downloadable/composer.json
index e2d2d2138672eafc41b9ee591834d027e4203284..a1b7591bf9a53a60b219e0834a5913bc4042f34a 100644
--- a/app/code/Magento/Downloadable/composer.json
+++ b/app/code/Magento/Downloadable/composer.json
@@ -20,6 +20,9 @@
         "magento/module-quote": "1.0.0-beta",
         "magento/framework": "1.0.0-beta"
     },
+    "suggest": {
+        "magento/module-downloadable-sample-data": "Sample Data version:1.0.0-beta"
+    },
     "type": "magento2-module",
     "version": "1.0.0-beta",
     "license": [
diff --git a/app/code/Magento/Downloadable/etc/events.xml b/app/code/Magento/Downloadable/etc/events.xml
index ba57bb11aeaa925e93357690056774d4e4d15210..b2ab5cccab3cde7effa65d7024a2bebd76291087 100644
--- a/app/code/Magento/Downloadable/etc/events.xml
+++ b/app/code/Magento/Downloadable/etc/events.xml
@@ -7,12 +7,12 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_order_item_save_commit_after">
-        <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\SaveDownloadableOrderItemObserver" method="execute" />
+        <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\SaveDownloadableOrderItemObserver" />
     </event>
     <event name="sales_order_save_commit_after">
-        <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\SetLinkStatusObserver" method="execute" />
+        <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\SetLinkStatusObserver" />
     </event>
     <event name="sales_model_service_quote_submit_success">
-        <observer name="checkout_type_onepage_save_order_after" instance="Magento\Downloadable\Observer\SetHasDownloadableProductsObserver" method="execute" />
+        <observer name="checkout_type_onepage_save_order_after" instance="Magento\Downloadable\Observer\SetHasDownloadableProductsObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Downloadable/etc/frontend/events.xml b/app/code/Magento/Downloadable/etc/frontend/events.xml
index b1834afe1815d18b47c039a891dd1a428d53338d..bcbac84cf12e595b70575b872ba7f1ea503ecb03 100644
--- a/app/code/Magento/Downloadable/etc/frontend/events.xml
+++ b/app/code/Magento/Downloadable/etc/frontend/events.xml
@@ -7,12 +7,12 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="checkout_type_multishipping_create_orders_single">
-        <observer name="checkout_type_multishipping_create_orders_single" instance="Magento\Downloadable\Observer\SetHasDownloadableProductsObserver" method="execute"  />
+        <observer name="checkout_type_multishipping_create_orders_single" instance="Magento\Downloadable\Observer\SetHasDownloadableProductsObserver"  />
     </event>
     <event name="checkout_allow_guest">
-        <observer name="checkout_allow_guest" instance="Magento\Downloadable\Observer\IsAllowedGuestCheckoutObserver" method="execute" />
+        <observer name="checkout_allow_guest" instance="Magento\Downloadable\Observer\IsAllowedGuestCheckoutObserver" />
     </event>
     <event name="product_option_renderer_init">
-        <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\InitOptionRendererObserver" method="execute" />
+        <observer name="downloadable_observer" instance="Magento\Downloadable\Observer\InitOptionRendererObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Downloadable/etc/product_types.xml b/app/code/Magento/Downloadable/etc/product_types.xml
index 8fbf0156144b9294ae5701916ae7563c9683e01a..a952f2351d4d619e02b3e3724fdbcc48b4c962f8 100644
--- a/app/code/Magento/Downloadable/etc/product_types.xml
+++ b/app/code/Magento/Downloadable/etc/product_types.xml
@@ -8,7 +8,7 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Catalog:etc/product_types.xsd">
     <type name="downloadable" label="Downloadable Product" modelInstance="Magento\Downloadable\Model\Product\Type" composite="false" isQty="true" canUseQtyDecimals="false" sortOrder="60">
         <priceModel instance="Magento\Downloadable\Model\Product\Price" />
-        <indexerModel instance="Magento\Downloadable\Model\Resource\Indexer\Price" />
+        <indexerModel instance="Magento\Downloadable\Model\ResourceModel\Indexer\Price" />
         <customAttributes>
             <attribute name="refundable" value="false"/>
             <attribute name="is_real_product" value="false"/>
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
index 688d231547f437eaf906b38beca4503ea91ab729..0c4077543059fd746f88a67b946889ca286ce287 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable.phtml
@@ -16,11 +16,12 @@
 <script>
 require([
     'jquery',
-    'Magento_Ui/js/lib/registry/registry',
+    'uiRegistry',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'mage/mage',
     'prototype'
-], function (jQuery, registry, mageTemplate) {
+], function (jQuery, registry, mageTemplate, alert) {
 
 //<![CDATA[>
 var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
@@ -113,7 +114,9 @@ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
                 try {
                     console.log(e);
                 } catch (e2) {
-                    alert(e.name + '\n' + e.message);
+                    alert({
+                        content: e.name + '\n' + e.message
+                    });
                 }
             }
         },
@@ -124,7 +127,9 @@ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
                 try {
                     console.log(e);
                 } catch (e2) {
-                    alert(e.name + '\n' + e.message);
+                    alert({
+                        content: e.name + '\n' + e.message
+                    });
                 }
             }
         },
@@ -142,7 +147,9 @@ var uploaderTemplate = '<div class="no-display" id="[[idName]]-template">' +
                 try {
                     console.log(e);
                 } catch (e2) {
-                    alert(e.name + '\n' + e.message);
+                    alert({
+                        content: e.name + '\n' + e.message
+                    });
                 }
             }
         }
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
index f68fcc7b1963f5406a6bc57d7f33530efd1dfb3d..d5c4b6dca86ea769bc9bb04fe98309bffcccd0e5 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/links.phtml
@@ -73,7 +73,7 @@
 <script>
 require([
     'jquery',
-    'Magento_Ui/js/lib/registry/registry',
+    'uiRegistry',
     'mage/template',
     'jquery/file-uploader',
     'mage/mage',
diff --git a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml
index 7ea23e633c6c9732a5857a16ddd81065a9db399b..cd78725695ef1d6b2590310c721d4fa412127cfa 100644
--- a/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml
+++ b/app/code/Magento/Downloadable/view/adminhtml/templates/product/edit/downloadable/samples.phtml
@@ -60,7 +60,7 @@ $block->getConfigJson();
 <script>
 require([
     'jquery',
-    'Magento_Ui/js/lib/registry/registry',
+    'uiRegistry',
     'mage/template',
     'jquery/file-uploader',
     'prototype'
diff --git a/app/code/Magento/DownloadableImportExport/Helper/Uploader.php b/app/code/Magento/DownloadableImportExport/Helper/Uploader.php
index be627162ea19d35687e9b5a2bfcdd3cfd893cabb..cd1009aa3270b57899f3ec9f46ca3aa5218fe6a7 100644
--- a/app/code/Magento/DownloadableImportExport/Helper/Uploader.php
+++ b/app/code/Magento/DownloadableImportExport/Helper/Uploader.php
@@ -44,14 +44,14 @@ class Uploader extends \Magento\Framework\App\Helper\AbstractHelper
      * @param \Magento\Framework\App\Helper\Context $context
      * @param \Magento\Downloadable\Helper\File $fileHelper
      * @param \Magento\CatalogImportExport\Model\Import\UploaderFactory $uploaderFactory
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Framework\Filesystem $filesystem
      */
     public function __construct(
         \Magento\Framework\App\Helper\Context $context,
         \Magento\Downloadable\Helper\File $fileHelper,
         \Magento\CatalogImportExport\Model\Import\UploaderFactory $uploaderFactory,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Framework\Filesystem $filesystem
     ) {
         parent::__construct($context);
diff --git a/app/code/Magento/DownloadableImportExport/Model/Import/Product/Type/Downloadable.php b/app/code/Magento/DownloadableImportExport/Model/Import/Product/Type/Downloadable.php
index f8132f26e1e96bded12f4279d5b20adb30632150..9a9eaada5da3790ea550024e3c761dce82a6553e 100644
--- a/app/code/Magento/DownloadableImportExport/Model/Import/Product/Type/Downloadable.php
+++ b/app/code/Magento/DownloadableImportExport/Model/Import/Product/Type/Downloadable.php
@@ -244,18 +244,18 @@ class Downloadable extends \Magento\CatalogImportExport\Model\Import\Product\Typ
     /**
      * Constructor
      *
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFac
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $prodAttrColFac
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param array $params
      * @param \Magento\DownloadableImportExport\Helper\Uploader $uploaderHelper
      * @param \Magento\DownloadableImportExport\Helper\Data $downloadableHelper
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFac,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $prodAttrColFac,
+        \Magento\Framework\App\ResourceConnection $resource,
         array $params,
         \Magento\DownloadableImportExport\Helper\Uploader $uploaderHelper,
         \Magento\DownloadableImportExport\Helper\Data $downloadableHelper
diff --git a/app/code/Magento/DownloadableImportExport/Test/Unit/Model/Import/Product/Type/DownloadableTest.php b/app/code/Magento/DownloadableImportExport/Test/Unit/Model/Import/Product/Type/DownloadableTest.php
index 93a353f68089be387ae03017f7b10186cdea723c..87f9b5be8914805d46e8aae65d989c08d535d1d5 100644
--- a/app/code/Magento/DownloadableImportExport/Test/Unit/Model/Import/Product/Type/DownloadableTest.php
+++ b/app/code/Magento/DownloadableImportExport/Test/Unit/Model/Import/Product/Type/DownloadableTest.php
@@ -25,26 +25,26 @@ class DownloadableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
     protected $select;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $attrSetColFacMock;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $attrSetColMock;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $prodAttrColFacMock;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $prodAttrColMock;
 
-    /** @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject */
     protected $resourceMock;
 
     /** @var \Magento\CatalogImportExport\Model\Import\Product|\PHPUnit_Framework_MockObject_MockObject */
@@ -101,14 +101,14 @@ class DownloadableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
         //constructor arguments:
         // 1. $attrSetColFac
         $this->attrSetColFacMock = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->attrSetColMock = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection',
             ['setEntityTypeFilter'],
             [],
             '',
@@ -121,7 +121,7 @@ class DownloadableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
 
         // 2. $prodAttrColFac
         $this->prodAttrColFacMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory',
             ['create'],
             [],
             '',
@@ -129,7 +129,7 @@ class DownloadableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
         );
 
         $attrCollection = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Attribute\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection',
             [],
             [],
             '',
@@ -141,7 +141,7 @@ class DownloadableTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abst
 
         // 3. $resource
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             ['getConnection', 'getTableName'],
             [],
             '',
diff --git a/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractMain.php b/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractMain.php
index 0a4cbaac1c3114a2c409415bb8782468ae3583a9..0de211834621693bc557e718f8c09bea8c099bc2 100644
--- a/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractMain.php
+++ b/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Main/AbstractMain.php
@@ -13,7 +13,7 @@
  */
 namespace Magento\Eav\Block\Adminhtml\Attribute\Edit\Main;
 
-use Magento\Catalog\Model\Resource\Eav\Attribute;
+use Magento\Catalog\Model\ResourceModel\Eav\Attribute;
 
 abstract class AbstractMain extends \Magento\Backend\Block\Widget\Form\Generic
 {
diff --git a/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Options/Labels.php b/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Options/Labels.php
index 7fa29f3b857ee8b2cb9637660844008d013ce0c9..9352e85192edb13780e73d97b9c046e971bb483b 100644
--- a/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Options/Labels.php
+++ b/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Options/Labels.php
@@ -40,7 +40,7 @@ class Labels extends \Magento\Backend\Block\Template
     /**
      * Retrieve stores collection with default store
      *
-     * @return \Magento\Store\Model\Resource\Store\Collection
+     * @return \Magento\Store\Model\ResourceModel\Store\Collection
      */
     public function getStores()
     {
diff --git a/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Options/Options.php b/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Options/Options.php
index 6927e83f96d180a8445bffb448761f6bb82d3efe..c564c189053e324b1417211888af988d4a17d1cc 100644
--- a/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Options/Options.php
+++ b/app/code/Magento/Eav/Block/Adminhtml/Attribute/Edit/Options/Options.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Eav\Block\Adminhtml\Attribute\Edit\Options;
 
-use Magento\Store\Model\Resource\Store\Collection;
+use Magento\Store\Model\ResourceModel\Store\Collection;
 
 class Options extends \Magento\Backend\Block\Template
 {
@@ -21,7 +21,7 @@ class Options extends \Magento\Backend\Block\Template
     protected $_registry;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory
      */
     protected $_attrOptionCollectionFactory;
 
@@ -38,14 +38,14 @@ class Options extends \Magento\Backend\Block\Template
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         array $data = []
     ) {
@@ -107,7 +107,7 @@ class Options extends \Magento\Backend\Block\Template
 
     /**
      * @param \Magento\Eav\Model\Entity\Attribute\AbstractAttribute $attribute
-     * @param array|\Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection $optionCollection
+     * @param array|\Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection $optionCollection
      * @return array
      */
     protected function _prepareOptionValues(
@@ -148,7 +148,7 @@ class Options extends \Magento\Backend\Block\Template
      * It is represented by an array in case of system attribute
      *
      * @param \Magento\Eav\Model\Entity\Attribute\AbstractAttribute $attribute
-     * @return array|\Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection
+     * @return array|\Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection
      */
     protected function _getOptionValuesCollection(\Magento\Eav\Model\Entity\Attribute\AbstractAttribute $attribute)
     {
@@ -172,7 +172,7 @@ class Options extends \Magento\Backend\Block\Template
     /**
      * Prepare option values of system attribute
      *
-     * @param array|\Magento\Eav\Model\Resource\Entity\Attribute\Option $option
+     * @param array|\Magento\Eav\Model\ResourceModel\Entity\Attribute\Option $option
      * @param string $inputType
      * @param array $defaultValues
      * @param string $valuePrefix
@@ -211,7 +211,7 @@ class Options extends \Magento\Backend\Block\Template
     /**
      * Prepare option values of user defined attribute
      *
-     * @param array|\Magento\Eav\Model\Resource\Entity\Attribute\Option $option
+     * @param array|\Magento\Eav\Model\ResourceModel\Entity\Attribute\Option $option
      * @param string $inputType
      * @param array $defaultValues
      * @return array
diff --git a/app/code/Magento/Eav/Model/Attribute/GroupRepository.php b/app/code/Magento/Eav/Model/Attribute/GroupRepository.php
index e20f79c593c5201765584ee72f82a7f2949dc554..d5bebb357123cee55fa11fd8dcf6c0693cd2560c 100644
--- a/app/code/Magento/Eav/Model/Attribute/GroupRepository.php
+++ b/app/code/Magento/Eav/Model/Attribute/GroupRepository.php
@@ -13,7 +13,7 @@ use Magento\Framework\Exception\StateException;
 class GroupRepository implements \Magento\Eav\Api\AttributeGroupRepositoryInterface
 {
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Group
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group
      */
     protected $groupResource;
 
@@ -28,7 +28,7 @@ class GroupRepository implements \Magento\Eav\Api\AttributeGroupRepositoryInterf
     protected $setRepository;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory
      */
     protected $groupListFactory;
 
@@ -43,8 +43,8 @@ class GroupRepository implements \Magento\Eav\Api\AttributeGroupRepositoryInterf
     protected $joinProcessor;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Group $groupResource
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory $groupListFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group $groupResource
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $groupListFactory
      * @param \Magento\Eav\Model\Entity\Attribute\GroupFactory $groupFactory
      * @param \Magento\Eav\Api\AttributeSetRepositoryInterface $setRepository
      * @param \Magento\Eav\Api\Data\AttributeGroupSearchResultsInterfaceFactory $searchResultsFactory
@@ -52,8 +52,8 @@ class GroupRepository implements \Magento\Eav\Api\AttributeGroupRepositoryInterf
      * @codeCoverageIgnore
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Group $groupResource,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory $groupListFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group $groupResource,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory $groupListFactory,
         \Magento\Eav\Model\Entity\Attribute\GroupFactory $groupFactory,
         \Magento\Eav\Api\AttributeSetRepositoryInterface $setRepository,
         \Magento\Eav\Api\Data\AttributeGroupSearchResultsInterfaceFactory $searchResultsFactory,
diff --git a/app/code/Magento/Eav/Model/AttributeManagement.php b/app/code/Magento/Eav/Model/AttributeManagement.php
index 661b8014c716f6a86e90e2b87000a27b7247cfd8..f46b33d89584765064f4d28242576e7f84ecc754 100644
--- a/app/code/Magento/Eav/Model/AttributeManagement.php
+++ b/app/code/Magento/Eav/Model/AttributeManagement.php
@@ -18,7 +18,7 @@ class AttributeManagement implements \Magento\Eav\Api\AttributeManagementInterfa
     protected $setRepository;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
      */
     protected $attributeCollection;
 
@@ -43,28 +43,28 @@ class AttributeManagement implements \Magento\Eav\Api\AttributeManagementInterfa
     protected $attributeRepository;
 
     /**
-     * @var Resource\Entity\Attribute
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute
      */
     protected $attributeResource;
 
     /**
      * @param \Magento\Eav\Api\AttributeSetRepositoryInterface $setRepository
-     * @param Resource\Entity\Attribute\Collection $attributeCollection
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $attributeCollection
      * @param Config $eavConfig
      * @param ConfigFactory $entityTypeFactory
      * @param \Magento\Eav\Api\AttributeGroupRepositoryInterface $groupRepository
      * @param \Magento\Eav\Api\AttributeRepositoryInterface $attributeRepository
-     * @param Resource\Entity\Attribute $attributeResource
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute $attributeResource
      * @codeCoverageIgnore
      */
     public function __construct(
         \Magento\Eav\Api\AttributeSetRepositoryInterface $setRepository,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Collection $attributeCollection,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $attributeCollection,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Eav\Model\ConfigFactory $entityTypeFactory,
         \Magento\Eav\Api\AttributeGroupRepositoryInterface $groupRepository,
         \Magento\Eav\Api\AttributeRepositoryInterface $attributeRepository,
-        \Magento\Eav\Model\Resource\Entity\Attribute $attributeResource
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute $attributeResource
     ) {
         $this->setRepository = $setRepository;
         $this->attributeCollection = $attributeCollection;
diff --git a/app/code/Magento/Eav/Model/AttributeRepository.php b/app/code/Magento/Eav/Model/AttributeRepository.php
index 92441d5b4b6338375eba9dea26f7ce74881a875f..20fe871652ec6ac1928c8cf34df5862c82be3d04 100644
--- a/app/code/Magento/Eav/Model/AttributeRepository.php
+++ b/app/code/Magento/Eav/Model/AttributeRepository.php
@@ -6,7 +6,7 @@
  */
 namespace Magento\Eav\Model;
 
-use Magento\Eav\Model\Resource\Entity\Attribute\Collection;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection;
 use Magento\Framework\Api\SortOrder;
 use Magento\Framework\Exception\InputException;
 use Magento\Framework\Exception\NoSuchEntityException;
@@ -23,12 +23,12 @@ class AttributeRepository implements \Magento\Eav\Api\AttributeRepositoryInterfa
     protected $eavConfig;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute
      */
     protected $eavResource;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory
      */
     protected $attributeCollectionFactory;
 
@@ -49,8 +49,8 @@ class AttributeRepository implements \Magento\Eav\Api\AttributeRepositoryInterfa
 
     /**
      * @param Config $eavConfig
-     * @param Resource\Entity\Attribute $eavResource
-     * @param Resource\Entity\Attribute\CollectionFactory $attributeCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute $eavResource
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory $attributeCollectionFactory
      * @param \Magento\Eav\Api\Data\AttributeSearchResultsInterfaceFactory $searchResultsFactory
      * @param Entity\AttributeFactory $attributeFactory
      * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor
@@ -58,8 +58,8 @@ class AttributeRepository implements \Magento\Eav\Api\AttributeRepositoryInterfa
      */
     public function __construct(
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Eav\Model\Resource\Entity\Attribute $eavResource,
-        \Magento\Eav\Model\Resource\Entity\Attribute\CollectionFactory $attributeCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute $eavResource,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\CollectionFactory $attributeCollectionFactory,
         \Magento\Eav\Api\Data\AttributeSearchResultsInterfaceFactory $searchResultsFactory,
         \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory,
         \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor
@@ -94,7 +94,7 @@ class AttributeRepository implements \Magento\Eav\Api\AttributeRepositoryInterfa
             throw InputException::requiredField('entity_type_code');
         }
 
-        /** @var \Magento\Eav\Model\Resource\Entity\Attribute\Collection $attributeCollection */
+        /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $attributeCollection */
         $attributeCollection = $this->attributeCollectionFactory->create();
         $this->joinProcessor->process($attributeCollection);
         $attributeCollection->addFieldToFilter('entity_type_code', ['eq' => $entityTypeCode]);
@@ -195,7 +195,7 @@ class AttributeRepository implements \Magento\Eav\Api\AttributeRepositoryInterfa
      * Helper function that adds a FilterGroup to the collection.
      *
      * @param \Magento\Framework\Api\Search\FilterGroup $filterGroup
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Collection $collection
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $collection
      * @return void
      * @throws \Magento\Framework\Exception\InputException
      */
diff --git a/app/code/Magento/Eav/Model/AttributeSetRepository.php b/app/code/Magento/Eav/Model/AttributeSetRepository.php
index 51fb26e627c00580e1f11c5ddb7f4cf776a218d1..6ee1efc86028a4838bef5176104d937fb0f10ac7 100644
--- a/app/code/Magento/Eav/Model/AttributeSetRepository.php
+++ b/app/code/Magento/Eav/Model/AttributeSetRepository.php
@@ -10,8 +10,8 @@ use Magento\Eav\Api\Data\AttributeSetInterface;
 use Magento\Eav\Model\Config as EavConfig;
 use Magento\Eav\Model\Entity\Attribute\Set as AttributeSet;
 use Magento\Eav\Model\Entity\Attribute\SetFactory as AttributeSetFactory;
-use Magento\Eav\Model\Resource\Entity\Attribute\Set as AttributeSetResource;
-use Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Set as AttributeSetResource;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory;
 use Magento\Framework\Exception\CouldNotDeleteException;
 use Magento\Framework\Exception\CouldNotSaveException;
 use Magento\Framework\Exception\NoSuchEntityException;
@@ -94,7 +94,7 @@ class AttributeSetRepository implements AttributeSetRepositoryInterface
      */
     public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria)
     {
-        /** @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection $collection */
+        /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection $collection */
         $collection = $this->collectionFactory->create();
         $this->joinProcessor->process($collection);
 
diff --git a/app/code/Magento/Eav/Model/Config.php b/app/code/Magento/Eav/Model/Config.php
index bddbc821e020bf93f6dab6a7374b13868f23b368..832966d134776551bf9d0255dfad54b367cfa28c 100644
--- a/app/code/Magento/Eav/Model/Config.php
+++ b/app/code/Magento/Eav/Model/Config.php
@@ -83,7 +83,7 @@ class Config
     protected $_entityTypeFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Type\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Type\CollectionFactory
      */
     protected $entityTypeCollectionFactory;
 
@@ -95,7 +95,7 @@ class Config
     /**
      * @param \Magento\Framework\App\CacheInterface $cache
      * @param \Magento\Eav\Model\Entity\TypeFactory $entityTypeFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Type\CollectionFactory $entityTypeCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Type\CollectionFactory $entityTypeCollectionFactory
      * @param \Magento\Framework\App\Cache\StateInterface $cacheState
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @codeCoverageIgnore
@@ -103,7 +103,7 @@ class Config
     public function __construct(
         \Magento\Framework\App\CacheInterface $cache,
         \Magento\Eav\Model\Entity\TypeFactory $entityTypeFactory,
-        \Magento\Eav\Model\Resource\Entity\Type\CollectionFactory $entityTypeCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Type\CollectionFactory $entityTypeCollectionFactory,
         \Magento\Framework\App\Cache\StateInterface $cacheState,
         \Magento\Framework\Validator\UniversalFactory $universalFactory
     ) {
diff --git a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
index 2f222e7dabc88a4f56494c445a5340c3200d1057..14147d6849de94bee388891d8ecfe389fd252ee5 100644
--- a/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
+++ b/app/code/Magento/Eav/Model/Entity/AbstractEntity.php
@@ -13,13 +13,13 @@ use Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend;
 use Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend;
 use Magento\Eav\Model\Entity\Attribute\Source\AbstractSource;
 use Magento\Framework\App\Config\Element;
-use Magento\Framework\App\Resource\Config;
+use Magento\Framework\App\ResourceConnection\Config;
 use Magento\Framework\Exception\LocalizedException;
 use Magento\Framework\Model\AbstractModel;
-use Magento\Framework\Model\Resource\Db\ObjectRelationProcessor;
-use Magento\Framework\Model\Resource\Db\TransactionManagerInterface;
-use Magento\Eav\Model\Resource\Attribute\DefaultEntityAttributes\ProviderInterface as DefaultAttributesProvider;
-use Magento\Framework\Model\Resource\AbstractResource;
+use Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor;
+use Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface;
+use Magento\Eav\Model\ResourceModel\Attribute\DefaultEntityAttributes\ProviderInterface as DefaultAttributesProvider;
+use Magento\Framework\Model\ResourceModel\AbstractResource;
 
 /**
  * Entity/Attribute/Model - entity abstract
@@ -159,7 +159,7 @@ abstract class AbstractEntity extends AbstractResource implements EntityInterfac
     protected static $_attributeBackendTables = [];
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
@@ -179,7 +179,7 @@ abstract class AbstractEntity extends AbstractResource implements EntityInterfac
     protected $_localeFormat;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Helper
+     * @var \Magento\Eav\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute.php b/app/code/Magento/Eav/Model/Entity/Attribute.php
index 768201194f84e6e1b66724b5bda4f1f9cf0d2f6b..e26146bc9aa2366aec0033b5ccd92238dbce2cf1 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute.php
@@ -78,7 +78,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute\AbstractAttribute im
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param TypeFactory $eavTypeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Eav\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
@@ -87,7 +87,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute\AbstractAttribute im
      * @param \Magento\Catalog\Model\Product\ReservedAttributeList $reservedAttributeList
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param DateTimeFormatterInterface $dateTimeFormatter
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -101,7 +101,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute\AbstractAttribute im
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Eav\Model\Resource\Helper $resourceHelper,
+        \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory,
         \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor,
@@ -110,7 +110,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute\AbstractAttribute im
         \Magento\Catalog\Model\Product\ReservedAttributeList $reservedAttributeList,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         DateTimeFormatterInterface $dateTimeFormatter,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -180,7 +180,7 @@ class Attribute extends \Magento\Eav\Model\Entity\Attribute\AbstractAttribute im
     /**
      * Delete entity
      *
-     * @return \Magento\Eav\Model\Resource\Entity\Attribute
+     * @return \Magento\Eav\Model\ResourceModel\Entity\Attribute
      * @codeCoverageIgnore
      */
     public function deleteEntity()
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php b/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php
index 9f0c790fed722b1f7a4f0cd71a038350c520d8e2..b77183b6c05f300bdb69ea5660fad43783276ac9 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/AbstractAttribute.php
@@ -87,7 +87,7 @@ abstract class AbstractAttribute extends \Magento\Framework\Model\AbstractExtens
     protected $_storeManager;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Helper
+     * @var \Magento\Eav\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
@@ -119,12 +119,12 @@ abstract class AbstractAttribute extends \Magento\Framework\Model\AbstractExtens
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Eav\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -138,12 +138,12 @@ abstract class AbstractAttribute extends \Magento\Framework\Model\AbstractExtens
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Eav\Model\Entity\TypeFactory $eavTypeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Eav\Model\Resource\Helper $resourceHelper,
+        \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Eav\Api\Data\AttributeOptionInterfaceFactory $optionDataFactory,
         \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor,
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -174,7 +174,7 @@ abstract class AbstractAttribute extends \Magento\Framework\Model\AbstractExtens
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Resource\Entity\Attribute');
+        $this->_init('Magento\Eav\Model\ResourceModel\Entity\Attribute');
     }
 
     /**
@@ -438,7 +438,7 @@ abstract class AbstractAttribute extends \Magento\Framework\Model\AbstractExtens
     /**
      * Retrieve entity type
      *
-     * @return string
+     * @return \Magento\Eav\Model\Entity\Type
      * @codeCoverageIgnore
      */
     public function getEntityType()
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Group.php b/app/code/Magento/Eav/Model/Entity/Attribute/Group.php
index d71b27a915d9d43df38b898544074bb4fb1c7920..b8c123718f89f23362c1c6c68106c09975229698 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/Group.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/Group.php
@@ -9,8 +9,8 @@ namespace Magento\Eav\Model\Entity\Attribute;
 /**
  * @author      Magento Core Team <core@magentocommerce.com>
  *
- * @method \Magento\Eav\Model\Resource\Entity\Attribute\Group _getResource()
- * @method \Magento\Eav\Model\Resource\Entity\Attribute\Group getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group _getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group getResource()
  * @method int getSortOrder()
  * @method \Magento\Eav\Model\Entity\Attribute\Group setSortOrder(int $value)
  * @method int getDefaultId()
@@ -31,7 +31,7 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Resource\Entity\Attribute\Group');
+        $this->_init('Magento\Eav\Model\ResourceModel\Entity\Attribute\Group');
     }
 
     /**
@@ -66,7 +66,12 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
         if (!$this->getAttributeGroupCode()) {
             $groupName = $this->getAttributeGroupName();
             if ($groupName) {
-                $this->setAttributeGroupCode(trim(preg_replace('/[^a-z0-9]+/', '-', strtolower($groupName)), '-'));
+                $attributeGroupCode = trim(preg_replace('/[^a-z0-9]+/', '-', strtolower($groupName)), '-');
+                if (empty($attributeGroupCode)) {
+                    // in the following code md5 is not used for security purposes
+                    $attributeGroupCode = md5($groupName);
+                }
+                $this->setAttributeGroupCode($attributeGroupCode);
             }
         }
         return parent::beforeSave();
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Option.php b/app/code/Magento/Eav/Model/Entity/Attribute/Option.php
index 87674092820525038812aa7ffa572dadbea8c248..ad9a612b1cc1d957fcbaa155f2a6d7db1840b537 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/Option.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/Option.php
@@ -11,8 +11,8 @@ use Magento\Framework\Model\AbstractModel;
 /**
  * Emtity attribute option model
  *
- * @method \Magento\Eav\Model\Resource\Entity\Attribute\Option _getResource()
- * @method \Magento\Eav\Model\Resource\Entity\Attribute\Option getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option _getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option getResource()
  * @method int getAttributeId()
  * @method \Magento\Eav\Model\Entity\Attribute\Option setAttributeId(int $value)
  *
@@ -28,7 +28,7 @@ class Option extends AbstractModel implements AttributeOptionInterface
      */
     public function _construct()
     {
-        $this->_init('Magento\Eav\Model\Resource\Entity\Attribute\Option');
+        $this->_init('Magento\Eav\Model\ResourceModel\Entity\Attribute\Option');
     }
 
     /**
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/OptionManagement.php b/app/code/Magento/Eav/Model/Entity/Attribute/OptionManagement.php
index 816b3fda4ded8f5fba86d2b25c9481b8cb743172..de6a6600fe3af43cf0f5223ba840b36b619eb344 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/OptionManagement.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/OptionManagement.php
@@ -18,18 +18,18 @@ class OptionManagement implements \Magento\Eav\Api\AttributeOptionManagementInte
     protected $attributeRepository;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute
      */
     protected $resourceModel;
 
     /**
      * @param \Magento\Eav\Model\AttributeRepository $attributeRepository
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute $resourceModel
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute $resourceModel
      * @codeCoverageIgnore
      */
     public function __construct(
         \Magento\Eav\Model\AttributeRepository $attributeRepository,
-        \Magento\Eav\Model\Resource\Entity\Attribute $resourceModel
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute $resourceModel
     ) {
         $this->attributeRepository = $attributeRepository;
         $this->resourceModel = $resourceModel;
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Set.php b/app/code/Magento/Eav/Model/Entity/Attribute/Set.php
index 7735e042ecbf3a822ebcf110ef65a064e3846fa8..cd5705a566b030797bf6ccb22b21c543b07e15e5 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/Set.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/Set.php
@@ -7,7 +7,7 @@
 /**
  * Eav attribute set model
  *
- * @method \Magento\Eav\Model\Resource\Entity\Attribute\Set getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set getResource()
  * @method int getEntityTypeId()
  * @method \Magento\Eav\Model\Entity\Attribute\Set setEntityTypeId(int $value)
  * @method string getAttributeSetName()
@@ -41,7 +41,7 @@ class Set extends \Magento\Framework\Model\AbstractExtensibleModel implements
     /**
      * Resource instance
      *
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set
      */
     protected $_resource;
 
@@ -68,7 +68,7 @@ class Set extends \Magento\Framework\Model\AbstractExtensibleModel implements
     protected $_attributeFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute
      */
     protected $_resourceAttribute;
 
@@ -80,8 +80,8 @@ class Set extends \Magento\Framework\Model\AbstractExtensibleModel implements
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param GroupFactory $attrGroupFactory
      * @param \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute $resourceAttribute
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute $resourceAttribute
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -95,8 +95,8 @@ class Set extends \Magento\Framework\Model\AbstractExtensibleModel implements
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Eav\Model\Entity\Attribute\GroupFactory $attrGroupFactory,
         \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute $resourceAttribute,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute $resourceAttribute,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -123,7 +123,7 @@ class Set extends \Magento\Framework\Model\AbstractExtensibleModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Resource\Entity\Attribute\Set');
+        $this->_init('Magento\Eav\Model\ResourceModel\Entity\Attribute\Set');
     }
 
     /**
@@ -348,7 +348,7 @@ class Set extends \Magento\Framework\Model\AbstractExtensibleModel implements
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _getResource()
     {
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Source/Boolean.php b/app/code/Magento/Eav/Model/Entity/Attribute/Source/Boolean.php
index 7d1aa44949f5339a7d7f8a47ce9ad1eba9f88c83..ce8e80bbcadb608fb3024e5fb02a0ead08d02f92 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/Source/Boolean.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/Source/Boolean.php
@@ -15,16 +15,16 @@ class Boolean extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource
     const VALUE_NO = 0;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\AttributeFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\AttributeFactory
      */
     protected $_eavAttrEntity;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\AttributeFactory $eavAttrEntity
+     * @param \Magento\Eav\Model\ResourceModel\Entity\AttributeFactory $eavAttrEntity
      * @codeCoverageIgnore
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\AttributeFactory $eavAttrEntity
+        \Magento\Eav\Model\ResourceModel\Entity\AttributeFactory $eavAttrEntity
     ) {
         $this->_eavAttrEntity = $eavAttrEntity;
     }
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Source/Store.php b/app/code/Magento/Eav/Model/Entity/Attribute/Source/Store.php
index 659d477f9042dde6de76fc423fba67913fe21c42..c756efb8e39df31adf78cab2acca96c44a8e94e4 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/Source/Store.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/Source/Store.php
@@ -13,20 +13,20 @@ namespace Magento\Eav\Model\Entity\Attribute\Source;
 class Store extends \Magento\Eav\Model\Entity\Attribute\Source\Table
 {
     /**
-     * @var \Magento\Store\Model\Resource\Store\CollectionFactory
+     * @var \Magento\Store\Model\ResourceModel\Store\CollectionFactory
      */
     protected $_storeCollectionFactory;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory
-     * @param \Magento\Store\Model\Resource\Store\CollectionFactory $storeCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory
+     * @param \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeCollectionFactory
      * @codeCoverageIgnore
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory,
-        \Magento\Store\Model\Resource\Store\CollectionFactory $storeCollectionFactory
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory,
+        \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeCollectionFactory
     ) {
         parent::__construct($attrOptionCollectionFactory, $attrOptionFactory);
         $this->_storeCollectionFactory = $storeCollectionFactory;
diff --git a/app/code/Magento/Eav/Model/Entity/Attribute/Source/Table.php b/app/code/Magento/Eav/Model/Entity/Attribute/Source/Table.php
index 1fa86137d9fbf9da3677e3edf8b0c3e1567e5437..0cb088f9e22e3206a9b4cc5d931d5e819b708d9c 100644
--- a/app/code/Magento/Eav/Model/Entity/Attribute/Source/Table.php
+++ b/app/code/Magento/Eav/Model/Entity/Attribute/Source/Table.php
@@ -15,23 +15,23 @@ class Table extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource
     protected $_optionsDefault = [];
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory
      */
     protected $_attrOptionCollectionFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory
      */
     protected $_attrOptionFactory;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory
      * @codeCoverageIgnore
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $attrOptionFactory
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $attrOptionFactory
     ) {
         $this->_attrOptionCollectionFactory = $attrOptionCollectionFactory;
         $this->_attrOptionFactory = $attrOptionFactory;
diff --git a/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php b/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php
index 740c95ba6fb74e2e732f5c317685fdbe6dbcc5f3..9527e4a162d40f3a33fc7bd7e9a492899e6cc10b 100644
--- a/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php
+++ b/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Eav\Model\Entity\Collection;
 
-use Magento\Framework\App\Resource\SourceProviderInterface;
+use Magento\Framework\App\ResourceConnection\SourceProviderInterface;
 use Magento\Framework\Data\Collection\AbstractDb;
 use Magento\Framework\DB\Select;
 use Magento\Framework\Exception\LocalizedException;
@@ -106,7 +106,7 @@ abstract class AbstractCollection extends AbstractDb implements SourceProviderIn
     protected $_eavConfig;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
@@ -116,7 +116,7 @@ abstract class AbstractCollection extends AbstractDb implements SourceProviderIn
     protected $_eavEntityFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Helper
+     * @var \Magento\Eav\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
@@ -131,9 +131,9 @@ abstract class AbstractCollection extends AbstractDb implements SourceProviderIn
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Eav\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param mixed $connection
      * @codeCoverageIgnore
@@ -145,9 +145,9 @@ abstract class AbstractCollection extends AbstractDb implements SourceProviderIn
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Eav\Model\Resource\Helper $resourceHelper,
+        \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
@@ -265,7 +265,7 @@ abstract class AbstractCollection extends AbstractDb implements SourceProviderIn
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      * @codeCoverageIgnore
      */
     public function getResource()
diff --git a/app/code/Magento/Eav/Model/Entity/Collection/VersionControl/AbstractCollection.php b/app/code/Magento/Eav/Model/Entity/Collection/VersionControl/AbstractCollection.php
index c2c4a92ec165dbd57b63e9f4a8fada28698db7d8..bda308469301f3542f5fabfd78236488d62ec5f8 100644
--- a/app/code/Magento/Eav/Model/Entity/Collection/VersionControl/AbstractCollection.php
+++ b/app/code/Magento/Eav/Model/Entity/Collection/VersionControl/AbstractCollection.php
@@ -11,7 +11,7 @@ namespace Magento\Eav\Model\Entity\Collection\VersionControl;
 abstract class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\AbstractCollection
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot
      */
     protected $entitySnapshot;
 
@@ -21,11 +21,11 @@ abstract class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\A
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Eav\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
      * @param mixed $connection
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      * @codeCoverageIgnore
@@ -36,11 +36,11 @@ abstract class AbstractCollection extends \Magento\Eav\Model\Entity\Collection\A
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Eav\Model\Resource\Helper $resourceHelper,
+        \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $this->entitySnapshot = $entitySnapshot;
diff --git a/app/code/Magento/Eav/Model/Entity/Context.php b/app/code/Magento/Eav/Model/Entity/Context.php
index 9161fc6ed4f7c2e12fd6436f44413a1ebf80e9f3..1f858af9378d75e84dd901431ab47f19c81086c8 100644
--- a/app/code/Magento/Eav/Model/Entity/Context.php
+++ b/app/code/Magento/Eav/Model/Entity/Context.php
@@ -17,7 +17,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     protected $eavConfig;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $resource;
 
@@ -32,7 +32,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     protected $localeFormat;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Helper
+     * @var \Magento\Eav\Model\ResourceModel\Helper
      */
     protected $resourceHelper;
 
@@ -42,34 +42,34 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     protected $universalFactory;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\TransactionManagerInterface
+     * @var \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface
      */
     protected $transactionManager;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\ObjectRelationProcessor
+     * @var \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor
      */
     protected $objectRelationProcessor;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param Attribute\Set $attrSetEntity
      * @param \Magento\Framework\Locale\FormatInterface $localeFormat
-     * @param \Magento\Eav\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
-     * @param \Magento\Framework\Model\Resource\Db\TransactionManagerInterface $transactionManager
-     * @param \Magento\Framework\Model\Resource\Db\ObjectRelationProcessor $objectRelationProcessor
+     * @param \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface $transactionManager
+     * @param \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor $objectRelationProcessor
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Eav\Model\Entity\Attribute\Set $attrSetEntity,
         \Magento\Framework\Locale\FormatInterface $localeFormat,
-        \Magento\Eav\Model\Resource\Helper $resourceHelper,
+        \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
-        \Magento\Framework\Model\Resource\Db\TransactionManagerInterface $transactionManager,
-        \Magento\Framework\Model\Resource\Db\ObjectRelationProcessor $objectRelationProcessor
+        \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface $transactionManager,
+        \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor $objectRelationProcessor
     ) {
         $this->eavConfig = $eavConfig;
         $this->resource = $resource;
@@ -90,7 +90,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     }
 
     /**
-     * @return \Magento\Framework\App\Resource
+     * @return \Magento\Framework\App\ResourceConnection
      */
     public function getResource()
     {
@@ -114,7 +114,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     }
 
     /**
-     * @return \Magento\Eav\Model\Resource\Helper
+     * @return \Magento\Eav\Model\ResourceModel\Helper
      */
     public function getResourceHelper()
     {
@@ -130,7 +130,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     }
 
     /**
-     * @return \Magento\Framework\Model\Resource\Db\ObjectRelationProcessor
+     * @return \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor
      */
     public function getObjectRelationProcessor()
     {
@@ -138,7 +138,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     }
 
     /**
-     * @return \Magento\Framework\Model\Resource\Db\TransactionManagerInterface
+     * @return \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface
      */
     public function getTransactionManager()
     {
diff --git a/app/code/Magento/Eav/Model/Entity/Increment/Numeric.php b/app/code/Magento/Eav/Model/Entity/Increment/NumericValue.php
similarity index 89%
rename from app/code/Magento/Eav/Model/Entity/Increment/Numeric.php
rename to app/code/Magento/Eav/Model/Entity/Increment/NumericValue.php
index 7678d7e11f56229efd1ae231c1597adef5392cac..7c31e3a71921986e79e8bf9a85c90f2dcd75266f 100644
--- a/app/code/Magento/Eav/Model/Entity/Increment/Numeric.php
+++ b/app/code/Magento/Eav/Model/Entity/Increment/NumericValue.php
@@ -14,7 +14,7 @@ namespace Magento\Eav\Model\Entity\Increment;
  * - pad_char
  * - last_id
  */
-class Numeric extends \Magento\Eav\Model\Entity\Increment\AbstractIncrement
+class NumericValue extends \Magento\Eav\Model\Entity\Increment\AbstractIncrement
 {
     /**
      * Get next id
diff --git a/app/code/Magento/Eav/Model/Entity/Setup/Context.php b/app/code/Magento/Eav/Model/Entity/Setup/Context.php
index 1248caa725ad276d91763305a1c8897851045bbf..0f6b3ba86d852e1b377712a2313f814c4fc62f8c 100644
--- a/app/code/Magento/Eav/Model/Entity/Setup/Context.php
+++ b/app/code/Magento/Eav/Model/Entity/Setup/Context.php
@@ -20,7 +20,7 @@ class Context extends \Magento\Framework\Module\Setup\Context
     /**
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\App\Resource $appResource
+     * @param \Magento\Framework\App\ResourceConnection $appResource
      * @param \Magento\Framework\Module\Dir\Reader $modulesReader
      * @param \Magento\Framework\Module\ModuleListInterface $moduleList
      * @param \Magento\Framework\Module\ResourceInterface $resource
@@ -33,7 +33,7 @@ class Context extends \Magento\Framework\Module\Setup\Context
     public function __construct(
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\App\Resource $appResource,
+        \Magento\Framework\App\ResourceConnection $appResource,
         \Magento\Framework\Module\Dir\Reader $modulesReader,
         \Magento\Framework\Module\ModuleListInterface $moduleList,
         \Magento\Framework\Module\ResourceInterface $resource,
diff --git a/app/code/Magento/Eav/Model/Entity/Setup/PropertyMapper.php b/app/code/Magento/Eav/Model/Entity/Setup/PropertyMapper.php
index e3233c215093feb1a91107c84cc740bcb7d1da3d..0a1587fc8fc3f7a25c8a70ff5e76348e5efeeca9 100644
--- a/app/code/Magento/Eav/Model/Entity/Setup/PropertyMapper.php
+++ b/app/code/Magento/Eav/Model/Entity/Setup/PropertyMapper.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\Eav\Model\Entity\Setup;
 
-use Magento\Catalog\Model\Resource\Eav\Attribute;
+use Magento\Catalog\Model\ResourceModel\Eav\Attribute;
 
 class PropertyMapper extends PropertyMapperAbstract
 {
@@ -17,6 +17,7 @@ class PropertyMapper extends PropertyMapperAbstract
      * @param array $input
      * @param int $entityTypeId
      * @return array
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function map(array $input, $entityTypeId)
     {
diff --git a/app/code/Magento/Eav/Model/Entity/Store.php b/app/code/Magento/Eav/Model/Entity/Store.php
index 027cbc6a2715e00c30b02272a8b5f09a8e9afa81..3a08d55497601a128acb761398c14b3bd61a4f60 100644
--- a/app/code/Magento/Eav/Model/Entity/Store.php
+++ b/app/code/Magento/Eav/Model/Entity/Store.php
@@ -6,8 +6,8 @@
 namespace Magento\Eav\Model\Entity;
 
 /**
- * @method \Magento\Eav\Model\Resource\Entity\Store _getResource()
- * @method \Magento\Eav\Model\Resource\Entity\Store getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Entity\Store _getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Entity\Store getResource()
  * @method int getEntityTypeId()
  * @method \Magento\Eav\Model\Entity\Store setEntityTypeId(int $value)
  * @method int getStoreId()
@@ -29,7 +29,7 @@ class Store extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Resource\Entity\Store');
+        $this->_init('Magento\Eav\Model\ResourceModel\Entity\Store');
     }
 
     /**
diff --git a/app/code/Magento/Eav/Model/Entity/Type.php b/app/code/Magento/Eav/Model/Entity/Type.php
index 0010775a90c291f8d87d9ec596ddd44d16052cea..362e8fc2ddd69f68bc3fa78aee85a8f91c3fabaf 100644
--- a/app/code/Magento/Eav/Model/Entity/Type.php
+++ b/app/code/Magento/Eav/Model/Entity/Type.php
@@ -8,8 +8,8 @@ namespace Magento\Eav\Model\Entity;
 /**
  * Entity type model
  *
- * @method \Magento\Eav\Model\Resource\Entity\Type _getResource()
- * @method \Magento\Eav\Model\Resource\Entity\Type getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Entity\Type _getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Entity\Type getResource()
  * @method \Magento\Eav\Model\Entity\Type setEntityTypeCode(string $value)
  * @method string getEntityModel()
  * @method \Magento\Eav\Model\Entity\Type setEntityModel(string $value)
@@ -41,7 +41,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
     /**
      * Collection of attributes
      *
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
      */
     protected $_attributes;
 
@@ -55,7 +55,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
     /**
      * Collection of sets
      *
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection
      */
     protected $_sets;
 
@@ -86,7 +86,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Eav\Model\Entity\Attribute\SetFactory $attSetFactory
      * @param \Magento\Eav\Model\Entity\StoreFactory $storeFactory
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -98,7 +98,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
         \Magento\Eav\Model\Entity\Attribute\SetFactory $attSetFactory,
         \Magento\Eav\Model\Entity\StoreFactory $storeFactory,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -117,7 +117,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Resource\Entity\Type');
+        $this->_init('Magento\Eav\Model\ResourceModel\Entity\Type');
     }
 
     /**
@@ -137,7 +137,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
      * Retrieve entity type attributes collection
      *
      * @param   int $setId
-     * @return  \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+     * @return  \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
      */
     public function getAttributeCollection($setId = null)
     {
@@ -163,7 +163,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
     /**
      * Init and retrieve attribute collection
      *
-     * @return \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+     * @return \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
      */
     protected function _getAttributeCollection()
     {
@@ -179,7 +179,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
     /**
      * Retrieve entity tpe sets collection
      *
-     * @return \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection
+     * @return \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection
      */
     public function getAttributeSetCollection()
     {
@@ -359,7 +359,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
     /**
      * Retrieve resource entity object
      *
-     * @return \Magento\Framework\Model\Resource\AbstractResource
+     * @return \Magento\Framework\Model\ResourceModel\AbstractResource
      */
     public function getEntity()
     {
@@ -377,6 +377,6 @@ class Type extends \Magento\Framework\Model\AbstractModel
         if ($collection) {
             return $collection;
         }
-        return 'Magento\Eav\Model\Resource\Entity\Attribute\Collection';
+        return 'Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection';
     }
 }
diff --git a/app/code/Magento/Eav/Model/Entity/VersionControl/AbstractEntity.php b/app/code/Magento/Eav/Model/Entity/VersionControl/AbstractEntity.php
index 389fe477a0b2cffc5521783540fcc00b9e58d1a6..0e32219f56f5eac9e5717242366c05dfbe9903ad 100644
--- a/app/code/Magento/Eav/Model/Entity/VersionControl/AbstractEntity.php
+++ b/app/code/Magento/Eav/Model/Entity/VersionControl/AbstractEntity.php
@@ -11,26 +11,26 @@ namespace Magento\Eav\Model\Entity\VersionControl;
 abstract class AbstractEntity extends \Magento\Eav\Model\Entity\AbstractEntity
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot
      */
     protected $entitySnapshot;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite
      */
     protected $entityRelationComposite;
 
     /**
      * @param \Magento\Eav\Model\Entity\Context $context
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param array $data
      * @codeCoverageIgnore
      */
     public function __construct(
         \Magento\Eav\Model\Entity\Context $context,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
-        \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
         $data = []
     ) {
         $this->entitySnapshot = $entitySnapshot;
diff --git a/app/code/Magento/Eav/Model/Entity/VersionControl/Metadata.php b/app/code/Magento/Eav/Model/Entity/VersionControl/Metadata.php
index 9947c2658c6d59d093801a13bc8a9249c483b8ee..40184c1e67f496de718760a3a001093d0a1fef1d 100644
--- a/app/code/Magento/Eav/Model/Entity/VersionControl/Metadata.php
+++ b/app/code/Magento/Eav/Model/Entity/VersionControl/Metadata.php
@@ -8,7 +8,7 @@ namespace Magento\Eav\Model\Entity\VersionControl;
 /**
  * Class Metadata represents a list of entity fields that are applicable for persistence operations
  */
-class Metadata extends \Magento\Framework\Model\Resource\Db\VersionControl\Metadata
+class Metadata extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata
 {
     /**
      * Returns list of entity fields that are applicable for persistence operations
diff --git a/app/code/Magento/Eav/Model/Form.php b/app/code/Magento/Eav/Model/Form.php
index dc8c9428e33bc3c731c0d8870ef650ce73dc130d..c2fdcc8dffbd3b4e180307972f45fca63e95d683 100644
--- a/app/code/Magento/Eav/Model/Form.php
+++ b/app/code/Magento/Eav/Model/Form.php
@@ -185,14 +185,14 @@ abstract class Form
     protected function _getFormAttributeCollection()
     {
         return $this->_universalFactory->create(
-            str_replace('_', '\\', $this->_moduleName) . '\\Model\\Resource\\Form\\Attribute\\Collection'
+            str_replace('_', '\\', $this->_moduleName) . '\\Model\\ResourceModel\\Form\\Attribute\\Collection'
         );
     }
 
     /**
      * Get EAV Entity Form Attribute Collection with applied filters
      *
-     * @return \Magento\Eav\Model\Resource\Form\Attribute\Collection
+     * @return \Magento\Eav\Model\ResourceModel\Form\Attribute\Collection
      */
     protected function _getFilteredFormAttributeCollection()
     {
diff --git a/app/code/Magento/Eav/Model/Form/Element.php b/app/code/Magento/Eav/Model/Form/Element.php
index ff23006ea167792577a40b5a5a04a8596ea3c847..2c573a42e8d1c155e84d71b8347621be1ca9428e 100644
--- a/app/code/Magento/Eav/Model/Form/Element.php
+++ b/app/code/Magento/Eav/Model/Form/Element.php
@@ -10,7 +10,7 @@ use Magento\Framework\Exception\LocalizedException;
 /**
  * Eav Form Element Model
  *
- * @method \Magento\Eav\Model\Resource\Form\Element getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Form\Element getResource()
  * @method int getTypeId()
  * @method \Magento\Eav\Model\Form\Element setTypeId(int $value)
  * @method int getFieldsetId()
@@ -40,7 +40,7 @@ class Element extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -49,7 +49,7 @@ class Element extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -65,13 +65,13 @@ class Element extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Resource\Form\Element');
+        $this->_init('Magento\Eav\Model\ResourceModel\Form\Element');
     }
 
     /**
      * Retrieve resource instance wrapper
      *
-     * @return \Magento\Eav\Model\Resource\Form\Element
+     * @return \Magento\Eav\Model\ResourceModel\Form\Element
      * @codeCoverageIgnore
      */
     protected function _getResource()
@@ -82,7 +82,7 @@ class Element extends \Magento\Framework\Model\AbstractModel
     /**
      * Retrieve resource collection instance wrapper
      *
-     * @return \Magento\Eav\Model\Resource\Form\Element\Collection
+     * @return \Magento\Eav\Model\ResourceModel\Form\Element\Collection
      * @codeCoverageIgnore
      */
     public function getCollection()
diff --git a/app/code/Magento/Eav/Model/Form/Fieldset.php b/app/code/Magento/Eav/Model/Form/Fieldset.php
index 1b2b20b088a57178eea5030a17ecd7b532cb911a..6b7a6fd4561a79887c395eb199aacf29ed7ca0b2 100644
--- a/app/code/Magento/Eav/Model/Form/Fieldset.php
+++ b/app/code/Magento/Eav/Model/Form/Fieldset.php
@@ -8,7 +8,7 @@ namespace Magento\Eav\Model\Form;
 /**
  * Eav Form Fieldset Model
  *
- * @method \Magento\Eav\Model\Resource\Form\Fieldset getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Form\Fieldset getResource()
  * @method int getTypeId()
  * @method \Magento\Eav\Model\Form\Fieldset setTypeId(int $value)
  * @method string getCode()
@@ -36,7 +36,7 @@ class Fieldset extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -45,7 +45,7 @@ class Fieldset extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -61,13 +61,13 @@ class Fieldset extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Resource\Form\Fieldset');
+        $this->_init('Magento\Eav\Model\ResourceModel\Form\Fieldset');
     }
 
     /**
      * Retrieve resource instance wrapper
      *
-     * @return \Magento\Eav\Model\Resource\Form\Fieldset
+     * @return \Magento\Eav\Model\ResourceModel\Form\Fieldset
      * @codeCoverageIgnore
      */
     protected function _getResource()
@@ -78,7 +78,7 @@ class Fieldset extends \Magento\Framework\Model\AbstractModel
     /**
      * Retrieve resource collection instance wrapper
      *
-     * @return \Magento\Eav\Model\Resource\Form\Fieldset\Collection
+     * @return \Magento\Eav\Model\ResourceModel\Form\Fieldset\Collection
      * @codeCoverageIgnore
      */
     public function getCollection()
diff --git a/app/code/Magento/Eav/Model/Form/Type.php b/app/code/Magento/Eav/Model/Form/Type.php
index db9d999c2216b174a974453cce7b4b9e3b28f614..011a751799b5f40b70fa2eb64812dc97860e16bc 100644
--- a/app/code/Magento/Eav/Model/Form/Type.php
+++ b/app/code/Magento/Eav/Model/Form/Type.php
@@ -8,7 +8,7 @@ namespace Magento\Eav\Model\Form;
 /**
  * Eav Form Type Model
  *
- * @method \Magento\Eav\Model\Resource\Form\Type getResource()
+ * @method \Magento\Eav\Model\ResourceModel\Form\Type getResource()
  * @method string getCode()
  * @method \Magento\Eav\Model\Form\Type setCode(string $value)
  * @method string getLabel()
@@ -46,7 +46,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Eav\Model\Form\FieldsetFactory $fieldsetFactory
      * @param \Magento\Eav\Model\Form\ElementFactory $elementFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @codeCoverageIgnore
@@ -56,7 +56,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Eav\Model\Form\FieldsetFactory $fieldsetFactory,
         \Magento\Eav\Model\Form\ElementFactory $elementFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -73,13 +73,13 @@ class Type extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Resource\Form\Type');
+        $this->_init('Magento\Eav\Model\ResourceModel\Form\Type');
     }
 
     /**
      * Retrieve resource instance wrapper
      *
-     * @return \Magento\Eav\Model\Resource\Form\Type
+     * @return \Magento\Eav\Model\ResourceModel\Form\Type
      * @codeCoverageIgnore
      */
     protected function _getResource()
@@ -90,7 +90,7 @@ class Type extends \Magento\Framework\Model\AbstractModel
     /**
      * Retrieve resource collection instance wrapper
      *
-     * @return \Magento\Eav\Model\Resource\Form\Type\Collection
+     * @return \Magento\Eav\Model\ResourceModel\Form\Type\Collection
      * @codeCoverageIgnore
      */
     public function getCollection()
diff --git a/app/code/Magento/Eav/Model/Resource/Attribute.php b/app/code/Magento/Eav/Model/ResourceModel/Attribute.php
similarity index 97%
rename from app/code/Magento/Eav/Model/Resource/Attribute.php
rename to app/code/Magento/Eav/Model/ResourceModel/Attribute.php
index 73dd76c0d1c8a3c16481490a675c8f2c4814198a..c8c2b19ad7dd4fa802b2c9fd2950d6ad413ccce1 100644
--- a/app/code/Magento/Eav/Model/Resource/Attribute.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Attribute.php
@@ -9,12 +9,12 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Eav\Model\Resource;
+namespace Magento\Eav\Model\ResourceModel;
 
 use Magento\Framework\DB\Select;
 use Magento\Framework\Model\AbstractModel;
 
-abstract class Attribute extends \Magento\Eav\Model\Resource\Entity\Attribute
+abstract class Attribute extends \Magento\Eav\Model\ResourceModel\Entity\Attribute
 {
     /**
      * Get EAV website table
diff --git a/app/code/Magento/Eav/Model/Resource/Attribute/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Attribute/Collection.php
similarity index 96%
rename from app/code/Magento/Eav/Model/Resource/Attribute/Collection.php
rename to app/code/Magento/Eav/Model/ResourceModel/Attribute/Collection.php
index 94da1ce434321b3b85eb9f4c71ded8c964010bdd..b4212e0de80259b37f2bbc174477ae98015468f0 100644
--- a/app/code/Magento/Eav/Model/Resource/Attribute/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Attribute/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Attribute;
+namespace Magento\Eav\Model\ResourceModel\Attribute;
 
 use Magento\Store\Model\Website;
 
@@ -12,7 +12,7 @@ use Magento\Store\Model\Website;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-abstract class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+abstract class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
 {
     /**
      * code of password hash in customer's EAV tables
@@ -46,7 +46,7 @@ abstract class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\C
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -57,7 +57,7 @@ abstract class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\C
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $eavConfig, $connection, $resource);
diff --git a/app/code/Magento/Eav/Model/Resource/Attribute/DefaultEntityAttributes/ProviderInterface.php b/app/code/Magento/Eav/Model/ResourceModel/Attribute/DefaultEntityAttributes/ProviderInterface.php
similarity index 78%
rename from app/code/Magento/Eav/Model/Resource/Attribute/DefaultEntityAttributes/ProviderInterface.php
rename to app/code/Magento/Eav/Model/ResourceModel/Attribute/DefaultEntityAttributes/ProviderInterface.php
index 4da84e26c36733ceba37d58ac7c83eb5c21c2092..0d00fa9d395fb8a7d074084cc7188694ba2af07f 100644
--- a/app/code/Magento/Eav/Model/Resource/Attribute/DefaultEntityAttributes/ProviderInterface.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Attribute/DefaultEntityAttributes/ProviderInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Attribute\DefaultEntityAttributes;
+namespace Magento\Eav\Model\ResourceModel\Attribute\DefaultEntityAttributes;
 
 interface ProviderInterface
 {
diff --git a/app/code/Magento/Eav/Model/Resource/Config.php b/app/code/Magento/Eav/Model/ResourceModel/Config.php
similarity index 96%
rename from app/code/Magento/Eav/Model/Resource/Config.php
rename to app/code/Magento/Eav/Model/ResourceModel/Config.php
index be2588554cb8512be8261e60d37a280c9fb98e6a..f4c086a01609a46a603aed710ee3bdf127de6255 100644
--- a/app/code/Magento/Eav/Model/Resource/Config.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Config.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource;
+namespace Magento\Eav\Model\ResourceModel;
 
 /**
  * Eav Resource Config model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Config extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Config extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Array of entity types
diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Attribute.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute.php
similarity index 98%
rename from app/code/Magento/Eav/Model/Resource/Entity/Attribute.php
rename to app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute.php
index a7bf8db04daf32aa49f4800c8b19e7307c15596e..46d4c57cf0a7a1c3602af0de224f638be4a0df11 100644
--- a/app/code/Magento/Eav/Model/Resource/Entity/Attribute.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity;
+namespace Magento\Eav\Model\ResourceModel\Entity;
 
 use Magento\Eav\Model\Entity\Attribute as EntityAttribute;
 use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
@@ -15,7 +15,7 @@ use Magento\Framework\Model\AbstractModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Attribute extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Attribute extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Eav Entity attributes cache
@@ -37,14 +37,14 @@ class Attribute extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param Type $eavEntityType
      * @param string $connectionName
      * @codeCoverageIgnore
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         Type $eavEntityType,
         $connectionName = null
diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Collection.php
similarity index 96%
rename from app/code/Magento/Eav/Model/Resource/Entity/Attribute/Collection.php
rename to app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Collection.php
index 6b8f547bbd3432ff7188ebef96109676cb883c97..b750d50f7419fe210cc2ac95c2e1d5b300b6f1a4 100644
--- a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity\Attribute;
+namespace Magento\Eav\Model\ResourceModel\Entity\Attribute;
 
 use Magento\Eav\Model\Entity\Type;
 
@@ -12,7 +12,7 @@ use Magento\Eav\Model\Entity\Type;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Add attribute set info flag
@@ -33,7 +33,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -43,7 +43,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->eavConfig = $eavConfig;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
@@ -57,7 +57,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Entity\Attribute', 'Magento\Eav\Model\Resource\Entity\Attribute');
+        $this->_init('Magento\Eav\Model\Entity\Attribute', 'Magento\Eav\Model\ResourceModel\Entity\Attribute');
     }
 
     /**
@@ -418,7 +418,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     /**
      * Ad information about attribute sets to collection result data
      *
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected function _afterLoadData()
     {
diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Grid/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Grid/Collection.php
similarity index 76%
rename from app/code/Magento/Eav/Model/Resource/Entity/Attribute/Grid/Collection.php
rename to app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Grid/Collection.php
index 911d250f8680f13e408b5ffb869f95402fed3433..4dca475039911a4c11b730f50bd42840799daff4 100644
--- a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Grid/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Grid/Collection.php
@@ -3,16 +3,16 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity\Attribute\Grid;
+namespace Magento\Eav\Model\ResourceModel\Entity\Attribute\Grid;
 
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 /**
  * Eav Resource Attribute Set Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection
+class Collection extends \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection
 {
     /**
      * @var \Magento\Framework\Registry
@@ -26,7 +26,7 @@ class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collec
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Registry $registryManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -36,7 +36,7 @@ class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collec
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Registry $registryManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_registryManager = $registryManager;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
@@ -45,7 +45,7 @@ class Collection extends \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collec
     /**
      *  Add filter by entity type id to collection
      *
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection|$this
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection|$this
      */
     protected function _initSelect()
     {
diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Group.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group.php
similarity index 93%
rename from app/code/Magento/Eav/Model/Resource/Entity/Attribute/Group.php
rename to app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group.php
index 30952af97f89b3112de7c942ff5ff027e38e764d..6a4a8f0e70ffa11ee4d6c779c6040b9757abeb85 100644
--- a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Group.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity\Attribute;
+namespace Magento\Eav\Model\ResourceModel\Entity\Attribute;
 
 /**
  * Eav Resource Entity Attribute Group
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Group extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Group extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Constants for attribute group codes
@@ -58,7 +58,7 @@ class Group extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * Perform actions before object save
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object)
     {
@@ -72,7 +72,7 @@ class Group extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * Perform actions after object save
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Group/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group/Collection.php
similarity index 74%
rename from app/code/Magento/Eav/Model/Resource/Entity/Attribute/Group/Collection.php
rename to app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group/Collection.php
index ed563870f82f4bc1802f54d2266929da3d42ee8e..57304cbe277be0d67054980b3942eb91236d4aba 100644
--- a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Group/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Group/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity\Attribute\Group;
+namespace Magento\Eav\Model\ResourceModel\Entity\Attribute\Group;
 
 /**
  * Eav attribute group resource collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init resource model for collection
@@ -20,7 +20,10 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Entity\Attribute\Group', 'Magento\Eav\Model\Resource\Entity\Attribute\Group');
+        $this->_init(
+            'Magento\Eav\Model\Entity\Attribute\Group',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Group'
+        );
     }
 
     /**
diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Option.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option.php
similarity index 97%
rename from app/code/Magento/Eav/Model/Resource/Entity/Attribute/Option.php
rename to app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option.php
index 8c0f7d4eda637a7406150a1ab20c09174350b2b4..2bb306fa7c2e67e552b3ec1913657291d5868cae 100644
--- a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Option.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity\Attribute;
+namespace Magento\Eav\Model\ResourceModel\Entity\Attribute;
 
 /**
  * Entity attribute option resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Option extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Option/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php
similarity index 89%
rename from app/code/Magento/Eav/Model/Resource/Entity/Attribute/Option/Collection.php
rename to app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php
index 400a4279d272b0dd2212bd18cabd166a28e244e4..730312c0940724a17495eb9ce0cd34ee348ccf16 100644
--- a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Option/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Option/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity\Attribute\Option;
+namespace Magento\Eav\Model\ResourceModel\Entity\Attribute\Option;
 
 /**
  * Entity attribute option collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Option value table
@@ -20,7 +20,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected $_optionValueTable;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_coreResource;
 
@@ -34,10 +34,10 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\App\Resource $coreResource
+     * @param \Magento\Framework\App\ResourceConnection $coreResource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -45,10 +45,10 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\App\Resource $coreResource,
+        \Magento\Framework\App\ResourceConnection $coreResource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         $this->_coreResource = $coreResource;
@@ -64,7 +64,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     {
         $this->_init(
             'Magento\Eav\Model\Entity\Attribute\Option',
-            'Magento\Eav\Model\Resource\Entity\Attribute\Option'
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Option'
         );
         $this->_optionValueTable = $this->_coreResource->getTableName('eav_attribute_option_value');
     }
diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Set.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set.php
similarity index 94%
rename from app/code/Magento/Eav/Model/Resource/Entity/Attribute/Set.php
rename to app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set.php
index c0e2c69904cc535e373b8daa376b0638a91d7403..913be1826cab74d61377e0e381693c70d2e91752 100644
--- a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Set.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity\Attribute;
+namespace Magento\Eav\Model\ResourceModel\Entity\Attribute;
 
 /**
  * Eav attribute set resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Set extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Set extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * EAV cache ids
@@ -18,7 +18,7 @@ class Set extends \Magento\Framework\Model\Resource\Db\AbstractDb
     const ATTRIBUTES_CACHE_ID = 'EAV_ENTITY_ATTRIBUTES_BY_SET_ID';
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\GroupFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\GroupFactory
      */
     protected $_attrGroupFactory;
 
@@ -28,15 +28,15 @@ class Set extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $eavConfig;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param GroupFactory $attrGroupFactory
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param string $connectionName
      * @codeCoverageIgnore
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
-        \Magento\Eav\Model\Resource\Entity\Attribute\GroupFactory $attrGroupFactory,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\GroupFactory $attrGroupFactory,
         \Magento\Eav\Model\Config $eavConfig,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Set/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set/Collection.php
similarity index 84%
rename from app/code/Magento/Eav/Model/Resource/Entity/Attribute/Set/Collection.php
rename to app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set/Collection.php
index 0cacc81078d3e6f4f05c89b74c7e059065d41e2f..63cd97ef0d80acc6c18d9fb8f7c92c0c2412e5ae 100644
--- a/app/code/Magento/Eav/Model/Resource/Entity/Attribute/Set/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Attribute/Set/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity\Attribute\Set;
+namespace Magento\Eav\Model\ResourceModel\Entity\Attribute\Set;
 
 /**
  * Eav Resource Attribute Set Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
@@ -20,7 +20,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Entity\Attribute\Set', 'Magento\Eav\Model\Resource\Entity\Attribute\Set');
+        $this->_init('Magento\Eav\Model\Entity\Attribute\Set', 'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set');
     }
 
     /**
diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Store.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Store.php
similarity index 91%
rename from app/code/Magento/Eav/Model/Resource/Entity/Store.php
rename to app/code/Magento/Eav/Model/ResourceModel/Entity/Store.php
index 4016f5a5c80c518eb7c738b95fbe1806692c2d18..eddbe7edce3ea6d505903d89e68657781f92945c 100644
--- a/app/code/Magento/Eav/Model/Resource/Entity/Store.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Store.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity;
+namespace Magento\Eav\Model\ResourceModel\Entity;
 
 use Magento\Framework\Model\AbstractModel;
 use Magento\Framework\DataObject;
@@ -13,7 +13,7 @@ use Magento\Framework\DataObject;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Store extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Store extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Type.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Type.php
similarity index 91%
rename from app/code/Magento/Eav/Model/Resource/Entity/Type.php
rename to app/code/Magento/Eav/Model/ResourceModel/Entity/Type.php
index ad1d12e62bcb7b2f77ebdfdbddd3f4eea2fad222..0b54022ab9960c06a3295d96f8cb1faa5edfe244 100644
--- a/app/code/Magento/Eav/Model/Resource/Entity/Type.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Type.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity;
+namespace Magento\Eav\Model\ResourceModel\Entity;
 
 /**
  * EAV entity type resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Type extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Type extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Eav/Model/Resource/Entity/Type/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Entity/Type/Collection.php
similarity index 69%
rename from app/code/Magento/Eav/Model/Resource/Entity/Type/Collection.php
rename to app/code/Magento/Eav/Model/ResourceModel/Entity/Type/Collection.php
index 789bb271959c42ee77a8da0af4814b682f16a09a..769bff41b50ca9ff768303e8083388cb86a07228 100644
--- a/app/code/Magento/Eav/Model/Resource/Entity/Type/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Entity/Type/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity\Type;
+namespace Magento\Eav\Model\ResourceModel\Entity\Type;
 
 /**
  * Eav Resource Entity Type Collection Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
@@ -20,6 +20,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Entity\Type', 'Magento\Eav\Model\Resource\Entity\Type');
+        $this->_init('Magento\Eav\Model\Entity\Type', 'Magento\Eav\Model\ResourceModel\Entity\Type');
     }
 }
diff --git a/app/code/Magento/Eav/Model/Resource/Form/Attribute.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute.php
similarity index 91%
rename from app/code/Magento/Eav/Model/Resource/Form/Attribute.php
rename to app/code/Magento/Eav/Model/ResourceModel/Form/Attribute.php
index f69b20b638afb731599c15bbf98c8e6f138aed23..53aec9967498224629038397fc7a591aa7f6dc4d 100644
--- a/app/code/Magento/Eav/Model/Resource/Form/Attribute.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Eav\Model\Resource\Form;
+namespace Magento\Eav\Model\ResourceModel\Form;
 
-abstract class Attribute extends \Magento\Framework\Model\Resource\Db\AbstractDb
+abstract class Attribute extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Return form attribute IDs by form code
diff --git a/app/code/Magento/Eav/Model/Resource/Form/Attribute/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute/Collection.php
similarity index 96%
rename from app/code/Magento/Eav/Model/Resource/Form/Attribute/Collection.php
rename to app/code/Magento/Eav/Model/ResourceModel/Form/Attribute/Collection.php
index 798acfd2bbbc265ee1a0b9fa4f13def437e20535..2e364087647622b038152b806397c2d553216a2b 100644
--- a/app/code/Magento/Eav/Model/Resource/Form/Attribute/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Attribute/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Form\Attribute;
+namespace Magento\Eav\Model\ResourceModel\Form\Attribute;
 
 /**
  * EAV Form Attribute Resource Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Current module pathname
@@ -58,7 +58,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @codeCoverageIgnore
      */
     public function __construct(
@@ -69,7 +69,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         $this->_eavConfig = $eavConfig;
diff --git a/app/code/Magento/Eav/Model/Resource/Form/Element.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Element.php
similarity index 90%
rename from app/code/Magento/Eav/Model/Resource/Form/Element.php
rename to app/code/Magento/Eav/Model/ResourceModel/Form/Element.php
index 95979bdd4062fbc43df7a86a8c5f15e463363c46..82772b7436f1a62c9c8bec53e015e2015b0188ab 100644
--- a/app/code/Magento/Eav/Model/Resource/Form/Element.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Element.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Form;
+namespace Magento\Eav\Model\ResourceModel\Form;
 
 /**
  * Eav Form Element Resource Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Element extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Element extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
diff --git a/app/code/Magento/Eav/Model/Resource/Form/Element/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Element/Collection.php
similarity index 93%
rename from app/code/Magento/Eav/Model/Resource/Form/Element/Collection.php
rename to app/code/Magento/Eav/Model/ResourceModel/Form/Element/Collection.php
index dc2e92865a465ccbff09f658567fcb28afbebc91..3f1fc938e124ad2df070ffe0244d51fac5c150e2 100644
--- a/app/code/Magento/Eav/Model/Resource/Form/Element/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Element/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Form\Element;
+namespace Magento\Eav\Model\ResourceModel\Form\Element;
 
 /**
  * Eav Form Element Resource Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize collection model
@@ -20,7 +20,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Form\Element', 'Magento\Eav\Model\Resource\Form\Element');
+        $this->_init('Magento\Eav\Model\Form\Element', 'Magento\Eav\Model\ResourceModel\Form\Element');
     }
 
     /**
diff --git a/app/code/Magento/Eav/Model/Resource/Form/Fieldset.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset.php
similarity index 97%
rename from app/code/Magento/Eav/Model/Resource/Form/Fieldset.php
rename to app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset.php
index 3a4286b9517abae465e9b484c3c28f2438e53b2b..7b6897229aab83d91c50157b3a2f44153346c910 100644
--- a/app/code/Magento/Eav/Model/Resource/Form/Fieldset.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Form;
+namespace Magento\Eav\Model\ResourceModel\Form;
 
 use Magento\Eav\Model\Form\Fieldset as FormFieldset;
 use Magento\Framework\DB\Select;
@@ -14,7 +14,7 @@ use Magento\Framework\Model\AbstractModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Fieldset extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Fieldset extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
diff --git a/app/code/Magento/Eav/Model/Resource/Form/Fieldset/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset/Collection.php
similarity index 93%
rename from app/code/Magento/Eav/Model/Resource/Form/Fieldset/Collection.php
rename to app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset/Collection.php
index c03815a72a15231435fdcc72b65904fad8c91fcb..3d6feedcc1cddaa49cc0aaa4fb6aae591722f5b5 100644
--- a/app/code/Magento/Eav/Model/Resource/Form/Fieldset/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Fieldset/Collection.php
@@ -10,17 +10,17 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Eav\Model\Resource\Form\Fieldset;
+namespace Magento\Eav\Model\ResourceModel\Form\Fieldset;
 
 use Magento\Framework\Data\Collection\EntityFactory;
 use Magento\Eav\Model\Form\Type;
 use Magento\Framework\Event\ManagerInterface;
 use Magento\Framework\Data\Collection\Db\FetchStrategyInterface;
-use Magento\Framework\Model\Resource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 use Psr\Log\LoggerInterface as Logger;
 use Magento\Store\Model\StoreManagerInterface;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var StoreManagerInterface
@@ -65,7 +65,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Form\Fieldset', 'Magento\Eav\Model\Resource\Form\Fieldset');
+        $this->_init('Magento\Eav\Model\Form\Fieldset', 'Magento\Eav\Model\ResourceModel\Form\Fieldset');
     }
 
     /**
diff --git a/app/code/Magento/Eav/Model/Resource/Form/Type.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Type.php
similarity index 94%
rename from app/code/Magento/Eav/Model/Resource/Form/Type.php
rename to app/code/Magento/Eav/Model/ResourceModel/Form/Type.php
index 43543cdb52de267249247afc89fcf7bfa11e6915..38535f4831db3ece09c8fad3363f59e4a7e5ecfd 100644
--- a/app/code/Magento/Eav/Model/Resource/Form/Type.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Type.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Form;
+namespace Magento\Eav\Model\ResourceModel\Form;
 
 use Magento\Eav\Model\Form\Type as FormType;
 use Magento\Framework\Model\AbstractModel;
@@ -13,7 +13,7 @@ use Magento\Framework\Model\AbstractModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Type extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Type extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
@@ -71,7 +71,7 @@ class Type extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Save entity types after save form type
      *
-     * @see \Magento\Framework\Model\Resource\Db\AbstractDb#_afterSave($object)
+     * @see \Magento\Framework\Model\ResourceModel\Db\AbstractDb#_afterSave($object)
      *
      * @param FormType|AbstractModel $object
      * @return $this
diff --git a/app/code/Magento/Eav/Model/Resource/Form/Type/Collection.php b/app/code/Magento/Eav/Model/ResourceModel/Form/Type/Collection.php
similarity index 87%
rename from app/code/Magento/Eav/Model/Resource/Form/Type/Collection.php
rename to app/code/Magento/Eav/Model/ResourceModel/Form/Type/Collection.php
index 48c0d261d3331c6fa7b5d86201b2af74375dba8e..5fcb127bca110eb4efb4c0d6d4c7c0542740b2a6 100644
--- a/app/code/Magento/Eav/Model/Resource/Form/Type/Collection.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Form/Type/Collection.php
@@ -9,11 +9,11 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Eav\Model\Resource\Form\Type;
+namespace Magento\Eav\Model\ResourceModel\Form\Type;
 
 use Magento\Eav\Model\Entity\Type;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize collection model
@@ -23,7 +23,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Eav\Model\Form\Type', 'Magento\Eav\Model\Resource\Form\Type');
+        $this->_init('Magento\Eav\Model\Form\Type', 'Magento\Eav\Model\ResourceModel\Form\Type');
     }
 
     /**
diff --git a/app/code/Magento/Eav/Model/Resource/Helper.php b/app/code/Magento/Eav/Model/ResourceModel/Helper.php
similarity index 91%
rename from app/code/Magento/Eav/Model/Resource/Helper.php
rename to app/code/Magento/Eav/Model/ResourceModel/Helper.php
index 4a823cb783f2ebf89867cd8e7ad90c894f86cd0d..994b131bfd78f202708f48d976b2a56be2dd1b75 100644
--- a/app/code/Magento/Eav/Model/Resource/Helper.php
+++ b/app/code/Magento/Eav/Model/ResourceModel/Helper.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource;
+namespace Magento\Eav\Model\ResourceModel;
 
 /**
  * Eav Mysql resource helper model
@@ -15,11 +15,11 @@ class Helper extends \Magento\Framework\DB\Helper
     /**
      * Construct
      *
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param string $modulePrefix
      * @codeCoverageIgnore
      */
-    public function __construct(\Magento\Framework\App\Resource $resource, $modulePrefix = 'Magento_Eav')
+    public function __construct(\Magento\Framework\App\ResourceConnection $resource, $modulePrefix = 'Magento_Eav')
     {
         parent::__construct($resource, $modulePrefix);
     }
diff --git a/app/code/Magento/Eav/Plugin/Model/Resource/Entity/Attribute.php b/app/code/Magento/Eav/Plugin/Model/ResourceModel/Entity/Attribute.php
similarity index 89%
rename from app/code/Magento/Eav/Plugin/Model/Resource/Entity/Attribute.php
rename to app/code/Magento/Eav/Plugin/Model/ResourceModel/Entity/Attribute.php
index 436d16ad8f9eb55ca183d11cf69f5e92c615328c..82a21335e106dd75f8de4987b634841af97ee877 100644
--- a/app/code/Magento/Eav/Plugin/Model/Resource/Entity/Attribute.php
+++ b/app/code/Magento/Eav/Plugin/Model/ResourceModel/Entity/Attribute.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Plugin\Model\Resource\Entity;
+namespace Magento\Eav\Plugin\Model\ResourceModel\Entity;
 
 class Attribute
 {
@@ -32,14 +32,14 @@ class Attribute
     }
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute $subject
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute $subject
      * @param callable $proceed
      * @param int $attributeId
      * @return array
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundGetStoreLabelsByAttributeId(
-        \Magento\Eav\Model\Resource\Entity\Attribute $subject,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute $subject,
         \Closure $proceed,
         $attributeId
     ) {
diff --git a/app/code/Magento/Eav/Setup/EavSetup.php b/app/code/Magento/Eav/Setup/EavSetup.php
index db623f25b8c3738da2dc3d4c8511180b81710564..a1dba20110f860f0841fdf3eca6119995c2f57c3 100644
--- a/app/code/Magento/Eav/Setup/EavSetup.php
+++ b/app/code/Magento/Eav/Setup/EavSetup.php
@@ -7,7 +7,7 @@ namespace Magento\Eav\Setup;
 
 use Magento\Eav\Model\Entity\Setup\Context;
 use Magento\Eav\Model\Entity\Setup\PropertyMapperInterface;
-use Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory;
 use Magento\Framework\App\CacheInterface;
 use Magento\Framework\Setup\ModuleDataSetupInterface;
 use Magento\Framework\Exception\LocalizedException;
@@ -108,7 +108,7 @@ class EavSetup
     /**
      * Gets attribute group collection factory
      *
-     * @return \Magento\Eav\Model\Resource\Entity\Attribute\Group\Collection
+     * @return \Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\Collection
      */
     public function getAttributeGroupCollectionFactory()
     {
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Attribute/GroupRepositoryTest.php b/app/code/Magento/Eav/Test/Unit/Model/Attribute/GroupRepositoryTest.php
index a429c5323e09d3e9dd5e6d82469d15a7e51b8a11..00b4cfc09b08717b075c67d75ce41b92a67aa73e 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Attribute/GroupRepositoryTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Attribute/GroupRepositoryTest.php
@@ -45,7 +45,7 @@ class GroupRepositoryTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->groupResourceMock = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Group',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Group',
             ['delete', '__wakeup', 'load', 'save'],
             [],
             '',
@@ -67,7 +67,7 @@ class GroupRepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->groupListFactoryMock = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Eav/Test/Unit/Model/AttributeManagementTest.php b/app/code/Magento/Eav/Test/Unit/Model/AttributeManagementTest.php
index 8d2dd6fcbcbea2ec94b68cf3a141e20fea1c13d3..5b2a901eaac2ebecb3afa454c7074d410970ccb5 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/AttributeManagementTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/AttributeManagementTest.php
@@ -59,7 +59,7 @@ class AttributeManagementTest extends \PHPUnit_Framework_TestCase
         $this->setRepositoryMock =
             $this->getMock('Magento\Eav\Api\AttributeSetRepositoryInterface', [], [], '', false);
         $this->attributeCollectionMock =
-            $this->getMock('Magento\Eav\Model\Resource\Entity\Attribute\Collection', [], [], '', false);
+            $this->getMock('Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection', [], [], '', false);
         $this->eavConfigMock =
             $this->getMock('Magento\Eav\Model\Config', [], [], '', false);
         $this->entityTypeFactoryMock =
@@ -69,7 +69,7 @@ class AttributeManagementTest extends \PHPUnit_Framework_TestCase
         $this->attributeRepositoryMock =
             $this->getMock('Magento\Eav\Api\AttributeRepositoryInterface', [], [], '', false);
         $this->attributeResourceMock =
-            $this->getMock('Magento\Eav\Model\Resource\Entity\Attribute', [], [], '', false);
+            $this->getMock('Magento\Eav\Model\ResourceModel\Entity\Attribute', [], [], '', false);
 
         $this->model = new \Magento\Eav\Model\AttributeManagement(
             $this->setRepositoryMock,
diff --git a/app/code/Magento/Eav/Test/Unit/Model/AttributeSetRepositoryTest.php b/app/code/Magento/Eav/Test/Unit/Model/AttributeSetRepositoryTest.php
index b9c4df2928d13408695e7e39a1748a2cb0989185..17defd69ea0885b61784fac7b55d6a696319e21b 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/AttributeSetRepositoryTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/AttributeSetRepositoryTest.php
@@ -53,7 +53,7 @@ class AttributeSetRepositoryTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->resourceMock = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set',
             [],
             [],
             '',
@@ -67,7 +67,7 @@ class AttributeSetRepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->collectionFactoryMock = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory',
             ['create'],
             [],
             '',
@@ -221,7 +221,7 @@ class AttributeSetRepositoryTest extends \PHPUnit_Framework_TestCase
         $filterMock->expects($this->once())->method('getValue')->willReturn($entityTypeCode);
 
         $collectionMock = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection',
             ['setEntityTypeFilter', 'setCurPage', 'setPageSize', 'getItems', 'getSize'],
             [],
             '',
@@ -276,7 +276,7 @@ class AttributeSetRepositoryTest extends \PHPUnit_Framework_TestCase
         $searchCriteriaMock->expects($this->once())->method('getFilterGroups')->willReturn([]);
 
         $collectionMock = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection',
             ['setCurPage', 'setPageSize', 'getItems', 'getSize'],
             [],
             '',
diff --git a/app/code/Magento/Eav/Test/Unit/Model/ConfigTest.php b/app/code/Magento/Eav/Test/Unit/Model/ConfigTest.php
index dbf47f01cffefda64ff11a721398926a6bdaf350..1f8c78bafe5d83c24372abeae0b7756917cd7b0c 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/ConfigTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/ConfigTest.php
@@ -27,7 +27,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     protected $typeFactoryMock;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Type\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Type\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collectionFactoryMock;
 
@@ -51,7 +51,8 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
-        $this->collectionFactoryMock = $this->getMockBuilder('Magento\Eav\Model\Resource\Entity\Type\CollectionFactory')
+        $this->collectionFactoryMock =
+            $this->getMockBuilder('Magento\Eav\Model\ResourceModel\Entity\Type\CollectionFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -82,7 +83,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetAttributeCache($cacheEnabled, $loadCalls, $cachedValue)
     {
-        $attributeCollectionMock = $this->getMockBuilder('Magento\Eav\Model\Resource\Entity\Attribute\Collection')
+        $attributeCollectionMock = $this->getMockBuilder('Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['getData', 'setEntityTypeFilter'])
             ->getMock();
@@ -99,7 +100,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $factoryCalls = [
-            ['Magento\Eav\Model\Resource\Entity\Attribute\Collection', [], $attributeCollectionMock],
+            ['Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection', [], $attributeCollectionMock],
             ['Magento\Eav\Model\Entity\Attribute', [], $entityAttributeMock],
         ];
 
diff --git a/app/code/Magento/Eav/Test/Unit/Model/EavCustomAttributeTypeLocatorTest.php b/app/code/Magento/Eav/Test/Unit/Model/EavCustomAttributeTypeLocatorTest.php
index 2a7db2a3b3837be025c1cc3667133ea3e19c59cd..7de41072391e7f3e7f4e984fb5266c0fcb7265d0 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/EavCustomAttributeTypeLocatorTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/EavCustomAttributeTypeLocatorTest.php
@@ -91,7 +91,7 @@ class EavCustomAttributeTypeLocatorTest extends \PHPUnit_Framework_TestCase
         ];
 
         $attribute = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['getBackendModel'],
             [],
             '',
@@ -103,7 +103,7 @@ class EavCustomAttributeTypeLocatorTest extends \PHPUnit_Framework_TestCase
             ->willReturn($mediaBackEndModelClass);
 
         $attributeNoBackendModel = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['getBackendModel', 'getFrontendInput'],
             [],
             '',
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/GroupTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/GroupTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a9a9eff9b9ec23b93d1ca2a42115fa713ee7a3f0
--- /dev/null
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/GroupTest.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Eav\Test\Unit\Model\Entity\Attribute;
+
+use Magento\Eav\Model\Entity\Attribute\Group;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
+class GroupTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var Group
+     */
+    private $model;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    private $resourceMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    private $eventManagerMock;
+
+    protected function setUp()
+    {
+        $this->resourceMock = $this->getMock(
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Group',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->eventManagerMock = $this->getMock('Magento\Framework\Event\ManagerInterface');
+        $contextMock = $this->getMock('Magento\Framework\Model\Context', [], [], '', false);
+        $contextMock->expects($this->any())->method('getEventDispatcher')->willReturn($this->eventManagerMock);
+        $constructorArguments = [
+            'resource' => $this->resourceMock,
+            'context' => $contextMock,
+        ];
+        $objectManager = new ObjectManager($this);
+        $this->model = $objectManager->getObject('Magento\Eav\Model\Entity\Attribute\Group', $constructorArguments);
+    }
+
+    /**
+     * @dataProvider attributeGroupCodeDataProvider
+     * @param string $groupName
+     * @param string $groupCode
+     */
+    public function testBeforeSaveGeneratesGroupCodeBasedOnGroupName($groupName, $groupCode)
+    {
+        $this->model->setAttributeGroupName($groupName);
+        $this->model->beforeSave();
+        $this->assertEquals($groupCode, $this->model->getAttributeGroupCode());
+    }
+
+    /**
+     * @return array
+     */
+    public function attributeGroupCodeDataProvider()
+    {
+        return [
+            ['General Group', 'general-group'],
+            ['///', md5('///')],
+        ];
+    }
+}
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/OptionManagementTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/OptionManagementTest.php
index 9dfacc06459959b106e502e9412ba49efa73f11e..622f920afccfa25dbd1871bab1a8b7babf82b5c1 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/OptionManagementTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/OptionManagementTest.php
@@ -25,7 +25,8 @@ class OptionManagementTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->attributeRepositoryMock = $this->getMock('\Magento\Eav\Model\AttributeRepository', [], [], '', false);
-        $this->resourceModelMock = $this->getMock('\Magento\Eav\Model\Resource\Entity\Attribute', [], [], '', false);
+        $this->resourceModelMock =
+            $this->getMock('\Magento\Eav\Model\ResourceModel\Entity\Attribute', [], [], '', false);
         $this->model = new \Magento\Eav\Model\Entity\Attribute\OptionManagement(
             $this->attributeRepositoryMock,
             $this->resourceModelMock
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/SetTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/SetTest.php
index b9e4fdddd2ff8c232dd9e9f3e3c42cec66a3dcad..8694690357c79b9739a8c804586c769a97d0c292 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/SetTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/SetTest.php
@@ -18,7 +18,7 @@ class SetTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $resource = $this->getMock('Magento\Eav\Model\Resource\Entity\Attribute\Set', [], [], '', false);
+        $resource = $this->getMock('Magento\Eav\Model\ResourceModel\Entity\Attribute\Set', [], [], '', false);
         $attrGroupFactory = $this->getMock(
             'Magento\Eav\Model\Entity\Attribute\GroupFactory',
             [],
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Source/TableTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Source/TableTest.php
index f19a3739f90f3bc8c94d85a0aa7e8cba0a762d5d..22c3395f3c40d1326690854d188626464693a8b8 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Source/TableTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Attribute/Source/TableTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Eav\Test\Unit\Model\Entity\Attribute\Source;
 
-use Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 class TableTest extends \PHPUnit_Framework_TestCase
@@ -25,7 +25,7 @@ class TableTest extends \PHPUnit_Framework_TestCase
         $objectManager = new ObjectManager($this);
 
         $this->collectionFactory = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory',
             [
                 'create',
                 'setPositionOrder',
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/AbstractCollectionTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/AbstractCollectionTest.php
index db8b8d18bcf538189c2e04dc8b41db00c6825010..cbd6b73d4d72f72728cfe5a61f2df55bd24b1306 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/AbstractCollectionTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/AbstractCollectionTest.php
@@ -45,7 +45,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
     protected $configMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $coreResourceMock;
 
@@ -55,7 +55,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
     protected $entityFactoryMock;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Helper|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Helper|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceHelperMock;
 
@@ -95,13 +95,13 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
         );
         $this->configMock = $this->getMock('Magento\Eav\Model\Config', [], [], '', false);
         $this->coreResourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
             false
         );
-        $this->resourceHelperMock = $this->getMock('Magento\Eav\Model\Resource\Helper', [], [], '', false);
+        $this->resourceHelperMock = $this->getMock('Magento\Eav\Model\ResourceModel\Helper', [], [], '', false);
         $this->validatorFactoryMock = $this->getMock(
             'Magento\Framework\Validator\UniversalFactory',
             [],
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/VersionControl/AbstractCollectionTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/VersionControl/AbstractCollectionTest.php
index f3c890c71a1c0aed698a56ce0ff652c23a9f5c2f..6a0aa5039c69c47714e43afb2d12687ffbabbdda 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/VersionControl/AbstractCollectionTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Collection/VersionControl/AbstractCollectionTest.php
@@ -21,7 +21,7 @@ class AbstractCollectionTest extends \Magento\Eav\Test\Unit\Model\Entity\Collect
     protected $subject;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshot;
 
@@ -32,7 +32,7 @@ class AbstractCollectionTest extends \Magento\Eav\Test\Unit\Model\Entity\Collect
         $objectManager = new ObjectManager($this);
 
         $this->entitySnapshot = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             ['registerSnapshot'],
             [],
             '',
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/Increment/NumericTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/Increment/NumericTest.php
index b427fbd7c48c5e28ab37e891aea6af8e0c1e2e2b..931819b5b43f5126b2a487397b1a83bed2aeac94 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/Increment/NumericTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/Increment/NumericTest.php
@@ -5,18 +5,18 @@
  */
 namespace Magento\Eav\Test\Unit\Model\Entity\Increment;
 
-use Magento\Eav\Model\Entity\Increment\Numeric;
+use Magento\Eav\Model\Entity\Increment\NumericValue;
 
 class NumericTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var Numeric
+     * @var NumericValue
      */
     private $model;
 
     protected function setUp()
     {
-        $this->model = new \Magento\Eav\Model\Entity\Increment\Numeric();
+        $this->model = new \Magento\Eav\Model\Entity\Increment\NumericValue();
     }
 
     /**
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/TypeTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/TypeTest.php
index 11fa1d5b4d169f769b78424d07f080ca30fe6891..7d578fa8d577cd3fcbce2434b25fd19291f5fa36 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/TypeTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/TypeTest.php
@@ -80,7 +80,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/AbstractEntityTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/AbstractEntityTest.php
index 70467e503d08fd7a6efac1b503b114f768cb4b57..8c98d7c65899f16ef6eed570bff5092bf8f2afda 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/AbstractEntityTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/AbstractEntityTest.php
@@ -6,7 +6,7 @@
 namespace Magento\Eav\Test\Unit\Model\Entity\VersionControl;
 
 use Magento\Eav\Model\Entity\VersionControl\AbstractEntity;
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 /**
@@ -15,7 +15,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class AbstractEntityTest extends \Magento\Eav\Test\Unit\Model\Entity\AbstractEntityTest
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshot;
 
@@ -27,7 +27,7 @@ class AbstractEntityTest extends \Magento\Eav\Test\Unit\Model\Entity\AbstractEnt
     protected function setUp()
     {
         $this->entitySnapshot = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             ['isModified', 'registerSnapshot'],
             [],
             '',
@@ -35,7 +35,7 @@ class AbstractEntityTest extends \Magento\Eav\Test\Unit\Model\Entity\AbstractEnt
         );
 
         $this->entityRelationComposite = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite',
             ['processRelations'],
             [],
             '',
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/MetadataTest.php b/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/MetadataTest.php
index a16ba2d2a84119442cc330b44fb3fd49758babe9..070dbdaa28f9e05d083c945c301e9ad8abdd3bff 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/MetadataTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/Entity/VersionControl/MetadataTest.php
@@ -23,7 +23,7 @@ class MetadataTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Resource/Attribute/CollectionTest.php b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Attribute/CollectionTest.php
similarity index 94%
rename from app/code/Magento/Eav/Test/Unit/Model/Resource/Attribute/CollectionTest.php
rename to app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Attribute/CollectionTest.php
index 772335265eec35b4124889f1994d1394c4a7a876..9424e4d62a99c33c9ea5ad9250ba93e2a37a9945 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Resource/Attribute/CollectionTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Attribute/CollectionTest.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Eav\Test\Unit\Model\Resource\Attribute;
+namespace Magento\Eav\Test\Unit\Model\ResourceModel\Attribute;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Eav\Model\Resource\Attribute\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Attribute\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $model;
 
@@ -56,7 +56,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -94,7 +94,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $this->select = new \Magento\Framework\DB\Select($this->connectionMock);
 
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -158,7 +158,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * Test that Magento\Eav\Model\Resource\Attribute\Collection::_initSelect sets expressions
+     * Test that Magento\Eav\Model\ResourceModel\Attribute\Collection::_initSelect sets expressions
      * that can be properly quoted by Zend_Db_Expr::quoteIdentifier
      *
      * @dataProvider initSelectDataProvider
@@ -166,7 +166,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     public function testInitSelect($column, $value, $expected)
     {
         $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->model = $helper->getObject('Magento\Customer\Model\Resource\Attribute\Collection',
+        $this->model = $helper->getObject('Magento\Customer\Model\ResourceModel\Attribute\Collection',
             [
                 'entityFactory' => $this->entityFactoryMock,
                 'logger' => $this->loggerMock,
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/Attribute/Option/CollectionTest.php b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/Option/CollectionTest.php
similarity index 88%
rename from app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/Attribute/Option/CollectionTest.php
rename to app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/Option/CollectionTest.php
index 0add078acb0aa9f0f32c6af55ce2f811b9475bf7..2da0008b0771dd4bde1eb6af5ce3716d59013b6d 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/Attribute/Option/CollectionTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/Option/CollectionTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Test\Unit\Model\Resource\Entity\Attribute\Option;
+namespace Magento\Eav\Test\Unit\Model\ResourceModel\Entity\Attribute\Option;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $model;
 
@@ -33,7 +33,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $eventManagerMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $coreResourceMock;
 
@@ -48,7 +48,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -76,7 +76,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->coreResourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -91,7 +91,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         );
         $this->connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -145,7 +145,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             $this->returnValue('eav_attribute_option')
         );
 
-        $this->model = new \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection(
+        $this->model = new \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection(
             $this->entityFactoryMock,
             $this->loggerMock,
             $this->fetchStrategyMock,
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/Attribute/SetTest.php b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/SetTest.php
similarity index 94%
rename from app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/Attribute/SetTest.php
rename to app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/SetTest.php
index 290ea7f317e4d6fa62c3588ec5a5fab0f834b4ea..f554327bf7644d8af50963a1406091ed90a1a895 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/Attribute/SetTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/Attribute/SetTest.php
@@ -5,9 +5,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Eav\Test\Unit\Model\Resource\Entity\Attribute;
+namespace Magento\Eav\Test\Unit\Model\ResourceModel\Entity\Attribute;
 
-use Magento\Eav\Model\Resource\Entity\Attribute\Set;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Set;
  
 class SetTest extends \PHPUnit_Framework_TestCase
 {
@@ -51,21 +51,21 @@ class SetTest extends \PHPUnit_Framework_TestCase
      */
     protected function setUp()
     {
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->setMethods(['getConnection', 'getTableName'])
             ->getMock();
         $this->transactionManagerMock = $this->getMock(
-            '\Magento\Framework\Model\Resource\Db\TransactionManagerInterface'
+            '\Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface'
         );
         $this->relationProcessor = $this->getMock(
-            '\Magento\Framework\Model\Resource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
-        $contextMock = $this->getMock('Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())
             ->method('getTransactionManager')
             ->willReturn($this->transactionManagerMock);
@@ -79,7 +79,7 @@ class SetTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $this->model = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set',
             [
                 'beginTransaction',
                 'getMainTable',
@@ -91,7 +91,7 @@ class SetTest extends \PHPUnit_Framework_TestCase
             ],
             [
                 $contextMock,
-                $this->getMock('Magento\Eav\Model\Resource\Entity\Attribute\GroupFactory', [], [], '', false),
+                $this->getMock('Magento\Eav\Model\ResourceModel\Entity\Attribute\GroupFactory', [], [], '', false),
                 $this->eavConfigMock
             ],
             '',
diff --git a/app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/AttributeTest.php b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/AttributeTest.php
similarity index 91%
rename from app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/AttributeTest.php
rename to app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/AttributeTest.php
index 22c322403b5089c5999619e6710188ecb2fb5ece..f1ec1a31b9888dde8defc91df9707b1dbebdc085 100644
--- a/app/code/Magento/Eav/Test/Unit/Model/Resource/Entity/AttributeTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Model/ResourceModel/Entity/AttributeTest.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Eav\Test\Unit\Model\Resource\Entity;
+namespace Magento\Eav\Test\Unit\Model\ResourceModel\Entity;
 
 class AttributeTest extends \PHPUnit_Framework_TestCase
 {
@@ -30,12 +30,12 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Eav\Model\Resource\Entity\Attribute::_saveOption
+     * @covers \Magento\Eav\Model\ResourceModel\Entity\Attribute::_saveOption
      */
     public function testSaveOptionSystemAttribute()
     {
         /** @var $connectionMock \PHPUnit_Framework_MockObject_MockObject */
-        /** @var $resourceModelMock \Magento\Eav\Model\Resource\Entity\Attribute */
+        /** @var $resourceModelMock \Magento\Eav\Model\ResourceModel\Entity\Attribute */
         list($connectionMock, $resourceModelMock) = $this->_prepareResourceModel();
 
         $attributeData = [
@@ -101,12 +101,12 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Eav\Model\Resource\Entity\Attribute::_saveOption
+     * @covers \Magento\Eav\Model\ResourceModel\Entity\Attribute::_saveOption
      */
     public function testSaveOptionNewUserDefinedAttribute()
     {
         /** @var $connectionMock \PHPUnit_Framework_MockObject_MockObject */
-        /** @var $resourceModelMock \Magento\Eav\Model\Resource\Entity\Attribute */
+        /** @var $resourceModelMock \Magento\Eav\Model\ResourceModel\Entity\Attribute */
         list($connectionMock, $resourceModelMock) = $this->_prepareResourceModel();
 
         $attributeData = [
@@ -196,12 +196,12 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Eav\Model\Resource\Entity\Attribute::_saveOption
+     * @covers \Magento\Eav\Model\ResourceModel\Entity\Attribute::_saveOption
      */
     public function testSaveOptionNoValue()
     {
         /** @var $connectionMock \PHPUnit_Framework_MockObject_MockObject */
-        /** @var $resourceModelMock \Magento\Eav\Model\Resource\Entity\Attribute */
+        /** @var $resourceModelMock \Magento\Eav\Model\ResourceModel\Entity\Attribute */
         list($connectionMock, $resourceModelMock) = $this->_prepareResourceModel();
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
@@ -282,9 +282,9 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             )
         );
 
-        /** @var $resource \Magento\Framework\App\Resource */
+        /** @var $resource \Magento\Framework\App\ResourceConnection */
         $resource = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -293,17 +293,17 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
         );
         $resource->expects($this->any())->method('getTableName')->will($this->returnArgument(0));
         $resource->expects($this->any())->method('getConnection')->with()->will($this->returnValue($connectionMock));
-        $eavEntityType = $this->getMock('Magento\Eav\Model\Resource\Entity\Type', [], [], '', false, false);
+        $eavEntityType = $this->getMock('Magento\Eav\Model\ResourceModel\Entity\Type', [], [], '', false, false);
 
         $relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\Resource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($resource);
         $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock);
 
@@ -313,7 +313,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             'eavEntityType' => $eavEntityType,
         ];
         $resourceModelMock = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute',
             ['getAdditionalAttributeTable'],
             $arguments
         );
diff --git a/app/code/Magento/Eav/Test/Unit/Plugin/Model/Resource/Entity/AttributeTest.php b/app/code/Magento/Eav/Test/Unit/Plugin/Model/ResourceModel/Entity/AttributeTest.php
similarity index 84%
rename from app/code/Magento/Eav/Test/Unit/Plugin/Model/Resource/Entity/AttributeTest.php
rename to app/code/Magento/Eav/Test/Unit/Plugin/Model/ResourceModel/Entity/AttributeTest.php
index 5cf67ffd2204a089f96f50ce0530e43155a235d8..7583c8d09720f55cdab37c575f15ee0e8a1d09e4 100644
--- a/app/code/Magento/Eav/Test/Unit/Plugin/Model/Resource/Entity/AttributeTest.php
+++ b/app/code/Magento/Eav/Test/Unit/Plugin/Model/ResourceModel/Entity/AttributeTest.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Eav\Test\Unit\Plugin\Model\Resource\Entity;
+namespace Magento\Eav\Test\Unit\Plugin\Model\ResourceModel\Entity;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
@@ -18,14 +18,14 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\App\Cache\StateInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $cacheState;
 
-    /** @var \Magento\Eav\Model\Resource\Entity\Attribute|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute|\PHPUnit_Framework_MockObject_MockObject */
     protected $subject;
 
     protected function setUp()
     {
         $this->cache = $this->getMock('Magento\Framework\App\CacheInterface');
         $this->cacheState = $this->getMock('Magento\Framework\App\Cache\StateInterface');
-        $this->subject = $this->getMock('Magento\Eav\Model\Resource\Entity\Attribute', [], [], '', false);
+        $this->subject = $this->getMock('Magento\Eav\Model\ResourceModel\Entity\Attribute', [], [], '', false);
     }
 
     public function testGetStoreLabelsByAttributeIdOnCacheDisabled()
@@ -46,7 +46,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     {
         $attributeId = 1;
         $attributes = ['k' => 'v'];
-        $cacheId = \Magento\Eav\Plugin\Model\Resource\Entity\Attribute::STORE_LABEL_ATTRIBUTE . $attributeId;
+        $cacheId = \Magento\Eav\Plugin\Model\ResourceModel\Entity\Attribute::STORE_LABEL_ATTRIBUTE . $attributeId;
         $this->cache->expects($this->any())->method('load')->with($cacheId)->willReturn(serialize($attributes));
 
         $this->assertEquals(
@@ -62,7 +62,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     public function testGetStoreLabelsByAttributeIdWithCacheSave()
     {
         $attributeId = 1;
-        $cacheId = \Magento\Eav\Plugin\Model\Resource\Entity\Attribute::STORE_LABEL_ATTRIBUTE . $attributeId;
+        $cacheId = \Magento\Eav\Plugin\Model\ResourceModel\Entity\Attribute::STORE_LABEL_ATTRIBUTE . $attributeId;
         $this->cache->expects($this->any())->method('load')->with($cacheId)->willReturn(false);
         $this->cache->expects($this->any())->method('save')->with(
             serialize([$attributeId]),
@@ -85,14 +85,14 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @param bool $cacheEnabledFlag
-     * @return \Magento\Eav\Plugin\Model\Resource\Entity\Attribute
+     * @return \Magento\Eav\Plugin\Model\ResourceModel\Entity\Attribute
      */
     protected function getAttribute($cacheEnabledFlag)
     {
         $this->cacheState->expects($this->any())->method('isEnabled')
             ->with(\Magento\Eav\Model\Cache\Type::TYPE_IDENTIFIER)->willReturn($cacheEnabledFlag);
         return (new ObjectManager($this))->getObject(
-            'Magento\Eav\Plugin\Model\Resource\Entity\Attribute',
+            'Magento\Eav\Plugin\Model\ResourceModel\Entity\Attribute',
             [
                 'cache' => $this->cache,
                 'cacheState' => $this->cacheState
diff --git a/app/code/Magento/Eav/etc/di.xml b/app/code/Magento/Eav/etc/di.xml
index 3f3be1dddf79af28883c47666346e206ef231a92..9c4c1a959cb6cda0b47dcd248bc1d05c0a91ac3b 100644
--- a/app/code/Magento/Eav/etc/di.xml
+++ b/app/code/Magento/Eav/etc/di.xml
@@ -30,7 +30,7 @@
             <argument name="reader" xsi:type="object">Magento\Eav\Model\Entity\Attribute\Config\Reader\Proxy</argument>
         </arguments>
     </type>
-    <type name="Magento\Eav\Model\Resource\Helper">
+    <type name="Magento\Eav\Model\ResourceModel\Helper">
         <arguments>
             <argument name="modulePrefix" xsi:type="string">eav</argument>
         </arguments>
@@ -42,8 +42,8 @@
             </argument>
         </arguments>
     </type>
-    <type name="Magento\Eav\Model\Resource\Entity\Attribute">
-        <plugin name="storeLabelCaching" type="Magento\Eav\Plugin\Model\Resource\Entity\Attribute" />
+    <type name="Magento\Eav\Model\ResourceModel\Entity\Attribute">
+        <plugin name="storeLabelCaching" type="Magento\Eav\Plugin\Model\ResourceModel\Entity\Attribute" />
     </type>
     <type name="Magento\Eav\Model\EavCustomAttributeTypeLocator">
         <arguments>
diff --git a/app/code/Magento/Email/Model/Resource/Template.php b/app/code/Magento/Email/Model/ResourceModel/Template.php
similarity index 92%
rename from app/code/Magento/Email/Model/Resource/Template.php
rename to app/code/Magento/Email/Model/ResourceModel/Template.php
index 81f51404354e0b71586da1bb9919f59d9a720972..2196c831348c2c8219c1bcdf6ad0a28ac8202c87 100644
--- a/app/code/Magento/Email/Model/Resource/Template.php
+++ b/app/code/Magento/Email/Model/ResourceModel/Template.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Email\Model\Resource;
+namespace Magento\Email\Model\ResourceModel;
 
 use Magento\Framework\Model\AbstractModel;
 
@@ -12,7 +12,7 @@ use Magento\Framework\Model\AbstractModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Template extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Template extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -20,12 +20,12 @@ class Template extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Email/Model/Resource/Template/Collection.php b/app/code/Magento/Email/Model/ResourceModel/Template/Collection.php
similarity index 80%
rename from app/code/Magento/Email/Model/Resource/Template/Collection.php
rename to app/code/Magento/Email/Model/ResourceModel/Template/Collection.php
index 276428d9968799d7376caf9bd192cd5a8bd13c82..018aed027e16b425c0e3dbb59b447877eaef8b98 100644
--- a/app/code/Magento/Email/Model/Resource/Template/Collection.php
+++ b/app/code/Magento/Email/Model/ResourceModel/Template/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Email\Model\Resource\Template;
+namespace Magento\Email\Model\ResourceModel\Template;
 
 /**
  * Templates collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Template table name
@@ -26,7 +26,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     public function _construct()
     {
-        $this->_init('Magento\Email\Model\Template', 'Magento\Email\Model\Resource\Template');
+        $this->_init('Magento\Email\Model\Template', 'Magento\Email\Model\ResourceModel\Template');
         $this->_templateTable = $this->getMainTable();
     }
 
diff --git a/app/code/Magento/Email/Model/Template.php b/app/code/Magento/Email/Model/Template.php
index 4d1b0fff43aef51076b7c956301d9d01e41ce75b..aa7ec0302f4199215d4dc983b1d71ffedcb45e83 100644
--- a/app/code/Magento/Email/Model/Template.php
+++ b/app/code/Magento/Email/Model/Template.php
@@ -25,8 +25,8 @@ use Magento\Store\Model\StoreManagerInterface;
  * );
  * $emailTemplate->send('some@domain.com', 'Name Of User', $variables);
  *
- * @method \Magento\Email\Model\Resource\Template _getResource()
- * @method \Magento\Email\Model\Resource\Template getResource()
+ * @method \Magento\Email\Model\ResourceModel\Template _getResource()
+ * @method \Magento\Email\Model\ResourceModel\Template getResource()
  * @method string getTemplateCode()
  * @method \Magento\Email\Model\Template setTemplateCode(string $value)
  * @method string getTemplateText()
@@ -165,7 +165,7 @@ class Template extends AbstractTemplate implements \Magento\Framework\Mail\Templ
      */
     protected function _construct()
     {
-        $this->_init('Magento\Email\Model\Resource\Template');
+        $this->_init('Magento\Email\Model\ResourceModel\Template');
     }
 
     /**
diff --git a/app/code/Magento/Email/Model/Template/Filter.php b/app/code/Magento/Email/Model/Template/Filter.php
index e8a50715085442b9a8c785873c589a2e0cc641b9..ebe3d0d8e2974409158217668265124e261bc860 100644
--- a/app/code/Magento/Email/Model/Template/Filter.php
+++ b/app/code/Magento/Email/Model/Template/Filter.php
@@ -214,7 +214,6 @@ class Filter extends \Magento\Framework\Filter\Template
 
     /**
      * Setter whether SID is allowed in store directive
-     * Doesn't set anything intentionally, since SID is not allowed in any kind of emails
      *
      * @param bool $flag
      * @return $this
diff --git a/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php b/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php
index 00305a4529bbbf30a5d5c9934480fb02ea414785..e4e874ff1b4323d6a483f575074cc405c917725c 100644
--- a/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php
+++ b/app/code/Magento/Email/Test/Unit/Model/BackendTemplateTest.php
@@ -33,7 +33,7 @@ class BackendTemplateTest extends \PHPUnit_Framework_TestCase
     protected $structureMock;
 
     /**
-     * @var \Magento\Email\Model\Resource\Template|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Email\Model\ResourceModel\Template|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceModelMock;
 
@@ -52,12 +52,12 @@ class BackendTemplateTest extends \PHPUnit_Framework_TestCase
         $this->structureMock = $this->getMock('Magento\Config\Model\Config\Structure', [], [], '', false);
         $this->structureMock->expects($this->any())->method('getFieldPathsByAttribute')->willReturn(['path' => 'test']);
 
-        $this->resourceModelMock = $this->getMock('Magento\Email\Model\Resource\Template', [], [], '', false);
+        $this->resourceModelMock = $this->getMock('Magento\Email\Model\ResourceModel\Template', [], [], '', false);
         $this->resourceModelMock->expects($this->any())->method('getSystemConfigByPathsAndTemplateId')->willReturn(['test_config' => 2015]);
         $objectManagerMock = $this->getMock('Magento\Framework\ObjectManagerInterface');
         $objectManagerMock->expects($this->any())
             ->method('get')
-            ->with('Magento\Email\Model\Resource\Template')
+            ->with('Magento\Email\Model\ResourceModel\Template')
             ->will($this->returnValue($this->resourceModelMock));
 
         try {
diff --git a/app/code/Magento/Email/view/adminhtml/layout/adminhtml_email_template_grid_block.xml b/app/code/Magento/Email/view/adminhtml/layout/adminhtml_email_template_grid_block.xml
index 991e9a21a2d2689b1d904c9975fffa503fc527aa..a5c80813e3b84c7b4743a4fe10c76159add84a00 100644
--- a/app/code/Magento/Email/view/adminhtml/layout/adminhtml_email_template_grid_block.xml
+++ b/app/code/Magento/Email/view/adminhtml/layout/adminhtml_email_template_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.system.email.template.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">systemEmailTemplateGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Email\Model\Resource\Template\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Email\Model\ResourceModel\Template\Collection</argument>
                     <argument name="use_ajax" xsi:type="string">1</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
                     <argument name="grid_url" xsi:type="url" path="*/*/grid">
diff --git a/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml b/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml
index 6ca97943019f9a2a128f6dd78c716b1fa3a1176a..7036d332825c43d4068879ebccf080a4993c74b2 100644
--- a/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml
+++ b/app/code/Magento/Email/view/adminhtml/templates/template/edit.phtml
@@ -59,10 +59,11 @@ use Magento\Framework\App\TemplateTypesInterface;
 require([
     "jquery",
     "tinymce",
+    "Magento_Ui/js/modal/alert",
     "mage/mage",
     "Magento_Variable/variables",
     "prototype"
-], function(jQuery, tinyMCE){
+], function(jQuery, tinyMCE, alert){
 
 //<![CDATA[
     jQuery('#email_template_edit_form').mage('form').mage('validation');
@@ -207,7 +208,9 @@ require([
                           }
                        }.bind(this));
                    } else {
-                       alert('<?php /* @escapeNotVerified */ echo __('The template did not load. Please review the log for details.') ?>');
+                       alert({
+                           content: '<?php /* @escapeNotVerified */ echo __('The template did not load. Please review the log for details.') ?>'
+                       });
                    }
                }.bind(this)
             });
diff --git a/app/code/Magento/EncryptionKey/Controller/Adminhtml/Crypt/Key/Save.php b/app/code/Magento/EncryptionKey/Controller/Adminhtml/Crypt/Key/Save.php
index 926d00e4f673be970dcf1dcbf4a556e2e8a93538..b06c18cae6b64194b168c8170f87ea4b989e1191 100644
--- a/app/code/Magento/EncryptionKey/Controller/Adminhtml/Crypt/Key/Save.php
+++ b/app/code/Magento/EncryptionKey/Controller/Adminhtml/Crypt/Key/Save.php
@@ -18,7 +18,7 @@ class Save extends \Magento\EncryptionKey\Controller\Adminhtml\Crypt\Key
     protected $encryptor;
 
     /**
-     * @var \Magento\EncryptionKey\Model\Resource\Key\Change
+     * @var \Magento\EncryptionKey\Model\ResourceModel\Key\Change
      */
     protected $change;
 
@@ -30,13 +30,13 @@ class Save extends \Magento\EncryptionKey\Controller\Adminhtml\Crypt\Key
     /**
      * @param \Magento\Backend\App\Action\Context $context
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
-     * @param \Magento\EncryptionKey\Model\Resource\Key\Change $change
+     * @param \Magento\EncryptionKey\Model\ResourceModel\Key\Change $change
      * @param \Magento\Framework\App\CacheInterface $cache
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
-        \Magento\EncryptionKey\Model\Resource\Key\Change $change,
+        \Magento\EncryptionKey\Model\ResourceModel\Key\Change $change,
         \Magento\Framework\App\CacheInterface $cache
     ) {
         $this->encryptor = $encryptor;
diff --git a/app/code/Magento/EncryptionKey/Model/Resource/Key/Change.php b/app/code/Magento/EncryptionKey/Model/ResourceModel/Key/Change.php
similarity index 95%
rename from app/code/Magento/EncryptionKey/Model/Resource/Key/Change.php
rename to app/code/Magento/EncryptionKey/Model/ResourceModel/Key/Change.php
index a211eb523b410dc017092b9cbcbae27f3d862341..5daa8da5d227e64edea5b41663574824abe54a5f 100644
--- a/app/code/Magento/EncryptionKey/Model/Resource/Key/Change.php
+++ b/app/code/Magento/EncryptionKey/Model/ResourceModel/Key/Change.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\EncryptionKey\Model\Resource\Key;
+namespace Magento\EncryptionKey\Model\ResourceModel\Key;
 
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\Config\ConfigOptionsListConstants;
@@ -14,7 +14,7 @@ use Magento\Framework\Config\File\ConfigFilePool;
  * Encryption key changer resource model
  * The operation must be done in one transaction
  */
-class Change extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Change extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Encryptor interface
@@ -45,7 +45,7 @@ class Change extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $writer;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Config\Model\Config\Structure $structure
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
@@ -53,7 +53,7 @@ class Change extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Config\Model\Config\Structure $structure,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
diff --git a/app/code/Magento/EncryptionKey/Test/Unit/Controller/Adminhtml/Crypt/Key/SaveTest.php b/app/code/Magento/EncryptionKey/Test/Unit/Controller/Adminhtml/Crypt/Key/SaveTest.php
index ef30546eb3ba7efd1cb7a08b49f328ce162a1a14..f4f697418343d467ccc06c061c6bd78b1b9d705a 100644
--- a/app/code/Magento/EncryptionKey/Test/Unit/Controller/Adminhtml/Crypt/Key/SaveTest.php
+++ b/app/code/Magento/EncryptionKey/Test/Unit/Controller/Adminhtml/Crypt/Key/SaveTest.php
@@ -14,7 +14,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
 {
     /** @var \Magento\Framework\Encryption\EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $encryptMock;
-    /** @var \Magento\EncryptionKey\Model\Resource\Key\Change|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\EncryptionKey\Model\ResourceModel\Key\Change|\PHPUnit_Framework_MockObject_MockObject */
     protected $changeMock;
     /** @var \Magento\Framework\App\CacheInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $cacheMock;
@@ -33,7 +33,7 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
-        $this->changeMock = $this->getMockBuilder('Magento\EncryptionKey\Model\Resource\Key\Change')
+        $this->changeMock = $this->getMockBuilder('Magento\EncryptionKey\Model\ResourceModel\Key\Change')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
diff --git a/app/code/Magento/EncryptionKey/Test/Unit/Model/Resource/Key/ChangeTest.php b/app/code/Magento/EncryptionKey/Test/Unit/Model/ResourceModel/Key/ChangeTest.php
similarity index 84%
rename from app/code/Magento/EncryptionKey/Test/Unit/Model/Resource/Key/ChangeTest.php
rename to app/code/Magento/EncryptionKey/Test/Unit/Model/ResourceModel/Key/ChangeTest.php
index c0793ee43c544e3419c3e6c594befb4afe89272e..55286de60bca43654318c71ceb153cd84f63ce57 100644
--- a/app/code/Magento/EncryptionKey/Test/Unit/Model/Resource/Key/ChangeTest.php
+++ b/app/code/Magento/EncryptionKey/Test/Unit/Model/ResourceModel/Key/ChangeTest.php
@@ -4,10 +4,10 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\EncryptionKey\Test\Unit\Model\Resource\Key;
+namespace Magento\EncryptionKey\Test\Unit\Model\ResourceModel\Key;
 
 /**
- * Test Class For Magento\EncryptionKey\Model\Resource\Key\Change
+ * Test Class For Magento\EncryptionKey\Model\ResourceModel\Key\Change
  */
 class ChangeTest extends \PHPUnit_Framework_TestCase
 {
@@ -21,15 +21,15 @@ class ChangeTest extends \PHPUnit_Framework_TestCase
     protected $writerMock;
     /** @var \Magento\Framework\DB\Adapter\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $adapterMock;
-    /** @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject */
     protected $resourceMock;
     /** @var \Magento\Framework\DB\Select|\PHPUnit_Framework_MockObject_MockObject */
     protected $selectMock;
-    /** @var \Magento\Framework\Model\Resource\Db\TransactionManagerInterface */
+    /** @var \Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface */
     protected $tansactionMock;
-    /** @var \Magento\Framework\Model\Resource\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var |\PHPUnit_Framework_MockObject_MockObject */
     protected $objRelationMock;
-    /** @var \Magento\EncryptionKey\Model\Resource\Key\Change */
+    /** @var \Magento\EncryptionKey\Model\ResourceModel\Key\Change */
     protected $model;
 
     public function setUp()
@@ -54,7 +54,7 @@ class ChangeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
@@ -62,11 +62,13 @@ class ChangeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
-        $this->tansactionMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\TransactionManagerInterface')
+        $translationClassName = 'Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface';
+        $this->tansactionMock = $this->getMockBuilder($translationClassName)
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
-        $this->objRelationMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\ObjectRelationProcessor')
+        $relationClassName = 'Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor';
+        $this->objRelationMock = $this->getMockBuilder($relationClassName)
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
@@ -74,7 +76,7 @@ class ChangeTest extends \PHPUnit_Framework_TestCase
         $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
         $this->model = $helper->getObject(
-            'Magento\EncryptionKey\Model\Resource\Key\Change',
+            'Magento\EncryptionKey\Model\ResourceModel\Key\Change',
             [
                 'filesystem' => $this->filesystemMock,
                 'structure' => $this->structureMock,
diff --git a/app/code/Magento/EncryptionKey/composer.json b/app/code/Magento/EncryptionKey/composer.json
index c141092c24a37ccbe09cf974ba5cf8de73e0ee13..590cc443f9032812b8beebe8b4bfb11287c45dc6 100644
--- a/app/code/Magento/EncryptionKey/composer.json
+++ b/app/code/Magento/EncryptionKey/composer.json
@@ -4,7 +4,6 @@
     "require": {
         "php": "~5.5.0|~5.6.0",
         "magento/module-config": "1.0.0-beta",
-        "magento/module-sales": "1.0.0-beta",
         "magento/module-backend": "1.0.0-beta",
         "magento/framework": "1.0.0-beta"
     },
diff --git a/app/code/Magento/Fedex/Model/Carrier.php b/app/code/Magento/Fedex/Model/Carrier.php
index 6a36de79eef7f5a416aed6d6b3c42ae18565d6a7..90275b764741db6a9c67f22ccdf63fd3bac2cdea 100644
--- a/app/code/Magento/Fedex/Model/Carrier.php
+++ b/app/code/Magento/Fedex/Model/Carrier.php
@@ -115,7 +115,7 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
     protected $_storeManager;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_productCollectionFactory;
 
@@ -137,7 +137,7 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
      * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Module\Dir\Reader $configReader
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
      * @param array $data
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -160,7 +160,7 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
         \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Module\Dir\Reader $configReader,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
         array $data = []
     ) {
         $this->_storeManager = $storeManager;
@@ -1282,6 +1282,8 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
         }
 
         $paymentType = $request->getIsReturn() ? 'RECIPIENT' : 'SENDER';
+        $optionType = $request->getShippingMethod() == self::RATE_REQUEST_SMARTPOST
+            ? 'SERVICE_DEFAULT' : $packageParams->getDeliveryConfirmation();
         $requestClient = [
             'RequestedShipment' => [
                 'ShipTimestamp' => time(),
@@ -1344,7 +1346,7 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
                     ],
                     'SpecialServicesRequested' => [
                         'SpecialServiceTypes' => 'SIGNATURE_OPTION',
-                        'SignatureOptionDetail' => ['OptionType' => $packageParams->getDeliveryConfirmation()],
+                        'SignatureOptionDetail' => ['OptionType' => $optionType],
                     ],
                 ],
             ],
@@ -1382,6 +1384,13 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
             $requestClient['RequestedShipment']['MasterTrackingId'] = $request->getMasterTrackingId();
         }
 
+        if ($request->getShippingMethod() == self::RATE_REQUEST_SMARTPOST) {
+            $requestClient['RequestedShipment']['SmartPostDetail'] = [
+                'Indicia' => (double)$request->getPackageWeight() >= 1 ? 'PARCEL_SELECT' : 'PRESORTED_STANDARD',
+                'HubId' => $this->getConfigData('smartpost_hubid'),
+            ];
+        }
+
         // set dimensions
         if ($length || $width || $height) {
             $requestClient['RequestedShipment']['RequestedPackageLineItems']['Dimensions'] = [];
@@ -1411,7 +1420,9 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
 
         if ($response->HighestSeverity != 'FAILURE' && $response->HighestSeverity != 'ERROR') {
             $shippingLabelContent = $response->CompletedShipmentDetail->CompletedPackageDetails->Label->Parts->Image;
-            $trackingNumber = $response->CompletedShipmentDetail->CompletedPackageDetails->TrackingIds->TrackingNumber;
+            $trackingNumber = $this->getTrackingNumber(
+                $response->CompletedShipmentDetail->CompletedPackageDetails->TrackingIds
+            );
             $result->setShippingLabelContent($shippingLabelContent);
             $result->setTrackingNumber($trackingNumber);
             $debugData = ['request' => $client->__getLastRequest(), 'result' => $client->__getLastResponse()];
@@ -1438,6 +1449,19 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
         return $result;
     }
 
+    /**
+     * @param array|object $trackingIds
+     * @return string
+     */
+    private function getTrackingNumber($trackingIds) {
+        return is_array($trackingIds) ? array_map(
+            function($val) {
+                return $val->TrackingNumber;
+            },
+            $trackingIds
+        ) : $trackingIds->TrackingNumber;
+    }
+
     /**
      * For multi package shipments. Delete requested shipments if the current shipment
      * request is failed
diff --git a/app/code/Magento/Fedex/Test/Unit/Model/CarrierTest.php b/app/code/Magento/Fedex/Test/Unit/Model/CarrierTest.php
index f35a676b96b4fa140f2d18e3b40ea7027ab15a27..811abf4a83879ac6dd7c5c539517d869a723b2e2 100644
--- a/app/code/Magento/Fedex/Test/Unit/Model/CarrierTest.php
+++ b/app/code/Magento/Fedex/Test/Unit/Model/CarrierTest.php
@@ -126,7 +126,7 @@ class CarrierTest extends \PHPUnit_Framework_TestCase
                 'storeManager' => $storeManager,
                 'configReader' => $this->getMock('Magento\Framework\Module\Dir\Reader', [], [], '', false),
                 'productCollectionFactory' =>
-                    $this->getMock('Magento\Catalog\Model\Resource\Product\CollectionFactory', [], [], '', false),
+                    $this->getMock('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory', [], [], '', false),
                 'data' => []
             ]
         );
diff --git a/app/code/Magento/GiftMessage/Model/Message.php b/app/code/Magento/GiftMessage/Model/Message.php
index 553888c5249384676d6a5528f31d94842b2912a7..fecf0e3294a7b6cfad0026f90989698b4b9ddad8 100644
--- a/app/code/Magento/GiftMessage/Model/Message.php
+++ b/app/code/Magento/GiftMessage/Model/Message.php
@@ -10,8 +10,8 @@ use Magento\Framework\Api\AttributeValueFactory;
 /**
  * Gift Message model
  *
- * @method \Magento\GiftMessage\Model\Resource\Message _getResource()
- * @method \Magento\GiftMessage\Model\Resource\Message getResource()
+ * @method \Magento\GiftMessage\Model\ResourceModel\Message _getResource()
+ * @method \Magento\GiftMessage\Model\ResourceModel\Message getResource()
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
@@ -29,7 +29,7 @@ class Message extends \Magento\Framework\Model\AbstractExtensibleModel implement
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param TypeFactory $typeFactory
-     * @param Resource\Message $resource
+     * @param \Magento\GiftMessage\Model\ResourceModel\Message $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -39,7 +39,7 @@ class Message extends \Magento\Framework\Model\AbstractExtensibleModel implement
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\GiftMessage\Model\TypeFactory $typeFactory,
-        \Magento\GiftMessage\Model\Resource\Message $resource = null,
+        \Magento\GiftMessage\Model\ResourceModel\Message $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -60,7 +60,7 @@ class Message extends \Magento\Framework\Model\AbstractExtensibleModel implement
      */
     protected function _construct()
     {
-        $this->_init('Magento\GiftMessage\Model\Resource\Message');
+        $this->_init('Magento\GiftMessage\Model\ResourceModel\Message');
     }
 
     /**
diff --git a/app/code/Magento/GiftMessage/Model/Resource/Message.php b/app/code/Magento/GiftMessage/Model/ResourceModel/Message.php
similarity index 75%
rename from app/code/Magento/GiftMessage/Model/Resource/Message.php
rename to app/code/Magento/GiftMessage/Model/ResourceModel/Message.php
index 41dd39a8636375621166ea9008af49b3d740e2e7..5d9b36fd8ee896d4a3c95f4a9849d09f336c836e 100644
--- a/app/code/Magento/GiftMessage/Model/Resource/Message.php
+++ b/app/code/Magento/GiftMessage/Model/ResourceModel/Message.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\GiftMessage\Model\Resource;
+namespace Magento\GiftMessage\Model\ResourceModel;
 
 /**
  * Gift Message resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Message extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Message extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/GiftMessage/Model/Resource/Message/Collection.php b/app/code/Magento/GiftMessage/Model/ResourceModel/Message/Collection.php
similarity index 66%
rename from app/code/Magento/GiftMessage/Model/Resource/Message/Collection.php
rename to app/code/Magento/GiftMessage/Model/ResourceModel/Message/Collection.php
index 70f92a2a7498da170c0d2bcb27f37951a2180672..c948edf1cd02b3b69495d90a40070d9f222de866 100644
--- a/app/code/Magento/GiftMessage/Model/Resource/Message/Collection.php
+++ b/app/code/Magento/GiftMessage/Model/ResourceModel/Message/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\GiftMessage\Model\Resource\Message;
+namespace Magento\GiftMessage\Model\ResourceModel\Message;
 
 /**
  * Gift Message collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource model
@@ -19,6 +19,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\GiftMessage\Model\Message', 'Magento\GiftMessage\Model\Resource\Message');
+        $this->_init('Magento\GiftMessage\Model\Message', 'Magento\GiftMessage\Model\ResourceModel\Message');
     }
 }
diff --git a/app/code/Magento/GiftMessage/etc/adminhtml/events.xml b/app/code/Magento/GiftMessage/etc/adminhtml/events.xml
index 5cd35ccf18fcd5b3b88da47d503c8204d0f26aec..042fe5b81ddc6ce7975fe7c7f2ae8f89b614e6c5 100644
--- a/app/code/Magento/GiftMessage/etc/adminhtml/events.xml
+++ b/app/code/Magento/GiftMessage/etc/adminhtml/events.xml
@@ -7,12 +7,12 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_model_service_quote_submit_before">
-        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" method="execute" shared="false" />
+        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" shared="false" />
     </event>
     <event name="sales_convert_order_to_quote">
-        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventOrderToQuoteObserver" method="execute" shared="false" />
+        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventOrderToQuoteObserver" shared="false" />
     </event>
     <event name="sales_convert_order_item_to_quote_item">
-        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventOrderItemToQuoteItemObserver" method="execute" shared="false" />
+        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventOrderItemToQuoteItemObserver" shared="false" />
     </event>
 </config>
diff --git a/app/code/Magento/GiftMessage/etc/frontend/events.xml b/app/code/Magento/GiftMessage/etc/frontend/events.xml
index 96a7f216d9735b701c06acb579325f26c7fd4bd6..6916b447c5fd981f8b8bda063ac526beed9e1cdf 100644
--- a/app/code/Magento/GiftMessage/etc/frontend/events.xml
+++ b/app/code/Magento/GiftMessage/etc/frontend/events.xml
@@ -7,12 +7,12 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_model_service_quote_submit_before">
-        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" method="execute" shared="false" />
+        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" shared="false" />
     </event>
     <event name="sales_convert_order_to_quote">
-        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventOrderToQuoteObserver" method="execute" shared="false" />
+        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventOrderToQuoteObserver" shared="false" />
     </event>
     <event name="checkout_type_multishipping_create_orders_single">
-        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\MultishippingEventCreateOrdersObserver" method="execute" shared="false" />
+        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\MultishippingEventCreateOrdersObserver" shared="false" />
     </event>
 </config>
diff --git a/app/code/Magento/GiftMessage/etc/webapi_rest/events.xml b/app/code/Magento/GiftMessage/etc/webapi_rest/events.xml
index 454d97783b05904d46aebd36a98eac1fd736c47b..99d79259160c1912aeddcfdb0a0fcabf3886d84f 100644
--- a/app/code/Magento/GiftMessage/etc/webapi_rest/events.xml
+++ b/app/code/Magento/GiftMessage/etc/webapi_rest/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_model_service_quote_submit_before">
-        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" method="execute" shared="false" />
+        <observer name="giftmessage" instance="Magento\GiftMessage\Observer\SalesEventQuoteSubmitBeforeObserver" shared="false" />
     </event>
 </config>
diff --git a/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js b/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js
index ad91613b1364535ec43548e251bb46fefb67ec5f..502e3ab77d2a9d5bc5e8298dbf1084b99cee57b6 100644
--- a/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js
+++ b/app/code/Magento/GiftMessage/view/frontend/web/js/model/gift-message.js
@@ -3,9 +3,12 @@
  * See COPYING.txt for license details.
  */
 /*global define*/
-define(['Magento_Ui/js/lib/component/provider', 'underscore', 'mage/url'],
-    function (provider, _, url) {
-        "use strict";
+define(['uiElement', 'underscore', 'mage/url'],
+    function (uiElement, _, url) {
+        'use strict';
+
+        var provider = uiElement();
+
         return function (itemId) {
             var model = {
                 id: 'message-' + itemId,
diff --git a/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php b/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php
index b307a57a422fdf21fa79779e682925654443b25d..b3cc66a1ed13c0bd06ae5ffdc4bc35b06aa892ea 100644
--- a/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php
+++ b/app/code/Magento/GoogleAdwords/Model/Config/Backend/AbstractConversion.php
@@ -28,7 +28,7 @@ abstract class AbstractConversion extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Validator\DataObjectFactory $validatorCompositeFactory
      * @param \Magento\GoogleAdwords\Model\Validator\Factory $validatorFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -38,7 +38,7 @@ abstract class AbstractConversion extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Validator\DataObjectFactory $validatorCompositeFactory,
         \Magento\GoogleAdwords\Model\Validator\Factory $validatorFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/GoogleAdwords/Observer/SetConversionValueObserver.php b/app/code/Magento/GoogleAdwords/Observer/SetConversionValueObserver.php
index 8a1a8faa1cfc2a9f7cefdf3b311793518218fcae..7efd9de09a42c0ba5cb4d85615623e7e205c8190 100644
--- a/app/code/Magento/GoogleAdwords/Observer/SetConversionValueObserver.php
+++ b/app/code/Magento/GoogleAdwords/Observer/SetConversionValueObserver.php
@@ -17,7 +17,7 @@ class SetConversionValueObserver implements ObserverInterface
     protected $_helper;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Collection
+     * @var \Magento\Sales\Model\ResourceModel\Order\Collection
      */
     protected $_collection;
 
@@ -26,12 +26,12 @@ class SetConversionValueObserver implements ObserverInterface
      *
      * @param \Magento\GoogleAdwords\Helper\Data $helper
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Sales\Model\Resource\Order\Collection $collection
+     * @param \Magento\Sales\Model\ResourceModel\Order\Collection $collection
      */
     public function __construct(
         \Magento\GoogleAdwords\Helper\Data $helper,
         \Magento\Framework\Registry $registry,
-        \Magento\Sales\Model\Resource\Order\Collection $collection
+        \Magento\Sales\Model\ResourceModel\Order\Collection $collection
     ) {
         $this->_helper = $helper;
         $this->_collection = $collection;
diff --git a/app/code/Magento/GoogleAdwords/Test/Unit/Observer/SetConversionValueObserverTest.php b/app/code/Magento/GoogleAdwords/Test/Unit/Observer/SetConversionValueObserverTest.php
index d493fb64b4e666554b3c34eae064185d39097abf..c74b8b7b9282e734f0f443441e82860fd912cfff 100644
--- a/app/code/Magento/GoogleAdwords/Test/Unit/Observer/SetConversionValueObserverTest.php
+++ b/app/code/Magento/GoogleAdwords/Test/Unit/Observer/SetConversionValueObserverTest.php
@@ -42,7 +42,7 @@ class SetConversionValueObserverTest extends \PHPUnit_Framework_TestCase
         $this->_helperMock = $this->getMock('Magento\GoogleAdwords\Helper\Data', [], [], '', false);
         $this->_registryMock = $this->getMock('Magento\Framework\Registry', [], [], '', true);
         $this->_collectionMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/GoogleAdwords/etc/di.xml b/app/code/Magento/GoogleAdwords/etc/di.xml
index 38f64c848f77099570f5c3f6a02a657c4614c441..3431ef434371bbe197b98b634e9dc95ef63e78e6 100644
--- a/app/code/Magento/GoogleAdwords/etc/di.xml
+++ b/app/code/Magento/GoogleAdwords/etc/di.xml
@@ -8,7 +8,7 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <type name="Magento\GoogleAdwords\Observer\SetConversionValueObserver">
         <arguments>
-            <argument name="collection" xsi:type="object">Magento\Sales\Model\Resource\Order\Collection\Proxy</argument>
+            <argument name="collection" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Collection\Proxy</argument>
         </arguments>
     </type>
 </config>
diff --git a/app/code/Magento/GoogleAdwords/etc/frontend/events.xml b/app/code/Magento/GoogleAdwords/etc/frontend/events.xml
index 100800e6cfbd59581b5c214756d059ef10d1e3da..648c5e6c5e8158c9d16c8309de35178ee3699e99 100644
--- a/app/code/Magento/GoogleAdwords/etc/frontend/events.xml
+++ b/app/code/Magento/GoogleAdwords/etc/frontend/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="checkout_onepage_controller_success_action">
-        <observer name="googleadwords_order_success" instance="Magento\GoogleAdwords\Observer\SetConversionValueObserver" method="execute" />
+        <observer name="googleadwords_order_success" instance="Magento\GoogleAdwords\Observer\SetConversionValueObserver" />
     </event>
     <event name="multishipping_checkout_controller_success_action">
-        <observer name="googleadwords_order_success" instance="Magento\GoogleAdwords\Observer\SetConversionValueObserver" method="execute" />
+        <observer name="googleadwords_order_success" instance="Magento\GoogleAdwords\Observer\SetConversionValueObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/GoogleAnalytics/Block/Ga.php b/app/code/Magento/GoogleAnalytics/Block/Ga.php
index 8236e5fac9e5422e43293066b922e852e8a5668b..7185827446c805e71ab4cb45903babc5add24084 100644
--- a/app/code/Magento/GoogleAnalytics/Block/Ga.php
+++ b/app/code/Magento/GoogleAnalytics/Block/Ga.php
@@ -21,19 +21,19 @@ class Ga extends \Magento\Framework\View\Element\Template
     protected $_googleAnalyticsData = null;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
      */
     protected $_salesOrderCollection;
 
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
-     * @param \Magento\Sales\Model\Resource\Order\CollectionFactory $salesOrderCollection
+     * @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $salesOrderCollection
      * @param \Magento\GoogleAnalytics\Helper\Data $googleAnalyticsData
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
-        \Magento\Sales\Model\Resource\Order\CollectionFactory $salesOrderCollection,
+        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $salesOrderCollection,
         \Magento\GoogleAnalytics\Helper\Data $googleAnalyticsData,
         array $data = []
     ) {
diff --git a/app/code/Magento/GoogleAnalytics/etc/frontend/events.xml b/app/code/Magento/GoogleAnalytics/etc/frontend/events.xml
index 0b6c14e9e39394c7d399ec9a612586de7a5e91a7..7d461c99f8c3f0d8fd94730a2b84224a12302935 100644
--- a/app/code/Magento/GoogleAnalytics/etc/frontend/events.xml
+++ b/app/code/Magento/GoogleAnalytics/etc/frontend/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="checkout_onepage_controller_success_action">
-        <observer name="googleanalytics_order_success" instance="Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver" method="execute" />
+        <observer name="googleanalytics_order_success" instance="Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver" />
     </event>
     <event name="multishipping_checkout_controller_success_action">
-        <observer name="googleanalytics_order_success" instance="Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver" method="execute" />
+        <observer name="googleanalytics_order_success" instance="Magento\GoogleAnalytics\Observer\SetGoogleAnalyticsOnOrderSuccessPageViewObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/GoogleOptimizer/Model/Code.php b/app/code/Magento/GoogleOptimizer/Model/Code.php
index 86b1b477ae75c9c93ac9289574cd76b61fb09416..09d870c77354fc02537bb45cea3feaa669ceee5f 100644
--- a/app/code/Magento/GoogleOptimizer/Model/Code.php
+++ b/app/code/Magento/GoogleOptimizer/Model/Code.php
@@ -6,8 +6,8 @@ namespace Magento\GoogleOptimizer\Model;
  *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
- * @method \Magento\GoogleOptimizer\Model\Resource\Code _getResource()
- * @method \Magento\GoogleOptimizer\Model\Resource\Code getResource()
+ * @method \Magento\GoogleOptimizer\Model\ResourceModel\Code _getResource()
+ * @method \Magento\GoogleOptimizer\Model\ResourceModel\Code getResource()
  * @method \Magento\GoogleOptimizer\Model\Code setEntityId(int $value)
  * @method string getEntityId()
  * @method \Magento\GoogleOptimizer\Model\Code setEntityType(string $value)
@@ -42,7 +42,7 @@ class Code extends \Magento\Framework\Model\AbstractModel
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\GoogleOptimizer\Model\Resource\Code');
+        $this->_init('Magento\GoogleOptimizer\Model\ResourceModel\Code');
     }
 
     /**
diff --git a/app/code/Magento/GoogleOptimizer/Model/Resource/Code.php b/app/code/Magento/GoogleOptimizer/Model/ResourceModel/Code.php
similarity index 91%
rename from app/code/Magento/GoogleOptimizer/Model/Resource/Code.php
rename to app/code/Magento/GoogleOptimizer/Model/ResourceModel/Code.php
index fb4f5aa60316e4b71daf9f9c964cebf822e48efa..50d89b04d7fc5322ebb9900032f0ece6a580a327 100644
--- a/app/code/Magento/GoogleOptimizer/Model/Resource/Code.php
+++ b/app/code/Magento/GoogleOptimizer/Model/ResourceModel/Code.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\GoogleOptimizer\Model\Resource;
+namespace Magento\GoogleOptimizer\Model\ResourceModel;
 
-class Code extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Code extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/GoogleOptimizer/etc/events.xml b/app/code/Magento/GoogleOptimizer/etc/events.xml
index c8347f4e547405e8a9c13759b7d8685681f7f5b7..bb71f286736844ab12653748da8c17ae94b9997d 100644
--- a/app/code/Magento/GoogleOptimizer/etc/events.xml
+++ b/app/code/Magento/GoogleOptimizer/etc/events.xml
@@ -7,24 +7,24 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_save_after">
-        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Product\SaveGoogleExperimentScriptObserver" method="execute" />
+        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Product\SaveGoogleExperimentScriptObserver" />
     </event>
     <event name="catalog_product_delete_after">
-        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Product\DeleteProductGoogleExperimentScriptObserver" method="execute" />
+        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Product\DeleteProductGoogleExperimentScriptObserver" />
     </event>
     <event name="catalog_category_save_after">
-        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Category\SaveGoogleExperimentScriptObserver" method="execute" />
+        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Category\SaveGoogleExperimentScriptObserver" />
     </event>
     <event name="catalog_category_delete_after">
-        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Category\DeleteCategoryGoogleExperimentScriptObserver" method="execute" />
+        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Category\DeleteCategoryGoogleExperimentScriptObserver" />
     </event>
     <event name="cms_page_save_after">
-        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\CmsPage\SaveGoogleExperimentScriptObserver" method="execute" />
+        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\CmsPage\SaveGoogleExperimentScriptObserver" />
     </event>
     <event name="cms_page_delete_after">
-        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\CmsPage\DeleteCmsGoogleExperimentScriptObserver" method="execute" />
+        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\CmsPage\DeleteCmsGoogleExperimentScriptObserver" />
     </event>
     <event name="adminhtml_catalog_category_tabs">
-        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Block\Category\AddGoogleExperimentTabObserver" method="execute" />
+        <observer name="googleoptimizer_observer" instance="Magento\GoogleOptimizer\Observer\Block\Category\AddGoogleExperimentTabObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/GroupedImportExport/Model/Import/Product/Type/Grouped.php b/app/code/Magento/GroupedImportExport/Model/Import/Product/Type/Grouped.php
index 3df29a1d0559696686dd6918bf47be4a410753bc..6bccd71831032751861b547a66224fe88c8cf27f 100644
--- a/app/code/Magento/GroupedImportExport/Model/Import/Product/Type/Grouped.php
+++ b/app/code/Magento/GroupedImportExport/Model/Import/Product/Type/Grouped.php
@@ -29,16 +29,16 @@ class Grouped extends \Magento\CatalogImportExport\Model\Import\Product\Type\Abs
     protected $links;
 
     /**
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFac
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $prodAttrColFac
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param array $params
      * @param Grouped\Links $links
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $attrSetColFac,
-        \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory $prodAttrColFac,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $attrSetColFac,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory $prodAttrColFac,
+        \Magento\Framework\App\ResourceConnection $resource,
         array $params,
         Grouped\Links $links
     ) {
diff --git a/app/code/Magento/GroupedImportExport/Model/Import/Product/Type/Grouped/Links.php b/app/code/Magento/GroupedImportExport/Model/Import/Product/Type/Grouped/Links.php
index 9bb14e6919fd684722bc26f797a84cdddfe2b721..3e0f6e36d01ba6cf7bb8de7fe6c602b0cdc67818 100644
--- a/app/code/Magento/GroupedImportExport/Model/Import/Product/Type/Grouped/Links.php
+++ b/app/code/Magento/GroupedImportExport/Model/Import/Product/Type/Grouped/Links.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\GroupedImportExport\Model\Import\Product\Type\Grouped;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Processing db operations for import entity of grouped product type
@@ -13,7 +13,7 @@ use Magento\Framework\App\Resource;
 class Links
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Link
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Link
      */
     protected $productLink;
 
@@ -40,13 +40,13 @@ class Links
     protected $attributes;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Product\Link $productLink
-     * @param Resource $resource
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Link $productLink
+     * @param ResourceConnection $resource
      * @param \Magento\ImportExport\Model\ImportFactory $importFactory
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\Product\Link $productLink,
-        Resource $resource,
+        \Magento\Catalog\Model\ResourceModel\Product\Link $productLink,
+        ResourceConnection $resource,
         \Magento\ImportExport\Model\ImportFactory $importFactory
     ) {
         $this->productLink = $productLink;
@@ -149,7 +149,7 @@ class Links
      */
     protected function getLinkTypeId()
     {
-        return \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED;
+        return \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED;
     }
 
     /**
diff --git a/app/code/Magento/GroupedImportExport/Test/Unit/Model/Import/Product/Type/Grouped/LinksTest.php b/app/code/Magento/GroupedImportExport/Test/Unit/Model/Import/Product/Type/Grouped/LinksTest.php
index 7e3f10f46cce9033110fc37472deac61185ceb57..3fa66361d090f4e6ce62b2a3e17d1b7d859bdc7d 100644
--- a/app/code/Magento/GroupedImportExport/Test/Unit/Model/Import/Product/Type/Grouped/LinksTest.php
+++ b/app/code/Magento/GroupedImportExport/Test/Unit/Model/Import/Product/Type/Grouped/LinksTest.php
@@ -6,7 +6,7 @@
 
 namespace Magento\GroupedImportExport\Test\Unit\Model\Import\Product\Type\Grouped;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
 class LinksTest extends \PHPUnit_Framework_TestCase
@@ -17,10 +17,10 @@ class LinksTest extends \PHPUnit_Framework_TestCase
     /** @var ObjectManagerHelper */
     protected $objectManagerHelper;
 
-    /** @var \Magento\Catalog\Model\Resource\Product\Link|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Product\Link|\PHPUnit_Framework_MockObject_MockObject */
     protected $link;
 
-    /** @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject */
     protected $resource;
 
     /** @var \Magento\Framework\DB\Adapter\Pdo\Mysql */
@@ -34,9 +34,9 @@ class LinksTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->link = $this->getMock('Magento\Catalog\Model\Resource\Product\Link', [], [], '', false);
+        $this->link = $this->getMock('Magento\Catalog\Model\ResourceModel\Product\Link', [], [], '', false);
         $this->connection = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
-        $this->resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resource
             ->expects($this->once())
             ->method('getConnection')
@@ -164,7 +164,7 @@ class LinksTest extends \PHPUnit_Framework_TestCase
 
     protected function processBehaviorGetter($behavior)
     {
-        $dataSource = $this->getMock('Magento\ImportExport\Model\Resource\Import\Data', [], [], '', false);
+        $dataSource = $this->getMock('Magento\ImportExport\Model\ResourceModel\Import\Data', [], [], '', false);
         $dataSource->expects($this->once())->method('getBehavior')->will($this->returnValue($behavior));
         $this->import->expects($this->once())->method('getDataSourceModel')->will($this->returnValue($dataSource));
     }
diff --git a/app/code/Magento/GroupedImportExport/Test/Unit/Model/Import/Product/Type/GroupedTest.php b/app/code/Magento/GroupedImportExport/Test/Unit/Model/Import/Product/Type/GroupedTest.php
index d6a6b3c40bb214bd808f086e86906b1bc59c35a1..c5eef2cac8757c36198871492dc0ed6a32d90a72 100644
--- a/app/code/Magento/GroupedImportExport/Test/Unit/Model/Import/Product/Type/GroupedTest.php
+++ b/app/code/Magento/GroupedImportExport/Test/Unit/Model/Import/Product/Type/GroupedTest.php
@@ -14,17 +14,17 @@ class GroupedTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
     protected $grouped;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $setCollectionFactory;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $setCollection;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $attrCollectionFactory;
 
@@ -39,7 +39,7 @@ class GroupedTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
     protected $select;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -63,14 +63,14 @@ class GroupedTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
         parent::setUp();
 
         $this->setCollectionFactory = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->setCollection = $this->getMock(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection',
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection',
             ['setEntityTypeFilter'],
             [],
             '',
@@ -81,7 +81,7 @@ class GroupedTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
         );
         $this->setCollection->expects($this->any())->method('setEntityTypeFilter')->will($this->returnValue([]));
         $this->attrCollectionFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory',
+            'Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory',
             ['create', 'addFieldToFilter'],
             [],
             '',
@@ -138,7 +138,7 @@ class GroupedTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractI
         $this->connection->expects($this->any())->method('quoteInto')->willReturn('');
         $this->connection->expects($this->any())->method('fetchAll')->will($this->returnValue($entityAttributes));
         $this->resource = $this->getMock(
-            '\Magento\Framework\App\Resource',
+            '\Magento\Framework\App\ResourceConnection',
             ['getConnection', 'getTableName'],
             [],
             '',
diff --git a/app/code/Magento/GroupedProduct/Model/Product/CopyConstructor/Grouped.php b/app/code/Magento/GroupedProduct/Model/Product/CopyConstructor/Grouped.php
index a7dbe514672d666d5eef5bfc8f0540f2bdbcb885..9d15d7d575820203f540540ecc4baca92465f9bb 100644
--- a/app/code/Magento/GroupedProduct/Model/Product/CopyConstructor/Grouped.php
+++ b/app/code/Magento/GroupedProduct/Model/Product/CopyConstructor/Grouped.php
@@ -11,13 +11,13 @@ class Grouped implements \Magento\Catalog\Model\Product\CopyConstructorInterface
      * Retrieve collection grouped link
      *
      * @param \Magento\Catalog\Model\Product $product
-     * @return \Magento\Catalog\Model\Resource\Product\Link\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Link\Collection
      */
     protected function _getGroupedLinkCollection(\Magento\Catalog\Model\Product $product)
     {
         /** @var \Magento\Catalog\Model\Product\Link  $links */
         $links = $product->getLinkInstance();
-        $links->setLinkTypeId(\Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED);
+        $links->setLinkTypeId(\Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED);
 
         $collection = $links->getLinkCollection();
         $collection->setProduct($product);
@@ -44,7 +44,7 @@ class Grouped implements \Magento\Catalog\Model\Product\CopyConstructorInterface
         $data = [];
         $attributes = [];
         $link = $product->getLinkInstance();
-        $link->setLinkTypeId(\Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED);
+        $link->setLinkTypeId(\Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED);
         foreach ($link->getAttributes() as $attribute) {
             if (isset($attribute['code'])) {
                 $attributes[] = $attribute['code'];
diff --git a/app/code/Magento/GroupedProduct/Model/Product/Type/Grouped.php b/app/code/Magento/GroupedProduct/Model/Product/Type/Grouped.php
index 546c51ea04b15b121172c344f4d81f9972f27545..0fd27515bec0a499d054e14f63718049e41a1f69 100644
--- a/app/code/Magento/GroupedProduct/Model/Product/Type/Grouped.php
+++ b/app/code/Magento/GroupedProduct/Model/Product/Type/Grouped.php
@@ -68,7 +68,7 @@ class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType
     /**
      * Catalog product link
      *
-     * @var \Magento\GroupedProduct\Model\Resource\Product\Link
+     * @var \Magento\GroupedProduct\Model\ResourceModel\Product\Link
      */
     protected $productLinks;
 
@@ -90,7 +90,7 @@ class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType
      * @param \Magento\Framework\Registry $coreRegistry
      * @param \Psr\Log\LoggerInterface $logger
      * @param ProductRepositoryInterface $productRepository
-     * @param \Magento\GroupedProduct\Model\Resource\Product\Link $catalogProductLink
+     * @param \Magento\GroupedProduct\Model\ResourceModel\Product\Link $catalogProductLink
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $catalogProductStatus
      * @param \Magento\Framework\App\State $appState
@@ -108,7 +108,7 @@ class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType
         \Magento\Framework\Registry $coreRegistry,
         \Psr\Log\LoggerInterface $logger,
         ProductRepositoryInterface $productRepository,
-        \Magento\GroupedProduct\Model\Resource\Product\Link $catalogProductLink,
+        \Magento\GroupedProduct\Model\ResourceModel\Product\Link $catalogProductLink,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Product\Attribute\Source\Status $catalogProductStatus,
         \Magento\Framework\App\State $appState,
@@ -147,7 +147,7 @@ class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType
         )->setChildFieldName(
             'linked_product_id'
         )->setWhere(
-            'link_type_id=' . \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED
+            'link_type_id=' . \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
         );
         return $info;
     }
@@ -168,7 +168,7 @@ class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType
     {
         return $this->productLinks->getChildrenIds(
             $parentId,
-            \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED
+            \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
         );
     }
 
@@ -182,7 +182,7 @@ class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType
     {
         return $this->productLinks->getParentIdsByChild(
             $childId,
-            \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED
+            \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
         );
     }
 
@@ -291,13 +291,13 @@ class Grouped extends \Magento\Catalog\Model\Product\Type\AbstractType
      * Retrieve collection of associated products
      *
      * @param \Magento\Catalog\Model\Product $product
-     * @return \Magento\Catalog\Model\Resource\Product\Link\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection
      */
     public function getAssociatedProductCollection($product)
     {
         /** @var \Magento\Catalog\Model\Product\Link  $links */
         $links = $product->getLinkInstance();
-        $links->setLinkTypeId(\Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED);
+        $links->setLinkTypeId(\Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED);
         $collection = $links->getProductCollection()->setFlag(
             'require_stock_items',
             true
diff --git a/app/code/Magento/GroupedProduct/Model/Resource/Indexer/Stock/Grouped.php b/app/code/Magento/GroupedProduct/Model/ResourceModel/Indexer/Stock/Grouped.php
similarity index 93%
rename from app/code/Magento/GroupedProduct/Model/Resource/Indexer/Stock/Grouped.php
rename to app/code/Magento/GroupedProduct/Model/ResourceModel/Indexer/Stock/Grouped.php
index fd1e3c60de894b16e35c616ced4fcbba11fa713d..8aaf41038bf7b10f2227be526430f95cf9ddefab 100644
--- a/app/code/Magento/GroupedProduct/Model/Resource/Indexer/Stock/Grouped.php
+++ b/app/code/Magento/GroupedProduct/Model/ResourceModel/Indexer/Stock/Grouped.php
@@ -9,11 +9,11 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\GroupedProduct\Model\Resource\Indexer\Stock;
+namespace Magento\GroupedProduct\Model\ResourceModel\Indexer\Stock;
 
 use Magento\Catalog\Model\Product\Attribute\Source\Status as ProductStatus;
 
-class Grouped extends \Magento\CatalogInventory\Model\Resource\Indexer\Stock\DefaultStock
+class Grouped extends \Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock\DefaultStock
 {
     /**
      * Get the select object for get stock status by grouped product ids
@@ -45,7 +45,7 @@ class Grouped extends \Magento\CatalogInventory\Model\Resource\Indexer\Stock\Def
         )->joinLeft(
             ['l' => $this->getTable('catalog_product_link')],
             'e.entity_id = l.product_id AND l.link_type_id=' .
-            \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED,
+            \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED,
             []
         )->joinLeft(
             ['le' => $this->getTable('catalog_product_entity')],
diff --git a/app/code/Magento/GroupedProduct/Model/Resource/Product/Indexer/Price/Grouped.php b/app/code/Magento/GroupedProduct/Model/ResourceModel/Product/Indexer/Price/Grouped.php
similarity index 88%
rename from app/code/Magento/GroupedProduct/Model/Resource/Product/Indexer/Price/Grouped.php
rename to app/code/Magento/GroupedProduct/Model/ResourceModel/Product/Indexer/Price/Grouped.php
index 7605bda8a0ae9b1522a781432d14bfb78a384a5a..970ee335e039e558be0bb158d5f1fdb90269dc03 100644
--- a/app/code/Magento/GroupedProduct/Model/Resource/Product/Indexer/Price/Grouped.php
+++ b/app/code/Magento/GroupedProduct/Model/ResourceModel/Product/Indexer/Price/Grouped.php
@@ -5,15 +5,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\GroupedProduct\Model\Resource\Product\Indexer\Price;
+namespace Magento\GroupedProduct\Model\ResourceModel\Product\Indexer\Price;
 
-class Grouped extends \Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice
+class Grouped extends \Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice
 {
     /**
      * Reindex temporary (price result data) for all products
      *
      * @throws \Exception
-     * @return \Magento\GroupedProduct\Model\Resource\Product\Indexer\Price\Grouped
+     * @return \Magento\GroupedProduct\Model\ResourceModel\Product\Indexer\Price\Grouped
      */
     public function reindexAll()
     {
@@ -33,7 +33,7 @@ class Grouped extends \Magento\Catalog\Model\Resource\Product\Indexer\Price\Defa
      * Reindex temporary (price result data) for defined product(s)
      *
      * @param int|array $entityIds
-     * @return \Magento\GroupedProduct\Model\Resource\Product\Indexer\Price\Grouped
+     * @return \Magento\GroupedProduct\Model\ResourceModel\Product\Indexer\Price\Grouped
      */
     public function reindexEntity($entityIds)
     {
@@ -47,7 +47,7 @@ class Grouped extends \Magento\Catalog\Model\Resource\Product\Indexer\Price\Defa
      * Use calculated price for relation products
      *
      * @param int|array $entityIds  the parent entity ids limitation
-     * @return \Magento\GroupedProduct\Model\Resource\Product\Indexer\Price\Grouped
+     * @return \Magento\GroupedProduct\Model\ResourceModel\Product\Indexer\Price\Grouped
      */
     protected function _prepareGroupedProductPriceData($entityIds = null)
     {
@@ -63,7 +63,7 @@ class Grouped extends \Magento\Catalog\Model\Resource\Product\Indexer\Price\Defa
         )->joinLeft(
             ['l' => $this->getTable('catalog_product_link')],
             'e.entity_id = l.product_id AND l.link_type_id=' .
-            \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED,
+            \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED,
             []
         )->join(
             ['cg' => $this->getTable('customer_group')],
diff --git a/app/code/Magento/GroupedProduct/Model/Resource/Product/Link.php b/app/code/Magento/GroupedProduct/Model/ResourceModel/Product/Link.php
similarity index 92%
rename from app/code/Magento/GroupedProduct/Model/Resource/Product/Link.php
rename to app/code/Magento/GroupedProduct/Model/ResourceModel/Product/Link.php
index 5e74dde0dea914b0a4f039a3f2b78ef317075ae3..6a5ff740981fcf5597147a16098b9c9cbc4af32a 100644
--- a/app/code/Magento/GroupedProduct/Model/Resource/Product/Link.php
+++ b/app/code/Magento/GroupedProduct/Model/ResourceModel/Product/Link.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\GroupedProduct\Model\Resource\Product;
+namespace Magento\GroupedProduct\Model\ResourceModel\Product;
 
-class Link extends \Magento\Catalog\Model\Resource\Product\Link
+class Link extends \Magento\Catalog\Model\ResourceModel\Product\Link
 {
     const LINK_TYPE_GROUPED = 3;
 
@@ -15,7 +15,7 @@ class Link extends \Magento\Catalog\Model\Resource\Product\Link
      * @param \Magento\Catalog\Model\Product $product
      * @param array $data
      *
-     * @return \Magento\GroupedProduct\Model\Resource\Product\Link
+     * @return \Magento\GroupedProduct\Model\ResourceModel\Product\Link
      */
     public function saveGroupedLinks($product, $data)
     {
diff --git a/app/code/Magento/GroupedProduct/Model/Resource/Product/Type/Grouped/AssociatedProductsCollection.php b/app/code/Magento/GroupedProduct/Model/ResourceModel/Product/Type/Grouped/AssociatedProductsCollection.php
similarity index 89%
rename from app/code/Magento/GroupedProduct/Model/Resource/Product/Type/Grouped/AssociatedProductsCollection.php
rename to app/code/Magento/GroupedProduct/Model/ResourceModel/Product/Type/Grouped/AssociatedProductsCollection.php
index be6b38c02ad45369cdda1732335882a1fdeec724..e6f96552a56ccb8e87f74f20d727a898476a4722 100644
--- a/app/code/Magento/GroupedProduct/Model/Resource/Product/Type/Grouped/AssociatedProductsCollection.php
+++ b/app/code/Magento/GroupedProduct/Model/ResourceModel/Product/Type/Grouped/AssociatedProductsCollection.php
@@ -5,12 +5,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\GroupedProduct\Model\Resource\Product\Type\Grouped;
+namespace Magento\GroupedProduct\Model\ResourceModel\Product\Type\Grouped;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class AssociatedProductsCollection extends \Magento\Catalog\Model\Resource\Product\Link\Product\Collection
+class AssociatedProductsCollection extends \Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection
 {
     /**
      * Core registry
@@ -32,16 +32,16 @@ class AssociatedProductsCollection extends \Magento\Catalog\Model\Resource\Produ
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrl
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
@@ -58,16 +58,16 @@ class AssociatedProductsCollection extends \Magento\Catalog\Model\Resource\Produ
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory,
-        \Magento\Catalog\Model\Resource\Url $catalogUrl,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Stdlib\DateTime $dateTime,
diff --git a/app/code/Magento/GroupedProduct/Setup/InstallData.php b/app/code/Magento/GroupedProduct/Setup/InstallData.php
index e42618d4e7bd4e810d0d815ac7fbbd5c1799d8b7..660f243a5a5bd5ac132ce3821a06327d3c5e346c 100644
--- a/app/code/Magento/GroupedProduct/Setup/InstallData.php
+++ b/app/code/Magento/GroupedProduct/Setup/InstallData.php
@@ -40,7 +40,7 @@ class InstallData implements InstallDataInterface
          * Install grouped product link type
          */
         $data = [
-            'link_type_id' => \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED,
+            'link_type_id' => \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED,
             'code' => 'super',
         ];
         $setup->getConnection()
@@ -56,19 +56,19 @@ class InstallData implements InstallDataInterface
             )
             ->where(
                 "c.link_type_id=?",
-                \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED
+                \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
             );
         $result = $setup->getConnection()->fetchAll($select);
 
         if (!$result) {
             $data = [
                 [
-                    'link_type_id' => \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED,
+                    'link_type_id' => \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED,
                     'product_link_attribute_code' => 'position',
                     'data_type' => 'int',
                 ],
                 [
-                    'link_type_id' => \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED,
+                    'link_type_id' => \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED,
                     'product_link_attribute_code' => 'qty',
                     'data_type' => 'decimal'
                 ],
diff --git a/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/CopyConstructor/GroupedTest.php b/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/CopyConstructor/GroupedTest.php
index ad51a8928f9b55e2738801966fee5a50457d1037..e85461b4c8da71be6635aa6a1e1b55f322aee52d 100644
--- a/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/CopyConstructor/GroupedTest.php
+++ b/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/CopyConstructor/GroupedTest.php
@@ -96,7 +96,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
         $this->_linkMock->expects($this->once())->method('getAttributes')->will($this->returnValue($attributes));
 
         $productLinkMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\Link',
+            '\Magento\Catalog\Model\ResourceModel\Product\Link',
             ['__wakeup', 'getLinkedProductId', 'toArray'],
             [],
             '',
@@ -107,7 +107,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
         )->method(
             'setLinkTypeId'
         )->with(
-            \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED
+            \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
         );
 
         $productLinkMock->expects($this->once())->method('getLinkedProductId')->will($this->returnValue('100500'));
@@ -122,7 +122,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
         );
 
         $collectionMock = $helper->getCollectionMock(
-            '\Magento\Catalog\Model\Resource\Product\Link\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Link\Collection',
             [$productLinkMock]
         );
         $collectionMock->expects($this->once())->method('setProduct')->with($this->_productMock);
diff --git a/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/Type/GroupedTest.php b/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/Type/GroupedTest.php
index edb3864706f9c9165f2338291662f97e6308a300..ae66e38fa5ee96e43b55148f05430f87b56c11eb 100644
--- a/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/Type/GroupedTest.php
+++ b/app/code/Magento/GroupedProduct/Test/Unit/Model/Product/Type/GroupedTest.php
@@ -45,7 +45,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
         $logger = $this->getMock('Psr\Log\LoggerInterface');
         $productFactoryMock = $this->getMock('Magento\Catalog\Model\ProductFactory', [], [], '', false);
         $this->catalogProductLink = $this->getMock(
-            '\Magento\GroupedProduct\Model\Resource\Product\Link',
+            '\Magento\GroupedProduct\Model\ResourceModel\Product\Link',
             [],
             [],
             '',
@@ -88,7 +88,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
             'getChildrenIds'
         )->with(
             $parentId,
-            \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED
+            \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
         )->will(
             $this->returnValue($childrenIds)
         );
@@ -105,7 +105,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
             'getParentIdsByChild'
         )->with(
             $childId,
-            \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED
+            \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
         )->will(
             $this->returnValue($parentIds)
         );
@@ -245,10 +245,10 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
         )->method(
             'setLinkTypeId'
         )->with(
-            \Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED
+            \Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED
         );
         $collection = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Link\Product\Collection',
+            'Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection',
             ['setFlag', 'setIsStrongMode', 'setProduct'],
             [],
             '',
@@ -305,7 +305,7 @@ class GroupedTest extends \PHPUnit_Framework_TestCase
         $expectedMsg = "Please specify the quantity of product(s).";
 
         $productCollection = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product\Link\Product\Collection',
+            'Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/GroupedProduct/Test/Unit/Model/ProductTest.php b/app/code/Magento/GroupedProduct/Test/Unit/Model/ProductTest.php
index 05149794026455a9ddce54330fd987c474326f19..8ab38d64c8612a7ede87998117073f51d491c37f 100644
--- a/app/code/Magento/GroupedProduct/Test/Unit/Model/ProductTest.php
+++ b/app/code/Magento/GroupedProduct/Test/Unit/Model/ProductTest.php
@@ -77,7 +77,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     private $store;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
 
@@ -231,7 +231,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['setProduct', 'saveOptions', '__wakeup', '__sleep'])
             ->disableOriginalConstructor()->getMock();
 
-        $this->resource = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product')
+        $this->resource = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/GroupedProduct/Test/Unit/Pricing/Price/ConfiguredPriceTest.php b/app/code/Magento/GroupedProduct/Test/Unit/Pricing/Price/ConfiguredPriceTest.php
index 4ff8ed45cadeb513b52530a12edc93db9e46fbf0..9bc9ff581b9a45ba1c122bfa552b72d4a9f942d9 100644
--- a/app/code/Magento/GroupedProduct/Test/Unit/Pricing/Price/ConfiguredPriceTest.php
+++ b/app/code/Magento/GroupedProduct/Test/Unit/Pricing/Price/ConfiguredPriceTest.php
@@ -18,7 +18,7 @@ class ConfiguredPriceTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $saleableItem;
 
@@ -51,7 +51,7 @@ class ConfiguredPriceTest extends \PHPUnit_Framework_TestCase
         $this->priceInfo = $this->getMockBuilder('Magento\Framework\Pricing\PriceInfoInterface')
             ->getMock();
 
-        $this->saleableItem = $this->getMockBuilder('Magento\Framework\Pricing\Object\SaleableInterface')
+        $this->saleableItem = $this->getMockBuilder('Magento\Framework\Pricing\SaleableInterface')
             ->setMethods([
                 'getTypeId',
                 'getId',
diff --git a/app/code/Magento/GroupedProduct/composer.json b/app/code/Magento/GroupedProduct/composer.json
index 3cb4722b9d07d8e03f7a8c6af400a2dcaa8147af..d1d08ab09e6c26ea568a08d52eb0f618c73f1786 100644
--- a/app/code/Magento/GroupedProduct/composer.json
+++ b/app/code/Magento/GroupedProduct/composer.json
@@ -16,6 +16,9 @@
         "magento/module-quote": "1.0.0-beta",
         "magento/framework": "1.0.0-beta"
     },
+    "suggest": {
+        "magento/module-grouped-product-sample-data": "Sample Data version:1.0.0-beta"
+    },
     "type": "magento2-module",
     "version": "1.0.0-beta",
     "license": [
diff --git a/app/code/Magento/GroupedProduct/etc/di.xml b/app/code/Magento/GroupedProduct/etc/di.xml
index 5bfcb47a96f050a211a8b53b98f5a4e86b8f41b4..2aad6f143c9388dfcdbae30c86955dd4d6d56ab6 100644
--- a/app/code/Magento/GroupedProduct/etc/di.xml
+++ b/app/code/Magento/GroupedProduct/etc/di.xml
@@ -16,11 +16,11 @@
     <type name="Magento\Catalog\Model\Product\LinkTypeProvider">
         <arguments>
             <argument name="linkTypes" xsi:type="array">
-                <item name="associated" xsi:type="const">Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED</item>
+                <item name="associated" xsi:type="const">Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED</item>
             </argument>
         </arguments>
     </type>
-    <type name="Magento\Sales\Model\Resource\Report\Bestsellers">
+    <type name="Magento\Sales\Model\ResourceModel\Report\Bestsellers">
         <arguments>
             <argument name="ignoredProductTypes" xsi:type="array">
                 <item name="grouped" xsi:type="const">Magento\GroupedProduct\Model\Product\Type\Grouped::TYPE_CODE</item>
diff --git a/app/code/Magento/GroupedProduct/etc/product_types.xml b/app/code/Magento/GroupedProduct/etc/product_types.xml
index c13651ae0f779e44d9b62515c577a34f4b739a64..4a130f3ec5f27c6a4cb327b9a14a3da30bc7bd2a 100644
--- a/app/code/Magento/GroupedProduct/etc/product_types.xml
+++ b/app/code/Magento/GroupedProduct/etc/product_types.xml
@@ -8,8 +8,8 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Catalog:etc/product_types.xsd">
     <type name="grouped" label="Grouped Product" modelInstance="Magento\GroupedProduct\Model\Product\Type\Grouped" composite='true' indexPriority="50" sortOrder="30">
         <priceModel instance="Magento\GroupedProduct\Model\Product\Type\Grouped\Price" />
-        <indexerModel instance="Magento\GroupedProduct\Model\Resource\Product\Indexer\Price\Grouped" />
-        <stockIndexerModel instance="Magento\GroupedProduct\Model\Resource\Indexer\Stock\Grouped" />
+        <indexerModel instance="Magento\GroupedProduct\Model\ResourceModel\Product\Indexer\Price\Grouped" />
+        <stockIndexerModel instance="Magento\GroupedProduct\Model\ResourceModel\Indexer\Stock\Grouped" />
         <customAttributes>
             <attribute name="is_real_product" value="false"/>
             <attribute name="refundable" value="true"/>
diff --git a/app/code/Magento/GroupedProduct/view/adminhtml/layout/groupedproduct_popup_grid.xml b/app/code/Magento/GroupedProduct/view/adminhtml/layout/groupedproduct_popup_grid.xml
index d95ec9df8c14bf6ae780ce6fbbf16ab48690a06a..87435ac42e867730101a2752f0cd1c95747d0fb2 100644
--- a/app/code/Magento/GroupedProduct/view/adminhtml/layout/groupedproduct_popup_grid.xml
+++ b/app/code/Magento/GroupedProduct/view/adminhtml/layout/groupedproduct_popup_grid.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="catalog.product.edit.tab.super.group.popup" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">grouped_grid_popup</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\GroupedProduct\Model\Resource\Product\Type\Grouped\AssociatedProductsCollection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\GroupedProduct\Model\ResourceModel\Product\Type\Grouped\AssociatedProductsCollection</argument>
                     <argument name="use_ajax" xsi:type="string">1</argument>
                     <argument name="default_sort" xsi:type="string">id</argument>
                     <argument name="default_dir" xsi:type="string">ASC</argument>
diff --git a/app/code/Magento/ImportExport/Block/Adminhtml/Export/Filter.php b/app/code/Magento/ImportExport/Block/Adminhtml/Export/Filter.php
index c8a3ca262da043e5831d5022150586bdfa3c462e..4cd75e3313d2cee2f4185bfe5b734235e6205dfc 100644
--- a/app/code/Magento/ImportExport/Block/Adminhtml/Export/Filter.php
+++ b/app/code/Magento/ImportExport/Block/Adminhtml/Export/Filter.php
@@ -400,7 +400,7 @@ class Filter extends \Magento\Backend\Block\Widget\Grid\Extended
      * Prepare collection by setting page number, sorting etc..
      *
      * @param \Magento\Framework\Data\Collection $collection
-     * @return \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+     * @return \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
      */
     public function prepareCollection(\Magento\Framework\Data\Collection $collection)
     {
diff --git a/app/code/Magento/ImportExport/Model/Export/AbstractEntity.php b/app/code/Magento/ImportExport/Model/Export/AbstractEntity.php
index d9780c68c1ab5b58cac275f21973ab87f277c0b5..098c56ff2c482ce674947cbfc9607e7ae65a85c8 100644
--- a/app/code/Magento/ImportExport/Model/Export/AbstractEntity.php
+++ b/app/code/Magento/ImportExport/Model/Export/AbstractEntity.php
@@ -146,7 +146,7 @@ abstract class AbstractEntity
     /**
      * Collection by pages iterator
      *
-     * @var \Magento\ImportExport\Model\Resource\CollectionByPagesIterator
+     * @var \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIterator
      */
     protected $_byPagesIterator;
 
@@ -175,7 +175,7 @@ abstract class AbstractEntity
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\ImportExport\Model\Export\Factory $collectionFactory
-     * @param \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $resourceColFactory
+     * @param \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $resourceColFactory
      * @param array $data
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
@@ -183,7 +183,7 @@ abstract class AbstractEntity
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\ImportExport\Model\Export\Factory $collectionFactory,
-        \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $resourceColFactory,
+        \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $resourceColFactory,
         array $data = []
     ) {
         $this->_scopeConfig = $scopeConfig;
diff --git a/app/code/Magento/ImportExport/Model/Export/Config/Converter.php b/app/code/Magento/ImportExport/Model/Export/Config/Converter.php
index b550e4166ab647d78dedb109d099d3aa02b0e6f8..3482dae1ccdbfc2e8d776723083a29e4c7ea0b3d 100644
--- a/app/code/Magento/ImportExport/Model/Export/Config/Converter.php
+++ b/app/code/Magento/ImportExport/Model/Export/Config/Converter.php
@@ -5,8 +5,24 @@
  */
 namespace Magento\ImportExport\Model\Export\Config;
 
+use Magento\Framework\Module\Manager;
+use Magento\Framework\App\Utility\Classes;
+
 class Converter implements \Magento\Framework\Config\ConverterInterface
 {
+    /**
+     * @var \Magento\Framework\Module\Manager
+     */
+    protected $moduleManager;
+
+    /**
+     * @param Manager $moduleManager
+     */
+    public function __construct(Manager $moduleManager)
+    {
+        $this->moduleManager = $moduleManager;
+    }
+
     /**
      * Convert dom node tree to array
      *
@@ -25,6 +41,9 @@ class Converter implements \Magento\Framework\Config\ConverterInterface
             $name = $attributes->getNamedItem('name')->nodeValue;
             $label = $attributes->getNamedItem('label')->nodeValue;
             $model = $attributes->getNamedItem('model')->nodeValue;
+            if (!$this->moduleManager->isOutputEnabled(Classes::getClassModuleName($model))) {
+                continue;
+            }
             $entityAttributeFilterType = $attributes->getNamedItem('entityAttributeFilterType')->nodeValue;
 
             $output['entities'][$name] = [
diff --git a/app/code/Magento/ImportExport/Model/Export/Entity/AbstractEav.php b/app/code/Magento/ImportExport/Model/Export/Entity/AbstractEav.php
index cf771ea7cdddbcb2b56d3811ee82e77592538815..9c66a53c110e34ccd4eb1d7698f3c7fc60d704a3 100644
--- a/app/code/Magento/ImportExport/Model/Export/Entity/AbstractEav.php
+++ b/app/code/Magento/ImportExport/Model/Export/Entity/AbstractEav.php
@@ -48,7 +48,7 @@ abstract class AbstractEav extends \Magento\ImportExport\Model\Export\AbstractEn
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\ImportExport\Model\Export\Factory $collectionFactory
-     * @param \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $resourceColFactory
+     * @param \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $resourceColFactory
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param array $data
@@ -57,7 +57,7 @@ abstract class AbstractEav extends \Magento\ImportExport\Model\Export\AbstractEn
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\ImportExport\Model\Export\Factory $collectionFactory,
-        \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $resourceColFactory,
+        \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $resourceColFactory,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Eav\Model\Config $eavConfig,
         array $data = []
diff --git a/app/code/Magento/ImportExport/Model/Export/Entity/AbstractEntity.php b/app/code/Magento/ImportExport/Model/Export/Entity/AbstractEntity.php
index 9ff3b8c8b45ecd25a2cac7a8d02d61f9c2f8acc3..ab29166b7dfa883e684ee0a8f21f30c0a2494363 100644
--- a/app/code/Magento/ImportExport/Model/Export/Entity/AbstractEntity.php
+++ b/app/code/Magento/ImportExport/Model/Export/Entity/AbstractEntity.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\ImportExport\Model\Export\Entity;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\ImportExport\Model\Export\Adapter\AbstractAdapter;
 
 /**
@@ -149,13 +149,13 @@ abstract class AbstractEntity
     /**
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Eav\Model\Config $config
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      */
     public function __construct(
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Eav\Model\Config $config,
-        Resource $resource,
+        ResourceConnection $resource,
         \Magento\Store\Model\StoreManagerInterface $storeManager
     ) {
         $this->_localeDate = $localeDate;
@@ -370,10 +370,10 @@ abstract class AbstractEntity
     /**
      * Clean up attribute collection.
      *
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Collection $collection
-     * @return \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $collection
+     * @return \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
      */
-    public function filterAttributeCollection(\Magento\Eav\Model\Resource\Entity\Attribute\Collection $collection)
+    public function filterAttributeCollection(\Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $collection)
     {
         $collection->load();
 
@@ -388,7 +388,7 @@ abstract class AbstractEntity
     /**
      * Entity attributes collection getter.
      *
-     * @return \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+     * @return \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
      */
     abstract public function getAttributeCollection();
 
@@ -414,7 +414,7 @@ abstract class AbstractEntity
                     foreach (is_array($option['value']) ? $option['value'] : [$option] as $innerOption) {
                         if (strlen($innerOption['value'])) {
                             // skip ' -- Please Select -- ' option
-                            $options[$innerOption['value']] = $innerOption[$index];
+                            $options[$innerOption['value']] = (string)$innerOption[$index];
                         }
                     }
                 }
diff --git a/app/code/Magento/ImportExport/Model/History.php b/app/code/Magento/ImportExport/Model/History.php
index f21cf7edf8eed02b9ea9032be5c870612a976557..39d94209b90accc1f9d5fc10bf78f4f983d9da16 100644
--- a/app/code/Magento/ImportExport/Model/History.php
+++ b/app/code/Magento/ImportExport/Model/History.php
@@ -8,8 +8,8 @@ namespace Magento\ImportExport\Model;
 /**
  * Import history model
  *
- * @method \Magento\ImportExport\Model\Resource\History _getResource()
- * @method \Magento\ImportExport\Model\Resource\History getResource()
+ * @method \Magento\ImportExport\Model\ResourceModel\History _getResource()
+ * @method \Magento\ImportExport\Model\ResourceModel\History getResource()
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  * @SuppressWarnings(PHPMD.LongVariable)
  */
@@ -47,8 +47,8 @@ class History extends \Magento\Framework\Model\AbstractModel
      *
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\ImportExport\Model\Resource\History $resource
-     * @param \Magento\ImportExport\Model\Resource\History\Collection $resourceCollection
+     * @param \Magento\ImportExport\Model\ResourceModel\History $resource
+     * @param \Magento\ImportExport\Model\ResourceModel\History\Collection $resourceCollection
      * @param \Magento\ImportExport\Helper\Report $reportHelper
      * @param \Magento\Backend\Model\Auth\Session $authSession
      * @param array $data
@@ -56,8 +56,8 @@ class History extends \Magento\Framework\Model\AbstractModel
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\ImportExport\Model\Resource\History $resource,
-        \Magento\ImportExport\Model\Resource\History\Collection $resourceCollection,
+        \Magento\ImportExport\Model\ResourceModel\History $resource,
+        \Magento\ImportExport\Model\ResourceModel\History\Collection $resourceCollection,
         \Magento\ImportExport\Helper\Report $reportHelper,
         \Magento\Backend\Model\Auth\Session $authSession,
         array $data = []
@@ -75,7 +75,7 @@ class History extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\ImportExport\Model\Resource\History');
+        $this->_init('Magento\ImportExport\Model\ResourceModel\History');
     }
 
     /**
diff --git a/app/code/Magento/ImportExport/Model/Import.php b/app/code/Magento/ImportExport/Model/Import.php
index 94a7c1a6dd3c177dc9e96946e7c95da2a42f4102..3742d5e54f3e3120ce59ab2cfd23c722dd3d9d7c 100644
--- a/app/code/Magento/ImportExport/Model/Import.php
+++ b/app/code/Magento/ImportExport/Model/Import.php
@@ -118,7 +118,7 @@ class Import extends \Magento\ImportExport\Model\AbstractModel
     protected $_entityFactory;
 
     /**
-     * @var \Magento\ImportExport\Model\Resource\Import\Data
+     * @var \Magento\ImportExport\Model\ResourceModel\Import\Data
      */
     protected $_importData;
 
@@ -159,7 +159,7 @@ class Import extends \Magento\ImportExport\Model\AbstractModel
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $coreConfig
      * @param Import\ConfigInterface $importConfig
      * @param Import\Entity\Factory $entityFactory
-     * @param Resource\Import\Data $importData
+     * @param \Magento\ImportExport\Model\ResourceModel\Import\Data $importData
      * @param Export\Adapter\CsvFactory $csvFactory
      * @param FileTransferFactory $httpFactory
      * @param \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory
@@ -177,7 +177,7 @@ class Import extends \Magento\ImportExport\Model\AbstractModel
         \Magento\Framework\App\Config\ScopeConfigInterface $coreConfig,
         \Magento\ImportExport\Model\Import\ConfigInterface $importConfig,
         \Magento\ImportExport\Model\Import\Entity\Factory $entityFactory,
-        \Magento\ImportExport\Model\Resource\Import\Data $importData,
+        \Magento\ImportExport\Model\ResourceModel\Import\Data $importData,
         \Magento\ImportExport\Model\Export\Adapter\CsvFactory $csvFactory,
         \Magento\Framework\HTTP\Adapter\FileTransferFactory $httpFactory,
         \Magento\MediaStorage\Model\File\UploaderFactory $uploaderFactory,
@@ -316,10 +316,11 @@ class Import extends \Magento\ImportExport\Model\AbstractModel
      */
     public static function getAttributeType(\Magento\Eav\Model\Entity\Attribute\AbstractAttribute $attribute)
     {
-        if ($attribute->usesSource() && in_array($attribute->getFrontendInput(), ['select', 'multiselect'])) {
-            return $attribute->getFrontendInput() == 'multiselect' ? 'multiselect' : 'select';
+        $frontendInput = $attribute->getFrontendInput();
+        if ($attribute->usesSource() && in_array($frontendInput, ['select', 'multiselect', 'boolean'])) {
+            return $frontendInput;
         } elseif ($attribute->isStatic()) {
-            return $attribute->getFrontendInput() == 'date' ? 'datetime' : 'varchar';
+            return $frontendInput == 'date' ? 'datetime' : 'varchar';
         } else {
             return $attribute->getBackendType();
         }
@@ -328,7 +329,7 @@ class Import extends \Magento\ImportExport\Model\AbstractModel
     /**
      * DB data source model getter.
      *
-     * @return \Magento\ImportExport\Model\Resource\Import\Data
+     * @return \Magento\ImportExport\Model\ResourceModel\Import\Data
      */
     public function getDataSourceModel()
     {
diff --git a/app/code/Magento/ImportExport/Model/Import/AbstractEntity.php b/app/code/Magento/ImportExport/Model/Import/AbstractEntity.php
index 50dc55f8ce762b073945dbabd53bffa0b611a226..e9b684c2bd2a9aeb74dbbc6368c7ff6c0e6b71a5 100644
--- a/app/code/Magento/ImportExport/Model/Import/AbstractEntity.php
+++ b/app/code/Magento/ImportExport/Model/Import/AbstractEntity.php
@@ -7,7 +7,7 @@ namespace Magento\ImportExport\Model\Import;
 
 use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingError;
 use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Import entity abstract model
@@ -107,7 +107,7 @@ abstract class AbstractEntity
     /**
      * DB data source model
      *
-     * @var \Magento\ImportExport\Model\Resource\Import\Data
+     * @var \Magento\ImportExport\Model\ResourceModel\Import\Data
      */
     protected $_dataSourceModel;
 
@@ -275,8 +275,8 @@ abstract class AbstractEntity
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\ImportExport\Model\ImportFactory $importFactory
-     * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param ProcessingErrorAggregatorInterface $errorAggregator
      * @param array $data
      * @SuppressWarnings(PHPMD.NPathComplexity)
@@ -285,8 +285,8 @@ abstract class AbstractEntity
         \Magento\Framework\Stdlib\StringUtils $string,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\ImportExport\Model\ImportFactory $importFactory,
-        \Magento\ImportExport\Model\Resource\Helper $resourceHelper,
-        Resource $resource,
+        \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper,
+        ResourceConnection $resource,
         ProcessingErrorAggregatorInterface $errorAggregator,
         array $data = []
     ) {
diff --git a/app/code/Magento/ImportExport/Model/Import/Config/Converter.php b/app/code/Magento/ImportExport/Model/Import/Config/Converter.php
index ef57125968afed186b37dd4cf7464b276e5d9c73..9bf10ab0c8f88a7c950ed43f4e837ebad0804745 100644
--- a/app/code/Magento/ImportExport/Model/Import/Config/Converter.php
+++ b/app/code/Magento/ImportExport/Model/Import/Config/Converter.php
@@ -5,8 +5,24 @@
  */
 namespace Magento\ImportExport\Model\Import\Config;
 
+use Magento\Framework\Module\Manager;
+use Magento\Framework\App\Utility\Classes;
+
 class Converter implements \Magento\Framework\Config\ConverterInterface
 {
+    /**
+     * @var \Magento\Framework\Module\Manager
+     */
+    protected $moduleManager;
+
+    /**
+     * @param Manager $moduleManager
+     */
+    public function __construct(Manager $moduleManager)
+    {
+        $this->moduleManager = $moduleManager;
+    }
+
     /**
      * Convert dom node tree to array
      *
@@ -26,7 +42,9 @@ class Converter implements \Magento\Framework\Config\ConverterInterface
             $label = $attributes->getNamedItem('label')->nodeValue;
             $behaviorModel = $attributes->getNamedItem('behaviorModel')->nodeValue;
             $model = $attributes->getNamedItem('model')->nodeValue;
-
+            if (!$this->moduleManager->isOutputEnabled(Classes::getClassModuleName($model))) {
+                continue;
+            }
             $output['entities'][$name] = [
                 'name' => $name,
                 'label' => $label,
diff --git a/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEav.php b/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEav.php
index 2e9d08c3e4178d818648bb5b0e842ea846ca67ca..18b2b72cbf2739cd2772ad67b89a93abc3f1e55d 100644
--- a/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEav.php
+++ b/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEav.php
@@ -78,8 +78,8 @@ abstract class AbstractEav extends \Magento\ImportExport\Model\Import\AbstractEn
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\ImportExport\Model\ImportFactory $importFactory
-     * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param ProcessingErrorAggregatorInterface $errorAggregator
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\ImportExport\Model\Export\Factory $collectionFactory
@@ -92,8 +92,8 @@ abstract class AbstractEav extends \Magento\ImportExport\Model\Import\AbstractEn
         \Magento\Framework\Stdlib\StringUtils $string,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\ImportExport\Model\ImportFactory $importFactory,
-        \Magento\ImportExport\Model\Resource\Helper $resourceHelper,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper,
+        \Magento\Framework\App\ResourceConnection $resource,
         ProcessingErrorAggregatorInterface $errorAggregator,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\ImportExport\Model\Export\Factory $collectionFactory,
diff --git a/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php b/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php
index 79c12cd16a7c43c9491db56bf0651e223291d53f..81422c45e13a871f8162a0535802db1cf96a2df5 100644
--- a/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php
+++ b/app/code/Magento/ImportExport/Model/Import/Entity/AbstractEntity.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\ImportExport\Model\Import\Entity;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\ImportExport\Model\Import\AbstractSource;
 use Magento\ImportExport\Model\Import as ImportExport;
 use Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingError;
@@ -91,7 +91,7 @@ abstract class AbstractEntity
     /**
      * DB data source model.
      *
-     * @var \Magento\ImportExport\Model\Resource\Import\Data
+     * @var \Magento\ImportExport\Model\ResourceModel\Import\Data
      */
     protected $_dataSourceModel;
 
@@ -201,7 +201,7 @@ abstract class AbstractEntity
     protected $string;
 
     /**
-     * @var \Magento\ImportExport\Model\Resource\Helper
+     * @var \Magento\ImportExport\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
@@ -241,10 +241,10 @@ abstract class AbstractEntity
     /**
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
      * @param \Magento\ImportExport\Helper\Data $importExportData
-     * @param \Magento\ImportExport\Model\Resource\Import\Data $importData
+     * @param \Magento\ImportExport\Model\ResourceModel\Import\Data $importData
      * @param \Magento\Eav\Model\Config $config
-     * @param Resource $resource
-     * @param \Magento\ImportExport\Model\Resource\Helper $resourceHelper
+     * @param ResourceConnection $resource
+     * @param \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Stdlib\StringUtils $string
      * @param ProcessingErrorAggregatorInterface $errorAggregator
      * @throws \Magento\Framework\Exception\LocalizedException
@@ -252,10 +252,10 @@ abstract class AbstractEntity
     public function __construct(
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         \Magento\ImportExport\Helper\Data $importExportData,
-        \Magento\ImportExport\Model\Resource\Import\Data $importData,
+        \Magento\ImportExport\Model\ResourceModel\Import\Data $importData,
         \Magento\Eav\Model\Config $config,
-        Resource $resource,
-        \Magento\ImportExport\Model\Resource\Helper $resourceHelper,
+        ResourceConnection $resource,
+        \Magento\ImportExport\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Stdlib\StringUtils $string,
         ProcessingErrorAggregatorInterface $errorAggregator
     ) {
diff --git a/app/code/Magento/ImportExport/Model/Resource/CollectionByPagesIterator.php b/app/code/Magento/ImportExport/Model/ResourceModel/CollectionByPagesIterator.php
similarity index 96%
rename from app/code/Magento/ImportExport/Model/Resource/CollectionByPagesIterator.php
rename to app/code/Magento/ImportExport/Model/ResourceModel/CollectionByPagesIterator.php
index 2c8ddbd285038133cf8f45ecf3e70978141a0b3c..6cfaacf1c52b35b42f51d501bd3dd4487b6decd3 100644
--- a/app/code/Magento/ImportExport/Model/Resource/CollectionByPagesIterator.php
+++ b/app/code/Magento/ImportExport/Model/ResourceModel/CollectionByPagesIterator.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ImportExport\Model\Resource;
+namespace Magento\ImportExport\Model\ResourceModel;
 
 /**
  * Collection by pages iterator
diff --git a/app/code/Magento/ImportExport/Model/Resource/Helper.php b/app/code/Magento/ImportExport/Model/ResourceModel/Helper.php
similarity index 87%
rename from app/code/Magento/ImportExport/Model/Resource/Helper.php
rename to app/code/Magento/ImportExport/Model/ResourceModel/Helper.php
index 7b7ee62b5548ea0b1ffb29e01e594a141bc43e01..f456978b588d147acef47b124338e704adc95bc1 100644
--- a/app/code/Magento/ImportExport/Model/Resource/Helper.php
+++ b/app/code/Magento/ImportExport/Model/ResourceModel/Helper.php
@@ -9,7 +9,7 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\ImportExport\Model\Resource;
+namespace Magento\ImportExport\Model\ResourceModel;
 
 class Helper extends \Magento\Framework\DB\Helper
 {
@@ -24,10 +24,10 @@ class Helper extends \Magento\Framework\DB\Helper
     // The coefficient of useful data from maximum packet length
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param string $modulePrefix
      */
-    public function __construct(\Magento\Framework\App\Resource $resource, $modulePrefix = 'importexport')
+    public function __construct(\Magento\Framework\App\ResourceConnection $resource, $modulePrefix = 'importexport')
     {
         parent::__construct($resource, $modulePrefix);
     }
diff --git a/app/code/Magento/ImportExport/Model/Resource/History.php b/app/code/Magento/ImportExport/Model/ResourceModel/History.php
similarity index 86%
rename from app/code/Magento/ImportExport/Model/Resource/History.php
rename to app/code/Magento/ImportExport/Model/ResourceModel/History.php
index 992c356f70efa7d5cab90f5547ada26344f6b9ae..5732f4dda2ca1b8739bdcb5900da92e775a44eaa 100644
--- a/app/code/Magento/ImportExport/Model/Resource/History.php
+++ b/app/code/Magento/ImportExport/Model/ResourceModel/History.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ImportExport\Model\Resource;
+namespace Magento\ImportExport\Model\ResourceModel;
 
 /**
  * Class History
  */
-class History extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class History extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/ImportExport/Model/Resource/History/Collection.php b/app/code/Magento/ImportExport/Model/ResourceModel/History/Collection.php
similarity index 78%
rename from app/code/Magento/ImportExport/Model/Resource/History/Collection.php
rename to app/code/Magento/ImportExport/Model/ResourceModel/History/Collection.php
index e6032da3633de301686e20d9e37111d17770b31b..f427da809a4d71d05cecfbd5557d7d4bbc5cf63d 100644
--- a/app/code/Magento/ImportExport/Model/Resource/History/Collection.php
+++ b/app/code/Magento/ImportExport/Model/ResourceModel/History/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ImportExport\Model\Resource\History;
+namespace Magento\ImportExport\Model\ResourceModel\History;
 
 use \Magento\ImportExport\Model\History;
 
 /**
  * Import history collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Link table name
@@ -26,14 +26,14 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\ImportExport\Model\History', 'Magento\ImportExport\Model\Resource\History');
+        $this->_init('Magento\ImportExport\Model\History', 'Magento\ImportExport\Model\ResourceModel\History');
         $this->_linkTable = $this->getTable('admin_user');
     }
 
     /**
      * Init select
      *
-     * @return \Magento\ImportExport\Model\Resource\History\Collection
+     * @return \Magento\ImportExport\Model\ResourceModel\History\Collection
      */
     protected function _initSelect()
     {
diff --git a/app/code/Magento/ImportExport/Model/Resource/Import/Data.php b/app/code/Magento/ImportExport/Model/ResourceModel/Import/Data.php
similarity index 93%
rename from app/code/Magento/ImportExport/Model/Resource/Import/Data.php
rename to app/code/Magento/ImportExport/Model/ResourceModel/Import/Data.php
index 294d8e87240870b096d943f17c1fef86296478fa..db95265ec4711f5e3b326f2faf4b1c892067f62d 100644
--- a/app/code/Magento/ImportExport/Model/Resource/Import/Data.php
+++ b/app/code/Magento/ImportExport/Model/ResourceModel/Import/Data.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ImportExport\Model\Resource\Import;
+namespace Magento\ImportExport\Model\ResourceModel\Import;
 
 /**
  * ImportExport import data resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Data extends \Magento\Framework\Model\Resource\Db\AbstractDb implements \IteratorAggregate
+class Data extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements \IteratorAggregate
 {
     /**
      * @var \Iterator
@@ -27,12 +27,12 @@ class Data extends \Magento\Framework\Model\Resource\Db\AbstractDb implements \I
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/ImportExport/Test/Unit/Block/Adminhtml/Export/FilterTest.php b/app/code/Magento/ImportExport/Test/Unit/Block/Adminhtml/Export/FilterTest.php
index 45f9f7704b840ee78845e8c28504eab61d75f03b..7dd782305cf679ecabb4ff6e0a1a587969954182 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Block/Adminhtml/Export/FilterTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Block/Adminhtml/Export/FilterTest.php
@@ -48,7 +48,7 @@ class FilterTest extends \PHPUnit_Framework_TestCase
     protected $storeManager;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Helper|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Eav\Model\ResourceModel\Helper|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceHelper;
 
@@ -88,12 +88,12 @@ class FilterTest extends \PHPUnit_Framework_TestCase
     protected $localeResolver;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
     /**
-     * @var \Magento\Framework\Data\Collection\Db|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceCollection;
 
@@ -148,7 +148,7 @@ class FilterTest extends \PHPUnit_Framework_TestCase
         $this->eavConfig = $this->getMock('Magento\Eav\Model\Config', [], [], '', false);
         $this->eavTypeFactory = $this->getMock('Magento\Eav\Model\Entity\TypeFactory', [], [], '', false);
         $this->storeManager = $this->getMock('Magento\Store\Model\StoreManager', [], [], '', false);
-        $this->resourceHelper = $this->getMock('Magento\Eav\Model\Resource\Helper', [], [], '', false);
+        $this->resourceHelper = $this->getMock('Magento\Eav\Model\ResourceModel\Helper', [], [], '', false);
         $this->universalFactory = $this->getMock('Magento\Framework\Validator\UniversalFactory', [], [], '', false);
         $this->optionDataFactory = $this->getMock(
             'Magento\Eav\Api\Data\AttributeOptionInterfaceFactory',
@@ -175,7 +175,7 @@ class FilterTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->localeResolver = $this->getMock('Magento\Framework\Locale\Resolver', [], [], '', false);
-        $this->resource = $this->getMock('Magento\Catalog\Model\Resource\Product', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Catalog\Model\ResourceModel\Product', [], [], '', false);
         $this->resourceCollection = $this->getMockForAbstractClass(
             'Magento\Framework\Data\Collection\AbstractDb',
             [],
diff --git a/app/code/Magento/ImportExport/Test/Unit/Helper/ReportTest.php b/app/code/Magento/ImportExport/Test/Unit/Helper/ReportTest.php
index deaed0a6d0d089240e47ff475f32a85deb8ed8bb..a3055d0186d6f54d02502b05c8c149e164c54b96 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Helper/ReportTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Helper/ReportTest.php
@@ -141,7 +141,7 @@ class ReportTest extends \PHPUnit_Framework_TestCase
         $product->expects($this->any())->method('getEntityTypeCode')->willReturn('catalog_product');
         $product->expects($this->any())->method('setParameters')->willReturn('');
         $entityFactory->expects($this->any())->method('create')->willReturn($product);
-        $importData = $this->getMock('Magento\ImportExport\Model\Resource\Import\Data', [], [], '', false);
+        $importData = $this->getMock('Magento\ImportExport\Model\ResourceModel\Import\Data', [], [], '', false);
         $csvFactory = $this->getMock('Magento\ImportExport\Model\Export\Adapter\CsvFactory', [], [], '', false);
         $httpFactory = $this->getMock('Magento\Framework\HTTP\Adapter\FileTransferFactory', [], [], '', false);
         $uploaderFactory = $this->getMock('Magento\MediaStorage\Model\File\UploaderFactory', [], [], '', false);
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Export/Config/ConverterTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Export/Config/ConverterTest.php
index f47fd710c6b2c34c622a4d4951fda77126f788cb..05702baf8cbc2caa0c19d08ebf3c4708a9d16980 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Export/Config/ConverterTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Export/Config/ConverterTest.php
@@ -10,25 +10,48 @@ class ConverterTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \Magento\ImportExport\Model\Export\Config\Converter
      */
-    protected $_model;
+    protected $model;
 
     /**
      * @var string
      */
-    protected $_filePath;
+    protected $filePath;
+
+    /**
+     * @var \Magento\Framework\Module\Manager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $moduleManager;
 
     public function setUp()
     {
-        $this->_filePath = realpath(__DIR__) . '/_files/';
-        $this->_model = new \Magento\ImportExport\Model\Export\Config\Converter();
+        $this->filePath = realpath(__DIR__) . '/_files/';
+        $this->moduleManager = $this->getMock('Magento\Framework\Module\Manager', ['isOutputEnabled'], [], '', false);
+        $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->model = $objectManagerHelper->getObject(
+            '\Magento\ImportExport\Model\Export\Config\Converter',
+            [
+                'moduleManager' => $this->moduleManager
+            ]
+        );
     }
 
     public function testConvert()
     {
-        $testDom = $this->_filePath . 'export.xml';
+        $testDom = $this->filePath . 'export.xml';
+        $dom = new \DOMDocument();
+        $dom->load($testDom);
+        $expectedArray = include $this->filePath . 'export.php';
+        $this->moduleManager->expects($this->any())->method('isOutputEnabled')->willReturn(true);
+        $this->assertEquals($expectedArray, $this->model->convert($dom));
+    }
+
+    public function testConvertWithDisabledModules()
+    {
+        $testDom = $this->filePath . 'export.xml';
         $dom = new \DOMDocument();
         $dom->load($testDom);
-        $expectedArray = include $this->_filePath . 'export.php';
-        $this->assertEquals($expectedArray, $this->_model->convert($dom));
+        $notExpectedArray = include $this->filePath . 'export.php';
+        $this->moduleManager->expects($this->any())->method('isOutputEnabled')->willReturn(false);
+        $this->assertNotEquals($notExpectedArray, $this->model->convert($dom));
     }
 }
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Export/Config/_files/export.php b/app/code/Magento/ImportExport/Test/Unit/Model/Export/Config/_files/export.php
index d847c695030c616c0bdcf41cead07658409a9e69..a1be63196883a0b99f35e3237c6989e519cc80ab 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Export/Config/_files/export.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Export/Config/_files/export.php
@@ -8,25 +8,25 @@ return [
         'product' => [
             'name' => 'product',
             'label' => 'Label_One',
-            'model' => 'Model_One',
+            'model' => 'Model\One',
             'types' => [
-                'product_type_one' => ['name' => 'product_type_one', 'model' => 'Product_Model_Type_One'],
-                'type_two' => ['name' => 'type_two', 'model' => 'Model_Type_Two'],
+                'product_type_one' => ['name' => 'product_type_one', 'model' => 'Product\Model\Type\One'],
+                'type_two' => ['name' => 'type_two', 'model' => 'Model\Type\Two'],
             ],
             'entityAttributeFilterType' => 'product',
         ],
         'customer' => [
             'name' => 'customer',
             'label' => 'Label_One',
-            'model' => 'Model_One',
+            'model' => 'Model\One',
             'types' => [
-                'type_one' => ['name' => 'type_one', 'model' => 'Model_Type_One'],
-                'type_two' => ['name' => 'type_two', 'model' => 'Model_Type_Two'],
+                'type_one' => ['name' => 'type_one', 'model' => 'Model\Type\One'],
+                'type_two' => ['name' => 'type_two', 'model' => 'Model\Type\Two'],
             ],
             'entityAttributeFilterType' => 'customer',
         ],
     ],
     'fileFormats' => [
-        'name_three' => ['name' => 'name_three', 'model' => 'Model_Three', 'label' => 'Label_Three'],
+        'name_three' => ['name' => 'name_three', 'model' => 'Model\Three', 'label' => 'Label_Three'],
     ]
 ];
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Export/Config/_files/export.xml b/app/code/Magento/ImportExport/Test/Unit/Model/Export/Config/_files/export.xml
index 8cd0f31a7662e92c65af4ced1bbf428f6e37423c..bf6288e2b31b410c89b1ae55bcc810d5fb0a8a87 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Export/Config/_files/export.xml
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Export/Config/_files/export.xml
@@ -6,11 +6,11 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_ImportExport:etc/export.xsd">
-    <entity name="product" label="Label_One" model="Model_One" entityAttributeFilterType="product"/>
-    <entity name="customer" label="Label_One" model="Model_One" entityAttributeFilterType="customer"/>
-    <entityType entity="customer" name="type_one" model="Model_Type_One" />
-    <entityType entity="customer" name="type_two" model="Model_Type_Two" />
-    <entityType entity="product" name="product_type_one" model="Product_Model_Type_One" />
-    <entityType entity="product" name="type_two" model="Model_Type_Two" />
-    <fileFormat name="name_three" label="Label_Three" model="Model_Three" />
+    <entity name="product" label="Label_One" model="Model\One" entityAttributeFilterType="product"/>
+    <entity name="customer" label="Label_One" model="Model\One" entityAttributeFilterType="customer"/>
+    <entityType entity="customer" name="type_one" model="Model\Type\One" />
+    <entityType entity="customer" name="type_two" model="Model\Type\Two" />
+    <entityType entity="product" name="product_type_one" model="Product\Model\Type\One" />
+    <entityType entity="product" name="type_two" model="Model\Type\Two" />
+    <fileFormat name="name_three" label="Label_Three" model="Model\Three" />
 </config>
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Config/ConverterTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Config/ConverterTest.php
index a35552ddec2dc7aa551e1dcf45775c9a2411f6de..dc5bc38f019faabc28fd34c64806268a914281c7 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Config/ConverterTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Config/ConverterTest.php
@@ -10,25 +10,48 @@ class ConverterTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \Magento\ImportExport\Model\Import\Config\Converter
      */
-    protected $_model;
+    protected $model;
 
     /**
      * @var string
      */
-    protected $_filePath;
+    protected $filePath;
+
+    /**
+     * @var \Magento\Framework\Module\Manager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $moduleManager;
 
     public function setUp()
     {
-        $this->_filePath = realpath(__DIR__) . '/_files/';
-        $this->_model = new \Magento\ImportExport\Model\Import\Config\Converter();
+        $this->filePath = realpath(__DIR__) . '/_files/';
+        $this->moduleManager = $this->getMock('Magento\Framework\Module\Manager', ['isOutputEnabled'], [], '', false);
+        $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->model = $objectManagerHelper->getObject(
+            '\Magento\ImportExport\Model\Import\Config\Converter',
+            [
+                'moduleManager' => $this->moduleManager
+            ]
+        );
     }
 
     public function testConvert()
     {
-        $testDom = $this->_filePath . 'import.xml';
+        $testDom = $this->filePath . 'import.xml';
+        $dom = new \DOMDocument();
+        $dom->load($testDom);
+        $expectedArray = include $this->filePath . 'import.php';
+        $this->moduleManager->expects($this->any())->method('isOutputEnabled')->willReturn(true);
+        $this->assertEquals($expectedArray, $this->model->convert($dom));
+    }
+
+    public function testConvertWithDisabledModules()
+    {
+        $testDom = $this->filePath . 'import.xml';
         $dom = new \DOMDocument();
         $dom->load($testDom);
-        $expectedArray = include $this->_filePath . 'import.php';
-        $this->assertEquals($expectedArray, $this->_model->convert($dom));
+        $notExpectedArray = include $this->filePath . 'import.php';
+        $this->moduleManager->expects($this->any())->method('isOutputEnabled')->willReturn(false);
+        $this->assertNotEquals($notExpectedArray, $this->model->convert($dom));
     }
 }
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Config/_files/import.php b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Config/_files/import.php
index 8c2f69aae9875fc7ec314d8d1d74b0c108a704c5..b663a59807164895abdd78a62a65ff35a9cabc0f 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Config/_files/import.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Config/_files/import.php
@@ -9,15 +9,15 @@ return [
             'name' => 'product',
             'label' => 'Label_One',
             'behaviorModel' => 'Model_Basic',
-            'model' => 'Model_One',
+            'model' => 'Model\One',
             'types' => [
                     'product_type_one' => [
                         'name' => 'product_type_one',
-                        'model' => 'Product_Type_One',
+                        'model' => 'Product\Type\One',
                     ],
                     'type_two' => [
                         'name' => 'type_two',
-                        'model' => 'Product_Type_Two',
+                        'model' => 'Product\Type\Two',
                     ],
                 ],
             'relatedIndexers' => [
@@ -33,15 +33,15 @@ return [
             'name' => 'customer',
             'label' => 'Label_One',
             'behaviorModel' => 'Model_Basic',
-            'model' => 'Model_One',
+            'model' => 'Model\One',
             'types' => [
                 'customer_type_one' => [
                     'name' => 'customer_type_one',
-                    'model' => 'Customer_Type_One',
+                    'model' => 'Customer\Type\One',
                 ],
                 'type_two' => [
                     'name' => 'type_two',
-                    'model' => 'Customer_Type_Two',
+                    'model' => 'Customer\Type\Two',
                 ],
             ],
             'relatedIndexers' => [
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Config/_files/import.xml b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Config/_files/import.xml
index e289b33b54d1214546c220af3f08b74bc82eee45..1aa4e732fda48e9ca035f1b698ec3be20f2fc325 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Config/_files/import.xml
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Config/_files/import.xml
@@ -6,12 +6,12 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_ImportExport:etc/import.xsd">
-    <entity name="product" label="Label_One" model="Model_One" behaviorModel="Model_Basic" />
-    <entity name="customer" label="Label_One" model="Model_One" behaviorModel="Model_Basic" />
-    <entityType entity="customer" name="customer_type_one" model="Customer_Type_One" />
-    <entityType entity="customer" name="type_two" model="Customer_Type_Two" />
-    <entityType entity="product" name="product_type_one" model="Product_Type_One" />
-    <entityType entity="product" name="type_two" model="Product_Type_Two" />
+    <entity name="product" label="Label_One" model="Model\One" behaviorModel="Model_Basic" />
+    <entity name="customer" label="Label_One" model="Model\One" behaviorModel="Model_Basic" />
+    <entityType entity="customer" name="customer_type_one" model="Customer\Type\One" />
+    <entityType entity="customer" name="type_two" model="Customer\Type\Two" />
+    <entityType entity="product" name="product_type_one" model="Product\Type\One" />
+    <entityType entity="product" name="type_two" model="Product\Type\Two" />
     <relatedIndexer entity="product" name="simple_index"/>
     <relatedIndexer entity="product" name="custom_product_index"/>
     <relatedIndexer entity="customer" name="simple_index"/>
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Entity/EavAbstractTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Entity/EavAbstractTest.php
index 321f2f455bbdc6b3d6ba686e3e69c054f27646e2..c7792c0d0768f22a9586ea91ac3c1710b53295a5 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Import/Entity/EavAbstractTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Import/Entity/EavAbstractTest.php
@@ -34,12 +34,12 @@ class EavAbstractTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abstr
     protected $_importFactory;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
     /**
-     * @var \Magento\ImportExport\Model\Resource\Helper
+     * @var \Magento\ImportExport\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
@@ -72,9 +72,9 @@ class EavAbstractTest extends \Magento\ImportExport\Test\Unit\Model\Import\Abstr
             '',
             false
         );
-        $this->_resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->_resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->_resourceHelper = $this->getMock(
-            'Magento\ImportExport\Model\Resource\Helper',
+            'Magento\ImportExport\Model\ResourceModel\Helper',
             [],
             [],
             '',
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Import/EntityAbstractTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/Import/EntityAbstractTest.php
index d60b4c66b9f440411eb1a7658e80555314609683..9ff8a8afa1ac43fef6b224146c25607e1b2126d3 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Import/EntityAbstractTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/Import/EntityAbstractTest.php
@@ -58,8 +58,8 @@ class EntityAbstractTest extends \Magento\ImportExport\Test\Unit\Model\Import\Ab
         $string = new \Magento\Framework\Stdlib\StringUtils();
         $scopeConfig = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface');
         $importFactory = $this->getMock('Magento\ImportExport\Model\ImportFactory', [], [], '', false);
-        $resourceHelper = $this->getMock('Magento\ImportExport\Model\Resource\Helper', [], [], '', false);
-        $resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $resourceHelper = $this->getMock('Magento\ImportExport\Model\ResourceModel\Helper', [], [], '', false);
+        $resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
 
         $data = [
             'coreString' => $string,
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/ImportTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/ImportTest.php
index 9e65d5516c61240d53459b32e4960bd9aa3fd0aa..3e2d5aac15c6d6164a79da63629e70b8a0a8f9b5 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/ImportTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/ImportTest.php
@@ -39,7 +39,7 @@ class ImportTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractIm
     protected $_entityFactory;
 
     /**
-     * @var \Magento\ImportExport\Model\Resource\Import\Data|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\ImportExport\Model\ResourceModel\Import\Data|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_importData;
 
@@ -140,7 +140,7 @@ class ImportTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractIm
         );
         $this->_entityFactory->method('create')->willReturn($this->_entityAdapter);
 
-        $this->_importData = $this->getMockBuilder('\Magento\ImportExport\Model\Resource\Import\Data')
+        $this->_importData = $this->getMockBuilder('\Magento\ImportExport\Model\ResourceModel\Import\Data')
             ->disableOriginalConstructor()
             ->getMock();
         $this->_csvFactory = $this->getMockBuilder('\Magento\ImportExport\Model\Export\Adapter\CsvFactory')
@@ -322,7 +322,13 @@ class ImportTest extends \Magento\ImportExport\Test\Unit\Model\Import\AbstractIm
      */
     public function testGetAttributeType()
     {
-        $this->markTestIncomplete('This test has not been implemented yet.');
+        /** @var \Magento\Eav\Model\Entity\Attribute\AbstractAttribute $attribute */
+        $attribute = $this->getMockBuilder('\Magento\Eav\Model\Entity\Attribute\AbstractAttribute')
+            ->setMethods(['getFrontendInput', 'usesSource'])
+            ->disableOriginalConstructor()->getMock();
+        $attribute->expects($this->any())->method('getFrontendInput')->willReturn('boolean');
+        $attribute->expects($this->any())->method('usesSource')->willReturn(true);
+        $this->assertEquals('boolean', $this->import->getAttributeType($attribute));
     }
 
     /**
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Resource/CollectionByPagesIteratorTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/ResourceModel/CollectionByPagesIteratorTest.php
similarity index 88%
rename from app/code/Magento/ImportExport/Test/Unit/Model/Resource/CollectionByPagesIteratorTest.php
rename to app/code/Magento/ImportExport/Test/Unit/Model/ResourceModel/CollectionByPagesIteratorTest.php
index cb7c841d6e0cc65aadbf789dc6b192683505d9d5..5cf5f8102c670ce45a94a6b32cccec3712ce564c 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Resource/CollectionByPagesIteratorTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/ResourceModel/CollectionByPagesIteratorTest.php
@@ -3,23 +3,23 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ImportExport\Test\Unit\Model\Resource;
+namespace Magento\ImportExport\Test\Unit\Model\ResourceModel;
 
 use \Magento\Framework\Data\Collection\AbstractDb;
 
 /**
- * Test class for \Magento\ImportExport\Model\Resource\CollectionByPagesIterator
+ * Test class for \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIterator
  */
 class CollectionByPagesIteratorTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\ImportExport\Model\Resource\CollectionByPagesIterator
+     * @var \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIterator
      */
     protected $_resourceModel;
 
     protected function setUp()
     {
-        $this->_resourceModel = new \Magento\ImportExport\Model\Resource\CollectionByPagesIterator();
+        $this->_resourceModel = new \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIterator();
     }
 
     protected function tearDown()
@@ -28,7 +28,7 @@ class CollectionByPagesIteratorTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\ImportExport\Model\Resource\CollectionByPagesIterator::iterate
+     * @covers \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIterator::iterate
      */
     public function testIterate()
     {
diff --git a/app/code/Magento/ImportExport/Test/Unit/Model/Resource/HistoryTest.php b/app/code/Magento/ImportExport/Test/Unit/Model/ResourceModel/HistoryTest.php
similarity index 90%
rename from app/code/Magento/ImportExport/Test/Unit/Model/Resource/HistoryTest.php
rename to app/code/Magento/ImportExport/Test/Unit/Model/ResourceModel/HistoryTest.php
index b642324cb068d6f79751268f49da800feb2a4586..c903c82a4a3175d4c4f0552cce6eb1b4fe755f1a 100644
--- a/app/code/Magento/ImportExport/Test/Unit/Model/Resource/HistoryTest.php
+++ b/app/code/Magento/ImportExport/Test/Unit/Model/ResourceModel/HistoryTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ImportExport\Test\Unit\Model\Resource;
+namespace Magento\ImportExport\Test\Unit\Model\ResourceModel;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
@@ -18,7 +18,7 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
     protected $objectManagerHelper;
 
     /**
-     * @var \Magento\ImportExport\Model\Resource\History|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\ImportExport\Model\ResourceModel\History|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $historyResourceModel;
 
@@ -28,7 +28,7 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->historyResourceModel = $this->getMock(
-            'Magento\ImportExport\Model\Resource\History',
+            'Magento\ImportExport\Model\ResourceModel\History',
             ['getConnection', 'getMainTable', 'getIdFieldName'],
             [],
             '',
diff --git a/app/code/Magento/ImportExport/composer.json b/app/code/Magento/ImportExport/composer.json
index e5c6a6ad71de3de044da333deda709fc5f17bcd4..3581abf29b2c36993256fdbc495239b8950f3a13 100644
--- a/app/code/Magento/ImportExport/composer.json
+++ b/app/code/Magento/ImportExport/composer.json
@@ -7,7 +7,6 @@
         "magento/module-backend": "1.0.0-beta",
         "magento/module-eav": "1.0.0-beta",
         "magento/module-media-storage": "1.0.0-beta",
-        "magento/module-user": "1.0.0-beta",
         "magento/framework": "1.0.0-beta",
         "ext-ctype": "*"
     },
diff --git a/app/code/Magento/ImportExport/view/adminhtml/layout/adminhtml_history_grid_block.xml b/app/code/Magento/ImportExport/view/adminhtml/layout/adminhtml_history_grid_block.xml
index 1090bf46ecc0e24e971b9afa320f8bb5414573f6..1b5d12331e938cec0910c46be54abb672f4149fc 100644
--- a/app/code/Magento/ImportExport/view/adminhtml/layout/adminhtml_history_grid_block.xml
+++ b/app/code/Magento/ImportExport/view/adminhtml/layout/adminhtml_history_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.import.history.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">importHistoryGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\ImportExport\Model\Resource\History\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\ImportExport\Model\ResourceModel\History\Collection</argument>
                     <argument name="default_sort" xsi:type="string">history_id</argument>
                     <argument name="default_dir" xsi:type="string">desc</argument>
                 </arguments>
diff --git a/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/before.phtml b/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/before.phtml
index c9084964d9ffb2f6fb34fa9b768bc58fe1f73a98..e5c60e69e8272bea15620679817d5467a236169b 100644
--- a/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/before.phtml
+++ b/app/code/Magento/ImportExport/view/adminhtml/templates/export/form/before.phtml
@@ -5,7 +5,10 @@
  */
 ?>
 <script>
-require(['prototype'], function(){
+require([
+    'Magento_Ui/js/modal/alert',
+    'prototype'
+], function(alert){
 
 //<![CDATA[
     // Temporary Class will be replaced after refactoring of import/export functionality
@@ -81,7 +84,9 @@ require(['prototype'], function(){
             form.submit();
             form.action   = oldAction;
         } else {
-            alert('Invalid data');
+            alert({
+                content: 'Invalid data'
+            });
         }
     };
 
diff --git a/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/before.phtml b/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/before.phtml
index 78b5a7139d7bb1f782b77b940c7f88776ea0c7bb..b74663620882ad4159b0c7bfd53d4ce79d9b80c1 100644
--- a/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/before.phtml
+++ b/app/code/Magento/ImportExport/view/adminhtml/templates/import/form/before.phtml
@@ -10,7 +10,11 @@
 /** @var $block \Magento\ImportExport\Block\Adminhtml\Import\Edit\Before */
 ?>
 <script>
-require(['jquery', 'prototype'], function(jQuery){
+require([
+    'jquery',
+    'Magento_Ui/js/modal/alert',
+    'prototype'
+], function(jQuery, alert){
 
 //<![CDATA[
     // Temporary Class will be replaced after refactoring of import/export functionality
@@ -200,7 +204,11 @@ require(['jquery', 'prototype'], function(jQuery){
          */
         postToFrameProcessResponse: function(response) {
             if ('object' != typeof(response)) {
-                return alert('Invalid response');
+                alert({
+                    content: 'Invalid response'
+                });
+
+                return false;
             }
             $H(response).each(function(pair) {
                 switch (pair.key) {
@@ -231,7 +239,9 @@ require(['jquery', 'prototype'], function(jQuery){
                         });
                         break;
                     default:
-                        alert(pair.key + ': ' + pair.value);
+                        alert({
+                            content: pair.key + ': ' + pair.value
+                        });
                         break;
                 }
             });
diff --git a/app/code/Magento/Indexer/Model/Config/Data.php b/app/code/Magento/Indexer/Model/Config/Data.php
index 0ce139b80c729009a0222e1478deaaf187d3f400..c688a6adb6b7d34aeee495a95fee74c97d5f1206 100644
--- a/app/code/Magento/Indexer/Model/Config/Data.php
+++ b/app/code/Magento/Indexer/Model/Config/Data.php
@@ -8,20 +8,20 @@ namespace Magento\Indexer\Model\Config;
 class Data extends \Magento\Framework\Config\Data
 {
     /**
-     * @var \Magento\Indexer\Model\Resource\Indexer\State\Collection
+     * @var \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection
      */
     protected $stateCollection;
 
     /**
      * @param \Magento\Framework\Indexer\Config\Reader $reader
      * @param \Magento\Framework\Config\CacheInterface $cache
-     * @param \Magento\Indexer\Model\Resource\Indexer\State\Collection $stateCollection
+     * @param \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection $stateCollection
      * @param string $cacheId
      */
     public function __construct(
         \Magento\Framework\Indexer\Config\Reader $reader,
         \Magento\Framework\Config\CacheInterface $cache,
-        \Magento\Indexer\Model\Resource\Indexer\State\Collection $stateCollection,
+        \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection $stateCollection,
         $cacheId = 'indexer_config'
     ) {
         $this->stateCollection = $stateCollection;
diff --git a/app/code/Magento/Indexer/Model/Indexer/Collection.php b/app/code/Magento/Indexer/Model/Indexer/Collection.php
index 32fbf14b1ca63b61a90a10d6622ea3f914979f00..0ddd38b53c1affe563b8cf95cfc904859f86a6de 100644
--- a/app/code/Magento/Indexer/Model/Indexer/Collection.php
+++ b/app/code/Magento/Indexer/Model/Indexer/Collection.php
@@ -20,19 +20,19 @@ class Collection extends \Magento\Framework\Data\Collection
     protected $config;
 
     /**
-     * @var \Magento\Indexer\Model\Resource\Indexer\State\CollectionFactory
+     * @var \Magento\Indexer\Model\ResourceModel\Indexer\State\CollectionFactory
      */
     protected $statesFactory;
 
     /**
      * @param \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory
      * @param \Magento\Framework\Indexer\ConfigInterface $config
-     * @param \Magento\Indexer\Model\Resource\Indexer\State\CollectionFactory $statesFactory
+     * @param \Magento\Indexer\Model\ResourceModel\Indexer\State\CollectionFactory $statesFactory
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
         \Magento\Framework\Indexer\ConfigInterface $config,
-        \Magento\Indexer\Model\Resource\Indexer\State\CollectionFactory $statesFactory
+        \Magento\Indexer\Model\ResourceModel\Indexer\State\CollectionFactory $statesFactory
     ) {
         $this->config = $config;
         $this->statesFactory = $statesFactory;
diff --git a/app/code/Magento/Indexer/Model/Indexer/State.php b/app/code/Magento/Indexer/Model/Indexer/State.php
index 0937cce28dee5ae180405d74fbd51c1e606797d4..31dddbd442664288102fc062f03b13c8a5bcc04e 100644
--- a/app/code/Magento/Indexer/Model/Indexer/State.php
+++ b/app/code/Magento/Indexer/Model/Indexer/State.php
@@ -26,15 +26,15 @@ class State extends \Magento\Framework\Model\AbstractModel implements StateInter
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Indexer\Model\Resource\Indexer\State $resource
-     * @param \Magento\Indexer\Model\Resource\Indexer\State\Collection $resourceCollection
+     * @param \Magento\Indexer\Model\ResourceModel\Indexer\State $resource
+     * @param \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Indexer\Model\Resource\Indexer\State $resource,
-        \Magento\Indexer\Model\Resource\Indexer\State\Collection $resourceCollection,
+        \Magento\Indexer\Model\ResourceModel\Indexer\State $resource,
+        \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection $resourceCollection,
         array $data = []
     ) {
         if (!isset($data['status'])) {
diff --git a/app/code/Magento/Indexer/Model/Mview/View/State.php b/app/code/Magento/Indexer/Model/Mview/View/State.php
index b51d14289b3962887ac57761f3049332c6c60dd8..dbc9eaf094882fac1e48f18c639de1aacd70e201 100644
--- a/app/code/Magento/Indexer/Model/Mview/View/State.php
+++ b/app/code/Magento/Indexer/Model/Mview/View/State.php
@@ -27,15 +27,15 @@ class State extends \Magento\Framework\Model\AbstractModel implements \Magento\F
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Indexer\Model\Resource\Mview\View\State $resource
-     * @param \Magento\Indexer\Model\Resource\Mview\View\State\Collection $resourceCollection
+     * @param \Magento\Indexer\Model\ResourceModel\Mview\View\State $resource
+     * @param \Magento\Indexer\Model\ResourceModel\Mview\View\State\Collection $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Indexer\Model\Resource\Mview\View\State $resource,
-        \Magento\Indexer\Model\Resource\Mview\View\State\Collection $resourceCollection,
+        \Magento\Indexer\Model\ResourceModel\Mview\View\State $resource,
+        \Magento\Indexer\Model\ResourceModel\Mview\View\State\Collection $resourceCollection,
         array $data = []
     ) {
         if (!isset($data['mode'])) {
diff --git a/app/code/Magento/Indexer/Model/Resource/AbstractResource.php b/app/code/Magento/Indexer/Model/ResourceModel/AbstractResource.php
similarity index 95%
rename from app/code/Magento/Indexer/Model/Resource/AbstractResource.php
rename to app/code/Magento/Indexer/Model/ResourceModel/AbstractResource.php
index 24c2e537b0def14789cf0aea7347ce029ce3bae0..78920dad56ee8694a8a10920c0f9dc81e0fd7086 100644
--- a/app/code/Magento/Indexer/Model/Resource/AbstractResource.php
+++ b/app/code/Magento/Indexer/Model/ResourceModel/AbstractResource.php
@@ -9,12 +9,12 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Indexer\Model\Resource;
+namespace Magento\Indexer\Model\ResourceModel;
 
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\DB\Select;
 
-abstract class AbstractResource extends \Magento\Framework\Model\Resource\Db\AbstractDb
+abstract class AbstractResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Constructor
@@ -26,12 +26,12 @@ abstract class AbstractResource extends \Magento\Framework\Model\Resource\Db\Abs
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Indexer\Table\StrategyInterface $tableStrategy,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Indexer/Model/Resource/Indexer/State.php b/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State.php
similarity index 75%
rename from app/code/Magento/Indexer/Model/Resource/Indexer/State.php
rename to app/code/Magento/Indexer/Model/ResourceModel/Indexer/State.php
index 5a7e301c7fb2f9ad12404843d4656990c5938ca0..e783c4aabb6d83fc89343021e3b88392523f8850 100644
--- a/app/code/Magento/Indexer/Model/Resource/Indexer/State.php
+++ b/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Indexer\Model\Resource\Indexer;
+namespace Magento\Indexer\Model\ResourceModel\Indexer;
 
-class State extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class State extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Indexer/Model/Resource/Indexer/State/Collection.php b/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State/Collection.php
similarity index 58%
rename from app/code/Magento/Indexer/Model/Resource/Indexer/State/Collection.php
rename to app/code/Magento/Indexer/Model/ResourceModel/Indexer/State/Collection.php
index 50300b9be33525e9e458b98f62aa190a9c859f37..2b87373dbe7aa388bb52794152c71545ebf237cd 100644
--- a/app/code/Magento/Indexer/Model/Resource/Indexer/State/Collection.php
+++ b/app/code/Magento/Indexer/Model/ResourceModel/Indexer/State/Collection.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Indexer\Model\Resource\Indexer\State;
+namespace Magento\Indexer\Model\ResourceModel\Indexer\State;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Collection initialization
@@ -14,6 +14,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Indexer\Model\Indexer\State', 'Magento\Indexer\Model\Resource\Indexer\State');
+        $this->_init('Magento\Indexer\Model\Indexer\State', 'Magento\Indexer\Model\ResourceModel\Indexer\State');
     }
 }
diff --git a/app/code/Magento/Indexer/Model/Resource/Mview/View/State.php b/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State.php
similarity index 74%
rename from app/code/Magento/Indexer/Model/Resource/Mview/View/State.php
rename to app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State.php
index 696b10ca77d15f8a6c013b8b3e7ed272d3fe4efc..fd7612f9ac32c5afff9f99c570e3706c97345839 100644
--- a/app/code/Magento/Indexer/Model/Resource/Mview/View/State.php
+++ b/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Indexer\Model\Resource\Mview\View;
+namespace Magento\Indexer\Model\ResourceModel\Mview\View;
 
-class State extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class State extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Indexer/Model/Resource/Mview/View/State/Collection.php b/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State/Collection.php
similarity index 61%
rename from app/code/Magento/Indexer/Model/Resource/Mview/View/State/Collection.php
rename to app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State/Collection.php
index 4d5ddcb876332f26dd19993f6bf21030f0655c70..9f6ce5023568ad114dfd4e5d15724bb237d6005f 100644
--- a/app/code/Magento/Indexer/Model/Resource/Mview/View/State/Collection.php
+++ b/app/code/Magento/Indexer/Model/ResourceModel/Mview/View/State/Collection.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Indexer\Model\Resource\Mview\View\State;
+namespace Magento\Indexer\Model\ResourceModel\Mview\View\State;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection implements
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection implements
     \Magento\Framework\Mview\View\State\CollectionInterface
 {
     /**
@@ -15,6 +15,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Indexer\Model\Mview\View\State', 'Magento\Indexer\Model\Resource\Mview\View\State');
+        $this->_init('Magento\Indexer\Model\Mview\View\State', 'Magento\Indexer\Model\ResourceModel\Mview\View\State');
     }
 }
diff --git a/app/code/Magento/Indexer/Setup/InstallData.php b/app/code/Magento/Indexer/Setup/InstallData.php
index c2ea10a8261755af7777ed017420671b8ccb1a21..5f2cfa8e11e36fd945cfbf656f0ae30d54942741 100644
--- a/app/code/Magento/Indexer/Setup/InstallData.php
+++ b/app/code/Magento/Indexer/Setup/InstallData.php
@@ -13,7 +13,7 @@ use Magento\Framework\Json\EncoderInterface;
 use Magento\Framework\Setup\ModuleContextInterface;
 use Magento\Framework\Setup\ModuleDataSetupInterface;
 use Magento\Framework\Indexer\ConfigInterface;
-use Magento\Indexer\Model\Resource\Indexer\State\CollectionFactory;
+use Magento\Indexer\Model\ResourceModel\Indexer\State\CollectionFactory;
 use Magento\Indexer\Model\Indexer\State;
 use Magento\Indexer\Model\Indexer\StateFactory;
 use Magento\Framework\Setup\InstallDataInterface;
diff --git a/app/code/Magento/Indexer/Setup/Recurring.php b/app/code/Magento/Indexer/Setup/Recurring.php
index 845a14cb4b0bdd1f9f246003bbd69d7e544240a0..39911f95139c81dac2a3fd6c5aa6feca361a2109 100644
--- a/app/code/Magento/Indexer/Setup/Recurring.php
+++ b/app/code/Magento/Indexer/Setup/Recurring.php
@@ -16,7 +16,7 @@ use Magento\Framework\Setup\SchemaSetupInterface;
 use Magento\Framework\Indexer\ConfigInterface;
 use Magento\Indexer\Model\Indexer\State;
 use Magento\Indexer\Model\Indexer\StateFactory;
-use Magento\Indexer\Model\Resource\Indexer\State\CollectionFactory;
+use Magento\Indexer\Model\ResourceModel\Indexer\State\CollectionFactory;
 
 /**
  * @codeCoverageIgnore
diff --git a/app/code/Magento/Indexer/Test/Unit/Model/Config/DataTest.php b/app/code/Magento/Indexer/Test/Unit/Model/Config/DataTest.php
index 3cd17862c88ad9c76eb11a84c3eab0558397e114..1b3f83d8b294cd073324d5d78a9b053b8934db1c 100644
--- a/app/code/Magento/Indexer/Test/Unit/Model/Config/DataTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Model/Config/DataTest.php
@@ -23,7 +23,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
     protected $cache;
 
     /**
-     * @var \Magento\Indexer\Model\Resource\Indexer\State\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $stateCollection;
 
@@ -50,7 +50,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
             ['test', 'load', 'save']
         );
         $this->stateCollection = $this->getMock(
-            'Magento\Indexer\Model\Resource\Indexer\State\Collection',
+            'Magento\Indexer\Model\ResourceModel\Indexer\State\Collection',
             ['getItems'],
             [],
             '',
diff --git a/app/code/Magento/Indexer/Test/Unit/Model/Indexer/CollectionTest.php b/app/code/Magento/Indexer/Test/Unit/Model/Indexer/CollectionTest.php
index 0cb275394d37b6f3238dc0c7a09327aae67432dc..57d41c52255785a69ee7e567b6a015ccdf137cc3 100644
--- a/app/code/Magento/Indexer/Test/Unit/Model/Indexer/CollectionTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Model/Indexer/CollectionTest.php
@@ -21,13 +21,13 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $config = $this->getMockBuilder('Magento\Framework\Indexer\ConfigInterface')->getMock();
 
         $statesFactory = $this->getMockBuilder(
-            'Magento\Indexer\Model\Resource\Indexer\State\CollectionFactory'
+            'Magento\Indexer\Model\ResourceModel\Indexer\State\CollectionFactory'
         )->disableOriginalConstructor()->setMethods(
             ['create']
         )->getMock();
 
         $states = $this->getMockBuilder(
-            'Magento\Indexer\Model\Resource\Indexer\State\Collection'
+            'Magento\Indexer\Model\ResourceModel\Indexer\State\Collection'
         )->disableOriginalConstructor()->getMock();
 
         $state = $this->getMockBuilder(
diff --git a/app/code/Magento/Indexer/Test/Unit/Model/Indexer/StateTest.php b/app/code/Magento/Indexer/Test/Unit/Model/Indexer/StateTest.php
index 1bd93f2d46a69277857a331e456ce2fce4a01088..cf4457501b1f6cda4e3ac30de4fbede8ea98167c 100644
--- a/app/code/Magento/Indexer/Test/Unit/Model/Indexer/StateTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Model/Indexer/StateTest.php
@@ -23,12 +23,12 @@ class StateTest extends \PHPUnit_Framework_TestCase
     protected $_registryMock;
 
     /**
-     * @var \Magento\Indexer\Model\Resource\Indexer\State|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Indexer\Model\ResourceModel\Indexer\State|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_resourceMock;
 
     /**
-     * @var \Magento\Indexer\Model\Resource\Indexer\State\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_resourceCollectionMock;
 
@@ -38,9 +38,9 @@ class StateTest extends \PHPUnit_Framework_TestCase
         $eventManagerMock = $this->getMock('\Magento\Framework\Event\ManagerInterface');
         $this->_contextMock->expects($this->any())->method('getEventDispatcher')->willReturn($eventManagerMock);
         $this->_registryMock = $this->getMock('\Magento\Framework\Registry', [], [], '', false);
-        $this->_resourceMock = $this->getMock('\Magento\Indexer\Model\Resource\Indexer\State', [], [], '', false);
+        $this->_resourceMock = $this->getMock('\Magento\Indexer\Model\ResourceModel\Indexer\State', [], [], '', false);
         $this->_resourceCollectionMock = $this->getMock(
-            '\Magento\Indexer\Model\Resource\Indexer\State\Collection',
+            '\Magento\Indexer\Model\ResourceModel\Indexer\State\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Indexer/Test/Unit/Model/Mview/View/StateTest.php b/app/code/Magento/Indexer/Test/Unit/Model/Mview/View/StateTest.php
index 585086a3d101bf542b3d85b3cedadf9281b39df7..10ee36444ed1d6f4c373139bc97026aecbcf17e7 100644
--- a/app/code/Magento/Indexer/Test/Unit/Model/Mview/View/StateTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Model/Mview/View/StateTest.php
@@ -23,12 +23,12 @@ class StateTest extends \PHPUnit_Framework_TestCase
     protected $_registryMock;
 
     /**
-     * @var \Magento\Indexer\Model\Resource\Mview\View\State|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Indexer\Model\ResourceModel\Mview\View\State|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_resourceMock;
 
     /**
-     * @var \Magento\Indexer\Model\Resource\Mview\View\State\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Indexer\Model\ResourceModel\Mview\View\State\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_resourceCollectionMock;
 
@@ -38,9 +38,10 @@ class StateTest extends \PHPUnit_Framework_TestCase
         $eventManagerMock = $this->getMock('\Magento\Framework\Event\ManagerInterface');
         $this->_contextMock->expects($this->any())->method('getEventDispatcher')->willReturn($eventManagerMock);
         $this->_registryMock = $this->getMock('\Magento\Framework\Registry', [], [], '', false);
-        $this->_resourceMock = $this->getMock('\Magento\Indexer\Model\Resource\Mview\View\State', [], [], '', false);
+        $this->_resourceMock =
+            $this->getMock('\Magento\Indexer\Model\ResourceModel\Mview\View\State', [], [], '', false);
         $this->_resourceCollectionMock = $this->getMock(
-            '\Magento\Indexer\Model\Resource\Mview\View\State\Collection',
+            '\Magento\Indexer\Model\ResourceModel\Mview\View\State\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Indexer/Test/Unit/Model/Resource/AbstractResourceStub.php b/app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/AbstractResourceStub.php
similarity index 92%
rename from app/code/Magento/Indexer/Test/Unit/Model/Resource/AbstractResourceStub.php
rename to app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/AbstractResourceStub.php
index 1709dcdc2260c16d4c98de47b4ab79ec635a1299..1244b61b420fb4b2a0a6ba4ceefe384003be0545 100644
--- a/app/code/Magento/Indexer/Test/Unit/Model/Resource/AbstractResourceStub.php
+++ b/app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/AbstractResourceStub.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Indexer\Test\Unit\Model\Resource;
+namespace Magento\Indexer\Test\Unit\Model\ResourceModel;
 
-class AbstractResourceStub extends \Magento\Indexer\Model\Resource\AbstractResource
+class AbstractResourceStub extends \Magento\Indexer\Model\ResourceModel\AbstractResource
 {
     /**
      * New DB Adapter
diff --git a/app/code/Magento/Indexer/Test/Unit/Model/Resource/AbstractResourceTest.php b/app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/AbstractResourceTest.php
similarity index 92%
rename from app/code/Magento/Indexer/Test/Unit/Model/Resource/AbstractResourceTest.php
rename to app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/AbstractResourceTest.php
index 728b20681528cbd4d9546643c256c8f80d911198..f5b9e6b87cfbfb1b05f07a8df2fc258ed2389559 100644
--- a/app/code/Magento/Indexer/Test/Unit/Model/Resource/AbstractResourceTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/AbstractResourceTest.php
@@ -3,17 +3,17 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Indexer\Test\Unit\Model\Resource;
+namespace Magento\Indexer\Test\Unit\Model\ResourceModel;
 
 class AbstractResourceTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Indexer\Test\Unit\Model\Resource\AbstractResourceStub
+     * @var \Magento\Indexer\Test\Unit\Model\ResourceModel\AbstractResourceStub
      */
     protected $model;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_resourceMock;
 
@@ -25,7 +25,7 @@ class AbstractResourceTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_resourceMock = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->_resourceMock = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -38,14 +38,14 @@ class AbstractResourceTest extends \PHPUnit_Framework_TestCase
         );
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $arguments = $objectManager->getConstructArguments(
-            '\Magento\Indexer\Test\Unit\Model\Resource\AbstractResourceStub',
+            '\Magento\Indexer\Test\Unit\Model\ResourceModel\AbstractResourceStub',
             [
                 'resource' => $this->_resourceMock,
                 'tableStrategy' => $this->_tableStrategyInterface
             ]
         );
         $this->model = $objectManager->getObject(
-            '\Magento\Indexer\Test\Unit\Model\Resource\AbstractResourceStub',
+            '\Magento\Indexer\Test\Unit\Model\ResourceModel\AbstractResourceStub',
             $arguments
         );
     }
@@ -93,7 +93,7 @@ class AbstractResourceTest extends \PHPUnit_Framework_TestCase
         $this->_resourceMock->expects($this->any())->method('getTableName')->will($this->returnArgument(0));
 
         $this->assertInstanceOf(
-            'Magento\Indexer\Test\Unit\Model\Resource\AbstractResourceStub',
+            'Magento\Indexer\Test\Unit\Model\ResourceModel\AbstractResourceStub',
             $this->model->syncData()
         );
     }
@@ -171,7 +171,7 @@ class AbstractResourceTest extends \PHPUnit_Framework_TestCase
             );
         }
         $this->assertInstanceOf(
-            'Magento\Indexer\Test\Unit\Model\Resource\AbstractResourceStub',
+            'Magento\Indexer\Test\Unit\Model\ResourceModel\AbstractResourceStub',
             $this->model->insertFromTable($sourceTable, $destTable, $readToIndex)
         );
     }
diff --git a/app/code/Magento/Indexer/Test/Unit/Model/Resource/Indexer/State/CollectionTest.php b/app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/Indexer/State/CollectionTest.php
similarity index 77%
rename from app/code/Magento/Indexer/Test/Unit/Model/Resource/Indexer/State/CollectionTest.php
rename to app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/Indexer/State/CollectionTest.php
index 863ba3be40a8d79b5862c2696907bcf3e4440f1a..9299c0487aed902a2f4212c827769c249a600a12 100644
--- a/app/code/Magento/Indexer/Test/Unit/Model/Resource/Indexer/State/CollectionTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/Indexer/State/CollectionTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Indexer\Test\Unit\Model\Resource\Indexer\State;
+namespace Magento\Indexer\Test\Unit\Model\ResourceModel\Indexer\State;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Indexer\Model\Resource\Indexer\State\Collection
+     * @var \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection
      */
     protected $model;
 
@@ -19,7 +19,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $fetchStrategyMock = $this->getMock('Magento\Framework\Data\Collection\Db\FetchStrategyInterface');
         $managerMock = $this->getMock('Magento\Framework\Event\ManagerInterface');
         $connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
-        $resourceMock = $this->getMock('Magento\Framework\Flag\Resource', [], [], '', false);
+        $resourceMock = $this->getMock('Magento\Framework\Flag\FlagResource', [], [], '', false);
         $resourceMock->expects($this->any())->method('getConnection')->will($this->returnValue($connectionMock));
         $selectMock = $this->getMock(
             'Magento\Framework\DB\Select',
@@ -28,7 +28,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         );
         $connectionMock->expects($this->any())->method('select')->will($this->returnValue($selectMock));
 
-        $this->model = new \Magento\Indexer\Model\Resource\Indexer\State\Collection(
+        $this->model = new \Magento\Indexer\Model\ResourceModel\Indexer\State\Collection(
             $entityFactoryMock,
             $loggerMock,
             $fetchStrategyMock,
@@ -38,7 +38,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->assertInstanceOf(
-            'Magento\Indexer\Model\Resource\Indexer\State\Collection',
+            'Magento\Indexer\Model\ResourceModel\Indexer\State\Collection',
             $this->model
         );
         $this->assertEquals(
@@ -46,7 +46,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             $this->model->getModelName()
         );
         $this->assertEquals(
-            'Magento\Indexer\Model\Resource\Indexer\State',
+            'Magento\Indexer\Model\ResourceModel\Indexer\State',
             $this->model->getResourceModelName()
         );
     }
diff --git a/app/code/Magento/Indexer/Test/Unit/Model/Resource/Indexer/StateTest.php b/app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/Indexer/StateTest.php
similarity index 72%
rename from app/code/Magento/Indexer/Test/Unit/Model/Resource/Indexer/StateTest.php
rename to app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/Indexer/StateTest.php
index b342d31298dd443c5757b4f18088718c56f4f496..081c390681fb4de3ccbadb37a7c84099a1d3447d 100644
--- a/app/code/Magento/Indexer/Test/Unit/Model/Resource/Indexer/StateTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/Indexer/StateTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Indexer\Test\Unit\Model\Resource\Indexer;
+namespace Magento\Indexer\Test\Unit\Model\ResourceModel\Indexer;
 
 class StateTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Indexer\Model\Resource\Indexer\State
+     * @var \Magento\Indexer\Model\ResourceModel\Indexer\State
      */
     protected $model;
 
     public function testConstruct()
     {
         $resourceMock = $this->getMock(
-            '\Magento\Framework\App\Resource',
+            '\Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -23,11 +23,11 @@ class StateTest extends \PHPUnit_Framework_TestCase
         );
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $arguments = $objectManager->getConstructArguments(
-            '\Magento\Indexer\Model\Resource\Indexer\State',
+            '\Magento\Indexer\Model\ResourceModel\Indexer\State',
             ['resource' => $resourceMock]
         );
         $this->model = $objectManager->getObject(
-            '\Magento\Indexer\Model\Resource\Indexer\State',
+            '\Magento\Indexer\Model\ResourceModel\Indexer\State',
             $arguments
         );
         $this->assertEquals(
diff --git a/app/code/Magento/Indexer/Test/Unit/Model/Resource/Mview/View/State/CollectionTest.php b/app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/Mview/View/State/CollectionTest.php
similarity index 76%
rename from app/code/Magento/Indexer/Test/Unit/Model/Resource/Mview/View/State/CollectionTest.php
rename to app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/Mview/View/State/CollectionTest.php
index b0692a74563d1ee13e9a33aaa7362456af6bec8f..a1ea967e0d9110f40055efd9a0c8c57f50a68065 100644
--- a/app/code/Magento/Indexer/Test/Unit/Model/Resource/Mview/View/State/CollectionTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/Mview/View/State/CollectionTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Indexer\Test\Unit\Model\Resource\Mview\View\State;
+namespace Magento\Indexer\Test\Unit\Model\ResourceModel\Mview\View\State;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Indexer\Model\Resource\Mview\View\State\Collection
+     * @var \Magento\Indexer\Model\ResourceModel\Mview\View\State\Collection
      */
     protected $model;
 
@@ -19,7 +19,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $fetchStrategyMock = $this->getMock('Magento\Framework\Data\Collection\Db\FetchStrategyInterface');
         $managerMock = $this->getMock('Magento\Framework\Event\ManagerInterface');
         $connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
-        $resourceMock = $this->getMock('Magento\Framework\Flag\Resource', [], [], '', false);
+        $resourceMock = $this->getMock('Magento\Framework\Flag\FlagResource', [], [], '', false);
         $resourceMock->expects($this->any())->method('getConnection')->will($this->returnValue($connectionMock));
         $selectMock = $this->getMock(
             'Magento\Framework\DB\Select',
@@ -28,7 +28,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         );
         $connectionMock->expects($this->any())->method('select')->will($this->returnValue($selectMock));
 
-        $this->model = new \Magento\Indexer\Model\Resource\Mview\View\State\Collection(
+        $this->model = new \Magento\Indexer\Model\ResourceModel\Mview\View\State\Collection(
             $entityFactoryMock,
             $loggerMock,
             $fetchStrategyMock,
@@ -38,7 +38,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->assertInstanceOf(
-            'Magento\Indexer\Model\Resource\Mview\View\State\Collection',
+            'Magento\Indexer\Model\ResourceModel\Mview\View\State\Collection',
             $this->model
         );
         $this->assertEquals(
@@ -46,7 +46,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             $this->model->getModelName()
         );
         $this->assertEquals(
-            'Magento\Indexer\Model\Resource\Mview\View\State',
+            'Magento\Indexer\Model\ResourceModel\Mview\View\State',
             $this->model->getResourceModelName()
         );
     }
diff --git a/app/code/Magento/Indexer/Test/Unit/Model/Resource/Mview/View/StateTest.php b/app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/Mview/View/StateTest.php
similarity index 71%
rename from app/code/Magento/Indexer/Test/Unit/Model/Resource/Mview/View/StateTest.php
rename to app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/Mview/View/StateTest.php
index 2b7cc9a9ca1d1cd1d6948c4f819a94f51d91b0dd..9df838cfbc5bb59ee78a42320a1ca094c5a42996 100644
--- a/app/code/Magento/Indexer/Test/Unit/Model/Resource/Mview/View/StateTest.php
+++ b/app/code/Magento/Indexer/Test/Unit/Model/ResourceModel/Mview/View/StateTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Indexer\Test\Unit\Model\Resource\Mview\View;
+namespace Magento\Indexer\Test\Unit\Model\ResourceModel\Mview\View;
 
 class StateTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Indexer\Model\Resource\Mview\View\State
+     * @var \Magento\Indexer\Model\ResourceModel\Mview\View\State
      */
     protected $model;
 
     public function testConstruct()
     {
         $resourceMock = $this->getMock(
-            '\Magento\Framework\App\Resource',
+            '\Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -23,11 +23,11 @@ class StateTest extends \PHPUnit_Framework_TestCase
         );
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $arguments = $objectManager->getConstructArguments(
-            '\Magento\Indexer\Model\Resource\Mview\View\State',
+            '\Magento\Indexer\Model\ResourceModel\Mview\View\State',
             ['resource' => $resourceMock]
         );
         $this->model = $objectManager->getObject(
-            '\Magento\Indexer\Model\Resource\Mview\View\State',
+            '\Magento\Indexer\Model\ResourceModel\Mview\View\State',
             $arguments
         );
         $this->assertEquals(
diff --git a/app/code/Magento/Indexer/etc/di.xml b/app/code/Magento/Indexer/etc/di.xml
index c747d46970eb31987def9d9d21e82e4edcb935a7..9ff651382242f392f91316d0610c28d26a22f9a9 100644
--- a/app/code/Magento/Indexer/etc/di.xml
+++ b/app/code/Magento/Indexer/etc/di.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
-    <preference for="Magento\Framework\Mview\View\State\CollectionInterface" type="Magento\Indexer\Model\Resource\Mview\View\State\Collection" />
+    <preference for="Magento\Framework\Mview\View\State\CollectionInterface" type="Magento\Indexer\Model\ResourceModel\Mview\View\State\Collection" />
     <preference for="Magento\Framework\Mview\View\StateInterface" type="Magento\Indexer\Model\Mview\View\State" />
     <preference for="Magento\Framework\Indexer\ConfigInterface" type="Magento\Indexer\Model\Config" />
     <preference for="Magento\Framework\Indexer\IndexerInterface" type="Magento\Indexer\Model\Indexer" />
@@ -30,7 +30,7 @@
     </type>
     <type name="Magento\Indexer\Model\Config\Data">
         <arguments>
-            <argument name="stateCollection" xsi:type="object" shared="false">Magento\Indexer\Model\Resource\Indexer\State\Collection</argument>
+            <argument name="stateCollection" xsi:type="object" shared="false">Magento\Indexer\Model\ResourceModel\Indexer\State\Collection</argument>
         </arguments>
     </type>
     <type name="Magento\Framework\Mview\View\Subscription">
diff --git a/app/code/Magento/Integration/Block/Adminhtml/Integration/Activate/Permissions/Tab/Webapi.php b/app/code/Magento/Integration/Block/Adminhtml/Integration/Activate/Permissions/Tab/Webapi.php
index fd6f9feb361b37eb94cb1c2f57e73020f5f5d1be..0ea177c3b4e9e2089eb5f8aac29086273471f0f0 100644
--- a/app/code/Magento/Integration/Block/Adminhtml/Integration/Activate/Permissions/Tab/Webapi.php
+++ b/app/code/Magento/Integration/Block/Adminhtml/Integration/Activate/Permissions/Tab/Webapi.php
@@ -22,7 +22,7 @@ class Webapi extends \Magento\Backend\Block\Widget\Form\Generic implements
     /** @var \Magento\Framework\Acl\RootResource */
     protected $_rootResource;
 
-    /** @var \Magento\Framework\Acl\Resource\ProviderInterface */
+    /** @var \Magento\Framework\Acl\AclResource\ProviderInterface */
     protected $_resourceProvider;
 
     /** @var \Magento\Integration\Helper\Data */
@@ -41,7 +41,7 @@ class Webapi extends \Magento\Backend\Block\Widget\Form\Generic implements
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
      * @param \Magento\Framework\Acl\RootResource $rootResource
-     * @param \Magento\Framework\Acl\Resource\ProviderInterface $resourceProvider
+     * @param \Magento\Framework\Acl\AclResource\ProviderInterface $resourceProvider
      * @param \Magento\Integration\Helper\Data $integrationData
      * @param \Magento\Framework\Json\Encoder $encoder
      * @param \Magento\Integration\Api\IntegrationServiceInterface $integrationService
@@ -52,7 +52,7 @@ class Webapi extends \Magento\Backend\Block\Widget\Form\Generic implements
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Data\FormFactory $formFactory,
         \Magento\Framework\Acl\RootResource $rootResource,
-        \Magento\Framework\Acl\Resource\ProviderInterface $resourceProvider,
+        \Magento\Framework\Acl\AclResource\ProviderInterface $resourceProvider,
         \Magento\Integration\Helper\Data $integrationData,
         \Magento\Framework\Json\Encoder $encoder,
         \Magento\Integration\Api\IntegrationServiceInterface $integrationService,
diff --git a/app/code/Magento/Integration/Block/Adminhtml/Integration/Edit/Tab/Webapi.php b/app/code/Magento/Integration/Block/Adminhtml/Integration/Edit/Tab/Webapi.php
index 624d4766cb8329494b3987122e61720bd2f96045..039803d1e4af0c2c2c1eab75639e462eb6c25012 100644
--- a/app/code/Magento/Integration/Block/Adminhtml/Integration/Edit/Tab/Webapi.php
+++ b/app/code/Magento/Integration/Block/Adminhtml/Integration/Edit/Tab/Webapi.php
@@ -26,7 +26,7 @@ class Webapi extends \Magento\Backend\Block\Widget\Form\Generic implements
     /**
      * Acl resource provider
      *
-     * @var \Magento\Framework\Acl\Resource\ProviderInterface
+     * @var \Magento\Framework\Acl\AclResource\ProviderInterface
      */
     protected $aclResourceProvider;
 
@@ -43,7 +43,7 @@ class Webapi extends \Magento\Backend\Block\Widget\Form\Generic implements
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
      * @param \Magento\Framework\Acl\RootResource $rootResource
-     * @param \Magento\Framework\Acl\Resource\ProviderInterface $aclResourceProvider
+     * @param \Magento\Framework\Acl\AclResource\ProviderInterface $aclResourceProvider
      * @param \Magento\Integration\Helper\Data $integrationData
      * @param \Magento\Integration\Api\IntegrationServiceInterface $integrationService
      * @param array $data
@@ -55,7 +55,7 @@ class Webapi extends \Magento\Backend\Block\Widget\Form\Generic implements
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Data\FormFactory $formFactory,
         \Magento\Framework\Acl\RootResource $rootResource,
-        \Magento\Framework\Acl\Resource\ProviderInterface $aclResourceProvider,
+        \Magento\Framework\Acl\AclResource\ProviderInterface $aclResourceProvider,
         \Magento\Integration\Helper\Data $integrationData,
         \Magento\Integration\Api\IntegrationServiceInterface $integrationService,
         array $data = []
diff --git a/app/code/Magento/Integration/Controller/Adminhtml/Integration.php b/app/code/Magento/Integration/Controller/Adminhtml/Integration.php
index 7b3e2dc7a0349f11e0c406b5693af8f49f44c26f..468c88f4a60f988e975a7d2ba5cf42a7188825fa 100644
--- a/app/code/Magento/Integration/Controller/Adminhtml/Integration.php
+++ b/app/code/Magento/Integration/Controller/Adminhtml/Integration.php
@@ -43,7 +43,7 @@ abstract class Integration extends Action
     /** @var \Magento\Integration\Helper\Data */
     protected $_integrationData;
 
-    /** @var \Magento\Integration\Model\Resource\Integration\Collection */
+    /** @var \Magento\Integration\Model\ResourceModel\Integration\Collection */
     protected $_integrationCollection;
 
     /**
@@ -60,7 +60,7 @@ abstract class Integration extends Action
      * @param \Magento\Framework\Json\Helper\Data $jsonHelper
      * @param \Magento\Integration\Helper\Data $integrationData
      * @param \Magento\Framework\Escaper $escaper
-     * @param \Magento\Integration\Model\Resource\Integration\Collection $integrationCollection
+     * @param \Magento\Integration\Model\ResourceModel\Integration\Collection $integrationCollection
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
@@ -71,7 +71,7 @@ abstract class Integration extends Action
         \Magento\Framework\Json\Helper\Data $jsonHelper,
         \Magento\Integration\Helper\Data $integrationData,
         \Magento\Framework\Escaper $escaper,
-        \Magento\Integration\Model\Resource\Integration\Collection $integrationCollection
+        \Magento\Integration\Model\ResourceModel\Integration\Collection $integrationCollection
     ) {
         parent::__construct($context);
         $this->_registry = $registry;
diff --git a/app/code/Magento/Integration/Model/AdminTokenService.php b/app/code/Magento/Integration/Model/AdminTokenService.php
index 84c0fcd168ff238f5499e50e64cf89f800de2236..66ad7a97521e406cd858d295bc0c827cb3c63fe5 100644
--- a/app/code/Magento/Integration/Model/AdminTokenService.php
+++ b/app/code/Magento/Integration/Model/AdminTokenService.php
@@ -11,7 +11,7 @@ use Magento\Framework\Exception\LocalizedException;
 use Magento\Integration\Model\CredentialsValidator;
 use Magento\Integration\Model\Oauth\Token as Token;
 use Magento\Integration\Model\Oauth\TokenFactory as TokenModelFactory;
-use Magento\Integration\Model\Resource\Oauth\Token\CollectionFactory as TokenCollectionFactory;
+use Magento\Integration\Model\ResourceModel\Oauth\Token\CollectionFactory as TokenCollectionFactory;
 use Magento\User\Model\User as UserModel;
 
 /**
diff --git a/app/code/Magento/Integration/Model/AuthorizationService.php b/app/code/Magento/Integration/Model/AuthorizationService.php
index 58e9f87a3d161e3431db1fc93b9b12adde555dd4..9860853744decb3236f29489cbad3f203a34f6c9 100644
--- a/app/code/Magento/Integration/Model/AuthorizationService.php
+++ b/app/code/Magento/Integration/Model/AuthorizationService.php
@@ -6,8 +6,8 @@
 
 namespace Magento\Integration\Model;
 
-use Magento\Authorization\Model\Resource\Role\CollectionFactory as RoleCollectionFactory;
-use Magento\Authorization\Model\Resource\Rules\CollectionFactory as RulesCollectionFactory;
+use Magento\Authorization\Model\ResourceModel\Role\CollectionFactory as RoleCollectionFactory;
+use Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory as RulesCollectionFactory;
 use Magento\Authorization\Model\Role;
 use Magento\Authorization\Model\RoleFactory;
 use Magento\Authorization\Model\RulesFactory;
diff --git a/app/code/Magento/Integration/Model/CustomerTokenService.php b/app/code/Magento/Integration/Model/CustomerTokenService.php
index 4b991cf4870b8b0aadede22297635e424f8465f4..931e11eb5fcfe419c3f916750e90f6f68f061feb 100644
--- a/app/code/Magento/Integration/Model/CustomerTokenService.php
+++ b/app/code/Magento/Integration/Model/CustomerTokenService.php
@@ -11,7 +11,7 @@ use Magento\Framework\Exception\LocalizedException;
 use Magento\Integration\Model\CredentialsValidator;
 use Magento\Integration\Model\Oauth\Token as Token;
 use Magento\Integration\Model\Oauth\TokenFactory as TokenModelFactory;
-use Magento\Integration\Model\Resource\Oauth\Token\CollectionFactory as TokenCollectionFactory;
+use Magento\Integration\Model\ResourceModel\Oauth\Token\CollectionFactory as TokenCollectionFactory;
 
 class CustomerTokenService implements \Magento\Integration\Api\CustomerTokenServiceInterface
 {
diff --git a/app/code/Magento/Integration/Model/Integration.php b/app/code/Magento/Integration/Model/Integration.php
index 981466605e40fa74931860f413cf22034ee6ff58..42cd8f5fcd044db3a4bdd7c90d32f3bad5fd2c1b 100644
--- a/app/code/Magento/Integration/Model/Integration.php
+++ b/app/code/Magento/Integration/Model/Integration.php
@@ -25,7 +25,7 @@ namespace Magento\Integration\Model;
  * @method Integration setCreatedAt(\string $createdAt)
  * @method \string getUpdatedAt()
  * @method Integration setUpdatedAt(\string $createdAt)
- * @method \Magento\Integration\Model\Resource\Integration getResource()
+ * @method \Magento\Integration\Model\ResourceModel\Integration getResource()
  */
 class Integration extends \Magento\Framework\Model\AbstractModel
 {
@@ -77,7 +77,7 @@ class Integration extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -85,7 +85,7 @@ class Integration extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Stdlib\DateTime $dateTime,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -101,7 +101,7 @@ class Integration extends \Magento\Framework\Model\AbstractModel
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\Integration\Model\Resource\Integration');
+        $this->_init('Magento\Integration\Model\ResourceModel\Integration');
     }
 
     /**
diff --git a/app/code/Magento/Integration/Model/Oauth/Consumer.php b/app/code/Magento/Integration/Model/Oauth/Consumer.php
index b5651c5644c5b2d76bdb8fd87cc76c6adab019d2..1cfe091aed450082796e06dd08d2099773166749 100644
--- a/app/code/Magento/Integration/Model/Oauth/Consumer.php
+++ b/app/code/Magento/Integration/Model/Oauth/Consumer.php
@@ -11,10 +11,10 @@ use Magento\Framework\Oauth\ConsumerInterface;
  * Consumer model
  *
  * @author Magento Core Team <core@magentocommerce.com>
- * @method \Magento\Integration\Model\Resource\Oauth\Consumer _getResource()
- * @method \Magento\Integration\Model\Resource\Oauth\Consumer getResource()
- * @method \Magento\Integration\Model\Resource\Oauth\Consumer\Collection getCollection()
- * @method \Magento\Integration\Model\Resource\Oauth\Consumer\Collection getResourceCollection()
+ * @method \Magento\Integration\Model\ResourceModel\Oauth\Consumer _getResource()
+ * @method \Magento\Integration\Model\ResourceModel\Oauth\Consumer getResource()
+ * @method \Magento\Integration\Model\ResourceModel\Oauth\Consumer\Collection getCollection()
+ * @method \Magento\Integration\Model\ResourceModel\Oauth\Consumer\Collection getResourceCollection()
  * @method string getName()
  * @method Consumer setName() setName(string $name)
  * @method Consumer setKey() setKey(string $key)
@@ -49,7 +49,7 @@ class Consumer extends \Magento\Framework\Model\AbstractModel implements Consume
      * @param \Magento\Integration\Model\Oauth\Consumer\Validator\KeyLength $keyLength
      * @param \Magento\Framework\Url\Validator $urlValidator
      * @param \Magento\Integration\Helper\Oauth\Data $dataHelper
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -59,7 +59,7 @@ class Consumer extends \Magento\Framework\Model\AbstractModel implements Consume
         \Magento\Integration\Model\Oauth\Consumer\Validator\KeyLength $keyLength,
         \Magento\Framework\Url\Validator $urlValidator,
         \Magento\Integration\Helper\Oauth\Data $dataHelper,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -77,7 +77,7 @@ class Consumer extends \Magento\Framework\Model\AbstractModel implements Consume
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\Integration\Model\Resource\Oauth\Consumer');
+        $this->_init('Magento\Integration\Model\ResourceModel\Oauth\Consumer');
     }
 
     /**
diff --git a/app/code/Magento/Integration/Model/Oauth/Nonce.php b/app/code/Magento/Integration/Model/Oauth/Nonce.php
index 97b7bc853a6c68fad953abd2086bd1e7159509c3..4499aa8d42be65166868aaba853f0d907c95f648 100644
--- a/app/code/Magento/Integration/Model/Oauth/Nonce.php
+++ b/app/code/Magento/Integration/Model/Oauth/Nonce.php
@@ -14,8 +14,8 @@ namespace Magento\Integration\Model\Oauth;
  * @method \Magento\Integration\Model\Oauth\Nonce setConsumerId() setConsumerId(int $consumerId)
  * @method string getTimestamp()
  * @method \Magento\Integration\Model\Oauth\Nonce setTimestamp() setTimestamp(string $timestamp)
- * @method \Magento\Integration\Model\Resource\Oauth\Nonce getResource()
- * @method \Magento\Integration\Model\Resource\Oauth\Nonce _getResource()
+ * @method \Magento\Integration\Model\ResourceModel\Oauth\Nonce getResource()
+ * @method \Magento\Integration\Model\ResourceModel\Oauth\Nonce _getResource()
  */
 class Nonce extends \Magento\Framework\Model\AbstractModel
 {
@@ -30,7 +30,7 @@ class Nonce extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Integration\Helper\Oauth\Data $oauthData
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -38,7 +38,7 @@ class Nonce extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Integration\Helper\Oauth\Data $oauthData,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -53,7 +53,7 @@ class Nonce extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Integration\Model\Resource\Oauth\Nonce');
+        $this->_init('Magento\Integration\Model\ResourceModel\Oauth\Nonce');
     }
 
     /**
diff --git a/app/code/Magento/Integration/Model/Oauth/Token.php b/app/code/Magento/Integration/Model/Oauth/Token.php
index 92d9fe6e749744c56e1e5a3bfff370f1c21f43b5..52f50dcbab7764b7812de7bdca5ddad8bce5ef7f 100644
--- a/app/code/Magento/Integration/Model/Oauth/Token.php
+++ b/app/code/Magento/Integration/Model/Oauth/Token.php
@@ -8,7 +8,7 @@ namespace Magento\Integration\Model\Oauth;
 use Magento\Authorization\Model\UserContextInterface;
 use Magento\Framework\Oauth\Exception as OauthException;
 use Magento\Framework\Oauth\Helper\Oauth as OauthHelper;
-use Magento\Integration\Model\Resource\Oauth\Token\Collection as TokenCollection;
+use Magento\Integration\Model\ResourceModel\Oauth\Token\Collection as TokenCollection;
 
 /**
  * oAuth token model
@@ -16,8 +16,8 @@ use Magento\Integration\Model\Resource\Oauth\Token\Collection as TokenCollection
  * @method string getName() Consumer name (joined from consumer table)
  * @method TokenCollection getCollection()
  * @method TokenCollection getResourceCollection()
- * @method \Magento\Integration\Model\Resource\Oauth\Token getResource()
- * @method \Magento\Integration\Model\Resource\Oauth\Token _getResource()
+ * @method \Magento\Integration\Model\ResourceModel\Oauth\Token getResource()
+ * @method \Magento\Integration\Model\ResourceModel\Oauth\Token _getResource()
  * @method int getConsumerId()
  * @method Token setConsumerId() setConsumerId(int $consumerId)
  * @method int getAdminId()
@@ -96,7 +96,7 @@ class Token extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Integration\Model\Oauth\ConsumerFactory $consumerFactory
      * @param \Magento\Integration\Helper\Oauth\Data $oauthData
      * @param OauthHelper $oauthHelper
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -110,7 +110,7 @@ class Token extends \Magento\Framework\Model\AbstractModel
         \Magento\Integration\Model\Oauth\ConsumerFactory $consumerFactory,
         \Magento\Integration\Helper\Oauth\Data $oauthData,
         OauthHelper $oauthHelper,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -130,7 +130,7 @@ class Token extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Integration\Model\Resource\Oauth\Token');
+        $this->_init('Magento\Integration\Model\ResourceModel\Oauth\Token');
     }
 
     /**
diff --git a/app/code/Magento/Integration/Model/Resource/Oauth/Consumer/Collection.php b/app/code/Magento/Integration/Model/Resource/Oauth/Consumer/Collection.php
deleted file mode 100644
index 67038312a649a98f02b37a30429cd618777bd863..0000000000000000000000000000000000000000
--- a/app/code/Magento/Integration/Model/Resource/Oauth/Consumer/Collection.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Integration\Model\Resource\Oauth\Consumer;
-
-/**
- * OAuth Application resource collection model
- */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
-{
-    /**
-     * Initialize collection model
-     *
-     * @return void
-     */
-    protected function _construct()
-    {
-        $this->_init('Magento\Integration\Model\Oauth\Consumer', 'Magento\Integration\Model\Resource\Oauth\Consumer');
-    }
-}
diff --git a/app/code/Magento/Integration/Model/Resource/Integration.php b/app/code/Magento/Integration/Model/ResourceModel/Integration.php
similarity index 87%
rename from app/code/Magento/Integration/Model/Resource/Integration.php
rename to app/code/Magento/Integration/Model/ResourceModel/Integration.php
index 4a3130f841f7f9b23f11be8c1a87f50e932c025b..d3a643b72ccfd02af919d677a689775dd3ad1e37 100644
--- a/app/code/Magento/Integration/Model/Resource/Integration.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Integration.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Integration\Model\Resource;
+namespace Magento\Integration\Model\ResourceModel;
 
 /**
  * Integration resource model
  */
-class Integration extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Integration extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize resource model
diff --git a/app/code/Magento/Integration/Model/Resource/Integration/Collection.php b/app/code/Magento/Integration/Model/ResourceModel/Integration/Collection.php
similarity index 75%
rename from app/code/Magento/Integration/Model/Resource/Integration/Collection.php
rename to app/code/Magento/Integration/Model/ResourceModel/Integration/Collection.php
index 4caf8cd2bc222d39ab678d0bf289330e448be23f..02feeda9ab31ca335526896402b79c0b59820498 100644
--- a/app/code/Magento/Integration/Model/Resource/Integration/Collection.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Integration/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Model\Resource\Integration;
+namespace Magento\Integration\Model\ResourceModel\Integration;
 
 /**
  * Integrations collection.
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource collection initialization.
@@ -17,7 +17,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Integration\Model\Integration', 'Magento\Integration\Model\Resource\Integration');
+        $this->_init('Magento\Integration\Model\Integration', 'Magento\Integration\Model\ResourceModel\Integration');
     }
 
     /**
diff --git a/app/code/Magento/Integration/Model/Resource/Oauth/Consumer.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer.php
similarity index 89%
rename from app/code/Magento/Integration/Model/Resource/Oauth/Consumer.php
rename to app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer.php
index c3cfd7bc502478ea91ac35118e19b0cd833337eb..6e06d06b43fc40d358ffe5776f1a4e89c88faa61 100644
--- a/app/code/Magento/Integration/Model/Resource/Oauth/Consumer.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Model\Resource\Oauth;
+namespace Magento\Integration\Model\ResourceModel\Oauth;
 
-class Consumer extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Consumer extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -13,12 +13,12 @@ class Consumer extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_dateTime;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer/Collection.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer/Collection.php
new file mode 100644
index 0000000000000000000000000000000000000000..e213f03aa4fcdfc61c114a9bc8cbb685c6721a23
--- /dev/null
+++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Consumer/Collection.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Integration\Model\ResourceModel\Oauth\Consumer;
+
+/**
+ * OAuth Application resource collection model
+ */
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
+{
+    /**
+     * Initialize collection model
+     *
+     * @return void
+     */
+    protected function _construct()
+    {
+        $this->_init(
+            'Magento\Integration\Model\Oauth\Consumer',
+            'Magento\Integration\Model\ResourceModel\Oauth\Consumer'
+        );
+    }
+}
diff --git a/app/code/Magento/Integration/Model/Resource/Oauth/Nonce.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce.php
similarity index 92%
rename from app/code/Magento/Integration/Model/Resource/Oauth/Nonce.php
rename to app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce.php
index 0a93c242022743536f6b6b0a7649808704ee9d5e..54babc2e0607b9eaedae0fdaec50f4bb9d827683 100644
--- a/app/code/Magento/Integration/Model/Resource/Oauth/Nonce.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Model\Resource\Oauth;
+namespace Magento\Integration\Model\ResourceModel\Oauth;
 
 /**
  * oAuth nonce resource model
  *
  * @author Magento Core Team <core@magentocommerce.com>
  */
-class Nonce extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Nonce extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize resource model
diff --git a/app/code/Magento/Integration/Model/Resource/Oauth/Nonce/Collection.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce/Collection.php
similarity index 61%
rename from app/code/Magento/Integration/Model/Resource/Oauth/Nonce/Collection.php
rename to app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce/Collection.php
index 1a59eb2e0fbaef0efe6e5c5fd810995c1a490259..db1dad4fad8951aca31e5474f0e21c8bfd7782ce 100644
--- a/app/code/Magento/Integration/Model/Resource/Oauth/Nonce/Collection.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Nonce/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Model\Resource\Oauth\Nonce;
+namespace Magento\Integration\Model\ResourceModel\Oauth\Nonce;
 
 /**
  * OAuth nonce resource collection model
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize collection model
@@ -17,6 +17,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Integration\Model\Oauth\Nonce', 'Magento\Integration\Model\Resource\Oauth\Nonce');
+        $this->_init('Magento\Integration\Model\Oauth\Nonce', 'Magento\Integration\Model\ResourceModel\Oauth\Nonce');
     }
 }
diff --git a/app/code/Magento/Integration/Model/Resource/Oauth/Token.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token.php
similarity index 95%
rename from app/code/Magento/Integration/Model/Resource/Oauth/Token.php
rename to app/code/Magento/Integration/Model/ResourceModel/Oauth/Token.php
index 8ae28f85cdc331c492d9532a9c1b3027e4c41b40..b851efd3f7a6c985e245260178a53ea0c7031ccf 100644
--- a/app/code/Magento/Integration/Model/Resource/Oauth/Token.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Model\Resource\Oauth;
+namespace Magento\Integration\Model\ResourceModel\Oauth;
 
 use Magento\Authorization\Model\UserContextInterface;
 
 /**
  * OAuth token resource model
  */
-class Token extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Token extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -18,12 +18,12 @@ class Token extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_dateTime;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Integration/Model/Resource/Oauth/Token/Collection.php b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token/Collection.php
similarity index 91%
rename from app/code/Magento/Integration/Model/Resource/Oauth/Token/Collection.php
rename to app/code/Magento/Integration/Model/ResourceModel/Oauth/Token/Collection.php
index a9fcf2a0dce1886799f4f34da4bb000a9f70646f..6e777fdff72806edcad4b3aadd95e942df4e2a7b 100644
--- a/app/code/Magento/Integration/Model/Resource/Oauth/Token/Collection.php
+++ b/app/code/Magento/Integration/Model/ResourceModel/Oauth/Token/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Model\Resource\Oauth\Token;
+namespace Magento\Integration\Model\ResourceModel\Oauth\Token;
 
 /**
  * OAuth token resource collection model
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize collection model
@@ -17,7 +17,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Integration\Model\Oauth\Token', 'Magento\Integration\Model\Resource\Oauth\Token');
+        $this->_init('Magento\Integration\Model\Oauth\Token', 'Magento\Integration\Model\ResourceModel\Oauth\Token');
     }
 
     /**
diff --git a/app/code/Magento/Integration/Test/Unit/Block/Adminhtml/Integration/Edit/Tab/WebapiTest.php b/app/code/Magento/Integration/Test/Unit/Block/Adminhtml/Integration/Edit/Tab/WebapiTest.php
index b0b4da28c34e452addc500e40973c93dafc5323a..3d22c90a290eb40fc9ed85c12c076ceb4f30fa62 100644
--- a/app/code/Magento/Integration/Test/Unit/Block/Adminhtml/Integration/Edit/Tab/WebapiTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Block/Adminhtml/Integration/Edit/Tab/WebapiTest.php
@@ -33,7 +33,7 @@ class WebapiTest extends \PHPUnit_Framework_TestCase
     private $rootResource;
 
     /**
-     * @var \Magento\Framework\Acl\Resource\ProviderInterface
+     * @var \Magento\Framework\Acl\AclResource\ProviderInterface
      */
     private $aclResourceProvider;
 
@@ -59,7 +59,7 @@ class WebapiTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->aclResourceProvider = $this->getMockBuilder('Magento\Framework\Acl\Resource\ProviderInterface')
+        $this->aclResourceProvider = $this->getMockBuilder('Magento\Framework\Acl\AclResource\ProviderInterface')
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
 
diff --git a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/IntegrationTest.php b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/IntegrationTest.php
index 540dc4b7266cde3c1090c32d539317a913e820d9..ddbb6247a55e09422d529efa754584c52181d5b8 100644
--- a/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/IntegrationTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Controller/Adminhtml/IntegrationTest.php
@@ -247,7 +247,8 @@ abstract class IntegrationTest extends \PHPUnit_Framework_TestCase
             $contextParameters
         );
 
-        $integrationCollection = $this->getMockBuilder('\Magento\Integration\Model\Resource\Integration\Collection')
+        $integrationCollection =
+            $this->getMockBuilder('\Magento\Integration\Model\ResourceModel\Integration\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['addUnsecureUrlsFilter', 'getSize'])
             ->getMock();
diff --git a/app/code/Magento/Integration/Test/Unit/Model/AdminTokenServiceTest.php b/app/code/Magento/Integration/Test/Unit/Model/AdminTokenServiceTest.php
index 1204c9a568ce27c6be5a54df05e43dd069d1ad26..8a1a3bf2ab6532757a8632301de0e5c64eaf3c3d 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/AdminTokenServiceTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/AdminTokenServiceTest.php
@@ -24,10 +24,10 @@ class AdminTokenServiceTest extends \PHPUnit_Framework_TestCase
     /** \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject */
     protected $_userModelMock;
 
-    /** \Magento\Integration\Model\Resource\Oauth\Token\Collection|\PHPUnit_Framework_MockObject_MockObject */
+    /** \Magento\Integration\Model\ResourceModel\Oauth\Token\Collection|\PHPUnit_Framework_MockObject_MockObject */
     protected $_tokenModelCollectionMock;
 
-    /** \Magento\Integration\Model\Resource\Oauth\Token\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject */
+    /** \Magento\Integration\Model\ResourceModel\Oauth\Token\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject */
     protected $_tokenModelCollectionFactoryMock;
 
     /** @var \Magento\Integration\Model\CredentialsValidator|\PHPUnit_Framework_MockObject_MockObject */
@@ -53,13 +53,13 @@ class AdminTokenServiceTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['getToken', 'loadByAdminId', 'setRevoked', 'save', '__wakeup'])->getMock();
 
         $this->_tokenModelCollectionMock = $this->getMockBuilder(
-            'Magento\Integration\Model\Resource\Oauth\Token\Collection'
+            'Magento\Integration\Model\ResourceModel\Oauth\Token\Collection'
         )->disableOriginalConstructor()->setMethods(
                 ['addFilterByAdminId', 'getSize', '__wakeup', '_beforeLoad', '_afterLoad', 'getIterator']
             )->getMock();
 
         $this->_tokenModelCollectionFactoryMock = $this->getMockBuilder(
-            'Magento\Integration\Model\Resource\Oauth\Token\CollectionFactory'
+            'Magento\Integration\Model\ResourceModel\Oauth\Token\CollectionFactory'
         )->setMethods(['create'])->disableOriginalConstructor()->getMock();
 
         $this->_tokenModelCollectionFactoryMock->expects($this->once())
diff --git a/app/code/Magento/Integration/Test/Unit/Model/AuthorizationServiceTest.php b/app/code/Magento/Integration/Test/Unit/Model/AuthorizationServiceTest.php
index fc0ee3e4fb0840bd497071c5001240f7654bc6b7..e97237fc278b9112cd428e34d30446b67948e398 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/AuthorizationServiceTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/AuthorizationServiceTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Integration\Test\Unit\Model;
 
-use Magento\Authorization\Model\Resource\Rules;
+use Magento\Authorization\Model\ResourceModel\Rules;
 use Magento\Authorization\Model\Role;
 use Magento\Authorization\Model\UserContextInterface;
 use Magento\Framework\Acl\RootResource;
@@ -72,14 +72,14 @@ class AuthorizationServiceTest extends \PHPUnit_Framework_TestCase
         $roleFactoryMock->expects($this->any())->method('create')->will($this->returnValue($this->roleMock));
 
         $roleCollectionFactoryMock = $this->getMock(
-            'Magento\Authorization\Model\Resource\Role\CollectionFactory',
+            'Magento\Authorization\Model\ResourceModel\Role\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $roleCollectionMock = $this->getMock(
-            'Magento\Authorization\Model\Resource\Role\Collection',
+            'Magento\Authorization\Model\ResourceModel\Role\Collection',
             ['setUserFilter', 'getFirstItem'],
             [],
             '',
@@ -111,7 +111,7 @@ class AuthorizationServiceTest extends \PHPUnit_Framework_TestCase
             $roleFactoryMock,
             $roleCollectionFactoryMock,
             $rulesFactoryMock,
-            $this->getMock('Magento\Authorization\Model\Resource\Rules\CollectionFactory', [], [], '', false),
+            $this->getMock('Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory', [], [], '', false),
             $this->getMock('Psr\Log\LoggerInterface'),
             $this->rootAclResourceMock
         );
diff --git a/app/code/Magento/Integration/Test/Unit/Model/CustomerTokenServiceTest.php b/app/code/Magento/Integration/Test/Unit/Model/CustomerTokenServiceTest.php
index 66aa5af050d6cf0186a70069c1ca8de4e989e7da..ea308d625d1f794c54f4b3cefac79e597fb9b8b1 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/CustomerTokenServiceTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/CustomerTokenServiceTest.php
@@ -22,10 +22,10 @@ class CustomerTokenServiceTest extends \PHPUnit_Framework_TestCase
     /** \Magento\Customer\Api\AccountManagementInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $_accountManagementMock;
 
-    /** \Magento\Integration\Model\Resource\Oauth\Token\Collection|\PHPUnit_Framework_MockObject_MockObject */
+    /** \Magento\Integration\Model\ResourceModel\Oauth\Token\Collection|\PHPUnit_Framework_MockObject_MockObject */
     protected $_tokenModelCollectionMock;
 
-    /** \Magento\Integration\Model\Resource\Oauth\Token\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject */
+    /** \PHPUnit_Framework_MockObject_MockObject */
     protected $_tokenModelCollectionFactoryMock;
 
     /** @var \Magento\Integration\Model\CredentialsValidator|\PHPUnit_Framework_MockObject_MockObject */
@@ -52,13 +52,13 @@ class CustomerTokenServiceTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['getToken', 'loadByCustomerId', 'setRevoked', 'save', '__wakeup'])->getMock();
 
         $this->_tokenModelCollectionMock = $this->getMockBuilder(
-            'Magento\Integration\Model\Resource\Oauth\Token\Collection'
+            'Magento\Integration\Model\ResourceModel\Oauth\Token\Collection'
         )->disableOriginalConstructor()->setMethods(
             ['addFilterByCustomerId', 'getSize', '__wakeup', '_beforeLoad', '_afterLoad', 'getIterator']
         )->getMock();
 
         $this->_tokenModelCollectionFactoryMock = $this->getMockBuilder(
-            'Magento\Integration\Model\Resource\Oauth\Token\CollectionFactory'
+            'Magento\Integration\Model\ResourceModel\Oauth\Token\CollectionFactory'
         )->setMethods(['create'])->disableOriginalConstructor()->getMock();
 
         $this->_tokenModelCollectionFactoryMock->expects($this->once())
diff --git a/app/code/Magento/Integration/Test/Unit/Model/IntegrationTest.php b/app/code/Magento/Integration/Test/Unit/Model/IntegrationTest.php
index ee0e19489de2377d1aaf0945738d2e415d8f4b72..2bd75138d9f4f3e89ccf8d96bb737e9b8834575c 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/IntegrationTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/IntegrationTest.php
@@ -31,7 +31,7 @@ class IntegrationTest extends \PHPUnit_Framework_TestCase
     protected $dateTimeMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -76,7 +76,7 @@ class IntegrationTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             [],
             '',
             false,
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Oauth/ConsumerTest.php b/app/code/Magento/Integration/Test/Unit/Model/Oauth/ConsumerTest.php
index b8f957b46eb88bd6af7169a3746c82298200548e..cf5db2ee443d2076d511f12c1f8719258f06a23a 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Oauth/ConsumerTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/Oauth/ConsumerTest.php
@@ -49,7 +49,7 @@ class ConsumerTest extends \PHPUnit_Framework_TestCase
     protected $oauthDataMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -109,7 +109,7 @@ class ConsumerTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue(\Magento\Integration\Helper\Oauth\Data::CONSUMER_EXPIRATION_PERIOD_DEFAULT));
 
         $this->resourceMock = $this->getMock(
-            'Magento\Integration\Model\Resource\Oauth\Consumer',
+            'Magento\Integration\Model\ResourceModel\Oauth\Consumer',
             ['getTimeInSecondsSinceCreation', 'getIdFieldName', 'selectByCompositeKey', 'deleteOldEntries'],
             [],
             '',
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Oauth/NonceTest.php b/app/code/Magento/Integration/Test/Unit/Model/Oauth/NonceTest.php
index e99a0bb74220cffe7f570b9de9eae2173ac1a260..fd41c76c7c688fe6d52a56126ec8f4a62b23b10a 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Oauth/NonceTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/Oauth/NonceTest.php
@@ -32,7 +32,7 @@ class NonceTest extends \PHPUnit_Framework_TestCase
     protected $oauthDataMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -77,7 +77,7 @@ class NonceTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             [],
             '',
             false,
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php b/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php
index 0d3460dbb63047df97b13dcf85fb7170000eb0f4..427e8591787f32f0f630968456148905b8232770 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/Oauth/TokenTest.php
@@ -68,7 +68,7 @@ class TokenTest extends \PHPUnit_Framework_TestCase
     protected $oauthHelperMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -119,7 +119,7 @@ class TokenTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\AbstractResource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource')
             ->setMethods(
                 [
                     'getIdFieldName',
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Resource/Integration/CollectionTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Integration/CollectionTest.php
similarity index 85%
rename from app/code/Magento/Integration/Test/Unit/Model/Resource/Integration/CollectionTest.php
rename to app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Integration/CollectionTest.php
index 3bb47aa3c08395f2859c3a153ee4ec70eefd84b7..9e188fd3ec71e7ee87619b977f62c8a02cfe3190 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Resource/Integration/CollectionTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Integration/CollectionTest.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Test\Unit\Model\Resource\Integration;
+namespace Magento\Integration\Test\Unit\Model\ResourceModel\Integration;
 
 /**
- * Unit test for \Magento\Integration\Model\Resource\Integration\Collection
+ * Unit test for \Magento\Integration\Model\ResourceModel\Integration\Collection
  */
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -16,7 +16,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $select;
 
     /**
-     * @var \Magento\Integration\Model\Resource\Integration\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Integration\Model\ResourceModel\Integration\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collection;
 
@@ -33,7 +33,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->will($this->returnValue($this->select));
 
-        $resource = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $resource = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['__wakeup', 'getConnection'])
             ->getMockForAbstractClass();
@@ -43,11 +43,11 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $arguments = $objectManagerHelper->getConstructArguments(
-            'Magento\Integration\Model\Resource\Integration\Collection',
+            'Magento\Integration\Model\ResourceModel\Integration\Collection',
             ['resource' => $resource]
         );
 
-        $this->collection = $this->getMockBuilder('Magento\Integration\Model\Resource\Integration\Collection')
+        $this->collection = $this->getMockBuilder('Magento\Integration\Model\ResourceModel\Integration\Collection')
             ->setConstructorArgs($arguments)
             ->setMethods(['addFilter', '_translateCondition', 'getMainTable'])
             ->getMock();
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Resource/IntegrationTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/IntegrationTest.php
similarity index 77%
rename from app/code/Magento/Integration/Test/Unit/Model/Resource/IntegrationTest.php
rename to app/code/Magento/Integration/Test/Unit/Model/ResourceModel/IntegrationTest.php
index dfc4a379f215400bccde6593ebb00c55764b6ab7..b42bd4c18ea98ec1e6c68f40f429b2b97484e32e 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Resource/IntegrationTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/IntegrationTest.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Test\Unit\Model\Resource;
+namespace Magento\Integration\Test\Unit\Model\ResourceModel;
 
 /**
- * Unit test for \Magento\Integration\Model\Resource\Integration
+ * Unit test for \Magento\Integration\Model\ResourceModel\Integration
  */
 class IntegrationTest extends \PHPUnit_Framework_TestCase
 {
@@ -21,17 +21,17 @@ class IntegrationTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\Context|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $contextMock;
 
     /**
-     * @var \Magento\Integration\Model\Resource\Integration
+     * @var \Magento\Integration\Model\ResourceModel\Integration
      */
     protected $integrationResourceModel;
 
@@ -44,13 +44,13 @@ class IntegrationTest extends \PHPUnit_Framework_TestCase
         $this->connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
         $this->connectionMock->expects($this->any())->method('select')->willReturn($this->selectMock);
 
-        $this->resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock);
 
-        $this->contextMock = $this->getMock('Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $this->contextMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $this->contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
 
-        $this->integrationResourceModel = new \Magento\Integration\Model\Resource\Integration($this->contextMock);
+        $this->integrationResourceModel = new \Magento\Integration\Model\ResourceModel\Integration($this->contextMock);
     }
 
     public function testSelectActiveIntegrationByConsumerId()
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Resource/Oauth/ConsumerTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/ConsumerTest.php
similarity index 82%
rename from app/code/Magento/Integration/Test/Unit/Model/Resource/Oauth/ConsumerTest.php
rename to app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/ConsumerTest.php
index 3f5eadab41213b4cd07f8af7ea4d328213f4ed85..38b2993b7e26fb16c9ded41d8d1d65bc261b8135 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Resource/Oauth/ConsumerTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/ConsumerTest.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Test\Unit\Model\Resource\Oauth;
+namespace Magento\Integration\Test\Unit\Model\ResourceModel\Oauth;
 
 /**
- * Unit test for \Magento\Integration\Model\Resource\Oauth\Consumer
+ * Unit test for \Magento\Integration\Model\ResourceModel\Oauth\Consumer
  */
 class ConsumerTest extends \PHPUnit_Framework_TestCase
 {
@@ -16,7 +16,7 @@ class ConsumerTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -26,7 +26,7 @@ class ConsumerTest extends \PHPUnit_Framework_TestCase
     protected $consumerMock;
 
     /**
-     * @var \Magento\Integration\Model\Resource\Oauth\Consumer
+     * @var \Magento\Integration\Model\ResourceModel\Oauth\Consumer
      */
     protected $consumerResource;
 
@@ -42,12 +42,12 @@ class ConsumerTest extends \PHPUnit_Framework_TestCase
 
         $this->connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
 
-        $this->resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock);
 
-        $contextMock = $this->getMock('Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
-        $this->consumerResource = new \Magento\Integration\Model\Resource\Oauth\Consumer(
+        $this->consumerResource = new \Magento\Integration\Model\ResourceModel\Oauth\Consumer(
             $contextMock,
             new \Magento\Framework\Stdlib\DateTime()
         );
@@ -57,7 +57,7 @@ class ConsumerTest extends \PHPUnit_Framework_TestCase
     {
         $this->consumerMock->expects($this->once())->method('setUpdatedAt');
         $this->assertInstanceOf(
-            'Magento\Integration\Model\Resource\Oauth\Consumer',
+            'Magento\Integration\Model\ResourceModel\Oauth\Consumer',
             $this->consumerResource->_beforeSave($this->consumerMock)
         );
     }
@@ -66,7 +66,7 @@ class ConsumerTest extends \PHPUnit_Framework_TestCase
     {
         $this->connectionMock->expects($this->exactly(2))->method('delete');
         $this->assertInstanceOf(
-            'Magento\Integration\Model\Resource\Oauth\Consumer',
+            'Magento\Integration\Model\ResourceModel\Oauth\Consumer',
             $this->consumerResource->_afterDelete($this->consumerMock)
         );
     }
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Resource/Oauth/NonceTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/NonceTest.php
similarity index 80%
rename from app/code/Magento/Integration/Test/Unit/Model/Resource/Oauth/NonceTest.php
rename to app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/NonceTest.php
index dc82b19ddbcae92b013d808b4a8943358c149259..4faae40b06f9155c072cefaed893366c91045bde 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Resource/Oauth/NonceTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/NonceTest.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Test\Unit\Model\Resource\Oauth;
+namespace Magento\Integration\Test\Unit\Model\ResourceModel\Oauth;
 
 /**
- * Unit test for \Magento\Integration\Model\Resource\Oauth\Nonce
+ * Unit test for \Magento\Integration\Model\ResourceModel\Oauth\Nonce
  */
 class NonceTest extends \PHPUnit_Framework_TestCase
 {
@@ -16,12 +16,12 @@ class NonceTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
     /**
-     * @var \Magento\Integration\Model\Resource\Oauth\Nonce
+     * @var \Magento\Integration\Model\ResourceModel\Oauth\Nonce
      */
     protected $nonceResource;
 
@@ -29,13 +29,13 @@ class NonceTest extends \PHPUnit_Framework_TestCase
     {
         $this->connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
 
-        $this->resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
 
-        $this->nonceResource = new \Magento\Integration\Model\Resource\Oauth\Nonce($contextMock);
+        $this->nonceResource = new \Magento\Integration\Model\ResourceModel\Oauth\Nonce($contextMock);
     }
 
     public function testDeleteOldEntries()
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Resource/Oauth/Token/CollectionTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/Token/CollectionTest.php
similarity index 88%
rename from app/code/Magento/Integration/Test/Unit/Model/Resource/Oauth/Token/CollectionTest.php
rename to app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/Token/CollectionTest.php
index 06f93bcf04736a5592265c42f74d14d22dbde8a6..21f66d94ebbaf8fe5eb85525309ba5cacaaefa43 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Resource/Oauth/Token/CollectionTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/Token/CollectionTest.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Test\Unit\Model\Resource\Oauth\Token;
+namespace Magento\Integration\Test\Unit\Model\ResourceModel\Oauth\Token;
 
 /**
- * Unit test for \Magento\Integration\Model\Resource\Oauth\Token\Collection
+ * Unit test for \Magento\Integration\Model\ResourceModel\Oauth\Token\Collection
  */
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -16,7 +16,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $select;
 
     /**
-     * @var \Magento\Integration\Model\Resource\Oauth\Token\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Integration\Model\ResourceModel\Oauth\Token\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collection;
 
@@ -33,7 +33,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->will($this->returnValue($this->select));
 
-        $resource = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $resource = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['__wakeup', 'getConnection'])
             ->getMockForAbstractClass();
@@ -43,11 +43,11 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $arguments = $objectManagerHelper->getConstructArguments(
-            'Magento\Integration\Model\Resource\Oauth\Token\Collection',
+            'Magento\Integration\Model\ResourceModel\Oauth\Token\Collection',
             ['resource' => $resource]
         );
 
-        $this->collection = $this->getMockBuilder('Magento\Integration\Model\Resource\Oauth\Token\Collection')
+        $this->collection = $this->getMockBuilder('Magento\Integration\Model\ResourceModel\Oauth\Token\Collection')
             ->setConstructorArgs($arguments)
             ->setMethods(['addFilter', 'getSelect', 'getTable', '_initSelect'])
             ->getMock();
diff --git a/app/code/Magento/Integration/Test/Unit/Model/Resource/Oauth/TokenTest.php b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/TokenTest.php
similarity index 91%
rename from app/code/Magento/Integration/Test/Unit/Model/Resource/Oauth/TokenTest.php
rename to app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/TokenTest.php
index 0b067e07c826aebfa7a89b3e63816ecf6a775afd..da0e0b9bc37085a64f46726cf527889b5138212a 100644
--- a/app/code/Magento/Integration/Test/Unit/Model/Resource/Oauth/TokenTest.php
+++ b/app/code/Magento/Integration/Test/Unit/Model/ResourceModel/Oauth/TokenTest.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Test\Unit\Model\Resource\Oauth;
+namespace Magento\Integration\Test\Unit\Model\ResourceModel\Oauth;
 
 /**
- * Unit test for \Magento\Integration\Model\Resource\Oauth\Token
+ * Unit test for \Magento\Integration\Model\ResourceModel\Oauth\Token
  */
 class TokenTest extends \PHPUnit_Framework_TestCase
 {
@@ -16,12 +16,12 @@ class TokenTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
     /**
-     * @var \Magento\Integration\Model\Resource\Oauth\Token
+     * @var \Magento\Integration\Model\ResourceModel\Oauth\Token
      */
     protected $tokenResource;
 
@@ -29,13 +29,13 @@ class TokenTest extends \PHPUnit_Framework_TestCase
     {
         $this->connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
 
-        $this->resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
 
-        $this->tokenResource = new \Magento\Integration\Model\Resource\Oauth\Token(
+        $this->tokenResource = new \Magento\Integration\Model\ResourceModel\Oauth\Token(
             $contextMock,
             new \Magento\Framework\Stdlib\DateTime()
         );
diff --git a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_grid_block.xml b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_grid_block.xml
index 8239310c3a98029bc28cb9d648b298fa81420c9f..dde6f3e999c853c267ade553d52449bf4b9f3371 100644
--- a/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_grid_block.xml
+++ b/app/code/Magento/Integration/view/adminhtml/layout/adminhtml_integration_grid_block.xml
@@ -13,7 +13,7 @@
             <block class="Magento\Integration\Block\Adminhtml\Integration\Grid" name="integration.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">integrationGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Integration\Model\Resource\Integration\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Integration\Model\ResourceModel\Integration\Collection</argument>
                     <argument name="use_ajax" xsi:type="string">1</argument>
                     <argument name="default_sort" xsi:type="string">integration_id</argument>
                     <argument name="default_dir" xsi:type="string">asc</argument>
diff --git a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
index 43e7996f6c192a0c176d8992cb36ef1a920bf41b..1150ac083a6c19df536c3cfaf6b5459a40340f86 100644
--- a/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
+++ b/app/code/Magento/Integration/view/adminhtml/templates/integration/popup_container.phtml
@@ -11,66 +11,40 @@
 // @codingStandardsIgnoreFile
 ?>
 <script>
-require([
-    "jquery",
-    "jquery/ui",
-	"Magento_Integration/js/integration"
-], function($){
+    require([
+        "jquery",
+        'Magento_Ui/js/modal/confirm',
+        "jquery/ui",
+        "Magento_Integration/js/integration"
+    ], function ($, Confirm) {
 
-    window.integration = new Integration(
-        '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/permissionsDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
-        '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/tokensDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
-        '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/tokensExchange', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
-        '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*'); ?>',
-        '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/loginSuccessCallback'); ?>'
-    );
+        window.integration = new Integration(
+            '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/permissionsDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
+            '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/tokensDialog', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
+            '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/tokensExchange', ['id' => ':id', 'reauthorize' => ':isReauthorize']); ?>',
+            '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*'); ?>',
+            '<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/loginSuccessCallback'); ?>'
+        );
 
-    /**
-     * Confirm dialog for delete integration action
-     */
-    $(function () {
-        $('div#integrationGrid').on('click', 'button#delete', function (e) {
-            $('#integration-delete-container').dialog({
-                modal: true,
-                autoOpen: true,
-                resizable: false,
-                minHeight: 0,
-                width: '75%',
-                dialogClass: 'no-close ui-popup-message',
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function () {
-                    $(this).closest('.ui-dialog').addClass('ui-dialog-active');
+        /**
+         * Confirm dialog for delete integration action
+         */
+        $(function () {
+            $('div#integrationGrid').on('click', 'button#delete', function (e) {
 
-                    var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight();
-                    $(this).closest('.ui-dialog').css('margin-top', topMargin);
-                },
-                close: function () {
-                    $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                },
-                buttons: [{
-                    text: $.mage.__('Delete'),
-                    'class': 'action-primary',
-                    click: function () {
-                        $(this).dialog("close");
-                        window.location.href = $(e.target).data('url');
+                new Confirm({
+                    title: 'Are you sure?',
+                    content: "Are you sure you want to delete this integration? You can't undo this action.",
+                    actions: {
+                        confirm: function () {
+                            window.location.href = $(e.target).data('url');
+                        }
                     }
-                }, {
-                    text: $.mage.__('Cancel'),
-                    'class': 'action-close',
-                    click: function () {
-                        $(this).dialog('close');
-                    }
-                }]
+                });
+                e.stopPropagation();
             });
-            e.stopPropagation();
         });
     });
-
-});
 </script>
 
 <div id="integration-popup-container" style="display: none;"></div>
diff --git a/app/code/Magento/Integration/view/adminhtml/web/js/integration.js b/app/code/Magento/Integration/view/adminhtml/web/js/integration.js
index 3e299ddf77e45aacd9d480d355dea456157689d7..93504661db61493e45eea27b28b27c024fab5417 100644
--- a/app/code/Magento/Integration/view/adminhtml/web/js/integration.js
+++ b/app/code/Magento/Integration/view/adminhtml/web/js/integration.js
@@ -7,9 +7,11 @@
 /*global integration*/
 define([
     "jquery",
+    "Magento_Ui/js/modal/alert",
     "jquery/ui",
-    "mage/translate"
-], function($){
+    "mage/translate",
+    "Magento_Ui/js/modal/modal"
+], function($, alert){
     "use strict";
 
     $.widget('mage.integration', {
@@ -80,7 +82,9 @@ define([
                     }
                 },
                 error: function (jqXHR, status, error) {
-                    alert($.mage.__('Sorry, something went wrong. Please try again later.'));
+                    alert({
+                        content: $.mage.__('Sorry, something went wrong. Please try again later.')
+                    });
                     window.console && console.log(status + ': ' + error + "\nResponse text:\n" + jqXHR.responseText);
                 },
                 complete: function () {
@@ -168,12 +172,12 @@ define([
                         $('body').trigger('processStart');
                         //Check for window closed
                         window.location.reload();
-                        IdentityLogin.jqInfoDialog.dialog('close');
+                        IdentityLogin.jqInfoDialog.modal('closeModal');
                     }
                 } catch (e) {
                     //squash. In case Window closed without success callback, clear polling
                     if (IdentityLogin.win.closed) {
-                        IdentityLogin.jqInfoDialog.dialog('close');
+                        IdentityLogin.jqInfoDialog.modal('closeModal');
                         clearInterval(IdentityLogin.checker);
                     }
                     return;
@@ -217,53 +221,24 @@ define([
                     } catch (e) {
                         //This is expected if result is not json. Do nothing.
                     }
+
                     if (identityLinkUrl && consumerId && popupHtml) {
                         IdentityLogin.invokePopup(identityLinkUrl, consumerId, popup);
                     } else {
                         popupHtml = result;
                     }
 
+                    if (popup.length === 0){
+                        popup = $('<div/>');
+                    }
                     popup.html(popupHtml);
 
                     var buttons = [],
                         dialogProperties = {
                             title: title,
-                            modal: true,
-                            autoOpen: true,
-                            minHeight: 450,
-                            minWidth: 600,
-                            width: '75%',
+                            type: 'slide',
                             dialogClass: dialog == 'permissions' ? 'integration-dialog' : 'integration-dialog no-close',
-                            closeOnEscape: false,
-                            position: {
-                                my: 'left top',
-                                at: 'center top',
-                                of: 'body'
-                            },
-                            open: function () {
-                                $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                                var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30;
-                                $(this).closest('.ui-dialog').css('margin-top', topMargin);
-                            },
-                            close: function () {
-                                $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                            }
                         };
-                    if (dialog == 'permissions') {
-                        // We don't need this button in 'tokens' dialog, since if you got there - integration is
-                        // already activated and have necessary tokens
-                        buttons.push({
-                            text: $.mage.__('Cancel'),
-                            'class': 'action-close',
-                            click: function () {
-                                $(this).dialog('close');
-                            }
-                        });
-                    } else if (dialog == 'tokensExchange') {
-                        dialogProperties['minHeight'] = 150;
-                        dialogProperties['minWidth'] = 500;
-                    }
 
                     // Add confirmation button to the list of dialog buttons. okButton not set for tokenExchange dialog
                     if (okButton) {
@@ -273,10 +248,13 @@ define([
                     if (buttons.length > 0) {
                         dialogProperties['buttons'] = buttons
                     }
-                    popup.dialog(dialogProperties);
+                    popup.modal(dialogProperties);
+                    popup.modal('openModal');
                 },
                 error: function (jqXHR, status, error) {
-                    alert($.mage.__('Sorry, something went wrong. Please try again later.'));
+                    alert({
+                        content: $.mage.__('Sorry, something went wrong. Please try again later.')
+                    });
                     window.console && console.log(status + ': ' + error + "\nResponse text:\n" + jqXHR.responseText);
                 },
                 complete: function () {
@@ -322,17 +300,20 @@ define([
                         permissions: {
                             text: (isReauthorize == '1') ? $.mage.__('Reauthorize') : $.mage.__('Allow'),
                             'class': 'action-primary',
-                            // This data is going to be used in the next dialog
-                            'data-row-id': integrationId,
-                            'data-row-name': integrationName,
-                            'data-row-dialog': (isTokenExchange == '1') ? 'tokensExchange' : 'tokens',
-                            'data-row-is-reauthorize': isReauthorize,
-                            'data-row-is-token-exchange': isTokenExchange,
+                            attr: {
+                                'data-row-id': integrationId,
+                                'data-row-name': integrationName,
+                                'data-row-dialog': (isTokenExchange == '1') ? 'tokensExchange' : 'tokens',
+                                'data-row-is-reauthorize': isReauthorize,
+                                'data-row-is-token-exchange': isTokenExchange
+                            },
                             click: function () {
                                 // Find the 'Allow' button and clone - it has all necessary data, but is going to be
                                 // destroyed along with the current dialog
-                                var ctx = $(this).parent().find('button.action-primary').clone(true);
-                                $(this).dialog('destroy');
+                                var ctx = this.modal.find('button.action-primary').clone(true);
+
+                                this.closeModal();
+                                this.modal.remove();
                                 // Make popup out of data we saved from 'Allow' button
                                 window.integration.popup.show(ctx);
                             }
diff --git a/app/code/Magento/LayeredNavigation/etc/adminhtml/events.xml b/app/code/Magento/LayeredNavigation/etc/adminhtml/events.xml
index c81d702a2cfceeb883df39771fab92ad5c976b9a..2fb50d995aae07c2832651a177bb7d9f8d37e0e1 100644
--- a/app/code/Magento/LayeredNavigation/etc/adminhtml/events.xml
+++ b/app/code/Magento/LayeredNavigation/etc/adminhtml/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="product_attribute_form_build_front_tab">
-        <observer name="layeredNavigation" instance="Magento\LayeredNavigation\Observer\Edit\Tab\Front\ProductAttributeFormBuildFrontTabObserver" method="execute" />
+        <observer name="layeredNavigation" instance="Magento\LayeredNavigation\Observer\Edit\Tab\Front\ProductAttributeFormBuildFrontTabObserver" />
     </event>
     <event name="product_attribute_grid_build">
-        <observer name="layeredNavigation" instance="Magento\LayeredNavigation\Observer\Grid\ProductAttributeGridBuildObserver" method="execute" />
+        <observer name="layeredNavigation" instance="Magento\LayeredNavigation\Observer\Grid\ProductAttributeGridBuildObserver" />
     </event>
 </config>
\ No newline at end of file
diff --git a/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml b/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml
index 6b7142d703cdfc489fc8229873359a8cdf4b65f7..39cd52f20586c760145b8ef62211037800154c8a 100644
--- a/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml
+++ b/app/code/Magento/LayeredNavigation/view/adminhtml/ui_component/product_attributes_listing.xml
@@ -6,32 +6,15 @@
  */
 -->
 <listing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Ui/etc/ui_configuration.xsd">
-    <container name="listing_top">
-        <filters name="listing_filters">
-            <filterSelect name="is_filterable">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\LayeredNavigation\Model\Attribute\Source\FilterableOptions</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">is_filterable</item>
-                        <item name="label" xsi:type="string" translate="true">Use in Layered Navigation</item>
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                    </item>
-                </argument>
-            </filterSelect>
-        </filters>
-    </container>
+    <container name="listing_top"></container>
     <columns name="product_attributes_columns">
         <column name="is_filterable">
             <argument name="data" xsi:type="array">
                 <item name="options" xsi:type="object">Magento\LayeredNavigation\Model\Attribute\Source\FilterableOptions</item>
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="dataType" xsi:type="string">select</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Use in Layered Navigation</item>
                 </item>
             </argument>
diff --git a/app/code/Magento/MediaStorage/Helper/File/Storage/Database.php b/app/code/Magento/MediaStorage/Helper/File/Storage/Database.php
index 2253d046c81a89cdc7c571fda788d4a0e40ee179..e3fd297ad3d1c73100cbe558598a2a8fba4aa32c 100644
--- a/app/code/Magento/MediaStorage/Helper/File/Storage/Database.php
+++ b/app/code/Magento/MediaStorage/Helper/File/Storage/Database.php
@@ -24,7 +24,7 @@ class Database extends \Magento\Framework\App\Helper\AbstractHelper
 
     /**
      * Storage resource model
-     * @var null|\Magento\MediaStorage\Model\Resource\File\Storage\Database
+     * @var null|\Magento\MediaStorage\Model\ResourceModel\File\Storage\Database
      */
     protected $_resourceModel = null;
 
@@ -121,7 +121,7 @@ class Database extends \Magento\Framework\App\Helper\AbstractHelper
     /**
      * Get storage model
      *
-     * @return \Magento\MediaStorage\Model\Resource\File\Storage\Database
+     * @return \Magento\MediaStorage\Model\ResourceModel\File\Storage\Database
      */
     public function getResourceStorageModel()
     {
diff --git a/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php b/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php
index 8dd702290d52fb08624e480ec299802c624425fc..7bd243fd0ac2fb2f365ce97144d873e67a5485c0 100644
--- a/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php
+++ b/app/code/Magento/MediaStorage/Model/Config/Backend/Storage/Media/Database.php
@@ -19,7 +19,7 @@ class Database extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\MediaStorage\Helper\File\Storage $coreFileStorage
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -28,7 +28,7 @@ class Database extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\MediaStorage\Helper\File\Storage $coreFileStorage,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/MediaStorage/Model/File/Storage.php b/app/code/Magento/MediaStorage/Model/File/Storage.php
index 34e56f70aaaf5400dfd72bcda4385c2128f3e211..87b176f850b3084a2dbfeb1f170513df3bfd56bd 100644
--- a/app/code/Magento/MediaStorage/Model/File/Storage.php
+++ b/app/code/Magento/MediaStorage/Model/File/Storage.php
@@ -98,7 +98,7 @@ class Storage extends AbstractModel
      * @param \Magento\MediaStorage\Model\File\Storage\FileFactory $fileFactory
      * @param \Magento\MediaStorage\Model\File\Storage\DatabaseFactory $databaseFactory
      * @param Filesystem $filesystem
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -113,7 +113,7 @@ class Storage extends AbstractModel
         \Magento\MediaStorage\Model\File\Storage\FileFactory $fileFactory,
         \Magento\MediaStorage\Model\File\Storage\DatabaseFactory $databaseFactory,
         Filesystem $filesystem,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/MediaStorage/Model/File/Storage/Database.php b/app/code/Magento/MediaStorage/Model/File/Storage/Database.php
index d17e651c9828ee2477b3f483578420c9deee022e..a2fa8f11bd4f0810d31999a5634a3a24012cdb05 100644
--- a/app/code/Magento/MediaStorage/Model/File/Storage/Database.php
+++ b/app/code/Magento/MediaStorage/Model/File/Storage/Database.php
@@ -48,7 +48,7 @@ class Database extends \Magento\MediaStorage\Model\File\Storage\Database\Abstrac
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $dateModel
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $configuration
      * @param \Magento\MediaStorage\Helper\File\Media $mediaHelper
-     * @param \Magento\MediaStorage\Model\Resource\File\Storage\Database $resource
+     * @param \Magento\MediaStorage\Model\ResourceModel\File\Storage\Database $resource
      * @param Directory\DatabaseFactory $directoryFactory
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param string $connectionName
@@ -62,7 +62,7 @@ class Database extends \Magento\MediaStorage\Model\File\Storage\Database\Abstrac
         \Magento\Framework\Stdlib\DateTime\DateTime $dateModel,
         \Magento\Framework\App\Config\ScopeConfigInterface $configuration,
         \Magento\MediaStorage\Helper\File\Media $mediaHelper,
-        \Magento\MediaStorage\Model\Resource\File\Storage\Database $resource,
+        \Magento\MediaStorage\Model\ResourceModel\File\Storage\Database $resource,
         \Magento\MediaStorage\Model\File\Storage\Directory\DatabaseFactory $directoryFactory,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         $connectionName = null,
diff --git a/app/code/Magento/MediaStorage/Model/File/Storage/Database/AbstractDatabase.php b/app/code/Magento/MediaStorage/Model/File/Storage/Database/AbstractDatabase.php
index f1a69a220cd1cbd9ca9b2167fe754f65f70b7662..16d3439c9ace7161959beb3a91aca0a32f818b97 100644
--- a/app/code/Magento/MediaStorage/Model/File/Storage/Database/AbstractDatabase.php
+++ b/app/code/Magento/MediaStorage/Model/File/Storage/Database/AbstractDatabase.php
@@ -47,7 +47,7 @@ abstract class AbstractDatabase extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDb
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $dateModel
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $configuration
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param string $connectionName
      * @param array $data
@@ -58,7 +58,7 @@ abstract class AbstractDatabase extends \Magento\Framework\Model\AbstractModel
         \Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDb,
         \Magento\Framework\Stdlib\DateTime\DateTime $dateModel,
         \Magento\Framework\App\Config\ScopeConfigInterface $configuration,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         $connectionName = null,
         array $data = []
@@ -94,7 +94,7 @@ abstract class AbstractDatabase extends \Magento\Framework\Model\AbstractModel
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\Resource\AbstractResource
+     * @return \Magento\Framework\Model\ResourceModel\AbstractResource
      */
     protected function _getResource()
     {
diff --git a/app/code/Magento/MediaStorage/Model/File/Storage/Directory/Database.php b/app/code/Magento/MediaStorage/Model/File/Storage/Directory/Database.php
index 6c294dbab3f3dcf6e990a31ef1c24f88ceb100a3..0e0f46ed3cb513128694c9895440b01fcf7be9b0 100644
--- a/app/code/Magento/MediaStorage/Model/File/Storage/Directory/Database.php
+++ b/app/code/Magento/MediaStorage/Model/File/Storage/Directory/Database.php
@@ -39,7 +39,7 @@ class Database extends \Magento\MediaStorage\Model\File\Storage\Database\Abstrac
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $dateModel
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $configuration
      * @param DatabaseFactory $directoryFactory
-     * @param \Magento\MediaStorage\Model\Resource\File\Storage\Directory\Database $resource
+     * @param \Magento\MediaStorage\Model\ResourceModel\File\Storage\Directory\Database $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param string $connectionName
      * @param array $data
@@ -52,7 +52,7 @@ class Database extends \Magento\MediaStorage\Model\File\Storage\Database\Abstrac
         \Magento\Framework\Stdlib\DateTime\DateTime $dateModel,
         \Magento\Framework\App\Config\ScopeConfigInterface $configuration,
         \Magento\MediaStorage\Model\File\Storage\Directory\DatabaseFactory $directoryFactory,
-        \Magento\MediaStorage\Model\Resource\File\Storage\Directory\Database $resource,
+        \Magento\MediaStorage\Model\ResourceModel\File\Storage\Directory\Database $resource,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         $connectionName = null,
         array $data = []
diff --git a/app/code/Magento/MediaStorage/Model/File/Storage/File.php b/app/code/Magento/MediaStorage/Model/File/Storage/File.php
index 6de1444003c4f0a2b20047dc15a018234942afd4..2d1fd99a56b482ca3c257877f26b842f50bcfb22 100644
--- a/app/code/Magento/MediaStorage/Model/File/Storage/File.php
+++ b/app/code/Magento/MediaStorage/Model/File/Storage/File.php
@@ -59,13 +59,13 @@ class File
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\MediaStorage\Helper\File\Storage\Database $storageHelper
      * @param \Magento\MediaStorage\Helper\File\Media $mediaHelper
-     * @param \Magento\MediaStorage\Model\Resource\File\Storage\File $fileUtility
+     * @param \Magento\MediaStorage\Model\ResourceModel\File\Storage\File $fileUtility
      */
     public function __construct(
         \Psr\Log\LoggerInterface $logger,
         \Magento\MediaStorage\Helper\File\Storage\Database $storageHelper,
         \Magento\MediaStorage\Helper\File\Media $mediaHelper,
-        \Magento\MediaStorage\Model\Resource\File\Storage\File $fileUtility
+        \Magento\MediaStorage\Model\ResourceModel\File\Storage\File $fileUtility
     ) {
         $this->_fileUtility = $fileUtility;
         $this->_storageHelper = $storageHelper;
diff --git a/app/code/Magento/MediaStorage/Model/Resource/File/Storage/AbstractStorage.php b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/AbstractStorage.php
similarity index 93%
rename from app/code/Magento/MediaStorage/Model/Resource/File/Storage/AbstractStorage.php
rename to app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/AbstractStorage.php
index 8fa8d523d94635543bc2e0d7f789a1f7fabf5e60..934279fedb502a56fefa3a67b8c77da99d7ea4f7 100644
--- a/app/code/Magento/MediaStorage/Model/Resource/File/Storage/AbstractStorage.php
+++ b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/AbstractStorage.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\MediaStorage\Model\Resource\File\Storage;
+namespace Magento\MediaStorage\Model\ResourceModel\File\Storage;
 
 /**
  * Class AbstractStorage
  */
-abstract class AbstractStorage extends \Magento\Framework\Model\Resource\Db\AbstractDb
+abstract class AbstractStorage extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * File storage connection name
diff --git a/app/code/Magento/MediaStorage/Model/Resource/File/Storage/Database.php b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Database.php
similarity index 97%
rename from app/code/Magento/MediaStorage/Model/Resource/File/Storage/Database.php
rename to app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Database.php
index d6432a6d4befb73bc162686491084504291ca7e7..429c4c3e9f1dc9910ea15450c79bb1fb987f1338 100644
--- a/app/code/Magento/MediaStorage/Model/Resource/File/Storage/Database.php
+++ b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Database.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\MediaStorage\Model\Resource\File\Storage;
+namespace Magento\MediaStorage\Model\ResourceModel\File\Storage;
 
 /**
  * Class Database
  */
-class Database extends \Magento\MediaStorage\Model\Resource\File\Storage\AbstractStorage
+class Database extends \Magento\MediaStorage\Model\ResourceModel\File\Storage\AbstractStorage
 {
     /**
      * @var \Magento\Framework\DB\Helper
@@ -16,12 +16,12 @@ class Database extends \Magento\MediaStorage\Model\Resource\File\Storage\Abstrac
     protected $_resourceHelper;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\DB\Helper $resourceHelper
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\DB\Helper $resourceHelper,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/MediaStorage/Model/Resource/File/Storage/Directory/Database.php b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Directory/Database.php
similarity index 97%
rename from app/code/Magento/MediaStorage/Model/Resource/File/Storage/Directory/Database.php
rename to app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Directory/Database.php
index cdbd09b5fcc8cce688b668102d02f1060552f908..824ba42be8e28e0003e005bc72934494a6f22eae 100644
--- a/app/code/Magento/MediaStorage/Model/Resource/File/Storage/Directory/Database.php
+++ b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/Directory/Database.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\MediaStorage\Model\Resource\File\Storage\Directory;
+namespace Magento\MediaStorage\Model\ResourceModel\File\Storage\Directory;
 
 /**
  * Class Database
  */
-class Database extends \Magento\MediaStorage\Model\Resource\File\Storage\AbstractStorage
+class Database extends \Magento\MediaStorage\Model\ResourceModel\File\Storage\AbstractStorage
 {
     /**
      * Define table name and id field for resource
diff --git a/app/code/Magento/MediaStorage/Model/Resource/File/Storage/File.php b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/File.php
similarity index 98%
rename from app/code/Magento/MediaStorage/Model/Resource/File/Storage/File.php
rename to app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/File.php
index 2682dd691a46d839efa2e223b46a8653a9402ed1..a45a6f06b88961bf79813608ab68a1d9837118d2 100644
--- a/app/code/Magento/MediaStorage/Model/Resource/File/Storage/File.php
+++ b/app/code/Magento/MediaStorage/Model/ResourceModel/File/Storage/File.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\MediaStorage\Model\Resource\File\Storage;
+namespace Magento\MediaStorage\Model\ResourceModel\File\Storage;
 
 use Magento\Framework\App\Filesystem\DirectoryList;
 
diff --git a/app/code/Magento/MediaStorage/Test/Unit/Helper/File/Storage/DatabaseTest.php b/app/code/Magento/MediaStorage/Test/Unit/Helper/File/Storage/DatabaseTest.php
index 68a11b730f084e4b656e5c97a4519762dc4ff56b..2299f66fcbdb375c43d5363dda363f6d3d29fa76 100644
--- a/app/code/Magento/MediaStorage/Test/Unit/Helper/File/Storage/DatabaseTest.php
+++ b/app/code/Magento/MediaStorage/Test/Unit/Helper/File/Storage/DatabaseTest.php
@@ -107,7 +107,7 @@ class DatabaseTest extends \PHPUnit_Framework_TestCase
         $this->dbStorageFactoryMock->expects($this->once())
             ->method('create')
             ->will($this->returnValue($dbModelMock));
-        $resourceModelMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $resourceModelMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['__wakeup'])
             ->getMockForAbstractClass();
@@ -348,7 +348,7 @@ class DatabaseTest extends \PHPUnit_Framework_TestCase
         $this->dbStorageFactoryMock->expects($this->exactly($callNum))
             ->method('create')
             ->will($this->returnValue($dbModelMock));
-        $resourceModelMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $resourceModelMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['deleteFolder', '__wakeup'])
             ->getMockForAbstractClass();
diff --git a/app/code/Magento/MediaStorage/Test/Unit/Model/File/Storage/Directory/DatabaseTest.php b/app/code/Magento/MediaStorage/Test/Unit/Model/File/Storage/Directory/DatabaseTest.php
index f9f55588c98cbf5b19111277115327e5f861c9ab..dd0d08993ae365a64299f6538d899e33ef35a48a 100644
--- a/app/code/Magento/MediaStorage/Test/Unit/Model/File/Storage/Directory/DatabaseTest.php
+++ b/app/code/Magento/MediaStorage/Test/Unit/Model/File/Storage/Directory/DatabaseTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\MediaStorage\Test\Unit\Model\File\Storage\Directory;
 
-use Magento\MediaStorage\Model\Resource\File\Storage\Directory\Database;
+use Magento\MediaStorage\Model\ResourceModel\File\Storage\Directory\Database;
 
 /**
  * Class DatabaseTest
@@ -103,7 +103,7 @@ class DatabaseTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceDirectoryDatabaseMock = $this->getMock(
-            'Magento\MediaStorage\Model\Resource\File\Storage\Directory\Database',
+            'Magento\MediaStorage\Model\ResourceModel\File\Storage\Directory\Database',
             [],
             [],
             '',
diff --git a/app/code/Magento/MediaStorage/Test/Unit/Model/File/Storage/MediaTest.php b/app/code/Magento/MediaStorage/Test/Unit/Model/File/Storage/MediaTest.php
index efc338df6fd188843769c313d889e7b353788ed6..7cb16a57d412e60213d2e0037962f1af326123fe 100644
--- a/app/code/Magento/MediaStorage/Test/Unit/Model/File/Storage/MediaTest.php
+++ b/app/code/Magento/MediaStorage/Test/Unit/Model/File/Storage/MediaTest.php
@@ -31,7 +31,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
     protected $_mediaHelperMock;
 
     /**
-     * @var \Magento\MediaStorage\Model\Resource\File\Storage\File
+     * @var \Magento\MediaStorage\Model\ResourceModel\File\Storage\File
      */
     protected $_fileUtilityMock;
 
@@ -47,7 +47,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
         );
         $this->_mediaHelperMock = $this->getMock('Magento\MediaStorage\Helper\File\Media', [], [], '', false);
         $this->_fileUtilityMock = $this->getMock(
-            'Magento\MediaStorage\Model\Resource\File\Storage\File',
+            'Magento\MediaStorage\Model\ResourceModel\File\Storage\File',
             [],
             [],
             '',
diff --git a/app/code/Magento/MediaStorage/Test/Unit/Model/Resource/File/Storage/FileTest.php b/app/code/Magento/MediaStorage/Test/Unit/Model/ResourceModel/File/Storage/FileTest.php
similarity index 95%
rename from app/code/Magento/MediaStorage/Test/Unit/Model/Resource/File/Storage/FileTest.php
rename to app/code/Magento/MediaStorage/Test/Unit/Model/ResourceModel/File/Storage/FileTest.php
index e80a368c904ccf9adfdaae55b0c852032d3c09e4..8e87efb610a89acd0bc54e8a3e8b23b861473dbf 100644
--- a/app/code/Magento/MediaStorage/Test/Unit/Model/Resource/File/Storage/FileTest.php
+++ b/app/code/Magento/MediaStorage/Test/Unit/Model/ResourceModel/File/Storage/FileTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\MediaStorage\Test\Unit\Model\Resource\File\Storage;
+namespace Magento\MediaStorage\Test\Unit\Model\ResourceModel\File\Storage;
 
 use Magento\Framework\App\Filesystem\DirectoryList;
 
@@ -13,7 +13,7 @@ use Magento\Framework\App\Filesystem\DirectoryList;
 class FileTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\MediaStorage\Model\Resource\File\Storage\File
+     * @var \Magento\MediaStorage\Model\ResourceModel\File\Storage\File
      */
     protected $storageFile;
 
@@ -53,7 +53,7 @@ class FileTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->storageFile = new \Magento\MediaStorage\Model\Resource\File\Storage\File(
+        $this->storageFile = new \Magento\MediaStorage\Model\ResourceModel\File\Storage\File(
             $this->filesystemMock,
             $this->loggerMock
         );
diff --git a/app/code/Magento/MediaStorage/view/adminhtml/templates/system/config/system/storage/media/synchronize.phtml b/app/code/Magento/MediaStorage/view/adminhtml/templates/system/config/system/storage/media/synchronize.phtml
index 0c9080bc8db1bcbc0e6ff30b7f624d850a8bbf3a..316c5fa5b3d28b73476f0d7e2e8cdbe1a75b41e1 100644
--- a/app/code/Magento/MediaStorage/view/adminhtml/templates/system/config/system/storage/media/synchronize.phtml
+++ b/app/code/Magento/MediaStorage/view/adminhtml/templates/system/config/system/storage/media/synchronize.phtml
@@ -102,7 +102,7 @@ require([
                 var response;
 
                 try {
-                    response = eval('(' + transport.responseText + ')');
+                    response = JSON.parse(transport.responseText);
                     if (response.state == '<?php /* @escapeNotVerified */ echo \Magento\MediaStorage\Model\File\Storage\Flag::STATE_RUNNING ?>'
                         && response.message
                     ) {
diff --git a/app/code/Magento/Msrp/Model/Msrp.php b/app/code/Magento/Msrp/Model/Msrp.php
index 4efbb571b0b8b9672afaa78ec2c9588fabc3ff6e..0a2f939e9bc2116810753f4a5a4e4802bee5f5a3 100644
--- a/app/code/Magento/Msrp/Model/Msrp.php
+++ b/app/code/Magento/Msrp/Model/Msrp.php
@@ -6,7 +6,7 @@
 namespace Magento\Msrp\Model;
 
 use Magento\Catalog\Model\Product;
-use Magento\Catalog\Model\Resource\Eav\AttributeFactory;
+use Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory;
 
 class Msrp
 {
@@ -39,7 +39,7 @@ class Msrp
     public function canApplyToProduct($product)
     {
         if ($this->mapApplyToProductType === null) {
-            /** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+            /** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
             $attribute = $this->eavAttributeFactory->create()->loadByCode(Product::ENTITY, 'msrp');
             $this->mapApplyToProductType = $attribute->getApplyTo();
         }
diff --git a/app/code/Magento/Msrp/Model/Product/Attribute/Source/Type/Price.php b/app/code/Magento/Msrp/Model/Product/Attribute/Source/Type/Price.php
index 056c7026b37cdcf2b9e1ca4a9ae416099c01338c..24c90f43031062c402d5f24c147e4f8267ea2323 100644
--- a/app/code/Magento/Msrp/Model/Product/Attribute/Source/Type/Price.php
+++ b/app/code/Magento/Msrp/Model/Product/Attribute/Source/Type/Price.php
@@ -18,26 +18,26 @@ class Price extends \Magento\Msrp\Model\Product\Attribute\Source\Type
     /**
      * Entity attribute factory
      *
-     * @var \Magento\Eav\Model\Resource\Entity\AttributeFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\AttributeFactory
      */
     protected $entityAttributeFactory;
 
     /**
      * Eav resource helper
      *
-     * @var \Magento\Eav\Model\Resource\Helper
+     * @var \Magento\Eav\Model\ResourceModel\Helper
      */
     protected $eavResourceHelper;
 
     /**
      * Construct
      *
-     * @param \Magento\Eav\Model\Resource\Entity\AttributeFactory $entityAttributeFactory
-     * @param \Magento\Eav\Model\Resource\Helper $eavResourceHelper
+     * @param \Magento\Eav\Model\ResourceModel\Entity\AttributeFactory $entityAttributeFactory
+     * @param \Magento\Eav\Model\ResourceModel\Helper $eavResourceHelper
      */
     public function __construct(
-        \Magento\Eav\Model\Resource\Entity\AttributeFactory $entityAttributeFactory,
-        \Magento\Eav\Model\Resource\Helper $eavResourceHelper
+        \Magento\Eav\Model\ResourceModel\Entity\AttributeFactory $entityAttributeFactory,
+        \Magento\Eav\Model\ResourceModel\Helper $eavResourceHelper
     ) {
         $this->entityAttributeFactory = $entityAttributeFactory;
         $this->eavResourceHelper = $eavResourceHelper;
diff --git a/app/code/Magento/Msrp/Setup/InstallData.php b/app/code/Magento/Msrp/Setup/InstallData.php
index e48cedea34d8dce7ef8dedccabf0976ef24b356d..080637c88e3df7da85327e194280bc846456c310 100644
--- a/app/code/Magento/Msrp/Setup/InstallData.php
+++ b/app/code/Magento/Msrp/Setup/InstallData.php
@@ -60,7 +60,7 @@ class InstallData implements InstallDataInterface
                 'label' => 'Manufacturer\'s Suggested Retail Price',
                 'type' => 'decimal',
                 'input' => 'price',
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                 'visible' => true,
                 'required' => false,
                 'user_defined' => false,
@@ -86,7 +86,7 @@ class InstallData implements InstallDataInterface
                 'input' => 'select',
                 'source' => 'Magento\Msrp\Model\Product\Attribute\Source\Type\Price',
                 'source_model' => 'Magento\Msrp\Model\Product\Attribute\Source\Type\Price',
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                 'visible' => true,
                 'required' => false,
                 'user_defined' => false,
diff --git a/app/code/Magento/Msrp/composer.json b/app/code/Magento/Msrp/composer.json
index afa0ef50405d1511eb08ef64735584d1305ff4c7..0f1e1d343d783d9c4c265a276baeb5a19c56b278 100644
--- a/app/code/Magento/Msrp/composer.json
+++ b/app/code/Magento/Msrp/composer.json
@@ -12,7 +12,8 @@
         "magento/framework": "1.0.0-beta"
     },
     "suggest": {
-        "magento/module-bundle": "1.0.0-beta"
+        "magento/module-bundle": "1.0.0-beta",
+        "magento/module-msrp-sample-data": "Sample Data version:1.0.0-beta"
     },
     "type": "magento2-module",
     "version": "1.0.0-beta",
diff --git a/app/code/Magento/Msrp/etc/frontend/events.xml b/app/code/Magento/Msrp/etc/frontend/events.xml
index 9ced90f1668de8efaa9a33527263eea94f9f3ae4..b233840729f4d0c51efa9f8e01b0ea405cd62cb5 100644
--- a/app/code/Magento/Msrp/etc/frontend/events.xml
+++ b/app/code/Magento/Msrp/etc/frontend/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_quote_collect_totals_after">
-        <observer name="catalog_msrp" instance="Magento\Msrp\Observer\Frontend\Quote\SetCanApplyMsrpObserver" method="execute" />
+        <observer name="catalog_msrp" instance="Magento\Msrp\Observer\Frontend\Quote\SetCanApplyMsrpObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Msrp/etc/webapi_rest/events.xml b/app/code/Magento/Msrp/etc/webapi_rest/events.xml
index 9ced90f1668de8efaa9a33527263eea94f9f3ae4..b233840729f4d0c51efa9f8e01b0ea405cd62cb5 100644
--- a/app/code/Magento/Msrp/etc/webapi_rest/events.xml
+++ b/app/code/Magento/Msrp/etc/webapi_rest/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_quote_collect_totals_after">
-        <observer name="catalog_msrp" instance="Magento\Msrp\Observer\Frontend\Quote\SetCanApplyMsrpObserver" method="execute" />
+        <observer name="catalog_msrp" instance="Magento\Msrp\Observer\Frontend\Quote\SetCanApplyMsrpObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Msrp/etc/webapi_soap/events.xml b/app/code/Magento/Msrp/etc/webapi_soap/events.xml
index 9ced90f1668de8efaa9a33527263eea94f9f3ae4..b233840729f4d0c51efa9f8e01b0ea405cd62cb5 100644
--- a/app/code/Magento/Msrp/etc/webapi_soap/events.xml
+++ b/app/code/Magento/Msrp/etc/webapi_soap/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_quote_collect_totals_after">
-        <observer name="catalog_msrp" instance="Magento\Msrp\Observer\Frontend\Quote\SetCanApplyMsrpObserver" method="execute" />
+        <observer name="catalog_msrp" instance="Magento\Msrp\Observer\Frontend\Quote\SetCanApplyMsrpObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Msrp/view/base/templates/product/price/msrp.phtml b/app/code/Magento/Msrp/view/base/templates/product/price/msrp.phtml
index f05fafab06ea78cb2ca5fb3c31d99f9ebcbbf5af..8ab7cb56520fa0b5dee5061967e92b1ddb53c248 100644
--- a/app/code/Magento/Msrp/view/base/templates/product/price/msrp.phtml
+++ b/app/code/Magento/Msrp/view/base/templates/product/price/msrp.phtml
@@ -66,7 +66,10 @@ if ($product->isSaleable()) {
         if ($block->getRequest()->getFullActionName() === 'catalog_product_view') {
             $data['addToCart']['addToCartButton'] = '#product_addtocart_form [type=submit]';
         } else {
-            $data['addToCart']['cartForm'] = '#product_addtocart_form_from_popup';
+            $data['addToCart']['cartForm'] = sprintf(
+                'form:has(input[type="hidden"][name="product"][value="%s"])',
+                (int) $productId
+            );
         }
     ?>
     <span id="<?php /* @escapeNotVerified */ echo $block->getPriceId() ? $block->getPriceId() : $priceElementId ?>" style="display:none"></span>
diff --git a/app/code/Magento/Msrp/view/base/web/js/msrp.js b/app/code/Magento/Msrp/view/base/web/js/msrp.js
index 8bad507ec0714436cf00d2e37f46f3d11758f192..18ea804d23818b1b8a1a4813a7c6675e0d957629 100644
--- a/app/code/Magento/Msrp/view/base/web/js/msrp.js
+++ b/app/code/Magento/Msrp/view/base/web/js/msrp.js
@@ -6,11 +6,11 @@ define([
     'jquery',
     'underscore',
     'jquery/ui',
-    'mage/dropdown'
+    'mage/dropdown',
+    'mage/template'
 ], function ($, _) {
     'use strict';
 
-    var openDropDown = null;
     $.widget('mage.addToCart', {
         options: {
             showAddToCart: true,
@@ -21,6 +21,9 @@ define([
 
             // Selectors
             cartForm: '.form.map.checkout',
+            msrpLabelId: '#map-popup-msrp',
+            priceLabelId: '#map-popup-price',
+            popUpAttr: '[data-role=msrp-popup-template]',
             cartButtonId: '', // better to be cartButton
             popupId: '', // better to be popup
             realPrice: '',
@@ -31,143 +34,109 @@ define([
             // Text options
             productName: '',
             addToCartUrl: ''
+
         },
 
         openDropDown: null,
+        triggerClass: 'dropdown-active',
+
+        popUpOptions: {
+            appendTo: 'body',
+            dialogContentClass: 'active',
+            closeOnMouseLeave: false,
+            autoPosition: true,
+            closeOnClickOutside: false,
+            'dialogClass': 'popup map-popup-wrapper',
+            position: {
+                my: 'left top',
+                collision: 'fit none',
+                at: 'left bottom',
+                within: 'body'
+            },
+            shadowHinter: 'popup popup-pointer'
+        },
+        popupOpened: false,
 
         /**
          * Creates widget instance
          * @private
          */
         _create: function () {
-            $(this.options.cartButtonId).on('click', this._addToCartSubmit.bind(this));
-
-            $(this.options.popupId).on('click', function (event) {
-                var dialog;
-                event.preventDefault();
-
-                if (this.options.submitUrl) {
-                    location.href = this.options.submitUrl;
-                } else {
-                    $(this.options.popupCartButtonId)
-                        .off('click')
-                        .on('click', this._addToCartSubmit.bind(this));
-                    $('#map-popup-heading-price').text(this.options.productName);
-                    $('#map-popup-price').html($(this.options.realPrice).html().trim());
-                    $('#map-popup-msrp > span.price').html(this.options.msrpPrice);
-
-                    this.element.trigger('reloadPrice');
-
-                    dialog = $('#map-popup-click-for-price');
-                    this._popupDialog(dialog, this.options.popupId);
-
-                    if (this.options.addToCartUrl) {
-                        $(this.options.cartForm).attr('action', this.options.addToCartUrl);
-                    }
-
-                    if (!this.options.showAddToCart) {
-                        $('#product_addtocart_form_from_popup').hide();
-                    }
-
-                    return false;
-                }
-            }.bind(this));
+            var tierOptions;
+
+            this.popupDOM = $(this.options.popUpAttr)[0];
+            this.infoPopupDOM = $('[data-role=msrp-info-template]')[0];
+
+            if (this.options.popupId) {
+                $('body').append($(this.popupDOM).html());
+                this.$popup = $($(this.popupDOM).html());
+
+                $(this.options.popupId).on('click', function (e) {
+                    this.popUpOptions.position.of = $(e.target);
+                    this.$popup.find(this.options.msrpLabelId).html(this.options.msrpPrice);
+                    this.$popup.find(this.options.priceLabelId).html(this.options.realPrice);
+                    this.$popup.dropdownDialog(this.popUpOptions).dropdownDialog('open');
+
+                    this.$popup.find('button').on('click', function () {
+                        if (this.options.addToCartButton) {
+                            $(this.options.addToCartButton).click();
+                        }
+                    }.bind(this));
+                    this._toggle(this.$popup);
+                }.bind(this));
+            }
 
-            $(this.options.helpLinkId).on('click', function () {
-                $('#map-popup-heading-what-this').text(this.options.productName);
-                this._popupDialog($('#map-popup-what-this'), this.options.helpLinkId);
+            if (this.options.helpLinkId) {
+                this.$infoPopup = $(this.infoPopupDOM.innerText).appendTo('body');
+                $(this.options.helpLinkId).on('click', function (e) {
+                    this.popUpOptions.position.of = $(e.target);
+                    this.$infoPopup.dropdownDialog(this.popUpOptions).dropdownDialog('open');
+                    this._toggle(this.$infoPopup);
+                }.bind(this));
+            }
 
-                return false;
-            }.bind(this));
+            if (this.options.attr) {
+                this.popupDOM = $(this.options.popUpAttr)[0];
+                this.$popup = $(this.popupDOM.innerText).appendTo('body');
+                this.popUpOptions.position.of = $(this.options.helpLinkId);
+                $(this.options.attr).on('click', function (e) {
+                    this.popUpOptions.position.of = $(e.target);
+                    tierOptions = JSON.parse($(e.target).attr('data-tier-price'));
+                    this.$popup.find(this.options.msrpLabelId).html(tierOptions.msrp);
+                    this.$popup.find(this.options.priceLabelId).html(tierOptions.price);
+                    this.$popup.find('button').on('click', function (e) {
+                        e.preventDefault();
+                        this.$popup.find('form').attr('action', tierOptions.addToCartUrl).submit();
+                    }.bind(this));
+                    this.$popup.dropdownDialog(this.popUpOptions).dropdownDialog('open');
+                    this._toggle(this.$popup);
+                }.bind(this));
+            }
         },
 
         /**
-         * Handler for dialog popup
-         * @param {jQuery} elementTarget
-         * @param {jQuery} elementTrigger
+         *
+         * @param $elem
          * @private
          */
-        _popupDialog: function (elementTarget, elementTrigger) {
-            var target = $(elementTarget),
-                trigger = $(elementTrigger),
-                counter = 0,
-                triggerClass = 'dropdown-active',
-                options;
-
-            options = {
-                appendTo: 'body',
-                dialogContentClass: 'active',
-                closeOnMouseLeave: false,
-                autoPosition: true,
-                'dialogClass': 'popup map-popup-wrapper',
-                position: {
-                    my: 'left top',
-                    collision: 'fit none',
-                    at: 'left bottom',
-                    within: 'body',
-                    of: trigger
-                },
-                shadowHinter: 'popup popup-pointer'
-            };
-            options = _.extend(options, this.options.dialog);
-
-            if (openDropDown && openDropDown.is(':data(mage-dropdownDialog)')) {
-                openDropDown.dropdownDialog('close');
-            }
-
-            if (this.options.singleOpenDropDown) {
-                this.openDropDown = openDropDown;
-            }
-            openDropDown = target
-                .dropdownDialog(options)
-                .off('dropdowndialogclose')
-                .on('dropdowndialogclose', function () {
-                    if (!counter) {
-                        openDropDown = null;
-                        $(window).off('resize');
-                    }
-                    trigger.removeClass(triggerClass);
-                })
-                .on('dropdowndialogopen', function () {
-                    trigger.addClass(triggerClass);
-                })
-                .dropdownDialog('open');
-
-            $(window)
-                .resize(_.debounce(function () {
-                    if (openDropDown) {
-                        counter--;
-                        openDropDown.dropdownDialog('open');
-                    }
-                }, this.options.dialogDelay))
-                .resize(_.debounce(function () {
-                    if (openDropDown) {
-                        counter++;
-                        openDropDown.dropdownDialog('close');
-                    }
-                }, this.options.dialogDelay, true));
+        _toggle: function ($elem) {
+            $(document).on('mouseup', function (e) {
+                if (!$elem.is(e.target) && $elem.has(e.target).length === 0) {
+                    this.closePopup($elem);
+                }
+            }.bind(this));
+            $(window).on('resize', function () {
+                this.closePopup($elem);
+            }.bind(this))
         },
 
         /**
-         * Handler for addToCart action
-         * @private
+         *
+         * @param $elem
          */
-        _addToCartSubmit: function () {
-            this.element.trigger('addToCart', this.element);
-            if (this.element.data('stop-processing')) {
-                return false;
-            }
-
-            if (this.options.addToCartButton) {
-                $(this.options.addToCartButton).click();
-
-                return;
-            }
-
-            if (this.options.addToCartUrl) {
-                $('.mage-dropdown-dialog > .ui-dialog-content').dropdownDialog('close');
-            }
-            $(this.options.cartForm).submit();
+        closePopup: function ($elem) {
+            $elem.dropdownDialog('close');
+            $(document).off('mouseup');
         }
     });
 
diff --git a/app/code/Magento/Msrp/view/frontend/templates/popup.phtml b/app/code/Magento/Msrp/view/frontend/templates/popup.phtml
index 07230989e180869fe60a765a41d784c7f533f198..521f17e4971b68827f75e2b89e2877d1601ab517 100644
--- a/app/code/Magento/Msrp/view/frontend/templates/popup.phtml
+++ b/app/code/Magento/Msrp/view/frontend/templates/popup.phtml
@@ -11,6 +11,7 @@
 /** @var \Magento\Msrp\Block\Popup $block */
 ?>
 <?php if ($block->isEnabled()): ?>
+    <script data-role="msrp-popup-template" type="text/x-magento-template">
     <div id="map-popup-click-for-price" class="map-popup">
         <div class="popup-header">
             <strong class="title" id="map-popup-heading-price"></strong>
@@ -47,7 +48,8 @@
             </div>
         </div>
     </div>
-
+    </script>
+    <script data-role="msrp-info-template" type="text/x-magento-template">
     <div id="map-popup-what-this" class="map-popup">
         <div class="popup-header">
             <strong class="title" id="map-popup-heading-what-this"></strong>
@@ -58,4 +60,5 @@
             </div>
         </div>
     </div>
+    </script>
 <?php endif; ?>
diff --git a/app/code/Magento/Multishipping/view/frontend/templates/checkout/success.phtml b/app/code/Magento/Multishipping/view/frontend/templates/checkout/success.phtml
index 9366e7852cd74ba8e61ec8f081486a868f5c1479..dc0c669468da9a1aaae43fc83bfa32cc22776044 100644
--- a/app/code/Magento/Multishipping/view/frontend/templates/checkout/success.phtml
+++ b/app/code/Magento/Multishipping/view/frontend/templates/checkout/success.phtml
@@ -8,17 +8,23 @@
 
 ?>
 <div class="multicheckout success">
-    <h2 class="subtitle"><?php /* @escapeNotVerified */ echo __('Thank you for your purchase!') ?></h2>
+    <h2 class="subtitle"><?php /* @noEscape */ echo __('Thank you for your purchase!') ?></h2>
     <p><?php /* @escapeNotVerified */ echo __('Thanks for your order. We\'ll email you order details and tracking information.') ?></p>
     <?php if ($_orderIds = $block->getOrderIds()): ?>
     <p class="order-number">
         <?php $flag = false ?>
-        <span><?php /* @escapeNotVerified */ echo __('Your order number is ') ?></span>
+        <span>
+            <?php if (count($_orderIds) > 1): ?>
+                <?php /* @noEscape */ echo __('Your order numbers are: ') ?>
+            <?php else : ?>
+                <?php /* @noEscape */ echo __('Your order number is: ') ?>
+            <?php endif; ?>
+        </span>
         <?php foreach ($_orderIds as $orderId => $incrementId): ?><?php if ($flag): ?><?php echo ', ' ?><?php endif; ?><?php $flag = true ?><a href="<?php /* @escapeNotVerified */ echo $block->getViewOrderUrl($orderId) ?>"><?php /* @escapeNotVerified */ echo $incrementId ?></a><?php endforeach; ?>
     </p>
     <?php endif; ?>
     <?php echo $block->getChildHtml() ?>
     <div class="actions">
-        <a class="action continue" title="<?php /* @escapeNotVerified */ echo __('Continue Shopping') ?>" href="<?php /* @escapeNotVerified */ echo $block->getContinueUrl() ?>"><span><?php /* @escapeNotVerified */ echo __('Continue Shopping') ?></span></a>
+        <a class="action continue" title="<?php /* @noEscape */ echo __('Continue Shopping') ?>" href="<?php /* @escapeNotVerified */ echo $block->getContinueUrl() ?>"><span><?php /* @noEscape */ echo __('Continue Shopping') ?></span></a>
     </div>
 </div>
diff --git a/app/code/Magento/NewRelicReporting/Model/Config.php b/app/code/Magento/NewRelicReporting/Model/Config.php
index ef53a1ed6756fcee4e2eebfbbb489c0de9c46558..6d6c3157da48d8d0ef40cd60b6402069ba4af53c 100644
--- a/app/code/Magento/NewRelicReporting/Model/Config.php
+++ b/app/code/Magento/NewRelicReporting/Model/Config.php
@@ -62,7 +62,7 @@ class Config
     protected $encryptor;
 
     /**
-     * @var \Magento\Config\Model\Resource\Config
+     * @var \Magento\Config\Model\ResourceModel\Config
      */
     protected $resourceConfig;
 
@@ -71,12 +71,12 @@ class Config
      *
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
-     * @param \Magento\Config\Model\Resource\Config $resourceConfig
+     * @param \Magento\Config\Model\ResourceModel\Config $resourceConfig
      */
     public function __construct(
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
-        \Magento\Config\Model\Resource\Config $resourceConfig
+        \Magento\Config\Model\ResourceModel\Config $resourceConfig
     ) {
         $this->scopeConfig = $scopeConfig;
         $this->encryptor = $encryptor;
diff --git a/app/code/Magento/NewRelicReporting/Model/Counts.php b/app/code/Magento/NewRelicReporting/Model/Counts.php
index a6599a4d31d4adb36410b2b9bf0d5b2893b4ead8..7555cc720a21bbd5268eebadb0ced76bf0c9b364 100644
--- a/app/code/Magento/NewRelicReporting/Model/Counts.php
+++ b/app/code/Magento/NewRelicReporting/Model/Counts.php
@@ -15,6 +15,6 @@ class Counts extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\NewRelicReporting\Model\Resource\Counts');
+        $this->_init('Magento\NewRelicReporting\Model\ResourceModel\Counts');
     }
 }
diff --git a/app/code/Magento/NewRelicReporting/Model/Cron/ReportCounts.php b/app/code/Magento/NewRelicReporting/Model/Cron/ReportCounts.php
index a4e4ec30ec225a706b73b03272d46b0030f7bbf2..6fcbe986e93596bac4232be94f7b9d15adcba185 100644
--- a/app/code/Magento/NewRelicReporting/Model/Cron/ReportCounts.php
+++ b/app/code/Magento/NewRelicReporting/Model/Cron/ReportCounts.php
@@ -42,7 +42,7 @@ class ReportCounts
     protected $countsFactory;
 
     /**
-     * @var \Magento\NewRelicReporting\Model\Resource\Counts\CollectionFactory
+     * @var \Magento\NewRelicReporting\Model\ResourceModel\Counts\CollectionFactory
      */
     protected $countsCollectionFactory;
 
@@ -59,7 +59,7 @@ class ReportCounts
      * @param ConfigurableProductManagementInterface $configurableManagement
      * @param CategoryManagementInterface $categoryManagement
      * @param \Magento\NewRelicReporting\Model\CountsFactory $countsFactory
-     * @param \Magento\NewRelicReporting\Model\Resource\Counts\CollectionFactory $countsCollectionFactory
+     * @param \Magento\NewRelicReporting\Model\ResourceModel\Counts\CollectionFactory $countsCollectionFactory
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      */
     public function __construct(
@@ -68,7 +68,7 @@ class ReportCounts
         ConfigurableProductManagementInterface $configurableManagement,
         CategoryManagementInterface $categoryManagement,
         \Magento\NewRelicReporting\Model\CountsFactory $countsFactory,
-        \Magento\NewRelicReporting\Model\Resource\Counts\CollectionFactory $countsCollectionFactory,
+        \Magento\NewRelicReporting\Model\ResourceModel\Counts\CollectionFactory $countsCollectionFactory,
         \Magento\Framework\Stdlib\DateTime $dateTime
     ) {
         $this->config = $config;
@@ -90,7 +90,7 @@ class ReportCounts
      */
     protected function updateCount($count, \Magento\NewRelicReporting\Model\Counts $model, $type)
     {
-        /** @var \Magento\NewRelicReporting\Model\Resource\Counts\Collection $collection */
+        /** @var \Magento\NewRelicReporting\Model\ResourceModel\Counts\Collection $collection */
         $collection = $this->countsCollectionFactory->create()
             ->addFieldToFilter(
                 'type',
diff --git a/app/code/Magento/NewRelicReporting/Model/Module.php b/app/code/Magento/NewRelicReporting/Model/Module.php
index 727ad55e9ccfeb666b4f2c1fef5339e5ae91fd82..a3666ec9e40f05ebc96b18144703d4d49acfd05d 100644
--- a/app/code/Magento/NewRelicReporting/Model/Module.php
+++ b/app/code/Magento/NewRelicReporting/Model/Module.php
@@ -15,6 +15,6 @@ class Module extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\NewRelicReporting\Model\Resource\Module');
+        $this->_init('Magento\NewRelicReporting\Model\ResourceModel\Module');
     }
 }
diff --git a/app/code/Magento/NewRelicReporting/Model/Module/Collect.php b/app/code/Magento/NewRelicReporting/Model/Module/Collect.php
index fd7f4d61c6d309df591c9b2cd57766e22b4c637c..e5e6aa341634ddcc49476d7c82bf7bd518d8aae6 100644
--- a/app/code/Magento/NewRelicReporting/Model/Module/Collect.php
+++ b/app/code/Magento/NewRelicReporting/Model/Module/Collect.php
@@ -39,7 +39,7 @@ class Collect
     protected $moduleFactory;
 
     /**
-     * @var \Magento\NewRelicReporting\Model\Resource\Module\CollectionFactory
+     * @var \Magento\NewRelicReporting\Model\ResourceModel\Module\CollectionFactory
      */
     protected $moduleCollectionFactory;
 
@@ -51,7 +51,7 @@ class Collect
      * @param Manager $moduleManager
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\NewRelicReporting\Model\ModuleFactory $moduleFactory
-     * @param \Magento\NewRelicReporting\Model\Resource\Module\CollectionFactory $moduleCollectionFactory
+     * @param \Magento\NewRelicReporting\Model\ResourceModel\Module\CollectionFactory $moduleCollectionFactory
      */
     public function __construct(
         ModuleListInterface $moduleList,
@@ -59,7 +59,7 @@ class Collect
         Manager $moduleManager,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\NewRelicReporting\Model\ModuleFactory $moduleFactory,
-        \Magento\NewRelicReporting\Model\Resource\Module\CollectionFactory $moduleCollectionFactory
+        \Magento\NewRelicReporting\Model\ResourceModel\Module\CollectionFactory $moduleCollectionFactory
     ) {
         $this->moduleList = $moduleList;
         $this->fullModuleList = $fullModuleList;
diff --git a/app/code/Magento/NewRelicReporting/Model/Orders.php b/app/code/Magento/NewRelicReporting/Model/Orders.php
index b7bda47cf54c595a53c934469b68a58514357f2d..94021a4a2cc76a51322a27ee50d3be3f07ddc76d 100644
--- a/app/code/Magento/NewRelicReporting/Model/Orders.php
+++ b/app/code/Magento/NewRelicReporting/Model/Orders.php
@@ -15,6 +15,6 @@ class Orders extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\NewRelicReporting\Model\Resource\Orders');
+        $this->_init('Magento\NewRelicReporting\Model\ResourceModel\Orders');
     }
 }
diff --git a/app/code/Magento/NewRelicReporting/Model/Resource/Counts.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts.php
similarity index 69%
rename from app/code/Magento/NewRelicReporting/Model/Resource/Counts.php
rename to app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts.php
index 920a4db1dc88e788426e140f77aad65bc1385f1d..bbd351eee8af3a3508d7e376b77a234fab322fb7 100644
--- a/app/code/Magento/NewRelicReporting/Model/Resource/Counts.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\NewRelicReporting\Model\Resource;
+namespace Magento\NewRelicReporting\Model\ResourceModel;
 
-class Counts extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Counts extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize users resource model
diff --git a/app/code/Magento/NewRelicReporting/Model/Resource/Counts/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts/Collection.php
similarity index 58%
rename from app/code/Magento/NewRelicReporting/Model/Resource/Counts/Collection.php
rename to app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts/Collection.php
index 65f9d48d6a7d012d55e7e688d35e373ba4764392..da4e4bdbabee76091a646c90091228bbba1a186a 100644
--- a/app/code/Magento/NewRelicReporting/Model/Resource/Counts/Collection.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Counts/Collection.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\NewRelicReporting\Model\Resource\Counts;
+namespace Magento\NewRelicReporting\Model\ResourceModel\Counts;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize counts resource collection
@@ -15,6 +15,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\NewRelicReporting\Model\Counts', 'Magento\NewRelicReporting\Model\Resource\Counts');
+        $this->_init('Magento\NewRelicReporting\Model\Counts', 'Magento\NewRelicReporting\Model\ResourceModel\Counts');
     }
 }
diff --git a/app/code/Magento/NewRelicReporting/Model/Resource/Module.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module.php
similarity index 70%
rename from app/code/Magento/NewRelicReporting/Model/Resource/Module.php
rename to app/code/Magento/NewRelicReporting/Model/ResourceModel/Module.php
index af9f95a2fe1d550fb1e36aec1c523d912ece07cd..43bd47407d1ff9200e7b815c0bd468c077b824fc 100644
--- a/app/code/Magento/NewRelicReporting/Model/Resource/Module.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\NewRelicReporting\Model\Resource;
+namespace Magento\NewRelicReporting\Model\ResourceModel;
 
-class Module extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Module extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize module status resource model
diff --git a/app/code/Magento/NewRelicReporting/Model/Resource/Module/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module/Collection.php
similarity index 59%
rename from app/code/Magento/NewRelicReporting/Model/Resource/Module/Collection.php
rename to app/code/Magento/NewRelicReporting/Model/ResourceModel/Module/Collection.php
index 7611c55c171195694da7a020e38c8e08f14dcb8b..28c4119736bd7b1a88649b9b6da4a00ac3145c3c 100644
--- a/app/code/Magento/NewRelicReporting/Model/Resource/Module/Collection.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Module/Collection.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\NewRelicReporting\Model\Resource\Module;
+namespace Magento\NewRelicReporting\Model\ResourceModel\Module;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize module status resource model
@@ -15,6 +15,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\NewRelicReporting\Model\Module', 'Magento\NewRelicReporting\Model\Resource\Module');
+        $this->_init('Magento\NewRelicReporting\Model\Module', 'Magento\NewRelicReporting\Model\ResourceModel\Module');
     }
 }
diff --git a/app/code/Magento/NewRelicReporting/Model/Resource/Orders.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders.php
similarity index 69%
rename from app/code/Magento/NewRelicReporting/Model/Resource/Orders.php
rename to app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders.php
index 8ece835396d90397bc63e85d1244713f29565d7a..d3ba20c22ba32fe894f8f3ed33039e9325ac74e8 100644
--- a/app/code/Magento/NewRelicReporting/Model/Resource/Orders.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\NewRelicReporting\Model\Resource;
+namespace Magento\NewRelicReporting\Model\ResourceModel;
 
-class Orders extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Orders extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize orders resource model
diff --git a/app/code/Magento/NewRelicReporting/Model/Resource/Orders/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders/Collection.php
similarity index 58%
rename from app/code/Magento/NewRelicReporting/Model/Resource/Orders/Collection.php
rename to app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders/Collection.php
index 84c5707e8cbe3c09480ea778fd6e73c1482662dd..0f49fe88bce7eadd83c8945538ab6ec21df53cdf 100644
--- a/app/code/Magento/NewRelicReporting/Model/Resource/Orders/Collection.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Orders/Collection.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\NewRelicReporting\Model\Resource\Orders;
+namespace Magento\NewRelicReporting\Model\ResourceModel\Orders;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize orders resource collection
@@ -15,6 +15,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\NewRelicReporting\Model\Orders', 'Magento\NewRelicReporting\Model\Resource\Orders');
+        $this->_init('Magento\NewRelicReporting\Model\Orders', 'Magento\NewRelicReporting\Model\ResourceModel\Orders');
     }
 }
diff --git a/app/code/Magento/NewRelicReporting/Model/Resource/System.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/System.php
similarity index 70%
rename from app/code/Magento/NewRelicReporting/Model/Resource/System.php
rename to app/code/Magento/NewRelicReporting/Model/ResourceModel/System.php
index f803f46fcdc854bbaf44810662b91c2c02019192..b5e4edc67b9d56fcc7804c3e5b980b7f555c3268 100644
--- a/app/code/Magento/NewRelicReporting/Model/Resource/System.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/System.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\NewRelicReporting\Model\Resource;
+namespace Magento\NewRelicReporting\Model\ResourceModel;
 
-class System extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class System extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize system updates resource model
diff --git a/app/code/Magento/NewRelicReporting/Model/Resource/System/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/System/Collection.php
similarity index 59%
rename from app/code/Magento/NewRelicReporting/Model/Resource/System/Collection.php
rename to app/code/Magento/NewRelicReporting/Model/ResourceModel/System/Collection.php
index a329edb838091af80da5ded1484c80446bc82535..021b2f3d4a69ea424e2af29508ea5ea6fe87699f 100644
--- a/app/code/Magento/NewRelicReporting/Model/Resource/System/Collection.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/System/Collection.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\NewRelicReporting\Model\Resource\System;
+namespace Magento\NewRelicReporting\Model\ResourceModel\System;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize system updates resource collection
@@ -15,6 +15,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\NewRelicReporting\Model\System', 'Magento\NewRelicReporting\Model\Resource\System');
+        $this->_init('Magento\NewRelicReporting\Model\System', 'Magento\NewRelicReporting\Model\ResourceModel\System');
     }
 }
diff --git a/app/code/Magento/NewRelicReporting/Model/Resource/Users.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users.php
similarity index 69%
rename from app/code/Magento/NewRelicReporting/Model/Resource/Users.php
rename to app/code/Magento/NewRelicReporting/Model/ResourceModel/Users.php
index 6472e1c478044eb7a7a360644c07d290b2b9d4bd..40b062535bf729d92b697df6096b9f8a0e5f1f78 100644
--- a/app/code/Magento/NewRelicReporting/Model/Resource/Users.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\NewRelicReporting\Model\Resource;
+namespace Magento\NewRelicReporting\Model\ResourceModel;
 
-class Users extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Users extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize users resource model
diff --git a/app/code/Magento/NewRelicReporting/Model/Resource/Users/Collection.php b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users/Collection.php
similarity index 59%
rename from app/code/Magento/NewRelicReporting/Model/Resource/Users/Collection.php
rename to app/code/Magento/NewRelicReporting/Model/ResourceModel/Users/Collection.php
index efb7b2178d74e97566cf82a27b21e0f31264dfae..6f6d18c6da839ce9ca356b92c76b6f57359f466d 100644
--- a/app/code/Magento/NewRelicReporting/Model/Resource/Users/Collection.php
+++ b/app/code/Magento/NewRelicReporting/Model/ResourceModel/Users/Collection.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\NewRelicReporting\Model\Resource\Users;
+namespace Magento\NewRelicReporting\Model\ResourceModel\Users;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize users resource collection
@@ -15,6 +15,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\NewRelicReporting\Model\Users', 'Magento\NewRelicReporting\Model\Resource\Users');
+        $this->_init('Magento\NewRelicReporting\Model\Users', 'Magento\NewRelicReporting\Model\ResourceModel\Users');
     }
 }
diff --git a/app/code/Magento/NewRelicReporting/Model/System.php b/app/code/Magento/NewRelicReporting/Model/System.php
index 65264441e60328c2813ec525eae66e202ce2b4ae..dea770a80542d30d2a2bf9b4e802d2b09430f1fc 100644
--- a/app/code/Magento/NewRelicReporting/Model/System.php
+++ b/app/code/Magento/NewRelicReporting/Model/System.php
@@ -15,6 +15,6 @@ class System extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\NewRelicReporting\Model\Resource\System');
+        $this->_init('Magento\NewRelicReporting\Model\ResourceModel\System');
     }
 }
diff --git a/app/code/Magento/NewRelicReporting/Model/Users.php b/app/code/Magento/NewRelicReporting/Model/Users.php
index ef4b2216eff8de76a0c94c1c23a6a00638a8b863..e57dc2d3c30a1d6f887b8909553526db63410feb 100644
--- a/app/code/Magento/NewRelicReporting/Model/Users.php
+++ b/app/code/Magento/NewRelicReporting/Model/Users.php
@@ -15,6 +15,6 @@ class Users extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\NewRelicReporting\Model\Resource\Users');
+        $this->_init('Magento\NewRelicReporting\Model\ResourceModel\Users');
     }
 }
diff --git a/app/code/Magento/NewRelicReporting/Test/Unit/Model/Cron/ReportCountsTest.php b/app/code/Magento/NewRelicReporting/Test/Unit/Model/Cron/ReportCountsTest.php
index 600d886b4be1e72ca00968772d63e4cf894468c5..7d42adbd26337102021866fe0df82b27dbd9cc45 100644
--- a/app/code/Magento/NewRelicReporting/Test/Unit/Model/Cron/ReportCountsTest.php
+++ b/app/code/Magento/NewRelicReporting/Test/Unit/Model/Cron/ReportCountsTest.php
@@ -51,12 +51,12 @@ class ReportCountsTest extends \PHPUnit_Framework_TestCase
     protected $countsModel;
 
     /**
-     * @var \Magento\NewRelicReporting\Model\Resource\Counts\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $countsCollectionFactory;
 
     /**
-     * @var \Magento\NewRelicReporting\Model\Resource\Counts\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\NewRelicReporting\Model\ResourceModel\Counts\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $countsCollection;
 
@@ -94,11 +94,12 @@ class ReportCountsTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $this->countsCollectionFactory = $this
-            ->getMockBuilder('Magento\NewRelicReporting\Model\Resource\Counts\CollectionFactory')
+            ->getMockBuilder('Magento\NewRelicReporting\Model\ResourceModel\Counts\CollectionFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $this->countsCollection = $this->getMockBuilder('Magento\NewRelicReporting\Model\Resource\Counts\Collection')
+        $collectionClassName = 'Magento\NewRelicReporting\Model\ResourceModel\Counts\Collection';
+        $this->countsCollection = $this->getMockBuilder($collectionClassName)
             ->disableOriginalConstructor()
             ->setMethods(['addFieldToFilter', 'addOrder', 'setPageSize', 'getFirstItem'])
             ->getMock();
diff --git a/app/code/Magento/NewRelicReporting/Test/Unit/Model/Module/CollectTest.php b/app/code/Magento/NewRelicReporting/Test/Unit/Model/Module/CollectTest.php
index fced09fc5741668c4f261785541ab18e1c105d76..14440b0499dc4fa0779c7f9e7a4d3f7000e544c0 100644
--- a/app/code/Magento/NewRelicReporting/Test/Unit/Model/Module/CollectTest.php
+++ b/app/code/Magento/NewRelicReporting/Test/Unit/Model/Module/CollectTest.php
@@ -47,7 +47,7 @@ class CollectTest extends \PHPUnit_Framework_TestCase
     protected $moduleFactoryMock;
 
     /**
-     * @var \Magento\NewRelicReporting\Model\Resource\Module\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $moduleCollectionFactoryMock;
 
@@ -82,7 +82,7 @@ class CollectTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->moduleCollectionFactoryMock = $this->getMock(
-            'Magento\NewRelicReporting\Model\Resource\Module\CollectionFactory',
+            'Magento\NewRelicReporting\Model\ResourceModel\Module\CollectionFactory',
             ['create'],
             [],
             '',
@@ -106,7 +106,7 @@ class CollectTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetModuleDataWithoutRefresh()
     {
-        $moduleCollectionMock = $this->getMockBuilder('Magento\NewRelicReporting\Model\Resource\Module\Collection')
+        $moduleCollectionMock = $this->getMockBuilder('Magento\NewRelicReporting\Model\ResourceModel\Module\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $itemMock = $this->getMock('Magento\NewRelicReporting\Model\Module', [], [], '', false);
@@ -194,7 +194,7 @@ class CollectTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetModuleDataRefresh($data)
     {
-        $moduleCollectionMock = $this->getMockBuilder('Magento\NewRelicReporting\Model\Resource\Module\Collection')
+        $moduleCollectionMock = $this->getMockBuilder('Magento\NewRelicReporting\Model\ResourceModel\Module\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \Magento\NewRelicReporting\Model\Module|\PHPUnit_Framework_MockObject_MockObject $itemMock */
@@ -289,7 +289,7 @@ class CollectTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetModuleDataRefreshOrStatement($data)
     {
-        $moduleCollectionMock = $this->getMockBuilder('Magento\NewRelicReporting\Model\Resource\Module\Collection')
+        $moduleCollectionMock = $this->getMockBuilder('Magento\NewRelicReporting\Model\ResourceModel\Module\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         /** @var \Magento\NewRelicReporting\Model\Module|\PHPUnit_Framework_MockObject_MockObject $itemMock */
diff --git a/app/code/Magento/NewRelicReporting/etc/adminhtml/events.xml b/app/code/Magento/NewRelicReporting/etc/adminhtml/events.xml
index 81625db511373753077f0ebc21b7dd2cf9a10313..19d0296196fde02d033717f9aec9adc33172e532 100644
--- a/app/code/Magento/NewRelicReporting/etc/adminhtml/events.xml
+++ b/app/code/Magento/NewRelicReporting/etc/adminhtml/events.xml
@@ -7,22 +7,22 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="adminhtml_cache_flush_system">
-        <observer name="newrelicreporting_observer_report_system_cache_flush" instance="Magento\NewRelicReporting\Model\Observer\ReportSystemCacheFlush" method="execute" />
-        <observer name="newrelicreporting_newrelic_report_system_cache_flush" instance="Magento\NewRelicReporting\Model\Observer\ReportSystemCacheFlushToNewRelic" method="execute" />
+        <observer name="newrelicreporting_observer_report_system_cache_flush" instance="Magento\NewRelicReporting\Model\Observer\ReportSystemCacheFlush" />
+        <observer name="newrelicreporting_newrelic_report_system_cache_flush" instance="Magento\NewRelicReporting\Model\Observer\ReportSystemCacheFlushToNewRelic" />
     </event>
     <event name="controller_action_predispatch_adminhtml">
-        <observer name="newrelicreporting_observer_report_concurrent_admins" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentAdmins" method="execute" />
-        <observer name="newrelicreporting_newrelic_report_oncurrent_admins" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentAdminsToNewRelic" method="execute" />
+        <observer name="newrelicreporting_observer_report_concurrent_admins" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentAdmins" />
+        <observer name="newrelicreporting_newrelic_report_oncurrent_admins" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentAdminsToNewRelic" />
     </event>
     <event name="catalog_product_save_before">
-        <observer name="newrelicreporting_observer_report_product_save" instance="Magento\NewRelicReporting\Model\Observer\ReportProductSaved" method="execute" />
-        <observer name="newrelicreporting_newrelic_report_product_save" instance="Magento\NewRelicReporting\Model\Observer\ReportProductSavedToNewRelic" method="execute" />
+        <observer name="newrelicreporting_observer_report_product_save" instance="Magento\NewRelicReporting\Model\Observer\ReportProductSaved" />
+        <observer name="newrelicreporting_newrelic_report_product_save" instance="Magento\NewRelicReporting\Model\Observer\ReportProductSavedToNewRelic" />
     </event>
     <event name="catalog_product_delete_after_done">
-        <observer name="newrelicreporting_observer_report_product_delete" instance="Magento\NewRelicReporting\Model\Observer\ReportProductDeleted" method="execute" />
-        <observer name="newrelicreporting_newrelic_report_product_delete" instance="Magento\NewRelicReporting\Model\Observer\ReportProductDeletedToNewRelic" method="execute" />
+        <observer name="newrelicreporting_observer_report_product_delete" instance="Magento\NewRelicReporting\Model\Observer\ReportProductDeleted" />
+        <observer name="newrelicreporting_newrelic_report_product_delete" instance="Magento\NewRelicReporting\Model\Observer\ReportProductDeletedToNewRelic" />
     </event>
     <event name="admin_system_config_changed_section_newrelicreporting">
-        <observer name="newrelicreporting_observer_check_config" instance="Magento\NewRelicReporting\Model\Observer\CheckConfig" method="execute"/>
+        <observer name="newrelicreporting_observer_check_config" instance="Magento\NewRelicReporting\Model\Observer\CheckConfig"/>
     </event>
 </config>
diff --git a/app/code/Magento/NewRelicReporting/etc/events.xml b/app/code/Magento/NewRelicReporting/etc/events.xml
index 11201397d87699eeef82e055dc3c2d3dc268dcaf..79a3a3296d02aaecbd9534d63f080e8b67e2468c 100644
--- a/app/code/Magento/NewRelicReporting/etc/events.xml
+++ b/app/code/Magento/NewRelicReporting/etc/events.xml
@@ -7,7 +7,7 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_order_place_after">
-        <observer name="newrelicreporting_observer_report_sales_order_place" instance="Magento\NewRelicReporting\Model\Observer\ReportOrderPlaced" method="execute" />
-        <observer name="newrelicreporting_newrelic_report_sales_order_place" instance="Magento\NewRelicReporting\Model\Observer\ReportOrderPlacedToNewRelic" method="execute" />
+        <observer name="newrelicreporting_observer_report_sales_order_place" instance="Magento\NewRelicReporting\Model\Observer\ReportOrderPlaced" />
+        <observer name="newrelicreporting_newrelic_report_sales_order_place" instance="Magento\NewRelicReporting\Model\Observer\ReportOrderPlacedToNewRelic" />
     </event>
 </config>
diff --git a/app/code/Magento/NewRelicReporting/etc/frontend/events.xml b/app/code/Magento/NewRelicReporting/etc/frontend/events.xml
index 471fa6c63ce619adef297feaf4f7da3aaf39f3ea..678ab7d18b57b476dbefdf541c79aa610ee02f3d 100644
--- a/app/code/Magento/NewRelicReporting/etc/frontend/events.xml
+++ b/app/code/Magento/NewRelicReporting/etc/frontend/events.xml
@@ -7,7 +7,7 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="controller_action_predispatch">
-        <observer name="newrelicreporting_observer_report_concurrent_users" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentUsers" method="execute" />
-        <observer name="newrelicreporting_newrelic_report_concurrent_users" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentUsersToNewRelic" method="execute" />
+        <observer name="newrelicreporting_observer_report_concurrent_users" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentUsers" />
+        <observer name="newrelicreporting_newrelic_report_concurrent_users" instance="Magento\NewRelicReporting\Model\Observer\ReportConcurrentUsersToNewRelic" />
     </event>
 </config>
diff --git a/app/code/Magento/Newsletter/Block/Adminhtml/Problem.php b/app/code/Magento/Newsletter/Block/Adminhtml/Problem.php
index c3ae83df04bcea5d47684129144a8670a51af796..6abbadbca566f31647fbccc70ff60a13d06122a9 100644
--- a/app/code/Magento/Newsletter/Block/Adminhtml/Problem.php
+++ b/app/code/Magento/Newsletter/Block/Adminhtml/Problem.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Newsletter\Block\Adminhtml;
 
-use Magento\Newsletter\Model\Resource\Problem\Collection;
+use Magento\Newsletter\Model\ResourceModel\Problem\Collection;
 
 /**
  * Newsletter problem block template.
@@ -20,7 +20,7 @@ class Problem extends \Magento\Backend\Block\Template
     protected $_template = 'problem/list.phtml';
 
     /**
-     * @var \Magento\Newsletter\Model\Resource\Problem\Collection
+     * @var \Magento\Newsletter\Model\ResourceModel\Problem\Collection
      */
     protected $_problemCollection;
 
diff --git a/app/code/Magento/Newsletter/Block/Adminhtml/Subscriber.php b/app/code/Magento/Newsletter/Block/Adminhtml/Subscriber.php
index e8fafc32d382fda001bf189de8f092b144a3bd22..44e1201157c95dfb201039a6c7cff3e045d3c7d5 100644
--- a/app/code/Magento/Newsletter/Block/Adminhtml/Subscriber.php
+++ b/app/code/Magento/Newsletter/Block/Adminhtml/Subscriber.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Newsletter\Block\Adminhtml;
 
-use Magento\Newsletter\Model\Resource\Queue\Collection;
+use Magento\Newsletter\Model\ResourceModel\Queue\Collection;
 
 class Subscriber extends \Magento\Backend\Block\Template
 {
@@ -28,18 +28,18 @@ class Subscriber extends \Magento\Backend\Block\Template
     protected $_template = 'subscriber/list.phtml';
 
     /**
-     * @var \Magento\Newsletter\Model\Resource\Queue\CollectionFactory
+     * @var \Magento\Newsletter\Model\ResourceModel\Queue\CollectionFactory
      */
     protected $_collectionFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Newsletter\Model\Resource\Queue\CollectionFactory $collectionFactory
+     * @param \Magento\Newsletter\Model\ResourceModel\Queue\CollectionFactory $collectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Newsletter\Model\Resource\Queue\CollectionFactory $collectionFactory,
+        \Magento\Newsletter\Model\ResourceModel\Queue\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_collectionFactory = $collectionFactory;
@@ -64,7 +64,7 @@ class Subscriber extends \Magento\Backend\Block\Template
     public function getQueueCollection()
     {
         if ($this->_queueCollection === null) {
-            /** @var $this->_queueCollection \Magento\Newsletter\Model\Resource\Queue\Collection */
+            /** @var $this->_queueCollection \Magento\Newsletter\Model\ResourceModel\Queue\Collection */
             $this->_queueCollection = $this
                 ->_collectionFactory
                 ->create()
diff --git a/app/code/Magento/Newsletter/Block/Adminhtml/Subscriber/Grid/Filter/Website.php b/app/code/Magento/Newsletter/Block/Adminhtml/Subscriber/Grid/Filter/Website.php
index f3737682c7f5a5ff01e1cf8ad00cc4a903d5bc1a..4c97b12c047f1466e7c160c4fc49f2a4a4c9d590 100644
--- a/app/code/Magento/Newsletter/Block/Adminhtml/Subscriber/Grid/Filter/Website.php
+++ b/app/code/Magento/Newsletter/Block/Adminhtml/Subscriber/Grid/Filter/Website.php
@@ -9,7 +9,7 @@
  */
 namespace Magento\Newsletter\Block\Adminhtml\Subscriber\Grid\Filter;
 
-use Magento\Store\Model\Resource\Website\Collection;
+use Magento\Store\Model\ResourceModel\Website\Collection;
 
 class Website extends \Magento\Backend\Block\Widget\Grid\Column\Filter\Select
 {
@@ -33,14 +33,14 @@ class Website extends \Magento\Backend\Block\Widget\Grid\Column\Filter\Select
     protected $_storeManager;
 
     /**
-     * @var \Magento\Store\Model\Resource\Website\CollectionFactory
+     * @var \Magento\Store\Model\ResourceModel\Website\CollectionFactory
      */
     protected $_websitesFactory;
 
     /**
      * @param \Magento\Backend\Block\Context $context
      * @param \Magento\Framework\DB\Helper $resourceHelper
-     * @param \Magento\Store\Model\Resource\Website\CollectionFactory $websitesFactory
+     * @param \Magento\Store\Model\ResourceModel\Website\CollectionFactory $websitesFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Registry $registry
      * @param array $data
@@ -48,7 +48,7 @@ class Website extends \Magento\Backend\Block\Widget\Grid\Column\Filter\Select
     public function __construct(
         \Magento\Backend\Block\Context $context,
         \Magento\Framework\DB\Helper $resourceHelper,
-        \Magento\Store\Model\Resource\Website\CollectionFactory $websitesFactory,
+        \Magento\Store\Model\ResourceModel\Website\CollectionFactory $websitesFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Registry $registry,
         array $data = []
diff --git a/app/code/Magento/Newsletter/Block/Adminhtml/Template/Grid.php b/app/code/Magento/Newsletter/Block/Adminhtml/Template/Grid.php
index 6454ac2628491546f9dacb65aca6598237e361d6..02cfcd382ef0ea51827573578310e2a967a79f3a 100644
--- a/app/code/Magento/Newsletter/Block/Adminhtml/Template/Grid.php
+++ b/app/code/Magento/Newsletter/Block/Adminhtml/Template/Grid.php
@@ -17,20 +17,20 @@ use Magento\Framework\App\TemplateTypesInterface;
 class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
 {
     /**
-     * @var \Magento\Newsletter\Model\Resource\Template\Collection
+     * @var \Magento\Newsletter\Model\ResourceModel\Template\Collection
      */
     protected $_templateCollection;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Newsletter\Model\Resource\Template\Collection $templateCollection
+     * @param \Magento\Newsletter\Model\ResourceModel\Template\Collection $templateCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Newsletter\Model\Resource\Template\Collection $templateCollection,
+        \Magento\Newsletter\Model\ResourceModel\Template\Collection $templateCollection,
         array $data = []
     ) {
         $this->_templateCollection = $templateCollection;
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Problem/Grid.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Problem/Grid.php
index fb9c5caa575e8bc307f5d253997c66d3091ed92b..cf2ae4964f7678c1dc864cbab2bbaf8dff9cb9f1 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Problem/Grid.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Problem/Grid.php
@@ -18,7 +18,8 @@ class Grid extends \Magento\Newsletter\Controller\Adminhtml\Problem
         if ($this->getRequest()->getParam('_unsubscribe')) {
             $problems = (array)$this->getRequest()->getParam('problem', []);
             if (count($problems) > 0) {
-                $collection = $this->_objectManager->create('Magento\Newsletter\Model\Resource\Problem\Collection');
+                $collection =
+                    $this->_objectManager->create('Magento\Newsletter\Model\ResourceModel\Problem\Collection');
                 $collection->addSubscriberInfo()->addFieldToFilter(
                     $collection->getResource()->getIdFieldName(),
                     ['in' => $problems]
@@ -33,7 +34,8 @@ class Grid extends \Magento\Newsletter\Controller\Adminhtml\Problem
         if ($this->getRequest()->getParam('_delete')) {
             $problems = (array)$this->getRequest()->getParam('problem', []);
             if (count($problems) > 0) {
-                $collection = $this->_objectManager->create('Magento\Newsletter\Model\Resource\Problem\Collection');
+                $collection =
+                    $this->_objectManager->create('Magento\Newsletter\Model\ResourceModel\Problem\Collection');
                 $collection->addFieldToFilter(
                     $collection->getResource()->getIdFieldName(),
                     ['in' => $problems]
diff --git a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Sending.php b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Sending.php
index 22d8d3de7ef595f5ac65cd1a4879935b2074774e..bc6053c67aa8f2b363a4185d89cdef6bde3cecc4 100644
--- a/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Sending.php
+++ b/app/code/Magento/Newsletter/Controller/Adminhtml/Queue/Sending.php
@@ -20,7 +20,7 @@ class Sending extends \Magento\Newsletter\Controller\Adminhtml\Queue
         $countOfSubscritions = 20;
 
         $collection = $this->_objectManager->create(
-            'Magento\Newsletter\Model\Resource\Queue\Collection'
+            'Magento\Newsletter\Model\ResourceModel\Queue\Collection'
         )->setPageSize(
             $countOfQueue
         )->setCurPage(
diff --git a/app/code/Magento/Newsletter/Model/Observer.php b/app/code/Magento/Newsletter/Model/Observer.php
index d0299ae2cc84568ede5a6047589f2b4d234f127f..a425d4d19ba8bfd0b141fcbd219dd6dd5920d101 100644
--- a/app/code/Magento/Newsletter/Model/Observer.php
+++ b/app/code/Magento/Newsletter/Model/Observer.php
@@ -17,17 +17,17 @@ class Observer
     /**
      * Queue collection factory
      *
-     * @var \Magento\Newsletter\Model\Resource\Queue\CollectionFactory
+     * @var \Magento\Newsletter\Model\ResourceModel\Queue\CollectionFactory
      */
     protected $_queueCollectionFactory;
 
     /**
      * Construct
      *
-     * @param \Magento\Newsletter\Model\Resource\Queue\CollectionFactory $queueCollectionFactory
+     * @param \Magento\Newsletter\Model\ResourceModel\Queue\CollectionFactory $queueCollectionFactory
      */
     public function __construct(
-        \Magento\Newsletter\Model\Resource\Queue\CollectionFactory $queueCollectionFactory
+        \Magento\Newsletter\Model\ResourceModel\Queue\CollectionFactory $queueCollectionFactory
     ) {
         $this->_queueCollectionFactory = $queueCollectionFactory;
     }
@@ -43,7 +43,7 @@ class Observer
         $countOfQueue  = 3;
         $countOfSubscriptions = 20;
 
-        /** @var \Magento\Newsletter\Model\Resource\Queue\Collection $collection */
+        /** @var \Magento\Newsletter\Model\ResourceModel\Queue\Collection $collection */
         $collection = $this->_queueCollectionFactory->create();
         $collection->setPageSize($countOfQueue)->setCurPage(1)->addOnlyForSendingFilter()->load();
 
diff --git a/app/code/Magento/Newsletter/Model/Problem.php b/app/code/Magento/Newsletter/Model/Problem.php
index db5033788deebbd974785a1763110bfd06beff8c..f62b509660559d694d24061b81dfeaf2960ed461 100644
--- a/app/code/Magento/Newsletter/Model/Problem.php
+++ b/app/code/Magento/Newsletter/Model/Problem.php
@@ -8,8 +8,8 @@ namespace Magento\Newsletter\Model;
 /**
  * Newsletter problem model
  *
- * @method \Magento\Newsletter\Model\Resource\Problem _getResource()
- * @method \Magento\Newsletter\Model\Resource\Problem getResource()
+ * @method \Magento\Newsletter\Model\ResourceModel\Problem _getResource()
+ * @method \Magento\Newsletter\Model\ResourceModel\Problem getResource()
  * @method int getSubscriberId()
  * @method \Magento\Newsletter\Model\Problem setSubscriberId(int $value)
  * @method int getQueueId()
@@ -43,7 +43,7 @@ class Problem extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Newsletter\Model\SubscriberFactory $subscriberFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -51,7 +51,7 @@ class Problem extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Newsletter\Model\SubscriberFactory $subscriberFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -66,7 +66,7 @@ class Problem extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Newsletter\Model\Resource\Problem');
+        $this->_init('Magento\Newsletter\Model\ResourceModel\Problem');
     }
 
     /**
diff --git a/app/code/Magento/Newsletter/Model/Queue.php b/app/code/Magento/Newsletter/Model/Queue.php
index 9b7bd7b79c89e9a6354d9e49bb948333a5e88f65..17c28f4d56fcf244db320b46ee0746bae9b33c9a 100644
--- a/app/code/Magento/Newsletter/Model/Queue.php
+++ b/app/code/Magento/Newsletter/Model/Queue.php
@@ -10,8 +10,8 @@ use Magento\Framework\App\TemplateTypesInterface;
 /**
  * Newsletter queue model.
  *
- * @method \Magento\Newsletter\Model\Resource\Queue _getResource()
- * @method \Magento\Newsletter\Model\Resource\Queue getResource()
+ * @method \Magento\Newsletter\Model\ResourceModel\Queue _getResource()
+ * @method \Magento\Newsletter\Model\ResourceModel\Queue getResource()
  * @method int getTemplateId()
  * @method \Magento\Newsletter\Model\Queue setTemplateId(int $value)
  * @method int getNewsletterType()
@@ -47,7 +47,7 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy
     /**
      * Subscribers collection
      *
-     * @var \Magento\Newsletter\Model\Resource\Subscriber\Collection
+     * @var \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection
      */
     protected $_subscribersCollection;
 
@@ -115,9 +115,9 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Newsletter\Model\TemplateFactory $templateFactory
      * @param \Magento\Newsletter\Model\ProblemFactory $problemFactory
-     * @param \Magento\Newsletter\Model\Resource\Subscriber\CollectionFactory $subscriberCollectionFactory
+     * @param \Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory $subscriberCollectionFactory
      * @param \Magento\Newsletter\Model\Queue\TransportBuilder $transportBuilder
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -129,9 +129,9 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Newsletter\Model\TemplateFactory $templateFactory,
         \Magento\Newsletter\Model\ProblemFactory $problemFactory,
-        \Magento\Newsletter\Model\Resource\Subscriber\CollectionFactory $subscriberCollectionFactory,
+        \Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory $subscriberCollectionFactory,
         \Magento\Newsletter\Model\Queue\TransportBuilder $transportBuilder,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -158,7 +158,7 @@ class Queue extends \Magento\Framework\Model\AbstractModel implements TemplateTy
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\Newsletter\Model\Resource\Queue');
+        $this->_init('Magento\Newsletter\Model\ResourceModel\Queue');
     }
 
     /**
diff --git a/app/code/Magento/Newsletter/Model/Resource/Grid/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Grid/Collection.php
similarity index 61%
rename from app/code/Magento/Newsletter/Model/Resource/Grid/Collection.php
rename to app/code/Magento/Newsletter/Model/ResourceModel/Grid/Collection.php
index 0de676b32e8cd6b8d79016a445897f8892c678aa..29ca4f54293ba65dc8a5ba83ff84aa2e28a185c1 100644
--- a/app/code/Magento/Newsletter/Model/Resource/Grid/Collection.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Grid/Collection.php
@@ -11,14 +11,14 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Newsletter\Model\Resource\Grid;
+namespace Magento\Newsletter\Model\ResourceModel\Grid;
 
-class Collection extends \Magento\Newsletter\Model\Resource\Problem\Collection
+class Collection extends \Magento\Newsletter\Model\ResourceModel\Problem\Collection
 {
     /**
      * Adds queue info to grid
      *
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection|\Magento\Newsletter\Model\Resource\Grid\Collection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection|\Magento\Newsletter\Model\ResourceModel\Grid\Collection
      */
     protected function _initSelect()
     {
diff --git a/app/code/Magento/Newsletter/Model/Resource/Problem.php b/app/code/Magento/Newsletter/Model/ResourceModel/Problem.php
similarity index 75%
rename from app/code/Magento/Newsletter/Model/Resource/Problem.php
rename to app/code/Magento/Newsletter/Model/ResourceModel/Problem.php
index 46ff1cc07f3211f80394c21294a525433f026527..77d8b9baec130b5ebb8bd9b2084a45514e3317e8 100644
--- a/app/code/Magento/Newsletter/Model/Resource/Problem.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Problem.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Newsletter\Model\Resource;
+namespace Magento\Newsletter\Model\ResourceModel;
 
 /**
  * Newsletter problem resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Problem extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Problem extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Newsletter/Model/Resource/Problem/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Problem/Collection.php
similarity index 92%
rename from app/code/Magento/Newsletter/Model/Resource/Problem/Collection.php
rename to app/code/Magento/Newsletter/Model/ResourceModel/Problem/Collection.php
index 2f57778dd565868d35da5b5f11d2c7813b3f1554..110ef3c821bec54656d1b4a7147455fb0463cd8d 100644
--- a/app/code/Magento/Newsletter/Model/Resource/Problem/Collection.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Problem/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Newsletter\Model\Resource\Problem;
+namespace Magento\Newsletter\Model\ResourceModel\Problem;
 
 use Magento\Customer\Api\CustomerRepositoryInterface as CustomerRepository;
 use Magento\Framework\Exception\NoSuchEntityException;
@@ -13,7 +13,7 @@ use Magento\Framework\Exception\NoSuchEntityException;
  *
  * @SuppressWarnings(PHPMD.LongVariable)
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * True when subscribers info joined
@@ -32,7 +32,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     /**
      * Customer collection factory
      *
-     * @var \Magento\Customer\Model\Resource\Customer\CollectionFactory
+     * @var \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory
      */
     protected $_customerCollectionFactory;
 
@@ -63,7 +63,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param CustomerRepository $customerRepository
      * @param \Magento\Customer\Helper\View $customerView
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -73,7 +73,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         CustomerRepository $customerRepository,
         \Magento\Customer\Helper\View $customerView,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->customerRepository = $customerRepository;
@@ -87,7 +87,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Newsletter\Model\Problem', 'Magento\Newsletter\Model\Resource\Problem');
+        $this->_init('Magento\Newsletter\Model\Problem', 'Magento\Newsletter\Model\ResourceModel\Problem');
     }
 
     /**
diff --git a/app/code/Magento/Newsletter/Model/Resource/Queue.php b/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php
similarity index 90%
rename from app/code/Magento/Newsletter/Model/Resource/Queue.php
rename to app/code/Magento/Newsletter/Model/ResourceModel/Queue.php
index d792693bf3f3f3aace54af5e0f3f5760e4514ea0..cf8086a659828306da40a5753c2c68b1128870a6 100644
--- a/app/code/Magento/Newsletter/Model/Resource/Queue.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Queue.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Newsletter\Model\Resource;
+namespace Magento\Newsletter\Model\ResourceModel;
 
 use Magento\Framework\Model\AbstractModel;
 use Magento\Newsletter\Model\Queue as ModelQueue;
@@ -13,25 +13,25 @@ use Magento\Newsletter\Model\Queue as ModelQueue;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Queue extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Queue extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Subscriber collection
      *
-     * @var \Magento\Newsletter\Model\Resource\Subscriber\Collection
+     * @var \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection
      */
     protected $_subscriberCollection;
 
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
-     * @param \Magento\Newsletter\Model\Resource\Subscriber\Collection $subscriberCollection
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
+     * @param \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection $subscriberCollection
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
-        \Magento\Newsletter\Model\Resource\Subscriber\Collection $subscriberCollection,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
+        \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection $subscriberCollection,
         $connectionName = null
     ) {
         parent::__construct($context, $connectionName);
diff --git a/app/code/Magento/Newsletter/Model/Resource/Queue/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Queue/Collection.php
similarity index 95%
rename from app/code/Magento/Newsletter/Model/Resource/Queue/Collection.php
rename to app/code/Magento/Newsletter/Model/ResourceModel/Queue/Collection.php
index a1b23c8dbafbac54f541dcc72999fce01c14ad91..138b7bd121eeda18c9b577ff15440f365558101c 100644
--- a/app/code/Magento/Newsletter/Model/Resource/Queue/Collection.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Queue/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Newsletter\Model\Resource\Queue;
+namespace Magento\Newsletter\Model\ResourceModel\Queue;
 
 /**
  * Newsletter queue collection.
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * True when subscribers info joined
@@ -40,7 +40,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -49,7 +49,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->_date = $date;
@@ -63,7 +63,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected function _construct()
     {
         $this->_map['fields']['queue_id'] = 'main_table.queue_id';
-        $this->_init('Magento\Newsletter\Model\Queue', 'Magento\Newsletter\Model\Resource\Queue');
+        $this->_init('Magento\Newsletter\Model\Queue', 'Magento\Newsletter\Model\ResourceModel\Queue');
     }
 
     /**
diff --git a/app/code/Magento/Newsletter/Model/Resource/Queue/Grid/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Queue/Grid/Collection.php
similarity index 73%
rename from app/code/Magento/Newsletter/Model/Resource/Queue/Grid/Collection.php
rename to app/code/Magento/Newsletter/Model/ResourceModel/Queue/Grid/Collection.php
index b73335a3ff647f1add3b48988a64f5733bf0c290..cc739271ba63a048d41f4fca03084b5d04942380 100644
--- a/app/code/Magento/Newsletter/Model/Resource/Queue/Grid/Collection.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Queue/Grid/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Newsletter\Model\Resource\Queue\Grid;
+namespace Magento\Newsletter\Model\ResourceModel\Queue\Grid;
 
-class Collection extends \Magento\Newsletter\Model\Resource\Queue\Collection
+class Collection extends \Magento\Newsletter\Model\ResourceModel\Queue\Collection
 {
     /**
      * @return $this
diff --git a/app/code/Magento/Newsletter/Model/Resource/Subscriber.php b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php
similarity index 94%
rename from app/code/Magento/Newsletter/Model/Resource/Subscriber.php
rename to app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php
index d68a72a3c0f1141162fd51debaeb7c6947c347c4..ffd998a2c333fa8e0f30040a193f407b4279d946 100644
--- a/app/code/Magento/Newsletter/Model/Resource/Subscriber.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Newsletter\Model\Resource;
+namespace Magento\Newsletter\Model\ResourceModel;
 
 /**
  * Newsletter subscriber resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Subscriber extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Subscriber extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * DB connection
@@ -48,13 +48,13 @@ class Subscriber extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Framework\Math\Random $mathRandom
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Framework\Math\Random $mathRandom,
         $connectionName = null
diff --git a/app/code/Magento/Newsletter/Model/Resource/Subscriber/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Collection.php
similarity index 94%
rename from app/code/Magento/Newsletter/Model/Resource/Subscriber/Collection.php
rename to app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Collection.php
index 10d06077367753bf895440a0ec72d4dc3ec34f47..92de4c8b2e6ccab6c99a3297087e6c5b3d3227a4 100644
--- a/app/code/Magento/Newsletter/Model/Resource/Subscriber/Collection.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Newsletter\Model\Resource\Subscriber;
+namespace Magento\Newsletter\Model\ResourceModel\Subscriber;
 
 use Magento\Newsletter\Model\Queue as ModelQueue;
 
@@ -12,7 +12,7 @@ use Magento\Newsletter\Model\Queue as ModelQueue;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Queue link table name
@@ -63,7 +63,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Helper\Data $customerHelperData
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -72,7 +72,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Helper\Data $customerHelperData,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_customerHelperData = $customerHelperData;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
@@ -87,7 +87,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\Newsletter\Model\Subscriber', 'Magento\Newsletter\Model\Resource\Subscriber');
+        $this->_init('Magento\Newsletter\Model\Subscriber', 'Magento\Newsletter\Model\ResourceModel\Subscriber');
         $this->_queueLinkTable = $this->getTable('newsletter_queue_link');
         $this->_storeTable = $this->getTable('store');
 
diff --git a/app/code/Magento/Newsletter/Model/Resource/Subscriber/Grid/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Grid/Collection.php
similarity index 73%
rename from app/code/Magento/Newsletter/Model/Resource/Subscriber/Grid/Collection.php
rename to app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Grid/Collection.php
index c594bd9e614aaa0cd189394c0904b9b52472418d..05099867dba32db6429454bcb3a757e4e9518fad 100644
--- a/app/code/Magento/Newsletter/Model/Resource/Subscriber/Grid/Collection.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Subscriber/Grid/Collection.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Newsletter\Model\Resource\Subscriber\Grid;
+namespace Magento\Newsletter\Model\ResourceModel\Subscriber\Grid;
 
-class Collection extends \Magento\Newsletter\Model\Resource\Subscriber\Collection
+class Collection extends \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection
 {
     /**
      * Sets flag for customer info loading on load
diff --git a/app/code/Magento/Newsletter/Model/Resource/Template.php b/app/code/Magento/Newsletter/Model/ResourceModel/Template.php
similarity index 93%
rename from app/code/Magento/Newsletter/Model/Resource/Template.php
rename to app/code/Magento/Newsletter/Model/ResourceModel/Template.php
index 50677fd6a4b6ee44d23d9ae4f3b14024d340a165..3d9c097678af892fa5256ab1587fef040ff38432 100644
--- a/app/code/Magento/Newsletter/Model/Resource/Template.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Template.php
@@ -6,14 +6,14 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Newsletter\Model\Resource;
+namespace Magento\Newsletter\Model\ResourceModel;
 
 /**
  * Newsletter template resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Template extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Template extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Date
@@ -23,12 +23,12 @@ class Template extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_date;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Newsletter/Model/Resource/Template/Collection.php b/app/code/Magento/Newsletter/Model/ResourceModel/Template/Collection.php
similarity index 79%
rename from app/code/Magento/Newsletter/Model/Resource/Template/Collection.php
rename to app/code/Magento/Newsletter/Model/ResourceModel/Template/Collection.php
index ca64bb3fba78b62b58328232d9edafeedddcf7fa..925352d50497c18bbc4884cac935a1d970831baf 100644
--- a/app/code/Magento/Newsletter/Model/Resource/Template/Collection.php
+++ b/app/code/Magento/Newsletter/Model/ResourceModel/Template/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Newsletter\Model\Resource\Template;
+namespace Magento\Newsletter\Model\ResourceModel\Template;
 
 /**
  * Newsletter templates collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define resource model and model
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Newsletter\Model\Template', 'Magento\Newsletter\Model\Resource\Template');
+        $this->_init('Magento\Newsletter\Model\Template', 'Magento\Newsletter\Model\ResourceModel\Template');
     }
 
     /**
diff --git a/app/code/Magento/Newsletter/Model/Subscriber.php b/app/code/Magento/Newsletter/Model/Subscriber.php
index be26e78f1d181d2035c9ff9d5ed08976d4444a57..5ea6aefc0defe38d49d81037ec0d5884ccce70b1 100644
--- a/app/code/Magento/Newsletter/Model/Subscriber.php
+++ b/app/code/Magento/Newsletter/Model/Subscriber.php
@@ -13,8 +13,8 @@ use Magento\Framework\Exception\MailException;
 /**
  * Subscriber model
  *
- * @method \Magento\Newsletter\Model\Resource\Subscriber _getResource()
- * @method \Magento\Newsletter\Model\Resource\Subscriber getResource()
+ * @method \Magento\Newsletter\Model\ResourceModel\Subscriber _getResource()
+ * @method \Magento\Newsletter\Model\ResourceModel\Subscriber getResource()
  * @method int getStoreId()
  * @method $this setStoreId(int $value)
  * @method string getChangeStatusAt()
@@ -133,7 +133,7 @@ class Subscriber extends \Magento\Framework\Model\AbstractModel
      * @param CustomerRepositoryInterface $customerRepository
      * @param AccountManagementInterface $customerAccountManagement
      * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -149,7 +149,7 @@ class Subscriber extends \Magento\Framework\Model\AbstractModel
         CustomerRepositoryInterface $customerRepository,
         AccountManagementInterface $customerAccountManagement,
         \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -171,7 +171,7 @@ class Subscriber extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Newsletter\Model\Resource\Subscriber');
+        $this->_init('Magento\Newsletter\Model\ResourceModel\Subscriber');
     }
 
     /**
diff --git a/app/code/Magento/Newsletter/Model/Template.php b/app/code/Magento/Newsletter/Model/Template.php
index 701584e126b68c18aa7ccdfc59bb97f767b9d5d7..00f35a55e3e59a42a3e47dfc13cd5601cd9fc7ee 100644
--- a/app/code/Magento/Newsletter/Model/Template.php
+++ b/app/code/Magento/Newsletter/Model/Template.php
@@ -8,8 +8,8 @@ namespace Magento\Newsletter\Model;
 /**
  * Template model
  *
- * @method \Magento\Newsletter\Model\Resource\Template _getResource()
- * @method \Magento\Newsletter\Model\Resource\Template getResource()
+ * @method \Magento\Newsletter\Model\ResourceModel\Template _getResource()
+ * @method \Magento\Newsletter\Model\ResourceModel\Template getResource()
  * @method string getTemplateCode()
  * @method \Magento\Newsletter\Model\Template setTemplateCode(string $value)
  * @method \Magento\Newsletter\Model\Template setTemplateText(string $value)
@@ -127,7 +127,7 @@ class Template extends \Magento\Email\Model\AbstractTemplate
      */
     protected function _construct()
     {
-        $this->_init('Magento\Newsletter\Model\Resource\Template');
+        $this->_init('Magento\Newsletter\Model\ResourceModel\Template');
     }
 
     /**
diff --git a/app/code/Magento/Newsletter/Test/Unit/Model/QueueTest.php b/app/code/Magento/Newsletter/Test/Unit/Model/QueueTest.php
index bb8ec3b719f54c143447aececfde24daccbcc5ce..b3a364aa38fdab387f1edfba56a0f5e9144c5885 100644
--- a/app/code/Magento/Newsletter/Test/Unit/Model/QueueTest.php
+++ b/app/code/Magento/Newsletter/Test/Unit/Model/QueueTest.php
@@ -33,12 +33,12 @@ class QueueTest extends \PHPUnit_Framework_TestCase
     protected $problemFactory;
 
     /**
-     * @var \Magento\Newsletter\Model\Resource\Subscriber\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $subscribersCollection;
 
     /**
-     * @var \Magento\Newsletter\Model\Resource\Subscriber\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $subscribersCollectionFactory;
 
@@ -48,7 +48,7 @@ class QueueTest extends \PHPUnit_Framework_TestCase
     protected $transportBuilder;
 
     /**
-     * @var \Magento\Newsletter\Model\Resource\Queue|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Newsletter\Model\ResourceModel\Queue|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -79,14 +79,15 @@ class QueueTest extends \PHPUnit_Framework_TestCase
                 ['setTemplateData', 'setTemplateOptions', 'setTemplateVars', 'setFrom', 'addTo', 'getTransport']
             )
             ->getMock();
-        $this->subscribersCollection = $this->getMockBuilder('\Magento\Newsletter\Model\Resource\Subscriber\Collection')
+        $this->subscribersCollection =
+            $this->getMockBuilder('\Magento\Newsletter\Model\ResourceModel\Subscriber\Collection')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->resource = $this->getMockBuilder('\Magento\Newsletter\Model\Resource\Queue')
+        $this->resource = $this->getMockBuilder('\Magento\Newsletter\Model\ResourceModel\Queue')
             ->disableOriginalConstructor()
             ->getMock();
         $this->subscribersCollectionFactory = $this->getMockBuilder(
-            '\Magento\Newsletter\Model\Resource\Subscriber\CollectionFactory'
+            '\Magento\Newsletter\Model\ResourceModel\Subscriber\CollectionFactory'
         )
             ->disableOriginalConstructor()
             ->setMethods(['create'])
diff --git a/app/code/Magento/Newsletter/Test/Unit/Model/SubscriberTest.php b/app/code/Magento/Newsletter/Test/Unit/Model/SubscriberTest.php
index 37ce3e848717642adfd493f44de0c0672bec9527..b6b751c0a86e5bf6efc1a3b4204e9fb1d4d5f9f8 100644
--- a/app/code/Magento/Newsletter/Test/Unit/Model/SubscriberTest.php
+++ b/app/code/Magento/Newsletter/Test/Unit/Model/SubscriberTest.php
@@ -48,7 +48,7 @@ class SubscriberTest extends \PHPUnit_Framework_TestCase
     protected $inlineTranslation;
 
     /**
-     * @var \Magento\Newsletter\Model\Resource\Subscriber|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Newsletter\Model\ResourceModel\Subscriber|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -96,7 +96,7 @@ class SubscriberTest extends \PHPUnit_Framework_TestCase
         $this->customerAccountManagement = $this->getMock('Magento\Customer\Api\AccountManagementInterface');
         $this->inlineTranslation = $this->getMock('Magento\Framework\Translate\Inline\StateInterface');
         $this->resource = $this->getMock(
-            'Magento\Newsletter\Model\Resource\Subscriber',
+            'Magento\Newsletter\Model\ResourceModel\Subscriber',
             [
                 'loadByEmail',
                 'getIdFieldName',
diff --git a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_problem_block.xml b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_problem_block.xml
index 8e97a9ce5abe2bd1ff4079b5d4239bf0d752a0a5..888295bec753b386406ce82ce8894ee2cfef0182 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_problem_block.xml
+++ b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_problem_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.newslettrer.problem.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">problemGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Newsletter\Model\Resource\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Newsletter\Model\ResourceModel\Grid\Collection</argument>
                     <argument name="message_block_visibility" xsi:type="string">true</argument>
                     <argument name="use_ajax" xsi:type="string">true</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
diff --git a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_grid_block.xml b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_grid_block.xml
index baa9e034df5e950d263ad590e02df82e7856ff26..74c272c985a6bcfbddef9ff01f140bb70d80d0cb 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_grid_block.xml
+++ b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_queue_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.newsletter.queue.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">queueGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Newsletter\Model\Resource\Queue\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Newsletter\Model\ResourceModel\Queue\Grid\Collection</argument>
                     <argument name="default_sort" xsi:type="string">start_at</argument>
                     <argument name="default_dir" xsi:type="string">DESC</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
diff --git a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_subscriber_block.xml b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_subscriber_block.xml
index 44b8cd7a827dc133d32546cbce7f28373d9039a9..6c277315384b42866e1cf721b3f4842bc8562bbc 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_subscriber_block.xml
+++ b/app/code/Magento/Newsletter/view/adminhtml/layout/newsletter_subscriber_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Newsletter\Block\Adminhtml\Subscriber\Grid" name="adminhtml.newslettrer.subscriber.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">subscriberGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Newsletter\Model\Resource\Subscriber\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Newsletter\Model\ResourceModel\Subscriber\Grid\Collection</argument>
                     <argument name="default_sort" xsi:type="string">subscriber_id</argument>
                     <argument name="default_dir" xsi:type="string">desc</argument>
                     <argument name="use_ajax" xsi:type="string">1</argument>
diff --git a/app/code/Magento/Newsletter/view/adminhtml/templates/preview/store.phtml b/app/code/Magento/Newsletter/view/adminhtml/templates/preview/store.phtml
index 1e6876471f61cee5d929431c5154013dddcd2708..9daad0736909f8db00984c597fe3ddeb362e220b 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/templates/preview/store.phtml
+++ b/app/code/Magento/Newsletter/view/adminhtml/templates/preview/store.phtml
@@ -12,7 +12,10 @@
 <div class="field field-store-switcher">
     <label class="label" for="store_switcher"><?php /* @escapeNotVerified */ echo __('Choose Store View:') ?></label>
     <div class="control">
-        <select name="store_switcher" id="store_switcher">
+        <select
+            id="store_switcher"
+            class="admin__control-select"
+            name="store_switcher">
             <?php foreach ($websites as $website): ?>
                 <?php $showWebsite = false; ?>
                 <?php foreach ($website->getGroups() as $group): ?>
diff --git a/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml b/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml
index 84c07890a4efe022fa170b0750383362d350e9bf..26ac1a28b3c06a1ad78afc5b7ce5d6eb149c1739 100644
--- a/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml
+++ b/app/code/Magento/Newsletter/view/adminhtml/templates/template/edit.phtml
@@ -31,9 +31,11 @@ use Magento\Framework\App\TemplateTypesInterface;
 require([
     'jquery',
     'tinymce',
+    'Magento_Ui/js/modal/prompt',
+    'Magento_Ui/js/modal/confirm',
     'mage/mage',
     'prototype'
-], function(jQuery, tinyMCE){
+], function(jQuery, tinyMCE, prompt, confirm){
 
 //<![CDATA[
     jQuery('#newsletter_template_edit_form').mage('form').mage('validation');
@@ -81,20 +83,26 @@ require([
         },
 
         stripTags: function () {
-            if(!window.confirm("<?php /* @escapeNotVerified */ echo __('Are you sure that you want to strip all tags?') ?>")) {
-                return false;
-            }
-            if(this.isEditor()) {
-                this.getEditor().turnOff();
-                this.getEditor().getToggleButton().hide();
-            }
-            this.unconvertedText = $(this.id).value;
-            $('convert_button').hide();
-            $('convert_button_back').show();
-            $(this.id).value =  $(this.id).value.stripScripts().stripTags();
-            $('field_template_styles').hide();
-            this.typeChange = true;
-            return false;
+            var self = this;
+
+            confirm({
+                content: "<?php /* @escapeNotVerified */ echo __('Are you sure that you want to strip all tags?') ?>",
+                actions: {
+                    confirm: function(){
+                        if(self.isEditor()) {
+                            self.getEditor().turnOff();
+                            self.getEditor().getToggleButton().hide();
+                        }
+                        self.unconvertedText = $(self.id).value;
+                        $('convert_button').hide();
+                        $('convert_button_back').show();
+                        $(self.id).value =  $(self.id).value.stripScripts().stripTags();
+                        $('field_template_styles').hide();
+                        self.typeChange = true;
+                    }
+                }
+            });
+
         },
 
         unStripTags: function () {
@@ -123,24 +131,38 @@ require([
         },
 
         saveAs: function() {
+            var self = this;
+
             if (this.typeChange) {
                 $('change_flag_element').value = '1';
             }
 
             if($F('code').blank() || $F('code')==templateControl.templateName) {
-               value = prompt('<?php /* @escapeNotVerified */ echo __('Please enter a new template name.') ?>', templateControl.templateName + '<?php /* @escapeNotVerified */ echo __(' Copy') ?>');
-               if(!value) {
-                   if(value !== null) {
-                       $('code').value = '';
-                       // Temporary solution will be replaced after refactoring of newsletter functionality
-                       jQuery('#newsletter_template_edit_form').triggerHandler('save');
-                   }
-                   return false;
-               } else {
-                   $('code').value = value;
-               }
+
+                prompt({
+                    content: '<?php /* @escapeNotVerified */ echo __('Please enter a new template name.') ?>',
+                    value: templateControl.templateName + '<?php /* @escapeNotVerified */ echo __(' Copy') ?>',
+                    actions: {
+                        confirm: function(value) {
+                            $('code').value = value;
+                            self._saveAs();
+
+                            return false;
+                        },
+                        cancel: function(){
+                            $('code').value = '';
+                            // Temporary solution will be replaced after refactoring of newsletter functionality
+                            jQuery('#newsletter_template_edit_form').triggerHandler('save');
+                            self._saveAs();
+
+                            return false;
+                        }
+                    }
+                });
             }
+        },
 
+        _saveAs: function() {
             $('save_as_flag').value = '1';
 
             if(this.isEditor()) {
@@ -176,9 +198,14 @@ require([
         },
 
         deleteTemplate: function() {
-            if(window.confirm("<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this template?') ?>")) {
-                   window.location.href = '<?php /* @escapeNotVerified */ echo $block->getDeleteUrl() ?>';
-            }
+            confirm({
+                content: "<?php /* @escapeNotVerified */ echo __('Are you sure you want to delete this template?') ?>",
+                actions: {
+                    confirm: function() {
+                        window.location.href = '<?php /* @escapeNotVerified */ echo $block->getDeleteUrl() ?>';
+                    }
+                }
+            });
         },
 
         isEditor: function() {
diff --git a/app/code/Magento/OfflinePayments/etc/events.xml b/app/code/Magento/OfflinePayments/etc/events.xml
index cda1bc21cb4eda5fb4b7021c45ebc8117866c16e..f4ea4a21f6a12e362fb69f4f21166a3e053c07f1 100644
--- a/app/code/Magento/OfflinePayments/etc/events.xml
+++ b/app/code/Magento/OfflinePayments/etc/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_order_payment_save_before">
-        <observer name="payment_before_save" instance="Magento\OfflinePayments\Observer\BeforeOrderPaymentSaveObserver" method="execute" />
+        <observer name="payment_before_save" instance="Magento\OfflinePayments\Observer\BeforeOrderPaymentSaveObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/OfflinePayments/view/frontend/web/js/view/payment/method-renderer/purchaseorder-method.js b/app/code/Magento/OfflinePayments/view/frontend/web/js/view/payment/method-renderer/purchaseorder-method.js
index 0f75469f87f166da1089f83aeeea8f0d78be4185..ae8edabeea2b8620babee5edf24cffb2e1373b99 100644
--- a/app/code/Magento/OfflinePayments/view/frontend/web/js/view/payment/method-renderer/purchaseorder-method.js
+++ b/app/code/Magento/OfflinePayments/view/frontend/web/js/view/payment/method-renderer/purchaseorder-method.js
@@ -26,11 +26,6 @@ define(
                 return {
                     "method": this.item.method,
                     'po_number': this.purchaseOrderNumber(),
-                    "cc_owner": null,
-                    "cc_number": null,
-                    "cc_type": null,
-                    "cc_exp_year": null,
-                    "cc_exp_month": null,
                     "additional_data": null
                 };
 
diff --git a/app/code/Magento/OfflineShipping/Block/Adminhtml/Carrier/Tablerate/Grid.php b/app/code/Magento/OfflineShipping/Block/Adminhtml/Carrier/Tablerate/Grid.php
index 2e0c27adf0e880a9fa27f01ec2b30e84e34c5efd..5d9c89bb898eb695ef1c16dbb81aa2b29a5605ec 100644
--- a/app/code/Magento/OfflineShipping/Block/Adminhtml/Carrier/Tablerate/Grid.php
+++ b/app/code/Magento/OfflineShipping/Block/Adminhtml/Carrier/Tablerate/Grid.php
@@ -33,21 +33,21 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_tablerate;
 
     /**
-     * @var \Magento\OfflineShipping\Model\Resource\Carrier\Tablerate\CollectionFactory
+     * @var \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate\CollectionFactory
      */
     protected $_collectionFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\OfflineShipping\Model\Resource\Carrier\Tablerate\CollectionFactory $collectionFactory
+     * @param \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate\CollectionFactory $collectionFactory
      * @param \Magento\OfflineShipping\Model\Carrier\Tablerate $tablerate
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\OfflineShipping\Model\Resource\Carrier\Tablerate\CollectionFactory $collectionFactory,
+        \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate\CollectionFactory $collectionFactory,
         \Magento\OfflineShipping\Model\Carrier\Tablerate $tablerate,
         array $data = []
     ) {
@@ -122,7 +122,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
      */
     protected function _prepareCollection()
     {
-        /** @var $collection \Magento\OfflineShipping\Model\Resource\Carrier\Tablerate\Collection */
+        /** @var $collection \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate\Collection */
         $collection = $this->_collectionFactory->create();
         $collection->setConditionFilter($this->getConditionName())->setWebsiteFilter($this->getWebsiteId());
 
diff --git a/app/code/Magento/OfflineShipping/Model/Carrier/Tablerate.php b/app/code/Magento/OfflineShipping/Model/Carrier/Tablerate.php
index 73949f4b9f345dc683d4e79170f4add2117deb77..9a5509595327220b6f222c4737a86f8832578153 100644
--- a/app/code/Magento/OfflineShipping/Model/Carrier/Tablerate.php
+++ b/app/code/Magento/OfflineShipping/Model/Carrier/Tablerate.php
@@ -42,7 +42,7 @@ class Tablerate extends \Magento\Shipping\Model\Carrier\AbstractCarrier implemen
     protected $_resultMethodFactory;
 
     /**
-     * @var \Magento\OfflineShipping\Model\Resource\Carrier\TablerateFactory
+     * @var \Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory
      */
     protected $_tablerateFactory;
 
@@ -52,7 +52,7 @@ class Tablerate extends \Magento\Shipping\Model\Carrier\AbstractCarrier implemen
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory
      * @param \Magento\Quote\Model\Quote\Address\RateResult\MethodFactory $resultMethodFactory
-     * @param \Magento\OfflineShipping\Model\Resource\Carrier\TablerateFactory $tablerateFactory
+     * @param \Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory $tablerateFactory
      * @param array $data
      * @SuppressWarnings(PHPMD.UnusedLocalVariable)
      */
@@ -62,7 +62,7 @@ class Tablerate extends \Magento\Shipping\Model\Carrier\AbstractCarrier implemen
         \Psr\Log\LoggerInterface $logger,
         \Magento\Shipping\Model\Rate\ResultFactory $rateResultFactory,
         \Magento\Quote\Model\Quote\Address\RateResult\MethodFactory $resultMethodFactory,
-        \Magento\OfflineShipping\Model\Resource\Carrier\TablerateFactory $tablerateFactory,
+        \Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory $tablerateFactory,
         array $data = []
     ) {
         $this->_rateResultFactory = $rateResultFactory;
diff --git a/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php b/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php
index fa5987a754a1a9fe5f5ec014e9602242dbcfefd8..e6920ede9b8c4e04285538c9aed52acadc86be6f 100644
--- a/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php
+++ b/app/code/Magento/OfflineShipping/Model/Config/Backend/Tablerate.php
@@ -15,7 +15,7 @@ use Magento\Framework\Model\AbstractModel;
 class Tablerate extends \Magento\Framework\App\Config\Value
 {
     /**
-     * @var \Magento\OfflineShipping\Model\Resource\Carrier\TablerateFactory
+     * @var \Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory
      */
     protected $_tablerateFactory;
 
@@ -23,8 +23,8 @@ class Tablerate extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\OfflineShipping\Model\Resource\Carrier\TablerateFactory $tablerateFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory $tablerateFactory
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,8 +32,8 @@ class Tablerate extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
-        \Magento\OfflineShipping\Model\Resource\Carrier\TablerateFactory $tablerateFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory $tablerateFactory,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -46,7 +46,7 @@ class Tablerate extends \Magento\Framework\App\Config\Value
      */
     public function afterSave()
     {
-        /** @var \Magento\OfflineShipping\Model\Resource\Carrier\Tablerate $tableRate */
+        /** @var \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate $tableRate */
         $tableRate = $this->_tablerateFactory->create();
         $tableRate->uploadAndImport($this);
     }
diff --git a/app/code/Magento/OfflineShipping/Model/Resource/Carrier/Tablerate.php b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php
similarity index 92%
rename from app/code/Magento/OfflineShipping/Model/Resource/Carrier/Tablerate.php
rename to app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php
index 62ef8fbd0754d55abebd6f7fb1044c0ac3275ff6..df0228a338358448f9af9d8106af49ed87a5a6ad 100644
--- a/app/code/Magento/OfflineShipping/Model/Resource/Carrier/Tablerate.php
+++ b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate.php
@@ -9,7 +9,7 @@
  *
  * @author     Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\OfflineShipping\Model\Resource\Carrier;
+namespace Magento\OfflineShipping\Model\ResourceModel\Carrier;
 
 use Magento\Framework\Filesystem;
 use Magento\Framework\Filesystem\DirectoryList;
@@ -18,7 +18,7 @@ use Magento\Framework\Filesystem\DirectoryList;
  * @SuppressWarnings(PHPMD.TooManyFields)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Tablerate extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Tablerate extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Import table rates website ID
@@ -105,12 +105,12 @@ class Tablerate extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_carrierTablerate;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Country\CollectionFactory
      */
     protected $_countryCollectionFactory;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Region\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory
      */
     protected $_regionCollectionFactory;
 
@@ -122,24 +122,24 @@ class Tablerate extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_filesystem;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $coreConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\OfflineShipping\Model\Carrier\Tablerate $carrierTablerate
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory
      * @param \Magento\Framework\Filesystem $filesystem
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\App\Config\ScopeConfigInterface $coreConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\OfflineShipping\Model\Carrier\Tablerate $carrierTablerate,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory,
-        \Magento\Directory\Model\Resource\Region\CollectionFactory $regionCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory,
+        \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionCollectionFactory,
         \Magento\Framework\Filesystem $filesystem,
         $connectionName = null
     ) {
@@ -244,7 +244,7 @@ class Tablerate extends \Magento\Framework\Model\Resource\Db\AbstractDb
      *
      * @param \Magento\Framework\DataObject $object
      * @throws \Magento\Framework\Exception\LocalizedException
-     * @return \Magento\OfflineShipping\Model\Resource\Carrier\Tablerate
+     * @return \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate
      * @todo: this method should be refactored as soon as updated design will be provided
      * @see https://wiki.corp.x.com/display/MCOMS/Magento+Filesystem+Decisions
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
@@ -347,7 +347,7 @@ class Tablerate extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Load directory countries
      *
-     * @return \Magento\OfflineShipping\Model\Resource\Carrier\Tablerate
+     * @return \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate
      */
     protected function _loadDirectoryCountries()
     {
@@ -358,7 +358,7 @@ class Tablerate extends \Magento\Framework\Model\Resource\Db\AbstractDb
         $this->_importIso2Countries = [];
         $this->_importIso3Countries = [];
 
-        /** @var $collection \Magento\Directory\Model\Resource\Country\Collection */
+        /** @var $collection \Magento\Directory\Model\ResourceModel\Country\Collection */
         $collection = $this->_countryCollectionFactory->create();
         foreach ($collection->getData() as $row) {
             $this->_importIso2Countries[$row['iso2_code']] = $row['country_id'];
@@ -371,7 +371,7 @@ class Tablerate extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Load directory regions
      *
-     * @return \Magento\OfflineShipping\Model\Resource\Carrier\Tablerate
+     * @return \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate
      */
     protected function _loadDirectoryRegions()
     {
@@ -381,7 +381,7 @@ class Tablerate extends \Magento\Framework\Model\Resource\Db\AbstractDb
 
         $this->_importRegions = [];
 
-        /** @var $collection \Magento\Directory\Model\Resource\Region\Collection */
+        /** @var $collection \Magento\Directory\Model\ResourceModel\Region\Collection */
         $collection = $this->_regionCollectionFactory->create();
         foreach ($collection->getData() as $row) {
             $this->_importRegions[$row['country_id']][$row['code']] = (int)$row['region_id'];
@@ -507,7 +507,7 @@ class Tablerate extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * Save import data batch
      *
      * @param array $data
-     * @return \Magento\OfflineShipping\Model\Resource\Carrier\Tablerate
+     * @return \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate
      */
     protected function _saveImportData(array $data)
     {
diff --git a/app/code/Magento/OfflineShipping/Model/Resource/Carrier/Tablerate/Collection.php b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate/Collection.php
similarity index 82%
rename from app/code/Magento/OfflineShipping/Model/Resource/Carrier/Tablerate/Collection.php
rename to app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate/Collection.php
index 77461c4366da44a6c45ae626c6ccf6685c2121d4..1a63a12fac974fc4643be2c2e7167b17756eea26 100644
--- a/app/code/Magento/OfflineShipping/Model/Resource/Carrier/Tablerate/Collection.php
+++ b/app/code/Magento/OfflineShipping/Model/ResourceModel/Carrier/Tablerate/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\OfflineShipping\Model\Resource\Carrier\Tablerate;
+namespace Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate;
 
 /**
  * Shipping table rates collection
  *
  * @author     Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Directory/country table name
@@ -35,7 +35,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     {
         $this->_init(
             'Magento\OfflineShipping\Model\Carrier\Tablerate',
-            'Magento\OfflineShipping\Model\Resource\Carrier\Tablerate'
+            'Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate'
         );
         $this->_countryTable = $this->getTable('directory_country');
         $this->_regionTable = $this->getTable('directory_country_region');
@@ -70,7 +70,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * Add website filter to collection
      *
      * @param int $websiteId
-     * @return \Magento\OfflineShipping\Model\Resource\Carrier\Tablerate\Collection
+     * @return \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate\Collection
      */
     public function setWebsiteFilter($websiteId)
     {
@@ -81,7 +81,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * Add condition name (code) filter to collection
      *
      * @param string $conditionName
-     * @return \Magento\OfflineShipping\Model\Resource\Carrier\Tablerate\Collection
+     * @return \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate\Collection
      */
     public function setConditionFilter($conditionName)
     {
@@ -92,7 +92,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * Add country filter to collection
      *
      * @param string $countryId
-     * @return \Magento\OfflineShipping\Model\Resource\Carrier\Tablerate\Collection
+     * @return \Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate\Collection
      */
     public function setCountryFilter($countryId)
     {
diff --git a/app/code/Magento/OfflineShipping/Test/Unit/Block/Adminhtml/Carrier/Tablerate/GridTest.php b/app/code/Magento/OfflineShipping/Test/Unit/Block/Adminhtml/Carrier/Tablerate/GridTest.php
index 99596a280c7599a3f60c717738404552d2bd3d02..3331a0728df9fd0031c0ed952e016c9b058ccfee 100644
--- a/app/code/Magento/OfflineShipping/Test/Unit/Block/Adminhtml/Carrier/Tablerate/GridTest.php
+++ b/app/code/Magento/OfflineShipping/Test/Unit/Block/Adminhtml/Carrier/Tablerate/GridTest.php
@@ -54,7 +54,7 @@ class GridTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->collectionFactoryMock =
-            $this->getMockBuilder('\Magento\OfflineShipping\Model\Resource\Carrier\Tablerate\CollectionFactory')
+            $this->getMockBuilder('\Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate\CollectionFactory')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/OfflineShipping/Test/Unit/Model/Config/Backend/TablerateTest.php b/app/code/Magento/OfflineShipping/Test/Unit/Model/Config/Backend/TablerateTest.php
index 3ab80ce333ba54c05bb0db589cbfecb2fe66dc4a..3ef545c34bdf5ab803c2ad658a717b7b9736d355 100644
--- a/app/code/Magento/OfflineShipping/Test/Unit/Model/Config/Backend/TablerateTest.php
+++ b/app/code/Magento/OfflineShipping/Test/Unit/Model/Config/Backend/TablerateTest.php
@@ -13,14 +13,14 @@ class TablerateTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\OfflineShipping\Model\Resource\Carrier\TablerateFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $tableateFactoryMock;
 
     protected function setUp()
     {
         $this->tableateFactoryMock =
-            $this->getMockBuilder('Magento\OfflineShipping\Model\Resource\Carrier\TablerateFactory')
+            $this->getMockBuilder('Magento\OfflineShipping\Model\ResourceModel\Carrier\TablerateFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -33,7 +33,7 @@ class TablerateTest extends \PHPUnit_Framework_TestCase
 
     public function testAfterSave()
     {
-        $tablerateMock = $this->getMockBuilder('Magento\OfflineShipping\Model\Resource\Carrier\Tablerate')
+        $tablerateMock = $this->getMockBuilder('Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate')
             ->disableOriginalConstructor()
             ->setMethods(['uploadAndImport'])
             ->getMock();
diff --git a/app/code/Magento/OfflineShipping/composer.json b/app/code/Magento/OfflineShipping/composer.json
index bb186fb3aeaa78345018819b57bf202955b12820..37d63fb749b2a2d5cba663c1340164ee9f43a3ce 100644
--- a/app/code/Magento/OfflineShipping/composer.json
+++ b/app/code/Magento/OfflineShipping/composer.json
@@ -15,7 +15,8 @@
         "magento/framework": "1.0.0-beta"
     },
     "suggest": {
-        "magento/module-checkout": "1.0.0-beta"
+        "magento/module-checkout": "1.0.0-beta",
+        "magento/module-offline-shipping-sample-data": "Sample Data version:1.0.0-beta"
     },
     "type": "magento2-module",
     "version": "1.0.0-beta",
diff --git a/app/code/Magento/OfflineShipping/etc/adminhtml/events.xml b/app/code/Magento/OfflineShipping/etc/adminhtml/events.xml
index 2c0f82125862dfaa125fb6caa2ad55588f53d30b..fa0a834c0ee7d31df0ef515c7a1251d0a36199c5 100644
--- a/app/code/Magento/OfflineShipping/etc/adminhtml/events.xml
+++ b/app/code/Magento/OfflineShipping/etc/adminhtml/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="adminhtml_block_salesrule_actions_prepareform">
-        <observer name="offlineshipping_salesrule" instance="Magento\OfflineShipping\Observer\SalesRule\ActionsTabPrepareFormObserver" method="execute" />
+        <observer name="offlineshipping_salesrule" instance="Magento\OfflineShipping\Observer\SalesRule\ActionsTabPrepareFormObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/PageCache/etc/events.xml b/app/code/Magento/PageCache/etc/events.xml
index dbe6c9bdc4bd5adfe53abcb82495f2c6140ee4a9..349d36d123d18103c77a0b595c75219e71472c35 100644
--- a/app/code/Magento/PageCache/etc/events.xml
+++ b/app/code/Magento/PageCache/etc/events.xml
@@ -7,53 +7,53 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="core_layout_render_element">
-        <observer name="pagecache" instance="Magento\PageCache\Observer\ProcessLayoutRenderElement" method="execute" />
+        <observer name="pagecache" instance="Magento\PageCache\Observer\ProcessLayoutRenderElement" />
     </event>
     <event name="clean_cache_by_tags">
-        <observer name="invalidate_builtin" instance="Magento\PageCache\Observer\FlushCacheByTags" method="execute" />
+        <observer name="invalidate_builtin" instance="Magento\PageCache\Observer\FlushCacheByTags" />
     </event>
     <event name="clean_cache_after_reindex">
-        <observer name="reindex_cache_flush" instance="Magento\PageCache\Observer\InvalidateCacheIfChanged" method="execute" />
+        <observer name="reindex_cache_flush" instance="Magento\PageCache\Observer\InvalidateCacheIfChanged" />
     </event>
     <event name="adminhtml_cache_flush_system">
-        <observer name="flush_system_pagecache" instance="Magento\PageCache\Observer\FlushAllCache" method="execute" />
+        <observer name="flush_system_pagecache" instance="Magento\PageCache\Observer\FlushAllCache" />
     </event>
     <event name="adminhtml_cache_flush_all">
-        <observer name="magento_all_pagecache" instance="Magento\PageCache\Observer\FlushAllCache" method="execute" />
+        <observer name="magento_all_pagecache" instance="Magento\PageCache\Observer\FlushAllCache" />
     </event>
     <event name="clean_media_cache_after">
-        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" method="execute" />
+        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" />
     </event>
     <event name="clean_catalog_images_cache_after">
-        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" method="execute" />
+        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" />
     </event>
     <event name="assigned_theme_changed">
-        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\FlushCacheByTags" method="execute" />
+        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\FlushCacheByTags" />
     </event>
     <event name="assign_theme_to_stores_after">
-        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" method="execute" />
+        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" />
     </event>
     <event name="controller_action_postdispatch_adminhtml_system_currency_saveRates">
-        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" method="execute" />
+        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" />
     </event>
     <event name="controller_action_postdispatch_adminhtml_system_config_save">
-        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" method="execute" />
+        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" />
     </event>
     <event name="controller_action_postdispatch_catalog_product_save">
-        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\FlushCacheByTags" method="execute" />
+        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\FlushCacheByTags" />
     </event>
     <event name="controller_action_postdispatch_adminhtml_system_currencysymbol_save">
-        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" method="execute" />
+        <observer name="flush_all_pagecache" instance="Magento\PageCache\Observer\InvalidateCache" />
     </event>
     <event name="model_save_commit_after">
-        <observer name="flush_cache_after_model_save" instance="Magento\PageCache\Observer\FlushCacheByTags" method="execute" />
+        <observer name="flush_cache_after_model_save" instance="Magento\PageCache\Observer\FlushCacheByTags" />
     </event>
     <event name="controller_action_predispatch">
         <observer name="register_form_key"
                   instance="Magento\PageCache\Observer\RegisterFormKeyFromCookie"
-                  method="execute" />
+                  />
     </event>
     <event name="customer_logout">
-        <observer name="FlushFormKeyOnLogout" instance="Magento\PageCache\Observer\FlushFormKeyOnLogout" method="execute"/>
+        <observer name="FlushFormKeyOnLogout" instance="Magento\PageCache\Observer\FlushFormKeyOnLogout"/>
     </event>
 </config>
diff --git a/app/code/Magento/Payment/Model/Checks/CanUseForCountry/CountryProvider.php b/app/code/Magento/Payment/Model/Checks/CanUseForCountry/CountryProvider.php
index 8bbdbef28307a9d0a8fd6ae8ef5d2f14808ed5a0..efd63ae579a5c9408560825c0118b8525b4d4d82 100644
--- a/app/code/Magento/Payment/Model/Checks/CanUseForCountry/CountryProvider.php
+++ b/app/code/Magento/Payment/Model/Checks/CanUseForCountry/CountryProvider.php
@@ -31,8 +31,9 @@ class CountryProvider
      */
     public function getCountry(Quote $quote)
     {
-        return $quote->isVirtual()
-            ? $this->directoryHelper->getDefaultCountry()
-            : $quote->getShippingAddress()->getCountry();
+        $address = $quote->isVirtual() ? $quote->getBillingAddress() : $quote->getShippingAddress();
+        return $address
+            ? $address->getCountry()
+            : $this->directoryHelper->getDefaultCountry();
     }
 }
diff --git a/app/code/Magento/Payment/Model/Info.php b/app/code/Magento/Payment/Model/Info.php
index 87e62e44808f5996f8ececaa0c5215edb778063e..4ba972b321f11db3b68d756c35bc93f62b4ddc0c 100644
--- a/app/code/Magento/Payment/Model/Info.php
+++ b/app/code/Magento/Payment/Model/Info.php
@@ -38,7 +38,7 @@ class Info extends AbstractExtensibleModel implements InfoInterface
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
      * @param \Magento\Payment\Helper\Data $paymentData
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -49,7 +49,7 @@ class Info extends AbstractExtensibleModel implements InfoInterface
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
         \Magento\Payment\Helper\Data $paymentData,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Payment/Model/Method/AbstractMethod.php b/app/code/Magento/Payment/Model/Method/AbstractMethod.php
index 9d8ba1fffd62c5239ea8735c38a28916d4e67a5f..8e6300b62584bc97e07053e2cc04f2e0bc485967 100644
--- a/app/code/Magento/Payment/Model/Method/AbstractMethod.php
+++ b/app/code/Magento/Payment/Model/Method/AbstractMethod.php
@@ -221,7 +221,7 @@ abstract class AbstractMethod extends \Magento\Framework\Model\AbstractExtensibl
      * @param \Magento\Payment\Helper\Data $paymentData
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param Logger $logger
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -234,7 +234,7 @@ abstract class AbstractMethod extends \Magento\Framework\Model\AbstractExtensibl
         \Magento\Payment\Helper\Data $paymentData,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Payment\Model\Method\Logger $logger,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Payment/Model/Method/Cc.php b/app/code/Magento/Payment/Model/Method/Cc.php
index 8732031b70e55c613b2392d452263ba6f54f8be5..1bf0ab267e2b9d00f252ab40499d4df47556c483 100644
--- a/app/code/Magento/Payment/Model/Method/Cc.php
+++ b/app/code/Magento/Payment/Model/Method/Cc.php
@@ -46,7 +46,7 @@ class Cc extends \Magento\Payment\Model\Method\AbstractMethod
      * @param Logger $logger
      * @param \Magento\Framework\Module\ModuleListInterface $moduleList
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -61,7 +61,7 @@ class Cc extends \Magento\Payment\Model\Method\AbstractMethod
         \Magento\Payment\Model\Method\Logger $logger,
         \Magento\Framework\Module\ModuleListInterface $moduleList,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Payment/Model/Method/Free.php b/app/code/Magento/Payment/Model/Method/Free.php
index 4c05a512cd56847dda603045c2c938df24c0cdc4..dd534c8a58f1a949b4c1ea16611f526ee3b8abe8 100644
--- a/app/code/Magento/Payment/Model/Method/Free.php
+++ b/app/code/Magento/Payment/Model/Method/Free.php
@@ -52,7 +52,7 @@ class Free extends \Magento\Payment\Model\Method\AbstractMethod
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param Logger $logger
      * @param PriceCurrencyInterface $priceCurrency
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -66,7 +66,7 @@ class Free extends \Magento\Payment\Model\Method\AbstractMethod
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Payment\Model\Method\Logger $logger,
         PriceCurrencyInterface $priceCurrency,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Payment/Model/Resource/Grid/GroupList.php b/app/code/Magento/Payment/Model/ResourceModel/Grid/GroupList.php
similarity index 93%
rename from app/code/Magento/Payment/Model/Resource/Grid/GroupList.php
rename to app/code/Magento/Payment/Model/ResourceModel/Grid/GroupList.php
index f86cebcac58f5465bf4ea3d5b65e7393240aef08..e22c89e9be698b77c3a29c4fefb3541cc6dae48c 100644
--- a/app/code/Magento/Payment/Model/Resource/Grid/GroupList.php
+++ b/app/code/Magento/Payment/Model/ResourceModel/Grid/GroupList.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Payment\Model\Resource\Grid;
+namespace Magento\Payment\Model\ResourceModel\Grid;
 
 /**
  * Sales transaction types option array
diff --git a/app/code/Magento/Payment/Model/Resource/Grid/TypeList.php b/app/code/Magento/Payment/Model/ResourceModel/Grid/TypeList.php
similarity index 93%
rename from app/code/Magento/Payment/Model/Resource/Grid/TypeList.php
rename to app/code/Magento/Payment/Model/ResourceModel/Grid/TypeList.php
index 9948f7f5b1753d870f5c5bd80ad172ea27b4978e..0f87c3089dc7fa3f9636fa31de9afc6fbb13b7ac 100644
--- a/app/code/Magento/Payment/Model/Resource/Grid/TypeList.php
+++ b/app/code/Magento/Payment/Model/ResourceModel/Grid/TypeList.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Payment\Model\Resource\Grid;
+namespace Magento\Payment\Model\ResourceModel\Grid;
 
 /**
  * Sales transaction payment method types option array
diff --git a/app/code/Magento/Payment/Observer/UpdateOrderStatusForPaymentMethodsObserver.php b/app/code/Magento/Payment/Observer/UpdateOrderStatusForPaymentMethodsObserver.php
index 66adf9ebffad18f5bdc2365e449fa59ad47e5ad6..40426a972f475a3890dc4f785feb2cf4a9765652 100644
--- a/app/code/Magento/Payment/Observer/UpdateOrderStatusForPaymentMethodsObserver.php
+++ b/app/code/Magento/Payment/Observer/UpdateOrderStatusForPaymentMethodsObserver.php
@@ -21,7 +21,7 @@ class UpdateOrderStatusForPaymentMethodsObserver implements ObserverInterface
     protected $_paymentConfig;
 
     /**
-     * @var \Magento\Config\Model\Resource\Config
+     * @var \Magento\Config\Model\ResourceModel\Config
      */
     protected $_resourceConfig;
 
@@ -30,12 +30,12 @@ class UpdateOrderStatusForPaymentMethodsObserver implements ObserverInterface
      *
      * @param \Magento\Sales\Model\Order\Config $salesOrderConfig
      * @param \Magento\Payment\Model\Config $paymentConfig
-     * @param \Magento\Config\Model\Resource\Config $resourceConfig
+     * @param \Magento\Config\Model\ResourceModel\Config $resourceConfig
      */
     public function __construct(
         \Magento\Sales\Model\Order\Config $salesOrderConfig,
         \Magento\Payment\Model\Config $paymentConfig,
-        \Magento\Config\Model\Resource\Config $resourceConfig
+        \Magento\Config\Model\ResourceModel\Config $resourceConfig
     ) {
         $this->_salesOrderConfig = $salesOrderConfig;
         $this->_paymentConfig = $paymentConfig;
diff --git a/app/code/Magento/Payment/Test/Unit/Model/Checks/CanUseForCountry/CountryProviderTest.php b/app/code/Magento/Payment/Test/Unit/Model/Checks/CanUseForCountry/CountryProviderTest.php
index 13f1ad7d41451b30dc1e7c5a5fb8afab37d755e2..89fac656c32c26e2e679b285bbe9111944c9ea9e 100644
--- a/app/code/Magento/Payment/Test/Unit/Model/Checks/CanUseForCountry/CountryProviderTest.php
+++ b/app/code/Magento/Payment/Test/Unit/Model/Checks/CanUseForCountry/CountryProviderTest.php
@@ -33,14 +33,27 @@ class CountryProviderTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(1, $this->model->getCountry($quoteMock));
     }
 
-    public function testGetCountryForVirtualQuote()
+    public function testGetCountryForVirtualQuoteWhenBillingAddressNotExist()
     {
         $quoteMock = $this->getMock('Magento\Quote\Model\Quote', [], [], '', false, false);
         $quoteMock->expects($this->once())->method('isVirtual')->willReturn(true);
         $addressMock = $this->getMock('Magento\Quote\Model\Quote\Address', [], [], '', false, false);
         $addressMock->expects($this->never())->method('getCountry');
         $quoteMock->expects($this->never())->method('getShippingAddress');
+        $quoteMock->expects($this->once())->method('getBillingAddress')->willReturn(null);
         $this->directoryMock->expects($this->once())->method('getDefaultCountry')->willReturn(10);
         $this->assertEquals(10, $this->model->getCountry($quoteMock));
     }
+
+    public function testGetCountryForVirtualQuoteWhenBillingAddressExist()
+    {
+        $quoteMock = $this->getMock('Magento\Quote\Model\Quote', [], [], '', false, false);
+        $quoteMock->expects($this->once())->method('isVirtual')->willReturn(true);
+        $addressMock = $this->getMock('Magento\Quote\Model\Quote\Address', [], [], '', false, false);
+        $addressMock->expects($this->once())->method('getCountry')->willReturn(10);
+        $quoteMock->expects($this->never())->method('getShippingAddress');
+        $quoteMock->expects($this->once())->method('getBillingAddress')->willReturn($addressMock);
+        $this->directoryMock->expects($this->never())->method('getDefaultCountry');
+        $this->assertEquals(10, $this->model->getCountry($quoteMock));
+    }
 }
diff --git a/app/code/Magento/Payment/Test/Unit/Model/Resource/Grid/GroupListTest.php b/app/code/Magento/Payment/Test/Unit/Model/ResourceModel/Grid/GroupListTest.php
similarity index 83%
rename from app/code/Magento/Payment/Test/Unit/Model/Resource/Grid/GroupListTest.php
rename to app/code/Magento/Payment/Test/Unit/Model/ResourceModel/Grid/GroupListTest.php
index b3035ecc99fd7ad472c543c3e97b10ea130a630f..05a712f37e84bda3a068fb6d4435051463f31b24 100644
--- a/app/code/Magento/Payment/Test/Unit/Model/Resource/Grid/GroupListTest.php
+++ b/app/code/Magento/Payment/Test/Unit/Model/ResourceModel/Grid/GroupListTest.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Payment\Test\Unit\Model\Resource\Grid;
+namespace Magento\Payment\Test\Unit\Model\ResourceModel\Grid;
 
 class GroupListTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Payment\Model\Resource\Grid\GroupsList
+     * @var \Magento\Payment\Model\ResourceModel\Grid\GroupsList
      */
     protected $groupArrayModel;
 
@@ -21,7 +21,7 @@ class GroupListTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->helperMock = $this->getMock('Magento\Payment\Helper\Data', [], [], '', false);
-        $this->groupArrayModel = new \Magento\Payment\Model\Resource\Grid\GroupList($this->helperMock);
+        $this->groupArrayModel = new \Magento\Payment\Model\ResourceModel\Grid\GroupList($this->helperMock);
     }
 
     public function testToOptionArray()
diff --git a/app/code/Magento/Payment/Test/Unit/Model/Resource/Grid/TypeListTest.php b/app/code/Magento/Payment/Test/Unit/Model/ResourceModel/Grid/TypeListTest.php
similarity index 83%
rename from app/code/Magento/Payment/Test/Unit/Model/Resource/Grid/TypeListTest.php
rename to app/code/Magento/Payment/Test/Unit/Model/ResourceModel/Grid/TypeListTest.php
index eb4b291f9a2c15c991f96f5c55a06e311cbf30aa..2348a491bd006c0df37c68c961729a396b5b3e26 100644
--- a/app/code/Magento/Payment/Test/Unit/Model/Resource/Grid/TypeListTest.php
+++ b/app/code/Magento/Payment/Test/Unit/Model/ResourceModel/Grid/TypeListTest.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Payment\Test\Unit\Model\Resource\Grid;
+namespace Magento\Payment\Test\Unit\Model\ResourceModel\Grid;
 
 class TypeListTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Payment\Model\Resource\Grid\TypeList
+     * @var \Magento\Payment\Model\ResourceModel\Grid\TypeList
      */
     protected $typesArrayModel;
 
@@ -21,7 +21,7 @@ class TypeListTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->helperMock = $this->getMock('Magento\Payment\Helper\Data', [], [], '', false);
-        $this->typesArrayModel = new \Magento\Payment\Model\Resource\Grid\TypeList($this->helperMock);
+        $this->typesArrayModel = new \Magento\Payment\Model\ResourceModel\Grid\TypeList($this->helperMock);
     }
 
     public function testToOptionArray()
diff --git a/app/code/Magento/Payment/Test/Unit/Observer/UpdateOrderStatusForPaymentMethodsObserverTest.php b/app/code/Magento/Payment/Test/Unit/Observer/UpdateOrderStatusForPaymentMethodsObserverTest.php
index a8e927546674c0609cc76b1c8721a4b81db44530..0e8eaa59a3dce84472eef20078b246d1db31a31c 100644
--- a/app/code/Magento/Payment/Test/Unit/Observer/UpdateOrderStatusForPaymentMethodsObserverTest.php
+++ b/app/code/Magento/Payment/Test/Unit/Observer/UpdateOrderStatusForPaymentMethodsObserverTest.php
@@ -22,7 +22,7 @@ class UpdateOrderStatusForPaymentMethodsObserverTest extends \PHPUnit_Framework_
     /** @var \Magento\Payment\Model\Config|\PHPUnit_Framework_MockObject_MockObject */
     protected $paymentConfigMock;
 
-    /** @var \Magento\Config\Model\Resource\Config|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Config\Model\ResourceModel\Config|\PHPUnit_Framework_MockObject_MockObject */
     protected $coreResourceConfigMock;
 
     /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject */
@@ -39,7 +39,7 @@ class UpdateOrderStatusForPaymentMethodsObserverTest extends \PHPUnit_Framework_
     {
         $this->orderConfigMock = $this->getMock('Magento\Sales\Model\Order\Config', [], [], '', false);
         $this->paymentConfigMock = $this->getMock('Magento\Payment\Model\Config', [], [], '', false);
-        $this->coreResourceConfigMock = $this->getMock('Magento\Config\Model\Resource\Config', [], [], '', false);
+        $this->coreResourceConfigMock = $this->getMock('Magento\Config\Model\ResourceModel\Config', [], [], '', false);
 
         $this->objectManagerHelper = new ObjectManagerHelper($this);
         $this->updateOrderStatusForPaymentMethodsObserver = $this->objectManagerHelper->getObject(
diff --git a/app/code/Magento/Payment/etc/events.xml b/app/code/Magento/Payment/etc/events.xml
index 0dfee90e37a4f3169d100e29c2fe0bd67f98d7c0..74f31660c81f787d9e240b4bc79084ef24bf85ef 100644
--- a/app/code/Magento/Payment/etc/events.xml
+++ b/app/code/Magento/Payment/etc/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_order_save_before">
-        <observer name="payment_sales_order_save_before" instance="Magento\Payment\Observer\SalesOrderBeforeSaveObserver" method="execute" />
+        <observer name="payment_sales_order_save_before" instance="Magento\Payment\Observer\SalesOrderBeforeSaveObserver" />
     </event>
     <event name="sales_order_status_unassign">
-        <observer name="sales_order_status_update" instance="Magento\Payment\Observer\UpdateOrderStatusForPaymentMethodsObserver" method="execute" />
+        <observer name="sales_order_status_update" instance="Magento\Payment\Observer\UpdateOrderStatusForPaymentMethodsObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Payment/i18n/de_DE.csv b/app/code/Magento/Payment/i18n/de_DE.csv
index 2c9f2f6402717eda6ad37579f72311b83c3ebbde..e0d1047b776e67418ac402ebdd7fd256c2ce6cca 100644
--- a/app/code/Magento/Payment/i18n/de_DE.csv
+++ b/app/code/Magento/Payment/i18n/de_DE.csv
@@ -37,5 +37,5 @@ Year,Jahr
 "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date."
 "Switch/Solo/Maestro Only","Nur Switch/Solo/Maestro"
 "Issue Number",Ausgabenumer
-"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions."
+" is not available. You still can process offline actions."," is not available. You still can process offline actions."
 "Payment Methods","Payment Methods"
diff --git a/app/code/Magento/Payment/i18n/en_US.csv b/app/code/Magento/Payment/i18n/en_US.csv
index 0519acbd15f3ead687ea592a0de1dec47189632f..6ecc7884d0c65e4e3d31563090b7adc21fe2c92c 100644
--- a/app/code/Magento/Payment/i18n/en_US.csv
+++ b/app/code/Magento/Payment/i18n/en_US.csv
@@ -37,5 +37,5 @@ Year,Year
 "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date."
 "Switch/Solo/Maestro Only","Switch/Solo/Maestro Only"
 "Issue Number","Issue Number"
-"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions."
+" is not available. You still can process offline actions."," is not available. You still can process offline actions."
 "Payment Methods","Payment Methods"
diff --git a/app/code/Magento/Payment/i18n/es_ES.csv b/app/code/Magento/Payment/i18n/es_ES.csv
index a80e5bd794fb50e1664a6d7d812946db67c028eb..a71a050dded6aa5ccfadb30d13f8413cf55c83b8 100644
--- a/app/code/Magento/Payment/i18n/es_ES.csv
+++ b/app/code/Magento/Payment/i18n/es_ES.csv
@@ -37,5 +37,5 @@ Year,Año
 "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date."
 "Switch/Solo/Maestro Only","Únicamente Switch/Solo/Maestro"
 "Issue Number","Número de emisión"
-"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions."
+" is not available. You still can process offline actions."," is not available. You still can process offline actions."
 "Payment Methods","Payment Methods"
diff --git a/app/code/Magento/Payment/i18n/fr_FR.csv b/app/code/Magento/Payment/i18n/fr_FR.csv
index 76bf63d45f72cf7751012ee7d25a4c03b72a2f3e..9b357d40e6ae0b158b1032afbcad8b8abb548304 100644
--- a/app/code/Magento/Payment/i18n/fr_FR.csv
+++ b/app/code/Magento/Payment/i18n/fr_FR.csv
@@ -37,5 +37,5 @@ Year,Année
 "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date."
 "Switch/Solo/Maestro Only","Switch/Solo/Maestro seulement"
 "Issue Number","Numéro du problème."
-"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions."
+" is not available. You still can process offline actions."," is not available. You still can process offline actions."
 "Payment Methods","Payment Methods"
diff --git a/app/code/Magento/Payment/i18n/nl_NL.csv b/app/code/Magento/Payment/i18n/nl_NL.csv
index d4a6fef21f1f6338caea6a210c76212d88f7b192..1875b49cfccec440443ce0089e18d9a3fbdd84b2 100644
--- a/app/code/Magento/Payment/i18n/nl_NL.csv
+++ b/app/code/Magento/Payment/i18n/nl_NL.csv
@@ -37,5 +37,5 @@ Year,Jaar
 "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date."
 "Switch/Solo/Maestro Only","Alleen Switch/Solo/Maestro"
 "Issue Number","Uitgave Nummer"
-"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions."
+" is not available. You still can process offline actions."," is not available. You still can process offline actions."
 "Payment Methods","Payment Methods"
diff --git a/app/code/Magento/Payment/i18n/pt_BR.csv b/app/code/Magento/Payment/i18n/pt_BR.csv
index 49e6490333771f611b013a5786df1b81d071d06b..bdf92c19deebdfac2d59d011e55076b7e6e4daeb 100644
--- a/app/code/Magento/Payment/i18n/pt_BR.csv
+++ b/app/code/Magento/Payment/i18n/pt_BR.csv
@@ -37,5 +37,5 @@ Year,Ano
 "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date."
 "Switch/Solo/Maestro Only","Somente Swith/Solo/Maestro"
 "Issue Number","Número de Emissão"
-"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions."
+" is not available. You still can process offline actions."," is not available. You still can process offline actions."
 "Payment Methods","Payment Methods"
diff --git a/app/code/Magento/Payment/i18n/zh_Hans_CN.csv b/app/code/Magento/Payment/i18n/zh_Hans_CN.csv
index c430c9d97f2328e485603018c53d3ac82a05e8fa..39e485577e9aad838a857b20a4c0b619adc3dde5 100644
--- a/app/code/Magento/Payment/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Payment/i18n/zh_Hans_CN.csv
@@ -37,5 +37,5 @@ Year,å¹´
 "We found an incorrect credit card expiration date.","We found an incorrect credit card expiration date."
 "Switch/Solo/Maestro Only","仅限 Switch/Solo/Maestro"
 "Issue Number",问题编号
-"%1 is not available. You still can process offline actions.","%1 is not available. You still can process offline actions."
+" is not available. You still can process offline actions."," is not available. You still can process offline actions."
 "Payment Methods","Payment Methods"
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml b/app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml
index 4e5abb08bcab754585016fa8a4fb4a3fd280cbe8..ab38d3752a679f68d8a0371d087c126268707a99 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/form/cc.phtml
@@ -5,48 +5,63 @@
  */
 
 // @codingStandardsIgnoreFile
-
+/**
+ * @var \Magento\Payment\Block\Adminhtml\Transparent\Form $block
+ */
+$code = $block->getMethodCode();
+$ccType = $block->getInfoData('cc_type');
+$ccExpMonth = $block->getInfoData('cc_exp_month');
+$ccExpYear = $block->getInfoData('cc_exp_year');
 ?>
-<?php $_code = $block->getMethodCode() ?>
-<fieldset class="admin__fieldset payment-method" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none">
+<fieldset class="admin__fieldset payment-method" id="payment_form_<?php /* @noEscape */ echo $code; ?>"
+          style="display:none">
     <div class="field-type admin__field _required">
-        <label class="admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"><span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span></label>
+        <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_type">
+            <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span>
+        </label>
         <div class="admin__field-control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" name="payment[cc_type]" class="required-entry validate-cc-type-select admin__control-select">
-                <?php $_ccType = $block->getInfoData('cc_type') ?>
+            <select id="<?php /* @noEscape */ echo $code; ?>_cc_type" name="payment[cc_type]"
+                    class="required-entry validate-cc-type-select admin__control-select">
                 <option value=""></option>
-                <?php foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
-                    <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>" <?php if ($_typeCode == $_ccType): ?>selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option>
+                <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?>
+                    <option value="<?php echo $block->escapeHtml($typeCode); ?>" <?php if ($typeCode == $ccType): ?>selected="selected"<?php endif ?>>
+                        <?php echo $block->escapeHtml($typeName); ?>
+                    </option>
                 <?php endforeach ?>
             </select>
         </div>
     </div>
     <div class="field-number admin__field _required">
-        <label class="admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number"><span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span></label>
+        <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_number">
+            <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span>
+        </label>
         <div class="admin__field-control">
-            <input type="text" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" name="payment[cc_number]"
-                   title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" class="admin__control-text validate-cc-number"
-                   value="<?php /* @escapeNotVerified */ echo $block->getInfoData('cc_number') ?>"/>
+            <input type="text" id="<?php /* @noEscape */ echo $code; ?>_cc_number" name="payment[cc_number]"
+                   title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>" class="admin__control-text validate-cc-number"
+                   value="<?php /* @noEscape */ echo $block->getInfoData('cc_number'); ?>"/>
         </div>
     </div>
     <div class="field-date admin__field _required">
-        <label class="admin__field-label"
-               for="<?php /* @escapeNotVerified */ echo $_code ?>_expiration"><span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span></label>
+        <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_expiration">
+            <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span>
+        </label>
         <div class="admin__field-control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" name="payment[cc_exp_month]"
+            <select id="<?php /* @noEscape */ echo $code ?>_expiration" name="payment[cc_exp_month]"
                     class="admin__control-select admin__control-select-month validate-cc-exp required-entry">
-                <?php $_ccExpMonth = $block->getInfoData('cc_exp_month') ?>
                 <?php foreach ($block->getCcMonths() as $k => $v): ?>
-                    <option value="<?php /* @escapeNotVerified */ echo $k ?>"
-                            <?php if ($k == $_ccExpMonth): ?>selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-                <?php endforeach ?>
+                    <option value="<?php echo $block->escapeHtml($k); ?>"
+                            <?php if ($k == $ccExpMonth): ?>selected="selected"<?php endif ?>>
+                        <?php echo $block->escapeHtml($v); ?>
+                    </option>
+                <?php endforeach; ?>
             </select>
-            <?php $_ccExpYear = $block->getInfoData('cc_exp_year') ?>
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr" name="payment[cc_exp_year]"
+            <select id="<?php /* @noEscape */ echo $code ?>_expiration_yr" name="payment[cc_exp_year]"
                     class="admin__control-select admin__control-select-year required-entry">
                 <?php foreach ($block->getCcYears() as $k => $v): ?>
-                    <option value="<?php /* @escapeNotVerified */ echo $k ? $k : '' ?>"
-                            <?php if ($k == $_ccExpYear): ?>selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
+                    <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>"
+                            <?php if ($k == $ccExpYear): ?>selected="selected"<?php endif ?>>
+                        <?php echo $block->escapeHtml($v); ?>
+                    </option>
                 <?php endforeach ?>
             </select>
         </div>
@@ -54,44 +69,58 @@
 
     <?php if ($block->hasVerification()): ?>
         <div class="field-number required admin__field _required">
-            <label class="admin__field-label"
-                   for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid"><span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span></label>
+            <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_cid">
+                <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span>
+            </label>
             <div class="admin__field-control">
-                <input type="text" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>"
+                <input type="text" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>"
                        class="required-entry validate-cc-cvn admin__control-cvn admin__control-text"
-                       id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid"
-                       name="payment[cc_cid]" value="<?php /* @escapeNotVerified */ echo $block->getInfoData('cc_cid') ?>"/>
+                       id="<?php /* @noEscape */ echo $code; ?>_cc_cid"
+                       name="payment[cc_cid]" value="<?php /* @noEscape */ echo $block->getInfoData('cc_cid') ?>"/>
             </div>
         </div>
     <?php endif; ?>
 
     <?php if ($block->hasSsCardType()): ?>
-        <div id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div">
+        <div id="<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div">
             <div class="field-type required admin__field _required">
-                <label class="admin__field-label"
-                       for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_issue"><span><?php /* @escapeNotVerified */ echo __('Switch/Solo/Maestro Only') ?></span></label>
+                <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_cc_issue">
+                    <span><?php echo $block->escapeHtml(__('Switch/Solo/Maestro Only')); ?></span>
+                </label>
             </div>
             <div class="admin__field field-issue">
                 <label class="admin__field-label"
-                       for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_issue"><span><?php /* @escapeNotVerified */ echo __('Issue Number') ?></span></label>
+                       for="<?php /* @noEscape */ echo $code; ?>_cc_issue">
+                    <span><?php echo $block->escapeHtml(__('Issue Number')); ?></span>
+                </label>
 
                 <div class="admin__field-control">
-                    <input type="text" title="<?php /* @escapeNotVerified */ echo __('Issue Number') ?>"
+                    <input type="text" title="<?php echo $block->escapeHtml(__('Issue Number')); ?>"
                            class="validate-cc-ukss cvv admin__control-cvv admin__control-text"
-                           id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_issue" name="payment[cc_ss_issue]" value=""/>
+                           id="<?php /* @noEscape */ echo $code; ?>_cc_issue" name="payment[cc_ss_issue]" value=""/>
                 </div>
             </div>
             <div class="field field-date">
-                <label class="admin__field-label" for="<?php /* @escapeNotVerified */ echo $_code ?>_start_month"><span><?php /* @escapeNotVerified */ echo __('Start Date') ?></span></label>
+                <label class="admin__field-label" for="<?php /* @noEscape */ echo $code; ?>_start_month">
+                    <span><?php echo $block->escapeHtml(__('Start Date')); ?></span>
+                </label>
                 <div class="admin__field-control">
-                    <select id="<?php /* @escapeNotVerified */ echo $_code ?>_start_month" name="payment[cc_ss_start_month]" class="validate-cc-ukss admin__control-select admin__control-select-month">
+                    <select id="<?php /* @noEscape */ echo $code; ?>_start_month" name="payment[cc_ss_start_month]"
+                            class="validate-cc-ukss admin__control-select admin__control-select-month">
                         <?php foreach ($block->getCcMonths() as $k => $v): ?>
-                            <option value="<?php /* @escapeNotVerified */ echo $k ? $k : '' ?>"<?php if ($k == $block->getInfoData('cc_ss_start_month')): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
+                            <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>"
+                                <?php if ($k == $block->getInfoData('cc_ss_start_month')): ?> selected="selected"<?php endif ?>>
+                                <?php echo $block->escapeHtml($v); ?>
+                            </option>
                         <?php endforeach ?>
                     </select>
-                    <select id="<?php /* @escapeNotVerified */ echo $_code ?>_start_year" name="payment[cc_ss_start_year]" class="validate-cc-ukss admin__control-select admin__control-select-year">
+                    <select id="<?php /* @noEscape */ echo $code; ?>_start_year" name="payment[cc_ss_start_year]"
+                            class="validate-cc-ukss admin__control-select admin__control-select-year">
                         <?php foreach ($block->getSsStartYears() as $k => $v): ?>
-                            <option value="<?php /* @escapeNotVerified */ echo $k ? $k : '' ?>"<?php if ($k == $block->getInfoData('cc_ss_start_year')): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
+                            <option value="<?php /* @noEscape */ echo $block->escapeHtml($k) ? $k : '' ?>"
+                                <?php if ($k == $block->getInfoData('cc_ss_start_year')): ?> selected="selected"<?php endif ?>>
+                                <?php echo $block->escapeHtml($v); ?>
+                            </option>
                         <?php endforeach ?>
                     </select>
                 </div>
@@ -103,16 +132,16 @@
 require(['jquery', 'prototype'], function(jQuery){
 
     //<![CDATA[
-    SSChecked<?php /* @escapeNotVerified */ echo $_code ?> = function() {
-        var elm = $('<?php /* @escapeNotVerified */ echo $_code ?>_cc_type');
+    SSChecked<?php /* @noEscape */ echo $code; ?> = function() {
+        var elm = $('<?php /* @noEscape */ echo $code; ?>_cc_type');
         if (['SS','SM','SO'].indexOf(elm.value) != -1) {
-            jQuery('#' + '<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div').show().removeClass('ignore-validate');
+            jQuery('#' + '<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div').show().removeClass('ignore-validate');
         } else {
-            jQuery('#' + '<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div').hide().addClass('ignore-validate');
+            jQuery('#' + '<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div').hide().addClass('ignore-validate');
         }
     };
-    Event.observe($('<?php /* @escapeNotVerified */ echo $_code ?>_cc_type'), 'change', SSChecked<?php /* @escapeNotVerified */ echo $_code ?>);
-    SSChecked<?php /* @escapeNotVerified */ echo $_code ?>();
+    Event.observe($('<?php /* @noEscape */ echo $code; ?>_cc_type'), 'change', SSChecked<?php /* @noEscape */ echo $code; ?>);
+    SSChecked<?php /* @noEscape */ echo $code; ?>();
     //]]>
 
 });
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml b/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml
index 2dc4078410ab42a7cb94a9e561ce575f52211523..2ce70dcad46a2f0b06e69eecf856cc6fe6bb9c05 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/info/default.phtml
@@ -5,24 +5,25 @@
  */
 
 // @codingStandardsIgnoreFile
-
-?>
-<?php
 /**
+ * @var \Magento\Payment\Block\Info $block
  * @see \Magento\Payment\Block\Info
  */
+$specificInfo = $block->getSpecificInformation();
 ?>
-<?php echo $block->escapeHtml($block->getMethod()->getTitle()) ?>
+<?php echo $block->escapeHtml($block->getMethod()->getTitle()); ?>
 
-<?php if ($_specificInfo = $block->getSpecificInformation()):?>
-<table class="data-table admin__table-secondary">
-<?php foreach ($_specificInfo as $_label => $_value):?>
-    <tr>
-        <th><?php echo $block->escapeHtml($_label)?>:</th>
-        <td><?php /* @escapeNotVerified */ echo nl2br(implode("\n", $block->getValueAsArray($_value, true)))?></td>
-    </tr>
-<?php endforeach; ?>
-</table>
+<?php if ($specificInfo): ?>
+    <table class="data-table admin__table-secondary">
+    <?php foreach ($specificInfo as $label => $value):?>
+        <tr>
+            <th><?php echo $block->escapeHtml($label)?>:</th>
+            <td>
+                <?php /* @noEscape */ echo nl2br($block->escapeHtml(implode("\n", $block->getValueAsArray($value, true))));?>
+            </td>
+        </tr>
+    <?php endforeach; ?>
+    </table>
 <?php endif;?>
 
 <?php echo $block->getChildHtml()?>
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/info/instructions.phtml b/app/code/Magento/Payment/view/adminhtml/templates/info/instructions.phtml
index 07e59ca0519df515b3c650a6ca73f03b9278764e..5cc47d3a63bd88c96608e07414e8afa3b5ee7456 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/info/instructions.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/info/instructions.phtml
@@ -5,20 +5,18 @@
  */
 
 // @codingStandardsIgnoreFile
-
-?>
-<?php
 /**
+ * @var \Magento\Payment\Block\Info $block
  * @see \Magento\Payment\Block\Info
  */
 ?>
-<p><?php echo $block->escapeHtml($block->getMethod()->getTitle()) ?></p>
+<p><?php echo $block->escapeHtml($block->getMethod()->getTitle()); ?></p>
 <?php if ($block->getInstructions()): ?>
-<table>
-    <tbody>
-        <tr>
-            <td><?php /* @escapeNotVerified */ echo nl2br($block->getInstructions()) ?></td>
-        </tr>
-    </tbody>
-</table>
+    <table>
+        <tbody>
+            <tr>
+                <td><?php /* @noEscape */ echo nl2br($block->escapeHtml($block->getInstructions())); ?></td>
+            </tr>
+        </tbody>
+    </table>
 <?php endif; ?>
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/info/pdf/default.phtml b/app/code/Magento/Payment/view/adminhtml/templates/info/pdf/default.phtml
index c4b4f10fba2a7c39b05e519a3bd5abbdb74bdfd0..bb84448162c2d73572d93f668b72d9c380ae97eb 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/info/pdf/default.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/info/pdf/default.phtml
@@ -5,19 +5,19 @@
  */
 
 // @codingStandardsIgnoreFile
-
-?>
-<?php
 /**
  * @see \Magento\Payment\Block\Info
+ * @var \Magento\Payment\Block\Info $block
  */
 ?>
-<?php echo $block->escapeHtml($block->getMethod()->getTitle()) ?>{{pdf_row_separator}}
+<?php echo $block->escapeHtml($block->getMethod()->getTitle()); ?>{{pdf_row_separator}}
 
-<?php if ($_specificInfo = $block->getSpecificInformation()):?>
-<?php foreach ($_specificInfo as $_label => $_value):?>
-<?php /* @escapeNotVerified */ echo $_label ?>: <?php /* @escapeNotVerified */ echo implode(' ', $block->getValueAsArray($_value))?>{{pdf_row_separator}}
-<?php endforeach; ?>
+<?php if ($specificInfo = $block->getSpecificInformation()):?>
+    <?php foreach ($specificInfo as $label => $value):?>
+        <?php echo $block->escapeHtml($label) ?>:
+        <?php echo $block->escapeHtml(implode(' ', $block->getValueAsArray($value)));?>
+        {{pdf_row_separator}}
+    <?php endforeach; ?>
 <?php endif;?>
 
-<?php /* @escapeNotVerified */ echo implode('{{pdf_row_separator}}', $block->getChildPdfAsArray()) ?>
+<?php echo $block->escapeHtml(implode('{{pdf_row_separator}}', $block->getChildPdfAsArray())); ?>
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/info/substitution.phtml b/app/code/Magento/Payment/view/adminhtml/templates/info/substitution.phtml
index b2025ee67cf2d13626ddaa92f057ccd0479a9eb1..87cf0b315843d8d52cc6fcd27348ed7794a9ed82 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/info/substitution.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/info/substitution.phtml
@@ -5,6 +5,11 @@
  */
 
 // @codingStandardsIgnoreFile
-
+/**
+ * @var \Magento\Payment\Block\Info $block
+ */
 ?>
-<div><?php echo __('%1 is not available. You still can process offline actions.', $block->escapeHtml($block->getMethod()->getTitle())) ?></div>
+<div>
+    <?php $block->escapeHtml($block->getMethod()->getTitle());?>
+    <?php echo $block->escapeHtml(__(' is not available. You still can process offline actions.')); ?>
+</div>
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml b/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml
index 90394f8fdaba7a5607ee08bb91fe9c5fa3fcbd67..1bb248e6fd5662bced43e2f7ee9d4c5a942a1f69 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/transparent/form.phtml
@@ -3,114 +3,126 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-?>
-<?php
+
 // @codingStandardsIgnoreFile
 
 /** @var \Magento\Payment\Block\Transparent\Form $block */
 $code = $block->getMethodCode();
+$ccType = $block->getInfoData('cc_type');
+$ccExpYear = $block->getInfoData('cc_exp_year');
+$ccExpMonth = $block->getInfoData('cc_exp_month');
 ?>
 
 <!-- IFRAME for request to Payment Gateway -->
-<iframe id="<?php /* @escapeNotVerified */ echo $code ?>-transparent-iframe"
-        data-container="<?php /* @escapeNotVerified */ echo $code ?>-transparent-iframe"
+<iframe id="<?php /* @noEscape */ echo $code; ?>-transparent-iframe"
+        data-container="<?php /* @noEscape */ echo $code; ?>-transparent-iframe"
         allowtransparency="true"
         frameborder="0"
         name="iframeTransparent"
         style="display: none; width: 100%; background-color: transparent;"
-        src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('blank.html') ?>"></iframe>
+        src="<?php echo $block->escapeUrl($block->getViewFileUrl('blank.html')); ?>"></iframe>
 <fieldset
-    id="payment_form_<?php /* @escapeNotVerified */ echo $code ?>"
+    id="payment_form_<?php /* @noEscape */ echo $code; ?>"
     class="admin__fieldset"
     data-mage-init='{
      "transparent":{
-        "controller":"<?php /* @escapeNotVerified */ echo $block->getRequest()->getControllerName() ?>",
-        "gateway":"<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>",
-        "dateDelim":"<?php /* @escapeNotVerified */ echo $block->getDateDelim() ?>",
-        "cardFieldsMap":<?php /* @escapeNotVerified */ echo $block->getCardFieldsMap() ?>,
-        "orderSaveUrl":"<?php /* @escapeNotVerified */ echo $block->getOrderUrl() ?>",
-        "cgiUrl":"<?php /* @escapeNotVerified */ echo $block->getCgiUrl() ?>",
-        "expireYearLength":"<?php /* @escapeNotVerified */ echo $block->getMethodConfigData('cc_year_length') ?>",
-        "nativeAction":"<?php /* @escapeNotVerified */ echo $block->getUrl('*/*/save', ['_secure' => $block->getRequest()->isSecure()]) ?>"
+        "controller":"<?php echo $block->escapeHtml($block->getRequest()->getControllerName()); ?>",
+        "gateway":"<?php /* @noEscape */ echo $code; ?>",
+        "dateDelim":"<?php echo $block->escapeHtml($block->getDateDelim()); ?>",
+        "cardFieldsMap":<?php /* @noEscape */ echo $block->getCardFieldsMap(); ?>,
+        "orderSaveUrl":"<?php echo $block->escapeUrl($block->getOrderUrl()); ?>",
+        "cgiUrl":"<?php echo $block->escapeUrl($block->getCgiUrl()); ?>",
+        "expireYearLength":"<?php echo $block->escapeHtml($block->getMethodConfigData('cc_year_length')); ?>",
+        "nativeAction":"<?php echo $block->escapeUrl($block->getUrl('*/*/save', ['_secure' => $block->getRequest()->isSecure()])); ?>"
       }, "validation":[]}'
     style="display: none;">
     <div class="admin__field _required">
-        <label for="<?php /* @escapeNotVerified */ echo $code ?>_cc_type" class="admin__field-label">
-            <span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span>
+        <label for="<?php /* @noEscape */ echo $code; ?>_cc_type" class="admin__field-label">
+            <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span>
         </label>
 
         <div class="admin__field-control">
-            <select id="<?php /* @escapeNotVerified */ echo $code ?>_cc_type"
-                    data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-type"
+            <select id="<?php /* @noEscape */ echo $code; ?>_cc_type"
+                    data-container="<?php /* @noEscape */ echo $code; ?>-cc-type"
                     name="payment[cc_type]"
-                    data-validate='{required:true, "validate-cc-type-select":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_number"}'
+                    data-validate='{required:true, "validate-cc-type-select":"#<?php /* @noEscape */ echo $code; ?>_cc_number"}'
                     class="admin__control-select">
-                <option value=""><?php /* @escapeNotVerified */ echo __('Please Select') ?></option>
-                <?php $_ccType = $block->getInfoData('cc_type') ?>
-                <?php foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
+                <option value=""><?php echo $block->escapeHtml(__('Please Select')); ?></option>
+                <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?>
                     <option
-                        value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"<?php if ($_typeCode == $_ccType): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option>
+                        value="<?php echo $block->escapeHtml($typeCode); ?>"<?php if ($typeCode == $ccType): ?> selected="selected"<?php endif ?>>
+                        <?php echo $block->escapeHtml($typeName); ?>
+                    </option>
                 <?php endforeach ?>
             </select>
         </div>
     </div>
 
     <div class="admin__field _required field-number">
-        <label for="<?php /* @escapeNotVerified */ echo $code ?>_cc_number" class="admin__field-label">
-            <span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span>
+        <label for="<?php /* @noEscape */ echo $code; ?>_cc_number" class="admin__field-label">
+            <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span>
         </label>
 
         <div class="admin__field-control">
-            <input type="text" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_number" data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-number"
-                   name="payment[cc_number]" title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>"
+            <input type="text" id="<?php /* @noEscape */ echo $code; ?>_cc_number"
+                   data-container="<?php /* @noEscape */ echo $code; ?>-cc-number"
+                   name="payment[cc_number]" title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>"
                    class="admin__control-text"
                    value=""
-                   data-validate='{"required-number":true, "validate-cc-number":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_type", "validate-cc-type":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_type"}'
+                   data-validate='{
+                       "required-number":true,
+                       "validate-cc-number":"#<?php /* @noEscape */ echo $code; ?>_cc_type",
+                       "validate-cc-type":"#<?php /* @noEscape */ echo $code; ?>_cc_type"
+                   }'
                    autocomplete="off"/>
         </div>
     </div>
 
-    <div class="admin__field _required field-date" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_type_exp_div">
-        <label for="<?php /* @escapeNotVerified */ echo $code ?>_expiration" class="admin__field-label">
-            <span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span>
+    <div class="admin__field _required field-date" id="<?php /* @noEscape */ echo $code; ?>_cc_type_exp_div">
+        <label for="<?php /* @noEscape */ echo $code; ?>_expiration" class="admin__field-label">
+            <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span>
         </label>
 
         <div class="admin__field-control">
-            <select id="<?php /* @escapeNotVerified */ echo $code ?>_expiration" name="payment[cc_exp_month]"
-                    data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-month"
+            <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]"
+                    data-container="<?php /* @noEscape */ echo $code; ?>-cc-month"
                     class="admin__control-select admin__control-select-month"
-                    data-validate='{required:true, "validate-cc-exp":"#<?php /* @escapeNotVerified */ echo $code ?>_expiration_yr"}'>
-                <?php $_ccExpMonth = $block->getInfoData('cc_exp_month') ?>
+                    data-validate='{required:true, "validate-cc-exp":"#<?php /* @noEscape */ echo $code; ?>_expiration_yr"}'>
                 <?php foreach ($block->getCcMonths() as $k => $v): ?>
                     <option
-                        value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpMonth): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
+                        value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>"
+                        <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>>
+                        <?php echo $block->escapeHtml($v); ?>
+                    </option>
                 <?php endforeach ?>
             </select>
 
-            <?php $_ccExpYear = $block->getInfoData('cc_exp_year') ?>
-            <select id="<?php /* @escapeNotVerified */ echo $code ?>_expiration_yr" name="payment[cc_exp_year]"
+            <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]"
                     class="admin__control-select admin__control-select-year"
-                    data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-year" data-validate='{required:true}'>
+                    data-container="<?php /* @noEscape */ echo $code; ?>-cc-year" data-validate='{required:true}'>
                 <?php foreach ($block->getCcYears() as $k => $v): ?>
                     <option
-                        value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpYear): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
+                        value="<?php /* @noEscape */ echo $k ? $k : '' ?>"
+                        <?php if ($k == $ccExpYear): ?> selected="selected"<?php endif ?>>
+                        <?php echo $block->escapeHtml($v); ?>
+                    </option>
                 <?php endforeach ?>
             </select>
         </div>
     </div>
     <?php if ($block->hasVerification()): ?>
-        <div class="admin__field _required field-cvv" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_type_cvv_div">
-            <label for="<?php /* @escapeNotVerified */ echo $code ?>_cc_cid" class="admin__field-label">
-                <span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span>
+        <div class="admin__field _required field-cvv" id="<?php /* @noEscape */ echo $code; ?>_cc_type_cvv_div">
+            <label for="<?php /* @noEscape */ echo $code; ?>_cc_cid" class="admin__field-label">
+                <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span>
             </label>
 
             <div class="admin__field-control">
-                <input type="text" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>"
-                       data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-cvv"
+                <input type="text" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>"
+                       data-container="<?php /* @noEscape */ echo $code; ?>-cc-cvv"
                        class="admin__control-text cvv"
-                       id="<?php /* @escapeNotVerified */ echo $code ?>_cc_cid" name="payment[cc_cid]"
+                       id="<?php /* @noEscape */ echo $code; ?>_cc_cid" name="payment[cc_cid]"
                        value=""
-                       data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_type"}'
+                       data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @noEscape */ echo $code; ?>_cc_type"}'
                        autocomplete="off"/>
             </div>
         </div>
@@ -123,6 +135,6 @@ $code = $block->getMethodCode();
      * Disable card server validation in admin
      */
     require(["Magento_Sales/order/create/form"], function () {
-        order.addExcludedPaymentMethod('<?php /* @escapeNotVerified */ echo $code ?>');
+        order.addExcludedPaymentMethod('<?php /* @noEscape */ echo $code; ?>');
     });
 </script>
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/transparent/iframe.phtml b/app/code/Magento/Payment/view/adminhtml/templates/transparent/iframe.phtml
index 51cae8aae306370d8a400cde354362452f30814b..f5dd16a8b549a78f2fe9d7fc4aec18644caa2d1b 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/transparent/iframe.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/transparent/iframe.phtml
@@ -5,7 +5,9 @@
  */
 
 // @codingStandardsIgnoreFile
-
+/**
+ * @var \Magento\Payment\Block\Transparent\Iframe $block
+ */
 $params = $block->getParams();
 
 ?>
@@ -13,13 +15,13 @@ $params = $block->getParams();
 <head>
 <script>
 <?php if (isset($params['redirect'])): ?>
-    window.location="<?php echo $block->escapeUrl($params['redirect']) ?>";
+    window.location="<?php echo $block->escapeUrl($params['redirect']); ?>";
 <?php elseif (isset($params['redirect_parent'])): ?>
-    window.top.location="<?php echo $block->escapeUrl($params['redirect_parent']) ?>";
+    window.top.location="<?php echo $block->escapeUrl($params['redirect_parent']); ?>";
 <?php elseif (isset($params['error_msg'])): ?>
-    window.top.alert(<?php /* @escapeNotVerified */ echo $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($params['error_msg']) ?>);
+    window.top.alert(<?php /* @noEscape */ echo $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($params['error_msg']); ?>);
 <?php elseif (isset($params['order_success'])): ?>
-    window.top.location = "<?php /* @escapeNotVerified */ echo $params['order_success'] ?>";
+    window.top.location = "<?php echo $block->escapeUrl($params['order_success']); ?>";
 <?php else: ?>
     var require = window.top.require;
     require(['jquery'], function($) {
diff --git a/app/code/Magento/Payment/view/adminhtml/templates/transparent/info.phtml b/app/code/Magento/Payment/view/adminhtml/templates/transparent/info.phtml
index 0219cd8891fdc9aaeb621f4327fd64bb60e0b145..8deddb094d1799a1f1459a6be34e7fdbf5a054f0 100644
--- a/app/code/Magento/Payment/view/adminhtml/templates/transparent/info.phtml
+++ b/app/code/Magento/Payment/view/adminhtml/templates/transparent/info.phtml
@@ -7,9 +7,10 @@
 // @codingStandardsIgnoreFile
 
 /**
+ * @var \Magento\Payment\Block\Transparent\Info $block
  * @see \Magento\Payment\Block\Transparent\Info
  */
 ?>
-<fieldset id="payment_form_<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>" style="display:none" class="fieldset items redirect">
-    <div><?php /* @escapeNotVerified */ echo __('We\'ll ask for your payment details before you place an order.') ?></div>
+<fieldset id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" style="display:none" class="fieldset items redirect">
+    <div><?php echo $block->escapeHtml(__('We\'ll ask for your payment details before you place an order.')); ?></div>
 </fieldset>
diff --git a/app/code/Magento/Payment/view/adminhtml/web/transparent.js b/app/code/Magento/Payment/view/adminhtml/web/transparent.js
index 7edbb30c6318ffd45339c6b55b3b612067f76b62..11593e2a5b5f634a42a8b1779afdcfd5a71f2686 100644
--- a/app/code/Magento/Payment/view/adminhtml/web/transparent.js
+++ b/app/code/Magento/Payment/view/adminhtml/web/transparent.js
@@ -6,8 +6,9 @@
 define([
     "jquery",
     "mage/template",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui"
-], function($, mageTemplate){
+], function($, mageTemplate, alert){
     "use strict";
 
     $.widget('mage.transparent', {
@@ -157,10 +158,14 @@ define([
         _processErrors: function (response) {
             var msg = response.error_messages;
             if (typeof (msg) === 'object') {
-                alert(msg.join("\n"));
+                alert({
+                    content: msg.join("\n")
+                });
             }
             if (msg) {
-                alert(msg);
+                alert({
+                    content: msg
+                });
             }
         }
     });
diff --git a/app/code/Magento/Payment/view/frontend/templates/form/cc.phtml b/app/code/Magento/Payment/view/frontend/templates/form/cc.phtml
index ffc0c51ef5383ba9723bed12f579e857354eefd8..05d8d3c02c82cdfc54c16a9d77a6863422e7ecbd 100644
--- a/app/code/Magento/Payment/view/frontend/templates/form/cc.phtml
+++ b/app/code/Magento/Payment/view/frontend/templates/form/cc.phtml
@@ -5,51 +5,83 @@
  */
 
 // @codingStandardsIgnoreFile
-
+/**
+ * @var \Magento\Payment\Block\Transparent\Form $block
+ */
+$code = $block->getMethodCode();
+$ccType = $block->getInfoData('cc_type');
+$ccExpMonth = $block->getInfoData('cc_exp_month');
+$ccExpYear = $block->getInfoData('cc_exp_year');
 ?>
-<?php $_code = $block->getMethodCode() ?>
-<fieldset class="fieldset payment items ccard <?php /* @escapeNotVerified */ echo $_code ?>" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display: none;">
+<fieldset class="fieldset payment items ccard <?php /* @noEscape */ echo $code; ?>"
+          id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display: none;">
     <div class="field type required">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span></label>
+        <label for="<?php /* @noEscape */ echo $code; ?>_cc_type" class="label">
+            <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span>
+        </label>
         <div class="control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"
-                    data-mage-init='{"creditCardType":{"creditCardTypeContainer":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div"}}'
-                    name="payment[cc_type]" data-validate='{required:true, "validate-cc-type-select":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_number"}' class="select">
-                <option value=""><?php /* @escapeNotVerified */ echo __('--Please Select--')?></option>
-            <?php $_ccType = $block->getInfoData('cc_type') ?>
-            <?php foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
-                <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"<?php if ($_typeCode == $_ccType): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option>
-            <?php endforeach ?>
+            <select id="<?php /* @noEscape */ echo $code; ?>_cc_type"
+                    data-mage-init='{
+                        "creditCardType":{"creditCardTypeContainer":"#<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div"}
+                    }'
+                    name="payment[cc_type]" data-validate='{
+                        required:true,
+                        "validate-cc-type-select":"#<?php /* @noEscape */ echo $code; ?>_cc_number"
+                    }'
+                    class="select">
+                <option value=""><?php echo $block->escapeHtml(__('--Please Select--')); ?></option>
+            <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?>
+                <option value="<?php echo $block->escapeHtml($typeCode); ?>"
+                    <?php if ($typeCode == $ccType): ?> selected="selected"<?php endif; ?>>
+                    <?php echo $block->escapeHtml($typeName); ?>
+                </option>
+            <?php endforeach; ?>
             </select>
         </div>
     </div>
     <div class="field number required">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span></label>
+        <label for="<?php /* @noEscape */ echo $code; ?>_cc_number" class="label">
+            <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span>
+        </label>
         <div class="control">
-            <input type="number" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_number" name="payment[cc_number]" title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" class="input-text" value="" data-validate='{"required-number":true, "validate-cc-number":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type", "validate-cc-type":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"}'/>
+            <input type="number" id="<?php /* @noEscape */ echo $code; ?>_cc_number" name="payment[cc_number]"
+                   title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>" class="input-text" value=""
+                   data-validate='{
+                       "required-number":true,
+                       "validate-cc-number":"#<?php /* @noEscape */ echo $code; ?>_cc_type",
+                       "validate-cc-type":"#<?php /* @noEscape */ echo $code; ?>_cc_type"
+                   }'/>
         </div>
     </div>
-    <div class="field date required" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_exp_div">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" class="label"><span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span></label>
+    <div class="field date required" id="<?php /* @noEscape */ echo $code; ?>_cc_type_exp_div">
+        <label for="<?php /* @noEscape */ echo $code; ?>_expiration" class="label">
+            <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span>
+        </label>
         <div class="control">
             <div class="fields group group-2">
                 <div class="field no-label month">
                     <div class="control">
-                        <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration" name="payment[cc_exp_month]" class="select month" data-validate='{required:true, "validate-cc-exp":"#<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr"}'>
-                            <?php $_ccExpMonth = $block->getInfoData('cc_exp_month') ?>
+                        <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]" class="select month"
+                                data-validate='{required:true, "validate-cc-exp":"#<?php /* @noEscape */ echo $code; ?>_expiration_yr"}'>
                             <?php foreach ($block->getCcMonths() as $k => $v): ?>
-                                <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpMonth): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-                            <?php endforeach ?>
+                                <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>"
+                                    <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>>
+                                    <?php echo $block->escapeHtml($v); ?>
+                                </option>
+                            <?php endforeach; ?>
                         </select>
                     </div>
                 </div>
                 <div class="field no-label year">
                     <div class="control">
-                     <?php $_ccExpYear = $block->getInfoData('cc_exp_year') ?>
-                        <select id="<?php /* @escapeNotVerified */ echo $_code ?>_expiration_yr" name="payment[cc_exp_year]" class="select year" data-validate='{required:true}'>
+                        <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]"
+                                class="select year" data-validate='{required:true}'>
                             <?php foreach ($block->getCcYears() as $k => $v): ?>
-                                <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $_ccExpYear): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
-                            <?php endforeach ?>
+                                <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>
+                                "<?php if ($k == $ccExpYear): ?> selected="selected"<?php endif; ?>>
+                                    <?php echo $block->escapeHtml($v); ?>
+                                </option>
+                            <?php endforeach; ?>
                         </select>
                     </div>
                 </div>
@@ -57,48 +89,74 @@
         </div>
     </div>
     <?php if ($block->hasVerification()): ?>
-    <div class="field cvv required" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_cvv_div">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" class="label"><span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span></label>
+    <div class="field cvv required" id="<?php /* @noEscape */ echo $code; ?>_cc_type_cvv_div">
+        <label for="<?php /* @noEscape */ echo $code; ?>_cc_cid" class="label">
+            <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span>
+        </label>
         <div class="control">
-            <input type="number" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" class="input-text cvv" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_cid" name="payment[cc_cid]" value="" data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @escapeNotVerified */ echo $_code ?>_cc_type"}' />
-            <?php $_content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' . __('Card Verification Number Visual Reference') . '\" title=\"' . __('Card Verification Number Visual Reference') . '\" />'; ?>
+            <input type="number" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>"
+                   class="input-text cvv" id="<?php /* @noEscape */ echo $code; ?>_cc_cid" name="payment[cc_cid]" value=""
+                   data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @noEscape */ echo $code; ?>_cc_type"}' />
+            <?php $content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' .
+                $block->escapeHtml(__('Card Verification Number Visual Reference')) .
+                '\" title=\"' . $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" />'; ?>
             <div class="note">
-                <a href="#" class="action cvv" title="<?php /* @escapeNotVerified */ echo __('What is this?') ?>" data-mage-init='{"tooltip": {"content": "<?php /* @escapeNotVerified */ echo $_content ?>"}}'><span><?php /* @escapeNotVerified */ echo __('What is this?') ?></span></a>
+                <a href="#" class="action cvv" title="<?php echo $block->escapeHtml(__('What is this?')); ?>"
+                   data-mage-init='{"tooltip": {"content": "<?php /* @noEscape */ echo $content; ?>"}}'>
+                    <span><?php echo $block->escapeHtml(__('What is this?')); ?></span>
+                </a>
             </div>
         </div>
     </div>
     <?php endif; ?>
     <?php if ($block->hasSsCardType()): ?>
-    <div class="field switch solo required" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_type_ss_div">
+    <div class="field switch solo required" id="<?php /* @noEscape */ echo $code; ?>_cc_type_ss_div">
         <div class="nested">
             <div class="field switch solo required">
-                <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_issue" class="label"><span><?php /* @escapeNotVerified */ echo __('Switch/Solo/Maestro Only') ?></span></label>
+                <label for="<?php /* @noEscape */ echo $code; ?>_cc_issue" class="label">
+                    <span><?php echo $block->escapeHtml(__('Switch/Solo/Maestro Only')); ?></span>
+                </label>
             </div>
             <div class="field number required">
-                <label for="<?php /* @escapeNotVerified */ echo $_code ?>_cc_issue" class="label"><span><?php /* @escapeNotVerified */ echo __('Issue Number') ?></span></label>
+                <label for="<?php /* @noEscape */ echo $code; ?>_cc_issue" class="label">
+                    <span><?php echo $block->escapeHtml(__('Issue Number')); ?></span>
+                </label>
                 <div class="control">
-                    <input type="text" title="<?php /* @escapeNotVerified */ echo __('Issue Number') ?>" class="input-text cvv" id="<?php /* @escapeNotVerified */ echo $_code ?>_cc_issue" name="payment[cc_ss_issue]" value="" data-validate='{"validate-cc-ukss":true}'/>
+                    <input type="text" title="<?php echo $block->escapeHtml(__('Issue Number')); ?>" class="input-text cvv"
+                           id="<?php /* @noEscape */ echo $code; ?>_cc_issue" name="payment[cc_ss_issue]" value=""
+                           data-validate='{"validate-cc-ukss":true}'/>
                 </div>
             </div>
 
             <div class="field date required">
-                <label for="<?php /* @escapeNotVerified */ echo $_code ?>_start_month" class="label"><span><?php /* @escapeNotVerified */ echo __('Start Date') ?></span></label>
+                <label for="<?php /* @noEscape */ echo $code; ?>_start_month" class="label">
+                    <span><?php echo $block->escapeHtml(__('Start Date')); ?></span>
+                </label>
                 <div class="control">
                     <div class="fields group group-2">
                         <div class="field no-label">
                             <div class="control">
-                                <select id="<?php /* @escapeNotVerified */ echo $_code ?>_start_month" name="payment[cc_ss_start_month]" class="select month" data-validate='{"validate-cc-ukss":true}'>
+                                <select id="<?php /* @noEscape */ echo $code; ?>_start_month" name="payment[cc_ss_start_month]"
+                                        class="select month" data-validate='{"validate-cc-ukss":true}'>
                                 <?php foreach ($block->getCcMonths() as $k => $v): ?>
-                                    <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $block->getInfoData('cc_ss_start_month')): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
+                                    <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>"
+                                        <?php if ($k == $block->getInfoData('cc_ss_start_month')): ?> selected="selected"<?php endif; ?>>
+                                        <?php echo $block->escapeHtml($v); ?>
+                                    </option>
                                 <?php endforeach ?>
                                 </select>
                             </div>
                         </div>
                         <div class="field no-label">
                             <div class="control">
-                                <select id="<?php /* @escapeNotVerified */ echo $_code ?>_start_year" name="payment[cc_ss_start_year]" class="select year" data-validate='{"validate-cc-ukss":true}'>
+                                <select id="<?php /* @noEscape */ echo $code; ?>_start_year"
+                                        name="payment[cc_ss_start_year]" class="select year"
+                                        data-validate='{"validate-cc-ukss":true}'>
                                 <?php foreach ($block->getSsStartYears() as $k => $v): ?>
-                                    <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $block->getInfoData('cc_ss_start_year')): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
+                                    <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>"
+                                        <?php if ($k == $block->getInfoData('cc_ss_start_year')): ?> selected="selected"<?php endif; ?>>
+                                        <?php echo $block->escapeHtml($v); ?>
+                                    </option>
                                 <?php endforeach ?>
                                 </select>
                             </div>
diff --git a/app/code/Magento/Payment/view/frontend/templates/info/default.phtml b/app/code/Magento/Payment/view/frontend/templates/info/default.phtml
index 49364c5bc10bc49714abd78c355953d737cb34de..861163e3f0dec3d12736448077407a398b46059f 100644
--- a/app/code/Magento/Payment/view/frontend/templates/info/default.phtml
+++ b/app/code/Magento/Payment/view/frontend/templates/info/default.phtml
@@ -6,22 +6,25 @@
 
 // @codingStandardsIgnoreFile
 
-?>
-<?php
 /**
+ * @var \Magento\Payment\Block\Info $block
  * @see \Magento\Payment\Block\Info
  */
+$specificInfo = $block->getSpecificInformation();
+$title = $block->escapeHtml($block->getMethod()->getTitle());
 ?>
 <dl class="payment-method">
-    <dt class="title"><?php echo $block->escapeHtml($block->getMethod()->getTitle()) ?></dt>
-<?php if ($_specificInfo = $block->getSpecificInformation()):?>
+    <dt class="title"><?php /* @noEscape */ echo $title; ?></dt>
+<?php if ($specificInfo):?>
     <dd class="content">
         <table class="data table">
-            <caption class="table-caption"><?php echo $block->escapeHtml($block->getMethod()->getTitle()) ?></caption>
-            <?php foreach ($_specificInfo as $_label => $_value):?>
+            <caption class="table-caption"><?php /* @noEscape */ echo $title; ?></caption>
+            <?php foreach ($specificInfo as $label => $value):?>
                 <tr>
-                    <th scope="row"><?php echo $block->escapeHtml($_label)?></th>
-                    <td><?php /* @escapeNotVerified */ echo nl2br(implode("\n", $block->getValueAsArray($_value, true)))?></td>
+                    <th scope="row"><?php echo $block->escapeHtml($label)?></th>
+                    <td>
+                        <?php /* @noEscape */ echo nl2br($block->escapeHtml(implode("\n", $block->getValueAsArray($value, true))));?>
+                    </td>
                 </tr>
             <?php endforeach; ?>
         </table>
diff --git a/app/code/Magento/Payment/view/frontend/templates/info/instructions.phtml b/app/code/Magento/Payment/view/frontend/templates/info/instructions.phtml
index 477f050bc7ebd5efba1ba646a363cfe4ab0fa6fc..9edbfef9b9b12c1e1dfa02fa5dd9abb198d62827 100644
--- a/app/code/Magento/Payment/view/frontend/templates/info/instructions.phtml
+++ b/app/code/Magento/Payment/view/frontend/templates/info/instructions.phtml
@@ -5,16 +5,14 @@
  */
 
 // @codingStandardsIgnoreFile
-
-?>
-<?php
 /**
+ * @var \Magento\Payment\Block\Info $block
  * @see \Magento\Payment\Block\Info
  */
 ?>
 <dl class="payment-method">
     <dt class="title"><?php echo $block->escapeHtml($block->getMethod()->getTitle()) ?></dt>
 <?php if ($block->getInstructions()): ?>
-    <dd class="content"><?php /* @escapeNotVerified */ echo nl2br($block->getInstructions()) ?></dd>
+    <dd class="content"><?php /* @noEscape */ echo nl2br($block->escapeHtml($block->getInstructions())); ?></dd>
 <?php endif; ?>
 </dl>
diff --git a/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml b/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml
index 9580a3a2ff1108a873dca309e33abacee8a52eff..64ea503996cd280d8b29dc154b4dc20e9e47f69d 100644
--- a/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml
+++ b/app/code/Magento/Payment/view/frontend/templates/transparent/form.phtml
@@ -8,60 +8,102 @@
 
 /** @var \Magento\Payment\Block\Transparent\Form $block */
 $code = $block->getMethodCode();
+$ccExpMonth = $block->getInfoData('cc_exp_month');
+$ccExpYear = $block->getInfoData('cc_exp_year');
+$ccType = $block->getInfoData('cc_type');
+$content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' .
+    $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" title=\"' .
+    $block->escapeHtml(__('Card Verification Number Visual Reference')) . '\" />';
 ?>
 
 <!-- IFRAME for request to Payment Gateway -->
-<iframe width="0" height="0" id="<?php /* @escapeNotVerified */ echo $code ?>-transparent-iframe" data-container="<?php /* @escapeNotVerified */ echo $code ?>-transparent-iframe" allowtransparency="true" frameborder="0"  name="iframeTransparent" style="display:none;width:100%;background-color:transparent" src="<?php /* @escapeNotVerified */ echo $block->getViewFileUrl('blank.html') ?>"></iframe>
+<iframe width="0" height="0" id="<?php /* @noescape */ echo $code; ?>-transparent-iframe"
+        data-container="<?php /* @noEscape */ echo $code; ?>-transparent-iframe" allowtransparency="true"
+        frameborder="0"  name="iframeTransparent" style="display:none;width:100%;background-color:transparent"
+        src="<?php /* @noEscape */ echo $block->getViewFileUrl('blank.html') ?>"></iframe>
 <form class="form" id="co-transparent-form" action="#" method="post" data-mage-init='{
     "transparent":{
-        "controller":"<?php /* @escapeNotVerified */ echo $block->getRequest()->getControllerName() ?>",
-        "gateway":"<?php /* @escapeNotVerified */ echo $code ?>",
-        "orderSaveUrl":"<?php /* @escapeNotVerified */ echo $block->getOrderUrl() ?>",
-        "cgiUrl":"<?php /* @escapeNotVerified */ echo $block->getCgiUrl() ?>",
-        "dateDelim":"<?php /* @escapeNotVerified */ echo $block->getDateDelim() ?>",
-        "cardFieldsMap":<?php /* @escapeNotVerified */ echo $block->getCardFieldsMap() ?>,
-        "nativeAction":"<?php /* @escapeNotVerified */ echo $block->getUrl('checkout/onepage/saveOrder', ['_secure' => $block->getRequest()->isSecure()]) ?>"
+        "controller":"<?php echo $block->escapeHtml($block->getRequest()->getControllerName()); ?>",
+        "gateway":"<?php /* @noEscape */ echo $code; ?>",
+        "orderSaveUrl":"<?php echo $block->escapeUrl($block->getOrderUrl()); ?>",
+        "cgiUrl":"<?php echo $block->escapeUrl($block->getCgiUrl()); ?>",
+        "dateDelim":"<?php echo $block->escapeHtml($block->getDateDelim()); ?>",
+        "cardFieldsMap":<?php /* @noEscape */ echo $block->getCardFieldsMap(); ?>,
+        "nativeAction":"<?php echo $block->escapeUrl($block->getUrl('checkout/onepage/saveOrder', ['_secure' => $block->getRequest()->isSecure()])); ?>"
     }, "validation":[]}'>
-    <fieldset class="fieldset ccard <?php /* @escapeNotVerified */ echo $code ?>" id="payment_form_<?php /* @escapeNotVerified */ echo $code ?>">
-        <legend class="legend"><span><?php /* @escapeNotVerified */ echo __('Credit Card Information') ?></span></legend><br />
+    <fieldset class="fieldset ccard <?php /* @noEscape */ echo $code; ?>" id="payment_form_<?php /* @noEscape */ echo $code; ?>">
+        <legend class="legend">
+            <span><?php echo $block->escapeHtml(__('Credit Card Information')); ?></span>\
+        </legend><br />
         <div class="field required type">
-            <label for="<?php /* @escapeNotVerified */ echo $code ?>_cc_type" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Type') ?></span></label>
+            <label for="<?php /* @noEscape */ echo $code;?>_cc_type" class="label">
+                <span><?php echo $block->escapeHtml(__('Credit Card Type')); ?></span>
+            </label>
             <div class="control">
-                <select id="<?php /* @escapeNotVerified */ echo $code ?>_cc_type" data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-type" name="payment[cc_type]" data-validate='{required:true, "validate-cc-type-select":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_number"}'>
-                    <option value=""><?php /* @escapeNotVerified */ echo __('--Please Select--')?></option>
-                <?php $_ccType = $block->getInfoData('cc_type') ?>
-                <?php foreach ($block->getCcAvailableTypes() as $_typeCode => $_typeName): ?>
-                    <option value="<?php /* @escapeNotVerified */ echo $_typeCode ?>"<?php if ($_typeCode == $_ccType): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $_typeName ?></option>
+                <select id="<?php /* @noEscape */ echo $code; ?>_cc_type" data-container="<?php /* @noEscape */ echo $code; ?>-cc-type"
+                        name="payment[cc_type]"
+                        data-validate='{
+                            required:true,
+                            "validate-cc-type-select":"#<?php /* @noEscape */ echo $code; ?>_cc_number"
+                        }'>
+                    <option value=""><?php echo $block->escapeHtml(__('--Please Select--'));?></option>
+                <?php foreach ($block->getCcAvailableTypes() as $typeCode => $typeName): ?>
+                    <option value="<?php echo $block->escapeHtml($typeCode); ?>"
+                        <?php if ($typeCode == $ccType): ?> selected="selected"<?php endif; ?>>
+                        <?php echo $block->escapeHtml($typeName); ?></option>
                 <?php endforeach ?>
                 </select>
             </div>
         </div>
         <div class="field required number">
-            <label for="<?php /* @escapeNotVerified */ echo $code ?>_cc_number" class="label"><span><?php /* @escapeNotVerified */ echo __('Credit Card Number') ?></span></label>
+            <label for="<?php /* @noEscape */ echo $code; ?>_cc_number" class="label">
+                <span><?php echo $block->escapeHtml(__('Credit Card Number')); ?></span>
+            </label>
             <div class="control">
-                <input type="number" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_number" data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-number" name="payment[cc_number]" title="<?php /* @escapeNotVerified */ echo __('Credit Card Number') ?>" class="input-text" value="" data-validate='{"required-number":true, "validate-cc-number":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_type", "validate-cc-type":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_type"}' autocomplete="off"/>
+                <input type="number" id="<?php /* @noEscape */ echo $code; ?>_cc_number"
+                       data-container="<?php /* @noEscape */ echo $code; ?>-cc-number" name="payment[cc_number]"
+                       title="<?php echo $block->escapeHtml(__('Credit Card Number')); ?>" class="input-text" value=""
+                       data-validate='{
+                           "required-number":true,
+                           "validate-cc-number":"#<?php /* @noEscape */ echo $code; ?>_cc_type",
+                           "validate-cc-type":"#<?php /* @noEscape */ echo $code; ?>_cc_type"
+                       }'
+                       autocomplete="off"/>
             </div>
         </div>
-        <div class="field required date" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_type_exp_div">
-            <label for="<?php /* @escapeNotVerified */ echo $code ?>_expiration" class="label"><span><?php /* @escapeNotVerified */ echo __('Expiration Date') ?></span></label>
+        <div class="field required date" id="<?php /* @noEscape */ echo $code; ?>_cc_type_exp_div">
+            <label for="<?php /* @noEscape */ echo $code; ?>_expiration" class="label">
+                <span><?php echo $block->escapeHtml(__('Expiration Date')); ?></span>
+            </label>
             <div class="control">
                 <div class="fields group group-2">
                     <div class="field no-label month">
                         <div class="control">
-                            <select id="<?php /* @escapeNotVerified */ echo $code ?>_expiration" name="payment[cc_exp_month]" data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-month" class="month" data-validate='{required:true, "validate-cc-exp":"#<?php /* @escapeNotVerified */ echo $code ?>_expiration_yr"}'>
-                            <?php $ccExpMonth = $block->getInfoData('cc_exp_month') ?>
+                            <select id="<?php /* @noEscape */ echo $code; ?>_expiration" name="payment[cc_exp_month]"
+                                    data-container="<?php /* @noEscape */ echo $code; ?>-cc-month" class="month"
+                                    data-validate='{
+                                        required:true,
+                                        "validate-cc-exp":"#<?php /* @noEscape */ echo $code; ?>_expiration_yr"
+                                    }'>
                             <?php foreach ($block->getCcMonths() as $k => $v): ?>
-                                <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
+                                <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : '' ?>"
+                                    <?php if ($k == $ccExpMonth): ?> selected="selected"<?php endif; ?>>
+                                    <?php echo $block->escapeHtml($v); ?>
+                                </option>
                             <?php endforeach ?>
                             </select>
                         </div>
                     </div>
                     <div class="field no-label year">
                         <div class="control">
-                            <select id="<?php /* @escapeNotVerified */ echo $code ?>_expiration_yr" name="payment[cc_exp_year]" class="year" data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-year" data-validate='{required:true}'>
-                            <?php $ccExpYear = $block->getInfoData('cc_exp_year') ?>
+                            <select id="<?php /* @noEscape */ echo $code; ?>_expiration_yr" name="payment[cc_exp_year]"
+                                    class="year" data-container="<?php /* @noEscape */ echo $code; ?>-cc-year"
+                                    data-validate='{required:true}'>
                             <?php foreach ($block->getCcYears() as $k => $v): ?>
-                                <option value="<?php echo $k ? $k : '' ?>"<?php if ($k == $ccExpYear): ?> selected="selected"<?php endif ?>><?php /* @escapeNotVerified */ echo $v ?></option>
+                                <option value="<?php /* @noEscape */ echo $k ? $block->escapeHtml($k) : ''; ?>"
+                                    <?php if ($k == $ccExpYear): ?> selected="selected"<?php endif; ?>>
+                                    <?php echo $block->escapeHtml($v); ?>
+                                </option>
                             <?php endforeach ?>
                             </select>
                         </div>
@@ -70,13 +112,25 @@ $code = $block->getMethodCode();
             </div>
         </div>
         <?php if ($block->hasVerification()): ?>
-        <div class="field required cvv" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_type_cvv_div">
-            <label for="<?php /* @escapeNotVerified */ echo $code ?>_cc_cid" class="label"><span><?php /* @escapeNotVerified */ echo __('Card Verification Number') ?></span></label>
+        <div class="field required cvv" id="<?php /* @noEscape */ echo $code; ?>_cc_type_cvv_div">
+            <label for="<?php /* @noEscape */ echo $code; ?>_cc_cid" class="label">
+                <span><?php echo $block->escapeHtml(__('Card Verification Number')); ?></span>
+            </label>
             <div class="control">
-                <input type="number" title="<?php /* @escapeNotVerified */ echo __('Card Verification Number') ?>" data-container="<?php /* @escapeNotVerified */ echo $code ?>-cc-cvv" class="input-text cvv" id="<?php /* @escapeNotVerified */ echo $code ?>_cc_cid" name="payment[cc_cid]" value="" data-validate='{"required-number":true, "validate-cc-cvn":"#<?php /* @escapeNotVerified */ echo $code ?>_cc_type"}' autocomplete="off"/>
-                <?php $_content = '<img src=\"' . $block->getViewFileUrl('Magento_Checkout::cvv.png') . '\" alt=\"' . __('Card Verification Number Visual Reference') . '\" title=\"' . __('Card Verification Number Visual Reference') . '\" />'; ?>
+                <input type="number" title="<?php echo $block->escapeHtml(__('Card Verification Number')); ?>"
+                       data-container="<?php /* @noEscape */ echo $code; ?>-cc-cvv" class="input-text cvv"
+                       id="<?php /* @noEscape */ echo $code; ?>_cc_cid" name="payment[cc_cid]" value=""
+                       data-validate='{
+                           "required-number":true,
+                           "validate-cc-cvn":"#<?php /* @noEscape */ echo $code;?>_cc_type"
+                       }' autocomplete="off"/>
                 <div class="note">
-                    <a href="#" id="<?php /* @escapeNotVerified */ echo $code ?>-cvv-what-is-this" class="action cvv" title="<?php echo $block->escapeHtml(__('What is this?'));?>" data-mage-init='{"tooltip": {"content": "<?php /* @escapeNotVerified */ echo $_content ?>"}}'><span><?php /* @escapeNotVerified */ echo __('What is this?') ?></span></a>
+                    <a href="#" id="<?php /* @noEscape */ echo $code; ?>-cvv-what-is-this" class="action cvv"
+                       title="<?php echo $block->escapeHtml(__('What is this?'));?>" data-mage-init='{
+                           "tooltip": {"content": "<?php /* @noEscape */ echo $content; ?>"}
+                       }'>
+                        <span><?php echo $block->escapeHtml(__('What is this?')); ?></span>
+                    </a>
                 </div>
             </div>
         </div>
diff --git a/app/code/Magento/Payment/view/frontend/templates/transparent/iframe.phtml b/app/code/Magento/Payment/view/frontend/templates/transparent/iframe.phtml
index d20275c0e2edc7063740c04575cee395b90844cb..b191981585af62dde6804c9dbfc44a3b0258e1b5 100644
--- a/app/code/Magento/Payment/view/frontend/templates/transparent/iframe.phtml
+++ b/app/code/Magento/Payment/view/frontend/templates/transparent/iframe.phtml
@@ -13,17 +13,18 @@ $params = $block->getParams();
     <head>
         <script>
         <?php if (isset($params['redirect'])): ?>
-            window.location="<?php echo $block->escapeXssInUrl($params['redirect']) ?>";
+            window.location="<?php echo $block->escapeXssInUrl($params['redirect']); ?>";
         <?php elseif (isset($params['redirect_parent'])): ?>
-            window.top.location="<?php echo $block->escapeXssInUrl($params['redirect_parent']) ?>";
+            window.top.location="<?php echo $block->escapeXssInUrl($params['redirect_parent']); ?>";
         <?php elseif (isset($params['error_msg'])): ?>
-            window.top.alert(<?php /* @escapeNotVerified */ echo $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($params['error_msg']) ?>);
+            window.top.alert(<?php /* @noEscape */ echo $this->helper('Magento\Framework\Json\Helper\Data')->jsonEncode($params['error_msg']); ?>);
             var require = window.top.require;
-            require(['Magento_Checkout/js/model/full-screen-loader'], function(fullScreenLoader) {
+            require(['Magento_Checkout/js/model/full-screen-loader', 'jquery'], function(fullScreenLoader, $) {
                 fullScreenLoader.stopLoader();
+                $('[data-role="review-save"]').removeClass('disabled');
             });
         <?php elseif (isset($params['order_success'])): ?>
-            window.top.location = "<?php /* @escapeNotVerified */ echo $params['order_success'] ?>";
+            window.top.location = "<?php echo $block->escapeXssInUrl($params['order_success']); ?>";
         <?php else: ?>
             var require = window.top.require;
             require(
diff --git a/app/code/Magento/Payment/view/frontend/templates/transparent/info.phtml b/app/code/Magento/Payment/view/frontend/templates/transparent/info.phtml
index 0219cd8891fdc9aaeb621f4327fd64bb60e0b145..c3ce1e5dbb7029ed65db079fcbf0230839373a3b 100644
--- a/app/code/Magento/Payment/view/frontend/templates/transparent/info.phtml
+++ b/app/code/Magento/Payment/view/frontend/templates/transparent/info.phtml
@@ -7,9 +7,12 @@
 // @codingStandardsIgnoreFile
 
 /**
+ * @var \Magento\Payment\Block\Transparent\Info $block
  * @see \Magento\Payment\Block\Transparent\Info
  */
 ?>
-<fieldset id="payment_form_<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>" style="display:none" class="fieldset items redirect">
-    <div><?php /* @escapeNotVerified */ echo __('We\'ll ask for your payment details before you place an order.') ?></div>
+<fieldset id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" style="display:none" class="fieldset items redirect">
+    <div>
+        <?php echo $block->escapeHtml(__('We\'ll ask for your payment details before you place an order.')); ?>
+    </div>
 </fieldset>
diff --git a/app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js b/app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js
index e957c254fb3719ca2e30319a01221fff7b27e227..b712956a2fc5434a3853144cd5afab7fdbcb293b 100644
--- a/app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js
+++ b/app/code/Magento/Payment/view/frontend/web/js/view/payment/cc-form.js
@@ -90,14 +90,14 @@ define(
             getData: function() {
                 return {
                     'method': this.item.method,
-                    'cc_type': this.creditCardType(),
-                    'cc_exp_year': this.creditCardExpYear(),
-                    'cc_exp_month': this.creditCardExpMonth(),
-                    'cc_number': this.creditCardNumber(),
-                    additional_data: {
+                    'additional_data': {
                         'cc_cid': this.creditCardVerificationNumber(),
                         'cc_ss_start_month': this.creditCardSsStartMonth(),
-                        'cc_ss_start_year': this.creditCardSsStartYear()
+                        'cc_ss_start_year': this.creditCardSsStartYear(),
+                        'cc_type': this.creditCardType(),
+                        'cc_exp_year': this.creditCardExpYear(),
+                        'cc_exp_month': this.creditCardExpMonth(),
+                        'cc_number': this.creditCardNumber()
                     }
                 };
             },
diff --git a/app/code/Magento/Payment/view/frontend/web/transparent.js b/app/code/Magento/Payment/view/frontend/web/transparent.js
index 2060ca7c8ea5e5a344329c0e48ad935859f77f8a..66b3203d7bc5181aae26afe4c7153ef5b2266497 100644
--- a/app/code/Magento/Payment/view/frontend/web/transparent.js
+++ b/app/code/Magento/Payment/view/frontend/web/transparent.js
@@ -6,9 +6,10 @@
 define([
     "jquery",
     "mage/template",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "Magento_Payment/js/model/credit-card-validation/validator"
-], function($, mageTemplate){
+], function($, mageTemplate, alert){
     'use strict';
 
     $.widget('mage.transparent', {
@@ -101,10 +102,14 @@ define([
                     } else {
                         msg = response.error_messages;
                         if (typeof (msg) === 'object') {
-                            alert(msg.join("\n"));
+                            alert({
+                                content: msg.join("\n")
+                            });
                         }
                         if (msg) {
-                            alert(msg);
+                            alert({
+                                content: msg
+                            });
                         }
                     }
                 }
diff --git a/app/code/Magento/Paypal/Block/Adminhtml/Billing/Agreement/Grid.php b/app/code/Magento/Paypal/Block/Adminhtml/Billing/Agreement/Grid.php
index d640e3c2cc37eb678fc590a2c4632dc08810b928..799318732aa7c165df6ec485de0d66f94c189f18 100644
--- a/app/code/Magento/Paypal/Block/Adminhtml/Billing/Agreement/Grid.php
+++ b/app/code/Magento/Paypal/Block/Adminhtml/Billing/Agreement/Grid.php
@@ -16,7 +16,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_helper = null;
 
     /**
-     * @var \Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory
+     * @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory
      */
     protected $_agreementFactory;
 
@@ -29,7 +29,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Paypal\Helper\Data $helper
-     * @param \Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory $agreementFactory
+     * @param \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory $agreementFactory
      * @param \Magento\Paypal\Model\Billing\Agreement $agreementModel
      * @param array $data
      */
@@ -37,7 +37,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Paypal\Helper\Data $helper,
-        \Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory $agreementFactory,
+        \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory $agreementFactory,
         \Magento\Paypal\Model\Billing\Agreement $agreementModel,
         array $data = []
     ) {
@@ -90,7 +90,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
      */
     protected function _prepareCollection()
     {
-        /** @var \Magento\Paypal\Model\Resource\Billing\Agreement\Collection $collection */
+        /** @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection $collection */
         $collection = $this->_agreementFactory->create()->addCustomerDetails();
         $this->setCollection($collection);
         return parent::_prepareCollection();
diff --git a/app/code/Magento/Paypal/Block/Adminhtml/Customer/Edit/Tab/Agreement.php b/app/code/Magento/Paypal/Block/Adminhtml/Customer/Edit/Tab/Agreement.php
index 2952167ac681fa75bcc6a5e053f10d5d1b68be36..4d942be2b38795fa9417caaa09db7121bec5a8ea 100644
--- a/app/code/Magento/Paypal/Block/Adminhtml/Customer/Edit/Tab/Agreement.php
+++ b/app/code/Magento/Paypal/Block/Adminhtml/Customer/Edit/Tab/Agreement.php
@@ -32,7 +32,7 @@ class Agreement extends \Magento\Paypal\Block\Adminhtml\Billing\Agreement\Grid i
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Paypal\Helper\Data $helper
-     * @param \Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory $agreementFactory
+     * @param \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory $agreementFactory
      * @param \Magento\Paypal\Model\Billing\Agreement $agreementModel
      * @param \Magento\Framework\Registry $coreRegistry
      * @param array $data
@@ -41,7 +41,7 @@ class Agreement extends \Magento\Paypal\Block\Adminhtml\Billing\Agreement\Grid i
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Paypal\Helper\Data $helper,
-        \Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory $agreementFactory,
+        \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory $agreementFactory,
         \Magento\Paypal\Model\Billing\Agreement $agreementModel,
         \Magento\Framework\Registry $coreRegistry,
         array $data = []
diff --git a/app/code/Magento/Paypal/Block/Billing/Agreement/View.php b/app/code/Magento/Paypal/Block/Billing/Agreement/View.php
index d80541b9ca4116b41a706860fbed60b6d03c5a2b..a9861eda8bb14efc1d7a84acc3e3e5738dd125c5 100644
--- a/app/code/Magento/Paypal/Block/Billing/Agreement/View.php
+++ b/app/code/Magento/Paypal/Block/Billing/Agreement/View.php
@@ -27,7 +27,7 @@ class View extends \Magento\Framework\View\Element\Template
     /**
      * Related orders collection
      *
-     * @var \Magento\Sales\Model\Resource\Order\Collection
+     * @var \Magento\Sales\Model\ResourceModel\Order\Collection
      */
     protected $_relatedOrders = null;
 
@@ -39,7 +39,7 @@ class View extends \Magento\Framework\View\Element\Template
     protected $_coreRegistry = null;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
      */
     protected $_orderCollectionFactory;
 
@@ -59,28 +59,28 @@ class View extends \Magento\Framework\View\Element\Template
     protected $_helper;
 
     /**
-     * @var \Magento\Paypal\Model\Resource\Billing\Agreement
+     * @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement
      */
     protected $_agreementResource;
 
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Sales\Model\Resource\Order\CollectionFactory $orderCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Sales\Model\Order\Config $orderConfig
      * @param \Magento\Paypal\Helper\Data $helper
-     * @param \Magento\Paypal\Model\Resource\Billing\Agreement $agreementResource
+     * @param \Magento\Paypal\Model\ResourceModel\Billing\Agreement $agreementResource
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Sales\Model\Resource\Order\CollectionFactory $orderCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Sales\Model\Order\Config $orderConfig,
         \Magento\Paypal\Helper\Data $helper,
-        \Magento\Paypal\Model\Resource\Billing\Agreement $agreementResource,
+        \Magento\Paypal\Model\ResourceModel\Billing\Agreement $agreementResource,
         array $data = []
     ) {
         $this->_helper = $helper;
@@ -96,7 +96,7 @@ class View extends \Magento\Framework\View\Element\Template
     /**
      * Retrieve related orders collection
      *
-     * @return \Magento\Sales\Model\Resource\Order\Collection
+     * @return \Magento\Sales\Model\ResourceModel\Order\Collection
      */
     public function getRelatedOrders()
     {
diff --git a/app/code/Magento/Paypal/Block/Billing/Agreements.php b/app/code/Magento/Paypal/Block/Billing/Agreements.php
index 703a2ea4b2040709b6e86271f9f40df9a6a6458a..874e332fb921cc2e6f241e087236e4da8c009155 100644
--- a/app/code/Magento/Paypal/Block/Billing/Agreements.php
+++ b/app/code/Magento/Paypal/Block/Billing/Agreements.php
@@ -20,7 +20,7 @@ class Agreements extends \Magento\Framework\View\Element\Template
     /**
      * Billing agreements collection
      *
-     * @var \Magento\Paypal\Model\Resource\Billing\Agreement\Collection
+     * @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection
      */
     protected $_billingAgreements = null;
 
@@ -30,7 +30,7 @@ class Agreements extends \Magento\Framework\View\Element\Template
     protected $_customerSession;
 
     /**
-     * @var \Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory
+     * @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory
      */
     protected $_agreementCollection;
 
@@ -42,14 +42,14 @@ class Agreements extends \Magento\Framework\View\Element\Template
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
      * @param \Magento\Customer\Model\Session $customerSession
-     * @param \Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory $agreementCollection
+     * @param \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory $agreementCollection
      * @param \Magento\Paypal\Helper\Data $helper
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
         \Magento\Customer\Model\Session $customerSession,
-        \Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory $agreementCollection,
+        \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory $agreementCollection,
         \Magento\Paypal\Helper\Data $helper,
         array $data = []
     ) {
@@ -83,7 +83,7 @@ class Agreements extends \Magento\Framework\View\Element\Template
     /**
      * Retrieve billing agreements collection
      *
-     * @return \Magento\Paypal\Model\Resource\Billing\Agreement\Collection
+     * @return \Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection
      */
     public function getBillingAgreements()
     {
diff --git a/app/code/Magento/Paypal/Block/Express/Review.php b/app/code/Magento/Paypal/Block/Express/Review.php
index 3c65f833ae43fd3dbac829c0f9787eeb2618d0e1..f17da02633af25a48c1bc8b39bad5e45e600cdf2 100644
--- a/app/code/Magento/Paypal/Block/Express/Review.php
+++ b/app/code/Magento/Paypal/Block/Express/Review.php
@@ -174,7 +174,7 @@ class Review extends \Magento\Framework\View\Element\Template
 
             $incl = $this->_getShippingPrice($rate->getPrice(), true);
             if ($incl != $price && $this->_taxHelper->displayShippingBothPrices()) {
-                $renderedInclTax = sprintf($inclTaxFormat, __('Incl. Tax'), $incl);
+                $renderedInclTax = sprintf($inclTaxFormat, $this->escapeHtml(__('Incl. Tax')), $incl);
             }
         }
         return sprintf($format, $this->escapeHtml($rate->getMethodTitle()), $price, $renderedInclTax);
diff --git a/app/code/Magento/Paypal/Model/Billing/AbstractAgreement.php b/app/code/Magento/Paypal/Model/Billing/AbstractAgreement.php
index 1a213d50d4d0a12d0cffeaf0f247d2299bb0e55a..985f7cd8eefa65a6b5c4dbff7524f0b0a2782467 100644
--- a/app/code/Magento/Paypal/Model/Billing/AbstractAgreement.php
+++ b/app/code/Magento/Paypal/Model/Billing/AbstractAgreement.php
@@ -63,7 +63,7 @@ abstract class AbstractAgreement extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Payment\Helper\Data $paymentData
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -71,7 +71,7 @@ abstract class AbstractAgreement extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Payment\Helper\Data $paymentData,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Billing/Agreement.php b/app/code/Magento/Paypal/Model/Billing/Agreement.php
index 7d5532e1cd578ff359af362e79dbf7996b08a4d8..1e6a2cee5ae6a10bbc98044d5878f468706dd5de 100644
--- a/app/code/Magento/Paypal/Model/Billing/Agreement.php
+++ b/app/code/Magento/Paypal/Model/Billing/Agreement.php
@@ -10,8 +10,8 @@ use Magento\Sales\Model\Order\Payment;
 /**
  * Billing Agreement abstract model
  *
- * @method \Magento\Paypal\Model\Resource\Billing\Agreement _getResource()
- * @method \Magento\Paypal\Model\Resource\Billing\Agreement getResource()
+ * @method \Magento\Paypal\Model\ResourceModel\Billing\Agreement _getResource()
+ * @method \Magento\Paypal\Model\ResourceModel\Billing\Agreement getResource()
  * @method int getCustomerId()
  * @method \Magento\Paypal\Model\Billing\Agreement setCustomerId(int $value)
  * @method string getMethodCode()
@@ -43,7 +43,7 @@ class Agreement extends \Magento\Paypal\Model\Billing\AbstractAgreement
     protected $_relatedOrders = [];
 
     /**
-     * @var \Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory
+     * @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory
      */
     protected $_billingAgreementFactory;
 
@@ -56,9 +56,9 @@ class Agreement extends \Magento\Paypal\Model\Billing\AbstractAgreement
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Payment\Helper\Data $paymentData
-     * @param \Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory $billingAgreementFactory
+     * @param \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory $billingAgreementFactory
      * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -66,9 +66,9 @@ class Agreement extends \Magento\Paypal\Model\Billing\AbstractAgreement
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Payment\Helper\Data $paymentData,
-        \Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory $billingAgreementFactory,
+        \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory $billingAgreementFactory,
         \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -84,7 +84,7 @@ class Agreement extends \Magento\Paypal\Model\Billing\AbstractAgreement
      */
     protected function _construct()
     {
-        $this->_init('Magento\Paypal\Model\Resource\Billing\Agreement');
+        $this->_init('Magento\Paypal\Model\ResourceModel\Billing\Agreement');
     }
 
     /**
@@ -266,7 +266,7 @@ class Agreement extends \Magento\Paypal\Model\Billing\AbstractAgreement
      * Retrieve available customer Billing Agreements
      *
      * @param int $customerId
-     * @return \Magento\Paypal\Model\Resource\Billing\Agreement\Collection
+     * @return \Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection
      */
     public function getAvailableCustomerBillingAgreements($customerId)
     {
diff --git a/app/code/Magento/Paypal/Model/Billing/Agreement/OrdersUpdater.php b/app/code/Magento/Paypal/Model/Billing/Agreement/OrdersUpdater.php
index 9fc94b8168e6c46413258cba2b118b1f85da1fa7..e608b36bb656566149992f69f1b9af4ad29652b5 100644
--- a/app/code/Magento/Paypal/Model/Billing/Agreement/OrdersUpdater.php
+++ b/app/code/Magento/Paypal/Model/Billing/Agreement/OrdersUpdater.php
@@ -16,19 +16,19 @@ class OrdersUpdater implements \Magento\Framework\View\Layout\Argument\UpdaterIn
     protected $_registryManager;
 
     /**
-     * @var \Magento\Paypal\Model\Resource\Billing\Agreement
+     * @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement
      */
     protected $_agreementResource;
 
     /**
      * @param \Magento\Framework\Registry $coreRegistry
-     * @param \Magento\Paypal\Model\Resource\Billing\Agreement $agreementResource
+     * @param \Magento\Paypal\Model\ResourceModel\Billing\Agreement $agreementResource
      * @param array $data
      * @throws \InvalidArgumentException
      */
     public function __construct(
         \Magento\Framework\Registry $coreRegistry,
-        \Magento\Paypal\Model\Resource\Billing\Agreement $agreementResource,
+        \Magento\Paypal\Model\ResourceModel\Billing\Agreement $agreementResource,
         array $data = []
     ) {
         $this->_registryManager = isset($data['registry']) ? $data['registry'] : $coreRegistry;
diff --git a/app/code/Magento/Paypal/Model/Cert.php b/app/code/Magento/Paypal/Model/Cert.php
index 40278db51dbab0fedd964feff74f0051c5a4b7ff..a5e4cb8be07a7eb49711298c047a7080900cb137 100644
--- a/app/code/Magento/Paypal/Model/Cert.php
+++ b/app/code/Magento/Paypal/Model/Cert.php
@@ -33,7 +33,7 @@ class Cert extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -42,7 +42,7 @@ class Cert extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -58,7 +58,7 @@ class Cert extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Paypal\Model\Resource\Cert');
+        $this->_init('Magento\Paypal\Model\ResourceModel\Cert');
     }
 
     /**
diff --git a/app/code/Magento/Paypal/Model/Config.php b/app/code/Magento/Paypal/Model/Config.php
index b23574a3654d1e418649676d8537d3fe0515e6fc..dd5a0696e3e295878b3b6ec3a6053866d340f674 100644
--- a/app/code/Magento/Paypal/Model/Config.php
+++ b/app/code/Magento/Paypal/Model/Config.php
@@ -230,6 +230,7 @@ class Config extends AbstractConfig
         'BG',
         'BR',
         'CA',
+        'CN',
         'CH',
         'CL',
         'CR',
@@ -273,6 +274,7 @@ class Config extends AbstractConfig
         'PH',
         'PL',
         'PT',
+        'RU',
         'RE',
         'RO',
         'SE',
diff --git a/app/code/Magento/Paypal/Model/Direct.php b/app/code/Magento/Paypal/Model/Direct.php
index 7425df2971486c8fac01d4918e6e526fcb9f7e40..9433a3b5761b1a9ba07837aeaf16ac2261591af2 100644
--- a/app/code/Magento/Paypal/Model/Direct.php
+++ b/app/code/Magento/Paypal/Model/Direct.php
@@ -149,7 +149,7 @@ class Direct extends \Magento\Payment\Model\Method\Cc
      * @param \Magento\Framework\UrlInterface $urlBuilder
      * @param \Magento\Framework\App\RequestInterface $requestHttp
      * @param CartFactory $cartFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -169,7 +169,7 @@ class Direct extends \Magento\Payment\Model\Method\Cc
         \Magento\Framework\UrlInterface $urlBuilder,
         \Magento\Framework\App\RequestInterface $requestHttp,
         \Magento\Paypal\Model\CartFactory $cartFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Express.php b/app/code/Magento/Paypal/Model/Express.php
index 40d3b293b33ea8b3909f3983f508b3d178d20594..52a3882a169fce442ae1c5060492b932cedcda51 100644
--- a/app/code/Magento/Paypal/Model/Express.php
+++ b/app/code/Magento/Paypal/Model/Express.php
@@ -193,7 +193,7 @@ class Express extends \Magento\Payment\Model\Method\AbstractMethod
      * @param \Magento\Framework\Exception\LocalizedExceptionFactory $exception
      * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository
      * @param Transaction\BuilderInterface $transactionBuilder
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -214,7 +214,7 @@ class Express extends \Magento\Payment\Model\Method\AbstractMethod
         \Magento\Framework\Exception\LocalizedExceptionFactory $exception,
         \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository,
         \Magento\Sales\Model\Order\Payment\Transaction\BuilderInterface $transactionBuilder,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Express/Checkout.php b/app/code/Magento/Paypal/Model/Express/Checkout.php
index b1bd45a432ba3ea9fbaaef332c650fc7b8719256..d3b0cf72fc76bf9047b4a82e4cdc663380834123 100644
--- a/app/code/Magento/Paypal/Model/Express/Checkout.php
+++ b/app/code/Magento/Paypal/Model/Express/Checkout.php
@@ -830,6 +830,7 @@ class Checkout
             case \Magento\Sales\Model\Order::STATE_COMPLETE:
             case \Magento\Sales\Model\Order::STATE_PAYMENT_REVIEW:
                 $this->orderSender->send($order);
+                $this->_checkoutSession->start();
                 break;
             default:
                 break;
@@ -1190,10 +1191,10 @@ class Checkout
     /**
      * Set shipping options to api
      * @param \Magento\Paypal\Model\Cart $cart
-     * @param \Magento\Quote\Model\Quote\Address $address
+     * @param \Magento\Quote\Model\Quote\Address|null $address
      * @return void
      */
-    private function setShippingOptions(PaypalCart $cart, Address $address)
+    private function setShippingOptions(PaypalCart $cart, Address $address = null)
     {
         // for included tax always disable line items (related to paypal amount rounding problem)
         $this->_api->setIsLineItemsEnabled($this->_config->getValue(PaypalConfig::TRANSFER_CART_LINE_ITEMS));
diff --git a/app/code/Magento/Paypal/Model/Hostedpro.php b/app/code/Magento/Paypal/Model/Hostedpro.php
index 421b536d64d945a11bb13abadfb2d1eb226ecd13..61d0c35c916950496b2ed6fd58d9d748be781802 100644
--- a/app/code/Magento/Paypal/Model/Hostedpro.php
+++ b/app/code/Magento/Paypal/Model/Hostedpro.php
@@ -85,7 +85,7 @@ class Hostedpro extends \Magento\Paypal\Model\Direct
      * @param \Magento\Framework\App\RequestInterface $requestHttp
      * @param CartFactory $cartFactory
      * @param Hostedpro\RequestFactory $hostedproRequestFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -106,7 +106,7 @@ class Hostedpro extends \Magento\Paypal\Model\Direct
         \Magento\Framework\App\RequestInterface $requestHttp,
         \Magento\Paypal\Model\CartFactory $cartFactory,
         \Magento\Paypal\Model\Hostedpro\RequestFactory $hostedproRequestFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Ipn.php b/app/code/Magento/Paypal/Model/Ipn.php
index 9a14dfdc010b92710c65579cf84350a212e0d18d..811cbf70ebc85ef5db6259585ff2db11916a0527 100644
--- a/app/code/Magento/Paypal/Model/Ipn.php
+++ b/app/code/Magento/Paypal/Model/Ipn.php
@@ -11,6 +11,7 @@ namespace Magento\Paypal\Model;
 use Exception;
 use Magento\Sales\Model\Order\Email\Sender\CreditmemoSender;
 use Magento\Sales\Model\Order\Email\Sender\OrderSender;
+use Magento\Paypal\Model\Info;
 
 /**
  * PayPal Instant Payment Notification processor model
@@ -577,15 +578,15 @@ class Ipn extends \Magento\Paypal\Model\AbstractIpn implements IpnInterface
          * TODO: implement logic in one place
          * @see \Magento\Paypal\Model\Pro::importPaymentInfo()
          */
-        if ($this->_paypalInfo->isPaymentReviewRequired($payment)) {
+        if (Info::isPaymentReviewRequired($payment)) {
             $payment->setIsTransactionPending(true);
             if ($fraudFilters) {
                 $payment->setIsFraudDetected(true);
             }
         }
-        if ($this->_paypalInfo->isPaymentSuccessful($payment)) {
+        if (Info::isPaymentSuccessful($payment)) {
             $payment->setIsTransactionApproved(true);
-        } elseif ($this->_paypalInfo->isPaymentFailed($payment)) {
+        } elseif (Info::isPaymentFailed($payment)) {
             $payment->setIsTransactionDenied(true);
         }
 
diff --git a/app/code/Magento/Paypal/Model/Method/Agreement.php b/app/code/Magento/Paypal/Model/Method/Agreement.php
index e567a483da265fe5be2b95f1e32603da2786e55c..93321eefc89f1eaa6629a146e35ef9b86285f63b 100644
--- a/app/code/Magento/Paypal/Model/Method/Agreement.php
+++ b/app/code/Magento/Paypal/Model/Method/Agreement.php
@@ -128,7 +128,7 @@ class Agreement extends \Magento\Paypal\Model\Payment\Method\Billing\AbstractAgr
      * @param \Magento\Paypal\Model\ProFactory $proFactory
      * @param \Magento\Framework\UrlInterface $urlBuilder
      * @param \Magento\Paypal\Model\CartFactory $cartFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -146,7 +146,7 @@ class Agreement extends \Magento\Paypal\Model\Payment\Method\Billing\AbstractAgr
         \Magento\Paypal\Model\ProFactory $proFactory,
         \Magento\Framework\UrlInterface $urlBuilder,
         \Magento\Paypal\Model\CartFactory $cartFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Payflow/Transparent.php b/app/code/Magento/Paypal/Model/Payflow/Transparent.php
index 75ceb1b6b2fa7494cc12526097bef9e035468482..b47e8af2012c36bffa529c63bb89ce819edb91f2 100644
--- a/app/code/Magento/Paypal/Model/Payflow/Transparent.php
+++ b/app/code/Magento/Paypal/Model/Payflow/Transparent.php
@@ -53,7 +53,7 @@ class Transparent extends Payflowpro implements TransparentInterface
      * @param Gateway $gateway
      * @param HandlerInterface $errorHandler
      * @param ResponseValidator $responseValidator
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -73,7 +73,7 @@ class Transparent extends Payflowpro implements TransparentInterface
         Gateway $gateway,
         HandlerInterface $errorHandler,
         ResponseValidator $responseValidator,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -123,9 +123,8 @@ class Transparent extends Payflowpro implements TransparentInterface
         $request = $this->buildBasicRequest();
 
         $order = $payment->getOrder();
-        if (!empty($order)) {
-            $request = $this->fillCustomerContacts($order, $request);
-        }
+        $this->addRequestOrderInfo($request, $order);
+        $request = $this->fillCustomerContacts($order, $request);
 
         $request->setTrxtype(self::TRXTYPE_AUTH_ONLY);
         $request->setOrigid($payment->getAdditionalInformation('pnref'));
diff --git a/app/code/Magento/Paypal/Model/PayflowExpress.php b/app/code/Magento/Paypal/Model/PayflowExpress.php
index 6009f0cdfc3234b181c03c77f667e3061be597b1..a45f1153b67b54cfe482ec1cf97b9ddfdd269c81 100644
--- a/app/code/Magento/Paypal/Model/PayflowExpress.php
+++ b/app/code/Magento/Paypal/Model/PayflowExpress.php
@@ -66,7 +66,7 @@ class PayflowExpress extends \Magento\Paypal\Model\Express
      * @param \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository
      * @param Transaction\BuilderInterface $transactionBuilder
      * @param InfoFactory $paypalInfoFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -88,7 +88,7 @@ class PayflowExpress extends \Magento\Paypal\Model\Express
         \Magento\Sales\Api\TransactionRepositoryInterface $transactionRepository,
         \Magento\Sales\Model\Order\Payment\Transaction\BuilderInterface $transactionBuilder,
         InfoFactory $paypalInfoFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Payflowlink.php b/app/code/Magento/Paypal/Model/Payflowlink.php
index 4d118d725b29e7a5a37e85cbd3f6eaea2240192d..91513032674c6250ab1a55306609cb533e432932 100644
--- a/app/code/Magento/Paypal/Model/Payflowlink.php
+++ b/app/code/Magento/Paypal/Model/Payflowlink.php
@@ -132,7 +132,7 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro
      * @param \Magento\Framework\App\RequestInterface $requestHttp
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
      * @param OrderSender $orderSender
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -158,7 +158,7 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro
         \Magento\Framework\App\RequestInterface $requestHttp,
         \Magento\Store\Model\WebsiteFactory $websiteFactory,
         OrderSender $orderSender,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -413,38 +413,16 @@ class Payflowlink extends \Magento\Paypal\Model\Payflowpro
     protected function _buildTokenRequest(\Magento\Sales\Model\Order\Payment $payment)
     {
         $request = $this->buildBasicRequest();
-        $request->setCreatesecuretoken(
-            'Y'
-        )->setSecuretokenid(
-            $this->mathRandom->getUniqueHash()
-        )->setTrxtype(
-            $this->_getTrxTokenType()
-        )->setAmt(
-            sprintf('%.2F', $payment->getOrder()->getBaseTotalDue())
-        )->setCurrency(
-            $payment->getOrder()->getBaseCurrencyCode()
-        )->setInvnum(
-            $payment->getOrder()->getIncrementId()
-        )->setCustref(
-            $payment->getOrder()->getIncrementId()
-        )->setPonum(
-            $payment->getOrder()->getId()
-        );
+        $request->setCreatesecuretoken('Y')
+            ->setSecuretokenid($this->mathRandom->getUniqueHash())
+            ->setTrxtype($this->_getTrxTokenType());
 
         $order = $payment->getOrder();
-        if (empty($order)) {
-            return $request;
-        }
+        $request->setAmt(sprintf('%.2F', $order->getBaseTotalDue()))
+            ->setCurrency($order->getBaseCurrencyCode());
+        $this->addRequestOrderInfo($request, $order);
 
-        $billing = $order->getBillingAddress();
-        if (!empty($billing)) {
-            $request = $this->setBilling($request, $billing);
-            $request->setEmail($order->getCustomerEmail());
-        }
-        $shipping = $order->getShippingAddress();
-        if (!empty($shipping)) {
-            $request = $this->setShipping($request, $shipping);
-        }
+        $request = $this->fillCustomerContacts($order, $request);
         //pass store Id to request
         $request->setData('USER1', $order->getStoreId());
         $request->setData('USER2', $this->_getSecureSilentPostHash($payment));
diff --git a/app/code/Magento/Paypal/Model/Payflowpro.php b/app/code/Magento/Paypal/Model/Payflowpro.php
index ccd9d508392d523064b9448ddc6ce35a74148321..6efc7e7cca4ed1735aeeaaacc8deee09aaf18eb1 100644
--- a/app/code/Magento/Paypal/Model/Payflowpro.php
+++ b/app/code/Magento/Paypal/Model/Payflowpro.php
@@ -15,6 +15,7 @@ use Magento\Sales\Model\Order\Payment;
 use Magento\Payment\Model\Method\Online\GatewayInterface;
 use Magento\Payment\Model\Method\ConfigInterface;
 use Magento\Paypal\Model\Config;
+use Magento\Sales\Model\Order;
 use Magento\Store\Model\ScopeInterface;
 
 /**
@@ -270,7 +271,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte
      * @param ConfigInterfaceFactory $configFactory
      * @param Gateway $gateway
      * @param HandlerInterface $errorHandler
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -289,7 +290,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte
         ConfigInterfaceFactory $configFactory,
         Gateway $gateway,
         HandlerInterface $errorHandler,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -362,6 +363,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte
     public function authorize(\Magento\Payment\Model\InfoInterface $payment, $amount)
     {
         $request = $this->_buildPlaceRequest($payment, $amount);
+        $this->addRequestOrderInfo($request, $payment->getOrder());
         $request->setTrxtype(self::TRXTYPE_AUTH_ONLY);
         $response = $this->postRequest($request, $this->getConfig());
         $this->processErrors($response);
@@ -413,6 +415,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte
             $request = $this->_buildPlaceRequest($payment, $amount);
             $request->setTrxtype(self::TRXTYPE_SALE);
         }
+        $this->addRequestOrderInfo($request, $payment->getOrder());
 
         $response = $this->postRequest($request, $this->getConfig());
         $this->processErrors($response);
@@ -580,7 +583,7 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte
      *
      * @param Object|Payment $payment
      * @param float $amount
-     * @return Object
+     * @return DataObject
      */
     protected function _buildPlaceRequest(DataObject $payment, $amount)
     {
@@ -591,17 +594,8 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte
         $request->setCvv2($payment->getCcCid());
 
         $order = $payment->getOrder();
-        if (!empty($order)) {
-            $request->setCurrency($order->getBaseCurrencyCode());
-
-            $orderIncrementId = $order->getIncrementId();
-
-            $request->setCurrency($order->getBaseCurrencyCode())
-                ->setInvnum($orderIncrementId)
-                ->setPonum($order->getId())
-                ->setComment1($orderIncrementId);
-            $request = $this->fillCustomerContacts($order, $request);
-        }
+        $request->setCurrency($order->getBaseCurrencyCode());
+        $request = $this->fillCustomerContacts($order, $request);
         return $request;
     }
 
@@ -828,10 +822,6 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte
      */
     public function fillCustomerContacts(DataObject $order, DataObject $request)
     {
-        $customerId = $order->getCustomerId();
-        if ($customerId) {
-            $request->setCustref($customerId);
-        }
         $billing = $order->getBillingAddress();
         if (!empty($billing)) {
             $request = $this->setBilling($request, $billing);
@@ -844,4 +834,23 @@ class Payflowpro extends \Magento\Payment\Model\Method\Cc implements GatewayInte
         }
         return $request;
     }
+
+    /**
+     * Add order details to payment request
+     * @param DataObject $request
+     * @param Order $order
+     * @return void
+     */
+    protected function addRequestOrderInfo(DataObject $request, Order $order)
+    {
+        $id = $order->getId();
+        // for auth request order id is not exists yet
+        if (!empty($id)) {
+            $request->setPonum($id);
+        }
+        $orderIncrementId = $order->getIncrementId();
+        $request->setCustref($orderIncrementId)
+            ->setInvnum($orderIncrementId)
+            ->setComment1($orderIncrementId);
+    }
 }
diff --git a/app/code/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreement.php b/app/code/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreement.php
index a152ff50cb7940151c600be0b7f9b1821833f4f1..521a61300267614074234bc2b98d0aca1048662f 100644
--- a/app/code/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreement.php
+++ b/app/code/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreement.php
@@ -52,7 +52,7 @@ abstract class AbstractAgreement extends \Magento\Payment\Model\Method\AbstractM
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Payment\Model\Method\Logger $logger
      * @param \Magento\Paypal\Model\Billing\AgreementFactory $agreementFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -66,7 +66,7 @@ abstract class AbstractAgreement extends \Magento\Payment\Model\Method\AbstractM
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Payment\Model\Method\Logger $logger,
         \Magento\Paypal\Model\Billing\AgreementFactory $agreementFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/Pro.php b/app/code/Magento/Paypal/Model/Pro.php
index f3e29e6f8268ca828cd945ae4f5cb6ba6efc0af5..e3e829132b8dc76ec4b4f94ca603f8432ee71b51 100644
--- a/app/code/Magento/Paypal/Model/Pro.php
+++ b/app/code/Magento/Paypal/Model/Pro.php
@@ -10,6 +10,7 @@ namespace Magento\Paypal\Model;
 
 use Magento\Paypal\Model\Api\AbstractApi;
 use Magento\Sales\Api\TransactionRepositoryInterface;
+use Magento\Paypal\Model\Info;
 
 /**
  * PayPal Website Payments Pro implementation for payment method instances
@@ -128,9 +129,9 @@ class Pro
      * @param int|null $storeId
      * @return $this
      */
-    public function setConfig(\Magento\Paypal\Model\Config $instace, $storeId = null)
+    public function setConfig(\Magento\Paypal\Model\Config $instance, $storeId = null)
     {
-        $this->_config = $instace;
+        $this->_config = $instance;
         if (null !== $storeId) {
             $this->_config->setStoreId($storeId);
         }
@@ -206,14 +207,14 @@ class Pro
         if ($from->getDataUsingMethod(\Magento\Paypal\Model\Info::IS_FRAUD)) {
             $to->setIsTransactionPending(true);
             $to->setIsFraudDetected(true);
-        } elseif ($this->getInfo()->isPaymentReviewRequired($to)) {
+        } elseif (Info::isPaymentReviewRequired($to)) {
             $to->setIsTransactionPending(true);
         }
 
         // give generic info about transaction state
-        if ($this->getInfo()->isPaymentSuccessful($to)) {
+        if (Info::isPaymentSuccessful($to)) {
             $to->setIsTransactionApproved(true);
-        } elseif ($this->getInfo()->isPaymentFailed($to)) {
+        } elseif (Info::isPaymentFailed($to)) {
             $to->setIsTransactionDenied(true);
         }
 
@@ -255,17 +256,17 @@ class Pro
         if (!$authTransactionId) {
             return false;
         }
-        $api = $this->getApi()->setAuthorizationId(
-            $authTransactionId
-        )->setIsCaptureComplete(
-            $payment->getShouldCloseParentTransaction()
-        )->setAmount(
-            $amount
-        )->setCurrencyCode(
-            $payment->getOrder()->getBaseCurrencyCode()
-        )->setInvNum(
-            $payment->getOrder()->getIncrementId()
-        );
+        $api = $this->getApi()
+            ->setAuthorizationId($authTransactionId)
+            ->setIsCaptureComplete($payment->getShouldCloseParentTransaction())
+            ->setAmount($amount);
+
+        $order = $payment->getOrder();
+        $orderIncrementId = $order->getIncrementId();
+        $api->setCurrencyCode($order->getBaseCurrencyCode())
+            ->setInvNum($orderIncrementId)
+            ->setCustref($orderIncrementId)
+            ->setPonum($order->getId());
         // TODO: pass 'NOTE' to API
 
         $api->callDoCapture();
@@ -345,7 +346,7 @@ class Pro
      */
     protected function _isPaymentReviewRequired(\Magento\Payment\Model\InfoInterface $payment)
     {
-        return \Magento\Paypal\Model\Info::isPaymentReviewRequired($payment);
+        return Info::isPaymentReviewRequired($payment);
     }
 
     /**
@@ -362,7 +363,7 @@ class Pro
         // check whether the review is still needed
         $api->callGetTransactionDetails();
         $this->importPaymentInfo($api, $payment);
-        if (!$this->getInfo()->isPaymentReviewRequired($payment)) {
+        if (!Info::isPaymentReviewRequired($payment)) {
             return false;
         }
 
diff --git a/app/code/Magento/Paypal/Model/Report/Settlement.php b/app/code/Magento/Paypal/Model/Report/Settlement.php
index f9a57e81cde03b2be893800bc74f48e1d946cfdd..4fc8633bafa2fdd22ddeb3442e681f3534fc26c7 100644
--- a/app/code/Magento/Paypal/Model/Report/Settlement.php
+++ b/app/code/Magento/Paypal/Model/Report/Settlement.php
@@ -17,8 +17,8 @@ use Magento\Framework\Filesystem\DirectoryList;
  * Perform fetching reports from remote servers with following saving them to database
  * Prepare report rows for \Magento\Paypal\Model\Report\Settlement\Row model
  *
- * @method \Magento\Paypal\Model\Resource\Report\Settlement _getResource()
- * @method \Magento\Paypal\Model\Resource\Report\Settlement getResource()
+ * @method \Magento\Paypal\Model\ResourceModel\Report\Settlement _getResource()
+ * @method \Magento\Paypal\Model\ResourceModel\Report\Settlement getResource()
  * @method string getReportDate()
  * @method \Magento\Paypal\Model\Report\Settlement setReportDate(string $value)
  * @method string getAccountId()
@@ -168,7 +168,7 @@ class Settlement extends \Magento\Framework\Model\AbstractModel
     * @param \Magento\Framework\Filesystem $filesystem
     * @param \Magento\Store\Model\StoreManagerInterface $storeManager
     * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
-    * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+    * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
     * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
     * @param array $data
     */
@@ -178,7 +178,7 @@ class Settlement extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -195,7 +195,7 @@ class Settlement extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Paypal\Model\Resource\Report\Settlement');
+        $this->_init('Magento\Paypal\Model\ResourceModel\Report\Settlement');
     }
 
     /**
diff --git a/app/code/Magento/Paypal/Model/Report/Settlement/Row.php b/app/code/Magento/Paypal/Model/Report/Settlement/Row.php
index 650c296ab35f3167627f1869d1d1f0fe0348dfde..5199488d3a3512136a59a2610b4462b4d259e049 100644
--- a/app/code/Magento/Paypal/Model/Report/Settlement/Row.php
+++ b/app/code/Magento/Paypal/Model/Report/Settlement/Row.php
@@ -9,8 +9,8 @@ namespace Magento\Paypal\Model\Report\Settlement;
  * Model for report rows
  */
 /**
- * @method \Magento\Paypal\Model\Resource\Report\Settlement\Row _getResource()
- * @method \Magento\Paypal\Model\Resource\Report\Settlement\Row getResource()
+ * @method \Magento\Paypal\Model\ResourceModel\Report\Settlement\Row _getResource()
+ * @method \Magento\Paypal\Model\ResourceModel\Report\Settlement\Row getResource()
  * @method int getReportId()
  * @method Row setReportId(int $value)
  * @method string getTransactionId()
@@ -72,7 +72,7 @@ class Row extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Paypal\Model\Resource\Report\Settlement\Row');
+        $this->_init('Magento\Paypal\Model\ResourceModel\Report\Settlement\Row');
     }
 
     /**
diff --git a/app/code/Magento/Paypal/Model/Resource/Billing/Agreement.php b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php
similarity index 83%
rename from app/code/Magento/Paypal/Model/Resource/Billing/Agreement.php
rename to app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php
index c3e6258ffebdae9a8c8c336e4dea74c809585113..6f714ae437e605c3836c55a0aa430a845b1f23fd 100644
--- a/app/code/Magento/Paypal/Model/Resource/Billing/Agreement.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Paypal\Model\Resource\Billing;
+namespace Magento\Paypal\Model\ResourceModel\Billing;
 
 /**
  * Billing agreement resource model
  */
-class Agreement extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Agreement extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
@@ -39,11 +39,11 @@ class Agreement extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Add billing agreement filter on orders collection
      *
-     * @param \Magento\Sales\Model\Resource\Order\Collection $orderCollection
+     * @param \Magento\Sales\Model\ResourceModel\Order\Collection $orderCollection
      * @param string|int|array $agreementIds
      * @return $this
      */
-    public function addOrdersFilter(\Magento\Sales\Model\Resource\Order\Collection $orderCollection, $agreementIds)
+    public function addOrdersFilter(\Magento\Sales\Model\ResourceModel\Order\Collection $orderCollection, $agreementIds)
     {
         $agreementIds = is_array($agreementIds) ? $agreementIds : [$agreementIds];
         $orderCollection->getSelect()->joinInner(
diff --git a/app/code/Magento/Paypal/Model/Resource/Billing/Agreement/Collection.php b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement/Collection.php
similarity index 80%
rename from app/code/Magento/Paypal/Model/Resource/Billing/Agreement/Collection.php
rename to app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement/Collection.php
index 92061e743671e2b4b559ef95563167f5f762aa44..f08876e5e61efdde4344620f5cd63977309f93b6 100644
--- a/app/code/Magento/Paypal/Model/Resource/Billing/Agreement/Collection.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Billing/Agreement/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Paypal\Model\Resource\Billing\Agreement;
+namespace Magento\Paypal\Model\ResourceModel\Billing\Agreement;
 
 use Magento\Customer\Api\CustomerMetadataInterface;
 
 /**
  * Billing agreements resource collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Mapping for fields
@@ -28,7 +28,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     ];
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer
+     * @var \Magento\Customer\Model\ResourceModel\Customer
      */
     protected $_customerResource;
 
@@ -42,20 +42,20 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Customer\Model\Resource\Customer $customerResource
+     * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource
      * @param \Magento\Eav\Helper\Data $eavHelper
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Customer\Model\Resource\Customer $customerResource,
+        \Magento\Customer\Model\ResourceModel\Customer $customerResource,
         \Magento\Eav\Helper\Data $eavHelper,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->_eavHelper = $eavHelper;
@@ -69,7 +69,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Paypal\Model\Billing\Agreement', 'Magento\Paypal\Model\Resource\Billing\Agreement');
+        $this->_init('Magento\Paypal\Model\Billing\Agreement', 'Magento\Paypal\Model\ResourceModel\Billing\Agreement');
     }
 
     /**
diff --git a/app/code/Magento/Paypal/Model/Resource/Cert.php b/app/code/Magento/Paypal/Model/ResourceModel/Cert.php
similarity index 87%
rename from app/code/Magento/Paypal/Model/Resource/Cert.php
rename to app/code/Magento/Paypal/Model/ResourceModel/Cert.php
index 65c86502a3c5776db20e182794efa9dea91555d6..13de6e3c1f327c1beca3aa5107bc7e2cd654e363 100644
--- a/app/code/Magento/Paypal/Model/Resource/Cert.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Cert.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Paypal\Model\Resource;
+namespace Magento\Paypal\Model\ResourceModel;
 
 /**
  * PayPal resource model for certificate based authentication
  */
-class Cert extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Cert extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime\DateTime
@@ -21,13 +21,13 @@ class Cert extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $coreDate,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
@@ -51,7 +51,7 @@ class Cert extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * Set date of last update
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _beforeSave(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Paypal/Model/Resource/Report/Settlement.php b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php
similarity index 93%
rename from app/code/Magento/Paypal/Model/Resource/Report/Settlement.php
rename to app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php
index 5bda3e2db5c76cb9025907b06daa4b14fa90e4ff..eed10fa9d69da3a56c37d22bcd1e9724b820f856 100644
--- a/app/code/Magento/Paypal/Model/Resource/Report/Settlement.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Paypal\Model\Resource\Report;
+namespace Magento\Paypal\Model\ResourceModel\Report;
 
 /**
  * Report settlement resource model
  */
-class Settlement extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Settlement extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Table name
@@ -26,12 +26,12 @@ class Settlement extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_coreDate;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $coreDate
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $coreDate,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Paypal/Model/Resource/Report/Settlement/Options/TransactionEvents.php b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Options/TransactionEvents.php
similarity index 91%
rename from app/code/Magento/Paypal/Model/Resource/Report/Settlement/Options/TransactionEvents.php
rename to app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Options/TransactionEvents.php
index 5203c265e569467547dd7a1cbea7c455421d4777..b75e7fc6bb9294b5a79fbc837f998ae9b8524460 100644
--- a/app/code/Magento/Paypal/Model/Resource/Report/Settlement/Options/TransactionEvents.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Options/TransactionEvents.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Paypal\Model\Resource\Report\Settlement\Options;
+namespace Magento\Paypal\Model\ResourceModel\Report\Settlement\Options;
 
 /**
  * Transaction Events Types Options
diff --git a/app/code/Magento/Paypal/Model/Resource/Report/Settlement/Row.php b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row.php
similarity index 77%
rename from app/code/Magento/Paypal/Model/Resource/Report/Settlement/Row.php
rename to app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row.php
index fae868aed4dda93475db57f01c3a6021a4d03b5b..b2bc99495f7db5362e9761e702862350d5800658 100644
--- a/app/code/Magento/Paypal/Model/Resource/Report/Settlement/Row.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Paypal\Model\Resource\Report\Settlement;
+namespace Magento\Paypal\Model\ResourceModel\Report\Settlement;
 
 /**
  * Report settlement row resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Row extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Row extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource model initialization.
diff --git a/app/code/Magento/Paypal/Model/Resource/Report/Settlement/Row/Collection.php b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row/Collection.php
similarity index 82%
rename from app/code/Magento/Paypal/Model/Resource/Report/Settlement/Row/Collection.php
rename to app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row/Collection.php
index 81baa6cc20960a2523fcab1238e56075832ddd8c..6fcd59ad141e10da8f71859175e7c49599cdac67 100644
--- a/app/code/Magento/Paypal/Model/Resource/Report/Settlement/Row/Collection.php
+++ b/app/code/Magento/Paypal/Model/ResourceModel/Report/Settlement/Row/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Paypal\Model\Resource\Report\Settlement\Row;
+namespace Magento\Paypal\Model\ResourceModel\Report\Settlement\Row;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initializing
@@ -22,7 +22,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     {
         $this->_init(
             'Magento\Paypal\Model\Report\Settlement\Row',
-            'Magento\Paypal\Model\Resource\Report\Settlement\Row'
+            'Magento\Paypal\Model\ResourceModel\Report\Settlement\Row'
         );
     }
 
diff --git a/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php b/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php
index 93bf2167856165c70bb905e51eb4f78271fe5e03..14607a6c87d9cb01be32d4193dc0b9e55e1b555e 100644
--- a/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php
+++ b/app/code/Magento/Paypal/Model/System/Config/Backend/Cert.php
@@ -35,7 +35,7 @@ class Cert extends \Magento\Framework\App\Config\Value
      * @param \Magento\Paypal\Model\CertFactory $certFactory
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
      * @param \Magento\Framework\Filesystem $filesystem
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -46,7 +46,7 @@ class Cert extends \Magento\Framework\App\Config\Value
         \Magento\Paypal\Model\CertFactory $certFactory,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
         \Magento\Framework\Filesystem $filesystem,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php b/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php
index f192c22700fb0913f538983cae5cb5396178cc8b..8afc08f14711c884e8cae9e940c7c9af13c33f81 100644
--- a/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php
+++ b/app/code/Magento/Paypal/Model/System/Config/Backend/Cron.php
@@ -21,7 +21,7 @@ class Cron extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Config\ValueFactory $configValueFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -30,7 +30,7 @@ class Cron extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Config\ValueFactory $configValueFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php b/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php
index fb551aa4d3a12f039ab11db08ec246feb5b73510..caa265b4e07a3ccdadf35d62d7fda84a64d9629d 100644
--- a/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php
+++ b/app/code/Magento/Paypal/Model/System/Config/Backend/MerchantCountry.php
@@ -28,7 +28,7 @@ class MerchantCountry extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Directory\Helper\Data $directoryHelper
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -38,7 +38,7 @@ class MerchantCountry extends \Magento\Framework\App\Config\Value
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Directory\Helper\Data $directoryHelper,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Paypal/Model/System/Config/Source/BuyerCountry.php b/app/code/Magento/Paypal/Model/System/Config/Source/BuyerCountry.php
index 90b55700b55faeba3afbd91b10692e73d2df8c0f..298b5bbf4eddd5dc5e2f84e795c8d44d045d102d 100644
--- a/app/code/Magento/Paypal/Model/System/Config/Source/BuyerCountry.php
+++ b/app/code/Magento/Paypal/Model/System/Config/Source/BuyerCountry.php
@@ -16,17 +16,17 @@ class BuyerCountry implements \Magento\Framework\Option\ArrayInterface
     protected $_configFactory;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Country\CollectionFactory
      */
     protected $_countryCollectionFactory;
 
     /**
      * @param \Magento\Paypal\Model\ConfigFactory $configFactory
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
      */
     public function __construct(
         \Magento\Paypal\Model\ConfigFactory $configFactory,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
     ) {
         $this->_configFactory = $configFactory;
         $this->_countryCollectionFactory = $countryCollectionFactory;
diff --git a/app/code/Magento/Paypal/Model/System/Config/Source/MerchantCountry.php b/app/code/Magento/Paypal/Model/System/Config/Source/MerchantCountry.php
index 55f5bfac9fd0011f132744a39c835ea884668a23..b8802ac67ce03eb210b3043dd1b39cc00c22fd0d 100644
--- a/app/code/Magento/Paypal/Model/System/Config/Source/MerchantCountry.php
+++ b/app/code/Magento/Paypal/Model/System/Config/Source/MerchantCountry.php
@@ -16,17 +16,17 @@ class MerchantCountry implements \Magento\Framework\Option\ArrayInterface
     protected $_configFactory;
 
     /**
-     * @var \Magento\Directory\Model\Resource\Country\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Country\CollectionFactory
      */
     protected $_countryCollectionFactory;
 
     /**
      * @param \Magento\Paypal\Model\ConfigFactory $configFactory
-     * @param \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
+     * @param \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
      */
     public function __construct(
         \Magento\Paypal\Model\ConfigFactory $configFactory,
-        \Magento\Directory\Model\Resource\Country\CollectionFactory $countryCollectionFactory
+        \Magento\Directory\Model\ResourceModel\Country\CollectionFactory $countryCollectionFactory
     ) {
         $this->_configFactory = $configFactory;
         $this->_countryCollectionFactory = $countryCollectionFactory;
diff --git a/app/code/Magento/Paypal/Test/Unit/Block/Billing/Agreement/ViewTest.php b/app/code/Magento/Paypal/Test/Unit/Block/Billing/Agreement/ViewTest.php
index e820c3f0c6c3aaa3ff4884ffbca59da1e177616b..0ea7b4faa41920220aed8a19827872a19c6f0010 100644
--- a/app/code/Magento/Paypal/Test/Unit/Block/Billing/Agreement/ViewTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Block/Billing/Agreement/ViewTest.php
@@ -12,7 +12,7 @@ namespace Magento\Paypal\Test\Unit\Block\Billing\Agreement;
 class ViewTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory | \PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderCollectionFactory;
 
@@ -31,7 +31,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
         $this->orderCollectionFactory = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\CollectionFactory',
             ['create'],
             [],
             '',
@@ -53,7 +53,7 @@ class ViewTest extends \PHPUnit_Framework_TestCase
         $visibleStatuses = [];
 
         $orderCollection = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Collection',
             ['addFieldToSelect', 'addFieldToFilter', 'setOrder'],
             [],
             '',
diff --git a/app/code/Magento/Paypal/Test/Unit/Block/Billing/AgreementsTest.php b/app/code/Magento/Paypal/Test/Unit/Block/Billing/AgreementsTest.php
index 8645cbd4c632a1fa940c8c4a040d9582d16ad3eb..88a0c737fc4404397e9503befc23368874543e4f 100644
--- a/app/code/Magento/Paypal/Test/Unit/Block/Billing/AgreementsTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Block/Billing/AgreementsTest.php
@@ -13,7 +13,9 @@ class AgreementsTest extends \PHPUnit_Framework_TestCase
     private $context;
 
     /**
-     * @var \Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @codingStandardsIgnoreStart
+     * @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @codingStandardsIgnoreEnd
      */
     private $agreementCollection;
 
@@ -85,7 +87,7 @@ class AgreementsTest extends \PHPUnit_Framework_TestCase
         $this->cache = $this->getMockForAbstractClass('Magento\Framework\App\CacheInterface', [], '', false);
         $this->context->expects($this->once())->method('getCache')->willReturn($this->cache);
         $this->agreementCollection = $this->getMockBuilder(
-            'Magento\Paypal\Model\Resource\Billing\Agreement\CollectionFactory'
+            'Magento\Paypal\Model\ResourceModel\Billing\Agreement\CollectionFactory'
         )->disableOriginalConstructor()->setMethods(['create'])->getMock();
         $this->helper = $this->getMock('Magento\Paypal\Helper\Data', [], [], '', false);
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
@@ -102,7 +104,13 @@ class AgreementsTest extends \PHPUnit_Framework_TestCase
 
     public function testGetBillingAgreements()
     {
-        $collection = $this->getMock('Magento\Paypal\Model\Resource\Billing\Agreement\Collection', [], [], '', false);
+        $collection = $this->getMock(
+            'Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection',
+            [],
+            [],
+            '',
+            false
+        );
         $this->agreementCollection->expects($this->once())->method('create')->willReturn($collection);
         $collection->expects($this->once())->method('addFieldToFilter')->willReturn($collection);
         $collection->expects($this->once())->method('setOrder')->willReturn($collection);
diff --git a/app/code/Magento/Paypal/Test/Unit/Model/Billing/Agreement/OrdersUpdaterTest.php b/app/code/Magento/Paypal/Test/Unit/Model/Billing/Agreement/OrdersUpdaterTest.php
index 68f2910525de90b8d939eecb648067c16b10a848..87f83b7c2e30025d4fa7eeb9c5c0d3ec6dcf88af 100644
--- a/app/code/Magento/Paypal/Test/Unit/Model/Billing/Agreement/OrdersUpdaterTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Model/Billing/Agreement/OrdersUpdaterTest.php
@@ -18,7 +18,7 @@ class OrdersUpdaterTest extends \PHPUnit_Framework_TestCase
     protected $_registry;
 
     /**
-     * @var \Magento\Paypal\Model\Resource\Billing\Agreement|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_agreementResource;
 
@@ -26,7 +26,7 @@ class OrdersUpdaterTest extends \PHPUnit_Framework_TestCase
     {
         $this->_registry = $this->getMock('Magento\Framework\Registry', [], [], '', false);
         $this->_agreementResource = $this->getMock(
-            '\Magento\Paypal\Model\Resource\Billing\Agreement',
+            '\Magento\Paypal\Model\ResourceModel\Billing\Agreement',
             [],
             [],
             '',
@@ -43,7 +43,7 @@ class OrdersUpdaterTest extends \PHPUnit_Framework_TestCase
     public function testUpdate()
     {
         $agreement = $this->getMock('Magento\Paypal\Model\Billing\Agreement', [], [], '', false);
-        $argument = $this->getMock('Magento\Sales\Model\Resource\Order\Collection', [], [], '', false);
+        $argument = $this->getMock('Magento\Sales\Model\ResourceModel\Order\Collection', [], [], '', false);
 
         $this->_registry->expects(
             $this->once()
diff --git a/app/code/Magento/Paypal/Test/Unit/Model/Method/Checks/SpecificationPluginTest.php b/app/code/Magento/Paypal/Test/Unit/Model/Method/Checks/SpecificationPluginTest.php
index 640b2f6fa89fa309e3ee6b9d2c346303f7fcd76a..e5e169782a8f3664ba3ee69d68e4627979b4cb21 100644
--- a/app/code/Magento/Paypal/Test/Unit/Model/Method/Checks/SpecificationPluginTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Model/Method/Checks/SpecificationPluginTest.php
@@ -69,7 +69,7 @@ class SpecificationPluginTest extends \PHPUnit_Framework_TestCase
         $quote = $this->getQuote(1);
         $proceed = $this->getProceedClosure(true, $paymentMethod, $quote);
         $agreementCollection = $this->getMock(
-            'Magento\Paypal\Model\Resource\Billing\Agreement\Collection',
+            'Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/TransparentTest.php b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/TransparentTest.php
index b68d42d2974220ff43a930e1e4517e2a340ed75e..0db76c61d8123f970cfe20bf169e8b83b3d107ae 100644
--- a/app/code/Magento/Paypal/Test/Unit/Model/Payflow/TransparentTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Model/Payflow/TransparentTest.php
@@ -118,8 +118,11 @@ class TransparentTest extends \PHPUnit_Framework_TestCase
      */
     protected function initializationAuthorizeMock()
     {
-        $this->orderMock = $this->getMockBuilder('Magento\Framework\DataObject')
-            ->setMethods(['getCustomerId', 'getBillingAddress', 'getShippingAddress', 'getCustomerEmail'])
+        $this->orderMock = $this->getMockBuilder('Magento\Sales\Model\Order')
+            ->setMethods([
+                'getCustomerId', 'getBillingAddress', 'getShippingAddress', 'getCustomerEmail',
+                'getId', 'getIncrementId'
+            ])
             ->disableOriginalConstructor()
             ->getMock();
         $this->addressBillingMock = $this->getMockBuilder('Magento\Framework\DataObject')
@@ -163,6 +166,12 @@ class TransparentTest extends \PHPUnit_Framework_TestCase
         $this->orderMock->expects($this->once())
             ->method('getBillingAddress')
             ->willReturn($this->addressBillingMock);
+        $this->orderMock->expects(static::once())
+            ->method('getId')
+            ->willReturn(1);
+        $this->orderMock->expects(static::once())
+            ->method('getIncrementId')
+            ->willReturn('0000001');
         $this->orderMock->expects($this->once())
             ->method('getShippingAddress')
             ->willReturn($this->addressShippingMock);
@@ -264,6 +273,9 @@ class TransparentTest extends \PHPUnit_Framework_TestCase
      */
     public function testAuthorizeException()
     {
+        $this->initializationAuthorizeMock();
+        $this->buildRequestData();
+
         $this->gatewayMock->expects($this->once())
             ->method('postRequest')
             ->willThrowException(new \Exception());
@@ -321,6 +333,9 @@ class TransparentTest extends \PHPUnit_Framework_TestCase
         $origResultExactlyCall,
         $origResult
     ) {
+        $this->initializationAuthorizeMock();
+        $this->buildRequestData();
+
         $this->responseMock->expects($this->exactly($resultCodeExactlyCall))
             ->method('getResultCode')
             ->willReturn($resultCode);
diff --git a/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php b/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php
index ff90889d946eb0958998edbf51d6cade7184395b..215680852225b7b3ed5b4507a223fda725b821b5 100644
--- a/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Model/PayflowproTest.php
@@ -18,6 +18,7 @@ use Magento\Store\Model\ScopeInterface;
  */
 class PayflowproTest extends \PHPUnit_Framework_TestCase
 {
+
     /**
      * @var Payflowpro
      */
@@ -26,7 +27,7 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager
      */
-    protected $_helper;
+    protected $helper;
 
     /**
      * @var \Magento\Payment\Model\Method\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject
@@ -108,8 +109,8 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase
         $clientFactory = $this->getMock('Magento\Framework\HTTP\ZendClientFactory', ['create'], [], '', false);
         $clientFactory->expects($this->any())->method('create')->will($this->returnValue($client));
 
-        $this->_helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->payflowpro = $this->_helper->getObject(
+        $this->helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->payflowpro = $this->helper->getObject(
             'Magento\Paypal\Model\Payflowpro',
             [
                 'configFactory' => $configFactoryMock,
@@ -129,7 +130,7 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase
      */
     public function testCanVoid($amountPaid, $paymentType, $expected)
     {
-        $payment = $this->_helper->getObject($paymentType);
+        $payment = $this->helper->getObject($paymentType);
         $payment->setAmountPaid($amountPaid);
         $this->payflowpro->setInfoInstance($payment);
         $this->assertEquals($expected, $this->payflowpro->canVoid());
@@ -161,34 +162,12 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase
      */
     public function testFetchTransactionInfoForBN()
     {
-        $storeMock = $this->getMock(
-            'Magento\Store\Model\Store',
-            ['getId'],
-            [],
-            '',
-            false
-        );
-        $response = new \Magento\Framework\DataObject(
-            [
-                'result' => '0',
-                'pnref' => 'V19A3D27B61E',
-                'respmsg' => 'Approved',
-                'authcode' => '510PNI',
-                'hostcode' => 'A',
-                'request_id' => 'f930d3dc6824c1f7230c5529dc37ae5e',
-                'result_code' => '0',
-            ]
-        );
+        $response = $this->getGatewayResponseObject();
 
         $this->gatewayMock->expects($this->once())
             ->method('postRequest')
             ->willReturn($response);
-        $this->storeManagerMock->expects($this->once())
-            ->method('getStore')
-            ->willReturn($storeMock);
-        $storeMock->expects($this->once())
-            ->method('getId')
-            ->willReturn(77);
+        $this->initStoreMock();
         $this->configMock->expects($this->once())->method('getBuildNotationCode')
             ->will($this->returnValue('BNCODE'));
         $payment = $this->getMock('Magento\Payment\Model\Info', ['setTransactionId', '__wakeup'], [], '', false);
@@ -203,7 +182,7 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase
      */
     public function testSetTransStatus($response, $paymentExpected)
     {
-        $payment = $this->_helper->getObject('Magento\Payment\Model\Info');
+        $payment = $this->helper->getObject('Magento\Payment\Model\Info');
         $this->payflowpro->setTransStatus($payment, $response);
         $this->assertEquals($paymentExpected->getData(), $payment->getData());
     }
@@ -211,7 +190,7 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase
     public function setTransStatusDataProvider()
     {
         return [
-           [
+            [
                 'response' => new \Magento\Framework\DataObject(
                     [
                         'pnref' => 'V19A3D27B61E',
@@ -268,6 +247,53 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($result, $this->payflowpro->isActive($storeId));
     }
 
+    /**
+     * @covers \Magento\Paypal\Model\Payflowpro::capture
+     */
+    public function testCaptureWithBuildPlaceRequest()
+    {
+        $paymentMock = $this->getPaymentMock();
+        $orderMock = $this->getOrderMock();
+
+        // test case to build basic request
+        $paymentMock->expects(static::once())
+            ->method('getAdditionalInformation')
+            ->with('pnref')
+            ->willReturn(false);
+        $paymentMock->expects(static::once())
+            ->method('getParentTransactionId')
+            ->willReturn(false);
+
+        $paymentMock->expects(static::exactly(2))
+            ->method('getOrder')
+            ->willReturn($orderMock);
+
+        $response = $this->execGatewayRequest();
+        $amount = 23.03;
+        $this->payflowpro->capture($paymentMock, $amount);
+        static::assertEquals($response['pnref'], $paymentMock->getTransactionId());
+        static::assertFalse((bool)$paymentMock->getIsTransactionPending());
+    }
+
+    /**
+     * @covers \Magento\Paypal\Model\Payflowpro::authorize
+     */
+    public function testAuthorize()
+    {
+        $paymentMock = $this->getPaymentMock();
+        $orderMock = $this->getOrderMock();
+
+        $paymentMock->expects(static::exactly(2))
+            ->method('getOrder')
+            ->willReturn($orderMock);
+
+        $response = $this->execGatewayRequest();
+        $amount = 43.20;
+        $this->payflowpro->authorize($paymentMock, $amount);
+        static::assertEquals($response['pnref'], $paymentMock->getTransactionId());
+        static::assertFalse((bool)$paymentMock->getIsTransactionPending());
+    }
+
     /**
      * @return array
      */
@@ -296,4 +322,123 @@ class PayflowproTest extends \PHPUnit_Framework_TestCase
             ],
         ];
     }
+
+    /**
+     * Create mock object for store model
+     * @return void
+     */
+    protected function initStoreMock()
+    {
+        $storeId = 27;
+        $storeMock = $this->getMockBuilder('Magento\Store\Model\Store')
+            ->disableOriginalConstructor()
+            ->setMethods(['getId'])
+            ->getMock();
+        $this->storeManagerMock->expects(static::once())
+            ->method('getStore')
+            ->willReturn($storeMock);
+        $storeMock->expects(static::once())
+            ->method('getId')
+            ->willReturn($storeId);
+    }
+
+    /**
+     * Create response object for Payflowpro gateway
+     * @return \Magento\Framework\DataObject
+     */
+    protected function getGatewayResponseObject()
+    {
+        return new \Magento\Framework\DataObject(
+            [
+                'result' => '0',
+                'pnref' => 'V19A3D27B61E',
+                'respmsg' => 'Approved',
+                'authcode' => '510PNI',
+                'hostcode' => 'A',
+                'request_id' => 'f930d3dc6824c1f7230c5529dc37ae5e',
+                'result_code' => '0',
+            ]
+        );
+    }
+
+    /**
+     * Call payflow gateway request and return response object
+     * @return \Magento\Framework\DataObject
+     */
+    protected function execGatewayRequest()
+    {
+        $this->initStoreMock();
+        $response = $this->getGatewayResponseObject();
+        $this->gatewayMock->expects(static::once())
+            ->method('postRequest')
+            ->with(
+                $this->isInstanceOf('Magento\Framework\DataObject'),
+                $this->isInstanceOf('Magento\Paypal\Model\PayflowConfig')
+            )
+            ->willReturn($response);
+        return $response;
+    }
+
+    /**
+     * Create mock object for payment model
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getPaymentMock()
+    {
+        $paymentMock = $this->getMockBuilder('Magento\Payment\Model\Info')
+            ->disableOriginalConstructor()
+            ->setMethods([
+                'getAdditionalInformation', 'getParentTransactionId', 'getOrder',
+                'getCcNumber', 'getCcExpMonth', 'getCcExpYear', 'getCcCid'
+            ])
+            ->getMock();
+
+        $cardData = [
+            'number' => 4111111111111111,
+            'month' => 12,
+            'year' => 18,
+            'cvv' => 123
+        ];
+        $paymentMock->expects(static::once())
+            ->method('getCcNumber')
+            ->willReturn($cardData['number']);
+        $paymentMock->expects(static::once())
+            ->method('getCcExpMonth')
+            ->willReturn($cardData['month']);
+        $paymentMock->expects(static::once())
+            ->method('getCcExpYear')
+            ->willReturn($cardData['year']);
+        $paymentMock->expects(static::once())
+            ->method('getCcCid')
+            ->willReturn($cardData['cvv']);
+        return $paymentMock;
+    }
+
+    /**
+     * Create mock object for order model
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getOrderMock()
+    {
+        $orderData = [
+            'currency' => 'USD',
+            'id' => 4,
+            'increment_id' => '0000004'
+        ];
+        $orderMock = $this->getMockBuilder('Magento\Sales\Model\Order')
+            ->disableOriginalConstructor()
+            ->setMethods(['getBaseCurrencyCode', 'getIncrementId', 'getId', 'getBillingAddress', 'getShippingAddress'])
+            ->getMock();
+
+        $orderMock->expects(static::once())
+            ->method('getId')
+            ->willReturn($orderData['id']);
+        $orderMock->expects(static::once())
+            ->method('getBaseCurrencyCode')
+            ->willReturn($orderData['currency']);
+        $orderMock->expects(static::atLeastOnce())
+            ->method('getIncrementId')
+            ->willReturn($orderData['increment_id']);
+        return $orderMock;
+    }
 }
diff --git a/app/code/Magento/Paypal/Test/Unit/Model/ProTest.php b/app/code/Magento/Paypal/Test/Unit/Model/ProTest.php
index 1594e4d49918f9c360ba94c3e55c0a6170e9303d..80c6b554d60c9abb9431579973a4d9a4130c0e7e 100644
--- a/app/code/Magento/Paypal/Test/Unit/Model/ProTest.php
+++ b/app/code/Magento/Paypal/Test/Unit/Model/ProTest.php
@@ -11,22 +11,37 @@
  */
 namespace Magento\Paypal\Test\Unit\Model;
 
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Paypal\Model\Config as PaypalConfig;
+
 class ProTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * @var \Magento\Paypal\Model\Pro
      */
-    protected $_pro;
+    protected $pro;
+    /** @var \PHPUnit_Framework_MockObject_MockObject */
+    protected  $apiMock;
 
     protected function setUp()
     {
-        $objectHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $objectHelper = new ObjectManager($this);
+        $infoFactory = $this->getInfoFactory();
+
+        $storeId = 33;
+        $configFactory = $this->getConfigFactory($storeId);
+        $apiFactory = $this->getApiFactory($objectHelper);
         $args = $objectHelper->getConstructArguments(
             'Magento\Paypal\Model\Pro',
-            ['infoFactory' => $this->getMock('Magento\Paypal\Model\InfoFactory', ['create'], [], '', false)]
+            [
+                'configFactory' => $configFactory,
+                'infoFactory' => $infoFactory,
+                'apiFactory' => $apiFactory
+            ]
         );
         /** @var $pro \Magento\Paypal\Model\Pro */
-        $this->_pro = $this->getMock('Magento\Paypal\Model\Pro', ['_isPaymentReviewRequired'], $args);
+        $this->pro = $this->getMock('Magento\Paypal\Model\Pro', ['_isPaymentReviewRequired'], $args);
+        $this->pro->setMethod(PaypalConfig::METHOD_PAYMENT_PRO, $storeId);
     }
 
     /**
@@ -37,7 +52,7 @@ class ProTest extends \PHPUnit_Framework_TestCase
      */
     public function testCanReviewPayment($pendingReason, $isReviewRequired, $expected)
     {
-        $this->_pro->expects(
+        $this->pro->expects(
             $this->any()
         )->method(
             '_isPaymentReviewRequired'
@@ -59,7 +74,7 @@ class ProTest extends \PHPUnit_Framework_TestCase
             $this->returnValue($pendingReason)
         );
 
-        $this->assertEquals($expected, $this->_pro->canReviewPayment($payment));
+        $this->assertEquals($expected, $this->pro->canReviewPayment($payment));
     }
 
     /**
@@ -74,4 +89,175 @@ class ProTest extends \PHPUnit_Framework_TestCase
             ['another_pending_reason', true, true]
         ];
     }
+
+    /**
+     * @covers \Magento\Paypal\Model\Pro::capture
+     */
+    public function testCapture()
+    {
+        $paymentMock = $this->getPaymentMock();
+        $orderMock = $this->getOrderMock();
+
+        $this->apiMock->expects(static::any())
+            ->method('setAuthorizationId')
+            ->willReturnSelf();
+        $this->apiMock->expects(static::any())
+            ->method('setIsCaptureComplete')
+            ->willReturnSelf();
+        $this->apiMock->expects(static::any())
+            ->method('setAmount')
+            ->willReturnSelf();
+
+        $paymentMock->expects(static::once())
+            ->method('getOrder')
+            ->willReturn($orderMock);
+
+        $this->apiMock->expects(static::once())
+            ->method('getTransactionId')
+            ->willReturn(45);
+        $this->apiMock->expects(static::any())
+            ->method('getDataUsingMethod')
+            ->willReturn(false);
+
+        $amount = 43.03;
+        $this->pro->capture($paymentMock, $amount);
+    }
+
+    /**
+     * Create and return mock of info factory
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getInfoFactory()
+    {
+        $infoFactory = $this->getMockBuilder('Magento\Paypal\Model\InfoFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $infoMock = $this->getMockBuilder('Magento\Paypal\Model\Info')
+            ->disableOriginalConstructor()
+            ->setMethods(['isPaymentReviewRequired'])
+            ->getMock();
+        $infoFactory->expects(static::any())->method('create')->willReturn($infoMock);
+        return $infoFactory;
+    }
+
+    /**
+     * Create and return mock of config factory
+     * @param $storeId
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getConfigFactory($storeId)
+    {
+        $configType = 'Magento\Paypal\Model\Config';
+        $configMock = $this->getMockBuilder($configType)
+            ->disableOriginalConstructor()
+            ->getMock();
+        $configFactory = $this->getMockBuilder('Magento\Paypal\Model\Config\Factory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $configFactory->expects(static::any())
+            ->method('create')
+            ->with($configType, ['params' => [
+                PaypalConfig::METHOD_PAYMENT_PRO,
+                $storeId
+            ]])
+            ->willReturn($configMock);
+        return $configFactory;
+    }
+
+    /**
+     * Create mock object for paypal api factory
+     * @param ObjectManager $objectHelper
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getApiFactory(ObjectManager $objectHelper)
+    {
+        $apiFactory = $this->getMockBuilder('Magento\Paypal\Model\Api\Type\Factory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $httpClient = $this->getMockBuilder('Magento\Framework\HTTP\Adapter\Curl')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $httpClient->expects(static::any())
+            ->method('read')
+            ->will(static::returnValue(
+                "\r\n" . 'ACK=Success&CORRELATIONID=32342431'
+            ));
+
+        $curlFactory = $this->getMockBuilder('Magento\Framework\HTTP\Adapter\CurlFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $curlFactory->expects(static::any())->method('create')->willReturn($httpClient);
+
+        $apiType = 'Magento\Paypal\Model\Api\Nvp';
+        $args = $objectHelper->getConstructArguments(
+            $apiType,
+            [
+                'curlFactory' => $curlFactory
+            ]
+        );
+        $this->apiMock = $this->getMockBuilder($apiType)
+            ->setConstructorArgs($args)
+            ->setMethods(['__wakeup', 'getTransactionId', 'getDataUsingMethod'])
+            ->getMock();
+
+        $apiFactory->expects(static::any())->method('create')->with($apiType)->willReturn($this->apiMock);
+        return $apiFactory;
+    }
+
+    /**
+     * Create mock object for payment model
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getPaymentMock()
+    {
+        $paymentMock = $this->getMockBuilder('Magento\Payment\Model\Info')
+            ->disableOriginalConstructor()
+            ->setMethods([
+                'getParentTransactionId', 'getOrder', 'getShouldCloseParentTransaction'
+            ])
+            ->getMock();
+        $parentTransactionId = 43;
+        $paymentMock->expects(static::once())
+            ->method('getParentTransactionId')
+            ->willReturn($parentTransactionId);
+        $paymentMock->expects(static::once())
+            ->method('getShouldCloseParentTransaction')
+            ->willReturn(true);
+        return $paymentMock;
+    }
+
+    /**
+     * Create mock object for order model
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected function getOrderMock()
+    {
+        $orderData = [
+            'currency' => 'USD',
+            'id' => 4,
+            'increment_id' => '0000004'
+        ];
+        $orderMock = $this->getMockBuilder('Magento\Sales\Model\Order')
+            ->disableOriginalConstructor()
+            ->setMethods(['getBaseCurrencyCode', 'getIncrementId', 'getId', 'getBillingAddress', 'getShippingAddress'])
+            ->getMock();
+
+        $orderMock->expects(static::once())
+            ->method('getId')
+            ->willReturn($orderData['id']);
+        $orderMock->expects(static::once())
+            ->method('getBaseCurrencyCode')
+            ->willReturn($orderData['currency']);
+        $orderMock->expects(static::atLeastOnce())
+            ->method('getIncrementId')
+            ->willReturn($orderData['increment_id']);
+        return $orderMock;
+    }
 }
diff --git a/app/code/Magento/Paypal/etc/adminhtml/events.xml b/app/code/Magento/Paypal/etc/adminhtml/events.xml
index 729d5132f4fbe662402907223503dd777f43d53e..6ec1f45899949316c65c353aff35a47746752bba 100644
--- a/app/code/Magento/Paypal/etc/adminhtml/events.xml
+++ b/app/code/Magento/Paypal/etc/adminhtml/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="payment_method_is_active">
-        <observer name="sales_billing_agreement" instance="Magento\Paypal\Observer\RestrictAdminBillingAgreementUsageObserver" method="execute" />
+        <observer name="sales_billing_agreement" instance="Magento\Paypal\Observer\RestrictAdminBillingAgreementUsageObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Paypal/etc/events.xml b/app/code/Magento/Paypal/etc/events.xml
index 275fd93635b29d576ba7c6b87090f1be87f5f0ff..2babfea17384514fba591d1e2ff1d6f62f6751a9 100644
--- a/app/code/Magento/Paypal/etc/events.xml
+++ b/app/code/Magento/Paypal/etc/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_order_payment_place_end">
-        <observer name="paypal" instance="Magento\Paypal\Observer\AddBillingAgreementToSessionObserver" method="execute"/>
+        <observer name="paypal" instance="Magento\Paypal\Observer\AddBillingAgreementToSessionObserver"/>
     </event>
     <event name="sales_order_payment_transaction_html_txn_id">
-        <observer name="paypal_transaction_html" instance="Magento\Paypal\Observer\HtmlTransactionIdObserver" method="execute"/>
+        <observer name="paypal_transaction_html" instance="Magento\Paypal\Observer\HtmlTransactionIdObserver"/>
     </event>
 </config>
diff --git a/app/code/Magento/Paypal/etc/frontend/di.xml b/app/code/Magento/Paypal/etc/frontend/di.xml
index 71408dd33e5328a469257fd220acde5b35d11cef..daa08fcf1dc9d1fbf668559317131b3b1d45ddfd 100644
--- a/app/code/Magento/Paypal/etc/frontend/di.xml
+++ b/app/code/Magento/Paypal/etc/frontend/di.xml
@@ -16,6 +16,11 @@
             <argument name="storage" xsi:type="object">Magento\Paypal\Model\Session\Storage</argument>
         </arguments>
     </virtualType>
+    <type name="Magento\Paypal\Controller\Express\AbstractExpress">
+        <arguments>
+            <argument name="paypalSession" xsi:type="object">Magento\Paypal\Model\Session</argument>
+        </arguments>
+    </type>
     <virtualType name="Magento\Paypal\Model\PayflowSession\Storage" type="Magento\Framework\Session\Storage">
         <arguments>
             <argument name="namespace" xsi:type="string">paypal_payflow</argument>
diff --git a/app/code/Magento/Paypal/etc/frontend/events.xml b/app/code/Magento/Paypal/etc/frontend/events.xml
index f6787521fa95ed1c859fae85a674c8576cd0d73c..6f72ab58b7c9480855e6aa0324712f68281c25eb 100644
--- a/app/code/Magento/Paypal/etc/frontend/events.xml
+++ b/app/code/Magento/Paypal/etc/frontend/events.xml
@@ -7,12 +7,12 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="checkout_submit_all_after">
-        <observer name="hss_save_order_after_submit" instance="Magento\Paypal\Observer\SaveOrderAfterSubmitObserver" method="execute"/>
+        <observer name="hss_save_order_after_submit" instance="Magento\Paypal\Observer\SaveOrderAfterSubmitObserver"/>
     </event>
     <event name="checkout_controller_onepage_saveOrder">
-        <observer name="hss_save_order_onepage" instance="Magento\Paypal\Observer\SetResponseAfterSaveOrderObserver" method="execute"/>
+        <observer name="hss_save_order_onepage" instance="Magento\Paypal\Observer\SetResponseAfterSaveOrderObserver"/>
     </event>
     <event name="shortcut_buttons_container">
-        <observer name="paypal_shortcuts" instance="Magento\Paypal\Observer\AddPaypalShortcutsObserver" method="execute"/>
+        <observer name="paypal_shortcuts" instance="Magento\Paypal\Observer\AddPaypalShortcutsObserver"/>
     </event>
 </config>
diff --git a/app/code/Magento/Paypal/i18n/de_DE.csv b/app/code/Magento/Paypal/i18n/de_DE.csv
index 30521e4faab8aa30c9275c109ae75726636f1858..9688d3237dbcb9b284509178b4417c72dc7fb63b 100644
--- a/app/code/Magento/Paypal/i18n/de_DE.csv
+++ b/app/code/Magento/Paypal/i18n/de_DE.csv
@@ -71,7 +71,7 @@ Authorization,Bewilligung
 "IPN ""%1""","IPN ""%1"""
 "Billing Agreements",Rechnungsvereinbarungen
 "Reference ID","Reference ID"
-"Billing Agreement #%1","Billing Agreement #%1"
+"Billing Agreement # ","Billing Agreement # "
 "Related Orders","Related Orders"
 "Billing Agreement View","Rechnungsvereinbarung Ansicht"
 "View Transaction Details","Überweisungsdetails zeigen"
@@ -105,7 +105,6 @@ Help,Hilfe
 "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration."
 "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'."
 "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'."
-"Billing Agreement # %1","Billing Agreement # %1"
 "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard."
 "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created."
 "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard."
@@ -372,7 +371,9 @@ Funding,Finanzierung
 "Created At","Created At"
 "Updated At","Updated At"
 "-- Please Select Billing Agreement--","-- Bitte wählen Sie Rechnungsvereinbarung --"
-"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more."
+"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click "
+"here","here"
+" to learn more."," to learn more."
 "Important: ","Important: "
 "To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website."
 "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below"
@@ -390,7 +391,7 @@ Updated:,Updated:
 "New Billing Agreement","Neue Abrechnungsvereinbarung"
 "You will be redirected to the payment system website.","You will be redirected to the payment system website."
 Create...,Create...
-"Your billing agreement # is: %1.","Your billing agreement # is: %1."
+"Your billing agreement # is: ","Your billing agreement # is: "
 "Review Order","Auftrag überprüfen"
 "Please select a shipping method...","Bitte wählen Sie eine Versandart aus..."
 "Update Shipping Method","Update Shipping Method"
diff --git a/app/code/Magento/Paypal/i18n/en_US.csv b/app/code/Magento/Paypal/i18n/en_US.csv
index 07e1965fc14abaf2b0003beb75636e3576fe6c38..b1b45cb9cc9669803a10ec7754acd1a29e960760 100644
--- a/app/code/Magento/Paypal/i18n/en_US.csv
+++ b/app/code/Magento/Paypal/i18n/en_US.csv
@@ -71,7 +71,7 @@ Authorization,Authorization
 "IPN ""%1""","IPN ""%1"""
 "Billing Agreements","Billing Agreements"
 "Reference ID","Reference ID"
-"Billing Agreement #%1","Billing Agreement #%1"
+"Billing Agreement # ","Billing Agreement # "
 "Related Orders","Related Orders"
 "Billing Agreement View","Billing Agreement View"
 "View Transaction Details","View Transaction Details"
@@ -105,7 +105,6 @@ Help,Help
 "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration."
 "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'."
 "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'."
-"Billing Agreement # %1","Billing Agreement # %1"
 "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard."
 "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created."
 "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard."
@@ -372,7 +371,9 @@ Funding,Funding
 "Created At","Created At"
 "Updated At","Updated At"
 "-- Please Select Billing Agreement--","-- Please Select Billing Agreement--"
-"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more."
+"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click "
+"here","here"
+" to learn more."," to learn more."
 "Important: ","Important: "
 "To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website."
 "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below"
@@ -390,7 +391,7 @@ Updated:,Updated:
 "New Billing Agreement","New Billing Agreement"
 "You will be redirected to the payment system website.","You will be redirected to the payment system website."
 Create...,Create...
-"Your billing agreement # is: %1.","Your billing agreement # is: %1."
+"Your billing agreement # is: ","Your billing agreement # is: "
 "Review Order","Review Order"
 "Please select a shipping method...","Please select a shipping method..."
 "Update Shipping Method","Update Shipping Method"
diff --git a/app/code/Magento/Paypal/i18n/es_ES.csv b/app/code/Magento/Paypal/i18n/es_ES.csv
index 91831caaef9a7c531e807c660c5a2e4b73be4937..a6c03fb513331022d51cd211b7d73edcee7f7129 100644
--- a/app/code/Magento/Paypal/i18n/es_ES.csv
+++ b/app/code/Magento/Paypal/i18n/es_ES.csv
@@ -71,7 +71,7 @@ Authorization,Autorización
 "IPN ""%1""","IPN ""%1"""
 "Billing Agreements","Contratos de facturación"
 "Reference ID","Reference ID"
-"Billing Agreement #%1","Billing Agreement #%1"
+"Billing Agreement # ","Billing Agreement # "
 "Related Orders","Related Orders"
 "Billing Agreement View","Ver contrato de facturación"
 "View Transaction Details","Ver Detalles de la Transacción"
@@ -105,7 +105,6 @@ Help,Ayuda
 "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration."
 "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'."
 "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'."
-"Billing Agreement # %1","Billing Agreement # %1"
 "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard."
 "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created."
 "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard."
@@ -372,7 +371,9 @@ Funding,Fondos
 "Created At","Created At"
 "Updated At","Updated At"
 "-- Please Select Billing Agreement--","-- Por favor, Seleccione el Acuerdo de Facturación--"
-"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more."
+"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click "
+"here","here"
+" to learn more."," to learn more."
 "Important: ","Important: "
 "To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website."
 "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below"
@@ -390,7 +391,7 @@ Updated:,Updated:
 "New Billing Agreement","Nuevo Acuerdo de Facturación"
 "You will be redirected to the payment system website.","You will be redirected to the payment system website."
 Create...,Create...
-"Your billing agreement # is: %1.","Your billing agreement # is: %1."
+"Your billing agreement # is: ","Your billing agreement # is: "
 "Review Order","Revise su pedido"
 "Please select a shipping method...","Por favor, elija un método de envío..."
 "Update Shipping Method","Update Shipping Method"
diff --git a/app/code/Magento/Paypal/i18n/fr_FR.csv b/app/code/Magento/Paypal/i18n/fr_FR.csv
index bc5f0caafdb0393c77086fab281eb770e8811931..2db5be340c65baf6eebfada5516e1c72600d5c7a 100644
--- a/app/code/Magento/Paypal/i18n/fr_FR.csv
+++ b/app/code/Magento/Paypal/i18n/fr_FR.csv
@@ -71,7 +71,7 @@ Authorization,Autorisation
 "IPN ""%1""","IPN ""%1"""
 "Billing Agreements","Accords de facturation"
 "Reference ID","Reference ID"
-"Billing Agreement #%1","Billing Agreement #%1"
+"Billing Agreement # ","Billing Agreement # "
 "Related Orders","Related Orders"
 "Billing Agreement View","Voir l'accord de facturation"
 "View Transaction Details","Voir les détails de la transction"
@@ -105,7 +105,6 @@ Help,Aide
 "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration."
 "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'."
 "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'."
-"Billing Agreement # %1","Billing Agreement # %1"
 "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard."
 "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created."
 "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard."
@@ -372,7 +371,9 @@ Funding,Fonds
 "Created At","Created At"
 "Updated At","Updated At"
 "-- Please Select Billing Agreement--","-- Veuillez sélectionner un accord de facturation--"
-"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more."
+"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click "
+"here","here"
+" to learn more."," to learn more."
 "Important: ","Important: "
 "To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website."
 "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below"
@@ -390,7 +391,7 @@ Updated:,Updated:
 "New Billing Agreement","Nouvel Accord de Facturation"
 "You will be redirected to the payment system website.","You will be redirected to the payment system website."
 Create...,Create...
-"Your billing agreement # is: %1.","Your billing agreement # is: %1."
+"Your billing agreement # is: ","Your billing agreement # is: "
 "Review Order","Vérification de la commande"
 "Please select a shipping method...","Veuillez sélectionner un mode d'expédition..."
 "Update Shipping Method","Update Shipping Method"
diff --git a/app/code/Magento/Paypal/i18n/nl_NL.csv b/app/code/Magento/Paypal/i18n/nl_NL.csv
index d14bfcc045a5f08f0cc4ba4341eee3ded6f1b055..6121c7d1ba940a30e8e2aa8ed4930ca55441c6c8 100644
--- a/app/code/Magento/Paypal/i18n/nl_NL.csv
+++ b/app/code/Magento/Paypal/i18n/nl_NL.csv
@@ -71,7 +71,7 @@ Authorization,Autorisatie
 "IPN ""%1""","IPN ""%1"""
 "Billing Agreements","Facturering Overeenkomsten"
 "Reference ID","Reference ID"
-"Billing Agreement #%1","Billing Agreement #%1"
+"Billing Agreement # ","Billing Agreement # "
 "Related Orders","Related Orders"
 "Billing Agreement View","Factureringsovereenkomst Beeld"
 "View Transaction Details","Bekijk Transactie Details"
@@ -105,7 +105,6 @@ Help,Help
 "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration."
 "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'."
 "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'."
-"Billing Agreement # %1","Billing Agreement # %1"
 "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard."
 "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created."
 "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard."
@@ -372,7 +371,9 @@ Funding,Financiering
 "Created At","Created At"
 "Updated At","Updated At"
 "-- Please Select Billing Agreement--","-- Selecteer a.u.b. rekeningovereenkomst --"
-"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more."
+"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click "
+"here","here"
+" to learn more."," to learn more."
 "Important: ","Important: "
 "To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website."
 "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below"
@@ -390,7 +391,7 @@ Updated:,Updated:
 "New Billing Agreement","Nieuwe factuurovereenkomst"
 "You will be redirected to the payment system website.","You will be redirected to the payment system website."
 Create...,Create...
-"Your billing agreement # is: %1.","Your billing agreement # is: %1."
+"Your billing agreement # is: ","Your billing agreement # is: "
 "Review Order","Overzicht van de bestelling"
 "Please select a shipping method...","Selecteer een methode van verzending..."
 "Update Shipping Method","Update Shipping Method"
diff --git a/app/code/Magento/Paypal/i18n/pt_BR.csv b/app/code/Magento/Paypal/i18n/pt_BR.csv
index a9ebf9134b7b1cf3307e36b2262ee394878f40a9..22bccf0d19376283f1af7a46835cc08d00784ad5 100644
--- a/app/code/Magento/Paypal/i18n/pt_BR.csv
+++ b/app/code/Magento/Paypal/i18n/pt_BR.csv
@@ -71,7 +71,7 @@ Authorization,Autorização
 "IPN ""%1""","IPN ""%1"""
 "Billing Agreements","Contratos de faturamento"
 "Reference ID","Reference ID"
-"Billing Agreement #%1","Billing Agreement #%1"
+"Billing Agreement # ","Billing Agreement # "
 "Related Orders","Related Orders"
 "Billing Agreement View","Visualização de Contrato de Faturamento"
 "View Transaction Details","Visualizar Detalhes da Transação."
@@ -105,7 +105,6 @@ Help,Ajuda
 "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration."
 "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'."
 "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'."
-"Billing Agreement # %1","Billing Agreement # %1"
 "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard."
 "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created."
 "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard."
@@ -372,7 +371,9 @@ Funding,Financiamento
 "Created At","Created At"
 "Updated At","Updated At"
 "-- Please Select Billing Agreement--","-- Por Favor, Escolha o Acordo de Cobrança--"
-"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more."
+"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click "
+"here","here"
+" to learn more."," to learn more."
 "Important: ","Important: "
 "To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website."
 "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below"
@@ -390,7 +391,7 @@ Updated:,Updated:
 "New Billing Agreement","Novo Contrato de Faturamento"
 "You will be redirected to the payment system website.","You will be redirected to the payment system website."
 Create...,Create...
-"Your billing agreement # is: %1.","Your billing agreement # is: %1."
+"Your billing agreement # is: ","Your billing agreement # is: "
 "Review Order","Analisar o pedido"
 "Please select a shipping method...","Por favor selecione um método de envio..."
 "Update Shipping Method","Update Shipping Method"
diff --git a/app/code/Magento/Paypal/i18n/zh_Hans_CN.csv b/app/code/Magento/Paypal/i18n/zh_Hans_CN.csv
index a3bbde6b8771bfd59b1db17340253baa77e6b399..3533b127b1023ba943f9695db6e7db5ac2656b07 100644
--- a/app/code/Magento/Paypal/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Paypal/i18n/zh_Hans_CN.csv
@@ -71,7 +71,7 @@ Authorization,授权
 "IPN ""%1""","IPN ""%1"""
 "Billing Agreements",记账协议
 "Reference ID","Reference ID"
-"Billing Agreement #%1","Billing Agreement #%1"
+"Billing Agreement # ","Billing Agreement # "
 "Related Orders","Related Orders"
 "Billing Agreement View",记账协议视图
 "View Transaction Details",查看交易详情
@@ -105,7 +105,6 @@ Help,帮助
 "We found nothing to fetch because of an empty configuration.","We found nothing to fetch because of an empty configuration."
 "We fetched %1 report rows from '%2@%3'.","We fetched %1 report rows from '%2@%3'."
 "We couldn't fetch reports from '%1@%2'.","We couldn't fetch reports from '%1@%2'."
-"Billing Agreement # %1","Billing Agreement # %1"
 "We couldn't start the billing agreement wizard.","We couldn't start the billing agreement wizard."
 "The billing agreement ""%1"" has been created.","The billing agreement ""%1"" has been created."
 "We couldn't finish the billing agreement wizard.","We couldn't finish the billing agreement wizard."
@@ -372,7 +371,9 @@ Funding,退款
 "Created At","Created At"
 "Updated At","Updated At"
 "-- Please Select Billing Agreement--","-- 请选择记账协议 --"
-"Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more.","Not sure what PayPal payment method to use? Click <a href=""%1"" target=""_blank"">here</a> to learn more."
+"Not sure what PayPal payment method to use? Click ","Not sure what PayPal payment method to use? Click "
+"here","here"
+" to learn more."," to learn more."
 "Important: ","Important: "
 "To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website.","To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website."
 "Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below","Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below"
@@ -390,7 +391,7 @@ Updated:,Updated:
 "New Billing Agreement",新建记账协议
 "You will be redirected to the payment system website.","You will be redirected to the payment system website."
 Create...,Create...
-"Your billing agreement # is: %1.","Your billing agreement # is: %1."
+"Your billing agreement # is: ","Your billing agreement # is: "
 "Review Order",查看订单
 "Please select a shipping method...",请选择送货方法...
 "Update Shipping Method","Update Shipping Method"
diff --git a/app/code/Magento/Paypal/view/adminhtml/layout/adminhtml_paypal_reports_block.xml b/app/code/Magento/Paypal/view/adminhtml/layout/adminhtml_paypal_reports_block.xml
index f3361bc5da1f82f974966ee49b53233044413cbb..c0c612bb269418472fa90c54f57c6d4b885d0f39 100644
--- a/app/code/Magento/Paypal/view/adminhtml/layout/adminhtml_paypal_reports_block.xml
+++ b/app/code/Magento/Paypal/view/adminhtml/layout/adminhtml_paypal_reports_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="paypal.report.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">settlementGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Paypal\Model\Resource\Report\Settlement\Row\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Paypal\Model\ResourceModel\Report\Settlement\Row\Collection</argument>
                     <argument name="default_sort" xsi:type="string">row_id</argument>
                     <argument name="default_dir" xsi:type="string">DESC</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
@@ -73,7 +73,7 @@
                             <argument name="header" xsi:type="string" translate="true">Event</argument>
                             <argument name="index" xsi:type="string">transaction_event_code</argument>
                             <argument name="type" xsi:type="string">options</argument>
-                            <argument name="options" xsi:type="options" model="Magento\Paypal\Model\Resource\Report\Settlement\Options\TransactionEvents"/>
+                            <argument name="options" xsi:type="options" model="Magento\Paypal\Model\ResourceModel\Report\Settlement\Options\TransactionEvents"/>
                             <argument name="header_css_class" xsi:type="string">ol-event</argument>
                             <argument name="column_css_class" xsi:type="string">ol-event</argument>
                         </arguments>
diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/form.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/form.phtml
index 6be6500df521f5885e99f3a1183889364cc6489b..0d933a861b54182146e34358253ac033072f4c28 100644
--- a/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/form.phtml
+++ b/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/form.phtml
@@ -5,21 +5,24 @@
  */
 
 // @codingStandardsIgnoreFile
-
+/** @var \Magento\Paypal\Block\Adminhtml\Billing\Agreement\View\Form $block */
 ?>
-<?php $_code = $block->getMethodCode() ?>
-<fieldset class="form-list" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none;">
+<?php $code = $block->getMethodCode() ?>
+<fieldset class="form-list" id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;">
     <div class="admin__field _required">
-        <label for="<?php /* @escapeNotVerified */ echo $_code ?>_ba_agreement_id"
-               class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Billing Agreement') ?></span></label>
+        <label for="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id" class="admin__field-label">
+            <span><?php echo $block->escapeHtml(__('Billing Agreement')); ?></span>
+        </label>
         <div class="admin__field-control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_ba_agreement_id"
-                    name="payment[<?php /* @escapeNotVerified */ echo $block->getTransportBAId(); ?>]"
+            <select id="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id"
+                    name="payment[<?php echo $block->escapeHtml($block->getTransportBAId()); ?>]"
                     class="required-entry admin__control-select">
-                <option value=""><?php /* @escapeNotVerified */ echo __('Please Select') ?></option>
+                <option value=""><?php echo $block->escapeHtml(__('Please Select')); ?></option>
                 <?php foreach ($block->getBillingAgreements() as $id => $referenceId): ?>
-                    <option value="<?php /* @escapeNotVerified */ echo $id ?>"><?php echo $block->escapeHtml($referenceId) ?></option>
-                <?php endforeach ?>
+                    <option value="<?php echo $block->escapeHtml($id); ?>">
+                        <?php echo $block->escapeHtml($referenceId); ?>
+                    </option>
+                <?php endforeach; ?>
             </select>
         </div>
     </div>
diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/view/tab/info.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/view/tab/info.phtml
index d4dabc5a81fd0f9af9890c610b4c8460591985b7..c5888b2728ae72302c1ed31d30852fd7b71b7a9a 100644
--- a/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/view/tab/info.phtml
+++ b/app/code/Magento/Paypal/view/adminhtml/templates/billing/agreement/view/tab/info.phtml
@@ -3,37 +3,38 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+/** @var \Magento\Paypal\Block\Adminhtml\Billing\Agreement\View\Tab\Info $block */
 ?>
 <section class="admin__page-section">
     <div class="admin__page-section-title">
-        <span class="title"><?php /* @escapeNotVerified */ echo __('General Information'); ?></span>
+        <span class="title"><?php echo $block->escapeHtml(__('General Information')); ?></span>
     </div>
     <div class="admin__page-section-content log-details">
         <table class="data-table admin__table-secondary order-billing-agreement-table">
             <tbody>
                 <tr>
-                    <th><?php /* @escapeNotVerified */ echo __('Reference ID'); ?></th>
-                    <td><?php echo $block->escapeHtml($block->getReferenceId()) ?></td>
+                    <th><?php echo $block->escapeHtml(__('Reference ID')); ?></th>
+                    <td><?php echo $block->escapeHtml($block->getReferenceId()); ?></td>
                 </tr>
                 <tr>
-                    <th><?php /* @escapeNotVerified */ echo __('Customer'); ?></th>
+                    <th><?php echo $block->escapeHtml(__('Customer')); ?></th>
                     <td>
-                        <a href="<?php /* @escapeNotVerified */ echo $block->getCustomerUrl(); ?>">
-                            <?php /* @escapeNotVerified */ echo $block->getCustomerEmail() ?>
+                        <a href="<?php echo $block->escapeUrl($block->getCustomerUrl()); ?>">
+                            <?php echo $block->escapeHtml($block->getCustomerEmail()); ?>
                         </a>
                     </td>
                 </tr>
                 <tr>
-                    <th><?php /* @escapeNotVerified */ echo __('Status'); ?></th>
-                    <td><?php /* @escapeNotVerified */ echo $block->getStatus() ?></td>
+                    <th><?php echo $block->escapeHtml(__('Status')); ?></th>
+                    <td><?php echo $block->escapeHtml($block->getStatus()); ?></td>
                 </tr>
                 <tr>
-                    <th><?php /* @escapeNotVerified */ echo __('Created At'); ?></th>
-                    <td><?php /* @escapeNotVerified */ echo $block->getCreatedAt(); ?></td>
+                    <th><?php echo $block->escapeHtml(__('Created At')); ?></th>
+                    <td><?php echo $block->escapeHtml($block->getCreatedAt()); ?></td>
                 </tr>
                 <tr>
-                    <th><?php /* @escapeNotVerified */ echo __('Updated At'); ?></th>
-                    <td><?php /* @escapeNotVerified */ echo $block->getUpdatedAt(); ?></td>
+                    <th><?php echo $block->escapeHtml(__('Updated At')); ?></th>
+                    <td><?php echo $block->escapeHtml($block->getUpdatedAt()); ?></td>
                 </tr>
             </tbody>
         </table>
diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/payment/form/billing/agreement.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/payment/form/billing/agreement.phtml
index dea408fd816b96b50e0ba46f18776580725a86f7..d3a6bab129806819191d864a6dde2c60c952703f 100644
--- a/app/code/Magento/Paypal/view/adminhtml/templates/payment/form/billing/agreement.phtml
+++ b/app/code/Magento/Paypal/view/adminhtml/templates/payment/form/billing/agreement.phtml
@@ -5,23 +5,29 @@
  */
 
 // @codingStandardsIgnoreFile
-
+/* @var $block \Magento\Paypal\Block\Payment\Form\Billing\Agreement */
 ?>
-<?php /* @var $block \Magento\Paypal\Block\Payment\Form\Billing\Agreement */?>
-<?php $_code = $block->getMethodCode() ?>
-<fieldset class="admin__fieldset payment-method form-list" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none;">
+<?php $code = $block->getMethodCode() ?>
+<fieldset class="admin__fieldset payment-method form-list"
+          id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;">
     <div class="admin__field _required">
         <label class="admin__field-label"
-               for="<?php /* @escapeNotVerified */ echo $_code ?>_ba_agreement_id"><span><?php /* @escapeNotVerified */ echo __('Billing Agreement') ?></span></label>
+               for="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id">
+            <span><?php echo $block->escapeHtml(__('Billing Agreement')); ?></span>
+        </label>
         <div class="admin__field-control">
-            <select id="<?php /* @escapeNotVerified */ echo $_code ?>_ba_agreement_id"
-                    name="payment[<?php /* @escapeNotVerified */ echo $block->getTransportName(); ?>]"
+            <select id="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id"
+                    name="payment[<?php echo $block->escapeHtml($block->getTransportName()); ?>]"
                     class="required-entry admin__control-select">
-                <option value=""><?php /* @escapeNotVerified */ echo __('Please Select') ?></option>
+                <option value=""><?php echo $block->escapeHtml(__('Please Select')); ?></option>
                 <?php foreach ($block->getBillingAgreements() as $id => $referenceId): ?>
-                    <option
-                        value="<?php /* @escapeNotVerified */ echo $id ?>"<?php echo ($id == $block->getInfoData($block->getTransportName())) ? ' selected="selected"' : '' ?>><?php echo $block->escapeHtml($referenceId) ?></option>
-                <?php endforeach ?>
+                    <option value="<?php echo $block->escapeHtml($id); ?>"
+                        <?php echo ($id == $block->getInfoData($block->getTransportName())) ?
+                            ' selected="selected"' : '';
+                        ?>>
+                        <?php echo $block->escapeHtml($referenceId); ?>
+                    </option>
+                <?php endforeach; ?>
             </select>
         </div>
     </div>
diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/api_wizard.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/api_wizard.phtml
index 9472de6106deac7cc4b6feb9f46edfe2767b9397..3f729e92cbf740f2ac5a3b5019d09cbb16dc9de4 100644
--- a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/api_wizard.phtml
+++ b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/api_wizard.phtml
@@ -4,19 +4,28 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
-?>
-<?php
 /**
  * @see \Magento\Paypal\Block\Adminhtml\System\Config\ApiWizard
+ * @var \Magento\Paypal\Block\Adminhtml\System\Config\ApiWizard $block
  */
 ?>
 <div class="pp-buttons-container">
-    <button onclick="javascript:window.open('<?php /* @escapeNotVerified */ echo $block->getButtonUrl()?>', 'apiwizard','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,left=100, top=100, width=380, height=470'); return false;" class="scalable" type="button" id="<?php echo $block->getHtmlId() ?>">
+    <button onclick="javascript:window.open(
+            '<?php echo $block->escapeUrl($block->getButtonUrl()); ?>',
+            'apiwizard',
+            'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,' +
+            'left=100, top=100, width=380, height=470'
+        ); return false;"
+            class="scalable" type="button" id="<?php echo $block->escapeHtml($block->getHtmlId()); ?>">
         <span><span><span><?php echo $block->escapeHtml($block->getButtonLabel()); ?></span></span></span>
     </button>
-    <button onclick="javascript:window.open('<?php /* @escapeNotVerified */ echo $block->getSandboxButtonUrl()?>', 'apiwizard','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,left=100, top=100, width=380, height=470'); return false;" class="scalable" type="button" id="<?php echo $block->getSandboxHtmlId() ?>">
+    <button onclick="javascript:window.open(
+            '<?php echo $block->escapeUrl($block->getSandboxButtonUrl()); ?>',
+            'apiwizard',
+            'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,' +
+            'left=100, top=100, width=380, height=470'
+        ); return false;"
+            class="scalable" type="button" id="<?php echo $block->escapeHtml($block->getSandboxHtmlId()); ?>">
         <span><span><span><?php echo $block->escapeHtml($block->getSandboxButtonLabel()); ?></span></span></span>
     </button>
 </div>
diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/bml_api_wizard.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/bml_api_wizard.phtml
index 0c986674244239a08c2b7c5a0ddaa68950a6b942..11b8fc9508271e1797968c00993df866adea8824 100644
--- a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/bml_api_wizard.phtml
+++ b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/bml_api_wizard.phtml
@@ -4,16 +4,19 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
- ?>
-<?php
 /**
  * @see \Magento\Paypal\Block\Adminhtml\System\Config\BmlApiWizard
+ * @var \Magento\Paypal\Block\Adminhtml\System\Config\BmlApiWizard $block
  */
 ?>
 <div class="pp-buttons-container">
-    <button onclick="javascript:window.open('<?php /* @escapeNotVerified */ echo $block->getButtonUrl()?>', 'bmlapiwizard','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,left=100, top=100, width=550, height=550'); return false;" class="scalable" type="button" id="<?php echo $block->getHtmlId() ?>">
+    <button onclick="javascript:window.open(
+            '<?php echo $block->escapeUrl($block->getButtonUrl()); ?>',
+            'bmlapiwizard',
+            'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,' +
+            'left=100, top=100, width=550, height=550'
+        ); return false;"
+            class="scalable" type="button" id="<?php echo $block->escapeHtml($block->getHtmlId()); ?>">
         <span><span><span><?php echo $block->escapeHtml($block->getButtonLabel()); ?></span></span></span>
     </button>
 </div>
diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/fieldset/hint.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/fieldset/hint.phtml
index 53da2d2720ed7b6d57e935d464d51cb7269a3406..afc93a0a8ff8c9c9135ede826f180c22e5a11809 100644
--- a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/fieldset/hint.phtml
+++ b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/fieldset/hint.phtml
@@ -5,21 +5,23 @@
  */
 
 // @codingStandardsIgnoreFile
-
-?>
-<?php
 /**
  * @see \Magento\Paypal\Block\System\Config\Fieldset\Hint
+ * @var \Magento\Paypal\Block\Adminhtml\System\Config\Fieldset\Hint $block
  */
+$helpLink = $block->escapeUrl($block->getHelpLink());
 ?>
 <?php
-    if ($block->getHelpLink()):
+if ($helpLink):
 ?>
-<div class="paypal-payment-notice">
-    <?php /* @escapeNotVerified */ echo __('Not sure what PayPal payment method to use? Click <a href="%1" target="_blank">here</a> to learn more.', $block->getHelpLink()); ?>
-</div>
+    <div class="paypal-payment-notice">
+        <?php echo $block->escapeHtml(__('Not sure what PayPal payment method to use? Click ')); ?>
+        <a href="<?php /* @noEscape */
+        echo $helpLink; ?>" target="_blank"><?php echo $block->escapeHtml(__('here')); ?></a>
+        <?php echo $block->escapeHtml(__(' to learn more.')); ?>
+    </div>
 <?php
-    endif;
+endif;
 ?>
 <script>
 require(['jquery', 'prototype'], function(jQuery){
diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/advanced.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/advanced.phtml
index 839899ea73dfd3c9c90a8322578edb545946b09d..a874c96b267be0ef4fed466e07b5a6b7b74dc62a 100644
--- a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/advanced.phtml
+++ b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/advanced.phtml
@@ -5,16 +5,15 @@
  */
 
 // @codingStandardsIgnoreFile
-
 /*
  * @var $block \Magento\Paypal\Block\Adminhtml\System\Config\Payflowlink\Advanced
  */
 ?>
 <div class="payflow-settings-notice">
     <p>
-        <strong class="important-label"><?php /* @escapeNotVerified */ echo __('Important: ') ?></strong>
-        <?php /* @escapeNotVerified */ echo __('To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website.'); ?>
-        <?php /* @escapeNotVerified */ echo __('Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below') ?>
+        <strong class="important-label"><?php echo $block->escapeHtml(__('Important: ')); ?></strong>
+        <?php echo $block->escapeHtml(__('To use PayPal Payments Advanced, you must configure  your PayPal Payments Advanced account on the PayPal website.')); ?>
+        <?php echo $block->escapeHtml(__('Once you log into your PayPal Advanced account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below')); ?>
     </p>
     <ul class="options-list">
         <li><strong>AVS:</strong> No</li>
diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/info.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/info.phtml
index 10724969c353b375d300bdc7d8bd8e1ccbdf8b92..86e435fa800df925340b8414a137988172baa514 100644
--- a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/info.phtml
+++ b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/payflowlink/info.phtml
@@ -5,17 +5,16 @@
  */
 
 // @codingStandardsIgnoreFile
-
-?>
-<?php
 /**
  * @see \Magento\Paypal\Block\Adminhtml\System\Config\Payflowlink\Info
+ * @var \Magento\Paypal\Block\Adminhtml\System\Config\Payflowlink\Info $block
  */
+
 ?>
 <div class="payflow-settings-notice">
-    <strong class="important-label"><?php /* @escapeNotVerified */ echo __('Important: ') ?></strong>
-    <?php /* @escapeNotVerified */ echo __('To use PayPal Payflow Link, you must configure your PayPal Payflow Link account on the PayPal website.'); ?>
-    <?php /* @escapeNotVerified */ echo __('Once you log into your PayPal Payflow Link account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below') ?>
+    <strong class="important-label"><?php echo $block->escapeHtml(__('Important: ')); ?></strong>
+    <?php echo $block->escapeHtml(__('To use PayPal Payflow Link, you must configure your PayPal Payflow Link account on the PayPal website.')); ?>
+    <?php echo $block->escapeHtml(__('Once you log into your PayPal Payflow Link account, navigate to the Service Settings - Hosted Checkout Pages - Set Up menu and set the options described below')); ?>
     <ul class="options-list">
         <li><strong>AVS:</strong> No</li>
         <li><strong>CSC:</strong> No</li>
diff --git a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/rules.phtml b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/rules.phtml
index 3f4f8b3c123554409c5409e55314be881d403705..6abfb6ed06237c9664334655e6cb2c5f4ed8b1d3 100644
--- a/app/code/Magento/Paypal/view/adminhtml/templates/system/config/rules.phtml
+++ b/app/code/Magento/Paypal/view/adminhtml/templates/system/config/rules.phtml
@@ -14,6 +14,6 @@
         "Magento_Paypal/js/solutions",
         "domReady!"
     ], function (Solutions) {
-        var solutions = new Solutions({config: {solutions: <?php /* @escapeNotVerified */ echo $block->getJson(); ?>}});
+        var solutions = new Solutions({config: {solutions: <?php /* @noEscape */ echo $block->getJson(); ?>}});
     });
 </script>
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js
index 0c49932d489a22e0d5e64274221ebc29ea949bd4..b565aa2d66d6b46c2165650567b06fe440291b4e 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rule.js
@@ -3,7 +3,7 @@
  * See COPYING.txt for license details.
  */
 define([
-    "Magento_Ui/js/lib/class",
+    "uiClass",
     "underscore"
 ], function (Class, _) {
     "use strict";
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js
index 98c79243d483266581e0d52bc1d1041fc9b4ce7a..4d94f6a2a9ff63cdb9195b4bbdaf012f98ec4cf7 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/rules/conflict.js
@@ -4,7 +4,9 @@
  */
 (function() {
     var executed = false;
-    define([], function () {
+    define([
+        'Magento_Ui/js/modal/alert'
+    ], function (alert) {
         "use strict";
         return function ($target, $owner, data) {
             if ($owner.find(data.enableButton).val() == 1) {
@@ -22,11 +24,11 @@
 
                 if (!isDisabled && !executed) {
                     executed = true;
-                    alert(
-                        "The following error(s) occured:\n\r"
-                        + "Some PayPal solutions conflict.\n\r"
-                        + "Please re-enable the previously enabled payment solutions."
-                    );
+                    alert({
+                        content: "The following error(s) occured:\n\r"
+                                +"Some PayPal solutions conflict.\n\r"
+                                +"Please re-enable the previously enabled payment solutions."
+                    });
                 }
             }
         };
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js b/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js
index 3ff36adf61426bbbd23d77fbe559d22c581d82d9..787d9e066cdbe0234bb434f57d39919d00639181 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/solution.js
@@ -4,7 +4,7 @@
  */
 define([
     "jquery",
-    "Magento_Ui/js/lib/class",
+    "uiClass",
     "Magento_Paypal/js/rule",
     "mageUtils",
     "underscore"
diff --git a/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js b/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js
index fc688c2da2a2c84d20663d3a82a784253f1a2d34..b1e124aca387a556069a776721a90d0c529db62a 100644
--- a/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js
+++ b/app/code/Magento/Paypal/view/adminhtml/web/js/solutions.js
@@ -4,7 +4,7 @@
  */
 define([
     "jquery",
-    "Magento_Ui/js/lib/class",
+    "uiClass",
     "Magento_Paypal/js/solution",
     "underscore"
 ], function ($, Class, Solution, _) {
diff --git a/app/code/Magento/Paypal/view/frontend/templates/billing/agreement/view.phtml b/app/code/Magento/Paypal/view/frontend/templates/billing/agreement/view.phtml
index 1723df964402960ffc741d73446beb237310bf5b..c026c3fca5e1f8fe7fbcb4a266d1267fe89d9f0b 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/billing/agreement/view.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/billing/agreement/view.phtml
@@ -5,100 +5,133 @@
  */
 
 // @codingStandardsIgnoreFile
-
+/**
+ * @var \Magento\Paypal\Block\Billing\Agreement\View $block
+ */
+$relatedOrders = $block->getRelatedOrders();
 ?>
-<?php /* @var $block \Magento\Paypal\Block\Billing\Agreement\View */ ?>
-    <div class="block block-billing-agreements-view">
-        <div class="block-title">
-            <strong><?php echo __('Billing Agreement # %1', $block->escapeHtml($block->getReferenceId())) ?></strong>
-            <?php if ($block->getCanCancel()): ?>
-                <button type="button" title="<?php /* @escapeNotVerified */ echo __('Cancel') ?>" class="secondary action cancel" onclick="if( confirm('<?php /* @escapeNotVerified */ echo __('Are you sure you want to do this?') ?>') ) { window.location.href = '<?php /* @escapeNotVerified */ echo $block->getCancelUrl() ?>'; } return false;">
-                    <span><?php /* @escapeNotVerified */ echo __('Cancel') ?></span>
-                </button>
-            <?php endif; ?>
-        </div>
-        <div class="block-title"><strong><?php /* @escapeNotVerified */ echo __('Agreement Information') ?></strong></div>
-        <div class="block-content">
-            <div class="table-wrapper billing-agreements-view">
-                <table class="data table table-billing-agreements-view">
-                    <caption class="table-caption"><?php /* @escapeNotVerified */ echo __('Agreement Information') ?></caption>
-                    <thead>
-                        <tr>
-                            <th scope="col" class="col id"><?php /* @escapeNotVerified */ echo __('Reference ID:'); ?></th>
-                            <th scope="col" class="col status"><?php /* @escapeNotVerified */ echo __('Status:'); ?></th>
-                            <th scope="col" class="col created"><?php /* @escapeNotVerified */ echo __('Created:'); ?></th>
-                            <?php if ($block->getAgreementUpdatedAt()): ?>
-                                <th scope="col" class="col updated"><?php /* @escapeNotVerified */ echo __('Updated:'); ?></th>
-                            <?php endif; ?>
-                            <th scope="col" class="col payment"><?php /* @escapeNotVerified */ echo __('Payment Method:'); ?></th>
-                        </tr>
-                    </thead>
-                    <tbody>
-                    <tr>
-                        <td data-th="<?php echo $block->escapeHtml(__('Reference ID:')); ?>"
-                            class="col id"><?php echo $block->escapeHtml($block->getReferenceId()); ?></td>
-                        <td data-th="<?php echo $block->escapeHtml(__('Status:')); ?>"
-                            class="col status"><?php /* @escapeNotVerified */ echo $block->getAgreementStatus() ?></td>
-                        <td data-th="<?php echo $block->escapeHtml(__('Created:')); ?>"
-                            class="col created"><?php echo $block->escapeHtml($block->getAgreementCreatedAt()) ?></td>
-                        <?php if ($block->getAgreementUpdatedAt()): ?>
-                            <td data-th="<?php echo $block->escapeHtml(__('Updated:')); ?>"
-                                class="col updated"><?php echo $block->escapeHtml($block->getAgreementUpdatedAt()); ?></td>
-                        <?php endif; ?>
-                        <td data-th="<?php echo $block->escapeHtml(__('Payment Method:')); ?>"
-                            class="col payment"><?php /* @escapeNotVerified */ echo $block->getPaymentMethodTitle() ?></td>
-                    </tr>
-                    </tbody>
-                </table>
-            </div>
+<div class="block block-billing-agreements-view">
+    <div class="block-title">
+        <strong>
+            <?php echo $block->escapeHtml(__('Billing Agreement # ')); ?>
+            <?php echo $block->escapeHtml($block->getReferenceId()); ?>
+        </strong>
+        <?php if ($block->getCanCancel()): ?>
+            <button type="button" title="<?php echo $block->escapeHtml(__('Cancel')); ?>"
+                    class="secondary action cancel" onclick="if( confirm('<?php
+            echo $block->escapeHtml(__('Are you sure you want to do this?')); ?>') ) { window.location.href = '<?php
+            echo $block->escapeUrl($block->getCancelUrl()) ?>'; } return false;">
+                <span><?php echo $block->escapeHtml(__('Cancel')); ?></span>
+            </button>
+        <?php endif; ?>
+    </div>
+    <div class="block-title">
+        <strong><?php echo $block->escapeHtml(__('Agreement Information')); ?></strong>
+    </div>
+    <div class="block-content">
+        <div class="table-wrapper billing-agreements-view">
+            <table class="data table table-billing-agreements-view">
+                <caption class="table-caption"><?php echo $block->escapeHtml(__('Agreement Information')); ?></caption>
+                <thead>
+                <tr>
+                    <th scope="col" class="col id"><?php echo $block->escapeHtml(__('Reference ID:')); ?></th>
+                    <th scope="col" class="col status"><?php echo $block->escapeHtml(__('Status:')); ?></th>
+                    <th scope="col" class="col created"><?php echo $block->escapeHtml(__('Created:')); ?></th>
+                    <?php if ($block->getAgreementUpdatedAt()): ?>
+                        <th scope="col" class="col updated"><?php echo $block->escapeHtml(__('Updated:')); ?></th>
+                    <?php endif; ?>
+                    <th scope="col" class="col payment"><?php echo $block->escapeHtml(__('Payment Method:')); ?></th>
+                </tr>
+                </thead>
+                <tbody>
+                <tr>
+                    <td data-th="<?php echo $block->escapeHtml(__('Reference ID:')); ?>" class="col id">
+                        <?php echo $block->escapeHtml($block->getReferenceId()); ?>
+                    </td>
+                    <td data-th="<?php echo $block->escapeHtml(__('Status:')); ?>" class="col status">
+                        <?php echo $block->escapeHtml($block->getAgreementStatus()); ?>
+                    </td>
+                    <td data-th="<?php echo $block->escapeHtml(__('Created:')); ?>" class="col created">
+                        <?php echo $block->escapeHtml($block->getAgreementCreatedAt()); ?>
+                    </td>
+                    <?php if ($block->getAgreementUpdatedAt()): ?>
+                        <td data-th="<?php echo $block->escapeHtml(__('Updated:')); ?>" class="col updated">
+                            <?php echo $block->escapeHtml($block->getAgreementUpdatedAt()); ?>
+                        </td>
+                    <?php endif; ?>
+                    <td data-th="<?php echo $block->escapeHtml(__('Payment Method:')); ?>" class="col payment">
+                        <?php echo $block->escapeHtml($block->getPaymentMethodTitle()); ?>
+                    </td>
+                </tr>
+                </tbody>
+            </table>
         </div>
     </div>
-    <?php $relatedOrders = $block->getRelatedOrders() ?>
-    <?php if (count($relatedOrders) > 0): ?>
+</div>
+<?php if (count($relatedOrders) > 0): ?>
     <div class="block block-billing-orders-view">
-    <?php echo $block->getChildHtml('pager'); ?>
-        <div class="block-title"><span><?php /* @escapeNotVerified */ echo __('Related Orders') ?></span></div>
+        <?php echo $block->getChildHtml('pager'); ?>
+        <div class="block-title">
+            <span><?php echo $block->escapeHtml(__('Related Orders')); ?></span>
+        </div>
         <div class="block-content">
             <div class="table-wrapper billing-agreements-related">
                 <table class="data table table-billing-agreements-related" id="related-orders-table">
-                    <caption class="table-caption"><?php /* @escapeNotVerified */ echo __('Related Orders') ?></caption>
+                    <caption class="table-caption"><?php echo $block->escapeHtml(__('Related Orders')) ?></caption>
                     <thead>
-                        <tr>
-                            <th scope="col" class="col id"><?php /* @escapeNotVerified */ echo __('Order #') ?></th>
-                            <th scope="col" class="col date"><?php /* @escapeNotVerified */ echo __('Date') ?></th>
-                            <th scope="col" class="col shipto"><?php /* @escapeNotVerified */ echo __('Ship To') ?></th>
-                            <th scope="col" class="col total"><?php /* @escapeNotVerified */ echo __('Order Total') ?></th>
-                            <th scope="col" class="col status"><?php /* @escapeNotVerified */ echo __('Order Status') ?></th>
-                            <th scope="col" class="col actions">&nbsp;</th>
-                        </tr>
+                    <tr>
+                        <th scope="col" class="col id"><?php echo $block->escapeHtml(__('Order #')); ?></th>
+                        <th scope="col" class="col date"><?php echo $block->escapeHtml(__('Date')); ?></th>
+                        <th scope="col" class="col shipto"><?php echo $block->escapeHtml(__('Ship To')); ?></th>
+                        <th scope="col" class="col total"><?php echo $block->escapeHtml(__('Order Total')); ?></th>
+                        <th scope="col" class="col status"><?php echo $block->escapeHtml(__('Order Status')); ?></th>
+                        <th scope="col" class="col actions">&nbsp;</th>
+                    </tr>
                     </thead>
                     <tbody>
-                    <?php foreach ($relatedOrders as $order): ?>
-                        <tr>
-                            <td data-th="<?php echo $block->escapeHtml(__('Order #')); ?>"
-                                class="col id"><?php /* @escapeNotVerified */ echo $block->getOrderItemValue($order, 'order_increment_id') ?></td>
-                            <td data-th="<?php echo $block->escapeHtml(__('Date')); ?>"
-                                class="col date"><?php /* @escapeNotVerified */ echo $block->getOrderItemValue($order, 'created_at') ?></td>
-                            <td data-th="<?php echo $block->escapeHtml(__('Ship To')); ?>"
-                                class="col shipto"><?php /* @escapeNotVerified */ echo $block->getOrderItemValue($order, 'shipping_address') ?></td>
-                            <td data-th="<?php echo $block->escapeHtml(__('Order Total')); ?>"
-                                class="col total"><?php /* @escapeNotVerified */ echo $block->getOrderItemValue($order, 'order_total') ?></td>
-                            <td data-th="<?php echo $block->escapeHtml(__('Order Status')); ?>"
-                                class="col status"><?php /* @escapeNotVerified */ echo $block->getOrderItemValue($order, 'status_label') ?></td>
-                            <td data-th="" class="col actions">
-                                <a href="<?php /* @escapeNotVerified */ echo $block->getOrderItemValue($order, 'view_url') ?>" class="action view"><span><?php /* @escapeNotVerified */ echo __('View Order') ?></span></a>
-                            </td>
-                        </tr>
-                    <?php endforeach; ?>
+                        <?php foreach ($relatedOrders as $order): ?>
+                            <tr>
+                                <td data-th="<?php echo $block->escapeHtml(__('Order #')); ?>" class="col id">
+                                    <?php echo $block->escapeHtml($block->getOrderItemValue(
+                                        $order, 'order_increment_id'
+                                    )); ?>
+                                </td>
+                                <td data-th="<?php echo $block->escapeHtml(__('Date')); ?>" class="col date">
+                                    <?php echo $block->escapeHtml($block->getOrderItemValue($order, 'created_at')); ?>
+                                </td>
+                                <td data-th="<?php echo $block->escapeHtml(__('Ship To')); ?>" class="col shipto">
+                                    <?php echo $block->escapeHtml($block->getOrderItemValue(
+                                        $order, 'shipping_address'
+                                    )); ?>
+                                </td>
+                                <td data-th="<?php echo $block->escapeHtml(__('Order Total')); ?>" class="col total">
+                                    <?php echo $block->escapeHtml($block->getOrderItemValue($order, 'order_total')); ?>
+                                </td>
+                                <td data-th="<?php echo $block->escapeHtml(__('Order Status')); ?>" class="col status">
+                                    <?php echo $block->escapeHtml($block->getOrderItemValue(
+                                        $order, 'status_label'
+                                    )); ?>
+                                </td>
+                                <td data-th="" class="col actions">
+                                    <a href="<?php echo $block->escapeUrl($block->getOrderItemValue(
+                                        $order, 'view_url'
+                                    )); ?>" class="action view">
+                                        <span><?php echo $block->escapeHtml(__('View Order')); ?></span>
+                                    </a>
+                                </td>
+                            </tr>
+                        <?php endforeach; ?>
                     </tbody>
                 </table>
             </div>
         </div>
     </div>
-    <?php endif; ?>
+<?php endif; ?>
 
-    <div class="actions-toolbar">
-        <div class="secondary">
-            <a href="<?php /* @escapeNotVerified */ echo $block->getBackUrl() ?>" class="action back"><?php /* @escapeNotVerified */ echo __('Back to Billing Agreements') ?></a>
-        </div>
+<div class="actions-toolbar">
+    <div class="secondary">
+        <a href="<?php echo $block->escapeUrl($block->getBackUrl()); ?>" class="action back">
+            <?php echo $block->escapeHtml(__('Back to Billing Agreements')); ?>
+        </a>
     </div>
+</div>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/billing/agreements.phtml b/app/code/Magento/Paypal/view/frontend/templates/billing/agreements.phtml
index 47034fd2a055e4451bdcead3647e9583bae733a8..c82412e37011e45cea5d721a26b31ad66e4384a4 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/billing/agreements.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/billing/agreements.phtml
@@ -5,60 +5,84 @@
  */
 
 // @codingStandardsIgnoreFile
+/**
+ * @var \Magento\Paypal\Block\Billing\Agreements $block
+ */
 
+$billingAgreements = $block->getBillingAgreements();
+$paymentMethods = $block->getWizardPaymentMethodOptions();
 ?>
-<?php /* @var $block \Magento\Paypal\Block\Billing\Agreements */ ?>
 <div class="account-billing-agreements">
-    <?php $billingAgreements = $block->getBillingAgreements(); ?>
     <?php if (count($billingAgreements) > 0): ?>
         <?php echo $block->getChildHtml('pager'); ?>
         <div class="table-wrapper billing-agreements">
             <table id="billing-agreements" class="data table table-billing-agreements">
-                <caption class="table-caption"><?php /* @escapeNotVerified */ echo __('Billing Agreements') ?></caption>
+                <caption class="table-caption"><?php echo $block->escapeHtml(__('Billing Agreements')); ?></caption>
                 <thead>
                 <tr>
-                    <th scope="col" class="col id"><?php /* @escapeNotVerified */ echo __('Reference ID'); ?></th>
-                    <th scope="col" class="col status"><?php /* @escapeNotVerified */ echo __('Status'); ?></th>
-                    <th scope="col" class="col created"><?php /* @escapeNotVerified */ echo __('Created At'); ?></th>
-                    <th scope="col" class="col updated"><?php /* @escapeNotVerified */ echo __('Updated At'); ?></th>
-                    <th scope="col" class="col payment"><?php /* @escapeNotVerified */ echo __('Payment Method'); ?></th>
+                    <th scope="col" class="col id"><?php echo $block->escapeHtml(__('Reference ID')); ?></th>
+                    <th scope="col" class="col status"><?php echo $block->escapeHtml(__('Status')); ?></th>
+                    <th scope="col" class="col created"><?php echo $block->escapeHtml(__('Created At')); ?></th>
+                    <th scope="col" class="col updated"><?php echo $block->escapeHtml(__('Updated At')); ?></th>
+                    <th scope="col" class="col payment"><?php echo $block->escapeHtml(__('Payment Method')); ?></th>
                     <th scope="col" class="col actions">&nbsp;</th>
                 </tr>
                 </thead>
                 <tbody>
-                <?php foreach ($billingAgreements as $item): ?>
-                    <tr>
-                        <td data-th="<?php echo $block->escapeHtml(__('Reference ID')); ?>" class="col id"><?php /* @escapeNotVerified */ echo $block->getItemValue($item, 'reference_id') ?></td>
-                        <td data-th="<?php echo $block->escapeHtml(__('Status')); ?>" class="col status"><?php /* @escapeNotVerified */ echo $block->getItemValue($item, 'status') ?></td>
-                        <td data-th="<?php echo $block->escapeHtml(__('Created At')); ?>" class="col created"><?php /* @escapeNotVerified */ echo $block->getItemValue($item, 'created_at') ?></td>
-                        <td data-th="<?php echo $block->escapeHtml(__('Updated At')); ?>" class="col updated"><?php /* @escapeNotVerified */ echo $block->getItemValue($item, 'updated_at') ?></td>
-                        <td data-th="<?php echo $block->escapeHtml(__('Payment Method')); ?>" class="col payment"><?php /* @escapeNotVerified */ echo $block->getItemValue($item, 'payment_method_label') ?></td>
-                        <td data-th="" class="col actions">
-                            <a href="<?php /* @escapeNotVerified */ echo $block->getItemValue($item, 'edit_url') ?>" class="action view"><span><?php /* @escapeNotVerified */ echo __('View') ?></span></a>
-                        </td>
-                    </tr>
-                <?php endforeach; ?>
+                    <?php foreach ($billingAgreements as $item): ?>
+                        <tr>
+                            <td data-th="<?php echo $block->escapeHtml(__('Reference ID')); ?>" class="col id">
+                                <?php echo $block->escapeHtml($block->getItemValue($item, 'reference_id')); ?>
+                            </td>
+                            <td data-th="<?php echo $block->escapeHtml(__('Status')); ?>" class="col status">
+                                <?php echo $block->escapeHtml($block->getItemValue($item, 'status')); ?>
+                            </td>
+                            <td data-th="<?php echo $block->escapeHtml(__('Created At')); ?>" class="col created">
+                                <?php echo $block->escapeHtml($block->getItemValue($item, 'created_at')); ?>
+                            </td>
+                            <td data-th="<?php echo $block->escapeHtml(__('Updated At')); ?>" class="col updated">
+                                <?php echo $block->escapeHtml($block->getItemValue($item, 'updated_at')); ?>
+                            </td>
+                            <td data-th="<?php echo $block->escapeHtml(__('Payment Method')); ?>" class="col payment">
+                                <?php echo $block->escapeHtml($block->getItemValue($item, 'payment_method_label')); ?>
+                            </td>
+                            <td data-th="" class="col actions">
+                                <a href="<?php echo $block->escapeUrl($block->getItemValue($item, 'edit_url')); ?>"
+                                   class="action view">
+                                    <span><?php echo $block->escapeHtml(__('View')); ?></span>
+                                </a>
+                            </td>
+                        </tr>
+                    <?php endforeach; ?>
                 </tbody>
             </table>
         </div>
     <?php else: ?>
-        <div class="message info empty"><span><?php /* @escapeNotVerified */ echo __('There are no billing agreements yet.') ?></span></div>
+        <div class="message info empty">
+            <span><?php echo $block->escapeHtml(__('There are no billing agreements yet.')); ?></span>
+        </div>
     <?php endif; ?>
 
-    <?php $paymentMethods = $block->getWizardPaymentMethodOptions() ?>
     <?php if ($paymentMethods): ?>
-        <form action="<?php /* @escapeNotVerified */ echo $block->getCreateUrl() ?>" method="post" class="form form-new-agreement">
+        <form action="<?php echo $block->escapeUrl($block->getCreateUrl()); ?>" method="post"
+              class="form form-new-agreement">
             <fieldset class="fieldset">
-                <legend class="legend"><span><?php /* @escapeNotVerified */ echo __('New Billing Agreement') ?></span></legend>
+                <legend class="legend">
+                    <span><?php echo $block->escapeHtml(__('New Billing Agreement')); ?></span>
+                </legend>
                 <br />
-                <p class="note"><?php /* @escapeNotVerified */ echo __('You will be redirected to the payment system website.') ?></p>
+                <p class="note">
+                    <?php echo $block->escapeHtml(__('You will be redirected to the payment system website.')); ?>
+                </p>
 
                 <div class="field payment method">
                     <div class="control">
                         <select id="payment_method" name="payment_method">
-                            <option value=""><?php /* @escapeNotVerified */ echo __('-- Please Select --') ?></option>
+                            <option value=""><?php echo $block->escapeHtml(__('-- Please Select --'));?></option>
                             <?php foreach ($paymentMethods as $code => $title): ?>
-                                <option value="<?php /* @escapeNotVerified */ echo $code ?>"><?php /* @escapeNotVerified */ echo $title ?></option>
+                                <option value="<?php echo $block->escapeHtml($code); ?>">
+                                    <?php echo $block->escapeHtml($title); ?>
+                                </option>
                             <?php endforeach; ?>
                         </select>
                     </div>
@@ -66,12 +90,13 @@
                 <div class="actions-toolbar">
                     <div class="primary">
                         <button type="submit" class="primary action create">
-                            <span><?php /* @escapeNotVerified */ echo __('Create...') ?></span>
+                            <span><?php echo $block->escapeHtml(__('Create...')); ?></span>
                         </button>
                     </div>
                     <div class="secondary">
-                        <a href="<?php echo $block->escapeHtml($block->getBackUrl()) ?>"
-                           class="action back"><span><?php /* @escapeNotVerified */ echo __('Back') ?></span></a>
+                        <a href="<?php echo $block->escapeUrl($block->getBackUrl()); ?>" class="action back">
+                            <span><?php echo $block->escapeHtml(__('Back')); ?></span>
+                        </a>
                     </div>
                 </div>
             </fieldset>
@@ -79,8 +104,9 @@
     <?php else: ?>
     <div class="actions-toolbar">
         <div class="secondary">
-            <a href="<?php echo $block->escapeHtml($block->getBackUrl()) ?>"
-               class="action back"><span><?php /* @escapeNotVerified */ echo __('Back') ?></span></a>
+            <a href="<?php echo $block->escapeUrl($block->getBackUrl()); ?>" class="action back">
+                <span><?php echo $block->escapeHtml(__('Back')); ?></span>
+            </a>
         </div>
     </div>
     <?php endif; ?>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/bml.phtml b/app/code/Magento/Paypal/view/frontend/templates/bml.phtml
index 981c19c04dbdad9cc44d6f3654477e38de630b45..772ecfd6c6a856bf4c1cae504c57e1f1a80ca88e 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/bml.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/bml.phtml
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
+
 
  ?>
 <?php
@@ -13,7 +13,9 @@
  */
 ?>
 <div class="paypal-logo">
-    <script data-pp-pubid="<?php echo $block->escapeHtml($block->getPublisherId()) ?>" data-pp-placementtype="<?php echo $block->escapeHtml($block->getSize()) ?>"> (function (d, t) {
+    <script data-pp-pubid="<?php echo $block->escapeHtml($block->getPublisherId()) ?>"
+            data-pp-placementtype="<?php echo $block->escapeHtml($block->getSize()) ?>"
+        > (function (d, t) {
             "use strict";
             var s = d.getElementsByTagName(t)[0], n = d.createElement(t);
             n.src = "//paypal.adtag.where.com/merchant.js";
diff --git a/app/code/Magento/Paypal/view/frontend/templates/checkout/onepage/success/billing_agreement.phtml b/app/code/Magento/Paypal/view/frontend/templates/checkout/onepage/success/billing_agreement.phtml
index 2163d12e0843d4456245d707dccdccf5954305c0..cdfb31348a4d125b38f494df770262bfdbab0d1b 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/checkout/onepage/success/billing_agreement.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/checkout/onepage/success/billing_agreement.phtml
@@ -4,8 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
 
+/**
+ * @var \Magento\Paypal\Block\Checkout\Onepage\Success\BillingAgreement $block
+ */
 ?>
-<?php /* @var $block \Magento\Paypal\Block\Checkout\Onepage\Success\BillingAgreement */ ?>
-<p><?php echo __('Your billing agreement # is: %1.', sprintf('<a href="%s">%s</a>', $block->escapeHtml($block->getAgreementUrl()), $block->escapeHtml($block->getAgreementRefId())))?></p>
+<p>
+    <?php echo $block->escapeHtml(__('Your billing agreement # is: ')); ?>
+    <a href="<?php echo $block->escapeUrl($block->getAgreementUrl()); ?>">
+        <?php echo $block->escapeHtml($block->getAgreementRefId()); ?>
+    </a>.
+</p>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml
index a5a69a77b99f302e465ce2c9da904e9509abc11a..892e8771da7dce8e89e43717a2cf0fbfd5f626da 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/review.phtml
@@ -5,19 +5,21 @@
  */
 
 // @codingStandardsIgnoreFile
-
-/** @var $block \Magento\Paypal\Block\Express\Review */
-
+/**
+ * @var \Magento\Paypal\Block\Express\Review $block
+ */
 ?>
 <div class="paypal-review view">
     <div class="block block-order-details-view">
         <div class="block-content">
             <?php if ($block->getShippingAddress()): ?>
                 <div class="box box-order-shipping-method">
-                    <strong class="box-title"><span><?php /* @escapeNotVerified */ echo __('Shipping Method') ?></span></strong>
+                    <strong class="box-title">
+                        <span><?php echo $block->escapeHtml(__('Shipping Method')) ?></span>
+                    </strong>
                     <div class="box-content">
                         <form method="post" id="shipping-method-form"
-                              action="<?php echo $block->escapeHtml($block->getShippingMethodSubmitUrl()) ?>"
+                              action="<?php echo $block->escapeUrl($block->getShippingMethodSubmitUrl()); ?>"
                               class="form">
                             <?php if ($block->getCanEditShippingMethod() || !$block->getCurrentShippingRate()): ?>
                                 <?php if ($groups = $block->getShippingRateGroups()): ?>
@@ -25,17 +27,24 @@
                                     <div class="field shipping required">
                                         <select name="shipping_method" id="shipping-method" class="select">
                                             <?php if (!$currentRate): ?>
-                                                <option value="">
-                                                    <?php /* @escapeNotVerified */ echo __('Please select a shipping method...') ?>
-                                                </option>
+                                                <option value=""><?php echo $block->escapeHtml(__(
+                                                        'Please select a shipping method...'
+                                                    )); ?></option>
                                             <?php endif; ?>
                                             <?php foreach ($groups as $code => $rates): ?>
-                                                <optgroup
-                                                    label="<?php echo $block->escapeHtml($block->getCarrierName($code)) ?>">
+                                                <optgroup label="<?php echo $block->escapeHtml($block->getCarrierName(
+                                                        $code
+                                                    )); ?>">
                                                     <?php foreach ($rates as $rate): ?>
-                                                        <option
-                                                            value="<?php /* @escapeNotVerified */ echo $block->renderShippingRateValue($rate) ?>"<?php echo($currentRate === $rate) ? ' selected="selected"' : ''; ?>>
-                                                            <?php /* @escapeNotVerified */ echo $block->renderShippingRateOption($rate) ?>
+                                                        <option value="<?php echo $block->escapeHtml(
+                                                                $block->renderShippingRateValue($rate)
+                                                            ); ?>"
+                                                            <?php echo($currentRate === $rate) ?
+                                                                ' selected="selected"' : '';
+                                                            ?>>
+                                                            <?php /* @noEscape */ echo
+                                                                $block->renderShippingRateOption($rate);
+                                                            ?>
                                                         </option>
                                                     <?php endforeach; ?>
                                                 </optgroup>
@@ -46,42 +55,59 @@
                                         <div class="primary">
                                             <button id="update-shipping-method-submit" type="submit"
                                                     class="action update primary">
-                                                <span><?php /* @escapeNotVerified */ echo __('Update Shipping Method') ?></span></button>
+                                                <span>
+                                                    <?php echo $block->escapeHtml(__('Update Shipping Method')); ?>
+                                                </span>
+                                            </button>
                                         </div>
                                     </div>
                                 <?php else: ?>
-                                    <p><?php /* @escapeNotVerified */ echo __('Sorry, no quotes are available for this order right now.') ?></p>
+                                    <p>
+                                        <?php echo $block->escapeHtml(__(
+                                            'Sorry, no quotes are available for this order right now.'
+                                        )); ?>
+                                    </p>
                                 <?php endif; ?>
                             <?php else: ?>
-                                <p><?php /* @escapeNotVerified */ echo $block->renderShippingRateOption($block->getCurrentShippingRate()) ?></p>
+                                <p>
+                                    <?php /* @noEscape */ echo $block->renderShippingRateOption(
+                                        $block->getCurrentShippingRate()
+                                    ); ?>
+                                </p>
                             <?php endif; ?>
                         </form>
                     </div>
                 </div>
                 <div class="box box-order-shipping-address">
-                    <strong class="box-title"><span><?php /* @escapeNotVerified */ echo __('Shipping Address') ?></span></strong>
+                    <strong class="box-title">
+                        <span><?php echo $block->escapeHtml(__('Shipping Address')); ?></span>
+                    </strong>
                     <div class="box-content">
-                        <address><?php /* @escapeNotVerified */ echo $block->renderAddress($block->getShippingAddress()) ?></address>
+                        <address>
+                            <?php /* @noEscape */ echo $block->renderAddress($block->getShippingAddress()); ?>
+                        </address>
                     </div>
                     <?php if ($block->getCanEditShippingAddress()): ?>
                         <div class="box-actions">
-                            <a href="<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>"
-                               class="action edit"><span><?php /* @escapeNotVerified */ echo __('Edit') ?></span></a>
+                            <a href="<?php echo $block->escapeUrl($block->getEditUrl()); ?>" class="action edit">
+                                <span><?php echo $block->escapeHtml(__('Edit')); ?></span>
+                            </a>
                         </div>
                     <?php endif; ?>
                 </div>
             <?php endif; ?>
             <div class="box box-order-billing-address">
-                <strong class="box-title"><span><?php /* @escapeNotVerified */ echo __('Payment Method') ?></span></strong>
+                <strong class="box-title"><span><?php echo $block->escapeHtml(__('Payment Method')); ?></span></strong>
                 <div class="box-content">
-                    <?php echo $block->escapeHtml($block->getPaymentMethodTitle()) ?><br>
-                    <?php echo $block->escapeHtml($block->getEmail()) ?> <br>
-                    <img src="https://www.paypalobjects.com/webstatic/en_US/i/buttons/pp-acceptance-medium.png" alt="<?php /* @escapeNotVerified */ echo __('Buy now with PayPal') ?>"/>
+                    <?php echo $block->escapeHtml($block->getPaymentMethodTitle()); ?><br>
+                    <?php echo $block->escapeHtml($block->getEmail()); ?> <br>
+                    <img src="https://www.paypalobjects.com/webstatic/en_US/i/buttons/pp-acceptance-medium.png"
+                         alt="<?php echo $block->escapeHtml(__('Buy now with PayPal')); ?>"/>
                 </div>
             <?php if ($block->getEditUrl()): ?>
                 <div class="box-actions">
-                    <a href="<?php /* @escapeNotVerified */ echo $block->getEditUrl() ?>" class="action edit">
-                        <span><?php /* @escapeNotVerified */ echo __('Edit Payment Information') ?></span>
+                    <a href="<?php echo $block->escapeUrl($block->getEditUrl()); ?>" class="action edit">
+                        <span><?php echo $block->escapeHtml(__('Edit Payment Information')); ?></span>
                     </a>
                 </div>
             <?php endif ?>
@@ -95,24 +121,31 @@
 
     <div class="paypal-review-items">
         <div class="paypal-review-title">
-            <strong><?php /* @escapeNotVerified */ echo __('Items in Your Shopping Cart') ?></strong>
-            <a href="<?php /* @escapeNotVerified */ echo $block->getUrl('checkout/cart') ?>"
-               class="action edit"><span><?php /* @escapeNotVerified */ echo __('Edit Shopping Cart') ?></span></a>
+            <strong><?php echo $block->escapeHtml(__('Items in Your Shopping Cart')); ?></strong>
+            <a href="<?php echo $block->escapeUrl($block->getUrl('checkout/cart')); ?>" class="action edit">
+                <span><?php echo $block->escapeHtml(__('Edit Shopping Cart')); ?></span>
+            </a>
         </div>
 
         <?php echo $block->getChildHtml('details') ?>
 
-        <form method="post" id="order-review-form" action="<?php /* @escapeNotVerified */ echo $block->getPlaceOrderUrl() ?>" class="form">
+        <form method="post" id="order-review-form" action="<?php echo $block->escapeUrl($block->getPlaceOrderUrl()); ?>"
+              class="form">
             <?php echo $block->getChildHtml('agreements'); ?>
             <div class="actions-toolbar" id="review-buttons-container">
                 <div class="primary">
-                    <button type="button" id="review-button" value="<?php /* @escapeNotVerified */ echo __('Place Order') ?>"
-                            class="action checkout primary"><span><?php /* @escapeNotVerified */ echo __('Place Order') ?></span></button>
-                    <button type="button" id="review-submit" value="<?php /* @escapeNotVerified */ echo __('Place Order') ?>"
-                            class="action checkout primary"><span><?php /* @escapeNotVerified */ echo __('Place Order') ?></span></button>
+                    <button type="button" id="review-button" class="action checkout primary"
+                            value="<?php echo $block->escapeHtml(__('Place Order')); ?>">
+                        <span><?php echo $block->escapeHtml(__('Place Order')); ?></span>
+                    </button>
+                    <button type="button" id="review-submit" class="action checkout primary"
+                            value="<?php echo $block->escapeHtml(__('Place Order')); ?>">
+                        <span><?php echo $block->escapeHtml(__('Place Order')); ?></span>
+                    </button>
                 </div>
-                <span class="please-wait load indicator" id="review-please-wait" style="display: none;" data-text="<?php /* @escapeNotVerified */ echo __('Submitting order information...') ?>">
-                   <span><?php /* @escapeNotVerified */ echo __('Submitting order information...') ?></span>
+                <span class="please-wait load indicator" id="review-please-wait" style="display: none;"
+                      data-text="<?php echo $block->escapeHtml(__('Submitting order information...')); ?>">
+                   <span><?php echo $block->escapeHtml(__('Submitting order information...')); ?></span>
                 </span>
             </div>
         </form>
@@ -125,8 +158,8 @@
             "orderReview": {
                 "shippingSubmitFormSelector": "#shipping-method-form",
                 "shippingSelector": "#shipping-method",
-                "shippingMethodUpdateUrl": "<?php echo $block->escapeHtml($block->getUpdateShippingMethodsUrl()) ?>",
-                "isAjax": <?php /* @escapeNotVerified */ echo $block->getUseAjax() ? 'true' : 'false' ?>
+                "shippingMethodUpdateUrl": "<?php echo $block->escapeUrl($block->getUpdateShippingMethodsUrl()) ?>",
+                "isAjax": <?php /* @noEscape */ echo $block->getUseAjax() ? 'true' : 'false' ?>
             }
         }
     }
diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/review/details.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/review/details.phtml
index b1347b28e98a6f7749861d92cd6f0053604a5381..50d46f547fa9008543f09d18691e1577a0929298 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/review/details.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/review/details.phtml
@@ -5,25 +5,25 @@
  */
 
 // @codingStandardsIgnoreFile
-
 /**
  * @see \Magento\Paypal\Block\Express\Review\Details
+ * @var \Magento\Paypal\Block\Express\Review\Details $block
  */
 ?>
 <div id="details-reload" class="table-wrapper order-items cart">
     <table id="details-table" class="cart items data table table-paypal-review-items">
-        <caption class="table-caption"><?php /* @escapeNotVerified */ echo __('Items in Your Shopping Cart') ?></caption>
+        <caption class="table-caption"><?php echo $block->escapeHtml(__('Items in Your Shopping Cart')); ?></caption>
         <thead>
         <tr>
-            <th class="col name" scope="col"><?php /* @escapeNotVerified */ echo __('Item') ?></th>
-            <th class="col price" scope="col"><?php /* @escapeNotVerified */ echo __('Price') ?></th>
-            <th class="col qty" scope="col"><?php /* @escapeNotVerified */ echo __('Qty') ?></th>
-            <th class="col subtotal" scope="col"><?php /* @escapeNotVerified */ echo __('Subtotal') ?></th>
+            <th class="col name" scope="col"><?php echo $block->escapeHtml(__('Item')); ?></th>
+            <th class="col price" scope="col"><?php echo $block->escapeHtml(__('Price')); ?></th>
+            <th class="col qty" scope="col"><?php echo $block->escapeHtml(__('Qty')); ?></th>
+            <th class="col subtotal" scope="col"><?php echo $block->escapeHtml(__('Subtotal')); ?></th>
         </tr>
         </thead>
-        <?php foreach ($block->getItems() as $_item): ?>
-            <?php echo $block->getItemHtml($_item) ?>
-        <?php endforeach ?>
+            <?php foreach ($block->getItems() as $item): ?>
+                <?php echo $block->getItemHtml($item) ?>
+            <?php endforeach ?>
         <tfoot>
             <?php echo $block->getChildHtml('totals'); ?>
         </tfoot>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml
index 3757e741f3b73a77a463ae0eef61f9213dc722fa..909d0e1c762e851ec6d81f6f643e725bd8cb067c 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/review/shipping/method.phtml
@@ -5,7 +5,6 @@
  */
 
 // @codingStandardsIgnoreFile
-
 /** @var $block \Magento\Paypal\Block\Express\Review */
 ?>
 <div id="shipping-method-container">
@@ -14,27 +13,38 @@
             <?php $currentRate = $block->getCurrentShippingRate(); ?>
             <select name="shipping_method" id="shipping_method" class="required-entry">
                 <?php if (!$currentRate): ?>
-                    <option value=""><?php /* @escapeNotVerified */ echo __('Please select a shipping method...') ?></option>
+                    <option value="">
+                        <?php echo $block->escapeHtml(__('Please select a shipping method...')); ?>
+                    </option>
                 <?php endif; ?>
                 <?php foreach ($groups as $code => $rates): ?>
                     <optgroup label="<?php echo $block->escapeHtml($block->getCarrierName($code)) ?>"
                               style="font-style:normal;">
                         <?php foreach ($rates as $rate): ?>
                             <option
-                                value="<?php /* @escapeNotVerified */ echo $block->renderShippingRateValue($rate) ?>"<?php echo($currentRate === $rate) ? ' selected="selected"' : ''; ?>>
-                                <?php /* @escapeNotVerified */ echo $block->renderShippingRateOption($rate) ?>
+                                value="<?php echo $block->escapeHtml($block->renderShippingRateValue($rate)); ?>"
+                                    <?php echo($currentRate === $rate) ? ' selected="selected"' : ''; ?>>
+                                <?php /* @noEscape */ echo $block->renderShippingRateOption($rate); ?>
                             </option>
                         <?php endforeach; ?>
                     </optgroup>
                 <?php endforeach; ?>
             </select>
         <?php else: ?>
-            <p><strong><?php /* @escapeNotVerified */ echo __('Sorry, no quotes are available for this order right now.') ?></strong></p>
+            <p>
+                <strong>
+                    <?php echo $block->escapeHtml(__('Sorry, no quotes are available for this order right now.')); ?>
+                </strong>
+            </p>
         <?php endif; ?>
     <?php else: ?>
-        <p><strong><?php /* @escapeNotVerified */ echo $block->renderShippingRateOption($block->getCurrentShippingRate()) ?></strong></p>
+        <p>
+            <strong>
+                <?php /* @noEscape */ echo $block->renderShippingRateOption($block->getCurrentShippingRate()); ?>
+            </strong>
+        </p>
     <?php endif; ?>
 </div>
 <div style="display: none" id="shipping_method_update">
-    <p><?php /* @escapeNotVerified */ echo __('Please update order data to get shipping methods and rates') ?></p>
+    <p><?php echo $block->escapeHtml(__('Please update order data to get shipping methods and rates')); ?></p>
 </div>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml
index 195795a33ca60705b6adb86dce972484b628d0b9..fa9afa80e5fa8abd356ed6ccfe3d54e80e3638a4 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut.phtml
@@ -5,11 +5,8 @@
  */
 
 // @codingStandardsIgnoreFile
-
-?>
-<?php
 /**
- * @var $block \Magento\Paypal\Block\Express\Shortcut
+ * @var \Magento\Paypal\Block\Express\Shortcut $block
  */
 ?>
 <?php
@@ -19,32 +16,42 @@ if ($block->isOrPositionBefore()) {
 } elseif ($block->isOrPositionAfter()) {
     $labelPosition = ' after';
 }
+$shortcutHtmlId = $block->escapeHtml($block->getShortcutHtmlId());
+$confirmationUrl = '';
+$isInCatalogProduct = false;
+if ($block->getConfirmationUrl() || $block->getIsInCatalogProduct()) {
+    $confirmationUrl = $block->escapeUrl($block->getConfirmationUrl());
+    $isInCatalogProduct = $block->getIsInCatalogProduct();
+}
 ?>
-<?php $shortcutHtmlId = $block->getShortcutHtmlId() ?>
 <div data-label="<?php echo $block->escapeHtml(__('or')); ?>"
-     class="paypal checkout <?php /* @escapeNotVerified */ echo $labelPosition ?> paypal-logo <?php /* @escapeNotVerified */ echo $shortcutHtmlId ?>">
-    <input type="image" data-action="checkout-form-submit" data-checkout-url="<?php /* @escapeNotVerified */ echo $block->getCheckoutUrl() ?>"
-           src="<?php /* @escapeNotVerified */ echo $block->getImageUrl() ?>"
-           alt="<?php /* @escapeNotVerified */ echo __('Checkout with PayPal'); ?>"
-           title="<?php /* @escapeNotVerified */ echo __('Checkout with PayPal'); ?>"/>
-    <?php if ($block->getConfirmationUrl() || $block->getIsInCatalogProduct()): ?>
-        <?php
-        $confirmationUrl = $block->getConfirmationUrl();
-        $isInCatalogProduct = $block->getIsInCatalogProduct();
-    endif; ?>
+     class="paypal checkout <?php /* @noEscape */ echo $labelPosition; ?> paypal-logo
+        <?php /* @noEscape */ echo $shortcutHtmlId; ?>"
+    >
+    <input type="image" data-action="checkout-form-submit"
+           data-checkout-url="<?php echo $block->escapeUrl($block->getCheckoutUrl()); ?>"
+           src="<?php echo $block->escapeUrl($block->getImageUrl()); ?>"
+           alt="<?php echo $block->escapeHtml(__('Checkout with PayPal')); ?>"
+           title="<?php echo $block->escapeHtml(__('Checkout with PayPal')); ?>"/>
     <?php if ($block->getAdditionalLinkImage()): ?>
-        <?php $linkImage = $block->getAdditionalLinkImage() ?>
-        <a href="<?php /* @escapeNotVerified */ echo $linkImage['href']?>"><img src="<?php /* @escapeNotVerified */ echo $linkImage['src']?>" /></a>
+        <?php $linkImage = $block->getAdditionalLinkImage(); ?>
+        <a href="<?php echo $block->escapeUrl($linkImage['href']);?>">
+            <img src="<?php echo $block->escapeHtml($linkImage['src']);?>" />
+        </a>
     <?php endif; ?>
 <script type="text/x-magento-init">
     {
-        ".paypal-logo.<?php /* @escapeNotVerified */ echo $shortcutHtmlId ?>": {
+        ".paypal-logo.<?php /* @noEscape */ echo $shortcutHtmlId; ?>": {
             "paypalCheckout": {
-                "confirmMessage": "<?php /* @escapeNotVerified */ echo $block->escapeJsQuote($block->getConfirmationMessage())?>",
-                "confirmUrl": "<?php /* @escapeNotVerified */ echo !empty($confirmationUrl) ? $confirmationUrl : false ?>",
-                "isCatalogProduct": "<?php /* @escapeNotVerified */ echo !empty($isInCatalogProduct) ? $isInCatalogProduct : false ?>",
+                "confirmMessage": "<?php /* @noEscape */ echo $block->escapeJsQuote(
+                        $block->getConfirmationMessage()
+                    ); ?>",
+                "confirmUrl": "<?php /* @noEscape */ echo !empty($confirmationUrl) ? $confirmationUrl : false; ?>",
+                "isCatalogProduct": "<?php /* @noEscape */ echo !empty($isInCatalogProduct) ?
+                        (bool)$isInCatalogProduct : false;
+                    ?>",
                 "paypalCheckoutSelector": "#pp-checkout-url",
-                "shortcutContainerClass": "<?php /* @escapeNotVerified */ echo "." . $shortcutHtmlId ?>"
+                "shortcutContainerClass": "<?php /* @noEscape */ echo "." . $shortcutHtmlId; ?>"
             }
         }
     }
diff --git a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut/container.phtml b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut/container.phtml
index 6f053dd9c8e9afc181dfcbf3d63aa2cfa99ccbde..0556876235d44dd7fd0667d416ecca1c805b874c 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/express/shortcut/container.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/express/shortcut/container.phtml
@@ -5,9 +5,6 @@
  */
 
 // @codingStandardsIgnoreFile
-
-?>
-<?php
 /**
  * @var $block Magento\Paypal\Block\Express\Shortcut
  */
diff --git a/app/code/Magento/Paypal/view/frontend/templates/hss/form.phtml b/app/code/Magento/Paypal/view/frontend/templates/hss/form.phtml
index 3cb8fd28a598a3941806ef8b940d2815d1a94a62..641ead21be343860b9902c587ccee16c6f3fb04f 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/hss/form.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/hss/form.phtml
@@ -4,9 +4,10 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
+
 
 /**
+ * @var \Magento\Paypal\Block\Payflow\Link\Iframe $block
  * @see \Magento\Paypal\Block\Payflow\Link\Iframe
  */
 ?>
@@ -14,10 +15,10 @@
 <head>
 </head>
 <body>
-<form id="token_form" method="POST" action="<?php /* @escapeNotVerified */ echo $block->getTransactionUrl() ?>">
-    <input type="hidden" name="SECURETOKEN" value="<?php /* @escapeNotVerified */ echo $block->getSecureToken(); ?>"/>
-    <input type="hidden" name="SECURETOKENID" value="<?php /* @escapeNotVerified */ echo $block->getSecureTokenId(); ?>"/>
-    <input type="hidden" name="MODE" value="<?php /* @escapeNotVerified */ echo $block->isTestMode() ? 'TEST' : 'LIVE'; ?>"/>
+<form id="token_form" method="POST" action="<?php echo $block->escapeUrl($block->getTransactionUrl()); ?>">
+    <input type="hidden" name="SECURETOKEN" value="<?php echo $block->escapeHtml($block->getSecureToken()); ?>"/>
+    <input type="hidden" name="SECURETOKENID" value="<?php echo $block->escapeHtml($block->getSecureTokenId()); ?>"/>
+    <input type="hidden" name="MODE" value="<?php /* @noEscape */ echo $block->isTestMode() ? 'TEST' : 'LIVE'; ?>"/>
 </form>
 <script>
     document.getElementById('token_form').submit();
diff --git a/app/code/Magento/Paypal/view/frontend/templates/hss/iframe.phtml b/app/code/Magento/Paypal/view/frontend/templates/hss/iframe.phtml
index b69d3964c3098f989ebd1f1914b7a55ddd066f38..06f7bbe5ce888fa1e93a81c0013401899a8fb409 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/hss/iframe.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/hss/iframe.phtml
@@ -4,9 +4,12 @@
  * See COPYING.txt for license details.
  */
 
+/**
+ * @var \Magento\Paypal\Block\Payflow\Link\Iframe $block
+ */
 ?>
 <div id="iframe-warning" class="message notice">
-    <div><?php /* @escapeNotVerified */ echo __('Please do not refresh the page until you complete payment.') ?></div>
+    <div><?php echo $block->escapeHtml(__('Please do not refresh the page until you complete payment.')); ?></div>
 </div>
 <iframe id="hss-iframe" data-container="paypal-iframe" class="paypal iframe" scrolling="no" frameborder="0" border="0"
-        src="<?php /* @escapeNotVerified */ echo $block->getFrameActionUrl() ?>" height="610" width="100%"></iframe>
+        src="<?php echo $block->escapeUrl($block->getFrameActionUrl()); ?>" height="610" width="100%"></iframe>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml b/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml
index cf48aff175ea6d72833327e23049948d131ff2ed..69bf40f9314e3efe35056fa5b0b1bc1915f61c33 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/hss/info.phtml
@@ -4,12 +4,15 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
+
 
 /**
+ * @var \Magento\Paypal\Block\Payflow\Link\Info $block
  * @see \Magento\Paypal\Block\Payflow\Link\Info
  */
 ?>
-<div id="payment_form_<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>" style="display:none" class="hss items">
-    <?php /* @escapeNotVerified */ echo __('You will be required to enter your payment details after you place an order.') ?>
+<div id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" style="display:none" class="hss items">
+    <?php echo $block->escapeHtml(__(
+        'You will be required to enter your payment details after you place an order.'
+    )); ?>
 </div>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/hss/redirect.phtml b/app/code/Magento/Paypal/view/frontend/templates/hss/redirect.phtml
index 8c3578989ae3b4e36b6ca52266063eb5dc4431a0..9e60b5f8365826941cca57524aa33f2021f29b10 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/hss/redirect.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/hss/redirect.phtml
@@ -4,9 +4,10 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
+
 
 /**
+ * @var \Magento\Paypal\Block\Iframe $block
  * @see \Magento\Paypal\Block\Iframe
  */
 ?>
@@ -18,13 +19,13 @@
     (function() {
         'use strict';
 
-        var cartUrl = '<?php /* @escapeNotVerified */ echo $block->getUrl('checkout/cart') ?>',
-            successUrl = '<?php /* @escapeNotVerified */ echo $block->getUrl('checkout/onepage/success') ?>',
-            goToSuccessPage = '<?php /* @escapeNotVerified */ echo $block->getGotoSuccessPage() ?>',
+        var cartUrl = '<?php echo $block->escapeUrl($block->getUrl('checkout/cart')); ?>',
+            successUrl = '<?php echo $block->escapeUrl($block->getUrl('checkout/onepage/success')); ?>',
+            goToSuccessPage = '<?php echo $block->escapeUrl($block->getGotoSuccessPage()); ?>',
             require = window.top.require,
             windowContext = window,
             errorMessage = {
-                message: '<?php /* @escapeNotVerified */ echo $block->getErrorMsg() ?>'
+                message: '<?php echo $block->escapeHtml($block->getErrorMsg()); ?>'
             };
 
         require([
diff --git a/app/code/Magento/Paypal/view/frontend/templates/hss/review/button.phtml b/app/code/Magento/Paypal/view/frontend/templates/hss/review/button.phtml
index a2dd9d8a680bb434724255de36f549ed3783dfb8..8b61ba63e7f5b0f4605443f8b409c0b90fc66852 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/hss/review/button.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/hss/review/button.phtml
@@ -4,8 +4,10 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
+
 
 ?>
-<button type="submit" data-role="review-save" title="<?php /* @escapeNotVerified */ echo __('Continue') ?>" class="button action checkout primary">
-    <span><?php /* @escapeNotVerified */ echo __('Continue') ?></span></button>
+<button type="submit" data-role="review-save" title="<?php echo $block->escapeHtml(__('Continue')); ?>"
+        class="button action checkout primary">
+    <span><?php echo $block->escapeHtml(__('Continue')); ?></span>
+</button>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/js/components.phtml b/app/code/Magento/Paypal/view/frontend/templates/js/components.phtml
index 3d85172583ed01a859285d5cae364689ac4eb01d..12a3b0ed4c478512b7f44378a5d5f0163b3285ee 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/js/components.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/js/components.phtml
@@ -5,6 +5,5 @@
  */
 
 // @codingStandardsIgnoreFile
-
 ?>
-<?php echo $block->getChildHtml() ?>
+<?php echo $block->getChildHtml(); ?>
\ No newline at end of file
diff --git a/app/code/Magento/Paypal/view/frontend/templates/partner/logo.phtml b/app/code/Magento/Paypal/view/frontend/templates/partner/logo.phtml
index 3d0f12c4a51ace696c2f39c748668701a82a1096..eaa5e9284f9dfa3be93450e102ec7ca98aac52c3 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/partner/logo.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/partner/logo.phtml
@@ -4,23 +4,25 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
 
-?>
-<?php
 /**
+ * @var \Magento\Paypal\Block\Logo $block
  * @see \Magento\Paypal\Block\Logo
  */
 ?>
 
 <div class="block paypal acceptance">
     <div class="block-content">
-        <a href="#" title="<?php /* @escapeNotVerified */ echo __('Additional Options') ?>"
-           onclick="javascript:window.open('<?php /* @escapeNotVerified */ echo $block->getAboutPaypalPageUrl() ?>','paypal','width=600,height=350,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes'); return false;"
+        <a href="#" title="<?php echo $block->escapeHtml(__('Additional Options')); ?>"
+           onclick="javascript:window.open(
+               '<?php echo $block->escapeUrl($block->getAboutPaypalPageUrl()); ?>',
+               'paypal',
+               'width=600,height=350,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes'
+               ); return false;"
            class="action paypal additional">
-            <img src="<?php echo $block->escapeHtml($block->getLogoImageUrl()) ?>"
-                 alt="<?php echo $block->escapeHtml(__('Additional Options')) ?>"
-                 title="<?php echo $block->escapeHtml(__('Additional Options')) ?>" />
+            <img src="<?php echo $block->escapeUrl($block->getLogoImageUrl()); ?>"
+                 alt="<?php echo $block->escapeHtml(__('Additional Options')); ?>"
+                 title="<?php echo $block->escapeHtml(__('Additional Options')); ?>" />
         </a>
     </div>
 </div>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/form.phtml b/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/form.phtml
index 479b7e4f875d571c1b6b9e63efac7f385b235ee4..40617ec10f6365f8d7f3915ce9ddda73078a526e 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/form.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/form.phtml
@@ -4,20 +4,18 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 /**
- * @var $block \Magento\Paypal\Block\Payflow\Advanced\Iframe
+ * @var \Magento\Paypal\Block\Payflow\Advanced\Iframe $block
  */
 ?>
 <html>
 <head>
 </head>
 <body>
-<form id="token_form" method="GET" action="<?php /* @escapeNotVerified */ echo $block->getTransactionUrl() ?>">
-    <input type="hidden" name="SECURETOKEN" value="<?php /* @escapeNotVerified */ echo $block->getSecureToken(); ?>"/>
-    <input type="hidden" name="SECURETOKENID" value="<?php /* @escapeNotVerified */ echo $block->getSecureTokenId(); ?>"/>
-    <input type="hidden" name="MODE" value="<?php /* @escapeNotVerified */ echo $block->isTestMode() ? 'TEST' : 'LIVE'; ?>"/>
+<form id="token_form" method="GET" action="<?php echo $block->escapeUrl($block->getTransactionUrl()); ?>">
+    <input type="hidden" name="SECURETOKEN" value="<?php echo $block->escapeHtml($block->getSecureToken()); ?>"/>
+    <input type="hidden" name="SECURETOKENID" value="<?php echo $block->escapeHtml($block->getSecureTokenId()); ?>"/>
+    <input type="hidden" name="MODE" value="<?php /* @noEscape */ echo $block->isTestMode() ? 'TEST' : 'LIVE'; ?>"/>
 </form>
 <script>
     document.getElementById('token_form').submit();
diff --git a/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/info.phtml b/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/info.phtml
index 9d1ca69c34cb600f889665ed757550b62200827d..a11a3786c2c2d9f40e13dddb8b5546c6d546016c 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/info.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/payflowadvanced/info.phtml
@@ -5,11 +5,13 @@
  */
 
 // @codingStandardsIgnoreFile
-
 /**
- * @var $block \Magento\Paypal\Block\Payflow\Advanced\Form
+ * @var \Magento\Paypal\Block\Payflow\Advanced\Form $block
  */
 ?>
-<fieldset id="payment_form_<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>" style="display:none" class="fieldset payflowadvanced items redirect">
-    <div><?php /* @escapeNotVerified */ echo __('You will be required to enter your payment details after you place an order.') ?></div>
+<fieldset id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>" style="display:none"
+          class="fieldset payflowadvanced items redirect">
+    <div>
+        <?php echo $block->escapeHtml(__('You will be required to enter your payment details after you place an order.')); ?>
+    </div>
 </fieldset>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/form.phtml b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/form.phtml
index cf8431c60bcd9430ac9d9557e699caaba60a9a0e..f4f882e1835f3f0c7920fa0819e7ed9e35aff3cd 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/form.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/form.phtml
@@ -4,9 +4,10 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
+
 
 /**
+ * @var \Magento\Paypal\Block\Payflow\Link\Iframe $block
  * @see \Magento\Paypal\Block\Payflow\Link\Iframe
  */
 ?>
@@ -14,10 +15,10 @@
 <head>
 </head>
 <body>
-<form id="token_form" method="GET" action="<?php /* @escapeNotVerified */ echo $block->getTransactionUrl()?>">
-    <input type="hidden" name="SECURETOKEN" value="<?php /* @escapeNotVerified */ echo $block->getSecureToken(); ?>"/>
-    <input type="hidden" name="SECURETOKENID" value="<?php /* @escapeNotVerified */ echo $block->getSecureTokenId(); ?>"/>
-    <input type="hidden" name="MODE" value="<?php /* @escapeNotVerified */ echo $block->isTestMode() ? 'TEST' : 'LIVE'; ?>"/>
+<form id="token_form" method="GET" action="<?php echo $block->escapeUrl($block->getTransactionUrl()); ?>">
+    <input type="hidden" name="SECURETOKEN" value="<?php echo $block->escapeHtml($block->getSecureToken()); ?>"/>
+    <input type="hidden" name="SECURETOKENID" value="<?php echo $block->escapeHtml($block->getSecureTokenId()); ?>"/>
+    <input type="hidden" name="MODE" value="<?php /* @noEscape */ echo $block->isTestMode() ? 'TEST' : 'LIVE'; ?>"/>
 </form>
 <script>
     document.getElementById('token_form').submit();
diff --git a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/info.phtml b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/info.phtml
index 74b5a1c7099173b1fce1770340e25ab58342f122..629141539e2aacd9865c42e85ec04396fc77a999 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/info.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/info.phtml
@@ -4,12 +4,11 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
-
 /**
- * @var $block \Magento\Paypal\Block\Payflow\Link\Form
+ * @var \Magento\Paypal\Block\Payflow\Link\Form $block
  */
 ?>
-<div class="payflowlink items" id="payment_form_<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>" style="display:none">
-    <?php /* @escapeNotVerified */ echo __('You will be required to enter your payment details after you place an order.') ?>
+<div class="payflowlink items" id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>"
+     style="display:none">
+    <?php echo $block->escapeHtml(__('You will be required to enter your payment details after you place an order.'));?>
 </div>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/redirect.phtml b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/redirect.phtml
index ee6a1b4ba5d5fd1202d43243853865e1c808fb08..1c0981a023ada3c451a51a4b53628ad93b433a8c 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/payflowlink/redirect.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/payflowlink/redirect.phtml
@@ -4,10 +4,10 @@
  * See COPYING.txt for license details.
  */
 
-// @codingStandardsIgnoreFile
+
 
 /**
- * @var $block \Magento\Paypal\Block\Payflow\Link\Iframe
+ * @var \Magento\Paypal\Block\Payflow\Link\Iframe $block
  */
 ?>
 <html>
@@ -29,13 +29,13 @@
             }
         }
 
-        var cartUrl = '<?php /* @escapeNotVerified */ echo $block->getUrl('checkout/cart') ?>',
-            successUrl = '<?php /* @escapeNotVerified */ echo $block->getUrl('checkout/onepage/success') ?>',
-            goToSuccessPage = '<?php /* @escapeNotVerified */ echo $block->getGotoSuccessPage() ?>',
+        var cartUrl = '<?php echo $block->escapeUrl($block->getUrl('checkout/cart')); ?>',
+            successUrl = '<?php echo $block->escapeUrl($block->getUrl('checkout/onepage/success')); ?>',
+            goToSuccessPage = '<?php echo $block->escapeUrl($block->getGotoSuccessPage()); ?>',
             require = window.top.require,
             windowContext = window,
             errorMessage = {
-                message: '<?php /* @escapeNotVerified */ echo $block->getErrorMsg() ?>'
+                message: '<?php echo $block->escapeHtml($block->getErrorMsg()); ?>'
             };
 
         if(typeof(require) == "undefined") {
diff --git a/app/code/Magento/Paypal/view/frontend/templates/payment/form/billing/agreement.phtml b/app/code/Magento/Paypal/view/frontend/templates/payment/form/billing/agreement.phtml
index 9e13c69f0d7be28c11acc870a5f3c02ad6bb07be..834a623d65b3f0b59a37ae59e2cab5e67e3e0695 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/payment/form/billing/agreement.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/payment/form/billing/agreement.phtml
@@ -5,18 +5,24 @@
  */
 
 // @codingStandardsIgnoreFile
-
+/**
+ * @var \Magento\Paypal\Block\Payment\Form\Billing\Agreement $block
+ */
+$code = $block->getMethodCode();
 ?>
-<?php /* @var $block \Magento\Paypal\Block\Payment\Form\Billing\Agreement */?>
-<?php $_code = $block->getMethodCode() ?>
-<div class="field items required" id="payment_form_<?php /* @escapeNotVerified */ echo $_code ?>" style="display:none;">
-    <label for="<?php /* @escapeNotVerified */ echo $_code ?>_ba_agreement_id" class="label"><span><?php /* @escapeNotVerified */ echo __('Billing Agreement') ?></span></label>
+<div class="field items required" id="payment_form_<?php /* @noEscape */ echo $code; ?>" style="display:none;">
+    <label for="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id" class="label">
+        <span><?php echo $block->escapeHtml(__('Billing Agreement')); ?></span>
+    </label>
     <div class="control">
-        <select id="<?php /* @escapeNotVerified */ echo $_code ?>_ba_agreement_id" name="payment[<?php /* @escapeNotVerified */ echo $block->getTransportName(); ?>]" class="select">
-            <option value=""><?php /* @escapeNotVerified */ echo __('-- Please Select Billing Agreement--') ?></option>
-        <?php foreach ($block->getBillingAgreements() as $id => $referenceId): ?>
-            <option value="<?php /* @escapeNotVerified */ echo $id ?>"><?php echo $block->escapeHtml($referenceId) ?></option>
-        <?php endforeach ?>
+        <select id="<?php /* @noEscape */ echo $code; ?>_ba_agreement_id"
+                name="payment[<?php echo $block->escapeHtml($block->getTransportName()); ?>]" class="select">
+            <option value=""><?php echo $block->escapeHtml(__('-- Please Select Billing Agreement--')); ?></option>
+            <?php foreach ($block->getBillingAgreements() as $id => $referenceId): ?>
+                <option value="<?php echo $block->escapeHtml($id); ?>">
+                    <?php echo $block->escapeHtml($referenceId); ?>
+                </option>
+            <?php endforeach; ?>
         </select>
     </div>
 </div>
diff --git a/app/code/Magento/Paypal/view/frontend/templates/payment/mark.phtml b/app/code/Magento/Paypal/view/frontend/templates/payment/mark.phtml
index e6d1eda536e21235aa86571acb29e4753244ead6..89134f7a171b9a860ac8415c452c1ff4c5b388f2 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/payment/mark.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/payment/mark.phtml
@@ -5,24 +5,28 @@
  */
 
 // @codingStandardsIgnoreFile
-
-?>
-<?php
 /**
  * Note: This mark is a requirement of PayPal
+ * @var \Magento\Paypal\Block\Express\Form $block
  * @see \Magento\Paypal\Block\Express\Form
  */
+$url = $block->escapeUrl($block->getPaymentAcceptanceMarkHref());
 ?>
 <!-- PayPal Logo -->
-<img src="<?php echo $block->escapeHtml($block->getPaymentAcceptanceMarkSrc()) ?>"
-     alt="<?php /* @escapeNotVerified */ echo __('Acceptance Mark') ?>" class="paypal icon"/>
-<a href="<?php /* @escapeNotVerified */ echo $block->getPaymentAcceptanceMarkHref() ?>"
-   onclick="javascript:window.open('<?php /* @escapeNotVerified */ echo $block->getPaymentAcceptanceMarkHref() ?>','olcwhatispaypal','toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,left=0, top=0, width=400, height=350'); return false;"
+<img src="<?php echo $block->escapeUrl($block->getPaymentAcceptanceMarkSrc()) ?>"
+     alt="<?php echo $block->escapeHtml(__('Acceptance Mark')); ?>" class="paypal icon"/>
+<a href="<?php /* @noEscape */ echo $url; ?>"
+   onclick="javascript:window.open(
+           '<?php /* @noEscape */ echo $url; ?>',
+           'olcwhatispaypal',
+           'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=yes, ,' +
+           'left=0, top=0, width=400, height=350'
+       ); return false;"
    class="action paypal about">
     <?php if ($block->getPaymentWhatIs()) {
-    /* @escapeNotVerified */ echo __($block->getPaymentWhatIs());
+        echo $block->escapeHtml(__($block->getPaymentWhatIs()));
 } else {
-    /* @escapeNotVerified */ echo __('What is PayPal?');
+        echo $block->escapeHtml(__('What is PayPal?'));
 } ?>
 </a>
 <!-- PayPal Logo -->
diff --git a/app/code/Magento/Paypal/view/frontend/templates/payment/redirect.phtml b/app/code/Magento/Paypal/view/frontend/templates/payment/redirect.phtml
index 32879e4575f322ad9b07d7e2b4375662b4e39d6a..5397d9aba46151905be8f46ee6da030f2567c5eb 100644
--- a/app/code/Magento/Paypal/view/frontend/templates/payment/redirect.phtml
+++ b/app/code/Magento/Paypal/view/frontend/templates/payment/redirect.phtml
@@ -5,20 +5,23 @@
  */
 
 // @codingStandardsIgnoreFile
-
-?>
-<?php
 /**
+ * @var \Magento\PayPal\Block\Express\Form $block
  * @see \Magento\PayPal\Block\Express\Form
  */
+$code = $block->escapeHtml($block->getBillingAgreementCode());
 ?>
-<fieldset class="fieldset paypal items redirect" id="payment_form_<?php /* @escapeNotVerified */ echo $block->getMethodCode() ?>" style="display:none;">
-    <div><?php /* @escapeNotVerified */ echo $block->getRedirectMessage(); ?></div>
-    <?php $code = $block->getBillingAgreementCode(); ?>
+<fieldset class="fieldset paypal items redirect" style="display:none;"
+          id="payment_form_<?php /* @noEscape */ echo $block->getMethodCode(); ?>">
+    <div><?php echo $block->escapeHtml($block->getRedirectMessage()); ?></div>
+    <?php  ?>
     <?php if ($code): ?>
-        <input type="checkbox" id="<?php /* @escapeNotVerified */ echo $code ?>" value="1" name="payment[<?php /* @escapeNotVerified */ echo $code ?>]" class="checkbox">
-        <label for="<?php /* @escapeNotVerified */ echo $code ?>" class="label">
-            <span><?php /* @escapeNotVerified */ echo __('Sign a billing agreement to streamline further purchases with PayPal.') ?></span>
+        <input type="checkbox" id="<?php /* @noEscape */ echo $code; ?>" value="1" class="checkbox"
+               name="payment[<?php /* @noEscape */ echo $code; ?>]">
+        <label for="<?php /* @noEscape */ echo $code; ?>" class="label">
+            <span>
+                <?php echo $block->escapeHtml(__('Sign a billing agreement to streamline further purchases  with PayPal.')); ?>
+            </span>
         </label>
     <?php endif; ?>
 </fieldset>
diff --git a/app/code/Magento/Paypal/view/frontend/web/js/action/set-payment-method.js b/app/code/Magento/Paypal/view/frontend/web/js/action/set-payment-method.js
index c85e58c0de76161888668680a4d815ffb4b074d4..cbed6ff2060c1543d33d9f6cf8e9661cda5e35f3 100644
--- a/app/code/Magento/Paypal/view/frontend/web/js/action/set-payment-method.js
+++ b/app/code/Magento/Paypal/view/frontend/web/js/action/set-payment-method.js
@@ -39,8 +39,9 @@ define(
                 };
             }
             fullScreenLoader.startLoader();
+
             return storage.put(
-                serviceUrl, JSON.stringify(payload), false
+                serviceUrl, JSON.stringify(payload)
             ).done(
                 function () {
                     $.mage.redirect(window.checkoutConfig.payment.paypalExpress.redirectUrl[quote.paymentMethod().method]);
diff --git a/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js b/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js
index bd0111de817d5c680de491e0a50b5aafbb5f472b..bc474987c897f42f28e40d6a651d68ce6009869d 100644
--- a/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js
+++ b/app/code/Magento/Paypal/view/frontend/web/js/paypal-checkout.js
@@ -5,9 +5,10 @@
 /*jshint browser:true jquery:true*/
 define([
     'jquery',
+    'Magento_Ui/js/modal/confirm',
     'jquery/ui',
     'mage/mage'
-], function ($) {
+], function ($, confirm) {
     'use strict';
 
     $.widget('mage.paypalCheckout', {
@@ -18,26 +19,43 @@ define([
         _create: function () {
             this.element.on('click', '[data-action="checkout-form-submit"]', $.proxy(function (e) {
                 var returnUrl = $(e.target).data('checkout-url'),
-                    form;
+                    self = this;
 
                 e.preventDefault();
 
                 if (this.options.confirmUrl && this.options.confirmMessage) {
-                    if (window.confirm(this.options.confirmMessage)) {
-                        returnUrl = this.options.confirmUrl;
-                    }
+                    confirm({
+                        content: this.options.confirmMessage,
+                        actions: {
+                            confirm: function() {
+                                returnUrl = self.options.confirmUrl;
+                                self._redirect(returnUrl);
+                            },
+                            cancel: function() {
+                                self.redirect(returnUrl);
+                            }
+                        }
+                    });
+
+                    return false;
                 }
 
-                if (this.options.isCatalogProduct) {
-                    // find the form from which the button was clicked
-                    form = $(this.options.shortcutContainerClass).closest('form');
+                this._redirect(returnUrl);
 
-                    $(form).find(this.options.paypalCheckoutSelector).val(returnUrl);
-                    $(form).submit();
-                } else {
-                    $.mage.redirect(returnUrl);
-                }
             }, this));
+        },
+        _redirect: function(returnUrl) {
+            var form;
+
+            if (this.options.isCatalogProduct) {
+                // find the form from which the button was clicked
+                form = $(this.options.shortcutContainerClass).closest('form');
+
+                $(form).find(this.options.paypalCheckoutSelector).val(returnUrl);
+                $(form).submit();
+            } else {
+                $.mage.redirect(returnUrl);
+            }
         }
     });
 
diff --git a/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/payflowpro-method.js b/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/payflowpro-method.js
index 6c4f4da1a8b75c06ecd136bfb5774491e5e4f75d..f0095877bbc9cb3a3831de67668c3234a287ec75 100644
--- a/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/payflowpro-method.js
+++ b/app/code/Magento/Paypal/view/frontend/web/js/view/payment/method-renderer/payflowpro-method.js
@@ -8,9 +8,10 @@ define(
         'jquery',
         'Magento_Payment/js/view/payment/iframe',
         'Magento_Checkout/js/model/payment/additional-validators',
-        'Magento_Checkout/js/action/set-payment-information'
+        'Magento_Checkout/js/action/set-payment-information',
+        'Magento_Checkout/js/model/full-screen-loader'
     ],
-    function ($, Component, additionalValidators, setPaymentInformationAction) {
+    function ($, Component, additionalValidators, setPaymentInformationAction, fullScreenLoader) {
         'use strict';
 
         return Component.extend({
@@ -44,13 +45,23 @@ define(
                 return true;
             },
 
-            placeOrder: function() {
+            /**
+             * @override
+             */
+            placeOrder: function () {
                 var self = this;
+
                 if (this.validateHandler() && additionalValidators.validate()) {
+                    fullScreenLoader.startLoader();
                     this.isPlaceOrderActionAllowed(false);
-                    $.when(setPaymentInformationAction(this.messageContainer, {'method': self.getCode()})).done(function() {
-                        self.placeOrderHandler();
-                    }).fail(function() {
+                    $.when(setPaymentInformationAction(this.messageContainer, {
+                        'method': self.getCode()
+                    })).done(function () {
+                        self.placeOrderHandler().fail(function () {
+                            fullScreenLoader.stopLoader();
+                        });
+                    }).fail(function () {
+                        fullScreenLoader.stopLoader();
                         self.isPlaceOrderActionAllowed(true);
                     });
                 }
diff --git a/app/code/Magento/Paypal/view/frontend/web/order-review.js b/app/code/Magento/Paypal/view/frontend/web/order-review.js
index 56514f9164c8f8acb9db20d12f4f97ca7fda6efc..b1a072d8e98e87815de24ac306f4673e8fec7c38 100644
--- a/app/code/Magento/Paypal/view/frontend/web/order-review.js
+++ b/app/code/Magento/Paypal/view/frontend/web/order-review.js
@@ -6,11 +6,12 @@
 /*global alert*/
 define([
     "jquery",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "mage/translate",
     "mage/mage",
     "mage/validation"
-], function($){
+], function($, alert){
     "use strict";
 
     $.widget('mage.orderReview', {
@@ -129,7 +130,9 @@ define([
                                     msg = msg.join("\n");
                                 }
                             }
-                            alert($.mage.__(msg));
+                            alert({
+                                content: $.mage.__(msg)
+                            });
                             return false;
                         }
                         if (response.redirect) {
@@ -141,11 +144,15 @@ define([
                             return false;
                         }
                         this._ajaxComplete();
-                        alert($.mage.__('Sorry, something went wrong.'));
+                        alert({
+                            content: $.mage.__('Sorry, something went wrong.')
+                        });
                     }
                 },
                 error: function () {
-                    alert($.mage.__('Sorry, something went wrong. Please try again later.'));
+                    alert({
+                        content: $.mage.__('Sorry, something went wrong. Please try again later.')
+                    });
                     this._ajaxComplete();
                 }
             });
diff --git a/app/code/Magento/Persistent/Model/Resource/Session.php b/app/code/Magento/Persistent/Model/ResourceModel/Session.php
similarity index 92%
rename from app/code/Magento/Persistent/Model/Resource/Session.php
rename to app/code/Magento/Persistent/Model/ResourceModel/Session.php
index 4f38a21210c829ab7f6c1d5d834a0823d517e839..a858573f4f79d2754e9134e1eadecbcd8ad1f278 100644
--- a/app/code/Magento/Persistent/Model/Resource/Session.php
+++ b/app/code/Magento/Persistent/Model/ResourceModel/Session.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Persistent\Model\Resource;
+namespace Magento\Persistent\Model\ResourceModel;
 
 /**
  * Persistent Session Resource Model
  */
-class Session extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Session extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Use is object new method for object saving
@@ -27,12 +27,12 @@ class Session extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Persistent\Model\SessionFactory $sessionFactory
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Persistent\Model\SessionFactory $sessionFactory,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Persistent/Model/Session.php b/app/code/Magento/Persistent/Model/Session.php
index 22fdd1cd53ea40b52f0c3c5e804fc0ffe35c05e8..70c4faaa3dd31460c2c904f9c7582dd24ed0e57d 100644
--- a/app/code/Magento/Persistent/Model/Session.php
+++ b/app/code/Magento/Persistent/Model/Session.php
@@ -107,7 +107,7 @@ class Session extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Math\Random $mathRandom
      * @param \Magento\Framework\Session\Config\ConfigInterface $sessionConfig
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -123,7 +123,7 @@ class Session extends \Magento\Framework\Model\AbstractModel
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Math\Random $mathRandom,
         \Magento\Framework\Session\Config\ConfigInterface $sessionConfig,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -146,7 +146,7 @@ class Session extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Persistent\Model\Resource\Session');
+        $this->_init('Magento\Persistent\Model\ResourceModel\Session');
     }
 
     /**
diff --git a/app/code/Magento/Persistent/Observer/ClearExpiredCronJobObserver.php b/app/code/Magento/Persistent/Observer/ClearExpiredCronJobObserver.php
index 89827eb7cdf8a1694856226daaa7f8eb7d914d2e..bfd8f7ff73c0022d96db22ff0bd8b6e181b47256 100644
--- a/app/code/Magento/Persistent/Observer/ClearExpiredCronJobObserver.php
+++ b/app/code/Magento/Persistent/Observer/ClearExpiredCronJobObserver.php
@@ -13,7 +13,7 @@ class ClearExpiredCronJobObserver
     /**
      * Website collection factory
      *
-     * @var \Magento\Store\Model\Resource\Website\CollectionFactory
+     * @var \Magento\Store\Model\ResourceModel\Website\CollectionFactory
      */
     protected $_websiteCollectionFactory;
 
@@ -25,11 +25,11 @@ class ClearExpiredCronJobObserver
     protected $_sessionFactory;
 
     /**
-     * @param \Magento\Store\Model\Resource\Website\CollectionFactory $websiteCollectionFactory
+     * @param \Magento\Store\Model\ResourceModel\Website\CollectionFactory $websiteCollectionFactory
      * @param \Magento\Persistent\Model\SessionFactory $sessionFactory
      */
     public function __construct(
-        \Magento\Store\Model\Resource\Website\CollectionFactory $websiteCollectionFactory,
+        \Magento\Store\Model\ResourceModel\Website\CollectionFactory $websiteCollectionFactory,
         \Magento\Persistent\Model\SessionFactory $sessionFactory
     ) {
         $this->_websiteCollectionFactory = $websiteCollectionFactory;
diff --git a/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php b/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php
index 604de5e71376620067f3473d6ee110bdcb376e8d..c177a912bc2b748485d4bf1e9845b7e9d74b2030 100644
--- a/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php
+++ b/app/code/Magento/Persistent/Test/Unit/Model/SessionTest.php
@@ -38,7 +38,7 @@ class SessionTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Persistent/Test/Unit/Observer/ClearExpiredCronJobObserverTest.php b/app/code/Magento/Persistent/Test/Unit/Observer/ClearExpiredCronJobObserverTest.php
index 10762696377bbcd41ad4b40efe62fcc51ba941e0..2be6ccf3c87afc772e68134a5b290d2c5e6ff650 100644
--- a/app/code/Magento/Persistent/Test/Unit/Observer/ClearExpiredCronJobObserverTest.php
+++ b/app/code/Magento/Persistent/Test/Unit/Observer/ClearExpiredCronJobObserverTest.php
@@ -42,7 +42,7 @@ class ClearExpiredCronJobObserverTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->collectionFactoryMock =
-            $this->getMock('Magento\Store\Model\Resource\Website\CollectionFactory', ['create'], [], '', false);
+            $this->getMock('Magento\Store\Model\ResourceModel\Website\CollectionFactory', ['create'], [], '', false);
         $this->sessionFactoryMock = $this->getMock(
             'Magento\Persistent\Model\SessionFactory',
             ['create'],
@@ -53,7 +53,7 @@ class ClearExpiredCronJobObserverTest extends \PHPUnit_Framework_TestCase
         $this->scheduleMock = $this->getMock('\Magento\Cron\Model\Schedule', [], [], '', false);
         $this->sessionMock = $this->getMock('\Magento\Persistent\Model\Session', [], [], '', false);
         $this->websiteCollectionMock
-            = $this->getMock('\Magento\Store\Model\Resource\Website\Collection', [], [], '', false);
+            = $this->getMock('\Magento\Store\Model\ResourceModel\Website\Collection', [], [], '', false);
 
         $this->model = new \Magento\Persistent\Observer\ClearExpiredCronJobObserver(
             $this->collectionFactoryMock,
diff --git a/app/code/Magento/Persistent/etc/frontend/events.xml b/app/code/Magento/Persistent/etc/frontend/events.xml
index 2da8dbc820e37bffca15518224386c8d0f7fbbe0..eb7cc51d9065d43ab745331096e89d6d9262f03d 100644
--- a/app/code/Magento/Persistent/etc/frontend/events.xml
+++ b/app/code/Magento/Persistent/etc/frontend/events.xml
@@ -7,62 +7,62 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="customer_data_object_login">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver" />
     </event>
     <event name="customer_logout">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLogoutObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLogoutObserver" />
     </event>
     <event name="controller_front_send_response_after">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentInfoObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentInfoObserver" />
     </event>
     <event name="controller_action_predispatch_customer_account_loginPost">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeCheckedStatusObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeCheckedStatusObserver" />
     </event>
     <event name="controller_action_predispatch_customer_ajax_login">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeStatusForAjaxLoginObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeStatusForAjaxLoginObserver" />
     </event>
     <event name="controller_action_predispatch_customer_account_createpost">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeCheckedStatusObserver" method="execute" />
-        <observer name="persistent_authenticate" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeCheckedStatusObserver" />
+        <observer name="persistent_authenticate" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" />
     </event>
     <event name="controller_action_postdispatch_checkout_onepage_saveBilling">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeCheckedStatusObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SetRememberMeCheckedStatusObserver" />
     </event>
     <event name="layout_generate_blocks_after">
-        <observer name="persistent" instance="Magento\Persistent\Observer\ApplyPersistentDataObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\ApplyPersistentDataObserver" />
     </event>
     <event name="controller_action_predispatch">
-        <observer name="persistent" instance="Magento\Persistent\Observer\EmulateQuoteObserver" method="execute" />
-        <observer name="persistent_session" instance="Magento\Persistent\Observer\RenewCookieObserver" method="execute" />
-        <observer name="persistent_quote" instance="Magento\Persistent\Observer\CheckExpirePersistentQuoteObserver" method="execute" />
-        <observer name="persistent_customer" instance="Magento\Persistent\Observer\EmulateCustomerObserver" method="execute" />
-        <observer name="persistent_checkout" instance="Magento\Persistent\Observer\PreventExpressCheckoutObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\EmulateQuoteObserver" />
+        <observer name="persistent_session" instance="Magento\Persistent\Observer\RenewCookieObserver" />
+        <observer name="persistent_quote" instance="Magento\Persistent\Observer\CheckExpirePersistentQuoteObserver" />
+        <observer name="persistent_customer" instance="Magento\Persistent\Observer\EmulateCustomerObserver" />
+        <observer name="persistent_checkout" instance="Magento\Persistent\Observer\PreventExpressCheckoutObserver" />
     </event>
     <event name="checkout_allow_guest">
-        <observer name="persistent" instance="Magento\Persistent\Observer\DisableGuestCheckoutObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\DisableGuestCheckoutObserver" />
     </event>
     <event name="customer_customer_authenticated">
-        <observer name="persistent" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" />
     </event>
     <event name="controller_action_predispatch_persistent_index_unsetCookie">
-        <observer name="persistent" instance="Magento\Persistent\Observer\PreventClearCheckoutSessionObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\PreventClearCheckoutSessionObserver" />
     </event>
     <event name="controller_action_postdispatch_persistent_index_unsetCookie">
-        <observer name="persistent" instance="Magento\Persistent\Observer\MakePersistentQuoteGuestObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\MakePersistentQuoteGuestObserver" />
     </event>
     <event name="sales_quote_save_before">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SetQuotePersistentDataObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SetQuotePersistentDataObserver" />
     </event>
     <event name="custom_quote_process">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SetLoadPersistentQuoteObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SetLoadPersistentQuoteObserver" />
     </event>
     <event name="customer_register_success">
-        <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieObserver" />
     </event>
     <event name="render_block">
-        <observer name="persistent" instance="Magento\Persistent\Observer\ApplyBlockPersistentDataObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\ApplyBlockPersistentDataObserver" />
     </event>
     <event name="update_customer_cookies">
-        <observer name="persistent" instance="Magento\Persistent\Observer\UpdateCustomerCookiesObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\UpdateCustomerCookiesObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Persistent/etc/webapi_rest/events.xml b/app/code/Magento/Persistent/etc/webapi_rest/events.xml
index c11bdcb0faa3666e01a7ef27eec16d296cce6eb6..2c2205ae49eddf51f38842037f84271b06574c65 100644
--- a/app/code/Magento/Persistent/etc/webapi_rest/events.xml
+++ b/app/code/Magento/Persistent/etc/webapi_rest/events.xml
@@ -7,33 +7,33 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="customer_data_object_login">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver" />
     </event>
     <event name="customer_logout">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLogoutObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLogoutObserver" />
     </event>
     <event name="layout_generate_blocks_after">
-        <observer name="persistent" instance="Magento\Persistent\Observer\ApplyPersistentDataObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\ApplyPersistentDataObserver" />
     </event>
     <event name="checkout_allow_guest">
-        <observer name="persistent" instance="Magento\Persistent\Observer\DisableGuestCheckoutObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\DisableGuestCheckoutObserver" />
     </event>
     <event name="customer_customer_authenticated">
-        <observer name="persistent" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" />
     </event>
     <event name="sales_quote_save_before">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SetQuotePersistentDataObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SetQuotePersistentDataObserver" />
     </event>
     <event name="custom_quote_process">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SetLoadPersistentQuoteObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SetLoadPersistentQuoteObserver" />
     </event>
     <event name="customer_register_success">
-        <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieObserver" />
     </event>
     <event name="render_block">
-        <observer name="persistent" instance="Magento\Persistent\Observer\ApplyBlockPersistentDataObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\ApplyBlockPersistentDataObserver" />
     </event>
     <event name="update_customer_cookies">
-        <observer name="persistent" instance="Magento\Persistent\Observer\UpdateCustomerCookiesObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\UpdateCustomerCookiesObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Persistent/etc/webapi_soap/events.xml b/app/code/Magento/Persistent/etc/webapi_soap/events.xml
index c11bdcb0faa3666e01a7ef27eec16d296cce6eb6..2c2205ae49eddf51f38842037f84271b06574c65 100644
--- a/app/code/Magento/Persistent/etc/webapi_soap/events.xml
+++ b/app/code/Magento/Persistent/etc/webapi_soap/events.xml
@@ -7,33 +7,33 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="customer_data_object_login">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLoginObserver" />
     </event>
     <event name="customer_logout">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLogoutObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SynchronizePersistentOnLogoutObserver" />
     </event>
     <event name="layout_generate_blocks_after">
-        <observer name="persistent" instance="Magento\Persistent\Observer\ApplyPersistentDataObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\ApplyPersistentDataObserver" />
     </event>
     <event name="checkout_allow_guest">
-        <observer name="persistent" instance="Magento\Persistent\Observer\DisableGuestCheckoutObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\DisableGuestCheckoutObserver" />
     </event>
     <event name="customer_customer_authenticated">
-        <observer name="persistent" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\CustomerAuthenticatedEventObserver" />
     </event>
     <event name="sales_quote_save_before">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SetQuotePersistentDataObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SetQuotePersistentDataObserver" />
     </event>
     <event name="custom_quote_process">
-        <observer name="persistent" instance="Magento\Persistent\Observer\SetLoadPersistentQuoteObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\SetLoadPersistentQuoteObserver" />
     </event>
     <event name="customer_register_success">
-        <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\RemovePersistentCookieObserver" />
     </event>
     <event name="render_block">
-        <observer name="persistent" instance="Magento\Persistent\Observer\ApplyBlockPersistentDataObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\ApplyBlockPersistentDataObserver" />
     </event>
     <event name="update_customer_cookies">
-        <observer name="persistent" instance="Magento\Persistent\Observer\UpdateCustomerCookiesObserver" method="execute" />
+        <observer name="persistent" instance="Magento\Persistent\Observer\UpdateCustomerCookiesObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/ProductAlert/Model/Email.php b/app/code/Magento/ProductAlert/Model/Email.php
index b9ea04d16e067f40e9f21774eedeef2051f37b57..c8f8bd6c5301436391f80e9874566b0b2087c548 100644
--- a/app/code/Magento/ProductAlert/Model/Email.php
+++ b/app/code/Magento/ProductAlert/Model/Email.php
@@ -117,7 +117,7 @@ class Email extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Customer\Helper\View $customerHelper
      * @param \Magento\Store\Model\App\Emulation $appEmulation
      * @param \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -132,7 +132,7 @@ class Email extends \Magento\Framework\Model\AbstractModel
         \Magento\Customer\Helper\View $customerHelper,
         \Magento\Store\Model\App\Emulation $appEmulation,
         \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/ProductAlert/Model/Observer.php b/app/code/Magento/ProductAlert/Model/Observer.php
index 20753356671c3bd0d85e51822595b575e2488999..6cc1f7b46d6e6b1ffc011028e40fb5b16aa13bfe 100644
--- a/app/code/Magento/ProductAlert/Model/Observer.php
+++ b/app/code/Magento/ProductAlert/Model/Observer.php
@@ -74,7 +74,7 @@ class Observer
     protected $_storeManager;
 
     /**
-     * @var \Magento\ProductAlert\Model\Resource\Price\CollectionFactory
+     * @var \Magento\ProductAlert\Model\ResourceModel\Price\CollectionFactory
      */
     protected $_priceColFactory;
 
@@ -94,7 +94,7 @@ class Observer
     protected $_dateFactory;
 
     /**
-     * @var \Magento\ProductAlert\Model\Resource\Stock\CollectionFactory
+     * @var \Magento\ProductAlert\Model\ResourceModel\Stock\CollectionFactory
      */
     protected $_stockColFactory;
 
@@ -117,11 +117,11 @@ class Observer
      * @param \Magento\Catalog\Helper\Data $catalogData
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\ProductAlert\Model\Resource\Price\CollectionFactory $priceColFactory
+     * @param \Magento\ProductAlert\Model\ResourceModel\Price\CollectionFactory $priceColFactory
      * @param \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
      * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory
-     * @param \Magento\ProductAlert\Model\Resource\Stock\CollectionFactory $stockColFactory
+     * @param \Magento\ProductAlert\Model\ResourceModel\Stock\CollectionFactory $stockColFactory
      * @param \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder
      * @param \Magento\ProductAlert\Model\EmailFactory $emailFactory
      * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
@@ -131,11 +131,11 @@ class Observer
         \Magento\Catalog\Helper\Data $catalogData,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\ProductAlert\Model\Resource\Price\CollectionFactory $priceColFactory,
+        \Magento\ProductAlert\Model\ResourceModel\Price\CollectionFactory $priceColFactory,
         \Magento\Customer\Api\CustomerRepositoryInterface $customerRepository,
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
         \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory,
-        \Magento\ProductAlert\Model\Resource\Stock\CollectionFactory $stockColFactory,
+        \Magento\ProductAlert\Model\ResourceModel\Stock\CollectionFactory $stockColFactory,
         \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder,
         \Magento\ProductAlert\Model\EmailFactory $emailFactory,
         \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
diff --git a/app/code/Magento/ProductAlert/Model/Price.php b/app/code/Magento/ProductAlert/Model/Price.php
index c5a029032532ee7aff7ef6d38aa326c3f43e4e3c..2d6e3535d7004e9f82767db103e6b72e7e696ee9 100644
--- a/app/code/Magento/ProductAlert/Model/Price.php
+++ b/app/code/Magento/ProductAlert/Model/Price.php
@@ -5,13 +5,13 @@
  */
 namespace Magento\ProductAlert\Model;
 
-use Magento\ProductAlert\Model\Resource\Price\Customer\Collection;
+use Magento\ProductAlert\Model\ResourceModel\Price\Customer\Collection;
 
 /**
  * ProductAlert for changed price model
  *
- * @method \Magento\ProductAlert\Model\Resource\Price _getResource()
- * @method \Magento\ProductAlert\Model\Resource\Price getResource()
+ * @method \Magento\ProductAlert\Model\ResourceModel\Price _getResource()
+ * @method \Magento\ProductAlert\Model\ResourceModel\Price getResource()
  * @method int getCustomerId()
  * @method \Magento\ProductAlert\Model\Price setCustomerId(int $value)
  * @method int getProductId()
@@ -34,23 +34,23 @@ use Magento\ProductAlert\Model\Resource\Price\Customer\Collection;
 class Price extends \Magento\Framework\Model\AbstractModel
 {
     /**
-     * @var \Magento\ProductAlert\Model\Resource\Price\Customer\CollectionFactory
+     * @var \Magento\ProductAlert\Model\ResourceModel\Price\Customer\CollectionFactory
      */
     protected $_customerColFactory;
 
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\ProductAlert\Model\Resource\Price\Customer\CollectionFactory $customerColFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\ProductAlert\Model\ResourceModel\Price\Customer\CollectionFactory $customerColFactory
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\ProductAlert\Model\Resource\Price\Customer\CollectionFactory $customerColFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\ProductAlert\Model\ResourceModel\Price\Customer\CollectionFactory $customerColFactory,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -63,7 +63,7 @@ class Price extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\ProductAlert\Model\Resource\Price');
+        $this->_init('Magento\ProductAlert\Model\ResourceModel\Price');
     }
 
     /**
diff --git a/app/code/Magento/ProductAlert/Model/Resource/AbstractResource.php b/app/code/Magento/ProductAlert/Model/ResourceModel/AbstractResource.php
similarity index 96%
rename from app/code/Magento/ProductAlert/Model/Resource/AbstractResource.php
rename to app/code/Magento/ProductAlert/Model/ResourceModel/AbstractResource.php
index b857e09fb5ab8bf539423b30fc0da4d84573cd28..3d12079b84c8b9a883a1a444c2ac58009b27a976 100644
--- a/app/code/Magento/ProductAlert/Model/Resource/AbstractResource.php
+++ b/app/code/Magento/ProductAlert/Model/ResourceModel/AbstractResource.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ProductAlert\Model\Resource;
+namespace Magento\ProductAlert\Model\ResourceModel;
 
 /**
  * Product alert for back in abstract resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-abstract class AbstractResource extends \Magento\Framework\Model\Resource\Db\AbstractDb
+abstract class AbstractResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Retrieve alert row by object parameters
diff --git a/app/code/Magento/ProductAlert/Model/Resource/Price.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Price.php
similarity index 86%
rename from app/code/Magento/ProductAlert/Model/Resource/Price.php
rename to app/code/Magento/ProductAlert/Model/ResourceModel/Price.php
index 2c081cae908b7c0e09eebd395210152d2452c51f..e070ec58bfad2e59de7c00205f9f83e7459aaa25 100644
--- a/app/code/Magento/ProductAlert/Model/Resource/Price.php
+++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Price.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\ProductAlert\Model\Resource;
+namespace Magento\ProductAlert\Model\ResourceModel;
 
 /**
  * Product alert for changed price resource model
  */
-class Price extends \Magento\ProductAlert\Model\Resource\AbstractResource
+class Price extends \Magento\ProductAlert\Model\ResourceModel\AbstractResource
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime\DateTimeFactory
@@ -19,12 +19,12 @@ class Price extends \Magento\ProductAlert\Model\Resource\AbstractResource
     protected $_dateFactory;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/ProductAlert/Model/Resource/Price/Collection.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Price/Collection.php
similarity index 87%
rename from app/code/Magento/ProductAlert/Model/Resource/Price/Collection.php
rename to app/code/Magento/ProductAlert/Model/ResourceModel/Price/Collection.php
index 7c564d8a6e1c2968f6722298b4565a8e9c1ef98a..4960fda5758c2246eb0fa3d098657f223bf5ff73 100644
--- a/app/code/Magento/ProductAlert/Model/Resource/Price/Collection.php
+++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Price/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ProductAlert\Model\Resource\Price;
+namespace Magento\ProductAlert\Model\ResourceModel\Price;
 
 /**
  * Product alert for changed price collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define price collection
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\ProductAlert\Model\Price', 'Magento\ProductAlert\Model\Resource\Price');
+        $this->_init('Magento\ProductAlert\Model\Price', 'Magento\ProductAlert\Model\ResourceModel\Price');
     }
 
     /**
diff --git a/app/code/Magento/ProductAlert/Model/Resource/Price/Customer/Collection.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Price/Customer/Collection.php
similarity index 86%
rename from app/code/Magento/ProductAlert/Model/Resource/Price/Customer/Collection.php
rename to app/code/Magento/ProductAlert/Model/ResourceModel/Price/Customer/Collection.php
index 63c992b0dd8cbb6e41b9576281efd2c1bcf0b07e..52dbe215a48f10aa29c7bc045e9cf6959b20249b 100644
--- a/app/code/Magento/ProductAlert/Model/Resource/Price/Customer/Collection.php
+++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Price/Customer/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ProductAlert\Model\Resource\Price\Customer;
+namespace Magento\ProductAlert\Model\ResourceModel\Price\Customer;
 
 /**
  * ProductAlert Price Customer collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Customer\Model\Resource\Customer\Collection
+class Collection extends \Magento\Customer\Model\ResourceModel\Customer\Collection
 {
     /**
      * Join productalert price data to customer collection
diff --git a/app/code/Magento/ProductAlert/Model/Resource/Stock.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock.php
similarity index 85%
rename from app/code/Magento/ProductAlert/Model/Resource/Stock.php
rename to app/code/Magento/ProductAlert/Model/ResourceModel/Stock.php
index 58bc1f15fcc9f7b29b8dc312d33fed5fdba7a45f..bba6ee1eed2d0b0ff21acdb44f0ad9ed013e6b1a 100644
--- a/app/code/Magento/ProductAlert/Model/Resource/Stock.php
+++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\ProductAlert\Model\Resource;
+namespace Magento\ProductAlert\Model\ResourceModel;
 
 /**
  * Product alert for back in stock resource model
  */
-class Stock extends \Magento\ProductAlert\Model\Resource\AbstractResource
+class Stock extends \Magento\ProductAlert\Model\ResourceModel\AbstractResource
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime\DateTimeFactory
@@ -19,12 +19,12 @@ class Stock extends \Magento\ProductAlert\Model\Resource\AbstractResource
     protected $_dateFactory;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/ProductAlert/Model/Resource/Stock/Collection.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Collection.php
similarity index 89%
rename from app/code/Magento/ProductAlert/Model/Resource/Stock/Collection.php
rename to app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Collection.php
index f17d56decfb3a8ccf52f65d268d5172a0aa9ed0c..3a31c14a640ef817a4ac933775e18efe31745b11 100644
--- a/app/code/Magento/ProductAlert/Model/Resource/Stock/Collection.php
+++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ProductAlert\Model\Resource\Stock;
+namespace Magento\ProductAlert\Model\ResourceModel\Stock;
 
 /**
  * Product alert for back in stock collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define stock collection
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\ProductAlert\Model\Stock', 'Magento\ProductAlert\Model\Resource\Stock');
+        $this->_init('Magento\ProductAlert\Model\Stock', 'Magento\ProductAlert\Model\ResourceModel\Stock');
     }
 
     /**
diff --git a/app/code/Magento/ProductAlert/Model/Resource/Stock/Customer/Collection.php b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Customer/Collection.php
similarity index 86%
rename from app/code/Magento/ProductAlert/Model/Resource/Stock/Customer/Collection.php
rename to app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Customer/Collection.php
index fbe0a6c7cca240fb0569924203f3a3b34045d5cd..3c9593011452c318daa15aa30ab1e3a2170dd30e 100644
--- a/app/code/Magento/ProductAlert/Model/Resource/Stock/Customer/Collection.php
+++ b/app/code/Magento/ProductAlert/Model/ResourceModel/Stock/Customer/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ProductAlert\Model\Resource\Stock\Customer;
+namespace Magento\ProductAlert\Model\ResourceModel\Stock\Customer;
 
 /**
  * ProductAlert Stock Customer collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Customer\Model\Resource\Customer\Collection
+class Collection extends \Magento\Customer\Model\ResourceModel\Customer\Collection
 {
     /**
      * join productalert stock data to customer collection
diff --git a/app/code/Magento/ProductAlert/Model/Stock.php b/app/code/Magento/ProductAlert/Model/Stock.php
index 517f14e5b2201d480494de862ec15d63ed379020..54fbedf89839ed755bccd6e3b1aa53c955bdfc43 100644
--- a/app/code/Magento/ProductAlert/Model/Stock.php
+++ b/app/code/Magento/ProductAlert/Model/Stock.php
@@ -5,13 +5,13 @@
  */
 namespace Magento\ProductAlert\Model;
 
-use Magento\ProductAlert\Model\Resource\Stock\Customer\Collection;
+use Magento\ProductAlert\Model\ResourceModel\Stock\Customer\Collection;
 
 /**
  * ProductAlert for back in stock model
  *
- * @method \Magento\ProductAlert\Model\Resource\Stock _getResource()
- * @method \Magento\ProductAlert\Model\Resource\Stock getResource()
+ * @method \Magento\ProductAlert\Model\ResourceModel\Stock _getResource()
+ * @method \Magento\ProductAlert\Model\ResourceModel\Stock getResource()
  * @method int getCustomerId()
  * @method \Magento\ProductAlert\Model\Stock setCustomerId(int $value)
  * @method int getProductId()
@@ -32,23 +32,23 @@ use Magento\ProductAlert\Model\Resource\Stock\Customer\Collection;
 class Stock extends \Magento\Framework\Model\AbstractModel
 {
     /**
-     * @var \Magento\ProductAlert\Model\Resource\Stock\Customer\CollectionFactory
+     * @var \Magento\ProductAlert\Model\ResourceModel\Stock\Customer\CollectionFactory
      */
     protected $_customerColFactory;
 
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\ProductAlert\Model\Resource\Stock\Customer\CollectionFactory $customerColFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\ProductAlert\Model\ResourceModel\Stock\Customer\CollectionFactory $customerColFactory
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\ProductAlert\Model\Resource\Stock\Customer\CollectionFactory $customerColFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\ProductAlert\Model\ResourceModel\Stock\Customer\CollectionFactory $customerColFactory,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -61,7 +61,7 @@ class Stock extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\ProductAlert\Model\Resource\Stock');
+        $this->_init('Magento\ProductAlert\Model\ResourceModel\Stock');
     }
 
     /**
diff --git a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
index 6be990b549ceaed78dd80e8a6078d97167e16c5f..fbc2132db4999b1ee5993bb86656f4f43142f606 100644
--- a/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
+++ b/app/code/Magento/ProductVideo/Block/Adminhtml/Product/Edit/NewVideo.php
@@ -12,6 +12,11 @@ use Magento\Framework\Data\Form\Element\Fieldset;
  */
 class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
 {
+    /**
+     * @var \Magento\ProductVideo\Helper\Media
+     */
+    protected $mediaHelper;
+
     /**
      * @var \Magento\Framework\Json\EncoderInterface
      */
@@ -19,6 +24,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
+     * @param \Magento\ProductVideo\Helper\Media $mediaHelper
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
@@ -29,9 +35,11 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Data\FormFactory $formFactory,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
+        \Magento\ProductVideo\Helper\Media $mediaHelper,
         array $data = []
     ) {
         parent::__construct($context, $registry, $formFactory, $data);
+        $this->mediaHelper = $mediaHelper;
         $this->jsonEncoder = $jsonEncoder;
         $this->setUseContainer(true);
     }
@@ -171,6 +179,11 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
         $this->setForm($form);
     }
 
+    /**
+     * Get html id
+     *
+     * @return mixed
+     */
     public function getHtmlId()
     {
         if (null === $this->getData('id')) {
@@ -180,6 +193,8 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
     }
 
     /**
+     * Get widget options
+     *
      * @return string
      */
     public function getWidgetOptions()
@@ -189,6 +204,7 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
                 'saveVideoUrl' => $this->getUrl('catalog/product_gallery/upload'),
                 'saveRemoteVideoUrl' => $this->getUrl('product_video/product_gallery/retrieveImage'),
                 'htmlId' => $this->getHtmlId(),
+                'youTubeApiKey' => $this->mediaHelper->getYouTubeApiKey()
             ]
         );
     }
@@ -214,8 +230,9 @@ class NewVideo extends \Magento\Backend\Block\Widget\Form\Generic
      */
     protected function addMediaRoleAttributes(Fieldset $fieldset)
     {
+        $fieldset->addField('roleLabel', 'note', ['text' => __('Role')]);
         $mediaRoles = $this->getProduct()->getMediaAttributes();
-        asort($mediaRoles);
+        ksort($mediaRoles);
         foreach ($mediaRoles as $mediaRole) {
             $fieldset->addField(
                 'video_' . $mediaRole->getAttributeCode(),
diff --git a/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php b/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php
index ce93d93700a5df5dd4713c9c692a8d156e6cc412..8643a8bec34b280fca3e2976d103b849e0ba3f63 100644
--- a/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php
+++ b/app/code/Magento/ProductVideo/Block/Product/View/Gallery.php
@@ -18,11 +18,6 @@ class Gallery extends \Magento\Catalog\Block\Product\View\Gallery
      */
     protected $mediaHelper;
 
-    /**
-     * @var \Magento\Framework\Json\EncoderInterface
-     */
-    private $jsonEncoder;
-
     /**
      * @param \Magento\Catalog\Block\Product\Context $context
      * @param \Magento\Framework\Stdlib\ArrayUtils $arrayUtils
@@ -33,17 +28,17 @@ class Gallery extends \Magento\Catalog\Block\Product\View\Gallery
     public function __construct(
         \Magento\Catalog\Block\Product\Context $context,
         \Magento\Framework\Stdlib\ArrayUtils $arrayUtils,
-        \Magento\ProductVideo\Helper\Media $mediaHelper,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
+        \Magento\ProductVideo\Helper\Media $mediaHelper,
         array $data = []
     ) {
         parent::__construct(
             $context,
             $arrayUtils,
+            $jsonEncoder,
             $data
         );
         $this->mediaHelper = $mediaHelper;
-        $this->jsonEncoder = $jsonEncoder;
     }
 
     /**
diff --git a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
index 4a99e450b547682f02d43903d116c22a58aa3de7..b0cd6ca9b166f9b9101fd8324e72176ace9598b5 100644
--- a/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
+++ b/app/code/Magento/ProductVideo/Controller/Adminhtml/Product/Gallery/RetrieveImage.php
@@ -36,7 +36,7 @@ class RetrieveImage extends \Magento\Backend\App\Action
     protected $curl;
 
     /**
-     * @var \Magento\MediaStorage\Model\Resource\File\Storage\File
+     * @var \Magento\MediaStorage\Model\ResourceModel\File\Storage\File
      */
     protected $fileUtility;
 
@@ -47,7 +47,7 @@ class RetrieveImage extends \Magento\Backend\App\Action
      * @param \Magento\Framework\Filesystem $fileSystem
      * @param \Magento\Framework\Image\AdapterFactory $imageAdapterFactory
      * @param \Magento\Framework\HTTP\Adapter\Curl $curl
-     * @param \Magento\MediaStorage\Model\Resource\File\Storage\File $fileUtility
+     * @param \Magento\MediaStorage\Model\ResourceModel\File\Storage\File $fileUtility
      */
     public function __construct(
         \Magento\Backend\App\Action\Context $context,
@@ -56,7 +56,7 @@ class RetrieveImage extends \Magento\Backend\App\Action
         \Magento\Framework\Filesystem $fileSystem,
         \Magento\Framework\Image\AdapterFactory $imageAdapterFactory,
         \Magento\Framework\HTTP\Adapter\Curl $curl,
-        \Magento\MediaStorage\Model\Resource\File\Storage\File $fileUtility
+        \Magento\MediaStorage\Model\ResourceModel\File\Storage\File $fileUtility
     ) {
         parent::__construct($context);
         $this->resultRawFactory = $resultRawFactory;
diff --git a/app/code/Magento/ProductVideo/Helper/Media.php b/app/code/Magento/ProductVideo/Helper/Media.php
index 5d7abc74aedc180cdd055c6571564fcefe39a012..657c81f3aaedeac0506cdf976f216b610a318f4a 100644
--- a/app/code/Magento/ProductVideo/Helper/Media.php
+++ b/app/code/Magento/ProductVideo/Helper/Media.php
@@ -7,6 +7,7 @@
 namespace Magento\ProductVideo\Helper;
 
 use Magento\Framework\App\Area;
+use Magento\Framework\App\Helper\Context;
 use Magento\Framework\View\ConfigInterface;
 use Magento\Framework\View\DesignInterface;
 
@@ -40,6 +41,11 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper
      */
     const MEDIA_TYPE_CONFIG_NODE = 'videos';
 
+    /**
+     * Configuration path
+     */
+    const XML_PATH_YOUTUBE_API_KEY = 'catalog/product_video/youtube_api_key';
+
     /**
      * @var ConfigInterface
      */
@@ -60,11 +66,14 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper
     /**
      * @param ConfigInterface $configInterface
      * @param DesignInterface $designInterface
+     * @param Context $context
      */
     public function __construct(
         ConfigInterface $configInterface,
-        DesignInterface $designInterface
+        DesignInterface $designInterface,
+        Context $context
     ) {
+        parent::__construct($context);
         $this->viewConfig = $configInterface;
         $this->currentTheme = $designInterface->getDesignTheme();
         $this->initConfig();
@@ -139,4 +148,14 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper
             return $videoAttributes[self::NODE_CONFIG_VIDEO_AUTO_RESTART];
         }
     }
+
+    /**
+     * Retrieve YouTube API key
+     *
+     * @return string
+     */
+    public function getYouTubeApiKey()
+    {
+        return $this->scopeConfig->getValue(self::XML_PATH_YOUTUBE_API_KEY);
+    }
 }
diff --git a/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoEntryProcessor.php b/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoEntryProcessor.php
index f5b73bf4050d7a2aa34514d44e8f6bcc0b61af05..935e84de05c13970687767814346fe321f82e3d7 100644
--- a/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoEntryProcessor.php
+++ b/app/code/Magento/ProductVideo/Model/Plugin/ExternalVideoEntryProcessor.php
@@ -6,7 +6,7 @@
 
 namespace Magento\ProductVideo\Model\Plugin;
 
-use Magento\Customer\Model\Resource\Form\Attribute;
+use Magento\Customer\Model\ResourceModel\Form\Attribute;
 use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
 use Magento\Catalog\Model\Product;
 use Magento\ProductVideo\Model\Product\Attribute\Media\ExternalVideoEntryConverter;
@@ -37,15 +37,15 @@ class ExternalVideoEntryProcessor
     ];
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media
      */
     protected $resourceEntryMediaGallery;
 
     /**
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media $resourceEntryMediaGallery
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media $resourceEntryMediaGallery
      */
     public function __construct(
-        \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media $resourceEntryMediaGallery
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media $resourceEntryMediaGallery
     ) {
         $this->resourceEntryMediaGallery = $resourceEntryMediaGallery;
     }
diff --git a/app/code/Magento/ProductVideo/Model/Observer.php b/app/code/Magento/ProductVideo/Observer/ChangeTemplateObserver.php
similarity index 50%
rename from app/code/Magento/ProductVideo/Model/Observer.php
rename to app/code/Magento/ProductVideo/Observer/ChangeTemplateObserver.php
index 286b77edc914eec938e483e8e575b1797f0b2374..9e6ea919d6a0bc3ad286a77ccb7a32d3c7452e87 100644
--- a/app/code/Magento/ProductVideo/Model/Observer.php
+++ b/app/code/Magento/ProductVideo/Observer/ChangeTemplateObserver.php
@@ -4,16 +4,18 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\ProductVideo\Model;
+namespace Magento\ProductVideo\Observer;
 
+use Magento\Framework\Event\ObserverInterface;
 
-class Observer
+class ChangeTemplateObserver implements ObserverInterface
 {
     /**
      * @param mixed $observer
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      * @return void
      */
-    public function changeTemplate($observer)
+    public function execute(\Magento\Framework\Event\Observer $observer)
     {
         $observer->getBlock()->setTemplate('Magento_ProductVideo::helper/gallery.phtml');
     }
diff --git a/app/code/Magento/ProductVideo/Setup/InstallSchema.php b/app/code/Magento/ProductVideo/Setup/InstallSchema.php
index cfaa21939d4829d04dfdc96341de6d97de13cee3..cd3fbe7ee70e267392ef04c436a9665e9af5d4f9 100644
--- a/app/code/Magento/ProductVideo/Setup/InstallSchema.php
+++ b/app/code/Magento/ProductVideo/Setup/InstallSchema.php
@@ -9,7 +9,7 @@ namespace Magento\ProductVideo\Setup;
 use Magento\Framework\Setup\InstallSchemaInterface;
 use Magento\Framework\Setup\ModuleContextInterface;
 use Magento\Framework\Setup\SchemaSetupInterface;
-use Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media;
+use Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media;
 
 /**
  * Class InstallSchema adds new table `eav_attribute_option_swatch`
diff --git a/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php b/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php
index 55fe3af0f92a436b1757a96005a84a3992cd1e14..e07d3144baa89d6cdb5c93e99f18b71e32980042 100644
--- a/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php
+++ b/app/code/Magento/ProductVideo/Test/Unit/Block/Adminhtml/Product/Edit/NewVideoTest.php
@@ -86,7 +86,8 @@ class NewVideoTest extends \PHPUnit_Framework_TestCase
         $value = [
             'saveVideoUrl' => $saveVideoUrl,
             'saveRemoteVideoUrl' => $saveRemoteVideoUrl,
-            'htmlId' => 'id_' . $rand
+            'htmlId' => 'id_' . $rand,
+            'youTubeApiKey' => null
         ];
         $this->jsonEncoderMock->expects($this->once())->method('encode')->with(
             $value
diff --git a/app/code/Magento/ProductVideo/Test/Unit/Controller/Adminhtml/Product/Gallery/RetrieveImageTest.php b/app/code/Magento/ProductVideo/Test/Unit/Controller/Adminhtml/Product/Gallery/RetrieveImageTest.php
index adebb705143d28e4858e5e9d6fd85ddc235a221c..bd11bb20d4e368a15f28b35cd20394c184a409c4 100644
--- a/app/code/Magento/ProductVideo/Test/Unit/Controller/Adminhtml/Product/Gallery/RetrieveImageTest.php
+++ b/app/code/Magento/ProductVideo/Test/Unit/Controller/Adminhtml/Product/Gallery/RetrieveImageTest.php
@@ -46,7 +46,7 @@ class RetrieveImageTest extends \PHPUnit_Framework_TestCase
     protected $curlMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\MediaStorage\Model\Resource\File\Storage\File
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\MediaStorage\Model\ResourceModel\File\Storage\File
      */
     protected $storageFileMock;
 
@@ -93,7 +93,7 @@ class RetrieveImageTest extends \PHPUnit_Framework_TestCase
         $this->adapterFactoryMock->expects($this->once())->method('create')->willReturn($this->abstractAdapter);
         $this->curlMock = $this->getMock('\Magento\Framework\HTTP\Adapter\Curl', [], [], '', false);
         $this->storageFileMock =
-            $this->getMock('\Magento\MediaStorage\Model\Resource\File\Storage\File', [], [], '', false);
+            $this->getMock('\Magento\MediaStorage\Model\ResourceModel\File\Storage\File', [], [], '', false);
         $this->request = $this->getMock('\Magento\Framework\App\RequestInterface');
         $this->contextMock->expects($this->any())->method('getRequest')->will($this->returnValue($this->request));
 
diff --git a/app/code/Magento/ProductVideo/Test/Unit/Model/Plugin/ExternalVideoEntryProcessorTest.php b/app/code/Magento/ProductVideo/Test/Unit/Model/Plugin/ExternalVideoEntryProcessorTest.php
index e531cdc248c4228592dfbb7cc10c8757498f27a7..fa49f845fbce34236b4f027a23590124777ee6df 100644
--- a/app/code/Magento/ProductVideo/Test/Unit/Model/Plugin/ExternalVideoEntryProcessorTest.php
+++ b/app/code/Magento/ProductVideo/Test/Unit/Model/Plugin/ExternalVideoEntryProcessorTest.php
@@ -8,7 +8,7 @@ namespace Magento\ProductVideo\Test\Unit\Model\Plugin;
 
 class ExternalVideoEntryProcessorTest extends \PHPUnit_Framework_TestCase
 {
-    /** * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Resource\ProductFactory */
+    /** * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\ResourceModel\ProductFactory */
     protected $productFactoryMock;
 
     /** * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Product */
@@ -30,7 +30,7 @@ class ExternalVideoEntryProcessorTest extends \PHPUnit_Framework_TestCase
     protected $mediaDirectoryMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceEntryMediaGalleryMock;
 
@@ -48,7 +48,7 @@ class ExternalVideoEntryProcessorTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->productFactoryMock =
-            $this->getMock('\Magento\Catalog\Model\Resource\ProductFactory', ['create'], [], '', false);
+            $this->getMock('\Magento\Catalog\Model\ResourceModel\ProductFactory', ['create'], [], '', false);
 
         $this->productMock = $this->getMock('\Magento\Catalog\Model\Product', [], [], '', false);
 
@@ -64,7 +64,7 @@ class ExternalVideoEntryProcessorTest extends \PHPUnit_Framework_TestCase
         $this->filesystemMock->expects($this->any())->method('getDirectoryWrite')->with('media')->willReturn($write);
 
         $this->resourceEntryMediaGalleryMock =
-            $this->getMock('\Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media', [], [], '', false);
+            $this->getMock('\Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media', [], [], '', false);
 
         $this->attributeMock = $this->getMock('\Magento\Eav\Model\Entity\Attribute', [], [], '', false);
         $this->attributeMock->expects($this->any())->method('getAttributeCode')->willReturn('media_gallery');
diff --git a/app/code/Magento/ProductVideo/Test/Unit/Model/ObserverTest.php b/app/code/Magento/ProductVideo/Test/Unit/Observer/ChangeTemplateObserverTest.php
similarity index 64%
rename from app/code/Magento/ProductVideo/Test/Unit/Model/ObserverTest.php
rename to app/code/Magento/ProductVideo/Test/Unit/Observer/ChangeTemplateObserverTest.php
index c1d60d275205cb6f77f5b7ca0567c43e04357b84..8ab0900fc9d1d1b33f1a0ba0396071886f4a8426 100644
--- a/app/code/Magento/ProductVideo/Test/Unit/Model/ObserverTest.php
+++ b/app/code/Magento/ProductVideo/Test/Unit/Observer/ChangeTemplateObserverTest.php
@@ -4,10 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\ProductVideo\Test\Unit\Model;
+namespace Magento\ProductVideo\Test\Unit\Observer;
 
-
-class ObserverTest extends \PHPUnit_Framework_TestCase
+class ChangeTemplateObserverTest extends \PHPUnit_Framework_TestCase
 {
     public function testChangeTemplate()
     {
@@ -20,13 +19,13 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
          */
         $block = $this->getMock('\Magento\ProductVideo\Block\Adminhtml\Product\Edit\NewVideo', [], [], '', false);
         $block->expects($this->once())
-              ->method('setTemplate')
-              ->with('Magento_ProductVideo::helper/gallery.phtml')
-              ->willReturnSelf();
+            ->method('setTemplate')
+            ->with('Magento_ProductVideo::helper/gallery.phtml')
+            ->willReturnSelf();
         $observer->expects($this->once())->method('__call')->with('getBlock')->willReturn($block);
 
-        /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\ProductVideo\Model\Observer $model */
-        $model = $this->getMock('\Magento\ProductVideo\Model\Observer', null, [], '', false);
-        $model->changeTemplate($observer);
+        /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\ProductVideo\Observer\ChangeTemplateObserver $unit */
+        $unit = $this->getMock('Magento\ProductVideo\Observer\ChangeTemplateObserver', null, [], '', false);
+        $unit->execute($observer);
     }
 }
diff --git a/app/code/Magento/ProductVideo/etc/adminhtml/events.xml b/app/code/Magento/ProductVideo/etc/adminhtml/events.xml
index f543abe50d25df24061b7298bfab092d89643dd6..70b28eefce90e40b92f667248a7ac68f65658ed3 100644
--- a/app/code/Magento/ProductVideo/etc/adminhtml/events.xml
+++ b/app/code/Magento/ProductVideo/etc/adminhtml/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_gallery_prepare_layout">
-        <observer name="change_template" instance="Magento\ProductVideo\Model\Observer" method="changeTemplate" />
+        <observer name="change_template" instance="Magento\ProductVideo\Observer\ChangeTemplateObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/ProductVideo/etc/adminhtml/system.xml b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f475ab5b70d54cb2a671e5cf41c0b1b1116f7d4b
--- /dev/null
+++ b/app/code/Magento/ProductVideo/etc/adminhtml/system.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
+    <system>
+        <section id="catalog">
+            <group id="product_video" translate="label" type="text" sortOrder="350" showInDefault="1" showInWebsite="1" showInStore="1">
+                <label>Product Video</label>
+                <field id="youtube_api_key" translate="label" type="text" sortOrder="20" showInDefault="1" showInWebsite="1" showInStore="1">
+                    <label>YouTube API key</label>
+                </field>
+            </group>
+        </section>
+    </system>
+</config>
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/layout/catalog_product_new.xml b/app/code/Magento/ProductVideo/view/adminhtml/layout/catalog_product_new.xml
index eff4727524c00cbcde913abfb8ca5395199165e7..000134b212f98a4452f89a9efb848d9797a06486 100755
--- a/app/code/Magento/ProductVideo/view/adminhtml/layout/catalog_product_new.xml
+++ b/app/code/Magento/ProductVideo/view/adminhtml/layout/catalog_product_new.xml
@@ -7,7 +7,6 @@
 -->
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="admin-2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
     <head>
-        <css src="Magento_ProductVideo::css/productvideo.css"/>
         <link src="Magento_ProductVideo::js/get-video-information.js"/>
     </head>
     <body>
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/templates/product/edit/slideout/form.phtml b/app/code/Magento/ProductVideo/view/adminhtml/templates/product/edit/slideout/form.phtml
index 6e2418f119622fbf9f5d352bca0afea590eae6c0..50d5324fc43e6b5fadb082b61c5dceee79bed424 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/templates/product/edit/slideout/form.phtml
+++ b/app/code/Magento/ProductVideo/view/adminhtml/templates/product/edit/slideout/form.phtml
@@ -17,7 +17,7 @@
             });
         });
     </script>
-  <div id="video-player-preview-location">
+  <div id="video-player-preview-location" class="video-player-sidebar">
       <div class="video-player-container"></div>
       <div class="video-information title">
           <label><?php /* @escapeNotVerified */ echo __('Title:') ?> </label><span></span>
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/css/productvideo.css b/app/code/Magento/ProductVideo/view/adminhtml/web/css/productvideo.css
deleted file mode 100755
index e2aa3047a68925dd1d7bd50909d12024ac67abc8..0000000000000000000000000000000000000000
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/css/productvideo.css
+++ /dev/null
@@ -1,261 +0,0 @@
- /**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-.image.video-placeholder {
-    position: relative;
-    display: inline-block;
-    text-decoration: none;
-}
-
-.image.video-placeholder:before {
-    background: url(../images/gallery-sprite.png) no-repeat left bottom;
-    content: '';
-    position: absolute;
-    height: 49px;
-    width: 49px;
-    left: 50%;
-    top: 18px;
-    margin-left: -24px;
-    opacity: 0.7;
-    z-index: 1;
-}
-
-.video-placeholder .image-placeholder-text {
-    font-weight: 400;
-}
-
-.admin__field.field-video_image .admin__field-control,
-.admin__field.field-video_small_image .admin__field-control,
-.admin__field.field-video_thumbnail .admin__field-control,
-.admin__field.field-video_swatch_image .admin__field-control,
-.admin__field.field-new_video_disabled .admin__field-control {
-    width: 82px;
-    margin-left: calc((100%) * .33333333 - 30px);
-}
-
-.admin__field.field-video_image .admin__field-control input,
-.admin__field.field-video_small_image .admin__field-control input,
-.admin__field.field-video_thumbnail .admin__field-control input,
-.admin__field.field-video_swatch_image .admin__field-control input,
-.admin__field.field-new_video_disabled .admin__field-control input {
-    float: right;
-}
-
-.admin__field.field-video_image .admin__field-label,
-.admin__field.field-video_small_image .admin__field-label,
-.admin__field.field-video_thumbnail .admin__field-label,
-.admin__field.field-video_swatch_image .admin__field-label,
-.admin__field.field-new_video_disabled .admin__field-label {
-    width: 200px;
-    position: absolute;
-    margin-left: calc((100%) * .33333333 - 30px + 90px);
-    left: 0px;
-}
-
-.admin__field.field-video_image .admin__field-label:before,
-.admin__field.field-video_small_image .admin__field-label:before,
-.admin__field.field-video_thumbnail .admin__field-label:before,
-.admin__field.field-video_swatch_image .admin__field-label:before,
-.admin__field.field-new_video_disabled .admin__field-label:before {
-    content: none;
-}
-
-.admin__field.field-video_image .admin__field-label span,
-.admin__field.field-video_small_image .admin__field-label span,
-.admin__field.field-video_thumbnail .admin__field-label span,
-.admin__field.field-video_swatch_image .admin__field-label span,
-.admin__field.field-new_video_disabled .admin__field-label span {
-    float: left;
-}
-
-.admin__field.field-video_image,
-.admin__field.field-video_small_image,
-.admin__field.field-video_thumbnail,
-.admin__field.field-video_swatch_image {
-    margin-bottom: 20px !important;
-}
-
-.admin__field.field-new_video_disabled {
-    margin-top: 32px !important;
-}
-
-.admin__field.field-video_image .admin__field-control {
-    position: relative;
-}
-
-.admin__field.field-video_image .admin__field-control:after {
-    content: 'Role';
-    position: absolute;
-    color: #000;
-    width: 34px;
-    height: 20px;
-    left: 1px;
-    top: -2px;
-    font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-    font-size: 1.4rem;
-    font-weight: 600;
-}
-
-.preview_hidden_image_input_button {
-    display: none;
-}
-
-.video-item {
-    position: relative;
-}
-
-.video-item:after {
-    content: '';
-    position: absolute;
-    bottom: 0;
-    right: 0;
-    background: url(../images/gallery-sprite.png) bottom left;
-    width: 49px;
-    height: 40px;
-    z-index: 3;
-    left: 0;
-    top: 10px;
-    margin: auto;
-}
-
-.mage-new-video-dialog #new_video_form {
-    width: 65%;
-    float: left;
-}
-
-.mage-new-video-dialog #video-player-preview-location {
-    width: 34.99999%;
-    float: left;
-}
-
-.video-player-container {
-    width: 100%;
-    height: 20vw;
-    margin-bottom: 30px;
-    border: 1px solid #e3e3e3;
-    position: relative;
-}
-
-.video-player-container:after {
-    content: '';
-    position: absolute;
-    top: 0;
-    left: 0;
-    right: 0;
-    bottom: 0;
-    margin: auto;
-    width: 93px;
-    height: 60px;
-    background: url(../images/camera.png) no-repeat center;
-    z-index: 1;
-}
-
-.video-information {
-    margin-bottom: 7px;
-    display: none;
-}
-
-.video-information:after {
-    content: " "; /* Older browser do not support empty content */
-    visibility: hidden;
-    display: block;
-    height: 0;
-    clear: both;
-}
-
-.video-information label {
-    font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-    font-size: 1.4rem;
-    font-weight: 600;
-    display: block;
-    width: 25%;
-    float: left;
-    text-align: right;
-}
-
-.video-information span {
-    font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
-    font-size: 1.4rem;
-    font-weight: 300;
-    display: block;
-    width: 74.9999%;
-    float: left;
-    padding-left: 20px;
-}
-
-.product-video {
-    width: 100%;
-    z-index: 20;
-    height: 100%;
-    position: relative;
-}
-
-.image.video-placeholder > button[data-role="add-video-button"],
-.image.video-placeholder > button {
-    width: 100%;
-    height: 100%;
-    border: 0;
-    background: transparent;
-    z-index: 10;
-    position: relative;
-}
-
-.add-video-button-container {
-    float: right;
-    margin-bottom: 10px;
-}
-
-.admin__field.field.field-new_video_screenshot {
-    margin-bottom: 5px;
-}
-
-.admin__field.field.field-new_video_screenshot_preview {
-    margin-bottom: 50px;
-}
-
-.image .action-make-base:after {
-    -webkit-font-smoothing: antialiased;
-    font-size: 1.8rem;
-    line-height: inherit;
-    color: #9e9e9e;
-    content: '\e63b';
-    font-family: 'Admin Icons';
-    vertical-align: middle;
-    display: inline-block;
-    font-weight: normal;
-    overflow: hidden;
-    speak: none;
-    text-align: center;
-    position: absolute;
-    top: -7px;
-    left: -4px;
-}
-
-.image .action-make-base:hover:after {
-    color: #7d7d7d;
-}
-
-.admin__scope-old .gallery .image .action-make-base {
-    border: 0;
-    width: 0;
-    height: 0;
-    position: absolute;
-    margin: 0;
-    bottom: 9px;
-    right: 9px;
-    left: auto;
-    background: transparent;
-}
-
-.image .action-make-base span {
-    display: none;
-}
-
-.admin__scope-old .base-image .image-label {
-    display: block;
-}
-
-.image.base-image:hover .image-label {
-    display: none;
-}
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
index d692aaf4eccf6c56a26f9bbd3e0dea29a125f874..52171f1537a254ef6b19645419a8951bd0b39083 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/get-video-information.js
@@ -322,7 +322,10 @@ require([
 
         $.widget('mage.videoData', {
             options: {
-                youtubeKey: 'AIzaSyDwqDWuw1lra-LnpJL2Mr02DYuFmkuRSns' //sample data, change later!
+                youtubeKey: '',
+                noKeyErrorTxt: 'You have not entered youtube API key. ' +
+                'No information about youtube video will be retrieved.',
+                eventSource: '' //where is data going from - focus out or click on button
             },
 
             _REQUEST_VIDEO_INFORMATION_TRIGGER: 'update_video_information',
@@ -337,6 +340,11 @@ require([
              * @private
              */
             _init: function () {
+                if (!this.options.youtubeKey && this.options.eventSource === 'click') {
+                    alert({
+                        content: this.options.noKeyErrorTxt
+                    });
+                }
                 this._onRequestHandler();
             },
 
@@ -365,18 +373,58 @@ require([
                 }
 
                 /**
+                 *
+                 * @param {Object} data
                  * @private
                  */
                 function _onYouTubeLoaded(data) {
                     var tmp,
                         uploadedFormatted,
-                        respData;
+                        respData,
+                        createErrorMessage;
+
+                    /**
+                     * Create errors message
+                     *
+                     * @returns {String}
+                     */
+                    createErrorMessage = function () {
+                        var error = data.error,
+                            errors = error.errors,
+                            i,
+                            errLength = errors.length,
+                            tmpError,
+                            errReason,
+                            errorsMessage = [];
+
+                        for (i = 0; i < errLength; i++) {
+                            tmpError = errors[i];
+                            errReason = tmpError.reason;
+
+                            if (['keyInvalid'].indexOf(errReason) !== -1) {
+                                errorsMessage.push('Youtube API key is an invalid');
+
+                                break;
+                            }
 
-                    if (data.items.length < 1) {
+                            errorsMessage.push(tmpError.message);
+                        }
+
+                        return 'Video can\'t be shown by reason: ' + $.unique(errorsMessage).join(', ');
+                    };
+
+                    if (data.error && data.error.code === 400) {
+                        this._onRequestError(createErrorMessage());
+
+                        return;
+                    }
+
+                    if (!data.items || data.items.length < 1) {
                         this._onRequestError('Video not found');
 
                         return;
                     }
+
                     tmp = data.items[0];
                     uploadedFormatted = tmp.snippet.publishedAt.replace('T', ' ').replace(/\..+/g, '');
                     respData = {
@@ -429,8 +477,17 @@ require([
                     googleapisUrl = 'https://www.googleapis.com/youtube/v3/videos?id=' +
                         id +
                         '&part=snippet,contentDetails,statistics,status&key=' +
-                        this.options.youtubeKey;
-                    $.get(googleapisUrl, $.proxy(_onYouTubeLoaded, this));
+                        this.options.youtubeKey + '&alt=json&callback=?';
+                    $.getJSON(googleapisUrl,
+                        {
+                            format: 'json'
+                        },
+                        $.proxy(_onYouTubeLoaded, self)
+                    ).fail(
+                        function () {
+                            self._onRequestError('Video not found');
+                        }
+                    );
                 } else if (type === 'vimeo') {
                     $.getJSON('http://www.vimeo.com/api/v2/video/' + id + '.json?callback=?',
                         {
@@ -493,7 +550,8 @@ require([
             _validateURL: function (href, forceVideo) {
                 var id,
                     type,
-                    ampersandPosition;
+                    ampersandPosition,
+                    vimeoRegex;
 
                 if (typeof href !== 'string') {
                     return href;
@@ -518,7 +576,10 @@ require([
                     type = 'youtube';
                 } else if (href.host.match(/vimeo\.com/)) {
                     type = 'vimeo';
-                    id = href.pathname.replace(/^\/(video\/)?/, '').replace(/\/.*/, '');
+                    vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)',
+                        '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|)(\\d+)(?:$|\\/|\\?)'
+                    ].join(''));
+                    id = href.href.match(vimeoRegex)[3];
                 }
 
                 if ((!id || !type) && forceVideo) {
diff --git a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
index 980ac3a2e4ddb814ba445a8e873d12a5846e7982..e5efb668b51e946a2ae44b0ef3c629b0ed8630e8 100644
--- a/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
+++ b/app/code/Magento/ProductVideo/view/adminhtml/web/js/new-video-dialog.js
@@ -93,7 +93,7 @@ define([
                 $(this.options.metaData.DOM.uploader).html(
                     '<a href="https://youtube.com/channel/' +
                     this.options.metaData.data.uploaderUrl +
-                    '">' +
+                    '" target="_blank">' +
                     this.options.metaData.data.uploader +
                     '</a>'
                 );
@@ -102,7 +102,7 @@ define([
                 $(this.options.metaData.DOM.uploader).html(
                     '<a href="' +
                     this.options.metaData.data.uploaderUrl +
-                    '">' + this.options.metaData.data.uploader +
+                    '" target="_blank">' + this.options.metaData.data.uploader +
                     '</a>');
             }
             $('.' + this.options.videoClass).productVideoLoader();
@@ -243,7 +243,10 @@ define([
 
             this._on(events);
 
-            this._videoUrlWidget = $(this._videoUrlSelector).videoData();
+            this._videoUrlWidget = $(this._videoUrlSelector).videoData({
+                youtubeKey: this.options.youTubeApiKey,
+                eventSource: 'focusout'
+            });
             this._videoInformationGetBtn = $(this._videoInformationBtnSelector);
             this._videoInformationGetUrlField = $(this._videoUrlSelector);
             this._videoInformationGetEditBtn = $(this._editVideoBtnSelector);
@@ -262,7 +265,10 @@ define([
         _onGetVideoInformationClick: function () {
             this._onlyVideoPlayer = false;
             this._isEditPage = false;
-            this._videoInformationGetUrlField.videoData();
+            this._videoInformationGetUrlField.videoData({
+                youtubeKey: this.options.youTubeApiKey,
+                eventSource: 'click'
+            });
             this._videoUrlWidget.trigger('update_video_information');
         },
 
@@ -271,7 +277,10 @@ define([
          * @private
          */
         _onGetVideoInformationFocusOut: function () {
-            this._videoInformationGetUrlField.videoData();
+            this._videoInformationGetUrlField.videoData({
+                youtubeKey: this.options.youTubeApiKey,
+                eventSource: 'focusout'
+            });
             this._videoUrlWidget.trigger('update_video_information');
         },
 
@@ -282,7 +291,10 @@ define([
         _onGetVideoInformationEditClick: function () {
             this._onlyVideoPlayer = true;
             this._isEditPage = true;
-            this._videoInformationGetUrlField.videoData();
+            this._videoInformationGetUrlField.videoData({
+                youtubeKey: this.options.youTubeApiKey,
+                eventSource: 'click'
+            });
             this._videoUrlWidget.trigger('update_video_information');
         },
 
diff --git a/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml b/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml
index 81d7989a521f2d0cb270ad9e0adcb07c9c2f99ce..18417e1619da5d56717ce8602c53bf6359d44ac5 100644
--- a/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml
+++ b/app/code/Magento/ProductVideo/view/frontend/layout/catalog_product_view.xml
@@ -7,13 +7,12 @@
 -->
 <page layout="1column" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
     <head>
-        <css src="Magento_ProductVideo::css/product-video.css"/>
         <link src="Magento_ProductVideo::js/fotorama-add-video-events.js"/>
         <link src="Magento_ProductVideo::js/load-player.js"/>
     </head>
     <body>
         <referenceContainer name="product.info.media">
-            <block class="Magento\ProductVideo\Block\Product\View\Gallery" name="product.info.media.image" template="product/view/gallery.phtml"/>
+            <block class="Magento\ProductVideo\Block\Product\View\Gallery" name="product.info.media.video" after="product.info.media.image" template="product/view/gallery.phtml"/>
         </referenceContainer>
     </body>
 </page>
diff --git a/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js b/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js
index 956dd40b89e3162e72e8ad857d7236aaf4ef16f1..e19b89135b44120160fb5002eb063c5c8bf6f951 100644
--- a/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js
+++ b/app/code/Magento/ProductVideo/view/frontend/requirejs-config.js
@@ -6,7 +6,6 @@
 var config = {
     map: {
         '*': {
-            fotoramaAddVideoEvents: 'Magento_ProductVideo/js/fotorama-add-video-events',
             loadPlayer: 'Magento_ProductVideo/js/load-player'
         }
     }
diff --git a/app/code/Magento/ProductVideo/view/frontend/templates/product/view/gallery.phtml b/app/code/Magento/ProductVideo/view/frontend/templates/product/view/gallery.phtml
index 192a3f18e2cc62ab1a31768541101187a62bce94..131b9f7e4ff338b345cee5cc92ab56c09cc9a992 100644
--- a/app/code/Magento/ProductVideo/view/frontend/templates/product/view/gallery.phtml
+++ b/app/code/Magento/ProductVideo/view/frontend/templates/product/view/gallery.phtml
@@ -10,69 +10,12 @@
  * @var $block \Magento\ProductVideo\Block\Product\View\Gallery
  */
 ?>
-<div class="gallery-placeholder"
-     data-mage-init='{"fotoramaAddVideoEvents":{}}'
-     data-fotorama-video-data='<?php /* @escapeNotVerified */ echo $block->getMediaGalleryDataJson(); ?>'
-     data-fotorama-video-settings='<?php /* @escapeNotVerified */ echo $block->getVideoSettingsJson(); ?>'>
-</div>
 <script type="text/x-magento-init">
     {
-        ".gallery-placeholder": {
-            "mage/gallery/gallery": {
-                "mixins":["magnifier/magnify"],
-                "magnifierOpts": {
-                    "enabled": <?php /* @escapeNotVerified */
-    echo $block->getVar("magnifier:enabled", "Magento_Catalog"); ?>,
-                    "eventType": "<?php /* @escapeNotVerified */
-    echo $block->getVar("magnifier:action", "Magento_Catalog"); ?>",
-                    "width": "<?php /* @escapeNotVerified */
-    echo $block->getVar("magnifier:width", "Magento_Catalog"); ?>",
-                    "height": "<?php /* @escapeNotVerified */
-    echo $block->getVar("magnifier:height", "Magento_Catalog"); ?>",
-                    "top": "<?php /* @escapeNotVerified */
-    echo $block->getVar("magnifier:top", "Magento_Catalog"); ?>",
-                    "left": "<?php /* @escapeNotVerified */
-    echo $block->getVar("magnifier:left", "Magento_Catalog"); ?>"
-                },
-                "data": <?php /* @escapeNotVerified */
-    echo $block->getGalleryImagesJson(); ?>,
-                "options": {
-                    "nav": "<?php /* @escapeNotVerified */
-    echo $block->getVar("gallery:nav", "Magento_Catalog"); ?>",
-                    "loop": <?php /* @escapeNotVerified */
-    echo $block->getVar("gallery:loop", "Magento_Catalog"); ?>,
-                    "keyboard": <?php /* @escapeNotVerified */
-    echo $block->getVar("gallery:keyboard", "Magento_Catalog"); ?>,
-                    "arrows": <?php /* @escapeNotVerified */
-    echo $block->getVar("gallery:arrows", "Magento_Catalog"); ?>,
-                    "showCaption": <?php /* @escapeNotVerified */
-    echo $block->getVar("gallery:showCaption", "Magento_Catalog"); ?>,
-                    "width": <?php /* @escapeNotVerified */
-    echo $block->getImageAttribute('product_page_image_medium', 'width'); ?>,
-                    "thumbwidth": <?php /* @escapeNotVerified */
-    echo $block->getImageAttribute('product_page_image_small', 'width'); ?>,
-                    "thumbheight": <?php /* @escapeNotVerified */
-    echo $block->getImageAttribute('product_page_image_small', 'height')
-        ?: $block->getImageAttribute('product_page_image_small', 'width'); ?>,
-                    "height": <?php /* @escapeNotVerified */
-    echo $block->getImageAttribute('product_page_image_medium', 'height')
-        ?: $block->getImageAttribute('product_page_image_medium', 'width'); ?>
-                },
-                "breakpoints": {
-                    "mobile": {
-                        "conditions": {
-                            "max-width": "767px"
-                        },
-                        "options": {
-                            "options": {
-                                "nav": "dots"
-                            },
-                            "magnifierOpts": {
-                                "enabled": false
-                            }
-                        }
-                    }
-                }
+        "[data-gallery-role=gallery-placeholder]": {
+            "Magento_ProductVideo/js/fotorama-add-video-events": {
+                "fotoramaVideoData": <?php /* @escapeNotVerified */ echo $block->getMediaGalleryDataJson(); ?>,
+                "fotoramaVideoSettings": <?php /* @escapeNotVerified */ echo $block->getVideoSettingsJson(); ?>
             }
         }
     }
diff --git a/app/code/Magento/ProductVideo/view/frontend/web/css/product-video.css b/app/code/Magento/ProductVideo/view/frontend/web/css/product-video.css
deleted file mode 100644
index 0198f8c98ecb9fe70db81e8259a78cc554f4488f..0000000000000000000000000000000000000000
--- a/app/code/Magento/ProductVideo/view/frontend/web/css/product-video.css
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-.fotorama-video-container.video-unplayed:after {
-    content: '';
-    position: absolute;
-    bottom: 0;
-    right: 0;
-    background: url(../img/gallery-sprite.png) bottom right;
-    width: 100px;
-    height: 100px;
-    left: 0;
-    top: 12px;
-    margin: auto;
-}
-.fotorama-video-container .magnify-lens {
-    display: none !important;
-}
-.fotorama-video-container.video-unplayed:hover img {
-    opacity: 0.6;
-}
-.fotorama-video-container.video-unplayed:hover:after {
-    transform: scale(1.25);
-}
-.video-thumb-icon:after {
-    content: '';
-    position: absolute;
-    bottom: 0;
-    right: 0;
-    background: url(../img/gallery-sprite.png) bottom left;
-    width: 49px;
-    height: 40px;
-    left: 0;
-    top: 10px;
-    margin: auto;
-}
-.video-timing {
-    width: auto;
-    height: 30px;
-    background: rgba(0, 0, 0, 0.75);
-    padding: 0 17px;
-    color: #fff;
-    position: absolute;
-    right: 0;
-    line-height: 2;
-    transition: 0.3s;
-    bottom: -30px;
-}
-.video-timing.fadeIn {
-    bottom: 0;
-}
-.product-video {
-    position: absolute;
-    top: 0;
-    width: 100%;
-    height: 85%;
-    margin-top: 15%;
-}
-.product-video iframe {
-    position: absolute;
-    top: 0;
-    left: 0;
-    width: 100%;
-    height: 100%;
-    z-index: 9999;
-}
-.fotorama__arr.hidden-video {
-    z-index: -1;
-}
-.fotorama__video-close {
-    bottom: 89%;
-    top: auto;
-}
diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
index e19d635a72b36f5ba0742142ab901f93de57e2b9..3fa62c44903df5eb4163bd8ca9b0aceaccec1ac4 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/fotorama-add-video-events.js
@@ -3,7 +3,12 @@
  * See COPYING.txt for license details.
  */
 
-require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
+define([
+    'jquery',
+    'jquery/ui',
+    'catalogGallery',
+    'Magento_ProductVideo/js/load-player'
+], function ($) {
     'use strict';
 
     /**
@@ -23,16 +28,15 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
     function parseURL(href, forceVideo) {
         var id,
             type,
-            ampersandPosition;
+            ampersandPosition,
+            vimeoRegex;
 
         /**
          * Get youtube ID
-         * @param {String} srchref
+         * @param {String} srcid
          * @returns {{}}
          */
-        function _getYoutubeId(srchref) {
-            var srcid = srchref.search.split('v=')[1];
-
+        function _getYoutubeId(srcid) {
             if (srcid) {
                 ampersandPosition = srcid.indexOf('&');
 
@@ -64,7 +68,10 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
             type = 'youtube';
         } else if (href.host.match(/vimeo\.com/)) {
             type = 'vimeo';
-            id = href.pathname.replace(/^\/(video\/)?/, '').replace(/\/.*/, '');
+            vimeoRegex = new RegExp(['https?:\\/\\/(?:www\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)',
+                '?|groups\\/([^\\/]*)\\/videos\\/|album\\/(\\d+)\\/video\\/|)(\\d+)(?:$|\\/|\\?)'
+            ].join(''));
+            id = href.href.match(vimeoRegex)[3];
         }
 
         if ((!id || !type) && forceVideo) {
@@ -278,7 +285,6 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
         _isVideoBase: function () {
             var allVideoData = this.options.VideoData,
                 videoItem,
-                videoSettings,
                 allVideoDataKeys,
                 key,
                 i;
@@ -288,10 +294,9 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
             for (i = 0; i < allVideoDataKeys.length; i++) {
                 key = allVideoDataKeys[i];
                 videoItem = allVideoData[key];
-                videoSettings = allVideoData[videoItem];
 
                 if (
-                    videoSettings.mediaType === this.VID && videoSettings.isBase &&
+                    videoItem.mediaType === this.VID && videoItem.isBase &&
                     this.options.VideoSettings[0].playIfBase
                 ) {
                     this.Base = true;
@@ -547,13 +552,12 @@ require(['jquery', 'jquery/ui', 'catalogGallery'], function ($) {
         }
     });
 
-    $('.gallery-placeholder').on('fotorama:ready', function () {
-        $(this).find('.fotorama').AddFotoramaVideoEvents({
-            VideoData: $(this).data('fotorama-video-data'),
-            VideoSettings: $(this).data('fotorama-video-settings')
+    return function (config, element) {
+        $('.gallery-placeholder').on('fotorama:ready', function () {
+            $(element).find('.fotorama').AddFotoramaVideoEvents({
+                VideoData: config.fotoramaVideoData || [],
+                VideoSettings: config.fotoramaVideoSettings || {}
+            });
         });
-        //no reason to store video data and settings after - erase it
-        $(this).removeAttr('data-fotorama-video-data');
-        $(this).removeAttr('data-fotorama-video-settings');
-    });
+    };
 });
diff --git a/app/code/Magento/ProductVideo/view/frontend/web/js/load-player.js b/app/code/Magento/ProductVideo/view/frontend/web/js/load-player.js
index 1f1c08bbe8db771edc7307e3994cb28b3c75c2c1..937c62ae26cec337fbc03ddc72ed467be5bf9540 100644
--- a/app/code/Magento/ProductVideo/view/frontend/web/js/load-player.js
+++ b/app/code/Magento/ProductVideo/view/frontend/web/js/load-player.js
@@ -7,7 +7,7 @@
  @version 0.0.1
  @requires jQuery & jQuery UI
  */
-require(['jquery', 'jquery/ui'], function ($) {
+define(['jquery', 'jquery/ui'], function ($) {
     'use strict';
 
     var videoRegister = {
diff --git a/app/code/Magento/Quote/Api/Data/PaymentInterface.php b/app/code/Magento/Quote/Api/Data/PaymentInterface.php
index e1c10ed65d8ae6cc7bceed35185b106bf26f3878..41d15a6c34cdab296bedc1c8176a4f2db7d79213 100644
--- a/app/code/Magento/Quote/Api/Data/PaymentInterface.php
+++ b/app/code/Magento/Quote/Api/Data/PaymentInterface.php
@@ -18,16 +18,6 @@ interface PaymentInterface extends \Magento\Framework\Api\ExtensibleDataInterfac
 
     const KEY_METHOD = 'method';
 
-    const KEY_CC_OWNER = 'cc_owner';
-
-    const KEY_CC_NUMBER = 'cc_number';
-
-    const KEY_CC_TYPE = 'cc_type';
-
-    const KEY_CC_EXP_YEAR = 'cc_exp_year';
-
-    const KEY_CC_EXP_MONTH = 'cc_exp_month';
-
     const KEY_ADDITIONAL_DATA = 'additional_data';
 
     /**#@-*/
@@ -62,81 +52,6 @@ interface PaymentInterface extends \Magento\Framework\Api\ExtensibleDataInterfac
      */
     public function setMethod($method);
 
-    /**
-     * Get credit card owner
-     *
-     * @return string|null
-     */
-    public function getCcOwner();
-
-    /**
-     * Set credit card owner
-     *
-     * @param string $ccOwner
-     * @return $this
-     */
-    public function setCcOwner($ccOwner);
-
-    /**
-     * Get credit card number
-     *
-     * @return string|null
-     */
-    public function getCcNumber();
-
-    /**
-     * Set credit card number
-     *
-     * @param string $ccNumber
-     * @return $this
-     */
-    public function setCcNumber($ccNumber);
-
-    /**
-     * Get credit card type
-     *
-     * @return string|null
-     */
-    public function getCcType();
-
-    /**
-     * Set credit card type
-     *
-     * @param string $ccType
-     * @return $this
-     */
-    public function setCcType($ccType);
-
-    /**
-     * Get credit card expiration year
-     *
-     * @return string|null
-     */
-    public function getCcExpYear();
-
-    /**
-     * Set credit card expiration year
-     *
-     * @param string $ccExpYear
-     * @return $this
-     */
-    public function setCcExpYear($ccExpYear);
-
-    /**
-     * Get credit card expiration month
-     *
-     * @return string|null
-     */
-    public function getCcExpMonth();
-
-    /**
-     * Set credit card expiration month
-     *
-     * @param string $ccExpMonth
-     * @return $this
-     */
-    public function setCcExpMonth($ccExpMonth);
-
     /**
      * Get payment additional details
      *
diff --git a/app/code/Magento/Quote/Model/BillingAddressManagement.php b/app/code/Magento/Quote/Model/BillingAddressManagement.php
index c710b56797f9008902381457c7f9719967e805ea..02c8046d6880514533be508a9819751708dcac27 100644
--- a/app/code/Magento/Quote/Model/BillingAddressManagement.php
+++ b/app/code/Magento/Quote/Model/BillingAddressManagement.php
@@ -99,6 +99,7 @@ class BillingAddressManagement implements BillingAddressManagementInterface
             $quote->setShippingAddress($shippingAddress);
         }
         $quote->setDataChanges(true);
+        $quote->collectTotals();
         try {
             $this->quoteRepository->save($quote);
         } catch (\Exception $e) {
diff --git a/app/code/Magento/Quote/Model/QueryResolver.php b/app/code/Magento/Quote/Model/QueryResolver.php
index e1c14fe743f4fd3c2e688cdc18d9d68cedd1875e..59686962fe9ddcf1a07580560609b2f596d2a813 100644
--- a/app/code/Magento/Quote/Model/QueryResolver.php
+++ b/app/code/Magento/Quote/Model/QueryResolver.php
@@ -6,7 +6,7 @@
 namespace Magento\Quote\Model;
 
 use Magento\Framework\Config\CacheInterface;
-use Magento\Framework\App\Resource\ConfigInterface;
+use Magento\Framework\App\ResourceConnection\ConfigInterface;
 
 class QueryResolver
 {
diff --git a/app/code/Magento/Quote/Model/Quote.php b/app/code/Magento/Quote/Model/Quote.php
index a9ba9c9202e917899d2752ed070415b2869bffe3..29779c1e22ab2d74badb06587ae4b4bd9782333d 100644
--- a/app/code/Magento/Quote/Model/Quote.php
+++ b/app/code/Magento/Quote/Model/Quote.php
@@ -10,7 +10,7 @@ use Magento\Customer\Api\Data\GroupInterface;
 use Magento\Framework\Model\AbstractExtensibleModel;
 use Magento\Quote\Api\Data\PaymentInterface;
 use Magento\Quote\Model\Quote\Address;
-use Magento\Sales\Model\Resource;
+use Magento\Sales\Model\ResourceModel;
 use Magento\Sales\Model\Status;
 use Magento\Framework\Api\AttributeValueFactory;
 use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface;
@@ -214,7 +214,7 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
     protected $groupRepository;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Item\CollectionFactory
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory
      */
     protected $_quoteItemCollectionFactory;
 
@@ -244,7 +244,7 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
     protected $_quotePaymentFactory;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Payment\CollectionFactory
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Payment\CollectionFactory
      */
     protected $_quotePaymentCollectionFactory;
 
@@ -357,13 +357,13 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
      * @param Quote\AddressFactory $quoteAddressFactory
      * @param \Magento\Customer\Model\CustomerFactory $customerFactory
      * @param \Magento\Customer\Api\GroupRepositoryInterface $groupRepository
-     * @param Resource\Quote\Item\CollectionFactory $quoteItemCollectionFactory
+     * @param \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory $quoteItemCollectionFactory
      * @param Quote\ItemFactory $quoteItemFactory
      * @param \Magento\Framework\Message\Factory $messageFactory
      * @param Status\ListFactory $statusListFactory
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
      * @param Quote\PaymentFactory $quotePaymentFactory
-     * @param Resource\Quote\Payment\CollectionFactory $quotePaymentCollectionFactory
+     * @param \Magento\Quote\Model\ResourceModel\Quote\Payment\CollectionFactory $quotePaymentCollectionFactory
      * @param \Magento\Framework\DataObject\Copy $objectCopyService
      * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
      * @param Quote\Item\Processor $itemProcessor
@@ -382,7 +382,7 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
      * @param Quote\TotalsReader $totalsReader
      * @param ShippingFactory $shippingFactory
      * @param ShippingAssignmentFactory $shippingAssignmentFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -400,13 +400,13 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
         \Magento\Quote\Model\Quote\AddressFactory $quoteAddressFactory,
         \Magento\Customer\Model\CustomerFactory $customerFactory,
         \Magento\Customer\Api\GroupRepositoryInterface $groupRepository,
-        \Magento\Quote\Model\Resource\Quote\Item\CollectionFactory $quoteItemCollectionFactory,
+        \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory $quoteItemCollectionFactory,
         \Magento\Quote\Model\Quote\ItemFactory $quoteItemFactory,
         \Magento\Framework\Message\Factory $messageFactory,
         \Magento\Sales\Model\Status\ListFactory $statusListFactory,
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
         \Magento\Quote\Model\Quote\PaymentFactory $quotePaymentFactory,
-        \Magento\Quote\Model\Resource\Quote\Payment\CollectionFactory $quotePaymentCollectionFactory,
+        \Magento\Quote\Model\ResourceModel\Quote\Payment\CollectionFactory $quotePaymentCollectionFactory,
         \Magento\Framework\DataObject\Copy $objectCopyService,
         \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
         \Magento\Quote\Model\Quote\Item\Processor $itemProcessor,
@@ -425,7 +425,7 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
         Quote\TotalsReader $totalsReader,
         \Magento\Quote\Model\ShippingFactory $shippingFactory,
         \Magento\Quote\Model\ShippingAssignmentFactory $shippingAssignmentFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -480,7 +480,7 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Resource\Quote');
+        $this->_init('Magento\Quote\Model\ResourceModel\Quote');
     }
 
     /**
@@ -1355,7 +1355,7 @@ class Quote extends AbstractExtensibleModel implements \Magento\Quote\Api\Data\C
     {
         $items = [];
         foreach ($this->getItemsCollection() as $item) {
-            /** @var \Magento\Quote\Model\Resource\Quote\Item $item */
+            /** @var \Magento\Quote\Model\ResourceModel\Quote\Item $item */
             if (!$item->isDeleted()) {
                 $items[] = $item;
             }
diff --git a/app/code/Magento/Quote/Model/Quote/Address.php b/app/code/Magento/Quote/Model/Quote/Address.php
index e228408e19e560be3989498cd688cbfbbbff1d0c..5eafe7ab3695c1f5ba687e516efec4d4296aa19c 100644
--- a/app/code/Magento/Quote/Model/Quote/Address.php
+++ b/app/code/Magento/Quote/Model/Quote/Address.php
@@ -174,7 +174,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
     protected $_addressItemFactory;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Address\Item\CollectionFactory
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Address\Item\CollectionFactory
      */
     protected $_itemCollectionFactory;
 
@@ -184,7 +184,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
     protected $_rateCollector;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Address\Rate\CollectionFactory
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Address\Rate\CollectionFactory
      */
     protected $_rateCollectionFactory;
 
@@ -249,10 +249,10 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
      * @param \Magento\Framework\Api\DataObjectHelper $dataObjectHelper
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param Address\ItemFactory $addressItemFactory
-     * @param \Magento\Quote\Model\Resource\Quote\Address\Item\CollectionFactory $itemCollectionFactory
+     * @param \Magento\Quote\Model\ResourceModel\Quote\Address\Item\CollectionFactory $itemCollectionFactory
      * @param Address\RateFactory $addressRateFactory
      * @param Address\RateCollectorInterfaceFactory $rateCollector
-     * @param \Magento\Quote\Model\Resource\Quote\Address\Rate\CollectionFactory $rateCollectionFactory
+     * @param \Magento\Quote\Model\ResourceModel\Quote\Address\Rate\CollectionFactory $rateCollectionFactory
      * @param Address\RateRequestFactory $rateRequestFactory
      * @param Address\Total\CollectorFactory $totalCollectorFactory
      * @param Address\TotalFactory $addressTotalFactory
@@ -263,7 +263,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
      * @param Address\CustomAttributeListInterface $attributeList
      * @param TotalsCollector $totalsCollector
      * @param \Magento\Quote\Model\Quote\TotalsReader $totalsReader
-     * @param \Magento\Framework\Model\Resource\AbstractResource|null $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource|null $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb|null $resourceCollection
      * @param array $data
      *
@@ -285,10 +285,10 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
         \Magento\Framework\Api\DataObjectHelper $dataObjectHelper,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Quote\Model\Quote\Address\ItemFactory $addressItemFactory,
-        \Magento\Quote\Model\Resource\Quote\Address\Item\CollectionFactory $itemCollectionFactory,
+        \Magento\Quote\Model\ResourceModel\Quote\Address\Item\CollectionFactory $itemCollectionFactory,
         \Magento\Quote\Model\Quote\Address\RateFactory $addressRateFactory,
         \Magento\Quote\Model\Quote\Address\RateCollectorInterfaceFactory $rateCollector,
-        \Magento\Quote\Model\Resource\Quote\Address\Rate\CollectionFactory $rateCollectionFactory,
+        \Magento\Quote\Model\ResourceModel\Quote\Address\Rate\CollectionFactory $rateCollectionFactory,
         \Magento\Quote\Model\Quote\Address\RateRequestFactory $rateRequestFactory,
         \Magento\Quote\Model\Quote\Address\Total\CollectorFactory $totalCollectorFactory,
         \Magento\Quote\Model\Quote\Address\TotalFactory $addressTotalFactory,
@@ -299,7 +299,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
         Address\CustomAttributeListInterface $attributeList,
         \Magento\Quote\Model\Quote\TotalsCollector $totalsCollector,
         \Magento\Quote\Model\Quote\TotalsReader $totalsReader,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -347,7 +347,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Resource\Quote\Address');
+        $this->_init('Magento\Quote\Model\ResourceModel\Quote\Address');
     }
 
     /**
@@ -538,7 +538,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
     /**
      * Retrieve address items collection
      *
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getItemsCollection()
     {
@@ -779,7 +779,7 @@ class Address extends \Magento\Customer\Model\Address\AbstractAddress implements
     /**
      * Retrieve collection of quote shipping rates
      *
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getShippingRatesCollection()
     {
diff --git a/app/code/Magento/Quote/Model/Quote/Address/Item.php b/app/code/Magento/Quote/Model/Quote/Address/Item.php
index aa5eea6d35e74aaa2205589bfcb9f4ffb51939b3..dafeb95235faf7ded501618215ac1ec9bc5ac177 100644
--- a/app/code/Magento/Quote/Model/Quote/Address/Item.php
+++ b/app/code/Magento/Quote/Model/Quote/Address/Item.php
@@ -8,8 +8,8 @@ namespace Magento\Quote\Model\Quote\Address;
 use Magento\Quote\Model\Quote;
 
 /**
- * @method \Magento\Quote\Model\Resource\Quote\Address\Item _getResource()
- * @method \Magento\Quote\Model\Resource\Quote\Address\Item getResource()
+ * @method \Magento\Quote\Model\ResourceModel\Quote\Address\Item _getResource()
+ * @method \Magento\Quote\Model\ResourceModel\Quote\Address\Item getResource()
  * @method int getParentItemId()
  * @method \Magento\Quote\Model\Quote\Address\Item setParentItemId(int $value)
  * @method int getQuoteAddressId()
@@ -105,7 +105,7 @@ class Item extends \Magento\Quote\Model\Quote\Item\AbstractItem
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Resource\Quote\Address\Item');
+        $this->_init('Magento\Quote\Model\ResourceModel\Quote\Address\Item');
     }
 
     /**
diff --git a/app/code/Magento/Quote/Model/Quote/Address/Rate.php b/app/code/Magento/Quote/Model/Quote/Address/Rate.php
index 7b6832df604f015725e509033f30b4e1f7223198..4d8ffef9a2d212f1b9b2c578e752f48011f1b4f8 100644
--- a/app/code/Magento/Quote/Model/Quote/Address/Rate.php
+++ b/app/code/Magento/Quote/Model/Quote/Address/Rate.php
@@ -8,8 +8,8 @@ namespace Magento\Quote\Model\Quote\Address;
 use Magento\Framework\Model\AbstractModel;
 
 /**
- * @method \Magento\Quote\Model\Resource\Quote\Address\Rate _getResource()
- * @method \Magento\Quote\Model\Resource\Quote\Address\Rate getResource()
+ * @method \Magento\Quote\Model\ResourceModel\Quote\Address\Rate _getResource()
+ * @method \Magento\Quote\Model\ResourceModel\Quote\Address\Rate getResource()
  * @method int getAddressId()
  * @method \Magento\Quote\Model\Quote\Address\Rate setAddressId(int $value)
  * @method string getCreatedAt()
@@ -47,7 +47,7 @@ class Rate extends AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Resource\Quote\Address\Rate');
+        $this->_init('Magento\Quote\Model\ResourceModel\Quote\Address\Rate');
     }
 
     /**
diff --git a/app/code/Magento/Quote/Model/Quote/Address/Relation.php b/app/code/Magento/Quote/Model/Quote/Address/Relation.php
index f5e499d4dcd6f90c302aa27cf696ece18b630681..898b868b772f6e1892f5dfe9578a3e6388827b17 100644
--- a/app/code/Magento/Quote/Model/Quote/Address/Relation.php
+++ b/app/code/Magento/Quote/Model/Quote/Address/Relation.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Model\Quote\Address;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 
 class Relation implements RelationInterface
 {
diff --git a/app/code/Magento/Quote/Model/Quote/Item.php b/app/code/Magento/Quote/Model/Quote/Item.php
index 39fb2dcbb5b47270ba9e3c09c59034fde56b0ebf..3b59817c0722bead6fb6baa382d2e44ad8dc7fb5 100644
--- a/app/code/Magento/Quote/Model/Quote/Item.php
+++ b/app/code/Magento/Quote/Model/Quote/Item.php
@@ -12,8 +12,8 @@ use Magento\Quote\Api\Data\CartItemInterface;
 /**
  * Sales Quote Item Model
  *
- * @method \Magento\Quote\Model\Resource\Quote\Item _getResource()
- * @method \Magento\Quote\Model\Resource\Quote\Item getResource()
+ * @method \Magento\Quote\Model\ResourceModel\Quote\Item _getResource()
+ * @method \Magento\Quote\Model\ResourceModel\Quote\Item getResource()
  * @method string getCreatedAt()
  * @method \Magento\Quote\Model\Quote\Item setCreatedAt(string $value)
  * @method string getUpdatedAt()
@@ -187,7 +187,7 @@ class Item extends \Magento\Quote\Model\Quote\Item\AbstractItem implements \Mage
      * @param Item\OptionFactory $itemOptionFactory
      * @param Item\Compare $quoteItemCompare
      * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      *
@@ -205,7 +205,7 @@ class Item extends \Magento\Quote\Model\Quote\Item\AbstractItem implements \Mage
         \Magento\Quote\Model\Quote\Item\OptionFactory $itemOptionFactory,
         \Magento\Quote\Model\Quote\Item\Compare $quoteItemCompare,
         \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -234,7 +234,7 @@ class Item extends \Magento\Quote\Model\Quote\Item\AbstractItem implements \Mage
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Resource\Quote\Item');
+        $this->_init('Magento\Quote\Model\ResourceModel\Quote\Item');
     }
 
     /**
diff --git a/app/code/Magento/Quote/Model/Quote/Item/AbstractItem.php b/app/code/Magento/Quote/Model/Quote/Item/AbstractItem.php
index 2bdeda88c146c0b8d04087c16688661fbbcd5ac3..7b356181cfbf6dd71556a80670fdc092cb5713c2 100644
--- a/app/code/Magento/Quote/Model/Quote/Item/AbstractItem.php
+++ b/app/code/Magento/Quote/Model/Quote/Item/AbstractItem.php
@@ -87,7 +87,7 @@ abstract class AbstractItem extends \Magento\Framework\Model\AbstractExtensibleM
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
      * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -98,7 +98,7 @@ abstract class AbstractItem extends \Magento\Framework\Model\AbstractExtensibleM
         AttributeValueFactory $customAttributeFactory,
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
         \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Quote/Model/Quote/Item/Option.php b/app/code/Magento/Quote/Model/Quote/Item/Option.php
index 4998d257aaa0be5359810af1501e17a03773ced8..270c340919bced8aceb9f005710e6dcdec099216 100644
--- a/app/code/Magento/Quote/Model/Quote/Item/Option.php
+++ b/app/code/Magento/Quote/Model/Quote/Item/Option.php
@@ -8,8 +8,8 @@ namespace Magento\Quote\Model\Quote\Item;
 /**
  * Item option model
  *
- * @method \Magento\Quote\Model\Resource\Quote\Item\Option _getResource()
- * @method \Magento\Quote\Model\Resource\Quote\Item\Option getResource()
+ * @method \Magento\Quote\Model\ResourceModel\Quote\Item\Option _getResource()
+ * @method \Magento\Quote\Model\ResourceModel\Quote\Item\Option getResource()
  * @method int getItemId()
  * @method \Magento\Quote\Model\Quote\Item\Option setItemId(int $value)
  * @method int getProductId()
@@ -38,7 +38,7 @@ class Option extends \Magento\Framework\Model\AbstractModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Resource\Quote\Item\Option');
+        $this->_init('Magento\Quote\Model\ResourceModel\Quote\Item\Option');
     }
 
     /**
diff --git a/app/code/Magento/Quote/Model/Quote/Payment.php b/app/code/Magento/Quote/Model/Quote/Payment.php
index e11fe99e3d949eb5d594decd26e7023cbb4dce18..8a799a2c261748d39fd94c89ba5ee87a5bac1bcf 100644
--- a/app/code/Magento/Quote/Model/Quote/Payment.php
+++ b/app/code/Magento/Quote/Model/Quote/Payment.php
@@ -8,8 +8,8 @@ namespace Magento\Quote\Model\Quote;
 /**
  * Quote payment information
  *
- * @method \Magento\Quote\Model\Resource\Quote\Payment _getResource()
- * @method \Magento\Quote\Model\Resource\Quote\Payment getResource()
+ * @method \Magento\Quote\Model\ResourceModel\Quote\Payment _getResource()
+ * @method \Magento\Quote\Model\ResourceModel\Quote\Payment getResource()
  * @method int getQuoteId()
  * @method \Magento\Quote\Model\Quote\Payment setQuoteId(int $value)
  * @method string getCreatedAt()
@@ -66,7 +66,7 @@ class Payment extends \Magento\Payment\Model\Info implements \Magento\Quote\Api\
      * @param \Magento\Payment\Helper\Data $paymentData
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
      * @param \Magento\Payment\Model\Checks\SpecificationFactory $methodSpecificationFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -79,7 +79,7 @@ class Payment extends \Magento\Payment\Model\Info implements \Magento\Quote\Api\
         \Magento\Payment\Helper\Data $paymentData,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
         \Magento\Payment\Model\Checks\SpecificationFactory $methodSpecificationFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -104,7 +104,7 @@ class Payment extends \Magento\Payment\Model\Info implements \Magento\Quote\Api\
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Resource\Quote\Payment');
+        $this->_init('Magento\Quote\Model\ResourceModel\Quote\Payment');
     }
 
     /**
@@ -273,112 +273,6 @@ class Payment extends \Magento\Payment\Model\Info implements \Magento\Quote\Api\
         return $this->setData(self::KEY_METHOD, $method);
     }
 
-    /**
-     * Get credit card owner
-     *
-     * @return string|null
-     */
-    public function getCcOwner()
-    {
-        return $this->getData(self::KEY_CC_OWNER);
-    }
-
-    /**
-     * Set credit card owner
-     *
-     * @param string $ccOwner
-     * @return $this
-     */
-    public function setCcOwner($ccOwner)
-    {
-        return $this->setData(self::KEY_CC_OWNER, $ccOwner);
-    }
-
-    /**
-     * Get credit card number
-     *
-     * @return string|null
-     */
-    public function getCcNumber()
-    {
-        return $this->getData(self::KEY_CC_NUMBER);
-    }
-
-    /**
-     * Set credit card number
-     *
-     * @param string $ccNumber
-     * @return $this
-     */
-    public function setCcNumber($ccNumber)
-    {
-        return $this->setData(self::KEY_CC_NUMBER, $ccNumber);
-    }
-
-    /**
-     * Get credit card type
-     *
-     * @return string|null
-     */
-    public function getCcType()
-    {
-        return $this->getData(self::KEY_CC_TYPE);
-    }
-
-    /**
-     * Set credit card type
-     *
-     * @param string $ccType
-     * @return $this
-     */
-    public function setCcType($ccType)
-    {
-        return $this->setData(self::KEY_CC_TYPE, $ccType);
-    }
-
-    /**
-     * Get credit card expiration year
-     *
-     * @return string|null
-     */
-    public function getCcExpYear()
-    {
-        $expirationYear = $this->getData(self::KEY_CC_EXP_YEAR) ?: null;
-        return $expirationYear;
-    }
-
-    /**
-     * Set credit card expiration year
-     *
-     * @param string $ccExpYear
-     * @return $this
-     */
-    public function setCcExpYear($ccExpYear)
-    {
-        return $this->setData(self::KEY_CC_EXP_YEAR, $ccExpYear);
-    }
-
-    /**
-     * Get credit card expiration month
-     *
-     * @return string|null
-     */
-    public function getCcExpMonth()
-    {
-        return $this->getData(self::KEY_CC_EXP_MONTH);
-    }
-
-    /**
-     * Set credit card expiration month
-     *
-     * @param string $ccExpMonth
-     * @return $this
-     */
-    public function setCcExpMonth($ccExpMonth)
-    {
-        return $this->setData(self::KEY_CC_EXP_MONTH, $ccExpMonth);
-    }
-
     /**
      * Get payment additional details
      *
diff --git a/app/code/Magento/Quote/Model/Quote/Relation.php b/app/code/Magento/Quote/Model/Quote/Relation.php
index 5e131ae6b3b015bab21603b1b316a7d00d644337..2dd85ec640d9cf9b515c109640efcb2e01e75cff 100644
--- a/app/code/Magento/Quote/Model/Quote/Relation.php
+++ b/app/code/Magento/Quote/Model/Quote/Relation.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Quote\Model\Quote;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 
 class Relation implements RelationInterface
 {
diff --git a/app/code/Magento/Quote/Model/QuoteIdMask.php b/app/code/Magento/Quote/Model/QuoteIdMask.php
index 326ca21d76881a547c901677dd09f5d0d059485d..dba1fcbf5195e1dbf0b1ed26a578000b1fb8d509 100644
--- a/app/code/Magento/Quote/Model/QuoteIdMask.php
+++ b/app/code/Magento/Quote/Model/QuoteIdMask.php
@@ -23,7 +23,7 @@ class QuoteIdMask extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Math\Random $randomDataGenerator
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -31,7 +31,7 @@ class QuoteIdMask extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Math\Random $randomDataGenerator,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -46,7 +46,7 @@ class QuoteIdMask extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Resource\Quote\QuoteIdMask');
+        $this->_init('Magento\Quote\Model\ResourceModel\Quote\QuoteIdMask');
     }
 
     /**
diff --git a/app/code/Magento/Quote/Model/QuoteManagement.php b/app/code/Magento/Quote/Model/QuoteManagement.php
index 0accaacd593932e4c95e20edbb6724863c3b1def..89e1471e362310d508b6ba37f249786d6f664fb8 100644
--- a/app/code/Magento/Quote/Model/QuoteManagement.php
+++ b/app/code/Magento/Quote/Model/QuoteManagement.php
@@ -369,7 +369,7 @@ class QuoteManagement implements \Magento\Quote\Api\CartManagementInterface
     {
         $quoteItems = [];
         foreach ($quote->getAllItems() as $quoteItem) {
-            /** @var \Magento\Quote\Model\Resource\Quote\Item $quoteItem */
+            /** @var \Magento\Quote\Model\ResourceModel\Quote\Item $quoteItem */
             $quoteItems[$quoteItem->getId()] = $quoteItem;
         }
         $orderItems = [];
diff --git a/app/code/Magento/Quote/Model/QuoteRepository.php b/app/code/Magento/Quote/Model/QuoteRepository.php
index fb0e91591e5a5b01f6f7d0d01277a0e9f826d482..58ba4a79e94f01b45b0853c22ea4bb85f63041a0 100644
--- a/app/code/Magento/Quote/Model/QuoteRepository.php
+++ b/app/code/Magento/Quote/Model/QuoteRepository.php
@@ -10,7 +10,7 @@ use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Quote\Model\Quote;
 use Magento\Store\Model\StoreManagerInterface;
 use Magento\Framework\Api\Search\FilterGroup;
-use Magento\Quote\Model\Resource\Quote\Collection as QuoteCollection;
+use Magento\Quote\Model\ResourceModel\Quote\Collection as QuoteCollection;
 use Magento\Framework\Exception\InputException;
 use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface;
 
@@ -42,7 +42,7 @@ class QuoteRepository implements \Magento\Quote\Api\CartRepositoryInterface
     protected $storeManager;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Collection
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Collection
      */
     protected $quoteCollection;
 
@@ -59,14 +59,14 @@ class QuoteRepository implements \Magento\Quote\Api\CartRepositoryInterface
     /**
      * @param QuoteFactory $quoteFactory
      * @param StoreManagerInterface $storeManager
-     * @param \Magento\Quote\Model\Resource\Quote\Collection $quoteCollection
+     * @param \Magento\Quote\Model\ResourceModel\Quote\Collection $quoteCollection
      * @param \Magento\Quote\Api\Data\CartSearchResultsInterfaceFactory $searchResultsDataFactory
      * @param JoinProcessorInterface $extensionAttributesJoinProcessor
      */
     public function __construct(
         QuoteFactory $quoteFactory,
         StoreManagerInterface $storeManager,
-        \Magento\Quote\Model\Resource\Quote\Collection $quoteCollection,
+        \Magento\Quote\Model\ResourceModel\Quote\Collection $quoteCollection,
         \Magento\Quote\Api\Data\CartSearchResultsInterfaceFactory $searchResultsDataFactory,
         JoinProcessorInterface $extensionAttributesJoinProcessor
     ) {
diff --git a/app/code/Magento/Quote/Model/Resource/Quote.php b/app/code/Magento/Quote/Model/ResourceModel/Quote.php
similarity index 94%
rename from app/code/Magento/Quote/Model/Resource/Quote.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote.php
index d7c602718d89c372fd40d6f978d75ee801b24a7a..780eb049d7cdea6e407c09ff147875241f1885ef 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote.php
@@ -6,11 +6,11 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Quote\Model\Resource;
+namespace Magento\Quote\Model\ResourceModel;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\AbstractDb;
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite;
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\SalesSequence\Model\Manager;
 
 /**
@@ -24,14 +24,14 @@ class Quote extends AbstractDb
     protected $sequenceManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param Snapshot $entitySnapshot,
      * @param RelationComposite $entityRelationComposite,
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
         RelationComposite $entityRelationComposite,
         Manager $sequenceManager,
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address.php
similarity index 77%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address.php
index 56d71a651e18a430a6201716464b7dd6700a1b18..fe3518ee46055c5f9199baddbf80dc6661f58579 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote;
+namespace Magento\Quote\Model\ResourceModel\Quote;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
 
 /**
  * Quote address resource model
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Backend.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Backend.php
similarity index 89%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Backend.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Backend.php
index 7724381733562f8017326482fe15e78ce2c74125..177c691506182d6342669574b7668d314c9044bc 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Backend.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Backend.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address\Attribute;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address\Attribute;
 
 /**
  * Quote address attribute backend resource model
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Backend/Child.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Backend/Child.php
similarity index 90%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Backend/Child.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Backend/Child.php
index 06dd4001926f6a33a279bf1471992dbcc83ea9f2..ea4158f9856592915a3f4dd5d3bc761857d56936 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Backend/Child.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Backend/Child.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address\Attribute\Backend;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Backend;
 
 /**
  * Quote address attribute backend child resource model
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Backend/Region.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Backend/Region.php
similarity index 93%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Backend/Region.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Backend/Region.php
index fde5265506e81962e44f41fe46a1309b447e74c3..b445fbb013f0ed77d17b8695eadde352c992fea2 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Backend/Region.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Backend/Region.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address\Attribute\Backend;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Backend;
 
 /**
  * Quote address attribute backend region resource model
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend.php
similarity index 90%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend.php
index 32351c123247545a2271167d28944cef0cead38f..3e9085495e58483a67a3f40854167d856f60ad69 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address\Attribute;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address\Attribute;
 
 /**
  * Quote address attribute frontend resource model
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Custbalance.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Custbalance.php
similarity index 81%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Custbalance.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Custbalance.php
index c8b863ad87af762204857f87d1f511367b8f7f58..47c1d0ce2302919f9e630c8ccade1c9280d24247 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Custbalance.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Custbalance.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend;
 
 /**
  * Quote address attribute frontend custbalance resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Custbalance extends \Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend
+class Custbalance extends \Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend
 {
     /**
      * Fetch customer balance
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Discount.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Discount.php
similarity index 83%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Discount.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Discount.php
index 8a83d93c4c8862d75cfbf267865741aca63c7d00..f370a3c8e7174d88f48ba0073e16fc06ed1acc6c 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Discount.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Discount.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend;
 
 /**
  * Quote address attribute frontend discount resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Discount extends \Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend
+class Discount extends \Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend
 {
     /**
      * Fetch discount
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Grand.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Grand.php
similarity index 81%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Grand.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Grand.php
index 156bac7a3602004b16e7af81f10dd826023061f7..354eb84717baade115f39d6bd485fefca78b4098 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Grand.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Grand.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend;
 
 /**
  * Quote address attribute frontend grand resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Grand extends \Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend
+class Grand extends \Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend
 {
     /**
      * Fetch grand total
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Shipping.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Shipping.php
similarity index 84%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Shipping.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Shipping.php
index a2aa317af914673c22d920b021aa2886306f2f65..74aec2abc475cc50e71784af57abd7b81c2e8313 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Shipping.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Shipping.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend;
 
 /**
  * Quote address attribute frontend shipping resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Shipping extends \Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend
+class Shipping extends \Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend
 {
     /**
      * Fetch totals
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Subtotal.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Subtotal.php
similarity index 77%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Subtotal.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Subtotal.php
index 0b082fccf63abaa85443c348060e8b36299c55fc..7ad0cd56786abe56df023913346f04ed44a5ba5d 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Subtotal.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Subtotal.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend;
 
 /**
  * Quote address attribute frontend subtotal resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Subtotal extends \Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend
+class Subtotal extends \Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend
 {
     /**
      * Add total
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Tax.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Tax.php
similarity index 79%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Tax.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Tax.php
index e240c443e43ee03911cf3767fe61df4490c87419..27f639f1d2822510ef29f26eda861fe0f637c645 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Attribute/Frontend/Tax.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Attribute/Frontend/Tax.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend;
 
 /**
  * Quote address attribute frontend tax resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Tax extends \Magento\Quote\Model\Resource\Quote\Address\Attribute\Frontend
+class Tax extends \Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Frontend
 {
     /**
      * Fetch totals
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Collection.php
similarity index 86%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Collection.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Collection.php
index 521daa91741d3806d4a96575cd0d696ea7cebae1..b53d89d5c391ff647355f78b4a57fce918061fca 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address;
 
 /**
  * Quote addresses collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Collection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * Event prefix
@@ -33,7 +33,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Col
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Quote\Address', 'Magento\Quote\Model\Resource\Quote\Address');
+        $this->_init('Magento\Quote\Model\Quote\Address', 'Magento\Quote\Model\ResourceModel\Quote\Address');
     }
 
     /**
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Item.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item.php
similarity index 77%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Item.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item.php
index d156ba6804657d9bc20c62a117210bc5b7994dc0..0d3a2817c217c40c80caa454fd1ab6b919d777d2 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Item.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
 
 /**
  * Quote address item resource model
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Item/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item/Collection.php
similarity index 84%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Item/Collection.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item/Collection.php
index 03b381a572470fac7e1ff727ae76e71f129e9bce..d554a60068f433a79a829f613704abca8c99601d 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Item/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Item/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address\Item;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address\Item;
 
 /**
  * Quote addresses collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Collection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * Resource initialization
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Col
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Quote\Address\Item', 'Magento\Quote\Model\Resource\Quote\Address\Item');
+        $this->_init('Magento\Quote\Model\Quote\Address\Item', 'Magento\Quote\Model\ResourceModel\Quote\Address\Item');
     }
 
     /**
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Rate.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate.php
similarity index 77%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Rate.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate.php
index 221f1b42c5a1fe927e32fae8a3dac80e61b74ac7..b2f0db80caf580a5930ebe9e9e7f3fee2e3a026b 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Rate.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
 
 /**
  * Quote address shipping rate resource model
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Address/Rate/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate/Collection.php
similarity index 83%
rename from app/code/Magento/Quote/Model/Resource/Quote/Address/Rate/Collection.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate/Collection.php
index 1002491c158e793c57f5abba0b601acde86c7f52..a981fe1e4fa3ef4bbc3009d7ffaa1aafddb25b96 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Address/Rate/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Address/Rate/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Address\Rate;
+namespace Magento\Quote\Model\ResourceModel\Quote\Address\Rate;
 
 /**
  * Quote addresses shipping rates collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Collection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * Whether to load fixed items only
@@ -24,20 +24,20 @@ class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Col
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Shipping\Model\CarrierFactoryInterface $carrierFactory
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Shipping\Model\CarrierFactoryInterface $carrierFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
@@ -58,7 +58,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Col
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Quote\Address\Rate', 'Magento\Quote\Model\Resource\Quote\Address\Rate');
+        $this->_init('Magento\Quote\Model\Quote\Address\Rate', 'Magento\Quote\Model\ResourceModel\Quote\Address\Rate');
     }
 
     /**
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Collection.php
similarity index 69%
rename from app/code/Magento/Quote/Model/Resource/Quote/Collection.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Collection.php
index 20e325fbf3678273365f9f20e185c1343cc0162d..cf4bd8f0368fc795a4a512acb460dbc67f0e2551 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote;
+namespace Magento\Quote\Model\ResourceModel\Quote;
 
 /**
  * Quotes collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Collection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * Resource initialization
@@ -19,6 +19,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Col
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Quote', 'Magento\Quote\Model\Resource\Quote');
+        $this->_init('Magento\Quote\Model\Quote', 'Magento\Quote\Model\ResourceModel\Quote');
     }
 }
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Item.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item.php
similarity index 89%
rename from app/code/Magento/Quote/Model/Resource/Quote/Item.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Item.php
index 0f527977b5a8fd1228b469d844d9e34d7bb6381a..edb0586e294dd28a73173039c0fd54c5f6d2f4f5 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Item.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote;
+namespace Magento\Quote\Model\ResourceModel\Quote;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
 
 /**
  * Quote resource model
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Item/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php
similarity index 88%
rename from app/code/Magento/Quote/Model/Resource/Quote/Item/Collection.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php
index 12ad61338aff909a8a7cd904532a39f1d2d00e8c..c0f1681fc6a20aab998c9cef758736fa82936aea 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Item/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Item;
+namespace Magento\Quote\Model\ResourceModel\Quote\Item;
 
 /**
  * Quote item resource collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Collection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * Collection quote instance
@@ -25,12 +25,12 @@ class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Col
     protected $_productIds = [];
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Item\Option\CollectionFactory
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Item\Option\CollectionFactory
      */
     protected $_itemOptionCollectionFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_productCollectionFactory;
 
@@ -44,12 +44,12 @@ class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Col
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param Option\CollectionFactory $itemOptionCollectionFactory
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
      * @param \Magento\Quote\Model\Quote\Config $quoteConfig
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
@@ -57,12 +57,12 @@ class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Col
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
-        \Magento\Quote\Model\Resource\Quote\Item\Option\CollectionFactory $itemOptionCollectionFactory,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Quote\Model\ResourceModel\Quote\Item\Option\CollectionFactory $itemOptionCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
         \Magento\Quote\Model\Quote\Config $quoteConfig,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
@@ -85,7 +85,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Col
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Quote\Item', 'Magento\Quote\Model\Resource\Quote\Item');
+        $this->_init('Magento\Quote\Model\Quote\Item', 'Magento\Quote\Model\ResourceModel\Quote\Item');
     }
 
     /**
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Item/Option.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option.php
similarity index 75%
rename from app/code/Magento/Quote/Model/Resource/Quote/Item/Option.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option.php
index 979e8fb565dc0d498f4cebf12a2cfb71960ba07a..163ad4c20f8cf32a1e01b91f94c7e14b62353eff 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Item/Option.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Item;
+namespace Magento\Quote\Model\ResourceModel\Quote\Item;
 
 /**
  * Item option resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Option extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Main table and field initialization
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Item/Option/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option/Collection.php
similarity index 94%
rename from app/code/Magento/Quote/Model/Resource/Quote/Item/Option/Collection.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option/Collection.php
index 453c12762eb89bec07975360e854be6f7b5e5f94..d535e3b6369301784dc8c6ff2299fa255f1e247e 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Item/Option/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Item/Option/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Item\Option;
+namespace Magento\Quote\Model\ResourceModel\Quote\Item\Option;
 
 use Magento\Quote\Model\Quote\Item;
 
@@ -12,7 +12,7 @@ use Magento\Quote\Model\Quote\Item;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Array of option ids grouped by item id
@@ -35,7 +35,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Quote\Item\Option', 'Magento\Quote\Model\Resource\Quote\Item\Option');
+        $this->_init('Magento\Quote\Model\Quote\Item\Option', 'Magento\Quote\Model\ResourceModel\Quote\Item\Option');
     }
 
     /**
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Payment.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment.php
similarity index 81%
rename from app/code/Magento/Quote/Model/Resource/Quote/Payment.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Payment.php
index 8fc4f3446e2b129a9019cc4ce8def5475e1cb587..31f06fed55132cfeb55b8ee413f3834fe8af0778 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Payment.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote;
+namespace Magento\Quote\Model\ResourceModel\Quote;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
 
 /**
  * Quote payment resource model
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/Payment/Collection.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment/Collection.php
similarity index 77%
rename from app/code/Magento/Quote/Model/Resource/Quote/Payment/Collection.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/Payment/Collection.php
index 339f39255716300e8931ad9cc74e1f31a3367de2..de5e6ef357cfc58b982fbde010d687cde4e51d8b 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/Payment/Collection.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/Payment/Collection.php
@@ -3,30 +3,30 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote\Payment;
+namespace Magento\Quote\Model\ResourceModel\Quote\Payment;
 
 /**
  * Quote payments collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Collection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
@@ -46,7 +46,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\VersionControl\Col
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Quote\Payment', 'Magento\Quote\Model\Resource\Quote\Payment');
+        $this->_init('Magento\Quote\Model\Quote\Payment', 'Magento\Quote\Model\ResourceModel\Quote\Payment');
     }
 
     /**
diff --git a/app/code/Magento/Quote/Model/Resource/Quote/QuoteIdMask.php b/app/code/Magento/Quote/Model/ResourceModel/Quote/QuoteIdMask.php
similarity index 78%
rename from app/code/Magento/Quote/Model/Resource/Quote/QuoteIdMask.php
rename to app/code/Magento/Quote/Model/ResourceModel/Quote/QuoteIdMask.php
index 2312a25be806aa5b1783adf8f8e1618712a85f0d..9b2af2ac4ebd4c6837b00f91a01ebd5ea7fa52d9 100644
--- a/app/code/Magento/Quote/Model/Resource/Quote/QuoteIdMask.php
+++ b/app/code/Magento/Quote/Model/ResourceModel/Quote/QuoteIdMask.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Model\Resource\Quote;
+namespace Magento\Quote\Model\ResourceModel\Quote;
 
-use Magento\Framework\Model\Resource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 
 /**
  * QuoteIdMask Resource model
diff --git a/app/code/Magento/Quote/Setup/QuoteSetup.php b/app/code/Magento/Quote/Setup/QuoteSetup.php
index 3b4381a317c1bd4c207c45ace2a1dfabb865e6e7..9ba21cf149f07f932111c0d83452b6f469cc63c5 100644
--- a/app/code/Magento/Quote/Setup/QuoteSetup.php
+++ b/app/code/Magento/Quote/Setup/QuoteSetup.php
@@ -6,7 +6,7 @@
 namespace Magento\Quote\Setup;
 
 use Magento\Eav\Model\Entity\Setup\Context;
-use Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory;
 use Magento\Eav\Setup\EavSetup;
 use Magento\Framework\App\CacheInterface;
 use Magento\Framework\App\Config\ScopeConfigInterface;
diff --git a/app/code/Magento/Quote/Test/Unit/Model/QueryResolverTest.php b/app/code/Magento/Quote/Test/Unit/Model/QueryResolverTest.php
index 8aaaf69b1b5422b54f6964dd20cd21658fc32bd3..d86fbbedd740d0d95ed48c4676279a19edac95d2 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/QueryResolverTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/QueryResolverTest.php
@@ -25,7 +25,7 @@ class QueryResolverTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->configMock = $this->getMock('Magento\Framework\App\Resource\ConfigInterface');
+        $this->configMock = $this->getMock('Magento\Framework\App\ResourceConnection\ConfigInterface');
         $this->cacheMock = $this->getMock('Magento\Framework\Config\CacheInterface');
         $this->quoteResolver = new \Magento\Quote\Model\QueryResolver(
             $this->configMock,
diff --git a/app/code/Magento/Quote/Test/Unit/Model/Quote/Address/RelationTest.php b/app/code/Magento/Quote/Test/Unit/Model/Quote/Address/RelationTest.php
index b8fa10e5ed63043809e17c2ee10bb39926e9bc08..1d2a24982530d444606ba33a7162624336f1bf37 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/Quote/Address/RelationTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/Quote/Address/RelationTest.php
@@ -40,14 +40,14 @@ class RelationTest extends \PHPUnit_Framework_TestCase
     public function testProcessRelation()
     {
         $itemsCollection = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\Collection\AbstractCollection',
+            'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
             [],
             [],
             '',
             false
         );
         $shippingRatesCollection = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\Collection\AbstractCollection',
+            'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Quote/Test/Unit/Model/Quote/PaymentTest.php b/app/code/Magento/Quote/Test/Unit/Model/Quote/PaymentTest.php
index 534c20c1307585959f8090e374cb6adc58b963a9..1c593d118aa67141b3c04c9045b2756bbf042384 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/Quote/PaymentTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/Quote/PaymentTest.php
@@ -43,7 +43,7 @@ class PaymentTest extends \PHPUnit_Framework_TestCase
         return [
             [null, null],
             [0, null],
-            ['0', null],
+            ['0', 0],
             [1939, 1939],
         ];
     }
diff --git a/app/code/Magento/Quote/Test/Unit/Model/QuoteRepositoryTest.php b/app/code/Magento/Quote/Test/Unit/Model/QuoteRepositoryTest.php
index 7955f59ebfca5d91dad96b0befd7ac0de52f73ad..3213329b5e1ec812d63c01ba85645909131d998f 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/QuoteRepositoryTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/QuoteRepositoryTest.php
@@ -45,7 +45,7 @@ class QuoteRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $searchResultsDataFactory;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $quoteCollectionMock;
 
@@ -86,7 +86,8 @@ class QuoteRepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->quoteCollectionMock = $this->getMock('Magento\Quote\Model\Resource\Quote\Collection', [], [], '', false);
+        $this->quoteCollectionMock =
+            $this->getMock('Magento\Quote\Model\ResourceModel\Quote\Collection', [], [], '', false);
 
         $this->extensionAttributesJoinProcessorMock = $this->getMock(
             'Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface',
@@ -389,7 +390,7 @@ class QuoteRepositoryTest extends \PHPUnit_Framework_TestCase
         $this->extensionAttributesJoinProcessorMock->expects($this->once())
             ->method('process')
             ->with(
-                $this->isInstanceOf('\Magento\Quote\Model\Resource\Quote\Collection')
+                $this->isInstanceOf('\Magento\Quote\Model\ResourceModel\Quote\Collection')
             );
 
         $this->quoteCollectionMock->expects($this->once())->method('getItems')->willReturn([$cartMock]);
diff --git a/app/code/Magento/Quote/Test/Unit/Model/QuoteTest.php b/app/code/Magento/Quote/Test/Unit/Model/QuoteTest.php
index 892899ee72ae4b0a3374470334e520d923446c2e..18fe85279d449cb92a54804be0ae7c6850bcc477 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/QuoteTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/QuoteTest.php
@@ -33,7 +33,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
     protected $quoteAddressMock;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Address\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Address\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $quoteAddressCollectionMock;
 
@@ -83,7 +83,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
     protected $objectFactoryMock;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Item\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $quoteItemCollectionFactoryMock;
 
@@ -93,7 +93,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
     protected $paymentFactoryMock;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Payment\CollectionFactory
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Payment\CollectionFactory
      */
     protected $quotePaymentCollectionFactoryMock;
 
@@ -160,7 +160,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->quoteAddressCollectionMock = $this->getMock(
-            'Magento\Quote\Model\Resource\Quote\Address\Collection',
+            'Magento\Quote\Model\ResourceModel\Quote\Address\Collection',
             [],
             [],
             '',
@@ -211,7 +211,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
         $this->storeManagerMock = $this->getMockBuilder('Magento\Store\Model\StoreManager')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->resourceMock = $this->getMockBuilder('Magento\Quote\Model\Resource\Quote')
+        $this->resourceMock = $this->getMockBuilder('Magento\Quote\Model\ResourceModel\Quote')
             ->disableOriginalConstructor()
             ->getMock();
         $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\Context')
@@ -228,14 +228,14 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
             ->method('getEventDispatcher')
             ->will($this->returnValue($this->eventManagerMock));
         $this->quoteItemCollectionFactoryMock = $this->getMock(
-            'Magento\Quote\Model\Resource\Quote\Item\CollectionFactory',
+            'Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->quotePaymentCollectionFactoryMock = $this->getMock(
-            'Magento\Quote\Model\Resource\Quote\Payment\CollectionFactory',
+            'Magento\Quote\Model\ResourceModel\Quote\Payment\CollectionFactory',
             ['create'],
             [],
             '',
@@ -872,7 +872,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
         );
 
         $collectionMock = $this->getMock(
-            'Magento\Quote\Model\Resource\Quote\Item\Collection',
+            'Magento\Quote\Model\ResourceModel\Quote\Item\Collection',
             [],
             [],
             '',
@@ -971,7 +971,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
             ->method('isDeleted')
             ->willReturn(false);
         $quotePaymentCollectionMock = $this->getMock(
-            'Magento\Quote\Model\Resource\Quote\Payment\Collection',
+            'Magento\Quote\Model\ResourceModel\Quote\Payment\Collection',
             ['setQuoteFilter', 'getFirstItem'],
             [],
             '',
@@ -1010,7 +1010,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
             ->method('getId')
             ->willReturn(1);
         $quotePaymentCollectionMock = $this->getMock(
-            'Magento\Quote\Model\Resource\Quote\Payment\Collection',
+            'Magento\Quote\Model\ResourceModel\Quote\Payment\Collection',
             ['setQuoteFilter', 'getFirstItem'],
             [],
             '',
@@ -1097,7 +1097,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
         $this->quote->setStoreId($storeId);
 
         $collectionMock = $this->getMock(
-            'Magento\Quote\Model\Resource\Quote\Item\Collection',
+            'Magento\Quote\Model\ResourceModel\Quote\Item\Collection',
             [],
             [],
             '',
@@ -1154,7 +1154,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
 
     public function testGetItemsCollection()
     {
-        $itemCollectionMock = $this->getMockBuilder('Magento\Quote\Model\Resource\Quote\Collection')
+        $itemCollectionMock = $this->getMockBuilder('Magento\Quote\Model\ResourceModel\Quote\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['setQuote'])
             ->getMock();
@@ -1165,7 +1165,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
         $this->extensionAttributesJoinProcessorMock->expects($this->once())
             ->method('process')
             ->with(
-                $this->isInstanceOf('Magento\Quote\Model\Resource\Quote\Collection')
+                $this->isInstanceOf('Magento\Quote\Model\ResourceModel\Quote\Collection')
             );
         $itemCollectionMock->expects($this->once())->method('setQuote')->with($this->quote);
 
@@ -1174,7 +1174,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
 
     public function testGetAllItems()
     {
-        $itemOneMock = $this->getMockBuilder('Magento\Quote\Model\Resource\Quote\Item')
+        $itemOneMock = $this->getMockBuilder('Magento\Quote\Model\ResourceModel\Quote\Item')
             ->setMethods(['isDeleted'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -1182,7 +1182,7 @@ class QuoteTest extends \PHPUnit_Framework_TestCase
             ->method('isDeleted')
             ->willReturn(false);
 
-        $itemTwoMock = $this->getMockBuilder('Magento\Quote\Model\Resource\Quote\Item')
+        $itemTwoMock = $this->getMockBuilder('Magento\Quote\Model\ResourceModel\Quote\Item')
             ->setMethods(['isDeleted'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Quote/Test/Unit/Model/Resource/Quote/Item/CollectionTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/Item/CollectionTest.php
similarity index 80%
rename from app/code/Magento/Quote/Test/Unit/Model/Resource/Quote/Item/CollectionTest.php
rename to app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/Item/CollectionTest.php
index a667111d2fd3285e597adb53c3f51feab8cd0618..fb6fec5504abd14533f55a732b4eed8b1abb71d1 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/Resource/Quote/Item/CollectionTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/Item/CollectionTest.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Test\Unit\Model\Resource\Quote\Item;
+namespace Magento\Quote\Test\Unit\Model\ResourceModel\Quote\Item;
 
-use Magento\Quote\Model\Resource\Quote\Item\Collection;
+use Magento\Quote\Model\ResourceModel\Quote\Item\Collection;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 /**
@@ -34,7 +34,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $selectMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -49,7 +49,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $entityFactoryMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -70,14 +70,14 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->will($this->returnValue($this->selectMock));
 
-        $this->resourceMock = $this->getMock('Magento\Framework\Model\Resource\Db\AbstractDb', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\AbstractDb', [], [], '', false);
         $this->resourceMock->expects($this->any())->method('getConnection')->will(
             $this->returnValue($this->connectionMock)
         );
 
         $objectManager = new ObjectManager($this);
         $this->collection = $objectManager->getObject(
-            'Magento\Quote\Model\Resource\Quote\Item\Collection',
+            'Magento\Quote\Model\ResourceModel\Quote\Item\Collection',
             [
                 'entityFactory' => $this->entityFactoryMock,
                 'fetchStrategy' => $this->fetchStrategyMock,
@@ -89,6 +89,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
 
     public function testInstanceOf()
     {
-        $this->assertInstanceOf('Magento\Framework\Model\Resource\Db\VersionControl\Collection', $this->collection);
+        $this->assertInstanceOf(
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection',
+            $this->collection
+        );
     }
 }
diff --git a/app/code/Magento/Quote/Test/Unit/Model/Resource/Quote/ItemTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/ItemTest.php
similarity index 83%
rename from app/code/Magento/Quote/Test/Unit/Model/Resource/Quote/ItemTest.php
rename to app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/ItemTest.php
index c9bce3c995b02cdc0e9a93dff22b6c34cbee7e6c..74f99ab7169fe5e3473d10f66256afdbb16f76a0 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/Resource/Quote/ItemTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/ItemTest.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Test\Unit\Model\Resource\Quote;
+namespace Magento\Quote\Test\Unit\Model\ResourceModel\Quote;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite;
-use Magento\Quote\Model\Resource\Quote\Item;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
+use Magento\Quote\Model\ResourceModel\Quote\Item;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
 /**
@@ -23,7 +23,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -38,7 +38,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -48,7 +48,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
     protected $relationCompositeMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $objectRelationProcessorMock;
 
@@ -57,7 +57,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
-        $this->resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->quoteItemMock = $this->getMock('Magento\Quote\Model\Quote\Item', [], [], '', false);
         $this->connectionMock = $this->getMock(
             'Magento\Framework\DB\Adapter\Pdo\Mysql',
@@ -76,27 +76,27 @@ class ItemTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
             false
         );
         $this->relationCompositeMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite',
             [],
             [],
             '',
             false
         );
         $this->objectRelationProcessorMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\ObjectRelationProcessor',
+            'Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
         $contextMock->expects($this->once())
             ->method('getObjectRelationProcessor')
@@ -104,7 +104,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
 
         $objectManager = new ObjectManagerHelper($this);
         $this->model = $objectManager->getObject(
-            'Magento\Quote\Model\Resource\Quote\Item',
+            'Magento\Quote\Model\ResourceModel\Quote\Item',
             [
                 'context' => $contextMock,
                 'entitySnapshot' => $this->entitySnapshotMock,
@@ -115,7 +115,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
 
     public function testInstanceOf()
     {
-        $this->assertInstanceOf('Magento\Framework\Model\Resource\Db\VersionControl\AbstractDb', $this->model);
+        $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb', $this->model);
     }
 
     public function testSaveNotModifiedItem()
diff --git a/app/code/Magento/Quote/Test/Unit/Model/Resource/Quote/QuoteAddressTest.php b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/QuoteAddressTest.php
similarity index 83%
rename from app/code/Magento/Quote/Test/Unit/Model/Resource/Quote/QuoteAddressTest.php
rename to app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/QuoteAddressTest.php
index eef6ac80f14977086bb41de86bacb44bcc74edc3..2319fca91ac1e2c3903a17bb6f0376b181325cc9 100644
--- a/app/code/Magento/Quote/Test/Unit/Model/Resource/Quote/QuoteAddressTest.php
+++ b/app/code/Magento/Quote/Test/Unit/Model/ResourceModel/Quote/QuoteAddressTest.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Quote\Test\Unit\Model\Resource\Quote;
+namespace Magento\Quote\Test\Unit\Model\ResourceModel\Quote;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
 
 /**
  * Class QuoteAddressTest
@@ -13,12 +13,12 @@ use Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite;
 class QuoteAddressTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Address
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Address
      */
     protected $addressResource;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $appResourceMock;
 
@@ -38,7 +38,7 @@ class QuoteAddressTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -67,7 +67,7 @@ class QuoteAddressTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->appResourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -81,14 +81,14 @@ class QuoteAddressTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
             false
         );
         $this->relationCompositeMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite',
             [],
             [],
             '',
@@ -106,7 +106,7 @@ class QuoteAddressTest extends \PHPUnit_Framework_TestCase
         $this->connectionMock->expects($this->any())
                           ->method('lastInsertId');
         $this->addressResource = $objectManager->getObject(
-            'Magento\Quote\Model\Resource\Quote\Address',
+            'Magento\Quote\Model\ResourceModel\Quote\Address',
             [
                 'resource' => $this->appResourceMock,
                 'entitySnapshot' => $this->entitySnapshotMock,
diff --git a/app/code/Magento/Quote/composer.json b/app/code/Magento/Quote/composer.json
index 98c932935dc1f5c0cf58c15f39f0684a69b50ac5..262f6b13def2138ff8c52368269bde6c4163b735 100644
--- a/app/code/Magento/Quote/composer.json
+++ b/app/code/Magento/Quote/composer.json
@@ -5,7 +5,6 @@
         "php": "~5.5.0|~5.6.0|~7.0.0",
         "magento/module-store": "1.0.0-beta",
         "magento/module-catalog": "1.0.0-beta",
-        "magento/module-catalog-rule": "1.0.0-beta",
         "magento/module-customer": "1.0.0-beta",
         "magento/module-checkout": "1.0.0-beta",
         "magento/module-authorization": "1.0.0-beta",
diff --git a/app/code/Magento/Quote/etc/adminhtml/events.xml b/app/code/Magento/Quote/etc/adminhtml/events.xml
index 02753fc7ca5a3bc9fd40489d4767738dee4dbe91..4b412a42b01aa35730b84b2117ef0eb3273fa1c6 100644
--- a/app/code/Magento/Quote/etc/adminhtml/events.xml
+++ b/app/code/Magento/Quote/etc/adminhtml/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="customer_save_after_data_object">
-        <observer name="customer" instance="Magento\Quote\Observer\Backend\CustomerQuoteObserver" method="execute" />
+        <observer name="customer" instance="Magento\Quote\Observer\Backend\CustomerQuoteObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Quote/etc/di.xml b/app/code/Magento/Quote/etc/di.xml
index ee019938630cd07de12addcf812a0f856a038ddf..17cadb026c9cbd4692c9fa2ae9ab1807c960d37d 100644
--- a/app/code/Magento/Quote/etc/di.xml
+++ b/app/code/Magento/Quote/etc/di.xml
@@ -49,7 +49,7 @@
     </type>
     <type name="Magento\Quote\Model\QuoteRepository">
         <arguments>
-            <argument name="quoteCollection" xsi:type="object">Magento\Quote\Model\Resource\Quote\Collection\Proxy</argument>
+            <argument name="quoteCollection" xsi:type="object">Magento\Quote\Model\ResourceModel\Quote\Collection\Proxy</argument>
         </arguments>
     </type>
     <type name="Magento\Quote\Model\Quote\Address">
@@ -57,26 +57,26 @@
             <argument name="addressConfig" xsi:type="object">Magento\Customer\Model\Address\Config\Proxy</argument>
         </arguments>
     </type>
-    <virtualType name="QuoteAddressRelationsComposite" type="Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite">
+    <virtualType name="QuoteAddressRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
                 <item name="default" xsi:type="object">Magento\Quote\Model\Quote\Address\Relation</item>
             </argument>
         </arguments>
     </virtualType>
-    <type name="Magento\Quote\Model\Resource\Quote\Address">
+    <type name="Magento\Quote\Model\ResourceModel\Quote\Address">
         <arguments>
             <argument name="entityRelationComposite" xsi:type="object">QuoteAddressRelationsComposite</argument>
         </arguments>
     </type>
-    <virtualType name="QuoteRelationsComposite" type="Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite">
+    <virtualType name="QuoteRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
                 <item name="default" xsi:type="object">Magento\Quote\Model\Quote\Relation</item>
             </argument>
         </arguments>
     </virtualType>
-    <type name="Magento\Quote\Model\Resource\Quote">
+    <type name="Magento\Quote\Model\ResourceModel\Quote">
         <arguments>
             <argument name="entityRelationComposite" xsi:type="object">QuoteRelationsComposite</argument>
         </arguments>
diff --git a/app/code/Magento/Quote/etc/events.xml b/app/code/Magento/Quote/etc/events.xml
index a7f860139cb3efa6fbdecaeeb31068f1b1232f95..fd82566a4adbc789da04b455b49103f0578c632e 100644
--- a/app/code/Magento/Quote/etc/events.xml
+++ b/app/code/Magento/Quote/etc/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_quote_address_collect_totals_before">
-        <observer name="sales_customer_validate_vat_number" instance="Magento\Quote\Observer\Frontend\Quote\Address\CollectTotalsObserver" method="execute" />
+        <observer name="sales_customer_validate_vat_number" instance="Magento\Quote\Observer\Frontend\Quote\Address\CollectTotalsObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Quote/etc/webapi_rest/events.xml b/app/code/Magento/Quote/etc/webapi_rest/events.xml
index a0406c95e24e74a29f37b5864ba1c5e734a08206..fc234312a957575846c8a2d5afb29c436aaac337 100644
--- a/app/code/Magento/Quote/etc/webapi_rest/events.xml
+++ b/app/code/Magento/Quote/etc/webapi_rest/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_model_service_quote_submit_success">
-        <observer name="sendEmail" instance="Magento\Quote\Observer\Webapi\SubmitObserver" method="execute" />
+        <observer name="sendEmail" instance="Magento\Quote\Observer\Webapi\SubmitObserver" />
     </event>
 </config>
\ No newline at end of file
diff --git a/app/code/Magento/Quote/etc/webapi_soap/events.xml b/app/code/Magento/Quote/etc/webapi_soap/events.xml
index a0406c95e24e74a29f37b5864ba1c5e734a08206..fc234312a957575846c8a2d5afb29c436aaac337 100644
--- a/app/code/Magento/Quote/etc/webapi_soap/events.xml
+++ b/app/code/Magento/Quote/etc/webapi_soap/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_model_service_quote_submit_success">
-        <observer name="sendEmail" instance="Magento\Quote\Observer\Webapi\SubmitObserver" method="execute" />
+        <observer name="sendEmail" instance="Magento\Quote\Observer\Webapi\SubmitObserver" />
     </event>
 </config>
\ No newline at end of file
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Grid.php
index 463339d2949ad37ca67bdb46c17ea109bb77ddb5..596ed64e88bd7ed08579d2fd402c85f754ebc56a 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Grid.php
@@ -115,7 +115,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
             $this->_setFilterValues($this->_defaultFilter);
         }
 
-        /** @var $collection \Magento\Reports\Model\Resource\Report\Collection */
+        /** @var $collection \Magento\Reports\Model\ResourceModel\Report\Collection */
         $collection = $this->getCollection();
         if ($collection) {
             $collection->setPeriod($this->getFilter('report_period'));
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Grid/AbstractGrid.php b/app/code/Magento/Reports/Block/Adminhtml/Grid/AbstractGrid.php
index b1e46d90a3c769f13295d33ac9b0ce94a9af3a36..fda6ec11c068883f2b1cf3d423d7607611209a7e 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Grid/AbstractGrid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Grid/AbstractGrid.php
@@ -44,14 +44,14 @@ class AbstractGrid extends \Magento\Backend\Block\Widget\Grid\Extended
     /**
      * Resource collection factory
      *
-     * @var \Magento\Reports\Model\Resource\Report\Collection\Factory
+     * @var \Magento\Reports\Model\ResourceModel\Report\Collection\Factory
      */
     protected $_resourceFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Reports\Model\Resource\Report\Collection\Factory $resourceFactory
+     * @param \Magento\Reports\Model\ResourceModel\Report\Collection\Factory $resourceFactory
      * @param \Magento\Reports\Model\Grouped\CollectionFactory $collectionFactory
      * @param \Magento\Reports\Helper\Data $reportsData
      * @param array $data
@@ -59,7 +59,7 @@ class AbstractGrid extends \Magento\Backend\Block\Widget\Grid\Extended
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Reports\Model\Resource\Report\Collection\Factory $resourceFactory,
+        \Magento\Reports\Model\ResourceModel\Report\Collection\Factory $resourceFactory,
         \Magento\Reports\Model\Grouped\CollectionFactory $collectionFactory,
         \Magento\Reports\Helper\Data $reportsData,
         array $data = []
@@ -386,7 +386,7 @@ class AbstractGrid extends \Magento\Backend\Block\Widget\Grid\Extended
     /**
      * Add order status filter
      *
-     * @param \Magento\Reports\Model\Resource\Report\Collection\AbstractCollection $collection
+     * @param \Magento\Reports\Model\ResourceModel\Report\Collection\AbstractCollection $collection
      * @param \Magento\Framework\DataObject $filterData
      * @return $this
      */
@@ -400,7 +400,7 @@ class AbstractGrid extends \Magento\Backend\Block\Widget\Grid\Extended
      * Adds custom filter to resource collection
      * Can be overridden in child classes if custom filter needed
      *
-     * @param \Magento\Reports\Model\Resource\Report\Collection\AbstractCollection $collection
+     * @param \Magento\Reports\Model\ResourceModel\Report\Collection\AbstractCollection $collection
      * @param \Magento\Framework\DataObject $filterData
      * @return $this
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Product/Downloads/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Product/Downloads/Grid.php
index a17df1dc0b5906ac85bf35b3c324ea0c932d1821..52f4263ecf79e70d5e88e8b68f7ac92c8f007251 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Product/Downloads/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Product/Downloads/Grid.php
@@ -13,20 +13,20 @@ namespace Magento\Reports\Block\Adminhtml\Product\Downloads;
 class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Product\Downloads\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Product\Downloads\CollectionFactory
      */
     protected $_downloadsFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Reports\Model\Resource\Product\Downloads\CollectionFactory $downloadsFactory
+     * @param \Magento\Reports\Model\ResourceModel\Product\Downloads\CollectionFactory $downloadsFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Reports\Model\Resource\Product\Downloads\CollectionFactory $downloadsFactory,
+        \Magento\Reports\Model\ResourceModel\Product\Downloads\CollectionFactory $downloadsFactory,
         array $data = []
     ) {
         $this->_downloadsFactory = $downloadsFactory;
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Product/Lowstock/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Product/Lowstock/Grid.php
index 90cecea21425176f463e7ab5ce16cff35e06deaa..81e8d7d80e3299fecd35afb27a6584d50450e523 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Product/Lowstock/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Product/Lowstock/Grid.php
@@ -13,20 +13,20 @@ namespace Magento\Reports\Block\Adminhtml\Product\Lowstock;
 class Grid extends \Magento\Backend\Block\Widget\Grid
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Product\Lowstock\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Product\Lowstock\CollectionFactory
      */
     protected $_lowstocksFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Reports\Model\Resource\Product\Lowstock\CollectionFactory $lowstocksFactory
+     * @param \Magento\Reports\Model\ResourceModel\Product\Lowstock\CollectionFactory $lowstocksFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Reports\Model\Resource\Product\Lowstock\CollectionFactory $lowstocksFactory,
+        \Magento\Reports\Model\ResourceModel\Product\Lowstock\CollectionFactory $lowstocksFactory,
         array $data = []
     ) {
         $this->_lowstocksFactory = $lowstocksFactory;
@@ -54,7 +54,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid
             $storeId = '';
         }
 
-        /** @var $collection \Magento\Reports\Model\Resource\Product\Lowstock\Collection  */
+        /** @var $collection \Magento\Reports\Model\ResourceModel\Product\Lowstock\Collection  */
         $collection = $this->_lowstocksFactory->create()->addAttributeToSelect(
             '*'
         )->setStoreId(
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Product/Viewed/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Product/Viewed/Grid.php
index 69f5335dc23b81eed14e572df7f34a55a12e7a95..46bb18d25844a0afb4b4c48c74dd57d26702f26e 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Product/Viewed/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Product/Viewed/Grid.php
@@ -25,7 +25,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
      *
      * @var string
      */
-    protected $_resourceCollectionName = 'Magento\Reports\Model\Resource\Report\Product\Viewed\Collection';
+    protected $_resourceCollectionName = 'Magento\Reports\Model\ResourceModel\Report\Product\Viewed\Collection';
 
     /**
      * Init grid parameters
@@ -114,7 +114,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     /**
      * Don't use orders in collection
      *
-     * @param \Magento\Reports\Model\Resource\Report\Collection\AbstractCollection $collection
+     * @param \Magento\Reports\Model\ResourceModel\Report\Collection\AbstractCollection $collection
      * @param \Magento\Framework\DataObject $filterData
      * @return $this
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Review/Detail/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Review/Detail/Grid.php
index 425b95b0261ace862e9538e1f4688cb758fcba34..033c3dd6f55be704e3f32f4f68b0bb3601eeff5b 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Review/Detail/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Review/Detail/Grid.php
@@ -13,20 +13,20 @@ namespace Magento\Reports\Block\Adminhtml\Review\Detail;
 class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Review\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Review\CollectionFactory
      */
     protected $_reviewsFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Reports\Model\Resource\Review\CollectionFactory $reviewsFactory
+     * @param \Magento\Reports\Model\ResourceModel\Review\CollectionFactory $reviewsFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Reports\Model\Resource\Review\CollectionFactory $reviewsFactory,
+        \Magento\Reports\Model\ResourceModel\Review\CollectionFactory $reviewsFactory,
         array $data = []
     ) {
         $this->_reviewsFactory = $reviewsFactory;
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Bestsellers/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Bestsellers/Grid.php
index bedef6d74acceb8be7e61ef3d045faf17f1c98be..a7f51313d836bc66b46b2695dc082b3515ce6257 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Bestsellers/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Bestsellers/Grid.php
@@ -36,7 +36,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
      */
     public function getResourceCollectionName()
     {
-        return 'Magento\Sales\Model\Resource\Report\Bestsellers\Collection';
+        return 'Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection';
     }
 
     /**
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Coupons/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Coupons/Grid.php
index e4ca7acdebfa94f82a64e692eb9e4e669b9599a1..1292d222651ce38416380458a17d35fd0352a611 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Coupons/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Coupons/Grid.php
@@ -37,9 +37,9 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     public function getResourceCollectionName()
     {
         if ($this->getFilterData()->getData('report_type') == 'updated_at_order') {
-            return 'Magento\SalesRule\Model\Resource\Report\Updatedat\Collection';
+            return 'Magento\SalesRule\Model\ResourceModel\Report\Updatedat\Collection';
         } else {
-            return 'Magento\SalesRule\Model\Resource\Report\Collection';
+            return 'Magento\SalesRule\Model\ResourceModel\Report\Collection';
         }
     }
 
@@ -205,7 +205,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     /**
      * Add price rule filter
      *
-     * @param \Magento\Reports\Model\Resource\Report\Collection\AbstractCollection $collection
+     * @param \Magento\Reports\Model\ResourceModel\Report\Collection\AbstractCollection $collection
      * @param \Magento\Framework\DataObject $filterData
      * @return \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
      */
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Invoiced/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Invoiced/Grid.php
index 854520bafad351539f350b4f1c9369db8fdd0372..1a4c51299c540252b3695e0106026468347ff806 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Invoiced/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Invoiced/Grid.php
@@ -37,8 +37,8 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     public function getResourceCollectionName()
     {
         return ($this->getFilterData()->getData('report_type')) == 'created_at_invoice'
-            ? 'Magento\Sales\Model\Resource\Report\Invoiced\Collection\Invoiced'
-            : 'Magento\Sales\Model\Resource\Report\Invoiced\Collection\Order';
+            ? 'Magento\Sales\Model\ResourceModel\Report\Invoiced\Collection\Invoiced'
+            : 'Magento\Sales\Model\ResourceModel\Report\Invoiced\Collection\Order';
     }
 
     /**
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Refunded/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Refunded/Grid.php
index c3964e9675cd7f4b67807df54e548cef34028d13..c8381d2c3c5ba1ca4670d596a6e5d88fb060d5d3 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Refunded/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Refunded/Grid.php
@@ -37,8 +37,8 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     public function getResourceCollectionName()
     {
         return $this->getFilterData()->getData('report_type') == 'created_at_refunded'
-            ? 'Magento\Sales\Model\Resource\Report\Refunded\Collection\Refunded'
-            : 'Magento\Sales\Model\Resource\Report\Refunded\Collection\Order';
+            ? 'Magento\Sales\Model\ResourceModel\Report\Refunded\Collection\Refunded'
+            : 'Magento\Sales\Model\ResourceModel\Report\Refunded\Collection\Order';
     }
 
     /**
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Sales/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Sales/Grid.php
index 6f7b99bb8941fe4cef1547a952e9e00583bfb9c0..4d5433b0ffa254656b8954b16494dc630711f9db 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Sales/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Sales/Grid.php
@@ -37,8 +37,8 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     public function getResourceCollectionName()
     {
         return $this->getFilterData()->getData('report_type') == 'updated_at_order'
-            ? 'Magento\Sales\Model\Resource\Report\Order\Updatedat\Collection'
-            : 'Magento\Sales\Model\Resource\Report\Order\Collection';
+            ? 'Magento\Sales\Model\ResourceModel\Report\Order\Updatedat\Collection'
+            : 'Magento\Sales\Model\ResourceModel\Report\Order\Collection';
     }
 
     /**
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Shipping/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Shipping/Grid.php
index 28d8bbe6b196fb55963f61797c95a09962960e50..247a86495cf89b78c9c666d87c525fab981bf2cb 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Shipping/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Shipping/Grid.php
@@ -38,8 +38,8 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     public function getResourceCollectionName()
     {
         return $this->getFilterData()->getData('report_type') == 'created_at_shipment'
-            ? 'Magento\Sales\Model\Resource\Report\Shipping\Collection\Shipment'
-            : 'Magento\Sales\Model\Resource\Report\Shipping\Collection\Order';
+            ? 'Magento\Sales\Model\ResourceModel\Report\Shipping\Collection\Shipment'
+            : 'Magento\Sales\Model\ResourceModel\Report\Shipping\Collection\Order';
     }
 
     /**
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Sales/Tax/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Sales/Tax/Grid.php
index 7196f1ff332533630ba0241383ffc6cd6a12e030..5adf07211a8d3fd61f563f9ecb01805f816a7587 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Sales/Tax/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Sales/Tax/Grid.php
@@ -33,7 +33,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
      *
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Reports\Model\Resource\Report\Collection\Factory $resourceFactory
+     * @param \Magento\Reports\Model\ResourceModel\Report\Collection\Factory $resourceFactory
      * @param \Magento\Reports\Model\Grouped\CollectionFactory $collectionFactory
      * @param \Magento\Reports\Helper\Data $reportsData
      * @param \Magento\Sales\Model\Order\ConfigFactory $configFactory
@@ -42,7 +42,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Reports\Model\Resource\Report\Collection\Factory $resourceFactory,
+        \Magento\Reports\Model\ResourceModel\Report\Collection\Factory $resourceFactory,
         \Magento\Reports\Model\Grouped\CollectionFactory $collectionFactory,
         \Magento\Reports\Helper\Data $reportsData,
         \Magento\Sales\Model\Order\ConfigFactory $configFactory,
@@ -69,8 +69,8 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\AbstractGrid
     public function getResourceCollectionName()
     {
         return $this->getFilterData()->getData('report_type') == 'updated_at_order'
-            ? 'Magento\Tax\Model\Resource\Report\Updatedat\Collection'
-            : 'Magento\Tax\Model\Resource\Report\Collection';
+            ? 'Magento\Tax\Model\ResourceModel\Report\Updatedat\Collection'
+            : 'Magento\Tax\Model\ResourceModel\Report\Collection';
     }
 
     /**
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php
index 04e370c973696823341b4983a075471eb4f4878d..648db357ee120790bda999e2c009e6c21bfdd8ba 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Abandoned/Grid.php
@@ -8,7 +8,7 @@ namespace Magento\Reports\Block\Adminhtml\Shopcart\Abandoned;
 /**
  * Adminhtml abandoned shopping carts report grid block
  *
- * @method \Magento\Reports\Model\Resource\Quote\Collection getCollection
+ * @method \Magento\Reports\Model\ResourceModel\Quote\Collection getCollection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  * @SuppressWarnings(PHPMD.DepthOfInheritance)
@@ -16,20 +16,20 @@ namespace Magento\Reports\Block\Adminhtml\Shopcart\Abandoned;
 class Grid extends \Magento\Reports\Block\Adminhtml\Grid\Shopcart
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Quote\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Quote\CollectionFactory
      */
     protected $_quotesFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Reports\Model\Resource\Quote\CollectionFactory $quotesFactory
+     * @param \Magento\Reports\Model\ResourceModel\Quote\CollectionFactory $quotesFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Reports\Model\Resource\Quote\CollectionFactory $quotesFactory,
+        \Magento\Reports\Model\ResourceModel\Quote\CollectionFactory $quotesFactory,
         array $data = []
     ) {
         $this->_quotesFactory = $quotesFactory;
@@ -50,7 +50,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\Shopcart
      */
     protected function _prepareCollection()
     {
-        /** @var $collection \Magento\Reports\Model\Resource\Quote\Collection */
+        /** @var $collection \Magento\Reports\Model\ResourceModel\Quote\Collection */
         $collection = $this->_quotesFactory->create();
 
         $filter = $this->getParam($this->getVarNameFilter(), []);
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Customer/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Customer/Grid.php
index 4d5fab61661678b4838b8c17996dfe0e9e80f7f6..513f3223fd110020ab385b8742a961f2a2541c17 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Customer/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Customer/Grid.php
@@ -14,20 +14,20 @@ namespace Magento\Reports\Block\Adminhtml\Shopcart\Customer;
 class Grid extends \Magento\Reports\Block\Adminhtml\Grid\Shopcart
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Customer\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Customer\CollectionFactory
      */
     protected $_customersFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Reports\Model\Resource\Customer\CollectionFactory $customersFactory
+     * @param \Magento\Reports\Model\ResourceModel\Customer\CollectionFactory $customersFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Reports\Model\Resource\Customer\CollectionFactory $customersFactory,
+        \Magento\Reports\Model\ResourceModel\Customer\CollectionFactory $customersFactory,
         array $data = []
     ) {
         $this->_customersFactory = $customersFactory;
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Product/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Product/Grid.php
index b30cc26bc9062015fbf03d0415efc11e1608dbe0..5612dd61c2a0f0ec6d94f47ff68ce746f33b88c0 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Product/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Shopcart/Product/Grid.php
@@ -14,7 +14,7 @@ namespace Magento\Reports\Block\Adminhtml\Shopcart\Product;
 class Grid extends \Magento\Reports\Block\Adminhtml\Grid\Shopcart
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Quote\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Quote\CollectionFactory
      */
     protected $quoteItemCollectionFactory;
 
@@ -26,7 +26,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\Shopcart
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Reports\Model\Resource\Quote\Item\CollectionFactory $quoteItemCollectionFactory
+     * @param \Magento\Reports\Model\ResourceModel\Quote\Item\CollectionFactory $quoteItemCollectionFactory
      * @param \Magento\Quote\Model\QueryResolver $queryResolver
      * @param array $data
      */
@@ -34,7 +34,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\Shopcart
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Quote\Model\QueryResolver $queryResolver,
-        \Magento\Reports\Model\Resource\Quote\Item\CollectionFactory $quoteItemCollectionFactory,
+        \Magento\Reports\Model\ResourceModel\Quote\Item\CollectionFactory $quoteItemCollectionFactory,
         array $data = []
     ) {
         $this->quoteItemCollectionFactory = $quoteItemCollectionFactory;
@@ -56,7 +56,7 @@ class Grid extends \Magento\Reports\Block\Adminhtml\Grid\Shopcart
      */
     protected function _prepareCollection()
     {
-        /** @var \Magento\Reports\Model\Resource\Quote\Item\Collection $collection */
+        /** @var \Magento\Reports\Model\ResourceModel\Quote\Item\Collection $collection */
         $collection = $this->quoteItemCollectionFactory->create();
         $collection->prepareActiveCartItems();
         $this->setCollection($collection);
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Wishlist.php b/app/code/Magento/Reports/Block/Adminhtml/Wishlist.php
index df114f5e653e6b121874ab9aad21a71174abcb43..646fcbd420342a40ac91de7fa34232b04d90bbf9 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Wishlist.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Wishlist.php
@@ -23,7 +23,7 @@ class Wishlist extends \Magento\Backend\Block\Template
     /**
      * Reports wishlist collection factory
      *
-     * @var \Magento\Reports\Model\Resource\Wishlist\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Wishlist\CollectionFactory
      */
     protected $_wishlistFactory;
 
@@ -31,12 +31,12 @@ class Wishlist extends \Magento\Backend\Block\Template
      * Constructor
      *
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Reports\Model\Resource\Wishlist\CollectionFactory $wishlistFactory
+     * @param \Magento\Reports\Model\ResourceModel\Wishlist\CollectionFactory $wishlistFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Reports\Model\Resource\Wishlist\CollectionFactory $wishlistFactory,
+        \Magento\Reports\Model\ResourceModel\Wishlist\CollectionFactory $wishlistFactory,
         array $data = []
     ) {
         $this->_wishlistFactory = $wishlistFactory;
diff --git a/app/code/Magento/Reports/Block/Adminhtml/Wishlist/Grid.php b/app/code/Magento/Reports/Block/Adminhtml/Wishlist/Grid.php
index 5bf34e223697af53011009c677639955ef78b89c..33a58e328c2692290b076566f1a5cbbf6d3245d2 100644
--- a/app/code/Magento/Reports/Block/Adminhtml/Wishlist/Grid.php
+++ b/app/code/Magento/Reports/Block/Adminhtml/Wishlist/Grid.php
@@ -13,20 +13,20 @@ namespace Magento\Reports\Block\Adminhtml\Wishlist;
 class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Wishlist\Product\CollectionFactory
+     * @var \Magento\Reports\Model\ResourceModel\Wishlist\Product\CollectionFactory
      */
     protected $_productsFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\Reports\Model\Resource\Wishlist\Product\CollectionFactory $productsFactory
+     * @param \Magento\Reports\Model\ResourceModel\Wishlist\Product\CollectionFactory $productsFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\Reports\Model\Resource\Wishlist\Product\CollectionFactory $productsFactory,
+        \Magento\Reports\Model\ResourceModel\Wishlist\Product\CollectionFactory $productsFactory,
         array $data = []
     ) {
         $this->_productsFactory = $productsFactory;
diff --git a/app/code/Magento/Reports/Block/Product/AbstractProduct.php b/app/code/Magento/Reports/Block/Product/AbstractProduct.php
index cf420b4d3cebeddc38077c1f3619ac4ae5fcf403..d553abdd22b223fd21e9ad136c04c3364adf1f5c 100644
--- a/app/code/Magento/Reports/Block/Product/AbstractProduct.php
+++ b/app/code/Magento/Reports/Block/Product/AbstractProduct.php
@@ -22,7 +22,7 @@ abstract class AbstractProduct extends \Magento\Catalog\Block\Product\AbstractPr
     /**
      * Product Index Collection
      *
-     * @var \Magento\Reports\Model\Resource\Product\Index\Collection\AbstractCollection
+     * @var \Magento\Reports\Model\ResourceModel\Product\Index\Collection\AbstractCollection
      */
     protected $_collection;
 
@@ -99,7 +99,7 @@ abstract class AbstractProduct extends \Magento\Catalog\Block\Product\AbstractPr
     /**
      * Retrieve Index Product Collection
      *
-     * @return \Magento\Reports\Model\Resource\Product\Index\Collection\AbstractCollection
+     * @return \Magento\Reports\Model\ResourceModel\Product\Index\Collection\AbstractCollection
      */
     public function getItemsCollection()
     {
diff --git a/app/code/Magento/Reports/Model/Event.php b/app/code/Magento/Reports/Model/Event.php
index 83275febc57204d376cd7edb8680f824efb70e62..167255f3d134de1c6872237122123d48a4c06272 100644
--- a/app/code/Magento/Reports/Model/Event.php
+++ b/app/code/Magento/Reports/Model/Event.php
@@ -8,8 +8,8 @@ namespace Magento\Reports\Model;
 /**
  * Events model
  *
- * @method \Magento\Reports\Model\Resource\Event _getResource()
- * @method \Magento\Reports\Model\Resource\Event getResource()
+ * @method \Magento\Reports\Model\ResourceModel\Event _getResource()
+ * @method \Magento\Reports\Model\ResourceModel\Event getResource()
  * @method string getLoggedAt()
  * @method \Magento\Reports\Model\Event setLoggedAt(string $value)
  * @method int getEventTypeId()
@@ -54,7 +54,7 @@ class Event extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory
      * @param \Magento\Reports\Model\Event\TypeFactory $eventTypeFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -63,7 +63,7 @@ class Event extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory,
         \Magento\Reports\Model\Event\TypeFactory $eventTypeFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -79,7 +79,7 @@ class Event extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Reports\Model\Resource\Event');
+        $this->_init('Magento\Reports\Model\ResourceModel\Event');
     }
 
     /**
diff --git a/app/code/Magento/Reports/Model/Event/Type.php b/app/code/Magento/Reports/Model/Event/Type.php
index 7a109d4a39a8f1a01e935c0666c0da27cb7d42a9..ce6e4b91827cf2f63391bd675d40427933cb4a42 100644
--- a/app/code/Magento/Reports/Model/Event/Type.php
+++ b/app/code/Magento/Reports/Model/Event/Type.php
@@ -8,8 +8,8 @@ namespace Magento\Reports\Model\Event;
 /**
  * Event type model
  *
- * @method \Magento\Reports\Model\Resource\Event\Type _getResource()
- * @method \Magento\Reports\Model\Resource\Event\Type getResource()
+ * @method \Magento\Reports\Model\ResourceModel\Event\Type _getResource()
+ * @method \Magento\Reports\Model\ResourceModel\Event\Type getResource()
  * @method string getEventName()
  * @method \Magento\Reports\Model\Event\Type setEventName(string $value)
  * @method int getCustomerLogin()
@@ -24,6 +24,6 @@ class Type extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Reports\Model\Resource\Event\Type');
+        $this->_init('Magento\Reports\Model\ResourceModel\Event\Type');
     }
 }
diff --git a/app/code/Magento/Reports/Model/Grouped/Collection.php b/app/code/Magento/Reports/Model/Grouped/Collection.php
index 3f00e36c1a7a7ec4d78f975baaa33bd3bc3f747d..3929c3440c44dccaea72d56184ab31f62041f7a2 100644
--- a/app/code/Magento/Reports/Model/Grouped/Collection.php
+++ b/app/code/Magento/Reports/Model/Grouped/Collection.php
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Data\Collection
     /**
      * Collection resource
      *
-     * @var \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected $_resourceCollection = null;
 
diff --git a/app/code/Magento/Reports/Model/Plugin/Log.php b/app/code/Magento/Reports/Model/Plugin/Log.php
index ebe366a43bfb902401bfa7b990f2678a4ef32f4f..5582de1f8fe447eb99578215496524c69c7c13c6 100644
--- a/app/code/Magento/Reports/Model/Plugin/Log.php
+++ b/app/code/Magento/Reports/Model/Plugin/Log.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Plugin for \Magento\Customer\Model\Resource\Visitor model
+ * Plugin for \Magento\Customer\Model\ResourceModel\Visitor model
  *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
@@ -42,15 +42,15 @@ class Log
     /**
      * Clean events by old visitors after plugin for clean method
      *
-     * @param \Magento\Customer\Model\Resource\Visitor $subject
-     * @param \Magento\Customer\Model\Resource\Visitor $logResourceModel
+     * @param \Magento\Customer\Model\ResourceModel\Visitor $subject
+     * @param \Magento\Customer\Model\ResourceModel\Visitor $logResourceModel
      *
-     * @return \Magento\Customer\Model\Resource\Visitor
+     * @return \Magento\Customer\Model\ResourceModel\Visitor
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      *
      * @see Global Log Clean Settings
      */
-    public function afterClean(\Magento\Customer\Model\Resource\Visitor $subject, $logResourceModel)
+    public function afterClean(\Magento\Customer\Model\ResourceModel\Visitor $subject, $logResourceModel)
     {
         $this->_reportEvent->clean();
         $this->_comparedProductIdx->clean();
diff --git a/app/code/Magento/Reports/Model/Product/Index/AbstractIndex.php b/app/code/Magento/Reports/Model/Product/Index/AbstractIndex.php
index 76a4438f813ad54ca06e20afd8368f970b4ca33e..6380571f21fdf005fe3648d3c1b30d6d3ffad30f 100644
--- a/app/code/Magento/Reports/Model/Product/Index/AbstractIndex.php
+++ b/app/code/Magento/Reports/Model/Product/Index/AbstractIndex.php
@@ -56,7 +56,7 @@ abstract class AbstractIndex extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Session\Generic $reportSession
      * @param \Magento\Catalog\Model\Product\Visibility $productVisibility
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -70,7 +70,7 @@ abstract class AbstractIndex extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Session\Generic $reportSession,
         \Magento\Catalog\Model\Product\Visibility $productVisibility,
         \Magento\Framework\Stdlib\DateTime $dateTime,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -156,7 +156,7 @@ abstract class AbstractIndex extends \Magento\Framework\Model\AbstractModel
     /**
      * Retrieve resource instance wrapper
      *
-     * @return \Magento\Reports\Model\Resource\Product\Index\AbstractIndex
+     * @return \Magento\Reports\Model\ResourceModel\Product\Index\AbstractIndex
      */
     protected function _getResource()
     {
diff --git a/app/code/Magento/Reports/Model/Product/Index/Compared.php b/app/code/Magento/Reports/Model/Product/Index/Compared.php
index f58560c353b7e8320f6a653869260df5b1a3a2d7..3583bbbdf46fbfed572514d8d14bba4ddc577235 100644
--- a/app/code/Magento/Reports/Model/Product/Index/Compared.php
+++ b/app/code/Magento/Reports/Model/Product/Index/Compared.php
@@ -8,8 +8,8 @@ namespace Magento\Reports\Model\Product\Index;
 /**
  * Catalog Compared Product Index Model
  *
- * @method \Magento\Reports\Model\Resource\Product\Index\Compared _getResource()
- * @method \Magento\Reports\Model\Resource\Product\Index\Compared getResource()
+ * @method \Magento\Reports\Model\ResourceModel\Product\Index\Compared _getResource()
+ * @method \Magento\Reports\Model\ResourceModel\Product\Index\Compared getResource()
  * @method \Magento\Reports\Model\Product\Index\Compared setVisitorId(int $value)
  * @method \Magento\Reports\Model\Product\Index\Compared setCustomerId(int $value)
  * @method int getProductId()
@@ -46,7 +46,7 @@ class Compared extends \Magento\Reports\Model\Product\Index\AbstractIndex
      * @param \Magento\Catalog\Model\Product\Visibility $productVisibility
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Catalog\Helper\Product\Compare $productCompare
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -61,7 +61,7 @@ class Compared extends \Magento\Reports\Model\Product\Index\AbstractIndex
         \Magento\Catalog\Model\Product\Visibility $productVisibility,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Catalog\Helper\Product\Compare $productCompare,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -88,7 +88,7 @@ class Compared extends \Magento\Reports\Model\Product\Index\AbstractIndex
      */
     protected function _construct()
     {
-        $this->_init('Magento\Reports\Model\Resource\Product\Index\Compared');
+        $this->_init('Magento\Reports\Model\ResourceModel\Product\Index\Compared');
     }
 
     /**
diff --git a/app/code/Magento/Reports/Model/Product/Index/Viewed.php b/app/code/Magento/Reports/Model/Product/Index/Viewed.php
index 3806a1a053eafb98c2f2d83dd53ef33b9da631e6..408d09a34f0f42113c1aa11054198a2cd2d3bdcc 100644
--- a/app/code/Magento/Reports/Model/Product/Index/Viewed.php
+++ b/app/code/Magento/Reports/Model/Product/Index/Viewed.php
@@ -8,8 +8,8 @@ namespace Magento\Reports\Model\Product\Index;
 /**
  * Catalog Viewed Product Index
  *
- * @method \Magento\Reports\Model\Resource\Product\Index\Viewed _getResource()
- * @method \Magento\Reports\Model\Resource\Product\Index\Viewed getResource()
+ * @method \Magento\Reports\Model\ResourceModel\Product\Index\Viewed _getResource()
+ * @method \Magento\Reports\Model\ResourceModel\Product\Index\Viewed getResource()
  * @method \Magento\Reports\Model\Product\Index\Viewed setVisitorId(int $value)
  * @method \Magento\Reports\Model\Product\Index\Viewed setCustomerId(int $value)
  * @method int getProductId()
@@ -36,7 +36,7 @@ class Viewed extends \Magento\Reports\Model\Product\Index\AbstractIndex
      */
     protected function _construct()
     {
-        $this->_init('Magento\Reports\Model\Resource\Product\Index\Viewed');
+        $this->_init('Magento\Reports\Model\ResourceModel\Product\Index\Viewed');
     }
 
     /**
diff --git a/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed/Collection.php b/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed/Collection.php
deleted file mode 100644
index d1b75ea2a05c4b8736a63ff611529784d5a8924c..0000000000000000000000000000000000000000
--- a/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed/Collection.php
+++ /dev/null
@@ -1,31 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\Reports\Model\Resource\Report\Product\Viewed;
-
-class Collection extends \Magento\Sales\Model\Resource\Report\Bestsellers\Collection
-{
-    /**
-     * Tables per period
-     *
-     * @var array
-     */
-    protected $tableForPeriod = [
-        'daily' => \Magento\Reports\Model\Resource\Report\Product\Viewed::AGGREGATION_DAILY,
-        'monthly' => \Magento\Reports\Model\Resource\Report\Product\Viewed::AGGREGATION_MONTHLY,
-        'yearly' => \Magento\Reports\Model\Resource\Report\Product\Viewed::AGGREGATION_YEARLY,
-    ];
-
-    /**
-     * Return ordered filed
-     *
-     * @return string
-     */
-    protected function getOrderedField()
-    {
-        return 'views_num';
-    }
-}
diff --git a/app/code/Magento/Reports/Model/Resource/Accounts/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Accounts/Collection.php
similarity index 91%
rename from app/code/Magento/Reports/Model/Resource/Accounts/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Accounts/Collection.php
index f10aabd45e3da22cff770dd4e7ccef69a0c96d24..77f111bd19bbaffe307153ed853b38697b53b28f 100644
--- a/app/code/Magento/Reports/Model/Resource/Accounts/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Accounts/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Accounts;
+namespace Magento\Reports\Model\ResourceModel\Accounts;
 
-class Collection extends \Magento\Reports\Model\Resource\Customer\Collection
+class Collection extends \Magento\Reports\Model\ResourceModel\Customer\Collection
 {
     /**
      * Join created_at and accounts fields
diff --git a/app/code/Magento/Reports/Model/Resource/Accounts/Collection/Initial.php b/app/code/Magento/Reports/Model/ResourceModel/Accounts/Collection/Initial.php
similarity index 67%
rename from app/code/Magento/Reports/Model/Resource/Accounts/Collection/Initial.php
rename to app/code/Magento/Reports/Model/ResourceModel/Accounts/Collection/Initial.php
index 4543ef1f4cdcd4e56e65702a3d7011d77cb7f76c..8e14bb6bd62e632f5abed82d704c582e40e46e3c 100644
--- a/app/code/Magento/Reports/Model/Resource/Accounts/Collection/Initial.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Accounts/Collection/Initial.php
@@ -9,13 +9,13 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Accounts\Collection;
+namespace Magento\Reports\Model\ResourceModel\Accounts\Collection;
 
-class Initial extends \Magento\Reports\Model\Resource\Report\Collection
+class Initial extends \Magento\Reports\Model\ResourceModel\Report\Collection
 {
     /**
      * Report sub-collection class name
      * @var string
      */
-    protected $_reportCollection = 'Magento\Reports\Model\Resource\Accounts\Collection';
+    protected $_reportCollection = 'Magento\Reports\Model\ResourceModel\Accounts\Collection';
 }
diff --git a/app/code/Magento/Reports/Model/Resource/Customer/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php
similarity index 87%
rename from app/code/Magento/Reports/Model/Resource/Customer/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php
index c9891490981f4c3709facb04fe5e6ff659a64669..1f7fe62304519f215152ce6e5932b86ef27d9bbb 100644
--- a/app/code/Magento/Reports/Model/Resource/Customer/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Customer/Collection.php
@@ -7,12 +7,12 @@
 /**
  * Customers Report collection
  */
-namespace Magento\Reports\Model\Resource\Customer;
+namespace Magento\Reports\Model\ResourceModel\Customer;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Customer\Model\Resource\Customer\Collection
+class Collection extends \Magento\Customer\Model\ResourceModel\Customer\Collection
 {
     /**
      * Add order statistics flag
@@ -62,12 +62,12 @@ class Collection extends \Magento\Customer\Model\Resource\Customer\Collection
     protected $quoteRepository;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Item\CollectionFactory
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory
      */
     protected $_quoteItemFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Collection
+     * @var \Magento\Sales\Model\ResourceModel\Order\Collection
      */
     protected $orderResource;
 
@@ -77,15 +77,15 @@ class Collection extends \Magento\Customer\Model\Resource\Customer\Collection
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Eav\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Eav\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot
+     * @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\Model\Resource\Quote\Item\CollectionFactory $quoteItemFactory
-     * @param \Magento\Sales\Model\Resource\Order\Collection $orderResource
+     * @param \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory $quoteItemFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Collection $orderResource
      * @param mixed $connection
      * @param string $modelName
      *
@@ -97,15 +97,15 @@ class Collection extends \Magento\Customer\Model\Resource\Customer\Collection
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Eav\Model\Resource\Helper $resourceHelper,
+        \Magento\Eav\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DataObject\Copy\Config $fieldsetConfig,
         \Magento\Quote\Model\QuoteRepository $quoteRepository,
-        \Magento\Quote\Model\Resource\Quote\Item\CollectionFactory $quoteItemFactory,
-        \Magento\Sales\Model\Resource\Order\Collection $orderResource,
+        \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory $quoteItemFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Collection $orderResource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
         $modelName = self::CUSTOMER_MODEL_NAME
     ) {
diff --git a/app/code/Magento/Reports/Model/Resource/Customer/Orders/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Customer/Orders/Collection.php
similarity index 87%
rename from app/code/Magento/Reports/Model/Resource/Customer/Orders/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Customer/Orders/Collection.php
index bbbe3ae65fa36d6d2e14ce95c317b5a42c85d521..3c6fb90255dc13bf8c562500deca3d691feb04ea 100644
--- a/app/code/Magento/Reports/Model/Resource/Customer/Orders/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Customer/Orders/Collection.php
@@ -9,9 +9,12 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Customer\Orders;
+namespace Magento\Reports\Model\ResourceModel\Customer\Orders;
 
-class Collection extends \Magento\Reports\Model\Resource\Order\Collection
+/**
+ * @SuppressWarnings(PHPMD.DepthOfInheritance)
+ */
+class Collection extends \Magento\Reports\Model\ResourceModel\Order\Collection
 {
     /**
      * Join fields
diff --git a/app/code/Magento/Reports/Model/Resource/Customer/Orders/Collection/Initial.php b/app/code/Magento/Reports/Model/ResourceModel/Customer/Orders/Collection/Initial.php
similarity index 65%
rename from app/code/Magento/Reports/Model/Resource/Customer/Orders/Collection/Initial.php
rename to app/code/Magento/Reports/Model/ResourceModel/Customer/Orders/Collection/Initial.php
index fbff0e206ef6f406ab450c022d90e809c9732f9e..d73c056c8739a86694eae0b96c2190a8eecb2588 100644
--- a/app/code/Magento/Reports/Model/Resource/Customer/Orders/Collection/Initial.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Customer/Orders/Collection/Initial.php
@@ -9,13 +9,13 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Customer\Orders\Collection;
+namespace Magento\Reports\Model\ResourceModel\Customer\Orders\Collection;
 
-class Initial extends \Magento\Reports\Model\Resource\Report\Collection
+class Initial extends \Magento\Reports\Model\ResourceModel\Report\Collection
 {
     /**
      * Report sub-collection class name
      * @var string
      */
-    protected $_reportCollection = 'Magento\Reports\Model\Resource\Customer\Orders\Collection';
+    protected $_reportCollection = 'Magento\Reports\Model\ResourceModel\Customer\Orders\Collection';
 }
diff --git a/app/code/Magento/Reports/Model/Resource/Customer/Totals/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Customer/Totals/Collection.php
similarity index 87%
rename from app/code/Magento/Reports/Model/Resource/Customer/Totals/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Customer/Totals/Collection.php
index 60733cd761438e15bfc5998ebc3dd9f571c74cb2..7783cd7cc199d9e7f6f82d8a38e068e014406976 100644
--- a/app/code/Magento/Reports/Model/Resource/Customer/Totals/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Customer/Totals/Collection.php
@@ -9,9 +9,12 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Customer\Totals;
+namespace Magento\Reports\Model\ResourceModel\Customer\Totals;
 
-class Collection extends \Magento\Reports\Model\Resource\Order\Collection
+/**
+ * @SuppressWarnings(PHPMD.DepthOfInheritance)
+ */
+class Collection extends \Magento\Reports\Model\ResourceModel\Order\Collection
 {
     /**
      * Join fields
diff --git a/app/code/Magento/Reports/Model/Resource/Customer/Totals/Collection/Initial.php b/app/code/Magento/Reports/Model/ResourceModel/Customer/Totals/Collection/Initial.php
similarity index 66%
rename from app/code/Magento/Reports/Model/Resource/Customer/Totals/Collection/Initial.php
rename to app/code/Magento/Reports/Model/ResourceModel/Customer/Totals/Collection/Initial.php
index 7584f26c7ce38257b9bfdd6b6b2ef99cdf223c68..6f302f346739917194113480fe65731efb579e43 100644
--- a/app/code/Magento/Reports/Model/Resource/Customer/Totals/Collection/Initial.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Customer/Totals/Collection/Initial.php
@@ -9,14 +9,14 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Customer\Totals\Collection;
+namespace Magento\Reports\Model\ResourceModel\Customer\Totals\Collection;
 
-class Initial extends \Magento\Reports\Model\Resource\Report\Collection
+class Initial extends \Magento\Reports\Model\ResourceModel\Report\Collection
 {
     /**
      * Report sub-collection class name
      *
      * @var string
      */
-    protected $_reportCollection = 'Magento\Reports\Model\Resource\Customer\Totals\Collection';
+    protected $_reportCollection = 'Magento\Reports\Model\ResourceModel\Customer\Totals\Collection';
 }
diff --git a/app/code/Magento/Reports/Model/Resource/Event.php b/app/code/Magento/Reports/Model/ResourceModel/Event.php
similarity index 96%
rename from app/code/Magento/Reports/Model/Resource/Event.php
rename to app/code/Magento/Reports/Model/ResourceModel/Event.php
index 11b05e54f6bdd052228df4a178029d4d8cef9c7b..1ae3c00f5533827f15e9430340b4b0140a89539f 100644
--- a/app/code/Magento/Reports/Model/Resource/Event.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Event.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Reports\Model\Resource;
+namespace Magento\Reports\Model\ResourceModel;
 
 /**
  * Report events resource model
  */
-class Event extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Event extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Core store config
@@ -23,13 +23,13 @@ class Event extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         $connectionName = null
diff --git a/app/code/Magento/Reports/Model/Resource/Event/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Event/Collection.php
similarity index 90%
rename from app/code/Magento/Reports/Model/Resource/Event/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Event/Collection.php
index 94124028fdb3716c430e6c44bfdf3497786988b0..ddd9ec681929a1d844aa4f3bac803e960f40db93 100644
--- a/app/code/Magento/Reports/Model/Resource/Event/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Event/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Event;
+namespace Magento\Reports\Model\ResourceModel\Event;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store Ids
@@ -27,7 +27,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Reports\Model\Event', 'Magento\Reports\Model\Resource\Event');
+        $this->_init('Magento\Reports\Model\Event', 'Magento\Reports\Model\ResourceModel\Event');
     }
 
     /**
diff --git a/app/code/Magento/Reports/Model/Resource/Event/Type.php b/app/code/Magento/Reports/Model/ResourceModel/Event/Type.php
similarity index 76%
rename from app/code/Magento/Reports/Model/Resource/Event/Type.php
rename to app/code/Magento/Reports/Model/ResourceModel/Event/Type.php
index c7060ad9f5392df92804cc20fba4934933333498..3ff620e1eb30de0294c1ba1cd67e73371db66cbc 100644
--- a/app/code/Magento/Reports/Model/Resource/Event/Type.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Event/Type.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Event;
+namespace Magento\Reports\Model\ResourceModel\Event;
 
-class Type extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Type extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Main table initialization
diff --git a/app/code/Magento/Reports/Model/Resource/Event/Type/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Event/Type/Collection.php
similarity index 74%
rename from app/code/Magento/Reports/Model/Resource/Event/Type/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Event/Type/Collection.php
index b9e4ca4c630f0df81aa6c5865ee8160ca6bf3ff6..12f0c969f3bb2b614c8f452e49f53cac172d990c 100644
--- a/app/code/Magento/Reports/Model/Resource/Event/Type/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Event/Type/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Event\Type;
+namespace Magento\Reports\Model\ResourceModel\Event\Type;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
@@ -20,7 +20,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Reports\Model\Event\Type', 'Magento\Reports\Model\Resource\Event\Type');
+        $this->_init('Magento\Reports\Model\Event\Type', 'Magento\Reports\Model\ResourceModel\Event\Type');
     }
 
     /**
diff --git a/app/code/Magento/Reports/Model/Resource/Helper.php b/app/code/Magento/Reports/Model/ResourceModel/Helper.php
similarity index 91%
rename from app/code/Magento/Reports/Model/Resource/Helper.php
rename to app/code/Magento/Reports/Model/ResourceModel/Helper.php
index f06188cab6ebb009f80d8b7c670031ec94810d72..18fdc4498e865ba3120d8d0ba3243253b9f68e21 100644
--- a/app/code/Magento/Reports/Model/Resource/Helper.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Helper.php
@@ -9,15 +9,15 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource;
+namespace Magento\Reports\Model\ResourceModel;
 
-class Helper extends \Magento\Framework\DB\Helper implements \Magento\Reports\Model\Resource\HelperInterface
+class Helper extends \Magento\Framework\DB\Helper implements \Magento\Reports\Model\ResourceModel\HelperInterface
 {
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param string $modulePrefix
      */
-    public function __construct(\Magento\Framework\App\Resource $resource, $modulePrefix = 'reports')
+    public function __construct(\Magento\Framework\App\ResourceConnection $resource, $modulePrefix = 'reports')
     {
         parent::__construct($resource, $modulePrefix);
     }
diff --git a/app/code/Magento/Reports/Model/Resource/HelperInterface.php b/app/code/Magento/Reports/Model/ResourceModel/HelperInterface.php
similarity index 94%
rename from app/code/Magento/Reports/Model/Resource/HelperInterface.php
rename to app/code/Magento/Reports/Model/ResourceModel/HelperInterface.php
index 7b2deb0cb66c06323d891bb74f8a41bdc6c47946..89e70d70f31c42766809203d38d426327d0edd65 100644
--- a/app/code/Magento/Reports/Model/Resource/HelperInterface.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/HelperInterface.php
@@ -7,7 +7,7 @@
 /**
  * Reports resource helper interface
  */
-namespace Magento\Reports\Model\Resource;
+namespace Magento\Reports\Model\ResourceModel;
 
 interface HelperInterface
 {
diff --git a/app/code/Magento/Reports/Model/Resource/Order/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Order/Collection.php
similarity index 97%
rename from app/code/Magento/Reports/Model/Resource/Order/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Order/Collection.php
index 928f1128c3fab4348385f90921ffe88ec34587cf..d0d7195bc3f7b23641a3ec2d604f4726739ef8d6 100644
--- a/app/code/Magento/Reports/Model/Resource/Order/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Order/Collection.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Reports\Model\Resource\Order;
+namespace Magento\Reports\Model\ResourceModel\Order;
 
 use Magento\Framework\DB\Select;
 
@@ -14,7 +14,7 @@ use Magento\Framework\DB\Select;
  * @author      Magento Core Team <core@magentocommerce.com>
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Sales\Model\Resource\Order\Collection
+class Collection extends \Magento\Sales\Model\ResourceModel\Order\Collection
 {
     /**
      * Is live
@@ -61,7 +61,7 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
     /**
      * Reports order factory
      *
-     * @var \Magento\Sales\Model\Resource\Report\OrderFactory
+     * @var \Magento\Sales\Model\ResourceModel\Report\OrderFactory
      */
     protected $_reportOrderFactory;
 
@@ -72,15 +72,15 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Framework\DB\Helper $coreResourceHelper
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Sales\Model\Order\Config $orderConfig
-     * @param \Magento\Sales\Model\Resource\Report\OrderFactory $reportOrderFactory
+     * @param \Magento\Sales\Model\ResourceModel\Report\OrderFactory $reportOrderFactory
      * @param null $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -89,15 +89,15 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DB\Helper $coreResourceHelper,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Sales\Model\Order\Config $orderConfig,
-        \Magento\Sales\Model\Resource\Report\OrderFactory $reportOrderFactory,
+        \Magento\Sales\Model\ResourceModel\Report\OrderFactory $reportOrderFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Collection.php
similarity index 92%
rename from app/code/Magento/Reports/Model/Resource/Product/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Product/Collection.php
index 49920bc44968ede6feb108f28bbd73edb9e9d2d0..65ecfee83f4f36e6c0216871b8c91d588ab4c17b 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Collection.php
@@ -9,12 +9,12 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Product;
+namespace Magento\Reports\Model\ResourceModel\Product;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
+class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
 {
     const SELECT_COUNT_SQL_TYPE_CART = 1;
 
@@ -57,7 +57,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
     protected $_productType;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Collection
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Collection
      */
     protected $quoteResource;
 
@@ -67,24 +67,24 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrl
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Customer\Api\GroupManagementInterface $groupManagement
-     * @param \Magento\Catalog\Model\Resource\Product $product
+     * @param \Magento\Catalog\Model\ResourceModel\Product $product
      * @param \Magento\Reports\Model\Event\TypeFactory $eventTypeFactory
      * @param \Magento\Catalog\Model\Product\Type $productType
-     * @param \Magento\Quote\Model\Resource\Quote\Collection $quoteResource
+     * @param \Magento\Quote\Model\ResourceModel\Quote\Collection $quoteResource
      * @param mixed $connection
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -95,24 +95,24 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory,
-        \Magento\Catalog\Model\Resource\Url $catalogUrl,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Customer\Api\GroupManagementInterface $groupManagement,
-        \Magento\Catalog\Model\Resource\Product $product,
+        \Magento\Catalog\Model\ResourceModel\Product $product,
         \Magento\Reports\Model\Event\TypeFactory $eventTypeFactory,
         \Magento\Catalog\Model\Product\Type $productType,
-        \Magento\Quote\Model\Resource\Quote\Collection $quoteResource,
+        \Magento\Quote\Model\ResourceModel\Quote\Collection $quoteResource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $this->setProductEntityId($product->getEntityIdField());
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Downloads/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Downloads/Collection.php
similarity index 94%
rename from app/code/Magento/Reports/Model/Resource/Product/Downloads/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Product/Downloads/Collection.php
index ecda59506a65c8ff14fa33eaf14bdc9c9363b0e8..319355a7706b0f1326c46fd5783089252c0fb9f3 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Downloads/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Downloads/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Product\Downloads;
+namespace Magento\Reports\Model\ResourceModel\Product\Downloads;
 
-class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
+class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
 {
     /**
      * Identifier field name
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Index/AbstractIndex.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/AbstractIndex.php
similarity index 93%
rename from app/code/Magento/Reports/Model/Resource/Product/Index/AbstractIndex.php
rename to app/code/Magento/Reports/Model/ResourceModel/Product/Index/AbstractIndex.php
index 793a4f34e9449ede84d299179ed397544fd3d62e..5c9a3118499918ff74b3dcbad32090d6511d801b 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Index/AbstractIndex.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/AbstractIndex.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Reports\Model\Resource\Product\Index;
+namespace Magento\Reports\Model\ResourceModel\Product\Index;
 
 /**
  * Reports Product Index Abstract Resource Model
  */
-abstract class AbstractIndex extends \Magento\Framework\Model\Resource\Db\AbstractDb
+abstract class AbstractIndex extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * DateItime instance
@@ -21,21 +21,21 @@ abstract class AbstractIndex extends \Magento\Framework\Model\Resource\Db\Abstra
     /**
      * Reports helper
      *
-     * @var \Magento\Reports\Model\Resource\Helper
+     * @var \Magento\Reports\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
     /**
      * Constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
-     * @param \Magento\Reports\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
+     * @param \Magento\Reports\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
-        \Magento\Reports\Model\Resource\Helper $resourceHelper,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
+        \Magento\Reports\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
     ) {
@@ -132,7 +132,7 @@ abstract class AbstractIndex extends \Magento\Framework\Model\Resource\Db\Abstra
      * Save Product Index data (forced save)
      *
      * @param \Magento\Framework\Model\AbstractModel $object
-     * @return $this|\Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return $this|\Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function save(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Index/Collection/AbstractCollection.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/Collection/AbstractCollection.php
similarity index 92%
rename from app/code/Magento/Reports/Model/Resource/Product/Index/Collection/AbstractCollection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Product/Index/Collection/AbstractCollection.php
index 36e51896b2b44ec81538611707d6e1f40c6e2f60..87100f307850e71235f35f7121397ebb0a866ffd 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Index/Collection/AbstractCollection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/Collection/AbstractCollection.php
@@ -9,12 +9,12 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Product\Index\Collection;
+namespace Magento\Reports\Model\ResourceModel\Product\Index\Collection;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-abstract class AbstractCollection extends \Magento\Catalog\Model\Resource\Product\Collection
+abstract class AbstractCollection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
 {
     /**
      * Customer id
@@ -34,16 +34,16 @@ abstract class AbstractCollection extends \Magento\Catalog\Model\Resource\Produc
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrl
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
@@ -59,16 +59,16 @@ abstract class AbstractCollection extends \Magento\Catalog\Model\Resource\Produc
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory,
-        \Magento\Catalog\Model\Resource\Url $catalogUrl,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Stdlib\DateTime $dateTime,
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Index/Compared.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/Compared.php
similarity index 74%
rename from app/code/Magento/Reports/Model/Resource/Product/Index/Compared.php
rename to app/code/Magento/Reports/Model/ResourceModel/Product/Index/Compared.php
index 3622e0ba1dd64e8abe5df641db47332793e2b1f0..fc963fb6acdb6c975361ed6080a5fa30ce0f0fc5 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Index/Compared.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/Compared.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Product\Index;
+namespace Magento\Reports\Model\ResourceModel\Product\Index;
 
-class Compared extends \Magento\Reports\Model\Resource\Product\Index\AbstractIndex
+class Compared extends \Magento\Reports\Model\ResourceModel\Product\Index\AbstractIndex
 {
     /**
      * Initialize connection and main resource table
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Index/Compared/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/Compared/Collection.php
similarity index 71%
rename from app/code/Magento/Reports/Model/Resource/Product/Index/Compared/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Product/Index/Compared/Collection.php
index 53e12e4da21a45b2df3146e144ca53f9c35f9e39..12c1e5bcc33c4b09fff13a8af6bc0da2bd94d5ee 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Index/Compared/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/Compared/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Product\Index\Compared;
+namespace Magento\Reports\Model\ResourceModel\Product\Index\Compared;
 
-class Collection extends \Magento\Reports\Model\Resource\Product\Index\Collection\AbstractCollection
+class Collection extends \Magento\Reports\Model\ResourceModel\Product\Index\Collection\AbstractCollection
 {
     /**
      * Retrieve Product Index table name
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Index/Viewed.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/Viewed.php
similarity index 76%
rename from app/code/Magento/Reports/Model/Resource/Product/Index/Viewed.php
rename to app/code/Magento/Reports/Model/ResourceModel/Product/Index/Viewed.php
index 93a22cf0011189fb11b3306525879f4f7b4685a1..3768088d3adef03b79b8ef8685a58a6ece74a8b2 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Index/Viewed.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/Viewed.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Product\Index;
+namespace Magento\Reports\Model\ResourceModel\Product\Index;
 
-class Viewed extends \Magento\Reports\Model\Resource\Product\Index\AbstractIndex
+class Viewed extends \Magento\Reports\Model\ResourceModel\Product\Index\AbstractIndex
 {
     /**
      * Initialize connection and main resource table
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Index/Viewed/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/Viewed/Collection.php
similarity index 71%
rename from app/code/Magento/Reports/Model/Resource/Product/Index/Viewed/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Product/Index/Viewed/Collection.php
index b0193fc4de44410ac7b50dd2769157661a009c6e..af22eb00fc03f0f60c247be79f56cf1817dd7887 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Index/Viewed/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Index/Viewed/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Product\Index\Viewed;
+namespace Magento\Reports\Model\ResourceModel\Product\Index\Viewed;
 
-class Collection extends \Magento\Reports\Model\Resource\Product\Index\Collection\AbstractCollection
+class Collection extends \Magento\Reports\Model\ResourceModel\Product\Index\Collection\AbstractCollection
 {
     /**
      * Retrieve Product Index table name
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Lowstock/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Lowstock/Collection.php
similarity index 89%
rename from app/code/Magento/Reports/Model/Resource/Product/Lowstock/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Product/Lowstock/Collection.php
index 00b95d6259d3c6dc2161c5733819cc414cc65560..171a909702ef7cdd7416fab8e440584075a6c123 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Lowstock/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Lowstock/Collection.php
@@ -9,12 +9,12 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Product\Lowstock;
+namespace Magento\Reports\Model\ResourceModel\Product\Lowstock;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Reports\Model\Resource\Product\Collection
+class Collection extends \Magento\Reports\Model\ResourceModel\Product\Collection
 {
     /**
      * Flag about is joined CatalogInventory Stock Item
@@ -41,7 +41,7 @@ class Collection extends \Magento\Reports\Model\Resource\Product\Collection
     protected $stockConfiguration;
 
     /**
-     * @var \Magento\CatalogInventory\Model\Resource\Stock\Item
+     * @var \Magento\CatalogInventory\Model\ResourceModel\Stock\Item
      */
     protected $_itemResource;
 
@@ -51,27 +51,27 @@ class Collection extends \Magento\Reports\Model\Resource\Product\Collection
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrl
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Customer\Api\GroupManagementInterface $groupManagement
-     * @param \Magento\Catalog\Model\Resource\Product $product
+     * @param \Magento\Catalog\Model\ResourceModel\Product $product
      * @param \Magento\Reports\Model\Event\TypeFactory $eventTypeFactory
      * @param \Magento\Catalog\Model\Product\Type $productType
-     * @param \Magento\Quote\Model\Resource\Quote\Collection $quoteResource
+     * @param \Magento\Quote\Model\ResourceModel\Quote\Collection $quoteResource
      * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
      * @param \Magento\CatalogInventory\Api\StockConfigurationInterface $stockConfiguration
-     * @param \Magento\CatalogInventory\Model\Resource\Stock\Item $itemResource
+     * @param \Magento\CatalogInventory\Model\ResourceModel\Stock\Item $itemResource
      * @param mixed $connection
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -82,27 +82,27 @@ class Collection extends \Magento\Reports\Model\Resource\Product\Collection
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory,
-        \Magento\Catalog\Model\Resource\Url $catalogUrl,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Customer\Api\GroupManagementInterface $groupManagement,
-        \Magento\Catalog\Model\Resource\Product $product,
+        \Magento\Catalog\Model\ResourceModel\Product $product,
         \Magento\Reports\Model\Event\TypeFactory $eventTypeFactory,
         \Magento\Catalog\Model\Product\Type $productType,
-        \Magento\Quote\Model\Resource\Quote\Collection $quoteResource,
+        \Magento\Quote\Model\ResourceModel\Quote\Collection $quoteResource,
         \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
         \Magento\CatalogInventory\Api\StockConfigurationInterface $stockConfiguration,
-        \Magento\CatalogInventory\Model\Resource\Stock\Item $itemResource,
+        \Magento\CatalogInventory\Model\ResourceModel\Stock\Item $itemResource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         parent::__construct(
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Sold/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Sold/Collection.php
similarity index 95%
rename from app/code/Magento/Reports/Model/Resource/Product/Sold/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Product/Sold/Collection.php
index 43a41b06cc7b13219f170ac485f7ab0fb1dcf7a3..68d20bfe922bb67d1c8513202a781cd06ec21a19 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Sold/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Sold/Collection.php
@@ -9,12 +9,12 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Product\Sold;
+namespace Magento\Reports\Model\ResourceModel\Product\Sold;
 
 /**
  * @SuppressWarnings(PHPMD.DepthOfInheritance)
  */
-class Collection extends \Magento\Reports\Model\Resource\Order\Collection
+class Collection extends \Magento\Reports\Model\ResourceModel\Order\Collection
 {
     /**
      * Set Date range to collection
diff --git a/app/code/Magento/Reports/Model/Resource/Product/Sold/Collection/Initial.php b/app/code/Magento/Reports/Model/ResourceModel/Product/Sold/Collection/Initial.php
similarity index 66%
rename from app/code/Magento/Reports/Model/Resource/Product/Sold/Collection/Initial.php
rename to app/code/Magento/Reports/Model/ResourceModel/Product/Sold/Collection/Initial.php
index 04a94b3f7d8c280d9a2a316f949285982eb44314..4f29d5a8f28eb8e71bd4b75a20bab65a5be36210 100644
--- a/app/code/Magento/Reports/Model/Resource/Product/Sold/Collection/Initial.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Product/Sold/Collection/Initial.php
@@ -9,14 +9,14 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Product\Sold\Collection;
+namespace Magento\Reports\Model\ResourceModel\Product\Sold\Collection;
 
-class Initial extends \Magento\Reports\Model\Resource\Report\Collection
+class Initial extends \Magento\Reports\Model\ResourceModel\Report\Collection
 {
     /**
      * Report sub-collection class name
      *
      * @var string
      */
-    protected $_reportCollection = 'Magento\Reports\Model\Resource\Product\Sold\Collection';
+    protected $_reportCollection = 'Magento\Reports\Model\ResourceModel\Product\Sold\Collection';
 }
diff --git a/app/code/Magento/Reports/Model/Resource/Quote/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Quote/Collection.php
similarity index 89%
rename from app/code/Magento/Reports/Model/Resource/Quote/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Quote/Collection.php
index be464a2cc53440c8101d6128ff94569f27ddc9de..58f87efc347a4b848f1ce518654f1a4fd2239286 100644
--- a/app/code/Magento/Reports/Model/Resource/Quote/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Quote/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Reports\Model\Resource\Quote;
+namespace Magento\Reports\Model\ResourceModel\Quote;
 
-class Collection extends \Magento\Quote\Model\Resource\Quote\Collection
+class Collection extends \Magento\Quote\Model\ResourceModel\Quote\Collection
 {
     /**
-     * @var \Magento\Customer\Model\Resource\Customer
+     * @var \Magento\Customer\Model\ResourceModel\Customer
      */
     protected $customerResource;
 
@@ -17,20 +17,20 @@ class Collection extends \Magento\Quote\Model\Resource\Quote\Collection
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot
-     * @param \Magento\Customer\Model\Resource\Customer $customerResource
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
-        \Magento\Customer\Model\Resource\Customer $customerResource,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Customer\Model\ResourceModel\Customer $customerResource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
diff --git a/app/code/Magento/Reports/Model/Resource/Quote/CollectionFactory.php b/app/code/Magento/Reports/Model/ResourceModel/Quote/CollectionFactory.php
similarity index 79%
rename from app/code/Magento/Reports/Model/Resource/Quote/CollectionFactory.php
rename to app/code/Magento/Reports/Model/ResourceModel/Quote/CollectionFactory.php
index c08c6e1dd00759b85bf56409a58890d5a9539626..3e5da7126cb1de7b85facaccb9c0fbe5ce8e0b25 100644
--- a/app/code/Magento/Reports/Model/Resource/Quote/CollectionFactory.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Quote/CollectionFactory.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Reports\Model\Resource\Quote;
+namespace Magento\Reports\Model\ResourceModel\Quote;
 
 /**
- * Factory class for @see \Magento\Reports\Model\Resource\Quote\Collection
+ * Factory class for @see \Magento\Reports\Model\ResourceModel\Quote\Collection
  *
  * @codeCoverageIgnore
  */
-class CollectionFactory implements \Magento\Reports\Model\Resource\Quote\CollectionFactoryInterface
+class CollectionFactory implements \Magento\Reports\Model\ResourceModel\Quote\CollectionFactoryInterface
 {
     /**
      * Object Manager instance
@@ -34,7 +34,7 @@ class CollectionFactory implements \Magento\Reports\Model\Resource\Quote\Collect
      */
     public function __construct(
         \Magento\Framework\ObjectManagerInterface $objectManager,
-        $instanceName = 'Magento\\Reports\\Model\\Resource\\Quote\\Collection'
+        $instanceName = 'Magento\Reports\Model\ResourceModel\\Quote\\Collection'
     ) {
         $this->_objectManager = $objectManager;
         $this->_instanceName = $instanceName;
diff --git a/app/code/Magento/Reports/Model/Resource/Quote/CollectionFactoryInterface.php b/app/code/Magento/Reports/Model/ResourceModel/Quote/CollectionFactoryInterface.php
similarity index 70%
rename from app/code/Magento/Reports/Model/Resource/Quote/CollectionFactoryInterface.php
rename to app/code/Magento/Reports/Model/ResourceModel/Quote/CollectionFactoryInterface.php
index 0d3a368ebe5f64c54e602c62b5f7aa8ae755a6c9..e9bfbb7b0eeafba646dc1c54746314eaad46aeef 100644
--- a/app/code/Magento/Reports/Model/Resource/Quote/CollectionFactoryInterface.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Quote/CollectionFactoryInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Reports\Model\Resource\Quote;
+namespace Magento\Reports\Model\ResourceModel\Quote;
 
 interface CollectionFactoryInterface
 {
@@ -11,7 +11,7 @@ interface CollectionFactoryInterface
      * Create class instance with specified parameters
      *
      * @param array $data
-     * @return \Magento\Reports\Model\Resource\Quote\Collection
+     * @return \Magento\Reports\Model\ResourceModel\Quote\Collection
      */
     public function create(array $data = []);
 }
diff --git a/app/code/Magento/Reports/Model/Resource/Quote/Item/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php
similarity index 86%
rename from app/code/Magento/Reports/Model/Resource/Quote/Item/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php
index de33c6d39e0c068d2a132578d4f89a468ec741b1..8e0c83d793ac9a26440f780a794a5ff0c005845d 100644
--- a/app/code/Magento/Reports/Model/Resource/Quote/Item/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Quote/Item/Collection.php
@@ -4,16 +4,16 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Reports\Model\Resource\Quote\Item;
+namespace Magento\Reports\Model\ResourceModel\Quote\Item;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Collection of Magento\Quote\Model\Quote\Item
  *
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Join fields
@@ -30,17 +30,17 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected $_map = ['fields' => ['store_id' => 'main_table.store_id']];
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     protected $productResource;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer
+     * @var \Magento\Customer\Model\ResourceModel\Customer
      */
     protected $customerResource;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Collection
+     * @var \Magento\Sales\Model\ResourceModel\Order\Collection
      */
     protected $orderResource;
 
@@ -49,22 +49,22 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $productResource
-     * @param \Magento\Customer\Model\Resource\Customer $customerResource
-     * @param \Magento\Sales\Model\Resource\Order\Collection $orderResource
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $productResource
+     * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource
+     * @param \Magento\Sales\Model\ResourceModel\Order\Collection $orderResource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Catalog\Model\Resource\Product\Collection $productResource,
-        \Magento\Customer\Model\Resource\Customer $customerResource,
-        \Magento\Sales\Model\Resource\Order\Collection $orderResource,
+        \Magento\Catalog\Model\ResourceModel\Product\Collection $productResource,
+        \Magento\Customer\Model\ResourceModel\Customer $customerResource,
+        \Magento\Sales\Model\ResourceModel\Order\Collection $orderResource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
@@ -86,7 +86,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Quote\Model\Quote\Item', 'Magento\Quote\Model\Resource\Quote\Item');
+        $this->_init('Magento\Quote\Model\Quote\Item', 'Magento\Quote\Model\ResourceModel\Quote\Item');
     }
 
 
diff --git a/app/code/Magento/Reports/Model/Resource/Refresh/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Refresh/Collection.php
similarity index 98%
rename from app/code/Magento/Reports/Model/Resource/Refresh/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Refresh/Collection.php
index 129e30f7d58f2ac4858aed8dc737a7341383cb1e..82907f132f1a485ebe321b1db2bc1806f86cd748 100644
--- a/app/code/Magento/Reports/Model/Resource/Refresh/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Refresh/Collection.php
@@ -9,7 +9,7 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Refresh;
+namespace Magento\Reports\Model\ResourceModel\Refresh;
 
 class Collection extends \Magento\Framework\Data\Collection
 {
diff --git a/app/code/Magento/Reports/Model/Resource/Report/AbstractReport.php b/app/code/Magento/Reports/Model/ResourceModel/Report/AbstractReport.php
similarity index 98%
rename from app/code/Magento/Reports/Model/Resource/Report/AbstractReport.php
rename to app/code/Magento/Reports/Model/ResourceModel/Report/AbstractReport.php
index 611c376fefa11c0b2773dd4bb3d03ab59180b5a3..d5157527f0051a0615c0bc1e0d53b58ba5cfbf6f 100644
--- a/app/code/Magento/Reports/Model/Resource/Report/AbstractReport.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Report/AbstractReport.php
@@ -4,13 +4,13 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Reports\Model\Resource\Report;
+namespace Magento\Reports\Model\ResourceModel\Report;
 
 /**
  * Abstract report aggregate resource model
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-abstract class AbstractReport extends \Magento\Framework\Model\Resource\Db\AbstractDb
+abstract class AbstractReport extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Flag object
@@ -43,7 +43,7 @@ abstract class AbstractReport extends \Magento\Framework\Model\Resource\Db\Abstr
     /**
      * Constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory
@@ -52,7 +52,7 @@ abstract class AbstractReport extends \Magento\Framework\Model\Resource\Db\Abstr
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
diff --git a/app/code/Magento/Reports/Model/Resource/Report/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection.php
similarity index 95%
rename from app/code/Magento/Reports/Model/Resource/Report/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Report/Collection.php
index 8470d35c75520827c83239561de4ed3f1eaf40d0..fa647a5a852fb766f885bcd1fdb7a1a9993ec298 100644
--- a/app/code/Magento/Reports/Model/Resource/Report/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection.php
@@ -9,7 +9,7 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Report;
+namespace Magento\Reports\Model\ResourceModel\Report;
 
 class Collection extends \Magento\Framework\Data\Collection
 {
@@ -75,19 +75,19 @@ class Collection extends \Magento\Framework\Data\Collection
     protected $_localeDate;
 
     /**
-     * @var \Magento\Reports\Model\Resource\Report\Collection\Factory
+     * @var \Magento\Reports\Model\ResourceModel\Report\Collection\Factory
      */
     protected $_collectionFactory;
 
     /**
      * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
-     * @param \Magento\Reports\Model\Resource\Report\Collection\Factory $collectionFactory
+     * @param \Magento\Reports\Model\ResourceModel\Report\Collection\Factory $collectionFactory
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
-        \Magento\Reports\Model\Resource\Report\Collection\Factory $collectionFactory
+        \Magento\Reports\Model\ResourceModel\Report\Collection\Factory $collectionFactory
     ) {
         $this->_localeDate = $localeDate;
         $this->_collectionFactory = $collectionFactory;
@@ -323,7 +323,7 @@ class Collection extends \Magento\Framework\Data\Collection
      *
      * @param int $fromDate
      * @param int $toDate
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected function _getReport($fromDate, $toDate)
     {
diff --git a/app/code/Magento/Reports/Model/Resource/Report/Collection/AbstractCollection.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/AbstractCollection.php
similarity index 97%
rename from app/code/Magento/Reports/Model/Resource/Report/Collection/AbstractCollection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Report/Collection/AbstractCollection.php
index 085baf03deac470cab8de63e01afc7e7aebb1486..6e24d9536bf429fc40192a8a08fce7ffd731bfc8 100644
--- a/app/code/Magento/Reports/Model/Resource/Report/Collection/AbstractCollection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/AbstractCollection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Report\Collection;
+namespace Magento\Reports\Model\ResourceModel\Report\Collection;
 
-class AbstractCollection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class AbstractCollection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * From date
diff --git a/app/code/Magento/Reports/Model/Resource/Report/Collection/Factory.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/Factory.php
similarity index 82%
rename from app/code/Magento/Reports/Model/Resource/Report/Collection/Factory.php
rename to app/code/Magento/Reports/Model/ResourceModel/Report/Collection/Factory.php
index 458c87dd7c40b9e09416be12769b7a5e089a0358..39f14fb3d15c5f13ab1f64b6b32436dfff4c6884 100644
--- a/app/code/Magento/Reports/Model/Resource/Report/Collection/Factory.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Collection/Factory.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Reports\Model\Resource\Report\Collection;
+namespace Magento\Reports\Model\ResourceModel\Report\Collection;
 
 class Factory
 {
@@ -25,7 +25,7 @@ class Factory
      *
      * @param string $className
      * @param array $arguments
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function create($className, array $arguments = [])
     {
diff --git a/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed.php
similarity index 92%
rename from app/code/Magento/Reports/Model/Resource/Report/Product/Viewed.php
rename to app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed.php
index e7876101a5d4d35249bc7ea6c716558b0e93289f..e71f50aa22af0f8fc8d221ca05c3800d191e5ebe 100644
--- a/app/code/Magento/Reports/Model/Resource/Report/Product/Viewed.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Report\Product;
+namespace Magento\Reports\Model\ResourceModel\Report\Product;
 
-class Viewed extends \Magento\Sales\Model\Resource\Report\AbstractReport
+class Viewed extends \Magento\Sales\Model\ResourceModel\Report\AbstractReport
 {
     /**
      * Aggregation key daily
@@ -31,39 +31,39 @@ class Viewed extends \Magento\Sales\Model\Resource\Report\AbstractReport
     /**
      * Product resource instance
      *
-     * @var \Magento\Catalog\Model\Resource\Product
+     * @var \Magento\Catalog\Model\ResourceModel\Product
      */
     protected $_productResource;
 
     /**
      * Resource helper instance
      *
-     * @var \Magento\Reports\Model\Resource\Helper
+     * @var \Magento\Reports\Model\ResourceModel\Helper
      */
     protected $_resourceHelper;
 
     /**
      * Constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Framework\Stdlib\DateTime\Timezone\Validator $timezoneValidator
-     * @param \Magento\Catalog\Model\Resource\Product $productResource
-     * @param \Magento\Reports\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Product $productResource
+     * @param \Magento\Reports\Model\ResourceModel\Helper $resourceHelper
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\Stdlib\DateTime\Timezone\Validator $timezoneValidator,
-        \Magento\Catalog\Model\Resource\Product $productResource,
-        \Magento\Reports\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Product $productResource,
+        \Magento\Reports\Model\ResourceModel\Helper $resourceHelper,
         $connectionName = null
     ) {
         parent::__construct(
diff --git a/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed/Collection.php
new file mode 100644
index 0000000000000000000000000000000000000000..1e4fa51e7e1baeedfb64a8c58db9a05a47bd7503
--- /dev/null
+++ b/app/code/Magento/Reports/Model/ResourceModel/Report/Product/Viewed/Collection.php
@@ -0,0 +1,31 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Reports\Model\ResourceModel\Report\Product\Viewed;
+
+class Collection extends \Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection
+{
+    /**
+     * Tables per period
+     *
+     * @var array
+     */
+    protected $tableForPeriod = [
+        'daily' => \Magento\Reports\Model\ResourceModel\Report\Product\Viewed::AGGREGATION_DAILY,
+        'monthly' => \Magento\Reports\Model\ResourceModel\Report\Product\Viewed::AGGREGATION_MONTHLY,
+        'yearly' => \Magento\Reports\Model\ResourceModel\Report\Product\Viewed::AGGREGATION_YEARLY,
+    ];
+
+    /**
+     * Return ordered filed
+     *
+     * @return string
+     */
+    protected function getOrderedField()
+    {
+        return 'views_num';
+    }
+}
diff --git a/app/code/Magento/Reports/Model/Resource/Review/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Review/Collection.php
similarity index 91%
rename from app/code/Magento/Reports/Model/Resource/Review/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Review/Collection.php
index df63f8ca79128855cde0199ecd060aae3ef6a615..6b0fa1a860b0de7da124daf69a017b12f9e8bd28 100644
--- a/app/code/Magento/Reports/Model/Resource/Review/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Review/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Review;
+namespace Magento\Reports\Model\ResourceModel\Review;
 
-class Collection extends \Magento\Review\Model\Resource\Review\Collection
+class Collection extends \Magento\Review\Model\ResourceModel\Review\Collection
 {
     /**
      * Resource initialization
@@ -20,7 +20,7 @@ class Collection extends \Magento\Review\Model\Resource\Review\Collection
      */
     protected function _construct()
     {
-        $this->_init('Magento\Review\Model\Review', 'Magento\Review\Model\Resource\Review');
+        $this->_init('Magento\Review\Model\Review', 'Magento\Review\Model\ResourceModel\Review');
     }
 
     /**
diff --git a/app/code/Magento/Reports/Model/Resource/Review/Customer/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php
similarity index 87%
rename from app/code/Magento/Reports/Model/Resource/Review/Customer/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php
index 85be77b8f1b2b245c3368337a8c7774f5efafef8..d130d2a85e9a8b061e3d31ccdff7ed020f25a064 100644
--- a/app/code/Magento/Reports/Model/Resource/Review/Customer/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Review/Customer/Collection.php
@@ -9,12 +9,12 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Review\Customer;
+namespace Magento\Reports\Model\ResourceModel\Review\Customer;
 
-class Collection extends \Magento\Review\Model\Resource\Review\Collection
+class Collection extends \Magento\Review\Model\ResourceModel\Review\Collection
 {
     /**
-     * @var \Magento\Customer\Model\Resource\Customer
+     * @var \Magento\Customer\Model\ResourceModel\Customer
      */
     protected $_customerResource;
 
@@ -26,9 +26,9 @@ class Collection extends \Magento\Review\Model\Resource\Review\Collection
      * @param \Magento\Review\Helper\Data $reviewData
      * @param \Magento\Review\Model\Rating\Option\VoteFactory $voteFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Customer\Model\Resource\Customer $customerResource
+     * @param \Magento\Customer\Model\ResourceModel\Customer $customerResource
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
@@ -39,9 +39,9 @@ class Collection extends \Magento\Review\Model\Resource\Review\Collection
         \Magento\Review\Helper\Data $reviewData,
         \Magento\Review\Model\Rating\Option\VoteFactory $voteFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Customer\Model\Resource\Customer $customerResource,
+        \Magento\Customer\Model\ResourceModel\Customer $customerResource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_customerResource = $customerResource;
         parent::__construct(
diff --git a/app/code/Magento/Reports/Model/Resource/Review/Product/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Review/Product/Collection.php
similarity index 92%
rename from app/code/Magento/Reports/Model/Resource/Review/Product/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Review/Product/Collection.php
index e93fedf59e986d617b609547c47747ca59e70ce8..982219690499708d18323152f87485215b55f02d 100644
--- a/app/code/Magento/Reports/Model/Resource/Review/Product/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Review/Product/Collection.php
@@ -9,14 +9,14 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Review\Product;
+namespace Magento\Reports\Model\ResourceModel\Review\Product;
 
-class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
+class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
 {
     /**
      * Init Select
      *
-     * @return \Magento\Catalog\Model\Resource\Product\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     protected function _initSelect()
     {
@@ -80,7 +80,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
      *
      * @param string $attribute
      * @param string $dir
-     * @return $this|\Magento\Catalog\Model\Resource\Product\Collection
+     * @return $this|\Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     public function addAttributeToSort($attribute, $dir = self::SORT_ORDER_ASC)
     {
diff --git a/app/code/Magento/Reports/Model/Resource/Wishlist/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Wishlist/Collection.php
similarity index 80%
rename from app/code/Magento/Reports/Model/Resource/Wishlist/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Wishlist/Collection.php
index 7a715c89d34de3214747df818d5268f37e601f87..8388f16dab200bac8df5cf4b67ce9f1e7f98fbea 100644
--- a/app/code/Magento/Reports/Model/Resource/Wishlist/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Wishlist/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Wishlist;
+namespace Magento\Reports\Model\ResourceModel\Wishlist;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Wishlist table name
@@ -21,7 +21,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected $_wishlistTable;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Customer\CollectionFactory
+     * @var \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory
      */
     protected $_customerResFactory;
 
@@ -30,18 +30,18 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Customer\Model\Resource\Customer\CollectionFactory $customerResFactory
+     * @param \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerResFactory
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Customer\Model\Resource\Customer\CollectionFactory $customerResFactory,
+        \Magento\Customer\Model\ResourceModel\Customer\CollectionFactory $customerResFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->_customerResFactory = $customerResFactory;
@@ -54,7 +54,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Wishlist\Model\Wishlist', 'Magento\Wishlist\Model\Resource\Wishlist');
+        $this->_init('Magento\Wishlist\Model\Wishlist', 'Magento\Wishlist\Model\ResourceModel\Wishlist');
         $this->setWishlistTable($this->getTable('wishlist'));
     }
 
@@ -89,7 +89,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     public function getWishlistCustomerCount()
     {
-        /** @var $collection \Magento\Customer\Model\Resource\Customer\Collection */
+        /** @var $collection \Magento\Customer\Model\ResourceModel\Customer\Collection */
         $collection = $this->_customerResFactory->create();
 
         $customersSelect = $collection->getSelectCountSql();
@@ -119,7 +119,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     public function getSharedCount()
     {
-        /** @var $collection \Magento\Customer\Model\Resource\Customer\Collection */
+        /** @var $collection \Magento\Customer\Model\ResourceModel\Customer\Collection */
         $collection = $this->_customerResFactory->create();
         $countSelect = $collection->getSelectCountSql();
         $countSelect->joinLeft(
diff --git a/app/code/Magento/Reports/Model/Resource/Wishlist/Product/Collection.php b/app/code/Magento/Reports/Model/ResourceModel/Wishlist/Product/Collection.php
similarity index 92%
rename from app/code/Magento/Reports/Model/Resource/Wishlist/Product/Collection.php
rename to app/code/Magento/Reports/Model/ResourceModel/Wishlist/Product/Collection.php
index 8753f068bb14f6aec23018d4c23b3942a79a01fc..ce418930a94f55a9bd59c826441b1ad2a45c7ffe 100644
--- a/app/code/Magento/Reports/Model/Resource/Wishlist/Product/Collection.php
+++ b/app/code/Magento/Reports/Model/ResourceModel/Wishlist/Product/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Reports\Model\Resource\Wishlist\Product;
+namespace Magento\Reports\Model\ResourceModel\Wishlist\Product;
 
-class Collection extends \Magento\Wishlist\Model\Resource\Item\Collection
+class Collection extends \Magento\Wishlist\Model\ResourceModel\Item\Collection
 {
     /**
      * Resource initialization
@@ -20,7 +20,7 @@ class Collection extends \Magento\Wishlist\Model\Resource\Item\Collection
      */
     public function _construct()
     {
-        $this->_init('Magento\Wishlist\Model\Wishlist', 'Magento\Wishlist\Model\Resource\Wishlist');
+        $this->_init('Magento\Wishlist\Model\Wishlist', 'Magento\Wishlist\Model\ResourceModel\Wishlist');
     }
 
     /**
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Plugin/LogTest.php b/app/code/Magento/Reports/Test/Unit/Model/Plugin/LogTest.php
index 76f1a1ae5beac65f281207f8de2a46460505b7ac..e30cd287b0470aa730012952b803e9bc36f5cbdb 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Plugin/LogTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/Plugin/LogTest.php
@@ -31,12 +31,12 @@ class LogTest extends \PHPUnit_Framework_TestCase
     protected $viewedMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Visitor|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Visitor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $logResourceMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\Visitor|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Customer\Model\ResourceModel\Visitor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $subjectMock;
 
@@ -55,10 +55,10 @@ class LogTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->logResourceMock = $this->getMockBuilder('Magento\Customer\Model\Resource\Visitor')
+        $this->logResourceMock = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Visitor')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->subjectMock = $this->getMockBuilder('Magento\Customer\Model\Resource\Visitor')
+        $this->subjectMock = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Visitor')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php b/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php
index a614f72a2a59d33bde3104a9b3fd5ddb4b20b2dc..dced792d7652854daf5ce9400d51750b1e8eff0e 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/Product/Index/ComparedTest.php
@@ -61,7 +61,7 @@ class ComparedTest extends \PHPUnit_Framework_TestCase
     protected $catalogProductHelperMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -99,7 +99,7 @@ class ComparedTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\AbstractResource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\AbstractResource')
             ->disableOriginalConstructor()
             ->setMethods(['getIdFieldName', '_construct', 'getConnection'])
             ->getMockForAbstractClass();
@@ -127,7 +127,7 @@ class ComparedTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetExcludeProductIds()
     {
-        $collection = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product\Compare\Item\Collection')
+        $collection = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product\Compare\Item\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['getEntityId'])
             ->getMock();
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/Event/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Event/CollectionTest.php
similarity index 93%
rename from app/code/Magento/Reports/Test/Unit/Model/Resource/Event/CollectionTest.php
rename to app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Event/CollectionTest.php
index 794deeac7cfcb67b5dbeb740ae36419b7ca03d80..b1fe579a13b9285d00eed7a2b190c9cb8cafe01b 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Resource/Event/CollectionTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Event/CollectionTest.php
@@ -4,14 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Reports\Test\Unit\Model\Resource\Event;
+namespace Magento\Reports\Test\Unit\Model\ResourceModel\Event;
 
-use Magento\Reports\Model\Resource\Event\Collection;
+use Magento\Reports\Model\ResourceModel\Event\Collection;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Event\Collection
+     * @var \Magento\Reports\Model\ResourceModel\Event\Collection
      */
     protected $collection;
 
@@ -36,7 +36,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $managerMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -82,7 +82,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->willReturn($this->selectMock);
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['getConnection', 'getCurrentStoreIds', '_construct', 'getMainTable', 'getTable'])
             ->getMock();
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/EventTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/EventTest.php
similarity index 94%
rename from app/code/Magento/Reports/Test/Unit/Model/Resource/EventTest.php
rename to app/code/Magento/Reports/Test/Unit/Model/ResourceModel/EventTest.php
index 5c0cdaf56872966ce2aa04a4f8e88c0bece580bd..bc16cf215d80201844dd95f13ed08684ab4ca774 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Resource/EventTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/EventTest.php
@@ -4,19 +4,19 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Reports\Test\Unit\Model\Resource;
+namespace Magento\Reports\Test\Unit\Model\ResourceModel;
 
-use Magento\Reports\Model\Resource\Event;
+use Magento\Reports\Model\ResourceModel\Event;
 
 class EventTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Event
+     * @var \Magento\Reports\Model\ResourceModel\Event
      */
     protected $event;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\Context|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $contextMock;
 
@@ -36,7 +36,7 @@ class EventTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -50,7 +50,7 @@ class EventTest extends \PHPUnit_Framework_TestCase
      */
     protected function setUp()
     {
-        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\Context')
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\Context')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -72,7 +72,7 @@ class EventTest extends \PHPUnit_Framework_TestCase
         $this->connectionMock = $this->getMockBuilder('Magento\Framework\DB\Adapter\AdapterInterface')
             ->getMock();
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->resourceMock
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/HelperTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/HelperTest.php
similarity index 91%
rename from app/code/Magento/Reports/Test/Unit/Model/Resource/HelperTest.php
rename to app/code/Magento/Reports/Test/Unit/Model/ResourceModel/HelperTest.php
index b000c4ad43ab230bf9b648241354cb3cd60b65d3..6adf74f5bbea9ec1dc9fa57dfeb9a1be8f73c6e7 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Resource/HelperTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/HelperTest.php
@@ -4,19 +4,19 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Reports\Test\Unit\Model\Resource;
+namespace Magento\Reports\Test\Unit\Model\ResourceModel;
 
-use Magento\Reports\Model\Resource\Helper;
+use Magento\Reports\Model\ResourceModel\Helper;
 
 class HelperTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Helper
+     * @var \Magento\Reports\Model\ResourceModel\Helper
      */
     protected $helper;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -30,7 +30,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase
      */
     protected function setUp()
     {
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/Order/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Order/CollectionTest.php
similarity index 95%
rename from app/code/Magento/Reports/Test/Unit/Model/Resource/Order/CollectionTest.php
rename to app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Order/CollectionTest.php
index 14ff7bbec9bbe8aa02a154f15398ca5a127f5d16..6b3c58f38386ca50c774288cd87a84eae34c9b23 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Resource/Order/CollectionTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Order/CollectionTest.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Reports\Test\Unit\Model\Resource\Order;
+namespace Magento\Reports\Test\Unit\Model\ResourceModel\Order;
 
-use Magento\Reports\Model\Resource\Order\Collection;
+use Magento\Reports\Model\ResourceModel\Order\Collection;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -14,7 +14,7 @@ use Magento\Reports\Model\Resource\Order\Collection;
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Order\Collection
+     * @var \Magento\Reports\Model\ResourceModel\Order\Collection
      */
     protected $collection;
 
@@ -39,7 +39,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $managerMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\EntitySnapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\EntitySnapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -69,7 +69,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $configMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Report\OrderFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Report\OrderFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderFactoryMock;
 
@@ -84,7 +84,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $selectMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -102,7 +102,8 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->managerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface')
             ->getMock();
-        $this->entitySnapshotMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\VersionControl\Snapshot')
+        $snapshotClassName = 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot';
+        $this->entitySnapshotMock = $this->getMockBuilder($snapshotClassName)
             ->disableOriginalConstructor()
             ->getMock();
         $this->helperMock = $this->getMockBuilder('Magento\Framework\DB\Helper')
@@ -117,7 +118,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $this->configMock = $this->getMockBuilder('Magento\Sales\Model\Order\Config')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->orderFactoryMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Report\OrderFactory')
+        $this->orderFactoryMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Report\OrderFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -154,7 +155,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->willReturn($this->selectMock);
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->getMock();
         $this->resourceMock
@@ -219,7 +220,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             )
             ->willReturn($useAggregatedData);
 
-        $orderMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Report\Order')
+        $orderMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Report\Order')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/Quote/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Quote/CollectionTest.php
similarity index 91%
rename from app/code/Magento/Reports/Test/Unit/Model/Resource/Quote/CollectionTest.php
rename to app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Quote/CollectionTest.php
index 628c94296d93c5de2a2a4d88f210c60445faf828..1b22f883259a1874b1aead0c3d8581007bc8a9d2 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Resource/Quote/CollectionTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Quote/CollectionTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Reports\Test\Unit\Model\Resource\Quote;
+namespace Magento\Reports\Test\Unit\Model\ResourceModel\Quote;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Quote\Collection
+     * @var \Magento\Reports\Model\ResourceModel\Quote\Collection
      */
     protected $model;
 
@@ -43,7 +43,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $entityFactoryMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot
+     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot
      */
     protected $entitySnapshotMock;
 
@@ -63,7 +63,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $this->connectionMock->expects($this->any())
             ->method('select')
             ->willReturn($this->selectMock);
-        $this->resourceMock = $this->getMockBuilder('Magento\Quote\Model\Resource\Quote')
+        $this->resourceMock = $this->getMockBuilder('Magento\Quote\Model\ResourceModel\Quote')
             ->disableOriginalConstructor()
             ->getMock();
         $this->resourceMock->expects($this->any())
@@ -75,7 +75,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $this->resourceMock->expects($this->any())
             ->method('getTable')
             ->willReturn('test_table');
-        $this->customerResourceMock = $this->getMockBuilder('Magento\Customer\Model\Resource\Customer')
+        $this->customerResourceMock = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\Customer')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -86,14 +86,15 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $this->entityFactoryMock = $this->getMockBuilder('Magento\Framework\Data\Collection\EntityFactory')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->entitySnapshotMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\VersionControl\Snapshot')
+        $snapshotClassName = 'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot';
+        $this->entitySnapshotMock = $this->getMockBuilder($snapshotClassName)
             ->disableOriginalConstructor()
             ->setMethods(['registerSnapshot'])
             ->getMock();
 
         $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->model = $helper->getObject(
-            'Magento\Reports\Model\Resource\Quote\Collection',
+            'Magento\Reports\Model\ResourceModel\Quote\Collection',
             [
                 'customerResource' => $this->customerResourceMock,
                 'resource' => $this->resourceMock,
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Collection/AbstractCollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Collection/AbstractCollectionTest.php
similarity index 84%
rename from app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Collection/AbstractCollectionTest.php
rename to app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Collection/AbstractCollectionTest.php
index c877175d242016ab3aa39c710bd9ee160a3a2ad0..14cfb9c6f002a582dc4310500fe4dc100b78505e 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Collection/AbstractCollectionTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Collection/AbstractCollectionTest.php
@@ -4,14 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Reports\Test\Unit\Model\Resource\Report\Collection;
+namespace Magento\Reports\Test\Unit\Model\ResourceModel\Report\Collection;
 
 class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * Tested collection
      *
-     * @var \Magento\Reports\Model\Resource\Report\Collection\AbstractCollection
+     * @var \Magento\Reports\Model\ResourceModel\Report\Collection\AbstractCollection
      */
     protected $collection;
 
@@ -23,13 +23,13 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
         $eventManager = $this->getMock('\Magento\Framework\Event\Manager', [], [], '', false);
         $connection = $this->getMock('\Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
 
-        $resource = $this->getMockBuilder('\Magento\Framework\Model\Resource\Db\AbstractDb')
+        $resource = $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['getConnection'])
             ->getMockForAbstractClass();
         $resource->method('getConnection')->willReturn($connection);
 
-        $this->collection = new \Magento\Reports\Model\Resource\Report\Collection\AbstractCollection(
+        $this->collection = new \Magento\Reports\Model\ResourceModel\Report\Collection\AbstractCollection(
             $entityFactory,
             $logger,
             $fetchStrategy,
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/CollectionTest.php
similarity index 91%
rename from app/code/Magento/Reports/Test/Unit/Model/Resource/Report/CollectionTest.php
rename to app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/CollectionTest.php
index 5667403beb1d9420cd796d7b00a9543378816eb5..ad7719383aa42019740bcae5dbabd74be65010e6 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/CollectionTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/CollectionTest.php
@@ -4,14 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Reports\Test\Unit\Model\Resource\Report;
+namespace Magento\Reports\Test\Unit\Model\ResourceModel\Report;
 
-use Magento\Reports\Model\Resource\Report\Collection;
+use Magento\Reports\Model\ResourceModel\Report\Collection;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Report\Collection
+     * @var \Magento\Reports\Model\ResourceModel\Report\Collection
      */
     protected $collection;
 
@@ -26,7 +26,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $timezoneMock;
 
     /**
-     * @var \Magento\Reports\Model\Resource\Report\Collection\Factory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Reports\Model\ResourceModel\Report\Collection\Factory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $factoryMock;
 
@@ -40,7 +40,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->timezoneMock = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime\TimezoneInterface')
             ->getMock();
-        $this->factoryMock = $this->getMockBuilder('Magento\Reports\Model\Resource\Report\Collection\Factory')
+        $this->factoryMock = $this->getMockBuilder('Magento\Reports\Model\ResourceModel\Report\Collection\Factory')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -129,7 +129,10 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
      */
     public function testLoadData()
     {
-        $this->assertInstanceOf('\Magento\Reports\Model\Resource\Report\Collection', $this->collection->loadData());
+        $this->assertInstanceOf(
+            '\Magento\Reports\Model\ResourceModel\Report\Collection',
+            $this->collection->loadData()
+        );
     }
 
     /**
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Product/ViewedTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Product/ViewedTest.php
similarity index 93%
rename from app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Product/ViewedTest.php
rename to app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Product/ViewedTest.php
index b22e4f2bf044939cb3db933093d341afbf6318ac..7d845db9a52be8459b7a7ce3f941241b86044af4 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Product/ViewedTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Product/ViewedTest.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Reports\Test\Unit\Model\Resource\Report\Product;
+namespace Magento\Reports\Test\Unit\Model\ResourceModel\Report\Product;
 
-use Magento\Reports\Model\Resource\Report\Product\Viewed;
+use Magento\Reports\Model\ResourceModel\Report\Product\Viewed;
 
 /**
  * @SuppressWarnings(PHPMD.TooManyFields)
@@ -15,12 +15,12 @@ use Magento\Reports\Model\Resource\Report\Product\Viewed;
 class ViewedTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Report\Product\Viewed
+     * @var \Magento\Reports\Model\ResourceModel\Report\Product\Viewed
      */
     protected $viewed;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\Context|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $contextMock;
 
@@ -50,12 +50,12 @@ class ViewedTest extends \PHPUnit_Framework_TestCase
     protected $validatorMock;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Product|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $productMock;
 
     /**
-     * @var \Magento\Reports\Model\Resource\Helper|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Reports\Model\ResourceModel\Helper|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $helperMock;
 
@@ -65,7 +65,7 @@ class ViewedTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -131,7 +131,7 @@ class ViewedTest extends \PHPUnit_Framework_TestCase
         $this->connectionMock->expects($this->any())->method('select')->willReturn($this->selectMock);
         $this->connectionMock->expects($this->any())->method('query')->willReturn($this->zendDbMock);
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock);
@@ -143,7 +143,7 @@ class ViewedTest extends \PHPUnit_Framework_TestCase
             )
         );
 
-        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\Context')
+        $this->contextMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\Context')
             ->disableOriginalConstructor()
             ->getMock();
         $this->contextMock->expects($this->any())->method('getResources')->willReturn($this->resourceMock);
@@ -181,12 +181,12 @@ class ViewedTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->attributeMock->expects($this->any())->method('getBackend')->willReturn($this->backendMock);
 
-        $this->productMock = $this->getMockBuilder('Magento\Catalog\Model\Resource\Product')
+        $this->productMock = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Product')
             ->disableOriginalConstructor()
             ->getMock();
         $this->productMock->expects($this->any())->method('getAttribute')->willReturn($this->attributeMock);
 
-        $this->helperMock = $this->getMockBuilder('Magento\Reports\Model\Resource\Helper')
+        $this->helperMock = $this->getMockBuilder('Magento\Reports\Model\ResourceModel\Helper')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Quote/CollectionTest.php b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Quote/CollectionTest.php
similarity index 89%
rename from app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Quote/CollectionTest.php
rename to app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Quote/CollectionTest.php
index e197602eeac996e1adc7668011de1e42330b5fea..7f22f2c9230f8cdf946df2ffec61bdc8068792d0 100644
--- a/app/code/Magento/Reports/Test/Unit/Model/Resource/Report/Quote/CollectionTest.php
+++ b/app/code/Magento/Reports/Test/Unit/Model/ResourceModel/Report/Quote/CollectionTest.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Reports\Test\Unit\Model\Resource\Report\Quote;
+namespace Magento\Reports\Test\Unit\Model\ResourceModel\Report\Quote;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
-use \Magento\Reports\Model\Resource\Quote\Collection as Collection;
+use \Magento\Reports\Model\ResourceModel\Quote\Collection as Collection;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -31,9 +31,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     {
         /** @var $collection \PHPUnit_Framework_MockObject_MockObject */
         $constructArgs = $this->objectManager
-            ->getConstructArguments('Magento\Reports\Model\Resource\Quote\Collection');
+            ->getConstructArguments('Magento\Reports\Model\ResourceModel\Quote\Collection');
         $collection = $this->getMock(
-            'Magento\Reports\Model\Resource\Quote\Collection',
+            'Magento\Reports\Model\ResourceModel\Quote\Collection',
             ['getSelect'],
             $constructArgs,
             '',
@@ -53,9 +53,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     {
         /** @var $collection \PHPUnit_Framework_MockObject_MockObject */
         $constructArgs = $this->objectManager
-            ->getConstructArguments('Magento\Reports\Model\Resource\Quote\Item\Collection');
+            ->getConstructArguments('Magento\Reports\Model\ResourceModel\Quote\Item\Collection');
         $collection = $this->getMock(
-            'Magento\Reports\Model\Resource\Quote\Item\Collection',
+            'Magento\Reports\Model\ResourceModel\Quote\Item\Collection',
             ['getSelect', 'getTable'],
             $constructArgs,
             '',
@@ -77,22 +77,28 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     {
         /** @var $collection \PHPUnit_Framework_MockObject_MockObject */
         $constructArgs = $this->objectManager
-            ->getConstructArguments('Magento\Reports\Model\Resource\Quote\Item\Collection');
+            ->getConstructArguments('Magento\Reports\Model\ResourceModel\Quote\Item\Collection');
         $constructArgs['eventManager'] = $this->getMock('Magento\Framework\Event\ManagerInterface', [], [], '', false);
         $connectionMock = $this->getMock('Magento\Framework\DB\Adapter\AdapterInterface', [], [], '', false);
-        $resourceMock = $this->getMock('\Magento\Quote\Model\Resource\Quote', [], [], '', false);
+        $resourceMock = $this->getMock('\Magento\Quote\Model\ResourceModel\Quote', [], [], '', false);
         $resourceMock
             ->expects($this->any())
             ->method('getConnection')
             ->willReturn($this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false));
         $constructArgs['resource'] = $resourceMock;
-        $productResourceMock = $this->getMock('\Magento\Catalog\Model\Resource\Product\Collection', [], [], '', false);
+        $productResourceMock = $this->getMock(
+            '\Magento\Catalog\Model\ResourceModel\Product\Collection',
+            [],
+            [],
+            '',
+            false
+        );
         $constructArgs['productResource'] = $productResourceMock;
-        $orderResourceMock = $this->getMock('\Magento\Sales\Model\Resource\Order\Collection', [], [], '', false);
+        $orderResourceMock = $this->getMock('\Magento\Sales\Model\ResourceModel\Order\Collection', [], [], '', false);
         $constructArgs['orderResource'] = $orderResourceMock;
 
         $collection = $this->getMock(
-            'Magento\Reports\Model\Resource\Quote\Item\Collection',
+            'Magento\Reports\Model\ResourceModel\Quote\Item\Collection',
             [
                 '_beforeLoad',
                 '_renderFilters',
diff --git a/app/code/Magento/Reports/etc/adminhtml/di.xml b/app/code/Magento/Reports/etc/adminhtml/di.xml
index 95597b3b46e0176e9112c67e2d5ca11c362bca7e..7507b9594895879d5068af63b6448e49b350000a 100644
--- a/app/code/Magento/Reports/etc/adminhtml/di.xml
+++ b/app/code/Magento/Reports/etc/adminhtml/di.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
-    <type name="Magento\Reports\Model\Resource\Customer\Collection">
+    <type name="Magento\Reports\Model\ResourceModel\Customer\Collection">
         <arguments>
             <argument name="modelName" xsi:type="string">Magento\Customer\Model\Backend\Customer</argument>
         </arguments>
@@ -14,14 +14,14 @@
     <type name="Magento\Reports\Controller\Adminhtml\Report\Statistics">
         <arguments>
             <argument name="reportTypes" xsi:type="array">
-                <item name="sales" xsi:type="string">Magento\Sales\Model\Resource\Report\Order</item>
-                <item name="tax" xsi:type="string">Magento\Tax\Model\Resource\Report\Tax</item>
-                <item name="shipping" xsi:type="string">Magento\Sales\Model\Resource\Report\Shipping</item>
-                <item name="invoiced" xsi:type="string">Magento\Sales\Model\Resource\Report\Invoiced</item>
-                <item name="refunded" xsi:type="string">Magento\Sales\Model\Resource\Report\Refunded</item>
-                <item name="coupons" xsi:type="string">Magento\SalesRule\Model\Resource\Report\Rule</item>
-                <item name="bestsellers" xsi:type="string">Magento\Sales\Model\Resource\Report\Bestsellers</item>
-                <item name="viewed" xsi:type="string">Magento\Reports\Model\Resource\Report\Product\Viewed</item>
+                <item name="sales" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Order</item>
+                <item name="tax" xsi:type="string">Magento\Tax\Model\ResourceModel\Report\Tax</item>
+                <item name="shipping" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Shipping</item>
+                <item name="invoiced" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Invoiced</item>
+                <item name="refunded" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Refunded</item>
+                <item name="coupons" xsi:type="string">Magento\SalesRule\Model\ResourceModel\Report\Rule</item>
+                <item name="bestsellers" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Bestsellers</item>
+                <item name="viewed" xsi:type="string">Magento\Reports\Model\ResourceModel\Report\Product\Viewed</item>
             </argument>
         </arguments>
     </type>
diff --git a/app/code/Magento/Reports/etc/di.xml b/app/code/Magento/Reports/etc/di.xml
index d530c6c6ec0ad2645dc699d17f619814a3249bbd..407cf2d73ea393c0ceb13036f77ae9df0664d14c 100644
--- a/app/code/Magento/Reports/etc/di.xml
+++ b/app/code/Magento/Reports/etc/di.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
-    <type name="Magento\Customer\Model\Resource\Visitor">
+    <type name="Magento\Customer\Model\ResourceModel\Visitor">
         <plugin name="reportLog" type="Magento\Reports\Model\Plugin\Log" />
     </type>
     <virtualType name="Magento\Reports\Model\Session\Storage" type="Magento\Framework\Session\Storage">
@@ -24,10 +24,10 @@
             <argument name="reportSession" xsi:type="object">Magento\Reports\Model\Session</argument>
         </arguments>
     </type>
-    <type name="Magento\Reports\Model\Resource\Helper">
+    <type name="Magento\Reports\Model\ResourceModel\Helper">
         <arguments>
             <argument name="modulePrefix" xsi:type="string">reports</argument>
         </arguments>
     </type>
-    <preference for="Magento\Reports\Model\Resource\Quote\CollectionFactoryInterface" type="Magento\Reports\Model\Resource\Quote\CollectionFactory"/>
+    <preference for="Magento\Reports\Model\ResourceModel\Quote\CollectionFactoryInterface" type="Magento\Reports\Model\ResourceModel\Quote\CollectionFactory"/>
 </config>
diff --git a/app/code/Magento/Reports/etc/frontend/events.xml b/app/code/Magento/Reports/etc/frontend/events.xml
index f50b48b357b11238333c246bf432d25f3e55ec6d..5405ce08791be3ce560bd4ba2cd7c7f6b595c6bf 100644
--- a/app/code/Magento/Reports/etc/frontend/events.xml
+++ b/app/code/Magento/Reports/etc/frontend/events.xml
@@ -7,33 +7,33 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_compare_remove_product">
-        <observer name="reports" instance="Magento\Reports\Observer\CatalogProductCompareClearObserver" method="execute" />
+        <observer name="reports" instance="Magento\Reports\Observer\CatalogProductCompareClearObserver" />
     </event>
     <event name="customer_login">
-        <observer name="reports" instance="Magento\Reports\Observer\CustomerLoginObserver" method="execute" />
+        <observer name="reports" instance="Magento\Reports\Observer\CustomerLoginObserver" />
     </event>
     <event name="customer_logout">
-        <observer name="reports" instance="Magento\Reports\Observer\CustomerLogoutObserver" method="execute" />
+        <observer name="reports" instance="Magento\Reports\Observer\CustomerLogoutObserver" />
     </event>
     <event name="catalog_controller_product_view">
-        <observer name="reports" instance="Magento\Reports\Observer\CatalogProductViewObserver" method="execute" />
+        <observer name="reports" instance="Magento\Reports\Observer\CatalogProductViewObserver" />
     </event>
     <event name="sendfriend_product">
-        <observer name="reports" instance="Magento\Reports\Observer\SendfriendProductObserver" method="execute" />
+        <observer name="reports" instance="Magento\Reports\Observer\SendfriendProductObserver" />
     </event>
     <event name="catalog_product_compare_add_product">
-        <observer name="reports" instance="Magento\Reports\Observer\CatalogProductCompareAddProductObserver" method="execute" />
+        <observer name="reports" instance="Magento\Reports\Observer\CatalogProductCompareAddProductObserver" />
     </event>
     <event name="catalog_product_compare_item_collection_clear">
-        <observer name="reports" instance="Magento\Reports\Observer\CatalogProductCompareClearObserver" method="execute" />
+        <observer name="reports" instance="Magento\Reports\Observer\CatalogProductCompareClearObserver" />
     </event>
     <event name="sales_quote_item_save_before">
-        <observer name="reports" instance="Magento\Reports\Observer\CheckoutCartAddProductObserver" method="execute" />
+        <observer name="reports" instance="Magento\Reports\Observer\CheckoutCartAddProductObserver" />
     </event>
     <event name="wishlist_add_product">
-        <observer name="reports" instance="Magento\Reports\Observer\WishlistAddProductObserver" method="execute" />
+        <observer name="reports" instance="Magento\Reports\Observer\WishlistAddProductObserver" />
     </event>
     <event name="wishlist_share">
-        <observer name="reports" instance="Magento\Reports\Observer\WishlistShareObserver" method="execute" />
+        <observer name="reports" instance="Magento\Reports\Observer\WishlistShareObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Reports/etc/webapi_rest/events.xml b/app/code/Magento/Reports/etc/webapi_rest/events.xml
index d9ad2ef3d6ee3266774223844c332332b8278b15..e9c0adce5653400e61fc8ca2c32edb2df635247a 100644
--- a/app/code/Magento/Reports/etc/webapi_rest/events.xml
+++ b/app/code/Magento/Reports/etc/webapi_rest/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_quote_item_save_before">
-        <observer name="reports" instance="Magento\Reports\Observer\CheckoutCartAddProductObserver" method="execute" />
+        <observer name="reports" instance="Magento\Reports\Observer\CheckoutCartAddProductObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Reports/etc/webapi_soap/events.xml b/app/code/Magento/Reports/etc/webapi_soap/events.xml
index d9ad2ef3d6ee3266774223844c332332b8278b15..e9c0adce5653400e61fc8ca2c32edb2df635247a 100644
--- a/app/code/Magento/Reports/etc/webapi_soap/events.xml
+++ b/app/code/Magento/Reports/etc/webapi_soap/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_quote_item_save_before">
-        <observer name="reports" instance="Magento\Reports\Observer\CheckoutCartAddProductObserver" method="execute" />
+        <observer name="reports" instance="Magento\Reports\Observer\CheckoutCartAddProductObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_customer_accounts_grid.xml b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_customer_accounts_grid.xml
index 5bd5c677ca4ee3521b909d8f250c2cf545eddc41..137cecdd84c9ace4ed20d9fd912e47ae86e779ba 100644
--- a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_customer_accounts_grid.xml
+++ b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_customer_accounts_grid.xml
@@ -11,7 +11,7 @@
         <referenceBlock name="adminhtml.report.grid">
             <arguments>
                 <argument name="id" xsi:type="string">gridAccounts</argument>
-                <argument name="dataSource" xsi:type="object">Magento\Reports\Model\Resource\Accounts\Collection\Initial</argument>
+                <argument name="dataSource" xsi:type="object">Magento\Reports\Model\ResourceModel\Accounts\Collection\Initial</argument>
             </arguments>
         </referenceBlock>
         <referenceBlock name="adminhtml.report.grid.export">
diff --git a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_customer_orders_grid.xml b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_customer_orders_grid.xml
index 1f3c900ec8d9a25478e048aa421b1f4202eafa68..280f74185f922d7e18328ee5ca62c0bab80165c1 100644
--- a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_customer_orders_grid.xml
+++ b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_customer_orders_grid.xml
@@ -11,7 +11,7 @@
         <referenceBlock name="adminhtml.report.grid">
             <arguments>
                 <argument name="id" xsi:type="string">gridOrdersCustomer</argument>
-                <argument name="dataSource" xsi:type="object">Magento\Reports\Model\Resource\Customer\Orders\Collection\Initial</argument>
+                <argument name="dataSource" xsi:type="object">Magento\Reports\Model\ResourceModel\Customer\Orders\Collection\Initial</argument>
             </arguments>
         </referenceBlock>
         <referenceBlock name="adminhtml.report.grid.export">
diff --git a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_customer_totals_grid.xml b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_customer_totals_grid.xml
index c8f03174d76f88e7966671c7257f3c13ec36932c..7f420955fdc0c3af1470212b9108cf41bbaf2a91 100644
--- a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_customer_totals_grid.xml
+++ b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_customer_totals_grid.xml
@@ -11,7 +11,7 @@
         <referenceBlock name="adminhtml.report.grid">
             <arguments>
                 <argument name="id" xsi:type="string">gridTotalsCustomer</argument>
-                <argument name="dataSource" xsi:type="object">Magento\Reports\Model\Resource\Customer\Totals\Collection\Initial</argument>
+                <argument name="dataSource" xsi:type="object">Magento\Reports\Model\ResourceModel\Customer\Totals\Collection\Initial</argument>
             </arguments>
         </referenceBlock>
         <referenceBlock name="adminhtml.report.grid.export">
diff --git a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_grid.xml b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_grid.xml
index 315acc1db5fe902c02ffd377f301a25bf7af0b86..30c5bf9a697c41dfd3eeb70268b725ac17499914 100644
--- a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_grid.xml
+++ b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_grid.xml
@@ -27,7 +27,7 @@
                     <argument name="use_ajax" xsi:type="string">0</argument>
                     <argument name="pager_visibility" xsi:type="string">0</argument>
                     <argument name="id" xsi:type="string">gridReport</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Reports\Model\Resource\Report\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Reports\Model\ResourceModel\Report\Collection</argument>
                 </arguments>
                 <block class="Magento\Backend\Block\Widget\Grid\Export" name="adminhtml.report.grid.export" as="grid.export">
                     <arguments>
diff --git a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_product_lowstock_grid.xml b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_product_lowstock_grid.xml
index c7602138497dae2ae5d49cda459ccccc6569da02..6972962b65c329ce9ab4f72aa8455ba16723c8cb 100644
--- a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_product_lowstock_grid.xml
+++ b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_product_lowstock_grid.xml
@@ -12,7 +12,7 @@
                 <arguments>
                     <argument name="id" xsi:type="string">gridLowstock</argument>
                     <argument name="use_ajax" xsi:type="string">0</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Reports\Model\Resource\Product\Lowstock\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Reports\Model\ResourceModel\Product\Lowstock\Collection</argument>
                 </arguments>
                 <block class="Magento\Backend\Block\Widget\Grid\Export" name="adminhtml.block.report.product.lowstock.export" as="grid.export">
                     <arguments>
diff --git a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_product_sold_grid.xml b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_product_sold_grid.xml
index cc68c8561851d134b87df8fb827a33ac9c0bc409..d4d71dc56601f5eb2aeb36ab1082bc030701ee10 100644
--- a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_product_sold_grid.xml
+++ b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_product_sold_grid.xml
@@ -11,7 +11,7 @@
         <referenceBlock name="adminhtml.report.grid">
             <arguments>
                 <argument name="id" xsi:type="string">gridProductsSold</argument>
-                <argument name="dataSource" xsi:type="object">Magento\Reports\Model\Resource\Product\Sold\Collection\Initial</argument>
+                <argument name="dataSource" xsi:type="object">Magento\Reports\Model\ResourceModel\Product\Sold\Collection\Initial</argument>
             </arguments>
         </referenceBlock>
         <referenceBlock name="adminhtml.report.grid.export">
diff --git a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_review_customer_grid.xml b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_review_customer_grid.xml
index 7aefd09f745624bf630bd1ed48f571ad77b5107d..a79aaea4cbbc2970a649a754d0d5de03c7ac88f8 100644
--- a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_review_customer_grid.xml
+++ b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_review_customer_grid.xml
@@ -13,7 +13,7 @@
                     <argument name="id" xsi:type="string">customers_grid</argument>
                     <argument name="default_sort" xsi:type="string">review_cnt</argument>
                     <argument name="default_dir" xsi:type="string">desc</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Reports\Model\Resource\Review\Customer\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Reports\Model\ResourceModel\Review\Customer\Collection</argument>
                 </arguments>
                 <block class="Magento\Backend\Block\Widget\Grid\Export" name="adminhtml.block.report.review.customer.export" as="grid.export">
                     <arguments>
diff --git a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_review_product_grid.xml b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_review_product_grid.xml
index 428f1df4fc5b78d0f16497cf1bc9afba537940c6..cb7cf44a36f3f858da355fe1f3a5bd3030084880 100644
--- a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_review_product_grid.xml
+++ b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_review_product_grid.xml
@@ -13,7 +13,7 @@
                     <argument name="id" xsi:type="string">gridProducts</argument>
                     <argument name="default_sort" xsi:type="string">review_cnt</argument>
                     <argument name="default_dir" xsi:type="string">desc</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Reports\Model\Resource\Review\Product\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Reports\Model\ResourceModel\Review\Product\Collection</argument>
                 </arguments>
                 <block class="Magento\Backend\Block\Widget\Grid\Export" name="adminhtml.block.report.review.product.export" as="grid.export">
                     <arguments>
diff --git a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_statistics_index.xml b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_statistics_index.xml
index 3a3be1ebae5c172a690ceb93e46d17bc62c9f020..f8212ee20e284692012a68a37146d6478de5903e 100644
--- a/app/code/Magento/Reports/view/adminhtml/layout/reports_report_statistics_index.xml
+++ b/app/code/Magento/Reports/view/adminhtml/layout/reports_report_statistics_index.xml
@@ -15,7 +15,7 @@
                         <argument name="use_ajax" xsi:type="string">0</argument>
                         <argument name="sortable" xsi:type="string">0</argument>
                         <argument name="pager_visibility" xsi:type="string">0</argument>
-                        <argument name="dataSource" xsi:type="object">Magento\Reports\Model\Resource\Refresh\Collection</argument>
+                        <argument name="dataSource" xsi:type="object">Magento\Reports\Model\ResourceModel\Refresh\Collection</argument>
                     </arguments>
                     <block class="Magento\Backend\Block\Widget\Grid\Massaction" name="adminhtml.block.refresh.statistics.massactions" as="grid.massaction">
                         <arguments>
diff --git a/app/code/Magento/Reports/view/adminhtml/templates/store/switcher.phtml b/app/code/Magento/Reports/view/adminhtml/templates/store/switcher.phtml
index 54ef28d8a556fb676aa09f6d944451f858cde2e1..18d1deff5d6cede1bec6f69b983117d87973b6b2 100644
--- a/app/code/Magento/Reports/view/adminhtml/templates/store/switcher.phtml
+++ b/app/code/Magento/Reports/view/adminhtml/templates/store/switcher.phtml
@@ -16,7 +16,11 @@
 <div class="field field-store-switcher">
     <label class="label" for="store_switcher"><?php /* @escapeNotVerified */ echo __('Show Report For:') ?></label>
     <div class="control">
-        <select name="store_switcher" id="store_switcher" onchange="return switchStore(this);">
+        <select 
+            id="store_switcher"
+            class="admin__control-select"
+            name="store_switcher"
+            onchange="return switchStore(this);">
             <option value=""><?php /* @escapeNotVerified */ echo __('All Websites') ?></option>
             <?php foreach ($block->getWebsiteCollection() as $_website): ?>
                 <?php $showWebsite = false; ?>
diff --git a/app/code/Magento/Reports/view/adminhtml/templates/store/switcher/enhanced.phtml b/app/code/Magento/Reports/view/adminhtml/templates/store/switcher/enhanced.phtml
index ea4885877c6c460c2696ee3e2ea3345012b9fb42..5b9bdc0e16b5e1f17adb539227f8f347f8ff8031 100644
--- a/app/code/Magento/Reports/view/adminhtml/templates/store/switcher/enhanced.phtml
+++ b/app/code/Magento/Reports/view/adminhtml/templates/store/switcher/enhanced.phtml
@@ -21,7 +21,11 @@
 <div class="field field-store-switcher">
     <label class="label" for="store_switcher"><?php /* @escapeNotVerified */ echo __('Show Report For:') ?></label>
     <div class="control">
-        <select name="store_switcher" id="store_switcher" onchange="return switchStore(this);">
+        <select 
+            id="store_switcher"
+            class="admin__control-select"
+            name="store_switcher"
+            onchange="return switchStore(this);">
             <option value=""><?php /* @escapeNotVerified */ echo __('All Websites') ?></option>
             <?php foreach ($block->getWebsiteCollection() as $_website): ?>
                 <?php $showWebsite = false; ?>
diff --git a/app/code/Magento/Review/Block/Adminhtml/Grid.php b/app/code/Magento/Review/Block/Adminhtml/Grid.php
index 793bd1ce8749077ad764df25ecd40ec5182713ec..2a43529f0db77bffedd4e661ecae76c7c54f9e64 100644
--- a/app/code/Magento/Review/Block/Adminhtml/Grid.php
+++ b/app/code/Magento/Review/Block/Adminhtml/Grid.php
@@ -45,7 +45,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
     /**
      * Review collection model factory
      *
-     * @var \Magento\Review\Model\Resource\Review\Product\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory
      */
     protected $_productsFactory;
 
@@ -60,7 +60,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Review\Model\ReviewFactory $reviewFactory
-     * @param \Magento\Review\Model\Resource\Review\Product\CollectionFactory $productsFactory
+     * @param \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory $productsFactory
      * @param \Magento\Review\Helper\Data $reviewData
      * @param \Magento\Review\Helper\Action\Pager $reviewActionPager
      * @param \Magento\Framework\Registry $coreRegistry
@@ -70,7 +70,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Review\Model\ReviewFactory $reviewFactory,
-        \Magento\Review\Model\Resource\Review\Product\CollectionFactory $productsFactory,
+        \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory $productsFactory,
         \Magento\Review\Helper\Data $reviewData,
         \Magento\Review\Helper\Action\Pager $reviewActionPager,
         \Magento\Framework\Registry $coreRegistry,
@@ -120,7 +120,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
     {
         /** @var $model \Magento\Review\Model\Review */
         $model = $this->_reviewFactory->create();
-        /** @var $collection \Magento\Review\Model\Resource\Review\Product\Collection */
+        /** @var $collection \Magento\Review\Model\ResourceModel\Review\Product\Collection */
         $collection = $this->_productsFactory->create();
 
         if ($this->getProductId() || $this->getRequest()->getParam('productId', false)) {
diff --git a/app/code/Magento/Review/Block/Adminhtml/Product/Grid.php b/app/code/Magento/Review/Block/Adminhtml/Product/Grid.php
index 91a4acb0ee78a3a65f05c6a6f79ece985b190ff8..d2a148c5f1643014fd46c933a40e37255a042c34 100644
--- a/app/code/Magento/Review/Block/Adminhtml/Product/Grid.php
+++ b/app/code/Magento/Review/Block/Adminhtml/Product/Grid.php
@@ -16,7 +16,7 @@ class Grid extends \Magento\Catalog\Block\Adminhtml\Product\Grid
     /**
      * Website collection
      *
-     * @var \Magento\Store\Model\Resource\Website\CollectionFactory
+     * @var \Magento\Store\Model\ResourceModel\Website\CollectionFactory
      */
     protected $_websitesFactory;
 
@@ -24,13 +24,13 @@ class Grid extends \Magento\Catalog\Block\Adminhtml\Product\Grid
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setsFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
      * @param \Magento\Catalog\Model\Product\Type $type
      * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $status
      * @param \Magento\Catalog\Model\Product\Visibility $visibility
      * @param \Magento\Framework\Module\Manager $moduleManager
-     * @param \Magento\Store\Model\Resource\Website\CollectionFactory $websitesFactory
+     * @param \Magento\Store\Model\ResourceModel\Website\CollectionFactory $websitesFactory
      * @param array $data
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -39,13 +39,13 @@ class Grid extends \Magento\Catalog\Block\Adminhtml\Product\Grid
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Store\Model\WebsiteFactory $websiteFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory $setsFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory $setsFactory,
         \Magento\Catalog\Model\ProductFactory $productFactory,
         \Magento\Catalog\Model\Product\Type $type,
         \Magento\Catalog\Model\Product\Attribute\Source\Status $status,
         \Magento\Catalog\Model\Product\Visibility $visibility,
         \Magento\Framework\Module\Manager $moduleManager,
-        \Magento\Store\Model\Resource\Website\CollectionFactory $websitesFactory,
+        \Magento\Store\Model\ResourceModel\Website\CollectionFactory $websitesFactory,
         array $data = []
     ) {
         $this->_websitesFactory = $websitesFactory;
diff --git a/app/code/Magento/Review/Block/Adminhtml/Rating/Detailed.php b/app/code/Magento/Review/Block/Adminhtml/Rating/Detailed.php
index e1332212f7959cc0abbfae71fe00aca03f37e895..3485d8e38f19e344103423cda352281211db4f32 100644
--- a/app/code/Magento/Review/Block/Adminhtml/Rating/Detailed.php
+++ b/app/code/Magento/Review/Block/Adminhtml/Rating/Detailed.php
@@ -7,8 +7,8 @@ namespace Magento\Review\Block\Adminhtml\Rating;
 
 use Magento\Review\Model\Rating;
 use Magento\Review\Model\Rating\Option;
-use Magento\Review\Model\Resource\Rating\Collection as RatingCollection;
-use Magento\Review\Model\Resource\Rating\Option\Vote\Collection as VoteCollection;
+use Magento\Review\Model\ResourceModel\Rating\Collection as RatingCollection;
+use Magento\Review\Model\ResourceModel\Rating\Option\Vote\Collection as VoteCollection;
 
 /**
  * Adminhtml detailed rating stars
@@ -39,28 +39,28 @@ class Detailed extends \Magento\Backend\Block\Template
     /**
      * Rating resource model
      *
-     * @var \Magento\Review\Model\Resource\Rating\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Rating\CollectionFactory
      */
     protected $_ratingsFactory;
 
     /**
      * Rating resource option model
      *
-     * @var \Magento\Review\Model\Resource\Rating\Option\Vote\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Rating\Option\Vote\CollectionFactory
      */
     protected $_votesFactory;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Review\Model\Resource\Rating\CollectionFactory $ratingsFactory
-     * @param \Magento\Review\Model\Resource\Rating\Option\Vote\CollectionFactory $votesFactory
+     * @param \Magento\Review\Model\ResourceModel\Rating\CollectionFactory $ratingsFactory
+     * @param \Magento\Review\Model\ResourceModel\Rating\Option\Vote\CollectionFactory $votesFactory
      * @param \Magento\Framework\Registry $registry
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Review\Model\Resource\Rating\CollectionFactory $ratingsFactory,
-        \Magento\Review\Model\Resource\Rating\Option\Vote\CollectionFactory $votesFactory,
+        \Magento\Review\Model\ResourceModel\Rating\CollectionFactory $ratingsFactory,
+        \Magento\Review\Model\ResourceModel\Rating\Option\Vote\CollectionFactory $votesFactory,
         \Magento\Framework\Registry $registry,
         array $data = []
     ) {
diff --git a/app/code/Magento/Review/Block/Adminhtml/Rating/Summary.php b/app/code/Magento/Review/Block/Adminhtml/Rating/Summary.php
index d8e0a55e35a400624218ce70f7b61f8b9bba6acc..e25dcd4f8dc9de602c1f2ee8e2f11a3f63afeca8 100644
--- a/app/code/Magento/Review/Block/Adminhtml/Rating/Summary.php
+++ b/app/code/Magento/Review/Block/Adminhtml/Rating/Summary.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Review\Block\Adminhtml\Rating;
 
-use Magento\Review\Model\Resource\Rating\Collection as RatingCollection;
+use Magento\Review\Model\ResourceModel\Rating\Collection as RatingCollection;
 
 /**
  * Adminhtml summary rating stars
@@ -29,7 +29,7 @@ class Summary extends \Magento\Backend\Block\Template
     /**
      * Rating resource option model
      *
-     * @var \Magento\Review\Model\Resource\Rating\Option\Vote\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Rating\Option\Vote\CollectionFactory
      */
     protected $_votesFactory;
 
@@ -42,14 +42,14 @@ class Summary extends \Magento\Backend\Block\Template
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
-     * @param \Magento\Review\Model\Resource\Rating\Option\Vote\CollectionFactory $votesFactory
+     * @param \Magento\Review\Model\ResourceModel\Rating\Option\Vote\CollectionFactory $votesFactory
      * @param \Magento\Review\Model\RatingFactory $ratingFactory
      * @param \Magento\Framework\Registry $registry
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
-        \Magento\Review\Model\Resource\Rating\Option\Vote\CollectionFactory $votesFactory,
+        \Magento\Review\Model\ResourceModel\Rating\Option\Vote\CollectionFactory $votesFactory,
         \Magento\Review\Model\RatingFactory $ratingFactory,
         \Magento\Framework\Registry $registry,
         array $data = []
diff --git a/app/code/Magento/Review/Block/Customer/ListCustomer.php b/app/code/Magento/Review/Block/Customer/ListCustomer.php
index 19936996166f1a2d875c3b9f13810284bfe24f03..6e7f04edc9cc4b1c593e9c4300dbd26b94abb1a0 100644
--- a/app/code/Magento/Review/Block/Customer/ListCustomer.php
+++ b/app/code/Magento/Review/Block/Customer/ListCustomer.php
@@ -16,14 +16,14 @@ class ListCustomer extends \Magento\Customer\Block\Account\Dashboard
     /**
      * Product reviews collection
      *
-     * @var \Magento\Review\Model\Resource\Review\Product\Collection
+     * @var \Magento\Review\Model\ResourceModel\Review\Product\Collection
      */
     protected $_collection;
 
     /**
      * Review resource model
      *
-     * @var \Magento\Review\Model\Resource\Review\Product\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -38,7 +38,7 @@ class ListCustomer extends \Magento\Customer\Block\Account\Dashboard
      * @param \Magento\Newsletter\Model\SubscriberFactory $subscriberFactory
      * @param CustomerRepositoryInterface $customerRepository
      * @param AccountManagementInterface $customerAccountManagement
-     * @param \Magento\Review\Model\Resource\Review\Product\CollectionFactory $collectionFactory
+     * @param \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory $collectionFactory
      * @param \Magento\Customer\Helper\Session\CurrentCustomer $currentCustomer
      * @param array $data
      */
@@ -48,7 +48,7 @@ class ListCustomer extends \Magento\Customer\Block\Account\Dashboard
         \Magento\Newsletter\Model\SubscriberFactory $subscriberFactory,
         CustomerRepositoryInterface $customerRepository,
         AccountManagementInterface $customerAccountManagement,
-        \Magento\Review\Model\Resource\Review\Product\CollectionFactory $collectionFactory,
+        \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory $collectionFactory,
         \Magento\Customer\Helper\Session\CurrentCustomer $currentCustomer,
         array $data = []
     ) {
@@ -97,7 +97,7 @@ class ListCustomer extends \Magento\Customer\Block\Account\Dashboard
     /**
      * Get reviews
      *
-     * @return bool|\Magento\Review\Model\Resource\Review\Product\Collection
+     * @return bool|\Magento\Review\Model\ResourceModel\Review\Product\Collection
      */
     public function getReviews()
     {
diff --git a/app/code/Magento/Review/Block/Customer/Recent.php b/app/code/Magento/Review/Block/Customer/Recent.php
index f8b66f7ce13a0254b5a90e057f48ff700dea62b5..80f25d3415603e21bc1387c6b483379f4d36dea3 100644
--- a/app/code/Magento/Review/Block/Customer/Recent.php
+++ b/app/code/Magento/Review/Block/Customer/Recent.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Review\Block\Customer;
 
-use Magento\Review\Model\Resource\Review\Product\Collection;
+use Magento\Review\Model\ResourceModel\Review\Product\Collection;
 
 /**
  * Recent Customer Reviews Block
@@ -29,7 +29,7 @@ class Recent extends \Magento\Framework\View\Element\Template
     /**
      * Review resource model
      *
-     * @var \Magento\Review\Model\Resource\Review\Product\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -40,13 +40,13 @@ class Recent extends \Magento\Framework\View\Element\Template
 
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
-     * @param \Magento\Review\Model\Resource\Review\Product\CollectionFactory $collectionFactory
+     * @param \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory $collectionFactory
      * @param \Magento\Customer\Helper\Session\CurrentCustomer $currentCustomer
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
-        \Magento\Review\Model\Resource\Review\Product\CollectionFactory $collectionFactory,
+        \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory $collectionFactory,
         \Magento\Customer\Helper\Session\CurrentCustomer $currentCustomer,
         array $data = []
     ) {
@@ -76,7 +76,7 @@ class Recent extends \Magento\Framework\View\Element\Template
     /**
      * Return collection of reviews
      *
-     * @return array|\Magento\Review\Model\Resource\Review\Product\Collection
+     * @return array|\Magento\Review\Model\ResourceModel\Review\Product\Collection
      */
     public function getReviews()
     {
diff --git a/app/code/Magento/Review/Block/Customer/View.php b/app/code/Magento/Review/Block/Customer/View.php
index b7d0c5f76347fd777fc73c2c014efa2046a8d176..eb3a7e918ac710983926b371c213fc7418a000cc 100644
--- a/app/code/Magento/Review/Block/Customer/View.php
+++ b/app/code/Magento/Review/Block/Customer/View.php
@@ -6,7 +6,7 @@
 namespace Magento\Review\Block\Customer;
 
 use Magento\Catalog\Model\Product;
-use Magento\Review\Model\Resource\Rating\Option\Vote\Collection as VoteCollection;
+use Magento\Review\Model\ResourceModel\Rating\Option\Vote\Collection as VoteCollection;
 use Magento\Review\Model\Review;
 
 /**
diff --git a/app/code/Magento/Review/Block/Form.php b/app/code/Magento/Review/Block/Form.php
index 5ec35d980c9d26b6d4848b183698093678861064..2bcc859bdd4f7f557c630d186297a5bdf8a2f185 100644
--- a/app/code/Magento/Review/Block/Form.php
+++ b/app/code/Magento/Review/Block/Form.php
@@ -8,7 +8,7 @@ namespace Magento\Review\Block;
 use Magento\Catalog\Model\Product;
 use Magento\Customer\Model\Context;
 use Magento\Customer\Model\Url;
-use Magento\Review\Model\Resource\Rating\Collection as RatingCollection;
+use Magento\Review\Model\ResourceModel\Rating\Collection as RatingCollection;
 
 /**
  * Review form block
diff --git a/app/code/Magento/Review/Block/Product/Review.php b/app/code/Magento/Review/Block/Product/Review.php
index df3dbbe45e0345f3fd7af9f6c3c41e737f9f1f6c..b553291cfbf8728ae3865831d2fbf5ee10edb176 100644
--- a/app/code/Magento/Review/Block/Product/Review.php
+++ b/app/code/Magento/Review/Block/Product/Review.php
@@ -23,20 +23,20 @@ class Review extends \Magento\Framework\View\Element\Template
     /**
      * Review resource model
      *
-     * @var \Magento\Review\Model\Resource\Review\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Review\CollectionFactory
      */
     protected $_reviewsColFactory;
 
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Review\Model\Resource\Review\CollectionFactory $collectionFactory
+     * @param \Magento\Review\Model\ResourceModel\Review\CollectionFactory $collectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Review\Model\Resource\Review\CollectionFactory $collectionFactory,
+        \Magento\Review\Model\ResourceModel\Review\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_coreRegistry = $registry;
diff --git a/app/code/Magento/Review/Block/Product/View.php b/app/code/Magento/Review/Block/Product/View.php
index 9ec22c7350853e751a9aac3b4ee5211985df5bd6..1868aa69508a5ab77be29041da106d90d86c7fa6 100644
--- a/app/code/Magento/Review/Block/Product/View.php
+++ b/app/code/Magento/Review/Block/Product/View.php
@@ -6,7 +6,7 @@
 namespace Magento\Review\Block\Product;
 
 use Magento\Catalog\Api\ProductRepositoryInterface;
-use Magento\Review\Model\Resource\Review\Collection as ReviewCollection;
+use Magento\Review\Model\ResourceModel\Review\Collection as ReviewCollection;
 
 /**
  * Product Reviews Page
@@ -26,7 +26,7 @@ class View extends \Magento\Catalog\Block\Product\View
     /**
      * Review resource model
      *
-     * @var \Magento\Review\Model\Resource\Review\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Review\CollectionFactory
      */
     protected $_reviewsColFactory;
 
@@ -41,7 +41,7 @@ class View extends \Magento\Catalog\Block\Product\View
      * @param \Magento\Customer\Model\Session $customerSession
      * @param ProductRepositoryInterface $productRepository
      * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
-     * @param \Magento\Review\Model\Resource\Review\CollectionFactory $collectionFactory
+     * @param \Magento\Review\Model\ResourceModel\Review\CollectionFactory $collectionFactory
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -56,7 +56,7 @@ class View extends \Magento\Catalog\Block\Product\View
         \Magento\Customer\Model\Session $customerSession,
         ProductRepositoryInterface $productRepository,
         \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
-        \Magento\Review\Model\Resource\Review\CollectionFactory $collectionFactory,
+        \Magento\Review\Model\ResourceModel\Review\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_reviewsColFactory = $collectionFactory;
@@ -95,6 +95,7 @@ class View extends \Magento\Catalog\Block\Product\View
      * @param bool $templateType
      * @param bool $displayIfNoReviews
      * @return string
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function getReviewsSummaryHtml(
         \Magento\Catalog\Model\Product $product,
diff --git a/app/code/Magento/Review/Block/View.php b/app/code/Magento/Review/Block/View.php
index f596e4c5042507bb29743a1a1b341e78e6fbe197..87f68a816130344a0c5a7c30a33094dee79498ab 100644
--- a/app/code/Magento/Review/Block/View.php
+++ b/app/code/Magento/Review/Block/View.php
@@ -97,7 +97,7 @@ class View extends \Magento\Catalog\Block\Product\AbstractProduct
     /**
      * Retrieve collection of ratings
      *
-     * @return \Magento\Review\Model\Resource\Rating\Option\Vote\Collection
+     * @return \Magento\Review\Model\ResourceModel\Rating\Option\Vote\Collection
      */
     public function getRating()
     {
diff --git a/app/code/Magento/Review/Model/Rating.php b/app/code/Magento/Review/Model/Rating.php
index c1fb92638986d1a88c04cc2f85788868ddf0330b..f9af9a9223ee7bcb99cf2b8b5a50eae449ee8add 100644
--- a/app/code/Magento/Review/Model/Rating.php
+++ b/app/code/Magento/Review/Model/Rating.php
@@ -8,8 +8,8 @@ namespace Magento\Review\Model;
 /**
  * Rating model
  *
- * @method Resource\Rating getResource()
- * @method Resource\Rating _getResource()
+ * @method \Magento\Review\Model\ResourceModel\Rating getResource()
+ * @method \Magento\Review\Model\ResourceModel\Rating _getResource()
  * @method array getRatingCodes()
  * @method \Magento\Review\Model\Rating setRatingCodes(array $value)
  * @method array getStores()
@@ -35,7 +35,7 @@ class Rating extends \Magento\Framework\Model\AbstractModel
     protected $_ratingOptionFactory;
 
     /**
-     * @var \Magento\Review\Model\Resource\Rating\Option\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory
      */
     protected $_ratingCollectionF;
 
@@ -43,8 +43,8 @@ class Rating extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Review\Model\Rating\OptionFactory $ratingOptionFactory
-     * @param \Magento\Review\Model\Resource\Rating\Option\CollectionFactory $ratingCollectionF
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -52,8 +52,8 @@ class Rating extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Review\Model\Rating\OptionFactory $ratingOptionFactory,
-        \Magento\Review\Model\Resource\Rating\Option\CollectionFactory $ratingCollectionF,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -69,7 +69,7 @@ class Rating extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Review\Model\Resource\Rating');
+        $this->_init('Magento\Review\Model\ResourceModel\Rating');
     }
 
     /**
diff --git a/app/code/Magento/Review/Model/Rating/Entity.php b/app/code/Magento/Review/Model/Rating/Entity.php
index b54fb7d94128dca4be7ca4d8d8a9014de61d95f1..001cecb9f6ccd24c4e4303992d25cadc76fc3084 100644
--- a/app/code/Magento/Review/Model/Rating/Entity.php
+++ b/app/code/Magento/Review/Model/Rating/Entity.php
@@ -8,8 +8,8 @@ namespace Magento\Review\Model\Rating;
 /**
  * Ratings entity model
  *
- * @method \Magento\Review\Model\Resource\Rating\Entity _getResource()
- * @method \Magento\Review\Model\Resource\Rating\Entity getResource()
+ * @method \Magento\Review\Model\ResourceModel\Rating\Entity _getResource()
+ * @method \Magento\Review\Model\ResourceModel\Rating\Entity getResource()
  * @method string getEntityCode()
  * @method \Magento\Review\Model\Rating\Entity setEntityCode(string $value)
  *
@@ -23,7 +23,7 @@ class Entity extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Review\Model\Resource\Rating\Entity');
+        $this->_init('Magento\Review\Model\ResourceModel\Rating\Entity');
     }
 
     /**
diff --git a/app/code/Magento/Review/Model/Rating/Option.php b/app/code/Magento/Review/Model/Rating/Option.php
index 391a6c47a6c03f683a71adfac500289b210a95c8..db5ea0ed35d46305c1683cfd936d45f2815ed5e8 100644
--- a/app/code/Magento/Review/Model/Rating/Option.php
+++ b/app/code/Magento/Review/Model/Rating/Option.php
@@ -8,8 +8,8 @@ namespace Magento\Review\Model\Rating;
 /**
  * Rating option model
  *
- * @method \Magento\Review\Model\Resource\Rating\Option _getResource()
- * @method \Magento\Review\Model\Resource\Rating\Option getResource()
+ * @method \Magento\Review\Model\ResourceModel\Rating\Option _getResource()
+ * @method \Magento\Review\Model\ResourceModel\Rating\Option getResource()
  * @method int getRatingId()
  * @method \Magento\Review\Model\Rating\Option setRatingId(int $value)
  * @method string getCode()
@@ -29,7 +29,7 @@ class Option extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Review\Model\Resource\Rating\Option');
+        $this->_init('Magento\Review\Model\ResourceModel\Rating\Option');
     }
 
     /**
diff --git a/app/code/Magento/Review/Model/Rating/Option/Vote.php b/app/code/Magento/Review/Model/Rating/Option/Vote.php
index 47a7adb2402d7ae4642a3d310e20ab39622a3a08..9e4ecd84f0b1bda677f60859948dca2c169daa7c 100644
--- a/app/code/Magento/Review/Model/Rating/Option/Vote.php
+++ b/app/code/Magento/Review/Model/Rating/Option/Vote.php
@@ -18,6 +18,6 @@ class Vote extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Review\Model\Resource\Rating\Option\Vote');
+        $this->_init('Magento\Review\Model\ResourceModel\Rating\Option\Vote');
     }
 }
diff --git a/app/code/Magento/Review/Model/Resource/Rating.php b/app/code/Magento/Review/Model/ResourceModel/Rating.php
similarity index 97%
rename from app/code/Magento/Review/Model/Resource/Rating.php
rename to app/code/Magento/Review/Model/ResourceModel/Rating.php
index b3c954c356b324c170daa496b07c9bf018ebae99..7a0635efa5692093c62a8b2378abf2c6b8e34d7a 100644
--- a/app/code/Magento/Review/Model/Resource/Rating.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource;
+namespace Magento\Review\Model\ResourceModel;
 
 /**
  * Rating resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Rating extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Rating extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     const RATING_STATUS_APPROVED = 'Approved';
 
@@ -32,19 +32,19 @@ class Rating extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_logger;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Review\Model\Resource\Review\Summary $reviewSummary
+     * @param \Magento\Review\Model\ResourceModel\Review\Summary $reviewSummary
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Review\Model\Resource\Review\Summary $reviewSummary,
+        \Magento\Review\Model\ResourceModel\Review\Summary $reviewSummary,
         $connectionName = null
     ) {
         $this->moduleManager = $moduleManager;
diff --git a/app/code/Magento/Review/Model/Resource/Rating/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php
similarity index 93%
rename from app/code/Magento/Review/Model/Resource/Rating/Collection.php
rename to app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php
index 3cc71ec64a7b555c3795e18c3b98da9df3d9081c..8d030fff72b3af78791efe04304d97933ff13731 100644
--- a/app/code/Magento/Review/Model/Resource/Rating/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Rating;
+namespace Magento\Review\Model\ResourceModel\Rating;
 
 /**
  * Rating collection resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var \Magento\Store\Model\StoreManagerInterface
@@ -18,7 +18,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected $_storeManager;
 
     /**
-     * @var \Magento\Review\Model\Resource\Rating\Option\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory
      */
     protected $_ratingCollectionF;
 
@@ -34,9 +34,9 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Review\Model\Resource\Rating\Option\CollectionFactory $ratingCollectionF
+     * @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -44,9 +44,9 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Review\Model\Resource\Rating\Option\CollectionFactory $ratingCollectionF,
+        \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         $this->_ratingCollectionF = $ratingCollectionF;
@@ -65,7 +65,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Review\Model\Rating', 'Magento\Review\Model\Resource\Rating');
+        $this->_init('Magento\Review\Model\Rating', 'Magento\Review\Model\ResourceModel\Rating');
     }
 
     /**
@@ -157,7 +157,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         $arrRatingId = $this->getColumnValues('rating_id');
 
         if (!empty($arrRatingId)) {
-            /** @var \Magento\Review\Model\Resource\Rating\Option\Collection $collection */
+            /** @var \Magento\Review\Model\ResourceModel\Rating\Option\Collection $collection */
             $collection = $this->_ratingCollectionF->create()->addRatingFilter(
                 $arrRatingId
             )->setPositionOrder()->load();
diff --git a/app/code/Magento/Review/Model/Resource/Rating/Entity.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Entity.php
similarity index 87%
rename from app/code/Magento/Review/Model/Resource/Rating/Entity.php
rename to app/code/Magento/Review/Model/ResourceModel/Rating/Entity.php
index ba724240e2f57c352eda4b3fbb1678810ec6fce1..f2254ab506a43554c8b5c8f1ae621ceac8c76c9e 100644
--- a/app/code/Magento/Review/Model/Resource/Rating/Entity.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Entity.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Rating;
+namespace Magento\Review\Model\ResourceModel\Rating;
 
 /**
  * Rating entity resource
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Entity extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Entity extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Rating entity resource initialization
diff --git a/app/code/Magento/Review/Model/Resource/Rating/Grid/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Grid/Collection.php
similarity index 78%
rename from app/code/Magento/Review/Model/Resource/Rating/Grid/Collection.php
rename to app/code/Magento/Review/Model/ResourceModel/Rating/Grid/Collection.php
index 6f0ccf9fdb8669ffd1a6277f328182cb13d67f06..6a8723302d94220eb42cde5b5a97e8fa4ad3584e 100644
--- a/app/code/Magento/Review/Model/Resource/Rating/Grid/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Grid/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Rating\Grid;
+namespace Magento\Review\Model\ResourceModel\Rating\Grid;
 
 /**
  * Rating grid collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Review\Model\Resource\Rating\Collection
+class Collection extends \Magento\Review\Model\ResourceModel\Rating\Collection
 {
     /**
      * Core registry
@@ -25,10 +25,10 @@ class Collection extends \Magento\Review\Model\Resource\Rating\Collection
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Review\Model\Resource\Rating\Option\CollectionFactory $ratingCollectionF
+     * @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF
      * @param \Magento\Framework\Registry $coreRegistry
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -36,10 +36,10 @@ class Collection extends \Magento\Review\Model\Resource\Rating\Collection
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Review\Model\Resource\Rating\Option\CollectionFactory $ratingCollectionF,
+        \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF,
         \Magento\Framework\Registry $coreRegistry,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_coreRegistry = $coreRegistry;
         parent::__construct(
diff --git a/app/code/Magento/Review/Model/Resource/Rating/Option.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php
similarity index 96%
rename from app/code/Magento/Review/Model/Resource/Rating/Option.php
rename to app/code/Magento/Review/Model/ResourceModel/Rating/Option.php
index c147523ec4b8a8fb162975d3bfbe16cf8c2b83b6..e652866b456c5bb68674fdfb5b84b424d7c95c85 100644
--- a/app/code/Magento/Review/Model/Resource/Rating/Option.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Rating;
+namespace Magento\Review\Model\ResourceModel\Rating;
 
 /**
  * Rating option resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Option extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Review table
@@ -79,14 +79,14 @@ class Option extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_ratingOptionVoteF;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Review\Model\Rating\Option\VoteFactory $ratingOptionVoteF
      * @param \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Review\Model\Rating\Option\VoteFactory $ratingOptionVoteF,
         \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress,
diff --git a/app/code/Magento/Review/Model/Resource/Rating/Option/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Collection.php
similarity index 85%
rename from app/code/Magento/Review/Model/Resource/Rating/Option/Collection.php
rename to app/code/Magento/Review/Model/ResourceModel/Rating/Option/Collection.php
index f46740ee3b0420ca77d1be66cda5c28a15c48c7b..453835f5fb7ec786bb4220ee2ec20136f8f6ba22 100644
--- a/app/code/Magento/Review/Model/Resource/Rating/Option/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Rating\Option;
+namespace Magento\Review\Model\ResourceModel\Rating\Option;
 
 /**
  * Rating option collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Rating votes table
@@ -26,7 +26,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Review\Model\Rating\Option', 'Magento\Review\Model\Resource\Rating\Option');
+        $this->_init('Magento\Review\Model\Rating\Option', 'Magento\Review\Model\ResourceModel\Rating\Option');
         $this->_ratingVoteTable = $this->getTable('rating_option_vote');
     }
 
diff --git a/app/code/Magento/Review/Model/Resource/Rating/Option/Vote.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote.php
similarity index 74%
rename from app/code/Magento/Review/Model/Resource/Rating/Option/Vote.php
rename to app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote.php
index 2b835ca0936c2101b14cc2df9ceb3fb7dd86b5dc..d9afa8cd30087ac77c11dbe5db25faf7a9fb9729 100644
--- a/app/code/Magento/Review/Model/Resource/Rating/Option/Vote.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Rating\Option;
+namespace Magento\Review\Model\ResourceModel\Rating\Option;
 
 /**
  * Rating vote resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Vote extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Vote extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Review/Model/Resource/Rating/Option/Vote/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote/Collection.php
similarity index 85%
rename from app/code/Magento/Review/Model/Resource/Rating/Option/Vote/Collection.php
rename to app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote/Collection.php
index c646826f3476e34de84724fcbcd0c2ebda9fea91..73dfc5fc74a00b8644bbe381a5e0f24fcbbcc8f0 100644
--- a/app/code/Magento/Review/Model/Resource/Rating/Option/Vote/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Rating/Option/Vote/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Rating\Option\Vote;
+namespace Magento\Review\Model\ResourceModel\Rating\Option\Vote;
 
 /**
  * Rating votes collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store list manager
@@ -20,7 +20,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected $_storeManager;
 
     /**
-     * @var \Magento\Review\Model\Resource\Rating\Option\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory
      */
     protected $_ratingCollectionF;
 
@@ -30,9 +30,9 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Review\Model\Resource\Rating\Option\CollectionFactory $ratingCollectionF
+     * @param \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -40,9 +40,9 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Review\Model\Resource\Rating\Option\CollectionFactory $ratingCollectionF,
+        \Magento\Review\Model\ResourceModel\Rating\Option\CollectionFactory $ratingCollectionF,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         $this->_ratingCollectionF = $ratingCollectionF;
@@ -56,7 +56,10 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Review\Model\Rating\Option\Vote', 'Magento\Review\Model\Resource\Rating\Option\Vote');
+        $this->_init(
+            'Magento\Review\Model\Rating\Option\Vote',
+            'Magento\Review\Model\ResourceModel\Rating\Option\Vote'
+        );
     }
 
     /**
@@ -172,7 +175,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
             return $this;
         }
         foreach ($this->getItems() as $item) {
-            /** @var \Magento\Review\Model\Resource\Rating\Option\Collection $options */
+            /** @var \Magento\Review\Model\ResourceModel\Rating\Option\Collection $options */
             $options = $this->_ratingCollectionF->create();
             $options->addRatingFilter($item->getRatingId())->load();
 
diff --git a/app/code/Magento/Review/Model/Resource/Review.php b/app/code/Magento/Review/Model/ResourceModel/Review.php
similarity index 97%
rename from app/code/Magento/Review/Model/Resource/Review.php
rename to app/code/Magento/Review/Model/ResourceModel/Review.php
index a146c72df785dafea98d221e65d56a938247a730..760d841c94eba9e8a6ea962757d595745a2079f8 100644
--- a/app/code/Magento/Review/Model/Resource/Review.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource;
+namespace Magento\Review\Model\ResourceModel;
 
 use Magento\Framework\Model\AbstractModel;
 
 /**
  * Review resource model
  */
-class Review extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Review extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Review table
@@ -85,20 +85,20 @@ class Review extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Rating resource model
      *
-     * @var \Magento\Review\Model\Resource\Rating\Option
+     * @var \Magento\Review\Model\ResourceModel\Rating\Option
      */
     protected $_ratingOptions;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Review\Model\RatingFactory $ratingFactory
-     * @param \Magento\Review\Model\Resource\Rating\Option $ratingOptions
+     * @param \Magento\Review\Model\ResourceModel\Rating\Option $ratingOptions
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Review\Model\RatingFactory $ratingFactory,
diff --git a/app/code/Magento/Review/Model/Resource/Review/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Review/Collection.php
similarity index 96%
rename from app/code/Magento/Review/Model/Resource/Review/Collection.php
rename to app/code/Magento/Review/Model/ResourceModel/Review/Collection.php
index 3b056125fc02fef49507c6769664397679120122..0cbd00fe45ecb52b7d6676e7aae2d274d4be8f61 100644
--- a/app/code/Magento/Review/Model/Resource/Review/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Review;
+namespace Magento\Review\Model\ResourceModel\Review;
 
 /**
  * Review collection resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Review table
@@ -83,7 +83,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Review\Model\Rating\Option\VoteFactory $voteFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -94,7 +94,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Review\Model\Rating\Option\VoteFactory $voteFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_reviewData = $reviewData;
         $this->_voteFactory = $voteFactory;
@@ -110,7 +110,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Review\Model\Review', 'Magento\Review\Model\Resource\Review');
+        $this->_init('Magento\Review\Model\Review', 'Magento\Review\Model\ResourceModel\Review');
     }
 
     /**
diff --git a/app/code/Magento/Review/Model/Resource/Review/Product/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Review/Product/Collection.php
similarity index 96%
rename from app/code/Magento/Review/Model/Resource/Review/Product/Collection.php
rename to app/code/Magento/Review/Model/ResourceModel/Review/Product/Collection.php
index c7472c613fe7bfb0dde97ff9a638be44149a31cd..d7d8aebfdf0c4cc897058d51eb84067878e99c75 100644
--- a/app/code/Magento/Review/Model/Resource/Review/Product/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review/Product/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Review\Product;
+namespace Magento\Review\Model\ResourceModel\Review\Product;
 
 use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
 use Magento\Framework\DB\Select;
@@ -14,7 +14,7 @@ use Magento\Framework\DB\Select;
  * @author      Magento Core Team <core@magentocommerce.com>
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
+class Collection extends \Magento\Catalog\Model\ResourceModel\Product\Collection
 {
     /**
      * Entities alias
@@ -64,16 +64,16 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Eav\Model\Config $eavConfig
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param \Magento\Eav\Model\EntityFactory $eavEntityFactory
-     * @param \Magento\Catalog\Model\Resource\Helper $resourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Module\Manager $moduleManager
      * @param \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrl
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
@@ -90,16 +90,16 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Eav\Model\Config $eavConfig,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         \Magento\Eav\Model\EntityFactory $eavEntityFactory,
-        \Magento\Catalog\Model\Resource\Helper $resourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Helper $resourceHelper,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Module\Manager $moduleManager,
         \Magento\Catalog\Model\Indexer\Product\Flat\State $catalogProductFlatState,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Catalog\Model\Product\OptionFactory $productOptionFactory,
-        \Magento\Catalog\Model\Resource\Url $catalogUrl,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Framework\Stdlib\DateTime $dateTime,
@@ -141,7 +141,7 @@ class Collection extends \Magento\Catalog\Model\Resource\Product\Collection
      */
     protected function _construct()
     {
-        $this->_init('Magento\Catalog\Model\Product', 'Magento\Catalog\Model\Resource\Product');
+        $this->_init('Magento\Catalog\Model\Product', 'Magento\Catalog\Model\ResourceModel\Product');
         $this->setRowIdFieldName('review_id');
         $this->_reviewStoreTable = $this->_resource->getTableName('review_store');
         $this->_initTables();
diff --git a/app/code/Magento/Review/Model/Resource/Review/Status.php b/app/code/Magento/Review/Model/ResourceModel/Review/Status.php
similarity index 75%
rename from app/code/Magento/Review/Model/Resource/Review/Status.php
rename to app/code/Magento/Review/Model/ResourceModel/Review/Status.php
index bcd20609f09e45778a2b5543b71a970383dcba47..8e1203d83504f3c3719ddfdd8054bbc035d62b23 100644
--- a/app/code/Magento/Review/Model/Resource/Review/Status.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review/Status.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Review;
+namespace Magento\Review\Model\ResourceModel\Review;
 
 /**
  * Review status resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Status extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Status extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource status model initialization
diff --git a/app/code/Magento/Review/Model/Resource/Review/Status/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Review/Status/Collection.php
similarity index 78%
rename from app/code/Magento/Review/Model/Resource/Review/Status/Collection.php
rename to app/code/Magento/Review/Model/ResourceModel/Review/Status/Collection.php
index 85d9dac78d9517a7c3f20f8d8e241be5d214ed6f..6066207cd03a11414a5a67f47295435c87c2e92f 100644
--- a/app/code/Magento/Review/Model/Resource/Review/Status/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review/Status/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Review\Model\Resource\Review\Status;
+namespace Magento\Review\Model\ResourceModel\Review\Status;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Review status table
@@ -27,7 +27,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Review\Model\Review\Status', 'Magento\Review\Model\Resource\Review\Status');
+        $this->_init('Magento\Review\Model\Review\Status', 'Magento\Review\Model\ResourceModel\Review\Status');
     }
 
     /**
diff --git a/app/code/Magento/Review/Model/Resource/Review/Summary.php b/app/code/Magento/Review/Model/ResourceModel/Review/Summary.php
similarity index 94%
rename from app/code/Magento/Review/Model/Resource/Review/Summary.php
rename to app/code/Magento/Review/Model/ResourceModel/Review/Summary.php
index 6ad3a382b8b540758aca65dd5b2c3bcaec6d4194..260e3892037d38ee7793dafe40605f2d176f67aa 100644
--- a/app/code/Magento/Review/Model/Resource/Review/Summary.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review/Summary.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Review;
+namespace Magento\Review\Model\ResourceModel\Review;
 
 use Magento\Framework\Model\AbstractModel;
 
@@ -12,7 +12,7 @@ use Magento\Framework\Model\AbstractModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Summary extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Summary extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define module
diff --git a/app/code/Magento/Review/Model/Resource/Review/Summary/Collection.php b/app/code/Magento/Review/Model/ResourceModel/Review/Summary/Collection.php
similarity index 81%
rename from app/code/Magento/Review/Model/Resource/Review/Summary/Collection.php
rename to app/code/Magento/Review/Model/ResourceModel/Review/Summary/Collection.php
index 7a14b8f0b433eabf7fa3096cfadbafaadc14e0f1..9cc5a8b54d656c3c518e564029f55112c69bd9d3 100644
--- a/app/code/Magento/Review/Model/Resource/Review/Summary/Collection.php
+++ b/app/code/Magento/Review/Model/ResourceModel/Review/Summary/Collection.php
@@ -3,21 +3,21 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Review\Summary;
+namespace Magento\Review\Model\ResourceModel\Review\Summary;
 
 /**
  * Review summery collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * {@inheritdoc}
      */
     protected function _construct()
     {
-        $this->_init('Magento\Review\Model\Review\Summary', 'Magento\Review\Model\Resource\Review\Summary');
+        $this->_init('Magento\Review\Model\Review\Summary', 'Magento\Review\Model\ResourceModel\Review\Summary');
     }
 
     /**
diff --git a/app/code/Magento/Review/Model/Review.php b/app/code/Magento/Review/Model/Review.php
index 6a0b1c6894f066f745a827680943c66bcc181fb1..a44da6d2f825851d1e65636140c2a8047a491af2 100644
--- a/app/code/Magento/Review/Model/Review.php
+++ b/app/code/Magento/Review/Model/Review.php
@@ -7,8 +7,8 @@ namespace Magento\Review\Model;
 
 use Magento\Catalog\Model\Product;
 use Magento\Framework\DataObject\IdentityInterface;
-use Magento\Review\Model\Resource\Review\Product\Collection as ProductCollection;
-use Magento\Review\Model\Resource\Review\Status\Collection as StatusCollection;
+use Magento\Review\Model\ResourceModel\Review\Product\Collection as ProductCollection;
+use Magento\Review\Model\ResourceModel\Review\Status\Collection as StatusCollection;
 
 /**
  * Review model
@@ -64,14 +64,14 @@ class Review extends \Magento\Framework\Model\AbstractModel implements IdentityI
     /**
      * Review product collection factory
      *
-     * @var \Magento\Review\Model\Resource\Review\Product\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory
      */
     protected $productCollectionFactory;
 
     /**
      * Review status collection factory
      *
-     * @var \Magento\Review\Model\Resource\Review\Status\CollectionFactory
+     * @var \Magento\Review\Model\ResourceModel\Review\Status\CollectionFactory
      */
     protected $_statusFactory;
 
@@ -113,14 +113,14 @@ class Review extends \Magento\Framework\Model\AbstractModel implements IdentityI
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Review\Model\Resource\Review\Product\CollectionFactory $productFactory
-     * @param \Magento\Review\Model\Resource\Review\Status\CollectionFactory $statusFactory
-     * @param \Magento\Review\Model\Resource\Review\Summary\CollectionFactory $summaryFactory
+     * @param \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory $productFactory
+     * @param \Magento\Review\Model\ResourceModel\Review\Status\CollectionFactory $statusFactory
+     * @param \Magento\Review\Model\ResourceModel\Review\Summary\CollectionFactory $summaryFactory
      * @param \Magento\Review\Model\Review\SummaryFactory $summaryModFactory
      * @param \Magento\Review\Model\Review\Summary $reviewSummary
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\UrlInterface $urlModel
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -128,14 +128,14 @@ class Review extends \Magento\Framework\Model\AbstractModel implements IdentityI
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Review\Model\Resource\Review\Product\CollectionFactory $productFactory,
-        \Magento\Review\Model\Resource\Review\Status\CollectionFactory $statusFactory,
-        \Magento\Review\Model\Resource\Review\Summary\CollectionFactory $summaryFactory,
+        \Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory $productFactory,
+        \Magento\Review\Model\ResourceModel\Review\Status\CollectionFactory $statusFactory,
+        \Magento\Review\Model\ResourceModel\Review\Summary\CollectionFactory $summaryFactory,
         \Magento\Review\Model\Review\SummaryFactory $summaryModFactory,
         \Magento\Review\Model\Review\Summary $reviewSummary,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\UrlInterface $urlModel,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -156,7 +156,7 @@ class Review extends \Magento\Framework\Model\AbstractModel implements IdentityI
      */
     protected function _construct()
     {
-        $this->_init('Magento\Review\Model\Resource\Review');
+        $this->_init('Magento\Review\Model\ResourceModel\Review');
     }
 
     /**
diff --git a/app/code/Magento/Review/Model/Review/Status.php b/app/code/Magento/Review/Model/Review/Status.php
index d1cd3e530a27e07e38d75db2aac3a4f4e0f5acd5..cb5b9f71368877f920a55b0e61553e39d5c157a3 100644
--- a/app/code/Magento/Review/Model/Review/Status.php
+++ b/app/code/Magento/Review/Model/Review/Status.php
@@ -17,18 +17,18 @@ class Status extends \Magento\Framework\Model\AbstractModel
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
         parent::__construct($context, $registry, $resource, $resourceCollection, $data);
-        $this->_init('Magento\Review\Model\Resource\Review\Status');
+        $this->_init('Magento\Review\Model\ResourceModel\Review\Status');
     }
 }
diff --git a/app/code/Magento/Review/Model/Review/Summary.php b/app/code/Magento/Review/Model/Review/Summary.php
index ede6aab73f51560f894fce34570674d9789070bf..dac487c0aecda52466aeb06f022e72c544195acd 100644
--- a/app/code/Magento/Review/Model/Review/Summary.php
+++ b/app/code/Magento/Review/Model/Review/Summary.php
@@ -15,15 +15,15 @@ class Summary extends \Magento\Framework\Model\AbstractModel
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Review\Model\Resource\Review\Summary $resource
-     * @param \Magento\Review\Model\Resource\Review\Summary\Collection $resourceCollection
+     * @param \Magento\Review\Model\ResourceModel\Review\Summary $resource
+     * @param \Magento\Review\Model\ResourceModel\Review\Summary\Collection $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Review\Model\Resource\Review\Summary $resource,
-        \Magento\Review\Model\Resource\Review\Summary\Collection $resourceCollection,
+        \Magento\Review\Model\ResourceModel\Review\Summary $resource,
+        \Magento\Review\Model\ResourceModel\Review\Summary\Collection $resourceCollection,
         array $data = []
     ) {
         parent::__construct($context, $registry, $resource, $resourceCollection, $data);
diff --git a/app/code/Magento/Review/Model/Rss.php b/app/code/Magento/Review/Model/Rss.php
index 95296298ce60240583a619cdbcfaaeb4081462a1..1acd912d6be2f6ed6d892560d3a4e960e5752686 100644
--- a/app/code/Magento/Review/Model/Rss.php
+++ b/app/code/Magento/Review/Model/Rss.php
@@ -36,7 +36,7 @@ class Rss extends \Magento\Framework\Model\AbstractModel
     }
 
     /**
-     * @return $this|\Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return $this|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getProductCollection()
     {
diff --git a/app/code/Magento/Review/Observer/ProcessProductAfterDeleteEventObserver.php b/app/code/Magento/Review/Observer/ProcessProductAfterDeleteEventObserver.php
index 3c819cc9beb16c7417fa8599d1b9c812b04750a0..ed2abceeecfa0aaab5280c19a4c839e0d7173240 100644
--- a/app/code/Magento/Review/Observer/ProcessProductAfterDeleteEventObserver.php
+++ b/app/code/Magento/Review/Observer/ProcessProductAfterDeleteEventObserver.php
@@ -12,22 +12,22 @@ class ProcessProductAfterDeleteEventObserver implements ObserverInterface
     /**
      * Review resource model
      *
-     * @var \Magento\Review\Model\Resource\Review
+     * @var \Magento\Review\Model\ResourceModel\Review
      */
     protected $_resourceReview;
 
     /**
-     * @var \Magento\Review\Model\Resource\Rating
+     * @var \Magento\Review\Model\ResourceModel\Rating
      */
     protected $_resourceRating;
 
     /**
-     * @param \Magento\Review\Model\Resource\Review $resourceReview
-     * @param \Magento\Review\Model\Resource\Rating $resourceRating
+     * @param \Magento\Review\Model\ResourceModel\Review $resourceReview
+     * @param \Magento\Review\Model\ResourceModel\Rating $resourceRating
      */
     public function __construct(
-        \Magento\Review\Model\Resource\Review $resourceReview,
-        \Magento\Review\Model\Resource\Rating $resourceRating
+        \Magento\Review\Model\ResourceModel\Review $resourceReview,
+        \Magento\Review\Model\ResourceModel\Rating $resourceRating
     ) {
         $this->_resourceReview = $resourceReview;
         $this->_resourceRating = $resourceRating;
diff --git a/app/code/Magento/Review/Test/Unit/Block/Adminhtml/Rating/Edit/Tab/FormTest.php b/app/code/Magento/Review/Test/Unit/Block/Adminhtml/Rating/Edit/Tab/FormTest.php
index 17abb27f20774f3a42c9d399706cae16fccf5c44..d7502365eb7ab3d96e70c7e68fa9051571c2b94e 100644
--- a/app/code/Magento/Review/Test/Unit/Block/Adminhtml/Rating/Edit/Tab/FormTest.php
+++ b/app/code/Magento/Review/Test/Unit/Block/Adminhtml/Rating/Edit/Tab/FormTest.php
@@ -19,7 +19,7 @@ class FormTest extends \PHPUnit_Framework_TestCase
     protected $rating;
 
     /**
-     * @var \Magento\Review\Model\Resource\Rating\Option\Collection
+     * @var \Magento\Review\Model\ResourceModel\Rating\Option\Collection
      */
     protected $ratingOptionCollection;
 
@@ -96,7 +96,7 @@ class FormTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->ratingOptionCollection = $this->getMock(
-            '\Magento\Review\Model\Resource\Rating\Option\Collection',
+            '\Magento\Review\Model\ResourceModel\Rating\Option\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Review/Test/Unit/Block/Adminhtml/RssTest.php b/app/code/Magento/Review/Test/Unit/Block/Adminhtml/RssTest.php
index ba56b3d985955e40a48720c50dea636f2a1a0af5..55e2202969e41cb8f48678be38219c455045ab7d 100644
--- a/app/code/Magento/Review/Test/Unit/Block/Adminhtml/RssTest.php
+++ b/app/code/Magento/Review/Test/Unit/Block/Adminhtml/RssTest.php
@@ -73,7 +73,7 @@ class RssTest extends \PHPUnit_Framework_TestCase
         ];
         $rssUrl = 'http://rss.magento.com';
         $productModel = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product',
+            'Magento\Catalog\Model\ResourceModel\Product',
             [
                 'getStoreId',
                 'getId',
diff --git a/app/code/Magento/Review/Test/Unit/Block/Customer/RecentTest.php b/app/code/Magento/Review/Test/Unit/Block/Customer/RecentTest.php
index ce1849881dbe99a16e26c4977d6eca61c80b85df..da6d5aba88d88ec86fcbe40a357949a61e6793ce 100644
--- a/app/code/Magento/Review/Test/Unit/Block/Customer/RecentTest.php
+++ b/app/code/Magento/Review/Test/Unit/Block/Customer/RecentTest.php
@@ -18,10 +18,10 @@ class RecentTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\View\Element\Template\Context|\PHPUnit_Framework_MockObject_MockObject */
     protected $context;
 
-    /** @var \Magento\Review\Model\Resource\Review\Product\Collection|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Review\Model\ResourceModel\Review\Product\Collection|\PHPUnit_Framework_MockObject_MockObject */
     protected $collection;
 
-    /** @var \Magento\Review\Model\Resource\Review\Product\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \PHPUnit_Framework_MockObject_MockObject */
     protected $collectionFactory;
 
     /** @var \Magento\Customer\Helper\Session\CurrentCustomer|\PHPUnit_Framework_MockObject_MockObject */
@@ -42,14 +42,14 @@ class RecentTest extends \PHPUnit_Framework_TestCase
             $this->returnValue($this->storeManager)
         );
         $this->collection = $this->getMock(
-            'Magento\Review\Model\Resource\Review\Product\Collection',
+            'Magento\Review\Model\ResourceModel\Review\Product\Collection',
             [],
             [],
             '',
             false
         );
         $this->collectionFactory = $this->getMock(
-            'Magento\Review\Model\Resource\Review\Product\CollectionFactory',
+            'Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Review/Test/Unit/Model/Resource/Review/CollectionTest.php b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/CollectionTest.php
similarity index 93%
rename from app/code/Magento/Review/Test/Unit/Model/Resource/Review/CollectionTest.php
rename to app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/CollectionTest.php
index 123dff97ce66da73e8628e84ad375a6f5112dc94..c93e7c82679cd42f3a4acaabcb783800a613a2f3 100644
--- a/app/code/Magento/Review/Test/Unit/Model/Resource/Review/CollectionTest.php
+++ b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/CollectionTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Test\Unit\Model\Resource\Review;
+namespace Magento\Review\Test\Unit\Model\ResourceModel\Review;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Review\Model\Resource\Review\Collection
+     * @var \Magento\Review\Model\ResourceModel\Review\Collection
      */
     protected $model;
 
@@ -23,7 +23,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $storeManagerMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb | \PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -44,7 +44,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface');
         $this->storeManagerMock->expects($this->any())->method('getStore')->will($this->returnValue($store));
         $this->objectManager = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this));
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['getConnection', 'getMainTable', 'getTable'])
             ->getMockForAbstractClass();
@@ -70,7 +70,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
                 return $table;
             });
         $this->model = $this->objectManager->getObject(
-            '\Magento\Review\Model\Resource\Review\Collection',
+            '\Magento\Review\Model\ResourceModel\Review\Collection',
             [
                 'storeManager' => $this->storeManagerMock,
                 'resource' => $this->resourceMock,
@@ -89,7 +89,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
                 ['detail_id', 'title', 'detail', 'nickname', 'customer_id']
             );
         $this->objectManager->getObject(
-            '\Magento\Review\Model\Resource\Review\Collection',
+            '\Magento\Review\Model\ResourceModel\Review\Collection',
             [
                 'storeManager' => $this->storeManagerMock,
                 'resource' => $this->resourceMock,
diff --git a/app/code/Magento/Review/Test/Unit/Model/Resource/Review/Product/CollectionTest.php b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Product/CollectionTest.php
similarity index 95%
rename from app/code/Magento/Review/Test/Unit/Model/Resource/Review/Product/CollectionTest.php
rename to app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Product/CollectionTest.php
index 0fc283a83db35f28300c8a725e6a40fe754dde7b..138201b0e44761548fbe4b09c89e3c12eca060d4 100644
--- a/app/code/Magento/Review/Test/Unit/Model/Resource/Review/Product/CollectionTest.php
+++ b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Product/CollectionTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Test\Unit\Model\Resource\Review\Product;
+namespace Magento\Review\Test\Unit\Model\ResourceModel\Review\Product;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Review\Model\Resource\Review\Product\Collection
+     * @var \Magento\Review\Model\ResourceModel\Review\Product\Collection
      */
     protected $model;
 
@@ -39,7 +39,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         );
         $this->connectionMock->expects($this->once())->method('select')->will($this->returnValue($this->dbSelect));
         $entity = $this->getMock(
-            'Magento\Catalog\Model\Resource\Product',
+            'Magento\Catalog\Model\ResourceModel\Product',
             ['getConnection', 'getTable', 'getDefaultAttributes', 'getEntityTable', 'getEntityType', 'getType'],
             [],
             '',
@@ -67,7 +67,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         $fetchStrategy->expects($this->any())->method('fetchAll')->will($this->returnValue([]));
         $this->model = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this))
             ->getObject(
-                '\Magento\Review\Model\Resource\Review\Product\Collection',
+                '\Magento\Review\Model\ResourceModel\Review\Product\Collection',
                 [
                     'universalFactory' => $universalFactory,
                     'storeManager' => $storeManager,
diff --git a/app/code/Magento/Review/Test/Unit/Model/Resource/Review/Summary/CollectionTest.php b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Summary/CollectionTest.php
similarity index 92%
rename from app/code/Magento/Review/Test/Unit/Model/Resource/Review/Summary/CollectionTest.php
rename to app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Summary/CollectionTest.php
index 2ee09f20ab54b4a9336d94edf25564540f1ae7ed..e3ae5ad44c7dcad79de3f0fe4f61977452229e1b 100644
--- a/app/code/Magento/Review/Test/Unit/Model/Resource/Review/Summary/CollectionTest.php
+++ b/app/code/Magento/Review/Test/Unit/Model/ResourceModel/Review/Summary/CollectionTest.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Review\Test\Unit\Model\Resource\Review\Summary;
+namespace Magento\Review\Test\Unit\Model\ResourceModel\Review\Summary;
 
-use \Magento\Review\Model\Resource\Review\Summary\Collection;
+use \Magento\Review\Model\ResourceModel\Review\Summary\Collection;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -31,7 +31,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $loggerMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -62,7 +62,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->loggerMock = $this->getMock('Psr\Log\LoggerInterface');
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->setMethods(['getConnection', 'getMainTable', 'getTable'])
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
@@ -94,7 +94,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
 
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->collection = $objectManager->getObject(
-            'Magento\Review\Model\Resource\Review\Summary\Collection',
+            'Magento\Review\Model\ResourceModel\Review\Summary\Collection',
             [
                 'entityFactory' => $this->entityFactoryMock,
                 'logger' => $this->loggerMock,
diff --git a/app/code/Magento/Review/Test/Unit/Model/ReviewTest.php b/app/code/Magento/Review/Test/Unit/Model/ReviewTest.php
index 3408ac83d7a5c027367027a947507889c0f4bc10..0f12dda793e03dea7208c7b67524897c9db877db 100644
--- a/app/code/Magento/Review/Test/Unit/Model/ReviewTest.php
+++ b/app/code/Magento/Review/Test/Unit/Model/ReviewTest.php
@@ -46,7 +46,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\UrlInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $urlInterfaceMock;
 
-    /** @var \Magento\Review\Model\Resource\Review|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Review\Model\ResourceModel\Review|\PHPUnit_Framework_MockObject_MockObject */
     protected $resource;
 
     /** @var int  */
@@ -57,21 +57,21 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
         $this->contextMock = $this->getMock('Magento\Framework\Model\Context', [], [], '', false);
         $this->registryMock = $this->getMock('Magento\Framework\Registry');
         $this->productFactoryMock = $this->getMock(
-            'Magento\Review\Model\Resource\Review\Product\CollectionFactory',
+            'Magento\Review\Model\ResourceModel\Review\Product\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->statusFactoryMock = $this->getMock(
-            'Magento\Review\Model\Resource\Review\Status\CollectionFactory',
+            'Magento\Review\Model\ResourceModel\Review\Status\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->reviewSummaryMock = $this->getMock(
-            'Magento\Review\Model\Resource\Review\Summary\CollectionFactory',
+            'Magento\Review\Model\ResourceModel\Review\Summary\CollectionFactory',
             [],
             [],
             '',
@@ -87,7 +87,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
         $this->summaryMock = $this->getMock('Magento\Review\Model\Review\Summary', [], [], '', false);
         $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface');
         $this->urlInterfaceMock = $this->getMock('Magento\Framework\UrlInterface');
-        $this->resource = $this->getMock('Magento\Review\Model\Resource\Review', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Review\Model\ResourceModel\Review', [], [], '', false);
 
         $this->objectManagerHelper = new ObjectManagerHelper($this);
         $this->review = $this->objectManagerHelper->getObject(
@@ -110,7 +110,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
 
     public function testGetProductCollection()
     {
-        $collection = $this->getMock('Magento\Review\Model\Resource\Review\Product\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Review\Model\ResourceModel\Review\Product\Collection', [], [], '', false);
         $this->productFactoryMock->expects($this->once())
             ->method('create')
             ->will($this->returnValue($collection));
@@ -119,7 +119,7 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
 
     public function testGetStatusCollection()
     {
-        $collection = $this->getMock('Magento\Review\Model\Resource\Review\Status\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Review\Model\ResourceModel\Review\Status\Collection', [], [], '', false);
         $this->statusFactoryMock->expects($this->once())
             ->method('create')
             ->will($this->returnValue($collection));
diff --git a/app/code/Magento/Review/Test/Unit/Model/RssTest.php b/app/code/Magento/Review/Test/Unit/Model/RssTest.php
index 26dbceb83e891d7918fba21c06d29e3cc2b6f7e6..9683a1628f64a7feff3975933de077fd32e8d11e 100644
--- a/app/code/Magento/Review/Test/Unit/Model/RssTest.php
+++ b/app/code/Magento/Review/Test/Unit/Model/RssTest.php
@@ -58,7 +58,7 @@ class RssTest extends \PHPUnit_Framework_TestCase
             false
         );
         $productCollection = $this->getMock(
-            'Magento\Review\Model\Resource\Review\Product\Collection',
+            'Magento\Review\Model\ResourceModel\Review\Product\Collection',
             [
                 'addStatusFilter',
                 'addAttributeToSelect',
diff --git a/app/code/Magento/Review/composer.json b/app/code/Magento/Review/composer.json
index e5c9d935201561f33f3425a3683fba183a3021ff..72317bb39e3ec9517663c4ba79ad54b1db068bd7 100644
--- a/app/code/Magento/Review/composer.json
+++ b/app/code/Magento/Review/composer.json
@@ -14,7 +14,8 @@
         "magento/module-ui": "1.0.0-beta"
     },
     "suggest": {
-        "magento/module-cookie": "1.0.0-beta"
+        "magento/module-cookie": "1.0.0-beta",
+        "magento/module-review-sample-data": "Sample Data version:1.0.0-beta"
     },
     "type": "magento2-module",
     "version": "1.0.0-beta",
diff --git a/app/code/Magento/Review/etc/adminhtml/events.xml b/app/code/Magento/Review/etc/adminhtml/events.xml
index 8208e69e447ae104f9e028d6431309b8b1bd0878..f269c460942ba432681324cfad2fc3f8dfc5bf5e 100644
--- a/app/code/Magento/Review/etc/adminhtml/events.xml
+++ b/app/code/Magento/Review/etc/adminhtml/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_delete_after_done">
-        <observer name="review" instance="Magento\Review\Observer\ProcessProductAfterDeleteEventObserver" method="execute" />
+        <observer name="review" instance="Magento\Review\Observer\ProcessProductAfterDeleteEventObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Review/etc/frontend/events.xml b/app/code/Magento/Review/etc/frontend/events.xml
index 3a048b5c5092125ee152087374e95aabc22083d5..95ad1ccf54fc1e715917f7d4ae275a1240a28b5f 100644
--- a/app/code/Magento/Review/etc/frontend/events.xml
+++ b/app/code/Magento/Review/etc/frontend/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="tag_tag_product_collection_load_after">
-        <observer name="review" instance="Magento\Review\Observer\TagProductCollectionLoadAfterObserver" method="execute" shared="false" />
+        <observer name="review" instance="Magento\Review\Observer\TagProductCollectionLoadAfterObserver" shared="false" />
     </event>
     <event name="catalog_block_product_list_collection">
-        <observer name="review" instance="Magento\Review\Observer\CatalogBlockProductCollectionBeforeToHtmlObserver" method="execute" shared="false" />
+        <observer name="review" instance="Magento\Review\Observer\CatalogBlockProductCollectionBeforeToHtmlObserver" shared="false" />
     </event>
 </config>
diff --git a/app/code/Magento/Review/view/adminhtml/layout/rating_block.xml b/app/code/Magento/Review/view/adminhtml/layout/rating_block.xml
index 5cd89d58feedf232d1b25d5f2b96f15fa8fb2f4b..44c6eb5b36db5eaeff4c3cf18967376ec08c6239 100644
--- a/app/code/Magento/Review/view/adminhtml/layout/rating_block.xml
+++ b/app/code/Magento/Review/view/adminhtml/layout/rating_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.rating.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">ratingsGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Review\Model\Resource\Rating\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Review\Model\ResourceModel\Rating\Grid\Collection</argument>
                     <argument name="default_sort" xsi:type="string">rating_code</argument>
                     <argument name="default_dir" xsi:type="string">ASC</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
diff --git a/app/code/Magento/Rss/Model/System/Config/Backend/Links.php b/app/code/Magento/Rss/Model/System/Config/Backend/Links.php
index bb295ee056d949f8f0e4cb31ef83585d16210db1..64f383245e31226cac93726c22a84bd5d90d8a3a 100644
--- a/app/code/Magento/Rss/Model/System/Config/Backend/Links.php
+++ b/app/code/Magento/Rss/Model/System/Config/Backend/Links.php
@@ -21,7 +21,7 @@ class Links extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -30,7 +30,7 @@ class Links extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\App\Cache\TypeListInterface $cacheTypeList,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Rule/Model/AbstractModel.php b/app/code/Magento/Rule/Model/AbstractModel.php
index 20bb67ca0632c708946d9961f22099b1f810128a..07bc7957bfbf8ba23ce9db738a95c8c725c007f9 100644
--- a/app/code/Magento/Rule/Model/AbstractModel.php
+++ b/app/code/Magento/Rule/Model/AbstractModel.php
@@ -81,7 +81,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -90,7 +90,7 @@ abstract class AbstractModel extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Data\FormFactory $formFactory,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php b/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php
index ba3cae9e87016c6e0b65af5d3c27ff3385d79c7f..c2184950d83e0ee967732fca8ded9c21e03655ac 100644
--- a/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php
+++ b/app/code/Magento/Rule/Model/Condition/Product/AbstractProduct.php
@@ -65,12 +65,12 @@ abstract class AbstractProduct extends \Magento\Rule\Model\Condition\AbstractCon
     protected $productRepository;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product
+     * @var \Magento\Catalog\Model\ResourceModel\Product
      */
     protected $_productResource;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection
      */
     protected $_attrSetCollection;
 
@@ -85,8 +85,8 @@ abstract class AbstractProduct extends \Magento\Rule\Model\Condition\AbstractCon
      * @param \Magento\Eav\Model\Config $config
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
-     * @param \Magento\Catalog\Model\Resource\Product $productResource
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection $attrSetCollection
+     * @param \Magento\Catalog\Model\ResourceModel\Product $productResource
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection $attrSetCollection
      * @param \Magento\Framework\Locale\FormatInterface $localeFormat
      * @param array $data
      */
@@ -96,8 +96,8 @@ abstract class AbstractProduct extends \Magento\Rule\Model\Condition\AbstractCon
         \Magento\Eav\Model\Config $config,
         \Magento\Catalog\Model\ProductFactory $productFactory,
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
-        \Magento\Catalog\Model\Resource\Product $productResource,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection $attrSetCollection,
+        \Magento\Catalog\Model\ResourceModel\Product $productResource,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection $attrSetCollection,
         \Magento\Framework\Locale\FormatInterface $localeFormat,
         array $data = []
     ) {
@@ -132,7 +132,7 @@ abstract class AbstractProduct extends \Magento\Rule\Model\Condition\AbstractCon
     /**
      * Retrieve attribute object
      *
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     public function getAttributeObject()
     {
@@ -168,7 +168,7 @@ abstract class AbstractProduct extends \Magento\Rule\Model\Condition\AbstractCon
 
         $attributes = [];
         foreach ($productAttributes as $attribute) {
-            /* @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+            /* @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
             if (!$attribute->isAllowedForRuleCondition() || !$attribute->getDataUsingMethod(
                 $this->_isUsedForRuleProperty
             )
@@ -332,7 +332,7 @@ abstract class AbstractProduct extends \Magento\Rule\Model\Condition\AbstractCon
     /**
      * Collect validated attributes
      *
-     * @param \Magento\Catalog\Model\Resource\Product\Collection $productCollection
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection
      * @return $this
      */
     public function collectValidatedAttributes($productCollection)
diff --git a/app/code/Magento/Rule/Model/Resource/AbstractResource.php b/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php
similarity index 98%
rename from app/code/Magento/Rule/Model/Resource/AbstractResource.php
rename to app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php
index a45ff4a0d7ed2f29238e11f939e81b17b28202ae..0655ddb25a9751170935b803fdc780f93c9b5414 100644
--- a/app/code/Magento/Rule/Model/Resource/AbstractResource.php
+++ b/app/code/Magento/Rule/Model/ResourceModel/AbstractResource.php
@@ -9,9 +9,9 @@
  *
  * @author Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Rule\Model\Resource;
+namespace Magento\Rule\Model\ResourceModel;
 
-abstract class AbstractResource extends \Magento\Framework\Model\Resource\Db\AbstractDb
+abstract class AbstractResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store associated with rule entities information map
diff --git a/app/code/Magento/Rule/Model/Resource/Rule/Collection/AbstractCollection.php b/app/code/Magento/Rule/Model/ResourceModel/Rule/Collection/AbstractCollection.php
similarity index 97%
rename from app/code/Magento/Rule/Model/Resource/Rule/Collection/AbstractCollection.php
rename to app/code/Magento/Rule/Model/ResourceModel/Rule/Collection/AbstractCollection.php
index 3dd1cf30e3d71cc12c613cb9f856a84f704b1082..227300f8b068877125c5ad38c874c107f933fd38 100644
--- a/app/code/Magento/Rule/Model/Resource/Rule/Collection/AbstractCollection.php
+++ b/app/code/Magento/Rule/Model/ResourceModel/Rule/Collection/AbstractCollection.php
@@ -9,9 +9,9 @@
  *
  * @author Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Rule\Model\Resource\Rule\Collection;
+namespace Magento\Rule\Model\ResourceModel\Rule\Collection;
 
-abstract class AbstractCollection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+abstract class AbstractCollection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store associated with rule entities information map
diff --git a/app/code/Magento/Rule/Test/Unit/Model/Condition/Product/AbstractProductTest.php b/app/code/Magento/Rule/Test/Unit/Model/Condition/Product/AbstractProductTest.php
index 849aa5f079805e4599a1988df747a0c6ceea0501..acefe198a082890ee8360120a9b841eaf9aad11e 100644
--- a/app/code/Magento/Rule/Test/Unit/Model/Condition/Product/AbstractProductTest.php
+++ b/app/code/Magento/Rule/Test/Unit/Model/Condition/Product/AbstractProductTest.php
@@ -119,7 +119,7 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
         $attribute = new \Magento\Framework\DataObject();
         $attribute->setBackendType('datetime');
 
-        $newResource = $this->getMock('\Magento\Catalog\Model\Resource\Product', ['getAttribute'], [], '', false);
+        $newResource = $this->getMock('\Magento\Catalog\Model\ResourceModel\Product', ['getAttribute'], [], '', false);
         $newResource->expects($this->any())
             ->method('getAttribute')
             ->with('someAttribute')
@@ -135,7 +135,7 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
         $attribute->setBackendType('null');
         $attribute->setFrontendInput('multiselect');
 
-        $newResource = $this->getMock('\Magento\Catalog\Model\Resource\Product', ['getAttribute'], [], '', false);
+        $newResource = $this->getMock('\Magento\Catalog\Model\ResourceModel\Product', ['getAttribute'], [], '', false);
         $newResource->expects($this->any())
             ->method('getAttribute')
             ->with('someAttribute')
@@ -171,7 +171,7 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
         $attribute = new \Magento\Framework\DataObject();
         $attribute->setBackendType('datetime');
 
-        $newResource = $this->getMock('\Magento\Catalog\Model\Resource\Product', ['getAttribute'], [], '', false);
+        $newResource = $this->getMock('\Magento\Catalog\Model\ResourceModel\Product', ['getAttribute'], [], '', false);
         $newResource->expects($this->any())
             ->method('getAttribute')
             ->with('someAttribute')
@@ -231,7 +231,7 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
         $attribute = new \Magento\Framework\DataObject();
         $attribute->setBackendType('multiselect');
 
-        $newResource = $this->getMock('\Magento\Catalog\Model\Resource\Product', ['getAttribute'], [], '', false);
+        $newResource = $this->getMock('\Magento\Catalog\Model\ResourceModel\Product', ['getAttribute'], [], '', false);
         $newResource->expects($this->any())
             ->method('getAttribute')
             ->with('someAttribute')
@@ -257,7 +257,7 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
         $attribute->setBackendType(null);
         $attribute->setFrontendInput('multiselect');
 
-        $newResource = $this->getMock('\Magento\Catalog\Model\Resource\Product', ['getAttribute'], [], '', false);
+        $newResource = $this->getMock('\Magento\Catalog\Model\ResourceModel\Product', ['getAttribute'], [], '', false);
         $newResource->expects($this->any())
             ->method('getAttribute')
             ->with('someAttribute')
@@ -317,7 +317,7 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
             ->with($expectedAttrObjSourceAllOptionsParam)
             ->willReturn($attrObjectSourceAllOptionsValue);
 
-        $attributeObjectMock = $this->getMockBuilder('Magento\Catalog\Model\Resource\Eav\Attribute')
+        $attributeObjectMock = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->setMethods(['usesSource', 'getFrontendInput', 'getSource', 'getAllOptions'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -343,7 +343,7 @@ class AbstractProductTest extends \PHPUnit_Framework_TestCase
         $configProperty->setValue($this->_condition, $configValueMock);
 
         $attrSetCollectionValueMock = $this
-            ->getMockBuilder('Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection')
+            ->getMockBuilder('Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection')
             ->setMethods(['setEntityTypeFilter', 'load', 'toOptionArray'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Rule/Test/Unit/Model/Resource/Rule/Collection/AbstractCollectionTest.php b/app/code/Magento/Rule/Test/Unit/Model/ResourceModel/Rule/Collection/AbstractCollectionTest.php
similarity index 90%
rename from app/code/Magento/Rule/Test/Unit/Model/Resource/Rule/Collection/AbstractCollectionTest.php
rename to app/code/Magento/Rule/Test/Unit/Model/ResourceModel/Rule/Collection/AbstractCollectionTest.php
index e0c4df63e4216f6f36f120c1971ff7736a7625cf..f93510b4a238781a58f84f93bce4e30790517933 100644
--- a/app/code/Magento/Rule/Test/Unit/Model/Resource/Rule/Collection/AbstractCollectionTest.php
+++ b/app/code/Magento/Rule/Test/Unit/Model/ResourceModel/Rule/Collection/AbstractCollectionTest.php
@@ -4,14 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Rule\Test\Unit\Model\Resource\Rule\Collection;
+namespace Magento\Rule\Test\Unit\Model\ResourceModel\Rule\Collection;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
 class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Rule\Model\Resource\Rule\Collection\AbstractCollection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \PHPUnit_Framework_MockObject_MockObject
      */
     protected $abstractCollection;
 
@@ -41,7 +41,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
     protected $_managerMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_db;
 
@@ -52,7 +52,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
         $this->_fetchStrategyMock = $this->getMock('Magento\Framework\Data\Collection\Db\FetchStrategyInterface');
         $this->_managerMock = $this->getMock('Magento\Framework\Event\ManagerInterface');
         $this->_db = $this->getMockForAbstractClass(
-            '\Magento\Framework\Model\Resource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -62,7 +62,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
         );
         $this->objectManagerHelper = new ObjectManagerHelper($this);
         $this->abstractCollection = $this->getMockForAbstractClass(
-            '\Magento\Rule\Model\Resource\Rule\Collection\AbstractCollection',
+            '\Magento\Rule\Model\ResourceModel\Rule\Collection\AbstractCollection',
             [
                 'entityFactory' => $this->_entityFactoryMock,
                 'logger' => $this->_loggerMock,
@@ -147,7 +147,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue(1));
 
         $this->assertInstanceOf(
-            '\Magento\Rule\Model\Resource\Rule\Collection\AbstractCollection',
+            '\Magento\Rule\Model\ResourceModel\Rule\Collection\AbstractCollection',
             $this->abstractCollection->addWebsiteFilter($website)
         );
     }
diff --git a/app/code/Magento/Rule/view/adminhtml/web/rules.js b/app/code/Magento/Rule/view/adminhtml/web/rules.js
index 262d155a53cd14cec982876aa37396a31a403b37..50b3fdd85ea39f8cd1ec0ab4ff6cc3442f0a373e 100644
--- a/app/code/Magento/Rule/view/adminhtml/web/rules.js
+++ b/app/code/Magento/Rule/view/adminhtml/web/rules.js
@@ -4,6 +4,7 @@
  */
 define([
     "jquery",
+    'Magento_Ui/js/modal/alert',
     "mage/translate",
     "prototype"
 ], function(jQuery){
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php
index bc134343538f629ca2037c9c974b1d0e7b77e3c9..dea1b68194742cfdb2418800b27b6281aa0acc22 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Items/Grid.php
@@ -572,7 +572,7 @@ class Grid extends \Magento\Sales\Block\Adminhtml\Order\Create\AbstractCreate
     /**
      * Retrieve collection of customer wishlists
      *
-     * @return \Magento\Wishlist\Model\Resource\Wishlist\Collection
+     * @return \Magento\Wishlist\Model\ResourceModel\Wishlist\Collection
      */
     public function getCustomerWishlists()
     {
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Search/Grid.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Search/Grid.php
index 2f93c40d0b384d34a7ec57d6c0c85dab55a1cae4..d04cd45d86a8679af1fed89723e0b047a539b4b9 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Search/Grid.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Search/Grid.php
@@ -139,7 +139,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
     protected function _prepareCollection()
     {
         $attributes = $this->_catalogConfig->getProductAttributes();
-        /* @var $collection \Magento\Catalog\Model\Resource\Product\Collection */
+        /* @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
         $collection = $this->_productFactory->create()->getCollection();
         $collection->setStore(
             $this->getStore()
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Sidebar/Pcompared.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Sidebar/Pcompared.php
index 1019c33a5dbf7d4f39c709ee0314a06fad920d4f..05e8763175339c25f11f665d4ded17ea3e4b9c71 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Sidebar/Pcompared.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Sidebar/Pcompared.php
@@ -24,7 +24,7 @@ class Pcompared extends \Magento\Sales\Block\Adminhtml\Order\Create\Sidebar\Abst
     /**
      * Event
      *
-     * @var \Magento\Reports\Model\Resource\Event
+     * @var \Magento\Reports\Model\ResourceModel\Event
      */
     protected $_event;
 
@@ -34,7 +34,7 @@ class Pcompared extends \Magento\Sales\Block\Adminhtml\Order\Create\Sidebar\Abst
      * @param \Magento\Sales\Model\AdminOrder\Create $orderCreate
      * @param PriceCurrencyInterface $priceCurrency
      * @param \Magento\Sales\Model\Config $salesConfig
-     * @param \Magento\Reports\Model\Resource\Event $event
+     * @param \Magento\Reports\Model\ResourceModel\Event $event
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
      * @param array $data
      */
@@ -44,7 +44,7 @@ class Pcompared extends \Magento\Sales\Block\Adminhtml\Order\Create\Sidebar\Abst
         \Magento\Sales\Model\AdminOrder\Create $orderCreate,
         PriceCurrencyInterface $priceCurrency,
         \Magento\Sales\Model\Config $salesConfig,
-        \Magento\Reports\Model\Resource\Event $event,
+        \Magento\Reports\Model\ResourceModel\Event $event,
         \Magento\Catalog\Model\ProductFactory $productFactory,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Sidebar/Reorder.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Sidebar/Reorder.php
index 8a4abcee1c336e5188700e26fa92c7ddb621153f..ba99adf373ad7bcd8b73383c871f56b41760711e 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Sidebar/Reorder.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Sidebar/Reorder.php
@@ -24,7 +24,7 @@ class Reorder extends \Magento\Sales\Block\Adminhtml\Order\Create\Sidebar\Abstra
     /**
      * Orders factory
      *
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
      */
     protected $_ordersFactory;
 
@@ -34,7 +34,7 @@ class Reorder extends \Magento\Sales\Block\Adminhtml\Order\Create\Sidebar\Abstra
      * @param \Magento\Sales\Model\AdminOrder\Create $orderCreate
      * @param PriceCurrencyInterface $priceCurrency
      * @param \Magento\Sales\Model\Config $salesConfig
-     * @param \Magento\Sales\Model\Resource\Order\CollectionFactory $ordersFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $ordersFactory
      * @param array $data
      */
     public function __construct(
@@ -43,7 +43,7 @@ class Reorder extends \Magento\Sales\Block\Adminhtml\Order\Create\Sidebar\Abstra
         \Magento\Sales\Model\AdminOrder\Create $orderCreate,
         PriceCurrencyInterface $priceCurrency,
         \Magento\Sales\Model\Config $salesConfig,
-        \Magento\Sales\Model\Resource\Order\CollectionFactory $ordersFactory,
+        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $ordersFactory,
         array $data = []
     ) {
         $this->_ordersFactory = $ordersFactory;
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Totals/Table.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Totals/Table.php
index a2430dffcbf3cc01cfd23bb8a659cb82f227e163..4280e46da5f3ade9f3c2669c1f29c405f9227f1e 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Totals/Table.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Create/Totals/Table.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sales\Block\Adminhtml\Order\Create\Totals;
 
-use Magento\Store\Model\Resource\Website\Collection;
+use Magento\Store\Model\ResourceModel\Website\Collection;
 
 /**
  * Adminhtml sales order create totals table block
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/Status/Assign/Form.php b/app/code/Magento/Sales/Block/Adminhtml/Order/Status/Assign/Form.php
index b27fa8fdb163cfb29290caecff90471bc088cf5b..b960770ccf46321a3c09abb33b2ff5f47ff8815c 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/Status/Assign/Form.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/Status/Assign/Form.php
@@ -13,7 +13,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
     /**
      * Collection factory
      *
-     * @var \Magento\Sales\Model\Resource\Order\Status\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -29,7 +29,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
      * @param \Magento\Sales\Model\Order\Config $orderConfig
-     * @param \Magento\Sales\Model\Resource\Order\Status\CollectionFactory $collectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory $collectionFactory
      * @param array $data
      */
     public function __construct(
@@ -37,7 +37,7 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Data\FormFactory $formFactory,
         \Magento\Sales\Model\Order\Config $orderConfig,
-        \Magento\Sales\Model\Resource\Order\Status\CollectionFactory $collectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory $collectionFactory,
         array $data = []
     ) {
         $this->_orderConfig = $orderConfig;
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/View.php b/app/code/Magento/Sales/Block/Adminhtml/Order/View.php
index be2568dd8698ac7c5fc77015baf009d593a8b432..c83fb0f75a98e8a109c255a4b00e53c3f7f991d1 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/View.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/View.php
@@ -106,13 +106,15 @@ class View extends \Magento\Backend\Block\Widget\Form\Container
         }
 
         if ($this->_isAllowedAction('Magento_Sales::cancel') && $order->canCancel()) {
-            $message = __('Are you sure you want to cancel this order?');
             $this->buttonList->add(
                 'order_cancel',
                 [
                     'label' => __('Cancel'),
                     'class' => 'cancel',
-                    'onclick' => 'deleteConfirm(\'' . $message . '\', \'' . $this->getCancelUrl() . '\')'
+                    'id' => 'order-view-cancel-button',
+                    'data_attribute' => [
+                        'url' => $this->getCancelUrl()
+                    ]
                 ]
             );
         }
@@ -162,7 +164,10 @@ class View extends \Magento\Backend\Block\Widget\Form\Container
                 [
                     'label' => __('Hold'),
                     'class' => __('hold'),
-                    'onclick' => 'setLocation(\'' . $this->getHoldUrl() . '\')'
+                    'id' => 'order-view-hold-button',
+                    'data_attribute' => [
+                        'url' => $this->getHoldUrl()
+                    ]
                 ]
             );
         }
@@ -173,7 +178,10 @@ class View extends \Magento\Backend\Block\Widget\Form\Container
                 [
                     'label' => __('Unhold'),
                     'class' => __('unhold'),
-                    'onclick' => 'setLocation(\'' . $this->getUnholdUrl() . '\')'
+                    'id' => 'order-view-unhold-button',
+                    'data_attribute' => [
+                        'url' => $this->getUnHoldUrl()
+                    ]
                 ]
             );
         }
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Order/View/Items.php b/app/code/Magento/Sales/Block/Adminhtml/Order/View/Items.php
index b2e9ec4ccd492c32d72bf469b163a98f73dedb00..326fb104bbb2c242679fccb91bcbc16fe0ef515e 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Order/View/Items.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Order/View/Items.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sales\Block\Adminhtml\Order\View;
 
-use Magento\Sales\Model\Resource\Order\Item\Collection;
+use Magento\Sales\Model\ResourceModel\Order\Item\Collection;
 
 /**
  * Adminhtml order items grid
diff --git a/app/code/Magento/Sales/Block/Adminhtml/Report/Filter/Form/Coupon.php b/app/code/Magento/Sales/Block/Adminhtml/Report/Filter/Form/Coupon.php
index 45be7873534abc519ec2f066194f561a06d3641e..534ea90b222750d4a068be4087c6abe748e57787 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/Report/Filter/Form/Coupon.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/Report/Filter/Form/Coupon.php
@@ -23,7 +23,7 @@ class Coupon extends \Magento\Sales\Block\Adminhtml\Report\Filter\Form
     /**
      * Rule factory
      *
-     * @var \Magento\SalesRule\Model\Resource\Report\RuleFactory
+     * @var \Magento\SalesRule\Model\ResourceModel\Report\RuleFactory
      */
     protected $_reportRule;
 
@@ -32,7 +32,7 @@ class Coupon extends \Magento\Sales\Block\Adminhtml\Report\Filter\Form
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Data\FormFactory $formFactory
      * @param \Magento\Sales\Model\Order\ConfigFactory $orderConfig
-     * @param \Magento\SalesRule\Model\Resource\Report\RuleFactory $reportRule
+     * @param \Magento\SalesRule\Model\ResourceModel\Report\RuleFactory $reportRule
      * @param array $data
      */
     public function __construct(
@@ -40,7 +40,7 @@ class Coupon extends \Magento\Sales\Block\Adminhtml\Report\Filter\Form
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Data\FormFactory $formFactory,
         \Magento\Sales\Model\Order\ConfigFactory $orderConfig,
-        \Magento\SalesRule\Model\Resource\Report\RuleFactory $reportRule,
+        \Magento\SalesRule\Model\ResourceModel\Report\RuleFactory $reportRule,
         array $data = []
     ) {
         $this->_reportRule = $reportRule;
diff --git a/app/code/Magento/Sales/Block/Adminhtml/System/Config/Form/Fieldset/Order/Statuses.php b/app/code/Magento/Sales/Block/Adminhtml/System/Config/Form/Fieldset/Order/Statuses.php
index 8c3cf77a79cfb8a5e2625638b9c34912b969329c..757210678c358bd62a7fb770fcef2940441511a6 100644
--- a/app/code/Magento/Sales/Block/Adminhtml/System/Config/Form/Fieldset/Order/Statuses.php
+++ b/app/code/Magento/Sales/Block/Adminhtml/System/Config/Form/Fieldset/Order/Statuses.php
@@ -29,7 +29,7 @@ class Statuses extends \Magento\Config\Block\System\Config\Form\Fieldset
     /**
      * Order status collection
      *
-     * @var \Magento\Sales\Model\Resource\Order\Status\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory
      */
     protected $_orderStatusCollection;
 
@@ -37,14 +37,14 @@ class Statuses extends \Magento\Config\Block\System\Config\Form\Fieldset
      * @param \Magento\Backend\Block\Context $context
      * @param \Magento\Backend\Model\Auth\Session $authSession
      * @param \Magento\Framework\View\Helper\Js $jsHelper
-     * @param \Magento\Sales\Model\Resource\Order\Status\CollectionFactory $orderStatusCollection
+     * @param \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory $orderStatusCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Context $context,
         \Magento\Backend\Model\Auth\Session $authSession,
         \Magento\Framework\View\Helper\Js $jsHelper,
-        \Magento\Sales\Model\Resource\Order\Status\CollectionFactory $orderStatusCollection,
+        \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory $orderStatusCollection,
         array $data = []
     ) {
         $this->_orderStatusCollection = $orderStatusCollection;
diff --git a/app/code/Magento/Sales/Block/Order/Comments.php b/app/code/Magento/Sales/Block/Order/Comments.php
index 49aea76c389420b6862ac4ba7fe5f4eb2398a312..8d73561bcf01398079fd03d57498c6c59f8fa62e 100644
--- a/app/code/Magento/Sales/Block/Order/Comments.php
+++ b/app/code/Magento/Sales/Block/Order/Comments.php
@@ -8,17 +8,17 @@ namespace Magento\Sales\Block\Order;
 class Comments extends \Magento\Framework\View\Element\Template
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Invoice\Comment\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\CollectionFactory
      */
     protected $_invoiceCollectionFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Creditmemo\Comment\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\CollectionFactory
      */
     protected $_memoCollectionFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Shipment\Comment\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\CollectionFactory
      */
     protected $_shipmentCollectionFactory;
 
@@ -32,22 +32,22 @@ class Comments extends \Magento\Framework\View\Element\Template
     /**
      * Current comments collection
      *
-     * @var \Magento\Sales\Model\Resource\Order\Comment\Collection\AbstractCollection
+     * @var \Magento\Sales\Model\ResourceModel\Order\Comment\Collection\AbstractCollection
      */
     protected $_commentCollection;
 
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
-     * @param \Magento\Sales\Model\Resource\Order\Invoice\Comment\CollectionFactory $invoiceCollectionFactory
-     * @param \Magento\Sales\Model\Resource\Order\Creditmemo\Comment\CollectionFactory $memoCollectionFactory
-     * @param \Magento\Sales\Model\Resource\Order\Shipment\Comment\CollectionFactory $shipmentCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\CollectionFactory $invoiceCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\CollectionFactory $memoCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\CollectionFactory $shipmentCollectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
-        \Magento\Sales\Model\Resource\Order\Invoice\Comment\CollectionFactory $invoiceCollectionFactory,
-        \Magento\Sales\Model\Resource\Order\Creditmemo\Comment\CollectionFactory $memoCollectionFactory,
-        \Magento\Sales\Model\Resource\Order\Shipment\Comment\CollectionFactory $shipmentCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\CollectionFactory $invoiceCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\CollectionFactory $memoCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\CollectionFactory $shipmentCollectionFactory,
         array $data = []
     ) {
         parent::__construct($context, $data);
@@ -83,7 +83,7 @@ class Comments extends \Magento\Framework\View\Element\Template
     /**
      * Initialize model comments and return comment collection
      *
-     * @return \Magento\Sales\Model\Resource\Order\Comment\Collection\AbstractCollection
+     * @return \Magento\Sales\Model\ResourceModel\Order\Comment\Collection\AbstractCollection
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function getComments()
diff --git a/app/code/Magento/Sales/Block/Order/History.php b/app/code/Magento/Sales/Block/Order/History.php
index 73d800c83186649c763cc5a6e9b1bd29c540e295..01307541af79bc57b6f20e37293612218ef534b7 100644
--- a/app/code/Magento/Sales/Block/Order/History.php
+++ b/app/code/Magento/Sales/Block/Order/History.php
@@ -16,7 +16,7 @@ class History extends \Magento\Framework\View\Element\Template
     protected $_template = 'order/history.phtml';
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
      */
     protected $_orderCollectionFactory;
 
@@ -30,19 +30,19 @@ class History extends \Magento\Framework\View\Element\Template
      */
     protected $_orderConfig;
 
-    /** @var \Magento\Sales\Model\Resource\Order\Collection */
+    /** @var \Magento\Sales\Model\ResourceModel\Order\Collection */
     protected $orders;
 
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
-     * @param \Magento\Sales\Model\Resource\Order\CollectionFactory $orderCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Sales\Model\Order\Config $orderConfig
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
-        \Magento\Sales\Model\Resource\Order\CollectionFactory $orderCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Sales\Model\Order\Config $orderConfig,
         array $data = []
@@ -63,7 +63,7 @@ class History extends \Magento\Framework\View\Element\Template
     }
 
     /**
-     * @return bool|\Magento\Sales\Model\Resource\Order\Collection
+     * @return bool|\Magento\Sales\Model\ResourceModel\Order\Collection
      */
     public function getOrders()
     {
diff --git a/app/code/Magento/Sales/Block/Order/PrintOrder/Shipment.php b/app/code/Magento/Sales/Block/Order/PrintOrder/Shipment.php
index e7110a289774b2b77574434009dd6b48a3f09740..418adce8ef66a69ce1c1d22b76993e3fe268321b 100644
--- a/app/code/Magento/Sales/Block/Order/PrintOrder/Shipment.php
+++ b/app/code/Magento/Sales/Block/Order/PrintOrder/Shipment.php
@@ -22,7 +22,7 @@ class Shipment extends \Magento\Sales\Block\Items\AbstractItems
     /**
      * Order shipments collection
      *
-     * @var array|\Magento\Sales\Model\Resource\Order\Shipment\Collection
+     * @var array|\Magento\Sales\Model\ResourceModel\Order\Shipment\Collection
      */
     protected $shipmentsCollection;
 
@@ -151,7 +151,7 @@ class Shipment extends \Magento\Sales\Block\Items\AbstractItems
     /**
      * Retrieve order shipments collection
      *
-     * @return array|\Magento\Sales\Model\Resource\Order\Shipment\Collection
+     * @return array|\Magento\Sales\Model\ResourceModel\Order\Shipment\Collection
      */
     public function getShipmentsCollection()
     {
diff --git a/app/code/Magento/Sales/Block/Order/Recent.php b/app/code/Magento/Sales/Block/Order/Recent.php
index 570a72fd3a25222054dfd038028578b6fcdc7915..03abbd156c4aaeeefe889dd3d6cc6905d97c177a 100644
--- a/app/code/Magento/Sales/Block/Order/Recent.php
+++ b/app/code/Magento/Sales/Block/Order/Recent.php
@@ -11,7 +11,7 @@ namespace Magento\Sales\Block\Order;
 class Recent extends \Magento\Framework\View\Element\Template
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
      */
     protected $_orderCollectionFactory;
 
@@ -27,14 +27,14 @@ class Recent extends \Magento\Framework\View\Element\Template
 
     /**
      * @param \Magento\Framework\View\Element\Template\Context $context
-     * @param \Magento\Sales\Model\Resource\Order\CollectionFactory $orderCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Sales\Model\Order\Config $orderConfig
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Template\Context $context,
-        \Magento\Sales\Model\Resource\Order\CollectionFactory $orderCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Sales\Model\Order\Config $orderConfig,
         array $data = []
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php
index 920be7c4c242a6ff25ad580d2477d543b2d69b26..24f639ea10b083799e579b1a6d9b82b455e5dfc4 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Creditmemo/AbstractCreditmemo/Pdfcreditmemos.php
@@ -7,13 +7,13 @@ namespace Magento\Sales\Controller\Adminhtml\Creditmemo\AbstractCreditmemo;
 
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Sales\Model\Order\Pdf\Creditmemo;
 use Magento\Framework\Stdlib\DateTime\DateTime;
 use Magento\Backend\App\Action\Context;
 use Magento\Framework\App\Response\Http\FileFactory;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Sales\Model\Resource\Order\Creditmemo\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory;
 
 /**
  * Class Pdfcreditmemos
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php
index 8753a3f8a4c1576e17e0b9aaabcc320465cc572a..181764047983f5dffc56da262b53a84fcf6ff803 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Invoice/AbstractInvoice/Pdfinvoices.php
@@ -8,14 +8,17 @@ namespace Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice;
 
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\Order\Pdf\Invoice;
 use Magento\Framework\Stdlib\DateTime\DateTime;
 use Magento\Framework\App\Response\Http\FileFactory;
 use Magento\Backend\App\Action\Context;
-use Magento\Sales\Model\Resource\Order\Invoice\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory;
 
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 abstract class Pdfinvoices extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction
 {
     /**
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order.php b/app/code/Magento/Sales/Controller/Adminhtml/Order.php
index 32e3e510518818fefc9286facd85c64105d2ca91..fcd0fd30033f52ff92f424a21a66a4e1741be50c 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order.php
@@ -167,4 +167,14 @@ abstract class Order extends \Magento\Backend\App\Action
     {
         return $this->_authorization->isAllowed('Magento_Sales::sales_order');
     }
+
+    /**
+     * @return bool
+     */
+    protected function isValidPostRequest()
+    {
+        $formKeyIsValid = $this->_formKeyValidator->validate($this->getRequest());
+        $isPost = $this->getRequest()->isPost();
+        return ($formKeyIsValid && $isPost);
+    }
 }
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php
index 08fbda748c577938fc124ab409b7046c9b31ec88..badfbc2ad438df50d0870a131da62730a7c6159a 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/AbstractMassAction.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order;
 
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Framework\Controller\ResultFactory;
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\Controller\ResultInterface;
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Cancel.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Cancel.php
index 78ddf1b55c588fa6fd1e55ba1be3b8ac13822992..959917738dbc0f6f9a5966a4dd78b438aade353d 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Cancel.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Cancel.php
@@ -15,8 +15,12 @@ class Cancel extends \Magento\Sales\Controller\Adminhtml\Order
      */
     public function execute()
     {
-        $order = $this->_initOrder();
         $resultRedirect = $this->resultRedirectFactory->create();
+        if (!$this->isValidPostRequest()) {
+            $this->messageManager->addError(__('You have not canceled the item.'));
+            return $resultRedirect->setPath('sales/*/');
+        }
+        $order = $this->_initOrder();
         if ($order) {
             try {
                 $this->orderManagement->cancel($order->getEntityId());
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Hold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Hold.php
index a03f07f99dd2df9fc93b711cdd16e92d4b2e3ffe..881ba0c98c9d4612e3b22e384ebc615bb2e876ee 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Hold.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Hold.php
@@ -14,8 +14,12 @@ class Hold extends \Magento\Sales\Controller\Adminhtml\Order
      */
     public function execute()
     {
-        $order = $this->_initOrder();
         $resultRedirect = $this->resultRedirectFactory->create();
+        if (!$this->isValidPostRequest()) {
+            $this->messageManager->addError(__('You have not put the order on hold.'));
+            return $resultRedirect->setPath('sales/*/');
+        }
+        $order = $this->_initOrder();
         if ($order) {
             try {
                 $this->orderManagement->hold($order->getEntityId());
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php
index 43e5c0eb86b235f7adb806cfd6925bb42c9937fb..1ffa64f0100cc98f478328b8fdec042abc7df507 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Invoice/Save.php
@@ -112,6 +112,16 @@ class Save extends \Magento\Backend\App\Action
      */
     public function execute()
     {
+        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
+        $resultRedirect = $this->resultRedirectFactory->create();
+
+        $formKeyIsValid = $this->_formKeyValidator->validate($this->getRequest());
+        $isPost = $this->getRequest()->isPost();
+        if (!$formKeyIsValid || !$isPost) {
+            $this->messageManager->addError(__('We can\'t save the invoice right now.'));
+            return $resultRedirect->setPath('sales/order/index');
+        }
+
         $data = $this->getRequest()->getPost('invoice');
         $orderId = $this->getRequest()->getParam('order_id');
 
@@ -119,8 +129,6 @@ class Save extends \Magento\Backend\App\Action
             $this->_objectManager->get('Magento\Backend\Model\Session')->setCommentText($data['comment_text']);
         }
 
-        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
-        $resultRedirect = $this->resultRedirectFactory->create();
         try {
             $invoiceData = $this->getRequest()->getParam('invoice', []);
             $invoiceItems = isset($invoiceData['items']) ? $invoiceData['items'] : [];
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassCancel.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassCancel.php
index 46a83b9afb198bc3dba9b468525a98423f2174f4..244390e564d19cf8bf7923c2faa0b2dba3c5b726 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassCancel.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassCancel.php
@@ -5,10 +5,10 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order;
 
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Sales\Model\Resource\Order\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
 
 class MassCancel extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction
 {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassHold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassHold.php
index 9f660fd61f6cd92e0b05508e8c158fbfbd76a96b..df35760a47cb56f2b0007e283bd7cb4fdc290f5d 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassHold.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassHold.php
@@ -5,10 +5,10 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order;
 
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Sales\Model\Resource\Order\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
 use Magento\Sales\Api\OrderManagementInterface;
 
 /**
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php
index cdbdf98f37eb0c5dc318b39bf554ddc32f05bee8..ab2d11b29a7f944e1989bfe563f803b2ad2f1ec3 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/MassUnhold.php
@@ -5,10 +5,10 @@
  */
 namespace Magento\Sales\Controller\Adminhtml\Order;
 
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Backend\App\Action\Context;
 use Magento\Ui\Component\MassAction\Filter;
-use Magento\Sales\Model\Resource\Order\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
 
 class MassUnhold extends AbstractMassAction
 {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfcreditmemos.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfcreditmemos.php
index 81da53f4b9f8eb20e9266c623765177a184448b8..b46e8c2c7e0d607756684176a235c6e6b471f8ce 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfcreditmemos.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfcreditmemos.php
@@ -7,15 +7,15 @@ namespace Magento\Sales\Controller\Adminhtml\Order;
 
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\Order\Pdf\Creditmemo;
 use Magento\Framework\Stdlib\DateTime\DateTime;
 use Magento\Framework\App\Response\Http\FileFactory;
 use Magento\Backend\App\Action\Context;
 use Magento\Framework\Controller\ResultInterface;
-use Magento\Sales\Model\Resource\Order\Creditmemo\CollectionFactory;
-use Magento\Sales\Model\Resource\Order\Collection as OrderCollection;
+use Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Collection as OrderCollection;
 
 /**
  * Class Pdfcreditmemos
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfdocs.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfdocs.php
index 5b6e80aa8520309899d1c0632b5506cbb15e0a5e..16341d5e06ae435b9cc0a64c8005cccddf26cefe 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfdocs.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfdocs.php
@@ -7,7 +7,7 @@ namespace Magento\Sales\Controller\Adminhtml\Order;
 
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Sales\Model\Order\Pdf\Invoice;
 use Magento\Backend\App\Action\Context;
 use Magento\Framework\App\Response\Http\FileFactory;
@@ -15,10 +15,10 @@ use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\Order\Pdf\Shipment;
 use Magento\Sales\Model\Order\Pdf\Creditmemo;
 use Magento\Framework\Stdlib\DateTime\DateTime;
-use Magento\Sales\Model\Resource\Order\CollectionFactory as OrderCollectionFactory;
-use Magento\Sales\Model\Resource\Order\Shipment\CollectionFactory as ShipmentCollectionFactory;
-use Magento\Sales\Model\Resource\Order\Invoice\CollectionFactory as InvoiceCollectionFactory;
-use Magento\Sales\Model\Resource\Order\Creditmemo\CollectionFactory as CreditmemoCollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\CollectionFactory as OrderCollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory as ShipmentCollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory as InvoiceCollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory as CreditmemoCollectionFactory;
 
 /**
  * Class Pdfdocs
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php
index 1eb43a64759a7c7656a5fd44709023d8925b2de9..6f7f353dddce07593356a460774543c9e21f0194 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfinvoices.php
@@ -7,16 +7,19 @@ namespace Magento\Sales\Controller\Adminhtml\Order;
 
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\Order\Pdf\Invoice;
 use Magento\Framework\Stdlib\DateTime\DateTime;
 use Magento\Framework\App\Response\Http\FileFactory;
 use Magento\Backend\App\Action\Context;
 use Magento\Framework\Controller\ResultInterface;
-use Magento\Sales\Model\Resource\Order\Invoice\CollectionFactory;
-use Magento\Sales\Model\Resource\Order\Collection as OrderCollection;
+use Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Collection as OrderCollection;
 
+/**
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
 class Pdfinvoices extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction
 {
     /**
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfshipments.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfshipments.php
index 292eb6eadf11c02586dfab70b7feabfd20ac0578..f71bf7d8e0efb5891ea1c6ed192dd28314606ab5 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfshipments.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Pdfshipments.php
@@ -7,14 +7,14 @@ namespace Magento\Sales\Controller\Adminhtml\Order;
 
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Backend\App\Action\Context;
 use Magento\Framework\App\Response\Http\FileFactory;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\Order\Pdf\Shipment;
 use Magento\Framework\Stdlib\DateTime\DateTime;
-use Magento\Sales\Model\Resource\Order\Shipment\CollectionFactory as ShipmentCollectionFactory;
-use Magento\Sales\Model\Resource\Order\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory as ShipmentCollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Order/Unhold.php b/app/code/Magento/Sales/Controller/Adminhtml/Order/Unhold.php
index 7ea8dfbb7a48d160eee0b444471ac21f9c6c08f7..6cedb1e60b95f5ab9f3ab32ce874b1bf75979a43 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Order/Unhold.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Order/Unhold.php
@@ -14,8 +14,12 @@ class Unhold extends \Magento\Sales\Controller\Adminhtml\Order
      */
     public function execute()
     {
-        $order = $this->_initOrder();
         $resultRedirect = $this->resultRedirectFactory->create();
+        if (!$this->isValidPostRequest()) {
+            $this->messageManager->addError(__('Can\'t unhold order.'));
+            return $resultRedirect->setPath('sales/*/');
+        }
+        $order = $this->_initOrder();
         if ($order) {
             try {
                 if (!$order->canUnhold()) {
diff --git a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php
index 7a0ee9b827cc0d1ce625550678db684ee8a75de6..aaaeba3ccecbfa19773ea90c1cfcf8f969ef4b07 100644
--- a/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php
+++ b/app/code/Magento/Sales/Controller/Adminhtml/Shipment/AbstractShipment/Pdfshipments.php
@@ -10,11 +10,11 @@ use Magento\Backend\App\Action\Context;
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\App\Response\Http\FileFactory;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Sales\Model\Order\Pdf\Shipment;
 use Magento\Framework\Stdlib\DateTime\DateTime;
-use Magento\Sales\Model\Resource\Order\Shipment\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory;
 
 abstract class Pdfshipments extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction
 {
diff --git a/app/code/Magento/Sales/Controller/Guest/Reorder.php b/app/code/Magento/Sales/Controller/Guest/Reorder.php
index 4739751df7ff5156f8e7bb75e8283408bc7214f9..99150cf9b4f670b92a2dbc19f5de0fca4aff9f4f 100644
--- a/app/code/Magento/Sales/Controller/Guest/Reorder.php
+++ b/app/code/Magento/Sales/Controller/Guest/Reorder.php
@@ -8,5 +8,16 @@ namespace Magento\Sales\Controller\Guest;
 
 class Reorder extends \Magento\Sales\Controller\AbstractController\Reorder
 {
-
+    /**
+     * @param \Magento\Framework\App\Action\Context $context
+     * @param \Magento\Sales\Controller\Guest\OrderLoader $orderLoader
+     * @param \Magento\Framework\Registry $registry
+     */
+    public function __construct(
+        \Magento\Framework\App\Action\Context $context,
+        \Magento\Sales\Controller\Guest\OrderLoader $orderLoader,
+        \Magento\Framework\Registry $registry
+    ) {
+        parent::__construct($context, $orderLoader, $registry);
+    }
 }
diff --git a/app/code/Magento/Sales/Model/Observer/CleanExpiredQuotes.php b/app/code/Magento/Sales/Cron/CleanExpiredQuotes.php
similarity index 82%
rename from app/code/Magento/Sales/Model/Observer/CleanExpiredQuotes.php
rename to app/code/Magento/Sales/Cron/CleanExpiredQuotes.php
index 955b3cfe541301c4fd8913b6abd4865702d1cc31..1e28379c955021daf3116aca2494174350e7858b 100644
--- a/app/code/Magento/Sales/Model/Observer/CleanExpiredQuotes.php
+++ b/app/code/Magento/Sales/Cron/CleanExpiredQuotes.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer;
+namespace Magento\Sales\Cron;
 
 use Magento\Store\Model\StoresConfig;
 
@@ -20,7 +20,7 @@ class CleanExpiredQuotes
     protected $storesConfig;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\CollectionFactory
+     * @var \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory
      */
     protected $quoteCollectionFactory;
 
@@ -31,11 +31,11 @@ class CleanExpiredQuotes
 
     /**
      * @param StoresConfig $storesConfig
-     * @param \Magento\Quote\Model\Resource\Quote\CollectionFactory $collectionFactory
+     * @param \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory $collectionFactory
      */
     public function __construct(
         StoresConfig $storesConfig,
-        \Magento\Quote\Model\Resource\Quote\CollectionFactory $collectionFactory
+        \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory $collectionFactory
     ) {
         $this->storesConfig = $storesConfig;
         $this->quoteCollectionFactory = $collectionFactory;
@@ -52,7 +52,7 @@ class CleanExpiredQuotes
         foreach ($lifetimes as $storeId => $lifetime) {
             $lifetime *= self::LIFETIME;
 
-            /** @var $quotes \Magento\Quote\Model\Resource\Quote\Collection */
+            /** @var $quotes \Magento\Quote\Model\ResourceModel\Quote\Collection */
             $quotes = $this->quoteCollectionFactory->create();
 
             $quotes->addFieldToFilter('store_id', $storeId);
@@ -72,7 +72,7 @@ class CleanExpiredQuotes
      *
      * @return array
      */
-    public function getExpireQuotesAdditionalFilterFields()
+    protected function getExpireQuotesAdditionalFilterFields()
     {
         return $this->expireQuotesFilterFields;
     }
diff --git a/app/code/Magento/Sales/Cron/GridAsyncInsert.php b/app/code/Magento/Sales/Cron/GridAsyncInsert.php
new file mode 100644
index 0000000000000000000000000000000000000000..9935cdee4e1fc69701337014a4766cfac4e82061
--- /dev/null
+++ b/app/code/Magento/Sales/Cron/GridAsyncInsert.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Cron;
+
+/**
+ * Sales entity grids indexing observer.
+ *
+ * Performs handling cron jobs related to indexing
+ * of Order, Invoice, Shipment and Creditmemo grids.
+ */
+class GridAsyncInsert
+{
+    /**
+     * @var \Magento\Sales\Model\GridAsyncInsert
+     */
+    protected $asyncInsert;
+
+    /**
+     * @param \Magento\Sales\Model\GridAsyncInsert $asyncInsert
+     */
+    public function __construct(
+        \Magento\Sales\Model\GridAsyncInsert $asyncInsert
+    ) {
+        $this->asyncInsert = $asyncInsert;
+    }
+
+    /**
+     * Handles asynchronous insertion of the new entity into
+     * corresponding grid during cron job.
+     *
+     * Also method is used in the next events:
+     *
+     * - config_data_dev_grid_async_indexing_disabled
+     *
+     * Works only if asynchronous grid indexing is enabled
+     * in global settings.
+     *
+     * @return void
+     */
+    public function execute()
+    {
+        $this->asyncInsert->asyncInsert();
+    }
+}
diff --git a/app/code/Magento/Sales/Cron/SendEmails.php b/app/code/Magento/Sales/Cron/SendEmails.php
new file mode 100644
index 0000000000000000000000000000000000000000..6592a06d02475c91f9683f1b6f128bab49e66d3e
--- /dev/null
+++ b/app/code/Magento/Sales/Cron/SendEmails.php
@@ -0,0 +1,48 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Cron;
+
+/**
+ * Sales emails sending observer.
+ *
+ * Performs handling of cron jobs related to sending emails to customers
+ * after creation/modification of Order, Invoice, Shipment or Creditmemo.
+ */
+class SendEmails
+{
+    /**
+     * Global configuration storage.
+     *
+     * @var \Magento\Sales\Model\EmailSenderHandler
+     */
+    protected $emailSenderHandler;
+
+    /**
+     * @param \Magento\Sales\Model\EmailSenderHandler $emailSenderHandler
+     */
+    public function __construct(\Magento\Sales\Model\EmailSenderHandler $emailSenderHandler)
+    {
+        $this->emailSenderHandler = $emailSenderHandler;
+    }
+
+    /**
+     * Handles asynchronous email sending during corresponding
+     * cron job.
+     *
+     * Also method is used in the next events:
+     *
+     * - config_data_sales_email_general_async_sending_disabled
+     *
+     * Works only if asynchronous email sending is enabled
+     * in global settings.
+     *
+     * @return void
+     */
+    public function execute()
+    {
+        $this->emailSenderHandler->sendEmails();
+    }
+}
diff --git a/app/code/Magento/Sales/CustomerData/LastOrderedItems.php b/app/code/Magento/Sales/CustomerData/LastOrderedItems.php
index f5e8ee34cdd8dea1ae8ffc1a923c912b05256716..6898eab8e7a465876848dba4d120265be6870393 100644
--- a/app/code/Magento/Sales/CustomerData/LastOrderedItems.php
+++ b/app/code/Magento/Sales/CustomerData/LastOrderedItems.php
@@ -15,7 +15,7 @@ class LastOrderedItems implements SectionSourceInterface
     const SIDEBAR_ORDER_LIMIT = 5;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
      */
     protected $_orderCollectionFactory;
 
@@ -35,7 +35,7 @@ class LastOrderedItems implements SectionSourceInterface
     protected $httpContext;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Collection
+     * @var \Magento\Sales\Model\ResourceModel\Order\Collection
      */
     protected $orders;
 
@@ -45,14 +45,14 @@ class LastOrderedItems implements SectionSourceInterface
     protected $stockRegistry;
 
     /**
-     * @param \Magento\Sales\Model\Resource\Order\CollectionFactory $orderCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory
      * @param \Magento\Sales\Model\Order\Config $orderConfig
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      */
     public function __construct(
-        \Magento\Sales\Model\Resource\Order\CollectionFactory $orderCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $orderCollectionFactory,
         \Magento\Sales\Model\Order\Config $orderConfig,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
diff --git a/app/code/Magento/Sales/Helper/Admin.php b/app/code/Magento/Sales/Helper/Admin.php
index 3379ee82a31ce5a50c994013d4817f55546b6027..fc6590a7134a1e41735828b5dc327ad2960fca5e 100644
--- a/app/code/Magento/Sales/Helper/Admin.php
+++ b/app/code/Magento/Sales/Helper/Admin.php
@@ -113,8 +113,8 @@ class Admin extends \Magento\Framework\App\Helper\AbstractHelper
     /**
      * Filter collection by removing not available product types
      *
-     * @param \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection $collection
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @param \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection $collection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function applySalableProductTypesFilter($collection)
     {
diff --git a/app/code/Magento/Sales/Model/AbstractModel.php b/app/code/Magento/Sales/Model/AbstractModel.php
index e018d84d95c2d6b3674ea63b5961d925b08d91e2..cc9cac1cf7834f081d18604e5a0607b4f4221a55 100644
--- a/app/code/Magento/Sales/Model/AbstractModel.php
+++ b/app/code/Magento/Sales/Model/AbstractModel.php
@@ -21,7 +21,7 @@ abstract class AbstractModel extends AbstractExtensibleModel
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -30,7 +30,7 @@ abstract class AbstractModel extends AbstractExtensibleModel
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/AbstractNotifier.php b/app/code/Magento/Sales/Model/AbstractNotifier.php
index 12a910b1c1644e44928695ee76614621105e41ff..53f416ef50e3e03db37fd478751291dd6af9c0e0 100644
--- a/app/code/Magento/Sales/Model/AbstractNotifier.php
+++ b/app/code/Magento/Sales/Model/AbstractNotifier.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Model;
 
 use Psr\Log\LoggerInterface as Logger;
 use Magento\Sales\Model\Order\Email\Sender;
-use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory;
 
 /**
  * Class Notifier
diff --git a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportBestsellersData.php b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportBestsellersData.php
similarity index 81%
rename from app/code/Magento/Sales/Model/Observer/AggregateSalesReportBestsellersData.php
rename to app/code/Magento/Sales/Model/CronJob/AggregateSalesReportBestsellersData.php
index e31a27b612e148a9e34f777baad7d0c03960342c..98d2b5f9c8fde08d2960e5e57f4f803ceef82b3a 100644
--- a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportBestsellersData.php
+++ b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportBestsellersData.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer;
+namespace Magento\Sales\Model\CronJob;
 
 use Magento\Framework\Locale\ResolverInterface;
 use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
@@ -24,19 +24,19 @@ class AggregateSalesReportBestsellersData
     protected $localeDate;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Report\BestsellersFactory
+     * @var \Magento\Sales\Model\ResourceModel\Report\BestsellersFactory
      */
     protected $bestsellersFactory;
 
     /**
      * @param ResolverInterface $localeResolver
      * @param TimezoneInterface $timezone
-     * @param \Magento\Sales\Model\Resource\Report\BestsellersFactory $bestsellersFactory
+     * @param \Magento\Sales\Model\ResourceModel\Report\BestsellersFactory $bestsellersFactory
      */
     public function __construct(
         ResolverInterface $localeResolver,
         TimezoneInterface $timezone,
-        \Magento\Sales\Model\Resource\Report\BestsellersFactory $bestsellersFactory
+        \Magento\Sales\Model\ResourceModel\Report\BestsellersFactory $bestsellersFactory
     ) {
         $this->localeResolver = $localeResolver;
         $this->localeDate = $timezone;
diff --git a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportInvoicedData.php b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportInvoicedData.php
similarity index 82%
rename from app/code/Magento/Sales/Model/Observer/AggregateSalesReportInvoicedData.php
rename to app/code/Magento/Sales/Model/CronJob/AggregateSalesReportInvoicedData.php
index d849812c97b37f4a6887a5a60522b6619709b578..6cfe9026759f7a6d00753685585760f18c8b0c8d 100644
--- a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportInvoicedData.php
+++ b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportInvoicedData.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer;
+namespace Magento\Sales\Model\CronJob;
 
 /**
  * Class AggregateSalesReportInvoicedData
@@ -21,19 +21,19 @@ class AggregateSalesReportInvoicedData
     protected $localeDate;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Report\InvoicedFactory
+     * @var \Magento\Sales\Model\ResourceModel\Report\InvoicedFactory
      */
     protected $invoicedFactory;
 
     /**
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone
-     * @param \Magento\Sales\Model\Resource\Report\InvoicedFactory $invoicedFactory
+     * @param \Magento\Sales\Model\ResourceModel\Report\InvoicedFactory $invoicedFactory
      */
     public function __construct(
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone,
-        \Magento\Sales\Model\Resource\Report\InvoicedFactory $invoicedFactory
+        \Magento\Sales\Model\ResourceModel\Report\InvoicedFactory $invoicedFactory
     ) {
         $this->localeResolver = $localeResolver;
         $this->localeDate = $timezone;
diff --git a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportOrderData.php b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportOrderData.php
similarity index 83%
rename from app/code/Magento/Sales/Model/Observer/AggregateSalesReportOrderData.php
rename to app/code/Magento/Sales/Model/CronJob/AggregateSalesReportOrderData.php
index 441a48958f665106fa9284a4444768c41faf8991..2a4a9c9b153e4122f27856aaa1e5890f9e5d7da8 100644
--- a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportOrderData.php
+++ b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportOrderData.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer;
+namespace Magento\Sales\Model\CronJob;
 
 /**
  * Class AggregateSalesReportOrderData
@@ -21,19 +21,19 @@ class AggregateSalesReportOrderData
     protected $localeDate;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Report\OrderFactory
+     * @var \Magento\Sales\Model\ResourceModel\Report\OrderFactory
      */
     protected $orderFactory;
 
     /**
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone
-     * @param \Magento\Sales\Model\Resource\Report\OrderFactory $orderFactory
+     * @param \Magento\Sales\Model\ResourceModel\Report\OrderFactory $orderFactory
      */
     public function __construct(
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $timezone,
-        \Magento\Sales\Model\Resource\Report\OrderFactory $orderFactory
+        \Magento\Sales\Model\ResourceModel\Report\OrderFactory $orderFactory
     ) {
         $this->localeResolver = $localeResolver;
         $this->localeDate = $timezone;
diff --git a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportRefundedData.php b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportRefundedData.php
similarity index 82%
rename from app/code/Magento/Sales/Model/Observer/AggregateSalesReportRefundedData.php
rename to app/code/Magento/Sales/Model/CronJob/AggregateSalesReportRefundedData.php
index 22c1d56d9a2e905bb49316aa424d0470e2e51987..1864aef52b411ffe2d9f7251a9ce04c7a92eee3c 100644
--- a/app/code/Magento/Sales/Model/Observer/AggregateSalesReportRefundedData.php
+++ b/app/code/Magento/Sales/Model/CronJob/AggregateSalesReportRefundedData.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer;
+namespace Magento\Sales\Model\CronJob;
 
 use Magento\Framework\Locale\ResolverInterface;
 use Magento\Framework\Stdlib\DateTime\TimezoneInterface;
@@ -24,19 +24,19 @@ class AggregateSalesReportRefundedData
     protected $localeDate;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Report\RefundedFactory
+     * @var \Magento\Sales\Model\ResourceModel\Report\RefundedFactory
      */
     protected $refundedFactory;
 
     /**
      * @param ResolverInterface $localeResolver
      * @param TimezoneInterface $timezone
-     * @param \Magento\Sales\Model\Resource\Report\RefundedFactory $refundedFactory
+     * @param \Magento\Sales\Model\ResourceModel\Report\RefundedFactory $refundedFactory
      */
     public function __construct(
         ResolverInterface $localeResolver,
         TimezoneInterface $timezone,
-        \Magento\Sales\Model\Resource\Report\RefundedFactory $refundedFactory
+        \Magento\Sales\Model\ResourceModel\Report\RefundedFactory $refundedFactory
     ) {
         $this->localeResolver = $localeResolver;
         $this->localeDate = $timezone;
diff --git a/app/code/Magento/Sales/Model/Observer/CleanExpiredOrders.php b/app/code/Magento/Sales/Model/CronJob/CleanExpiredOrders.php
similarity index 81%
rename from app/code/Magento/Sales/Model/Observer/CleanExpiredOrders.php
rename to app/code/Magento/Sales/Model/CronJob/CleanExpiredOrders.php
index e9e70de05c7261e2f3c04e274303acefb458852d..8fb948ac24b7bfc7627468f45f87a7f1a9ffd447 100644
--- a/app/code/Magento/Sales/Model/Observer/CleanExpiredOrders.php
+++ b/app/code/Magento/Sales/Model/CronJob/CleanExpiredOrders.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer;
+namespace Magento\Sales\Model\CronJob;
 
 use Magento\Store\Model\StoresConfig;
 use Magento\Sales\Model\Order;
@@ -16,7 +16,7 @@ class CleanExpiredOrders
     protected $storesConfig;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory
      */
     protected $orderCollectionFactory;
 
@@ -28,12 +28,12 @@ class CleanExpiredOrders
     /**
      * @param StoresConfig $storesConfig
      * @param \Psr\Log\LoggerInterface $logger
-     * @param \Magento\Sales\Model\Resource\Order\CollectionFactory $collectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $collectionFactory
      */
     public function __construct(
         StoresConfig $storesConfig,
         \Psr\Log\LoggerInterface $logger,
-        \Magento\Sales\Model\Resource\Order\CollectionFactory $collectionFactory
+        \Magento\Sales\Model\ResourceModel\Order\CollectionFactory $collectionFactory
     ) {
         $this->storesConfig = $storesConfig;
         $this->logger = $logger;
@@ -49,7 +49,7 @@ class CleanExpiredOrders
     {
         $lifetimes = $this->storesConfig->getStoresConfigByPath('sales/orders/delete_pending_after');
         foreach ($lifetimes as $storeId => $lifetime) {
-            /** @var $orders \Magento\Sales\Model\Resource\Order\Collection */
+            /** @var $orders \Magento\Sales\Model\ResourceModel\Order\Collection */
             $orders = $this->orderCollectionFactory->create();
             $orders->addFieldToFilter('store_id', $storeId);
             $orders->addFieldToFilter('status', Order::STATE_PENDING_PAYMENT);
diff --git a/app/code/Magento/Sales/Model/Observer/SendEmails.php b/app/code/Magento/Sales/Model/EmailSenderHandler.php
similarity index 68%
rename from app/code/Magento/Sales/Model/Observer/SendEmails.php
rename to app/code/Magento/Sales/Model/EmailSenderHandler.php
index b8c8d00cddb52d4f23c7b51aab51d46776d2d27e..29653f368dec1cb86f646d9c6d9ab0b09904e60b 100644
--- a/app/code/Magento/Sales/Model/Observer/SendEmails.php
+++ b/app/code/Magento/Sales/Model/EmailSenderHandler.php
@@ -3,15 +3,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer;
+namespace Magento\Sales\Model;
 
 /**
- * Sales emails sending observer.
+ * Sales emails sending
  *
  * Performs handling of cron jobs related to sending emails to customers
  * after creation/modification of Order, Invoice, Shipment or Creditmemo.
  */
-class SendEmails
+class EmailSenderHandler
 {
     /**
      * Email sender model.
@@ -23,14 +23,14 @@ class SendEmails
     /**
      * Entity resource model.
      *
-     * @var \Magento\Sales\Model\Resource\EntityAbstract
+     * @var \Magento\Sales\Model\ResourceModel\EntityAbstract
      */
     protected $entityResource;
 
     /**
      * Entity collection model.
      *
-     * @var \Magento\Sales\Model\Resource\Collection\AbstractCollection
+     * @var \Magento\Sales\Model\ResourceModel\Collection\AbstractCollection
      */
     protected $entityCollection;
 
@@ -43,14 +43,14 @@ class SendEmails
 
     /**
      * @param \Magento\Sales\Model\Order\Email\Sender $emailSender
-     * @param \Magento\Sales\Model\Resource\EntityAbstract $entityResource
-     * @param \Magento\Sales\Model\Resource\Collection\AbstractCollection $entityCollection
+     * @param \Magento\Sales\Model\ResourceModel\EntityAbstract $entityResource
+     * @param \Magento\Sales\Model\ResourceModel\Collection\AbstractCollection $entityCollection
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
      */
     public function __construct(
         \Magento\Sales\Model\Order\Email\Sender $emailSender,
-        \Magento\Sales\Model\Resource\EntityAbstract $entityResource,
-        \Magento\Sales\Model\Resource\Collection\AbstractCollection $entityCollection,
+        \Magento\Sales\Model\ResourceModel\EntityAbstract $entityResource,
+        \Magento\Sales\Model\ResourceModel\Collection\AbstractCollection $entityCollection,
         \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
     ) {
         $this->emailSender = $emailSender;
@@ -60,19 +60,10 @@ class SendEmails
     }
 
     /**
-     * Handles asynchronous email sending during corresponding
-     * cron job.
-     *
-     * Also method is used in the next events:
-     *
-     * - config_data_sales_email_general_async_sending_disabled
-     *
-     * Works only if asynchronous email sending is enabled
-     * in global settings.
-     *
+     * Handles asynchronous email sending
      * @return void
      */
-    public function execute()
+    public function sendEmails()
     {
         if ($this->globalConfig->getValue('sales_email/general/async_sending')) {
             $this->entityCollection->addFieldToFilter('send_email', ['eq' => 1]);
diff --git a/app/code/Magento/Sales/Model/Grid/Child/CollectionUpdater.php b/app/code/Magento/Sales/Model/Grid/Child/CollectionUpdater.php
index 30669017f7e7ce0f49c580ae3e84d7cf66aa5412..df4de46b6919b4da3ac2615932109871846f0e46 100644
--- a/app/code/Magento/Sales/Model/Grid/Child/CollectionUpdater.php
+++ b/app/code/Magento/Sales/Model/Grid/Child/CollectionUpdater.php
@@ -25,8 +25,8 @@ class CollectionUpdater implements \Magento\Framework\View\Layout\Argument\Updat
     /**
      * Update grid collection according to chosen transaction
      *
-     * @param \Magento\Sales\Model\Resource\Transaction\Grid\Collection $argument
-     * @return \Magento\Sales\Model\Resource\Transaction\Grid\Collection
+     * @param \Magento\Sales\Model\ResourceModel\Transaction\Grid\Collection $argument
+     * @return \Magento\Sales\Model\ResourceModel\Transaction\Grid\Collection
      */
     public function update($argument)
     {
diff --git a/app/code/Magento/Sales/Model/Grid/CollectionUpdater.php b/app/code/Magento/Sales/Model/Grid/CollectionUpdater.php
index 1a551963e96a2b7f546c2a4894b27907870039a3..d0b5b82f8a89c58003235ed41f251ff908d293ed 100644
--- a/app/code/Magento/Sales/Model/Grid/CollectionUpdater.php
+++ b/app/code/Magento/Sales/Model/Grid/CollectionUpdater.php
@@ -24,8 +24,8 @@ class CollectionUpdater implements \Magento\Framework\View\Layout\Argument\Updat
     /**
      * Update grid collection according to chosen order
      *
-     * @param \Magento\Sales\Model\Resource\Transaction\Grid\Collection $argument
-     * @return \Magento\Sales\Model\Resource\Transaction\Grid\Collection
+     * @param \Magento\Sales\Model\ResourceModel\Transaction\Grid\Collection $argument
+     * @return \Magento\Sales\Model\ResourceModel\Transaction\Grid\Collection
      */
     public function update($argument)
     {
diff --git a/app/code/Magento/Sales/Model/GridAsyncInsert.php b/app/code/Magento/Sales/Model/GridAsyncInsert.php
new file mode 100644
index 0000000000000000000000000000000000000000..c03f47be15d6558eabc55c19c719aca252c3ba3f
--- /dev/null
+++ b/app/code/Magento/Sales/Model/GridAsyncInsert.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Model;
+
+/**
+ * Sales entity grids indexing observer.
+ *
+ * Performs handling of events and cron jobs related to indexing
+ * of Order, Invoice, Shipment and Creditmemo grids.
+ */
+class GridAsyncInsert
+{
+    /**
+     * Entity grid model.
+     *
+     * @var \Magento\Sales\Model\ResourceModel\GridInterface
+     */
+    protected $entityGrid;
+
+    /**
+     * Global configuration storage.
+     *
+     * @var \Magento\Framework\App\Config\ScopeConfigInterface
+     */
+    protected $globalConfig;
+
+    /**
+     * @param \Magento\Sales\Model\ResourceModel\GridInterface $entityGrid
+     * @param \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
+     */
+    public function __construct(
+        \Magento\Sales\Model\ResourceModel\GridInterface $entityGrid,
+        \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
+    ) {
+        $this->entityGrid = $entityGrid;
+        $this->globalConfig = $globalConfig;
+    }
+
+    /**
+     * Handles asynchronous insertion of the new entity into
+     * corresponding grid during cron job.
+     *
+     * Also method is used in the next events:
+     *
+     * - config_data_dev_grid_async_indexing_disabled
+     *
+     * Works only if asynchronous grid indexing is enabled
+     * in global settings.
+     *
+     * @return void
+     */
+    public function asyncInsert()
+    {
+        if ($this->globalConfig->getValue('dev/grid/async_indexing')) {
+            $this->entityGrid->refreshBySchedule();
+        }
+    }
+}
diff --git a/app/code/Magento/Sales/Model/Observer/Backend/CatalogPriceRule.php b/app/code/Magento/Sales/Model/Observer/Backend/CatalogPriceRule.php
deleted file mode 100644
index 8d8c041a0b7f524ad5f02792c69e6b931d62ac91..0000000000000000000000000000000000000000
--- a/app/code/Magento/Sales/Model/Observer/Backend/CatalogPriceRule.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Sales\Model\Observer\Backend;
-
-class CatalogPriceRule
-{
-    /**
-     * @var \Magento\Quote\Model\Resource\Quote
-     */
-    protected $_quote;
-
-    /**
-     * @param \Magento\Quote\Model\Resource\Quote $quote
-     */
-    public function __construct(\Magento\Quote\Model\Resource\Quote $quote)
-    {
-        $this->_quote = $quote;
-    }
-
-    /**
-     * When applying a catalog price rule, make related quotes recollect on demand
-     *
-     * @return void
-     */
-    public function dispatch()
-    {
-        $this->_quote->markQuotesRecollectOnCatalogRules();
-    }
-}
diff --git a/app/code/Magento/Sales/Model/Order.php b/app/code/Magento/Sales/Model/Order.php
index 777c89667d447efc5413da51c69805cec77aa2f5..e53438bd6844b88d4a9f91fefb81da78d5ae7f07 100644
--- a/app/code/Magento/Sales/Model/Order.php
+++ b/app/code/Magento/Sales/Model/Order.php
@@ -12,14 +12,14 @@ use Magento\Framework\Pricing\PriceCurrencyInterface;
 use Magento\Sales\Api\Data\OrderInterface;
 use Magento\Sales\Api\Data\OrderStatusHistoryInterface;
 use Magento\Sales\Model\Order\Payment;
-use Magento\Sales\Model\Resource\Order\Address\Collection;
-use Magento\Sales\Model\Resource\Order\Creditmemo\Collection as CreditmemoCollection;
-use Magento\Sales\Model\Resource\Order\Invoice\Collection as InvoiceCollection;
-use Magento\Sales\Model\Resource\Order\Item\Collection as ImportCollection;
-use Magento\Sales\Model\Resource\Order\Payment\Collection as PaymentCollection;
-use Magento\Sales\Model\Resource\Order\Shipment\Collection as ShipmentCollection;
-use Magento\Sales\Model\Resource\Order\Shipment\Track\Collection as TrackCollection;
-use Magento\Sales\Model\Resource\Order\Status\History\Collection as HistoryCollection;
+use Magento\Sales\Model\ResourceModel\Order\Address\Collection;
+use Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection as CreditmemoCollection;
+use Magento\Sales\Model\ResourceModel\Order\Invoice\Collection as InvoiceCollection;
+use Magento\Sales\Model\ResourceModel\Order\Item\Collection as ImportCollection;
+use Magento\Sales\Model\ResourceModel\Order\Payment\Collection as PaymentCollection;
+use Magento\Sales\Model\ResourceModel\Order\Shipment\Collection as ShipmentCollection;
+use Magento\Sales\Model\ResourceModel\Order\Shipment\Track\Collection as TrackCollection;
+use Magento\Sales\Model\ResourceModel\Order\Status\History\Collection as HistoryCollection;
 
 /**
  * Order model
@@ -31,8 +31,8 @@ use Magento\Sales\Model\Resource\Order\Status\History\Collection as HistoryColle
  *  sales_order_delete_before
  *  sales_order_delete_after
  *
- * @method \Magento\Sales\Model\Resource\Order _getResource()
- * @method \Magento\Sales\Model\Resource\Order getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order getResource()
  * @method int getGiftMessageId()
  * @method \Magento\Sales\Model\Order setGiftMessageId(int $value)
  * @method bool hasBillingAddressId()
@@ -188,12 +188,12 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
     protected $productRepository;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $productListFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Item\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory
      */
     protected $_orderItemCollectionFactory;
 
@@ -218,37 +218,37 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
     protected $_orderHistoryFactory;
 
     /**
-     * @var Resource\Order\Address\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Address\CollectionFactory
      */
     protected $_addressCollectionFactory;
 
     /**
-     * @var Resource\Order\Payment\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Payment\CollectionFactory
      */
     protected $_paymentCollectionFactory;
 
     /**
-     * @var Resource\Order\Status\History\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory
      */
     protected $_historyCollectionFactory;
 
     /**
-     * @var Resource\Order\Invoice\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory
      */
     protected $_invoiceCollectionFactory;
 
     /**
-     * @var Resource\Order\Shipment\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory
      */
     protected $_shipmentCollectionFactory;
 
     /**
-     * @var Resource\Order\Creditmemo\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory
      */
     protected $_memoCollectionFactory;
 
     /**
-     * @var Resource\Order\Shipment\Track\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory
      */
     protected $_trackCollectionFactory;
 
@@ -271,22 +271,22 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param Order\Config $orderConfig
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
-     * @param Resource\Order\Item\CollectionFactory $orderItemCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory $orderItemCollectionFactory
      * @param \Magento\Catalog\Model\Product\Visibility $productVisibility
      * @param \Magento\Sales\Api\InvoiceManagementInterface $invoiceManagement
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
      * @param \Magento\Eav\Model\Config $eavConfig
      * @param Order\Status\HistoryFactory $orderHistoryFactory
-     * @param Resource\Order\Address\CollectionFactory $addressCollectionFactory
-     * @param Resource\Order\Payment\CollectionFactory $paymentCollectionFactory
-     * @param Resource\Order\Status\History\CollectionFactory $historyCollectionFactory
-     * @param Resource\Order\Invoice\CollectionFactory $invoiceCollectionFactory
-     * @param Resource\Order\Shipment\CollectionFactory $shipmentCollectionFactory
-     * @param Resource\Order\Creditmemo\CollectionFactory $memoCollectionFactory
-     * @param Resource\Order\Shipment\Track\CollectionFactory $trackCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Address\CollectionFactory $addressCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Payment\CollectionFactory $paymentCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory $historyCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory $invoiceCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory $shipmentCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory $memoCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory $trackCollectionFactory
      * @param PriceCurrencyInterface $priceCurrency
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productListFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productListFactory
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -300,22 +300,22 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Sales\Model\Order\Config $orderConfig,
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
-        \Magento\Sales\Model\Resource\Order\Item\CollectionFactory $orderItemCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory $orderItemCollectionFactory,
         \Magento\Catalog\Model\Product\Visibility $productVisibility,
         \Magento\Sales\Api\InvoiceManagementInterface $invoiceManagement,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
         \Magento\Eav\Model\Config $eavConfig,
         \Magento\Sales\Model\Order\Status\HistoryFactory $orderHistoryFactory,
-        \Magento\Sales\Model\Resource\Order\Address\CollectionFactory $addressCollectionFactory,
-        \Magento\Sales\Model\Resource\Order\Payment\CollectionFactory $paymentCollectionFactory,
-        \Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory $historyCollectionFactory,
-        \Magento\Sales\Model\Resource\Order\Invoice\CollectionFactory $invoiceCollectionFactory,
-        \Magento\Sales\Model\Resource\Order\Shipment\CollectionFactory $shipmentCollectionFactory,
-        \Magento\Sales\Model\Resource\Order\Creditmemo\CollectionFactory $memoCollectionFactory,
-        \Magento\Sales\Model\Resource\Order\Shipment\Track\CollectionFactory $trackCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Address\CollectionFactory $addressCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Payment\CollectionFactory $paymentCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory $historyCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Invoice\CollectionFactory $invoiceCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory $shipmentCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Creditmemo\CollectionFactory $memoCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory $trackCollectionFactory,
         PriceCurrencyInterface $priceCurrency,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productListFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productListFactory,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -356,7 +356,7 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order');
     }
 
     /**
@@ -1302,12 +1302,20 @@ class Order extends AbstractModel implements EntityInterface, OrderInterface
     }
 
     /**
-     * @param mixed $itemId
-     * @return \Magento\Framework\DataObject
+     * Gets order item by given ID.
+     *
+     * @param int $itemId
+     * @return \Magento\Framework\DataObject|null
      */
     public function getItemById($itemId)
     {
-        return $this->getItemsCollection()->getItemById($itemId);
+        $items = $this->getItems();
+
+        if (isset($items[$itemId])) {
+            return $items[$itemId];
+        }
+
+        return null;
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Order/Address.php b/app/code/Magento/Sales/Model/Order/Address.php
index d3980760900757948ed11d9910eb4af90ed955fa..fec38a4895fc8e9dfa99c6053e4a97ab865845c9 100644
--- a/app/code/Magento/Sales/Model/Order/Address.php
+++ b/app/code/Magento/Sales/Model/Order/Address.php
@@ -13,8 +13,8 @@ use Magento\Customer\Model\Address\AddressModelInterface;
 /**
  * Sales order address model
  *
- * @method \Magento\Sales\Model\Resource\Order\Address _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Address getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Address _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Address getResource()
  * @method \Magento\Customer\Api\Data\AddressInterface getCustomerAddressData()
  * @method Address setCustomerAddressData(\Magento\Customer\Api\Data\AddressInterface $value)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -61,7 +61,7 @@ class Address extends AbstractModel implements OrderAddressInterface, AddressMod
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Directory\Model\RegionFactory $regionFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -72,7 +72,7 @@ class Address extends AbstractModel implements OrderAddressInterface, AddressMod
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Directory\Model\RegionFactory $regionFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -98,7 +98,7 @@ class Address extends AbstractModel implements OrderAddressInterface, AddressMod
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Address');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Address');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Order/AddressRepository.php b/app/code/Magento/Sales/Model/Order/AddressRepository.php
index 3e5d98aec70b4d13965af5f13f713a825dae2286..2e4c9df86fa22c97348f932c07b1d8dc41d46d46 100644
--- a/app/code/Magento/Sales/Model/Order/AddressRepository.php
+++ b/app/code/Magento/Sales/Model/Order/AddressRepository.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sales\Model\Order;
 
-use Magento\Sales\Model\Resource\Metadata;
+use Magento\Sales\Model\ResourceModel\Metadata;
 use Magento\Sales\Api\Data\OrderAddressSearchResultInterfaceFactory as SearchResultFactory;
 use Magento\Framework\Exception\CouldNotDeleteException;
 use Magento\Framework\Exception\CouldNotSaveException;
diff --git a/app/code/Magento/Sales/Model/Order/Config.php b/app/code/Magento/Sales/Model/Order/Config.php
index bad7c52073a603562a9f7e2a34aa411520b17a82..8d54a83434b1582a342a782c22d8f9d82228fbb4 100644
--- a/app/code/Magento/Sales/Model/Order/Config.php
+++ b/app/code/Magento/Sales/Model/Order/Config.php
@@ -11,7 +11,7 @@ namespace Magento\Sales\Model\Order;
 class Config
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Status\Collection
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status\Collection
      */
     protected $collection;
 
@@ -33,7 +33,7 @@ class Config
     protected $orderStatusFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Status\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory
      */
     protected $orderStatusCollectionFactory;
 
@@ -55,12 +55,12 @@ class Config
      * Constructor
      *
      * @param \Magento\Sales\Model\Order\StatusFactory $orderStatusFactory
-     * @param \Magento\Sales\Model\Resource\Order\Status\CollectionFactory $orderStatusCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory $orderStatusCollectionFactory
      * @param \Magento\Framework\App\State $state
      */
     public function __construct(
         \Magento\Sales\Model\Order\StatusFactory $orderStatusFactory,
-        \Magento\Sales\Model\Resource\Order\Status\CollectionFactory $orderStatusCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory $orderStatusCollectionFactory,
         \Magento\Framework\App\State $state
     ) {
         $this->orderStatusFactory = $orderStatusFactory;
@@ -69,7 +69,7 @@ class Config
     }
 
     /**
-     * @return \Magento\Sales\Model\Resource\Order\Status\Collection
+     * @return \Magento\Sales\Model\ResourceModel\Order\Status\Collection
      */
     protected function _getCollection()
     {
diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo.php b/app/code/Magento/Sales/Model/Order/Creditmemo.php
index 9ec06e8350adbe456833257c39a7b767af10c998..9eeb67ed2662762007af77bd1941eceb0060456d 100644
--- a/app/code/Magento/Sales/Model/Order/Creditmemo.php
+++ b/app/code/Magento/Sales/Model/Order/Creditmemo.php
@@ -18,8 +18,8 @@ use Magento\Sales\Model\EntityInterface;
 /**
  * Order creditmemo model
  *
- * @method \Magento\Sales\Model\Resource\Order\Creditmemo _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Creditmemo getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Creditmemo _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Creditmemo getResource()
  * @method \Magento\Sales\Model\Order\Invoice setSendEmail(bool $value)
  * @method \Magento\Sales\Model\Order\Invoice setCustomerNote(string $value)
  * @method string getCustomerNote()
@@ -86,7 +86,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt
     protected $_orderFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Creditmemo\Item\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item\CollectionFactory
      */
     protected $_cmItemCollectionFactory;
 
@@ -106,7 +106,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt
     protected $_commentFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Creditmemo\Comment\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\CollectionFactory
      */
     protected $_commentCollectionFactory;
 
@@ -122,13 +122,13 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt
      * @param AttributeValueFactory $customAttributeFactory
      * @param Creditmemo\Config $creditmemoConfig
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
-     * @param \Magento\Sales\Model\Resource\Order\Creditmemo\Item\CollectionFactory $cmItemCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item\CollectionFactory $cmItemCollectionFactory
      * @param \Magento\Framework\Math\CalculatorFactory $calculatorFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param Creditmemo\CommentFactory $commentFactory
-     * @param \Magento\Sales\Model\Resource\Order\Creditmemo\Comment\CollectionFactory $commentCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\CollectionFactory $commentCollectionFactory
      * @param PriceCurrencyInterface $priceCurrency
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -140,13 +140,13 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt
         AttributeValueFactory $customAttributeFactory,
         \Magento\Sales\Model\Order\Creditmemo\Config $creditmemoConfig,
         \Magento\Sales\Model\OrderFactory $orderFactory,
-        \Magento\Sales\Model\Resource\Order\Creditmemo\Item\CollectionFactory $cmItemCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item\CollectionFactory $cmItemCollectionFactory,
         \Magento\Framework\Math\CalculatorFactory $calculatorFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Sales\Model\Order\Creditmemo\CommentFactory $commentFactory,
-        \Magento\Sales\Model\Resource\Order\Creditmemo\Comment\CollectionFactory $commentCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\CollectionFactory $commentCollectionFactory,
         PriceCurrencyInterface $priceCurrency,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -176,7 +176,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Creditmemo');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Creditmemo');
     }
 
     /**
@@ -569,7 +569,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt
 
     /**
      * @param bool $reload
-     * @return \Magento\Sales\Model\Resource\Order\Creditmemo\Comment\Collection
+     * @return \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\Collection
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function getCommentsCollection($reload = false)
@@ -596,7 +596,7 @@ class Creditmemo extends AbstractModel implements EntityInterface, CreditmemoInt
      * Get creditmemos collection filtered by $filter
      *
      * @param array|null $filter
-     * @return \Magento\Sales\Model\Resource\Order\Creditmemo\Collection
+     * @return \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection
      */
     public function getFilteredCollectionItems($filter = null)
     {
diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo/Comment.php b/app/code/Magento/Sales/Model/Order/Creditmemo/Comment.php
index bb4ef3957d0487eee3c7581c872a5e8550f6ce3e..ce87a4282d2240dcfa73778644998ee0c91ccf19 100644
--- a/app/code/Magento/Sales/Model/Order/Creditmemo/Comment.php
+++ b/app/code/Magento/Sales/Model/Order/Creditmemo/Comment.php
@@ -10,8 +10,8 @@ use Magento\Sales\Api\Data\CreditmemoCommentInterface;
 use Magento\Sales\Model\AbstractModel;
 
 /**
- * @method \Magento\Sales\Model\Resource\Order\Creditmemo\Comment _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Creditmemo\Comment getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment getResource()
  */
 class Comment extends AbstractModel implements CreditmemoCommentInterface
 {
@@ -33,7 +33,7 @@ class Comment extends AbstractModel implements CreditmemoCommentInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -44,7 +44,7 @@ class Comment extends AbstractModel implements CreditmemoCommentInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -67,7 +67,7 @@ class Comment extends AbstractModel implements CreditmemoCommentInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Creditmemo\Comment');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Order/Creditmemo/Item.php b/app/code/Magento/Sales/Model/Order/Creditmemo/Item.php
index a0d05ec5933d920a07643a1b0cc1d21ee06ab07a..4de21f6036b32438b9e5198a5a34b139107aa35d 100644
--- a/app/code/Magento/Sales/Model/Order/Creditmemo/Item.php
+++ b/app/code/Magento/Sales/Model/Order/Creditmemo/Item.php
@@ -10,8 +10,8 @@ use Magento\Sales\Api\Data\CreditmemoItemInterface;
 use Magento\Sales\Model\AbstractModel;
 
 /**
- * @method \Magento\Sales\Model\Resource\Order\Creditmemo\Item _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Creditmemo\Item getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item getResource()
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  * @SuppressWarnings(PHPMD.ExcessivePublicCount)
  */
@@ -48,7 +48,7 @@ class Item extends AbstractModel implements CreditmemoItemInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Sales\Model\Order\ItemFactory $orderItemFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -58,7 +58,7 @@ class Item extends AbstractModel implements CreditmemoItemInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Sales\Model\Order\ItemFactory $orderItemFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -81,7 +81,7 @@ class Item extends AbstractModel implements CreditmemoItemInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Creditmemo\Item');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Order/CreditmemoNotifier.php b/app/code/Magento/Sales/Model/Order/CreditmemoNotifier.php
index 04e962611b52622cab30ba83768b4905b9db1f1d..b751e307943efc59034d3ef567174f20e83d5c7a 100644
--- a/app/code/Magento/Sales/Model/Order/CreditmemoNotifier.php
+++ b/app/code/Magento/Sales/Model/Order/CreditmemoNotifier.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Model\Order;
 
 use Psr\Log\LoggerInterface as Logger;
 use Magento\Sales\Model\Order\Email\Sender\CreditmemoSender;
-use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory;
 
 /**
  * Class CreditmemoNotifier
diff --git a/app/code/Magento/Sales/Model/Order/CreditmemoRepository.php b/app/code/Magento/Sales/Model/Order/CreditmemoRepository.php
index a54047c6cc516f165407dba8cfb68859c07dbaef..200a57a73fff5804e589b9688d1ecc443db061e1 100644
--- a/app/code/Magento/Sales/Model/Order/CreditmemoRepository.php
+++ b/app/code/Magento/Sales/Model/Order/CreditmemoRepository.php
@@ -6,8 +6,8 @@
 
 namespace Magento\Sales\Model\Order;
 
-use Magento\Sales\Model\Resource\Order\Creditmemo as Resource;
-use Magento\Sales\Model\Resource\Metadata;
+use Magento\Sales\Model\ResourceModel\Order\Creditmemo as Resource;
+use Magento\Sales\Model\ResourceModel\Metadata;
 use Magento\Sales\Api\Data\CreditmemoSearchResultInterfaceFactory as SearchResultFactory;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Framework\Exception\InputException;
diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php
index b3061c2000cea4d0df0c057eac60d451819e2c40..babc152c51219caa71fc38faa4a5a7ae52f2dd38 100644
--- a/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php
+++ b/app/code/Magento/Sales/Model/Order/Email/Sender/CreditmemoSender.php
@@ -11,7 +11,7 @@ use Magento\Sales\Model\Order\Creditmemo;
 use Magento\Sales\Model\Order\Email\Container\CreditmemoIdentity;
 use Magento\Sales\Model\Order\Email\Container\Template;
 use Magento\Sales\Model\Order\Email\Sender;
-use Magento\Sales\Model\Resource\Order\Creditmemo as CreditmemoResource;
+use Magento\Sales\Model\ResourceModel\Order\Creditmemo as CreditmemoResource;
 use Magento\Sales\Model\Order\Address\Renderer;
 use Magento\Framework\Event\ManagerInterface;
 
diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php
index 30fc4ae612bae3b0b1d2d4fbfa9d70b24dfd099b..93002ad98538fe574d774905c8d3783a02b2396d 100644
--- a/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php
+++ b/app/code/Magento/Sales/Model/Order/Email/Sender/InvoiceSender.php
@@ -11,7 +11,7 @@ use Magento\Sales\Model\Order\Email\Container\InvoiceIdentity;
 use Magento\Sales\Model\Order\Email\Container\Template;
 use Magento\Sales\Model\Order\Email\Sender;
 use Magento\Sales\Model\Order\Invoice;
-use Magento\Sales\Model\Resource\Order\Invoice as InvoiceResource;
+use Magento\Sales\Model\ResourceModel\Order\Invoice as InvoiceResource;
 use Magento\Sales\Model\Order\Address\Renderer;
 use Magento\Framework\Event\ManagerInterface;
 
diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/OrderSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/OrderSender.php
index 32628844736dfece992d984ba9b6be5debcb3bf9..d32aed76cb78b0efb7f17bfd5898317dec6cddda 100644
--- a/app/code/Magento/Sales/Model/Order/Email/Sender/OrderSender.php
+++ b/app/code/Magento/Sales/Model/Order/Email/Sender/OrderSender.php
@@ -10,7 +10,7 @@ use Magento\Sales\Model\Order;
 use Magento\Sales\Model\Order\Email\Container\OrderIdentity;
 use Magento\Sales\Model\Order\Email\Container\Template;
 use Magento\Sales\Model\Order\Email\Sender;
-use Magento\Sales\Model\Resource\Order as OrderResource;
+use Magento\Sales\Model\ResourceModel\Order as OrderResource;
 use Magento\Sales\Model\Order\Address\Renderer;
 use Magento\Framework\Event\ManagerInterface;
 
diff --git a/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php b/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php
index 960e29028f6d15fbd1390227d1f179b628d74a3d..e877eddb162205f9ece03eb1be53fb6225de6d35 100644
--- a/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php
+++ b/app/code/Magento/Sales/Model/Order/Email/Sender/ShipmentSender.php
@@ -11,7 +11,7 @@ use Magento\Sales\Model\Order\Email\Container\ShipmentIdentity;
 use Magento\Sales\Model\Order\Email\Container\Template;
 use Magento\Sales\Model\Order\Email\Sender;
 use Magento\Sales\Model\Order\Shipment;
-use Magento\Sales\Model\Resource\Order\Shipment as ShipmentResource;
+use Magento\Sales\Model\ResourceModel\Order\Shipment as ShipmentResource;
 use Magento\Sales\Model\Order\Address\Renderer;
 use Magento\Framework\Event\ManagerInterface;
 
diff --git a/app/code/Magento/Sales/Model/Order/Invoice.php b/app/code/Magento/Sales/Model/Order/Invoice.php
index c5a9472bfe95a220c153ef282d1f5b230343dde0..c0fd952426ad7ed456ac3298280b58ba22c141bd 100644
--- a/app/code/Magento/Sales/Model/Order/Invoice.php
+++ b/app/code/Magento/Sales/Model/Order/Invoice.php
@@ -103,7 +103,7 @@ class Invoice extends AbstractModel implements EntityInterface, InvoiceInterface
     protected $_calculatorFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Invoice\Item\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Item\CollectionFactory
      */
     protected $_invoiceItemCollectionFactory;
 
@@ -113,7 +113,7 @@ class Invoice extends AbstractModel implements EntityInterface, InvoiceInterface
     protected $_invoiceCommentFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Invoice\Comment\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\CollectionFactory
      */
     protected $_commentCollectionFactory;
 
@@ -125,10 +125,10 @@ class Invoice extends AbstractModel implements EntityInterface, InvoiceInterface
      * @param Invoice\Config $invoiceConfig
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Framework\Math\CalculatorFactory $calculatorFactory
-     * @param \Magento\Sales\Model\Resource\Order\Invoice\Item\CollectionFactory $invoiceItemCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Invoice\Item\CollectionFactory $invoiceItemCollectionFactory
      * @param Invoice\CommentFactory $invoiceCommentFactory
-     * @param \Magento\Sales\Model\Resource\Order\Invoice\Comment\CollectionFactory $commentCollectionFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\CollectionFactory $commentCollectionFactory
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -141,10 +141,10 @@ class Invoice extends AbstractModel implements EntityInterface, InvoiceInterface
         \Magento\Sales\Model\Order\Invoice\Config $invoiceConfig,
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Framework\Math\CalculatorFactory $calculatorFactory,
-        \Magento\Sales\Model\Resource\Order\Invoice\Item\CollectionFactory $invoiceItemCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Invoice\Item\CollectionFactory $invoiceItemCollectionFactory,
         \Magento\Sales\Model\Order\Invoice\CommentFactory $invoiceCommentFactory,
-        \Magento\Sales\Model\Resource\Order\Invoice\Comment\CollectionFactory $commentCollectionFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\CollectionFactory $commentCollectionFactory,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -172,7 +172,7 @@ class Invoice extends AbstractModel implements EntityInterface, InvoiceInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Invoice');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Invoice');
     }
 
     /**
@@ -476,7 +476,7 @@ class Invoice extends AbstractModel implements EntityInterface, InvoiceInterface
     /**
      * Get invoice items collection
      *
-     * @return \Magento\Sales\Model\Resource\Order\Invoice\Item\Collection
+     * @return \Magento\Sales\Model\ResourceModel\Order\Invoice\Item\Collection
      */
     public function getItemsCollection()
     {
@@ -696,7 +696,7 @@ class Invoice extends AbstractModel implements EntityInterface, InvoiceInterface
 
     /**
      * @param bool $reload
-     * @return \Magento\Sales\Model\Resource\Order\Invoice\Comment\Collection
+     * @return \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\Collection
      */
     public function getCommentsCollection($reload = false)
     {
diff --git a/app/code/Magento/Sales/Model/Order/Invoice/Comment.php b/app/code/Magento/Sales/Model/Order/Invoice/Comment.php
index 8e6190f47f2f467e2ea696a2c39c8cbfb153c0a0..cfe297d0ea640342e6450491d4678f7c75c19852 100644
--- a/app/code/Magento/Sales/Model/Order/Invoice/Comment.php
+++ b/app/code/Magento/Sales/Model/Order/Invoice/Comment.php
@@ -10,8 +10,8 @@ use Magento\Sales\Api\Data\InvoiceCommentInterface;
 use Magento\Sales\Model\AbstractModel;
 
 /**
- * @method \Magento\Sales\Model\Resource\Order\Invoice\Comment _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Invoice\Comment getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment getResource()
  */
 class Comment extends AbstractModel implements InvoiceCommentInterface
 {
@@ -33,7 +33,7 @@ class Comment extends AbstractModel implements InvoiceCommentInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -44,7 +44,7 @@ class Comment extends AbstractModel implements InvoiceCommentInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -67,7 +67,7 @@ class Comment extends AbstractModel implements InvoiceCommentInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Invoice\Comment');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Invoice\Comment');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Order/Invoice/Item.php b/app/code/Magento/Sales/Model/Order/Invoice/Item.php
index f30f9ec162f9a6c226f1cce65ebc9e3566b5b0a3..d6889b1334a84ef72bc835ab1e61ca37bb48cefa 100644
--- a/app/code/Magento/Sales/Model/Order/Invoice/Item.php
+++ b/app/code/Magento/Sales/Model/Order/Invoice/Item.php
@@ -10,8 +10,8 @@ use Magento\Sales\Api\Data\InvoiceItemInterface;
 use Magento\Sales\Model\AbstractModel;
 
 /**
- * @method \Magento\Sales\Model\Resource\Order\Invoice\Item _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Invoice\Item getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Invoice\Item _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Invoice\Item getResource()
  * @method float getBaseWeeeTaxRowDisposition()
  * @method \Magento\Sales\Model\Order\Invoice\Item setBaseWeeeTaxRowDisposition(float $value)
  * @method float getWeeeTaxAppliedRowAmount()
@@ -60,7 +60,7 @@ class Item extends AbstractModel implements InvoiceItemInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Sales\Model\Order\ItemFactory $orderItemFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -70,7 +70,7 @@ class Item extends AbstractModel implements InvoiceItemInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Sales\Model\Order\ItemFactory $orderItemFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -93,7 +93,7 @@ class Item extends AbstractModel implements InvoiceItemInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Invoice\Item');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Invoice\Item');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Order/InvoiceNotifier.php b/app/code/Magento/Sales/Model/Order/InvoiceNotifier.php
index 9c827cd72d1db55f5de006108c7b5ccc2e4ed007..a0b21bdcf6f2428616b1107cb92be274478e3736 100644
--- a/app/code/Magento/Sales/Model/Order/InvoiceNotifier.php
+++ b/app/code/Magento/Sales/Model/Order/InvoiceNotifier.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Model\Order;
 
 use Psr\Log\LoggerInterface as Logger;
 use Magento\Sales\Model\Order\Email\Sender\InvoiceSender;
-use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory;
 
 /**
  * Class InvoiceNotifier
diff --git a/app/code/Magento/Sales/Model/Order/InvoiceRepository.php b/app/code/Magento/Sales/Model/Order/InvoiceRepository.php
index 2ef71657623464aed4d916f4f6364d3840b4dc55..04275723bda95706d78cf85f717bb195dbbbf6ff 100644
--- a/app/code/Magento/Sales/Model/Order/InvoiceRepository.php
+++ b/app/code/Magento/Sales/Model/Order/InvoiceRepository.php
@@ -7,7 +7,7 @@
 namespace Magento\Sales\Model\Order;
 
 use Magento\Sales\Api\InvoiceRepositoryInterface;
-use Magento\Sales\Model\Resource\Metadata;
+use Magento\Sales\Model\ResourceModel\Metadata;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Sales\Api\Data\InvoiceSearchResultInterfaceFactory as SearchResultFactory;
 
@@ -88,7 +88,7 @@ class InvoiceRepository implements InvoiceRepositoryInterface
      */
     public function getList(\Magento\Framework\Api\SearchCriteria $criteria)
     {
-        /** @var \Magento\Sales\Model\Resource\Order\Invoice\Collection $collection */
+        /** @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Collection $collection */
         $collection = $this->searchResultFactory->create();
         foreach ($criteria->getFilterGroups() as $filterGroup) {
             foreach ($filterGroup->getFilters() as $filter) {
diff --git a/app/code/Magento/Sales/Model/Order/Item.php b/app/code/Magento/Sales/Model/Order/Item.php
index 2f21d80513cde2835d13d43f18ec4b9b5e2467e0..e1675782ea40f36878ac1ba81235e7956a655d5e 100644
--- a/app/code/Magento/Sales/Model/Order/Item.php
+++ b/app/code/Magento/Sales/Model/Order/Item.php
@@ -12,8 +12,8 @@ use Magento\Sales\Api\Data\OrderItemInterface;
 /**
  * Order Item Model
  *
- * @method \Magento\Sales\Model\Resource\Order\Item _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Item getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Item _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Item getResource()
  * @method int getGiftMessageId()
  * @method \Magento\Sales\Model\Order\Item setGiftMessageId(int $value)
  * @method int getGiftMessageAvailable()
@@ -105,7 +105,7 @@ class Item extends AbstractModel implements OrderItemInterface
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Api\ProductRepositoryInterface $productRepository
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -118,7 +118,7 @@ class Item extends AbstractModel implements OrderItemInterface
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -143,7 +143,7 @@ class Item extends AbstractModel implements OrderItemInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Item');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Item');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Order/ItemRepository.php b/app/code/Magento/Sales/Model/Order/ItemRepository.php
index 178e5bc48965bb33298eecb8cec20d1217a92023..776b862828658da8092d992697e790599941c770 100644
--- a/app/code/Magento/Sales/Model/Order/ItemRepository.php
+++ b/app/code/Magento/Sales/Model/Order/ItemRepository.php
@@ -17,7 +17,7 @@ use Magento\Sales\Api\Data\OrderItemInterface;
 use Magento\Sales\Api\Data\OrderItemSearchResultInterface;
 use Magento\Sales\Api\Data\OrderItemSearchResultInterfaceFactory;
 use Magento\Sales\Api\OrderItemRepositoryInterface;
-use Magento\Sales\Model\Resource\Metadata;
+use Magento\Sales\Model\ResourceModel\Metadata;
 
 /**
  * Repository class for @see OrderItemInterface
diff --git a/app/code/Magento/Sales/Model/Order/Payment.php b/app/code/Magento/Sales/Model/Order/Payment.php
index cc805b19a1331ebd6e7202bbae66e33a11b61dea..690bde68d5c575ece27f56d68165d1ccf31bc7d5 100644
--- a/app/code/Magento/Sales/Model/Order/Payment.php
+++ b/app/code/Magento/Sales/Model/Order/Payment.php
@@ -19,8 +19,8 @@ use Magento\Sales\Model\Order\Payment\Transaction\ManagerInterface;
 /**
  * Order payment information
  *
- * @method \Magento\Sales\Model\Resource\Order\Payment _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Payment getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Payment _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Payment getResource()
  * @SuppressWarnings(PHPMD.ExcessivePublicCount)
  * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -117,7 +117,7 @@ class Payment extends Info implements OrderPaymentInterface
      * @param Transaction\BuilderInterface $transactionBuilder
      * @param Payment\Processor $paymentProcessor
      * @param OrderRepositoryInterface $orderRepository
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -136,7 +136,7 @@ class Payment extends Info implements OrderPaymentInterface
         \Magento\Sales\Model\Order\Payment\Transaction\BuilderInterface $transactionBuilder,
         \Magento\Sales\Model\Order\Payment\Processor $paymentProcessor,
         OrderRepositoryInterface $orderRepository,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -167,7 +167,7 @@ class Payment extends Info implements OrderPaymentInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Payment');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Payment');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Order/Payment/Info.php b/app/code/Magento/Sales/Model/Order/Payment/Info.php
index b67a4e592a64410ab50bba1c423ebd01f96a7b58..0abf5b513b82f226fe8582730e9385e0aff9d1fa 100644
--- a/app/code/Magento/Sales/Model/Order/Payment/Info.php
+++ b/app/code/Magento/Sales/Model/Order/Payment/Info.php
@@ -42,7 +42,7 @@ class Info extends AbstractModel implements InfoInterface
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
      * @param \Magento\Payment\Helper\Data $paymentData
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -53,7 +53,7 @@ class Info extends AbstractModel implements InfoInterface
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
         \Magento\Payment\Helper\Data $paymentData,
         \Magento\Framework\Encryption\EncryptorInterface $encryptor,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Payment/Repository.php b/app/code/Magento/Sales/Model/Order/Payment/Repository.php
index 28d3ab374dc0266001af14d461706f305b2b1e7e..2517c4b9adbcc1aca5b648f7ad4974645624220c 100644
--- a/app/code/Magento/Sales/Model/Order/Payment/Repository.php
+++ b/app/code/Magento/Sales/Model/Order/Payment/Repository.php
@@ -9,7 +9,7 @@ namespace Magento\Sales\Model\Order\Payment;
 
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Sales\Api\OrderPaymentRepositoryInterface;
-use Magento\Sales\Model\Resource\Metadata;
+use Magento\Sales\Model\ResourceModel\Metadata;
 use Magento\Sales\Api\Data\OrderPaymentSearchResultInterfaceFactory as SearchResultFactory;
 
 /**
@@ -52,7 +52,7 @@ class Repository implements OrderPaymentRepositoryInterface
      */
     public function getList(\Magento\Framework\Api\SearchCriteria $criteria)
     {
-        /** @var \Magento\Sales\Model\Resource\Order\Payment\Collection $collection */
+        /** @var \Magento\Sales\Model\ResourceModel\Order\Payment\Collection $collection */
         $collection = $this->searchResultFactory->create();
         foreach ($criteria->getFilterGroups() as $filterGroup) {
             foreach ($filterGroup->getFilters() as $filter) {
diff --git a/app/code/Magento/Sales/Model/Order/Payment/Transaction.php b/app/code/Magento/Sales/Model/Order/Payment/Transaction.php
index 187e19ee22aa67e940054f2ef6bf7f7602315e42..91269d66fbd985d7c454e4d3678277c970c2385a 100644
--- a/app/code/Magento/Sales/Model/Order/Payment/Transaction.php
+++ b/app/code/Magento/Sales/Model/Order/Payment/Transaction.php
@@ -17,8 +17,8 @@ use Magento\Sales\Model\AbstractModel;
  * Tracks transaction history, allows to build transactions hierarchy
  * By default transactions are saved as closed.
  *
- * @method \Magento\Sales\Model\Resource\Order\Payment\Transaction _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Payment\Transaction getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Payment\Transaction _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Payment\Transaction getResource()
 
  * @author      Magento Core Team <core@magentocommerce.com>
  * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
@@ -155,7 +155,7 @@ class Transaction extends AbstractModel implements TransactionInterface
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory
      * @param TransactionFactory $transactionFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -170,7 +170,7 @@ class Transaction extends AbstractModel implements TransactionInterface
         \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
         \Magento\Framework\Stdlib\DateTime\DateTimeFactory $dateFactory,
         TransactionFactory $transactionFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -197,7 +197,7 @@ class Transaction extends AbstractModel implements TransactionInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Payment\Transaction');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Payment\Transaction');
         parent::_construct();
     }
 
diff --git a/app/code/Magento/Sales/Model/Order/Payment/Transaction/Repository.php b/app/code/Magento/Sales/Model/Order/Payment/Transaction/Repository.php
index 4333e67bd28acd6d570208cd90e371ccee2f008f..051ab5401d59fda4ded3f0af78bab2869e526617 100644
--- a/app/code/Magento/Sales/Model/Order/Payment/Transaction/Repository.php
+++ b/app/code/Magento/Sales/Model/Order/Payment/Transaction/Repository.php
@@ -18,9 +18,9 @@ use Magento\Sales\Api\TransactionRepositoryInterface;
 use Magento\Sales\Model\EntityStorage;
 use Magento\Sales\Model\EntityStorageFactory;
 use Magento\Sales\Model\Order\Payment;
-use Magento\Sales\Model\Resource\Metadata;
+use Magento\Sales\Model\ResourceModel\Metadata;
 use Magento\Sales\Api\Data\TransactionSearchResultInterfaceFactory as SearchResultFactory;
-use Magento\Sales\Model\Resource\Order\Payment\Transaction as TransactionResource;
+use Magento\Sales\Model\ResourceModel\Order\Payment\Transaction as TransactionResource;
 
 /**
  * Repository class for \Magento\Sales\Model\Order\Payment\Transaction
diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Invoice.php b/app/code/Magento/Sales/Model/Order/Pdf/Invoice.php
index 5482bc01322a50480db05e6b78853193c2cbdbe1..d0830bbbe3483fb8d3e7dea81a8d42fbf3883361 100644
--- a/app/code/Magento/Sales/Model/Order/Pdf/Invoice.php
+++ b/app/code/Magento/Sales/Model/Order/Pdf/Invoice.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sales\Model\Order\Pdf;
 
-use Magento\Sales\Model\Resource\Order\Invoice\Collection;
+use Magento\Sales\Model\ResourceModel\Order\Invoice\Collection;
 
 /**
  * Sales Order Invoice PDF model
diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php
index 763c070e08c70f76185d746f53a81f32b554c93a..94160249deb1806a5f05ccd726ccceb4cfd79247 100644
--- a/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php
+++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/AbstractItems.php
@@ -71,7 +71,7 @@ abstract class AbstractItems extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Tax\Helper\Data $taxData
      * @param \Magento\Framework\Filesystem $filesystem ,
      * @param \Magento\Framework\Filter\FilterManager $filterManager
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -81,7 +81,7 @@ abstract class AbstractItems extends \Magento\Framework\Model\AbstractModel
         \Magento\Tax\Helper\Data $taxData,
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php
index 44b76bfbc7323f1e1de219d4c0b927b7706d3ada..de420f1312b5b9a6faf4491f288c51ee3d91abaa 100644
--- a/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php
+++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/Creditmemo/DefaultCreditmemo.php
@@ -24,7 +24,7 @@ class DefaultCreditmemo extends \Magento\Sales\Model\Order\Pdf\Items\AbstractIte
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -35,7 +35,7 @@ class DefaultCreditmemo extends \Magento\Sales\Model\Order\Pdf\Items\AbstractIte
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php
index ac7e46769e51fba42251981b8dc19736c54c624e..5f8b56f9912518881f84e73f0daf576e0f7cec9b 100644
--- a/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php
+++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/Invoice/DefaultInvoice.php
@@ -24,7 +24,7 @@ class DefaultInvoice extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -35,7 +35,7 @@ class DefaultInvoice extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php b/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php
index b42f9321efae5c7d7b91aae395ab0297e5e99cf8..0850ca5944a6ac872ea36cbd423bdfd1475d607e 100644
--- a/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php
+++ b/app/code/Magento/Sales/Model/Order/Pdf/Items/Shipment/DefaultShipment.php
@@ -24,7 +24,7 @@ class DefaultShipment extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\Filter\FilterManager $filterManager
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -35,7 +35,7 @@ class DefaultShipment extends \Magento\Sales\Model\Order\Pdf\Items\AbstractItems
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\Filter\FilterManager $filterManager,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Sales/Model/Order/Pdf/Total/DefaultTotal.php b/app/code/Magento/Sales/Model/Order/Pdf/Total/DefaultTotal.php
index c040c11fca964d6891516cc4ae010e6e1461a3e9..5eccd4928688c1165578041018525d2b320c653d 100644
--- a/app/code/Magento/Sales/Model/Order/Pdf/Total/DefaultTotal.php
+++ b/app/code/Magento/Sales/Model/Order/Pdf/Total/DefaultTotal.php
@@ -26,7 +26,7 @@ class DefaultTotal extends \Magento\Framework\DataObject
     protected $_taxCalculation;
 
     /**
-     * @var \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory
+     * @var \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory
      */
     protected $_taxOrdersFactory;
 
@@ -35,13 +35,13 @@ class DefaultTotal extends \Magento\Framework\DataObject
      *
      * @param \Magento\Tax\Helper\Data $taxHelper
      * @param \Magento\Tax\Model\Calculation $taxCalculation
-     * @param \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory
+     * @param \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory $ordersFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Tax\Helper\Data $taxHelper,
         \Magento\Tax\Model\Calculation $taxCalculation,
-        \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory,
+        \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory $ordersFactory,
         array $data = []
     ) {
         $this->_taxHelper = $taxHelper;
@@ -106,7 +106,7 @@ class DefaultTotal extends \Magento\Framework\DataObject
                 $tax['font_size'] = $fontSize;
             }
         } else {
-            /** @var $orders \Magento\Tax\Model\Resource\Sales\Order\Tax\Collection */
+            /** @var $orders \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\Collection */
             $orders = $this->_taxOrdersFactory->create();
             $rates = $orders->loadByOrder($this->getOrder())->toArray();
             $fullInfo = $this->_taxCalculation->reproduceProcess($rates['items']);
diff --git a/app/code/Magento/Sales/Model/Order/Shipment.php b/app/code/Magento/Sales/Model/Order/Shipment.php
index 44adc392212d1e281281c03b3978f333e5df97fc..f99977fdcbfc9b1c72bbd3009f1c88ab1d47f188 100644
--- a/app/code/Magento/Sales/Model/Order/Shipment.php
+++ b/app/code/Magento/Sales/Model/Order/Shipment.php
@@ -13,8 +13,8 @@ use Magento\Sales\Model\EntityInterface;
 /**
  * Sales order shipment model
  *
- * @method \Magento\Sales\Model\Resource\Order\Shipment _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Shipment getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Shipment _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Shipment getResource()
  * @method \Magento\Sales\Model\Order\Invoice setSendEmail(bool $value)
  * @method \Magento\Sales\Model\Order\Invoice setCustomerNote(string $value)
  * @method string getCustomerNote()
@@ -69,12 +69,12 @@ class Shipment extends AbstractModel implements EntityInterface, ShipmentInterfa
     protected $_eventObject = 'shipment';
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Shipment\Item\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Item\CollectionFactory
      */
     protected $_shipmentItemCollectionFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Shipment\Track\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory
      */
     protected $_trackCollectionFactory;
 
@@ -84,7 +84,7 @@ class Shipment extends AbstractModel implements EntityInterface, ShipmentInterfa
     protected $_commentFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Shipment\Comment\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\CollectionFactory
      */
     protected $_commentCollectionFactory;
 
@@ -98,12 +98,12 @@ class Shipment extends AbstractModel implements EntityInterface, ShipmentInterfa
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Sales\Model\Resource\Order\Shipment\Item\CollectionFactory $shipmentItemCollectionFactory
-     * @param \Magento\Sales\Model\Resource\Order\Shipment\Track\CollectionFactory $trackCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\Item\CollectionFactory $shipmentItemCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory $trackCollectionFactory
      * @param Shipment\CommentFactory $commentFactory
-     * @param \Magento\Sales\Model\Resource\Order\Shipment\Comment\CollectionFactory $commentCollectionFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\CollectionFactory $commentCollectionFactory
      * @param \Magento\Sales\Api\OrderRepositoryInterface $orderRepository
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -113,12 +113,12 @@ class Shipment extends AbstractModel implements EntityInterface, ShipmentInterfa
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
-        \Magento\Sales\Model\Resource\Order\Shipment\Item\CollectionFactory $shipmentItemCollectionFactory,
-        \Magento\Sales\Model\Resource\Order\Shipment\Track\CollectionFactory $trackCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Shipment\Item\CollectionFactory $shipmentItemCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory $trackCollectionFactory,
         \Magento\Sales\Model\Order\Shipment\CommentFactory $commentFactory,
-        \Magento\Sales\Model\Resource\Order\Shipment\Comment\CollectionFactory $commentCollectionFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\CollectionFactory $commentCollectionFactory,
         \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -145,7 +145,7 @@ class Shipment extends AbstractModel implements EntityInterface, ShipmentInterfa
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Shipment');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Shipment');
     }
 
     /**
@@ -329,7 +329,7 @@ class Shipment extends AbstractModel implements EntityInterface, ShipmentInterfa
     /**
      * Retrieve tracks collection.
      *
-     * @return \Magento\Sales\Model\Resource\Order\Shipment\Track\Collection
+     * @return \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\Collection
      */
     public function getTracksCollection()
     {
@@ -433,7 +433,7 @@ class Shipment extends AbstractModel implements EntityInterface, ShipmentInterfa
      * Retrieve comments collection.
      *
      * @param bool $reload
-     * @return \Magento\Sales\Model\Resource\Order\Shipment\Comment\Collection
+     * @return \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\Collection
      */
     public function getCommentsCollection($reload = false)
     {
diff --git a/app/code/Magento/Sales/Model/Order/Shipment/Comment.php b/app/code/Magento/Sales/Model/Order/Shipment/Comment.php
index 10b1d2a32acad79184867fd33973230e1f9af194..f2506ade73b6bd96e180c81ce5274af3a5a96447 100644
--- a/app/code/Magento/Sales/Model/Order/Shipment/Comment.php
+++ b/app/code/Magento/Sales/Model/Order/Shipment/Comment.php
@@ -10,8 +10,8 @@ use Magento\Sales\Api\Data\ShipmentCommentInterface;
 use Magento\Sales\Model\AbstractModel;
 
 /**
- * @method \Magento\Sales\Model\Resource\Order\Shipment\Comment _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Shipment\Comment getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment getResource()
  */
 class Comment extends AbstractModel implements ShipmentCommentInterface
 {
@@ -33,7 +33,7 @@ class Comment extends AbstractModel implements ShipmentCommentInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -44,7 +44,7 @@ class Comment extends AbstractModel implements ShipmentCommentInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -67,7 +67,7 @@ class Comment extends AbstractModel implements ShipmentCommentInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Shipment\Comment');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Shipment\Comment');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Order/Shipment/Item.php b/app/code/Magento/Sales/Model/Order/Shipment/Item.php
index 381f7e5907bb5d4282a6b66ae2b35565bec3072f..8da7b10f87bf2e457e3236691528babfd843ba86 100644
--- a/app/code/Magento/Sales/Model/Order/Shipment/Item.php
+++ b/app/code/Magento/Sales/Model/Order/Shipment/Item.php
@@ -13,8 +13,8 @@ use Magento\Sales\Api\Data\ShipmentItemInterface;
 use Magento\Sales\Model\AbstractModel;
 
 /**
- * @method \Magento\Sales\Model\Resource\Order\Shipment\Item _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Shipment\Item getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Shipment\Item _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Shipment\Item getResource()
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class Item extends AbstractModel implements ShipmentItemInterface
@@ -50,7 +50,7 @@ class Item extends AbstractModel implements ShipmentItemInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Sales\Model\Order\ItemFactory $orderItemFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -60,7 +60,7 @@ class Item extends AbstractModel implements ShipmentItemInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Sales\Model\Order\ItemFactory $orderItemFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -83,7 +83,7 @@ class Item extends AbstractModel implements ShipmentItemInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Shipment\Item');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Shipment\Item');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Order/Shipment/Track.php b/app/code/Magento/Sales/Model/Order/Shipment/Track.php
index 0b0116171e3cddc3bb7f7724bcf93fc7a49fa29c..52b48663a797c01719f2107f4c36551c9f207175 100644
--- a/app/code/Magento/Sales/Model/Order/Shipment/Track.php
+++ b/app/code/Magento/Sales/Model/Order/Shipment/Track.php
@@ -10,8 +10,8 @@ use Magento\Sales\Api\Data\ShipmentTrackInterface;
 use Magento\Sales\Model\AbstractModel;
 
 /**
- * @method \Magento\Sales\Model\Resource\Order\Shipment\Track _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Shipment\Track getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Shipment\Track _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Shipment\Track getResource()
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -55,7 +55,7 @@ class Track extends AbstractModel implements ShipmentTrackInterface
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -67,7 +67,7 @@ class Track extends AbstractModel implements ShipmentTrackInterface
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -91,7 +91,7 @@ class Track extends AbstractModel implements ShipmentTrackInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Shipment\Track');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Shipment\Track');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Order/ShipmentRepository.php b/app/code/Magento/Sales/Model/Order/ShipmentRepository.php
index c4240377da7f97ac8eaf529619f77f641f46bdc7..c44fa79ae56c7525b36bd8fa9a2f15ffa0206946 100644
--- a/app/code/Magento/Sales/Model/Order/ShipmentRepository.php
+++ b/app/code/Magento/Sales/Model/Order/ShipmentRepository.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sales\Model\Order;
 
-use Magento\Sales\Model\Resource\Metadata;
+use Magento\Sales\Model\ResourceModel\Metadata;
 use Magento\Sales\Api\Data\ShipmentSearchResultInterfaceFactory as SearchResultFactory;
 use Magento\Framework\Exception\CouldNotDeleteException;
 use Magento\Framework\Exception\CouldNotSaveException;
diff --git a/app/code/Magento/Sales/Model/Order/Status.php b/app/code/Magento/Sales/Model/Order/Status.php
index 278697d93737346400fe0b6754e370f9a0697fba..115ed4183c98516dc2547a843e5f3ed97c5d899b 100644
--- a/app/code/Magento/Sales/Model/Order/Status.php
+++ b/app/code/Magento/Sales/Model/Order/Status.php
@@ -26,7 +26,7 @@ class Status extends \Magento\Sales\Model\AbstractModel
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -36,7 +36,7 @@ class Status extends \Magento\Sales\Model\AbstractModel
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -58,7 +58,7 @@ class Status extends \Magento\Sales\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Status');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Status');
     }
 
     /**
@@ -72,7 +72,7 @@ class Status extends \Magento\Sales\Model\AbstractModel
      */
     public function assignState($state, $isDefault = false, $visibleOnFront = false)
     {
-        /** @var \Magento\Sales\Model\Resource\Order\Status $resource */
+        /** @var \Magento\Sales\Model\ResourceModel\Order\Status $resource */
         $resource = $this->_getResource();
         $resource->beginTransaction();
         try {
diff --git a/app/code/Magento/Sales/Model/Order/Status/History.php b/app/code/Magento/Sales/Model/Order/Status/History.php
index 489ba26f1a70e32cc14c503bd0099f255e7984fd..b488580a2991da49eb3c799b68ebbc5852a9ff78 100644
--- a/app/code/Magento/Sales/Model/Order/Status/History.php
+++ b/app/code/Magento/Sales/Model/Order/Status/History.php
@@ -12,8 +12,8 @@ use Magento\Sales\Model\AbstractModel;
 /**
  * Order status history comments
  *
- * @method \Magento\Sales\Model\Resource\Order\Status\History _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Status\History getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Status\History _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Status\History getResource()
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class History extends AbstractModel implements OrderStatusHistoryInterface
@@ -48,7 +48,7 @@ class History extends AbstractModel implements OrderStatusHistoryInterface
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -59,7 +59,7 @@ class History extends AbstractModel implements OrderStatusHistoryInterface
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -82,7 +82,7 @@ class History extends AbstractModel implements OrderStatusHistoryInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Status\History');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Status\History');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Order/Tax.php b/app/code/Magento/Sales/Model/Order/Tax.php
index aac639ebb8200c3a34911296156eec8be0e3ce6a..7e64ba74f7f6c84804c404a3d9085e3297259975 100644
--- a/app/code/Magento/Sales/Model/Order/Tax.php
+++ b/app/code/Magento/Sales/Model/Order/Tax.php
@@ -7,8 +7,8 @@ namespace Magento\Sales\Model\Order;
 
 /**
  *
- * @method \Magento\Sales\Model\Resource\Order\Tax _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Tax getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Tax _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Tax getResource()
  * @method int getOrderId()
  * @method \Magento\Sales\Model\Order\Tax setOrderId(int $value)
  * @method string getCode()
@@ -39,6 +39,6 @@ class Tax extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Tax');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Tax');
     }
 }
diff --git a/app/code/Magento/Sales/Model/Order/Tax/Item.php b/app/code/Magento/Sales/Model/Order/Tax/Item.php
index 7d9e70931d6b56ea535bac8ba7c6d0c51777df45..ff14fd9a56de19e6f94342758316f9601386a431 100644
--- a/app/code/Magento/Sales/Model/Order/Tax/Item.php
+++ b/app/code/Magento/Sales/Model/Order/Tax/Item.php
@@ -25,7 +25,7 @@ class Item extends \Magento\Framework\Model\AbstractExtensibleModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Resource\Order\Tax\Item');
+        $this->_init('Magento\Sales\Model\ResourceModel\Order\Tax\Item');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/OrderNotifier.php b/app/code/Magento/Sales/Model/OrderNotifier.php
index 8ed251705b4a14f5f3a967e7cc17989253eca309..819732f2ed9e0e98e166c07e8263410bf7540a0b 100644
--- a/app/code/Magento/Sales/Model/OrderNotifier.php
+++ b/app/code/Magento/Sales/Model/OrderNotifier.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Model;
 
 use Psr\Log\LoggerInterface as Logger;
 use Magento\Sales\Model\Order\Email\Sender\OrderSender;
-use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory;
 
 /**
  * Class OrderNotifier
diff --git a/app/code/Magento/Sales/Model/OrderRepository.php b/app/code/Magento/Sales/Model/OrderRepository.php
index e7993f850fe53c80a84e05235d3a92542dd3d280..976a03486a4f1ead05696c96dfc28ba9652f2d68 100644
--- a/app/code/Magento/Sales/Model/OrderRepository.php
+++ b/app/code/Magento/Sales/Model/OrderRepository.php
@@ -5,8 +5,8 @@
  */
 namespace Magento\Sales\Model;
 
-use \Magento\Sales\Model\Resource\Order as Resource;
-use \Magento\Sales\Model\Resource\Metadata;
+use \Magento\Sales\Model\ResourceModel\Order as Resource;
+use \Magento\Sales\Model\ResourceModel\Metadata;
 use Magento\Sales\Api\Data\OrderSearchResultInterfaceFactory as SearchResultFactory;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Framework\Exception\InputException;
diff --git a/app/code/Magento/Sales/Model/Resource/AbstractGrid.php b/app/code/Magento/Sales/Model/ResourceModel/AbstractGrid.php
similarity index 93%
rename from app/code/Magento/Sales/Model/Resource/AbstractGrid.php
rename to app/code/Magento/Sales/Model/ResourceModel/AbstractGrid.php
index 153d6567ad26ad7dedd6fc547f6f3ec1dfbf01cf..71cb4575a94fdfa8fc2e8ed88ab6aa338200bb58 100644
--- a/app/code/Magento/Sales/Model/Resource/AbstractGrid.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/AbstractGrid.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource;
+namespace Magento\Sales\Model\ResourceModel;
 
-use Magento\Framework\App\Resource as AppResource;
+use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\Framework\DB\Adapter\AdapterInterface;
-use Magento\Framework\Model\Resource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 
 /**
  * Class AbstractGrid
diff --git a/app/code/Magento/Sales/Model/Resource/Attribute.php b/app/code/Magento/Sales/Model/ResourceModel/Attribute.php
similarity index 93%
rename from app/code/Magento/Sales/Model/Resource/Attribute.php
rename to app/code/Magento/Sales/Model/ResourceModel/Attribute.php
index 9a809467cd0a2f79c5d62018f15a2b3b9ea80f6c..e6d53efe61b831e893c9eaef987a436bb051e235 100644
--- a/app/code/Magento/Sales/Model/Resource/Attribute.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Attribute.php
@@ -4,17 +4,17 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Model\Resource;
+namespace Magento\Sales\Model\ResourceModel;
 
 use Magento\Eav\Model\Entity\Attribute\AbstractAttribute;
-use Magento\Framework\App\Resource as AppResource;
+use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\Framework\Event\ManagerInterface as EventManager;
 use Magento\Sales\Model\AbstractModel;
 
 class Attribute
 {
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $resource;
 
@@ -55,7 +55,7 @@ class Attribute
      *
      * @param AbstractModel $object
      * @param string $attribute
-     * @return \Magento\Sales\Model\Resource\Attribute
+     * @return \Magento\Sales\Model\ResourceModel\Attribute
      */
     protected function _beforeSaveAttribute(AbstractModel $object, $attribute)
     {
@@ -117,7 +117,7 @@ class Attribute
      *
      * @param AbstractModel $object
      * @param string $attribute
-     * @return \Magento\Sales\Model\Resource\Attribute
+     * @return \Magento\Sales\Model\ResourceModel\Attribute
      */
     protected function _afterSaveAttribute(AbstractModel $object, $attribute)
     {
diff --git a/app/code/Magento/Sales/Model/Resource/Collection/AbstractCollection.php b/app/code/Magento/Sales/Model/ResourceModel/Collection/AbstractCollection.php
similarity index 98%
rename from app/code/Magento/Sales/Model/Resource/Collection/AbstractCollection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Collection/AbstractCollection.php
index c65755f58de46a3ec2337e8ad1f18b89cfc065f0..88ea6d9964cd953eac7dd0accab8714b9c5e6bbc 100644
--- a/app/code/Magento/Sales/Model/Resource/Collection/AbstractCollection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Collection/AbstractCollection.php
@@ -3,13 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Collection;
+namespace Magento\Sales\Model\ResourceModel\Collection;
 
 /**
  * Flat sales abstract collection
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-abstract class AbstractCollection extends \Magento\Framework\Model\Resource\Db\VersionControl\Collection
+abstract class AbstractCollection extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\Collection
 {
     /**
      * @var \Magento\Framework\DB\Select
diff --git a/app/code/Magento/Sales/Model/Resource/EntityAbstract.php b/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php
similarity index 91%
rename from app/code/Magento/Sales/Model/Resource/EntityAbstract.php
rename to app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php
index 4c1e378842d120895a6ef796d86f7cbba5d9a388..ef4b103821d06366f4ec293466c5eb5d076975c5 100644
--- a/app/code/Magento/Sales/Model/Resource/EntityAbstract.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/EntityAbstract.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource;
+namespace Magento\Sales\Model\ResourceModel;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\AbstractDb;
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite;
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\SalesSequence\Model\Manager;
 use Magento\Sales\Model\EntityInterface;
 
@@ -45,7 +45,7 @@ abstract class EntityAbstract extends AbstractDb
     protected $_eavEntityTypeFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Attribute
+     * @var \Magento\Sales\Model\ResourceModel\Attribute
      */
     protected $attribute;
 
@@ -55,7 +55,7 @@ abstract class EntityAbstract extends AbstractDb
     protected $sequenceManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param Snapshot $entitySnapshot
      * @param RelationComposite $entityRelationComposite
      * @param Attribute $attribute
@@ -63,10 +63,10 @@ abstract class EntityAbstract extends AbstractDb
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
         RelationComposite $entityRelationComposite,
-        \Magento\Sales\Model\Resource\Attribute $attribute,
+        \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         Manager $sequenceManager,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Sales/Model/Resource/Grid.php b/app/code/Magento/Sales/Model/ResourceModel/Grid.php
similarity index 96%
rename from app/code/Magento/Sales/Model/Resource/Grid.php
rename to app/code/Magento/Sales/Model/ResourceModel/Grid.php
index 5c0ff840074359ea4d9f37d6cd16ca7e29445fe7..b30166aeb3adbb4a5b8c335bfecfd0ba5a303ffe 100644
--- a/app/code/Magento/Sales/Model/Resource/Grid.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Grid.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource;
+namespace Magento\Sales\Model\ResourceModel;
 
 use Magento\Framework\DB\Adapter\AdapterInterface;
-use Magento\Sales\Model\Resource\AbstractGrid;
-use Magento\Framework\Model\Resource\Db\Context;
+use Magento\Sales\Model\ResourceModel\AbstractGrid;
+use Magento\Framework\Model\ResourceModel\Db\Context;
 
 /**
  * Class Grid
diff --git a/app/code/Magento/Sales/Model/Resource/Grid/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Grid/Collection.php
similarity index 89%
rename from app/code/Magento/Sales/Model/Resource/Grid/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Grid/Collection.php
index 041a27003ee90eb3c64040cee83c3cbf421f2c3f..077c6e35b02161ff99c3b59c92ff51582d750d0f 100644
--- a/app/code/Magento/Sales/Model/Resource/Grid/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Grid/Collection.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Grid;
+namespace Magento\Sales\Model\ResourceModel\Grid;
 
 use Magento\Framework\Api\Search\SearchResultInterface;
 use Magento\Framework\Search\AggregationInterface;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 /**
  * Class Collection
@@ -27,12 +27,12 @@ class Collection extends AbstractCollection implements SearchResultInterface
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param null|\Zend_Db_Adapter_Abstract $mainTable
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $eventPrefix
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $eventPrefix
      * @param string $eventObject
      * @param string $resourceModel
      * @param string $model
      * @param string|null $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -45,9 +45,9 @@ class Collection extends AbstractCollection implements SearchResultInterface
         $eventPrefix,
         $eventObject,
         $resourceModel,
-        $model = 'Magento\Sales\Model\Resource\Grid\Document',
+        $model = 'Magento\Sales\Model\ResourceModel\Grid\Document',
         $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_eventPrefix = $eventPrefix;
         $this->_eventObject = $eventObject;
diff --git a/app/code/Magento/Sales/Model/Resource/GridInterface.php b/app/code/Magento/Sales/Model/ResourceModel/GridInterface.php
similarity index 95%
rename from app/code/Magento/Sales/Model/Resource/GridInterface.php
rename to app/code/Magento/Sales/Model/ResourceModel/GridInterface.php
index 138d7726f41a42313a40b40d8f78d64b25099fb4..75ceaf3386b3c378efafe890649ac3af2a867034 100644
--- a/app/code/Magento/Sales/Model/Resource/GridInterface.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/GridInterface.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Model\Resource;
+namespace Magento\Sales\Model\ResourceModel;
 
 /**
  * Interface GridInterface
diff --git a/app/code/Magento/Sales/Model/Resource/GridPool.php b/app/code/Magento/Sales/Model/ResourceModel/GridPool.php
similarity index 86%
rename from app/code/Magento/Sales/Model/Resource/GridPool.php
rename to app/code/Magento/Sales/Model/ResourceModel/GridPool.php
index 3c826c6abf2027a4be2b78d4adf997b5b2f784e7..14959752e75703434d97ba59147f7fa81c47c48b 100644
--- a/app/code/Magento/Sales/Model/Resource/GridPool.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/GridPool.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Model\Resource;
+namespace Magento\Sales\Model\ResourceModel;
 
 /**
  * Class GridPool
@@ -12,7 +12,7 @@ namespace Magento\Sales\Model\Resource;
 class GridPool
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Grid[]
+     * @var \Magento\Sales\Model\ResourceModel\Grid[]
      */
     protected $grids;
 
diff --git a/app/code/Magento/Sales/Model/Resource/Helper.php b/app/code/Magento/Sales/Model/ResourceModel/Helper.php
similarity index 76%
rename from app/code/Magento/Sales/Model/Resource/Helper.php
rename to app/code/Magento/Sales/Model/ResourceModel/Helper.php
index 2f7ef13ea4de1f9d4fb7a8ec26ad5b51e3561078..84da9afd77eccd1e665be05b687bc87001ed639a 100644
--- a/app/code/Magento/Sales/Model/Resource/Helper.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Helper.php
@@ -3,7 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource;
+namespace Magento\Sales\Model\ResourceModel;
+
+use Magento\Sales\Model\ResourceModel\Report\Bestsellers as BestsellersReport;
 
 /**
  * Sales Mysql resource helper model
@@ -11,18 +13,18 @@ namespace Magento\Sales\Model\Resource;
 class Helper extends \Magento\Framework\DB\Helper implements HelperInterface
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Helper
+     * @var \Magento\Reports\Model\ResourceModel\Helper
      */
     protected $_reportsResourceHelper;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
-     * @param \Magento\Reports\Model\Resource\Helper $reportsResourceHelper
+     * @param \Magento\Framework\App\ResourceConnection $resource
+     * @param \Magento\Reports\Model\ResourceModel\Helper $reportsResourceHelper
      * @param string $modulePrefix
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
-        \Magento\Reports\Model\Resource\Helper $reportsResourceHelper,
+        \Magento\Framework\App\ResourceConnection $resource,
+        \Magento\Reports\Model\ResourceModel\Helper $reportsResourceHelper,
         $modulePrefix = 'sales'
     ) {
         parent::__construct($resource, $modulePrefix);
@@ -32,7 +34,7 @@ class Helper extends \Magento\Framework\DB\Helper implements HelperInterface
     /**
      * Update rating position
      *
-     * @param string $aggregation One of \Magento\Sales\Model\Resource\Report\Bestsellers::AGGREGATION_XXX constants
+     * @param string $aggregation One of BestsellersReport::AGGREGATION_XXX constants
      * @param array $aggregationAliases
      * @param string $mainTable
      * @param string $aggregationTable
diff --git a/app/code/Magento/Sales/Model/Resource/HelperInterface.php b/app/code/Magento/Sales/Model/ResourceModel/HelperInterface.php
similarity index 73%
rename from app/code/Magento/Sales/Model/Resource/HelperInterface.php
rename to app/code/Magento/Sales/Model/ResourceModel/HelperInterface.php
index 47a7e1b3eac0d525d214352928cf3e6c5afeca7a..6e1d3e08587516da555f56fb2bec34f1158b07df 100644
--- a/app/code/Magento/Sales/Model/Resource/HelperInterface.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/HelperInterface.php
@@ -3,7 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource;
+namespace Magento\Sales\Model\ResourceModel;
+
+use Magento\Sales\Model\ResourceModel\Report\Bestsellers as BestsellersReport;
 
 /**
  * Sales resource helper interface
@@ -15,7 +17,7 @@ interface HelperInterface
     /**
      * Update rating position
      *
-     * @param string $aggregation One of \Magento\Sales\Model\Resource\Report\Bestsellers::AGGREGATION_XXX constants
+     * @param string $aggregation One of BestsellersReport::AGGREGATION_XXX constants
      * @param array $aggregationAliases
      * @param string $mainTable
      * @param string $aggregationTable
diff --git a/app/code/Magento/Sales/Model/Resource/Metadata.php b/app/code/Magento/Sales/Model/ResourceModel/Metadata.php
similarity index 91%
rename from app/code/Magento/Sales/Model/Resource/Metadata.php
rename to app/code/Magento/Sales/Model/ResourceModel/Metadata.php
index 0ae10810ffa5dfb305974e40abf2953e9974a98c..ec35e262e692cc1110d9a9f0ddf7dc7197e1e183 100644
--- a/app/code/Magento/Sales/Model/Resource/Metadata.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Metadata.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource;
+namespace Magento\Sales\Model\ResourceModel;
 
 /**
  * Class Metadata
@@ -41,7 +41,7 @@ class Metadata
     }
 
     /**
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getMapper()
     {
diff --git a/app/code/Magento/Sales/Model/Resource/Order.php b/app/code/Magento/Sales/Model/ResourceModel/Order.php
similarity index 90%
rename from app/code/Magento/Sales/Model/Resource/Order.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order.php
index f0e61cd7a8be731785b48b215fe55cdd28219718..d6e5a032302632b5db90fb1e476e6399434ed7bd 100644
--- a/app/code/Magento/Sales/Model/Resource/Order.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order.php
@@ -3,16 +3,16 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource;
+namespace Magento\Sales\Model\ResourceModel;
 
-use Magento\Framework\App\Resource as AppResource;
+use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\Framework\Math\Random;
 use Magento\SalesSequence\Model\Manager;
-use Magento\Sales\Model\Resource\EntityAbstract as SalesResource;
-use Magento\Sales\Model\Resource\Order\Handler\State as StateHandler;
+use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
+use Magento\Sales\Model\ResourceModel\Order\Handler\State as StateHandler;
 use Magento\Sales\Model\Spi\OrderResourceInterface;
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
 
 /**
  * Flat sales order resource
@@ -52,7 +52,7 @@ class Order extends SalesResource implements OrderResourceInterface
     }
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param Attribute $attribute
      * @param Manager $sequenceManager
      * @param Snapshot $entitySnapshot
@@ -61,7 +61,7 @@ class Order extends SalesResource implements OrderResourceInterface
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
         RelationComposite $entityRelationComposite,
         Attribute $attribute,
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Address.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php
similarity index 79%
rename from app/code/Magento/Sales/Model/Resource/Order/Address.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Address.php
index 6e5f2f7bb6c77fb698d06c44e8f86dd6e2a60cdb..6df065f7ee30372b130c002875fb0518d266a8ca 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Address.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Address.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order;
+namespace Magento\Sales\Model\ResourceModel\Order;
 
-use Magento\Sales\Model\Resource\EntityAbstract as SalesResource;
+use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
 use Magento\Sales\Model\Spi\OrderAddressResourceInterface;
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 
 /**
  * Flat sales order address resource
@@ -27,28 +27,28 @@ class Address extends SalesResource implements OrderAddressResourceInterface
     protected $_validator;
 
     /**
-     * @var \Magento\Sales\Model\Resource\GridPool
+     * @var \Magento\Sales\Model\ResourceModel\GridPool
      */
     protected $gridPool;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
-     * @param \Magento\Sales\Model\Resource\Attribute $attribute
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
+     * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param \Magento\Sales\Model\Order\Address\Validator $validator
-     * @param \Magento\Sales\Model\Resource\GridPool $gridPool
+     * @param \Magento\Sales\Model\ResourceModel\GridPool $gridPool
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
-        \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite,
-        \Magento\Sales\Model\Resource\Attribute $attribute,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         \Magento\SalesSequence\Model\Manager $sequenceManager,
         \Magento\Sales\Model\Order\Address\Validator $validator,
-        \Magento\Sales\Model\Resource\GridPool $gridPool,
+        \Magento\Sales\Model\ResourceModel\GridPool $gridPool,
         $connectionName = null
     ) {
         $this->_validator = $validator;
@@ -127,7 +127,7 @@ class Address extends SalesResource implements OrderAddressResourceInterface
      * Update related grid table after object save
      *
      * @param \Magento\Framework\Model\AbstractModel|\Magento\Framework\DataObject $object
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _afterSave(\Magento\Framework\Model\AbstractModel $object)
     {
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Address/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Address/Collection.php
similarity index 82%
rename from app/code/Magento/Sales/Model/Resource/Order/Address/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Address/Collection.php
index 14002c87e990c0090e06931297f9d17545b19f0e..1e424e5697310de4e149c46f1ca3db6cd5346ab0 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Address/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Address/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Address;
+namespace Magento\Sales\Model\ResourceModel\Order\Address;
 
 /**
  * Flat sales order payment collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Sales\Model\Resource\Order\Collection\AbstractCollection
+class Collection extends \Magento\Sales\Model\ResourceModel\Order\Collection\AbstractCollection
 {
     /**
      * Event prefix
@@ -33,7 +33,7 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection\Abstract
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order\Address', 'Magento\Sales\Model\Resource\Order\Address');
+        $this->_init('Magento\Sales\Model\Order\Address', 'Magento\Sales\Model\ResourceModel\Order\Address');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Attribute/Backend/Billing.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Attribute/Backend/Billing.php
similarity index 94%
rename from app/code/Magento/Sales/Model/Resource/Order/Attribute/Backend/Billing.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Attribute/Backend/Billing.php
index ccc51081db59cec397494160176bc87f31550635..eb5626742878338b53a9dd08d8e7c791e530878e 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Attribute/Backend/Billing.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Attribute/Backend/Billing.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Attribute\Backend;
+namespace Magento\Sales\Model\ResourceModel\Order\Attribute\Backend;
 
 /**
  * Order billing address backend
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Attribute/Backend/Child.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Attribute/Backend/Child.php
similarity index 90%
rename from app/code/Magento/Sales/Model/Resource/Order/Attribute/Backend/Child.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Attribute/Backend/Child.php
index ee1920d05ea42eee08536c80d25e5ae20a70aa60..a6cc8d1cbe0c0549f2bdda51e48376e9e0b01c21 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Attribute/Backend/Child.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Attribute/Backend/Child.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Attribute\Backend;
+namespace Magento\Sales\Model\ResourceModel\Order\Attribute\Backend;
 
 /**
  * Invoice backend model for child attribute
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Attribute/Backend/Shipping.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Attribute/Backend/Shipping.php
similarity index 94%
rename from app/code/Magento/Sales/Model/Resource/Order/Attribute/Backend/Shipping.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Attribute/Backend/Shipping.php
index 9075f40c2da362d6737ed84e4c89d8a78ddead0e..ed648a1b5682fceeb672736d1ce4d8ed209f10b8 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Attribute/Backend/Shipping.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Attribute/Backend/Shipping.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Attribute\Backend;
+namespace Magento\Sales\Model\ResourceModel\Order\Attribute\Backend;
 
 /**
  * Order shipping address backend
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Collection.php
similarity index 93%
rename from app/code/Magento/Sales/Model/Resource/Order/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Collection.php
index be70c20b2499282ed641d7c95d7941e4314c646a..f41f0821d228dd44456ba8935a786d5ee4187584 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Collection.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order;
+namespace Magento\Sales\Model\ResourceModel\Order;
 
 use Magento\Sales\Api\Data\OrderSearchResultInterface;
-use Magento\Sales\Model\Resource\Collection\AbstractCollection;
+use Magento\Sales\Model\ResourceModel\Collection\AbstractCollection;
 
 /**
  * Flat sales order collection
@@ -44,20 +44,20 @@ class Collection extends AbstractCollection implements OrderSearchResultInterfac
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Framework\DB\Helper $coreResourceHelper
      * @param string|null $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DB\Helper $coreResourceHelper,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
@@ -78,7 +78,7 @@ class Collection extends AbstractCollection implements OrderSearchResultInterfac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order', 'Magento\Sales\Model\Resource\Order');
+        $this->_init('Magento\Sales\Model\Order', 'Magento\Sales\Model\ResourceModel\Order');
         $this->addFilterToMap(
             'entity_id',
             'main_table.entity_id'
@@ -200,7 +200,7 @@ class Collection extends AbstractCollection implements OrderSearchResultInterfac
     /**
      * Add addresses information to select
      *
-     * @return \Magento\Sales\Model\Resource\Collection\AbstractCollection
+     * @return \Magento\Sales\Model\ResourceModel\Collection\AbstractCollection
      */
     public function addAddressFields()
     {
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Collection/AbstractCollection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Collection/AbstractCollection.php
similarity index 94%
rename from app/code/Magento/Sales/Model/Resource/Order/Collection/AbstractCollection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Collection/AbstractCollection.php
index 392a6600dd839da2f7512fe7a2ba6e384d74ecad..c5a510c70a293167422e0ed676e652baf1e9f6a3 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Collection/AbstractCollection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Collection/AbstractCollection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Collection;
+namespace Magento\Sales\Model\ResourceModel\Order\Collection;
 
 /**
  * Flat sales order collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-abstract class AbstractCollection extends \Magento\Sales\Model\Resource\Collection\AbstractCollection
+abstract class AbstractCollection extends \Magento\Sales\Model\ResourceModel\Collection\AbstractCollection
 {
     /**
      * Order object
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Collection/Factory.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Collection/Factory.php
similarity index 81%
rename from app/code/Magento/Sales/Model/Resource/Order/Collection/Factory.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Collection/Factory.php
index bb7121343456a4a8b56172c99e652a3ba8963911..9bf8d5ccd180b3fd0b20060ddde523a8ced06fe0 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Collection/Factory.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Collection/Factory.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Collection;
+namespace Magento\Sales\Model\ResourceModel\Order\Collection;
 
 class Factory
 {
@@ -32,7 +32,8 @@ class Factory
 
         if (!$instance instanceof AbstractCollection) {
             throw new \InvalidArgumentException(
-                $className . ' does not implement \Magento\Sales\Model\Resource\Order\Collection\AbstractCollection'
+                $className .
+                ' does not implement \Magento\Sales\Model\ResourceModel\Order\Collection\AbstractCollection'
             );
         }
         return $instance;
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Comment/Collection/AbstractCollection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Comment/Collection/AbstractCollection.php
similarity index 91%
rename from app/code/Magento/Sales/Model/Resource/Order/Comment/Collection/AbstractCollection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Comment/Collection/AbstractCollection.php
index b2cc87b584ddbe3a9a6ecb461edb1d08eb5a09b7..8846d557ab2676e94bcae4924397b0036f0eb4ac 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Comment/Collection/AbstractCollection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Comment/Collection/AbstractCollection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Comment\Collection;
+namespace Magento\Sales\Model\ResourceModel\Order\Comment\Collection;
 
 /**
  * Flat sales order abstract comments collection, used as parent for: invoice, shipment, creditmemo
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-abstract class AbstractCollection extends \Magento\Sales\Model\Resource\Collection\AbstractCollection
+abstract class AbstractCollection extends \Magento\Sales\Model\ResourceModel\Collection\AbstractCollection
 {
     /**
      * Set filter on comments by their parent item
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php
similarity index 81%
rename from app/code/Magento/Sales/Model/Resource/Order/Creditmemo.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php
index 33f984d84d7ac583ced082df3402ed86c272dba4..1efd99d666b3397f55b8ec9f04b5e88865e4f855 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo.php
@@ -3,13 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order;
+namespace Magento\Sales\Model\ResourceModel\Order;
 
-use Magento\Framework\App\Resource as AppResource;
+use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\SalesSequence\Model\Manager;
-use Magento\Sales\Model\Resource\Attribute;
-use Magento\Sales\Model\Resource\EntityAbstract as SalesResource;
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
+use Magento\Sales\Model\ResourceModel\Attribute;
+use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\CreditmemoResourceInterface;
 
 /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Attribute/Backend/Child.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Attribute/Backend/Child.php
similarity index 89%
rename from app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Attribute/Backend/Child.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Attribute/Backend/Child.php
index 6c790491ed2f4afd7ae99572913c0d87c3933f5e..14d8aef8ad20546d257f046c9cb93ae6bd7b4c71 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Attribute/Backend/Child.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Attribute/Backend/Child.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Creditmemo\Attribute\Backend;
+namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo\Attribute\Backend;
 
 /**
  * Invoice backend model for child attribute
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Collection.php
similarity index 89%
rename from app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Collection.php
index ca6a64f6ae482faa12c35d49297f272411dd9526..7c7977b12f5192d3c57698eda2fa657c5f175cf5 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Collection.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Creditmemo;
+namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo;
 
 use Magento\Sales\Api\Data\CreditmemoSearchResultInterface;
-use Magento\Sales\Model\Resource\Order\Collection\AbstractCollection;
+use Magento\Sales\Model\ResourceModel\Order\Collection\AbstractCollection;
 
 /**
  * Flat sales order creditmemo collection
@@ -50,7 +50,7 @@ class Collection extends AbstractCollection implements CreditmemoSearchResultInt
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order\Creditmemo', 'Magento\Sales\Model\Resource\Order\Creditmemo');
+        $this->_init('Magento\Sales\Model\Order\Creditmemo', 'Magento\Sales\Model\ResourceModel\Order\Creditmemo');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Comment.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment.php
similarity index 77%
rename from app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Comment.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment.php
index 8c1540705967dc8d06eb42cb440f5e894dea855f..0d8e9e04e79f90958a3f1028ca462dd0f83b0db7 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Comment.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Creditmemo;
+namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo;
 
-use Magento\Sales\Model\Resource\EntityAbstract;
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
+use Magento\Sales\Model\ResourceModel\EntityAbstract;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\CreditmemoCommentResourceInterface;
 
 /**
@@ -31,19 +31,19 @@ class Comment extends EntityAbstract implements CreditmemoCommentResourceInterfa
     protected $validator;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
-     * @param \Magento\Sales\Model\Resource\Attribute $attribute
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
+     * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param \Magento\Sales\Model\Order\Creditmemo\Comment\Validator $validator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
-        \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite,
-        \Magento\Sales\Model\Resource\Attribute $attribute,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         \Magento\SalesSequence\Model\Manager $sequenceManager,
         \Magento\Sales\Model\Order\Creditmemo\Comment\Validator $validator,
         $connectionName = null
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Comment/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment/Collection.php
similarity index 83%
rename from app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Comment/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment/Collection.php
index f50d1b2a64711b5d97c0e69a2402bbe69feb648d..126d63df1e19720024ee053602110e64d06f5541 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Comment/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Comment/Collection.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Creditmemo\Comment;
+namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment;
 
 use Magento\Sales\Api\Data\CreditmemoCommentSearchResultInterface;
-use Magento\Sales\Model\Resource\Order\Comment\Collection\AbstractCollection;
+use Magento\Sales\Model\ResourceModel\Order\Comment\Collection\AbstractCollection;
 
 /**
  * Flat sales order creditmemo comments collection
@@ -39,7 +39,7 @@ class Collection extends AbstractCollection implements CreditmemoCommentSearchRe
         parent::_construct();
         $this->_init(
             'Magento\Sales\Model\Order\Creditmemo\Comment',
-            'Magento\Sales\Model\Resource\Order\Creditmemo\Comment'
+            'Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment'
         );
     }
 
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Grid/StatusList.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Grid/StatusList.php
similarity index 92%
rename from app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Grid/StatusList.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Grid/StatusList.php
index 0b65f060875f3a00c6f9e1ee2708052cc9f17374..048b899b36e18640ca494036a12c6edebf66ca90 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Grid/StatusList.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Grid/StatusList.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Creditmemo\Grid;
+namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo\Grid;
 
 /**
  * Sales creditmemo statuses option array
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Item.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Item.php
similarity index 89%
rename from app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Item.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Item.php
index 7a8047fb5a7ea3a32d78f8e21c0efaaf3805179d..d14e69f31c4ec386173ba9e8ba9c85217101d34d 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Item.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Item.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Creditmemo;
+namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo;
 
-use Magento\Sales\Model\Resource\EntityAbstract as SalesResource;
+use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
 use Magento\Sales\Model\Spi\CreditmemoItemResourceInterface;
 
 /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Item/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Item/Collection.php
similarity index 80%
rename from app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Item/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Item/Collection.php
index a7074a58da197be49f4bfa5ec6fc42a21109cea4..d5e0162c12fb8416e1ac1e632febbf9d9de8b076 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Item/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Item/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Creditmemo\Item;
+namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item;
 
 /**
  * Flat sales order creditmemo items collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Sales\Model\Resource\Collection\AbstractCollection
+class Collection extends \Magento\Sales\Model\ResourceModel\Collection\AbstractCollection
 {
     /**
      * Event prefix
@@ -35,7 +35,7 @@ class Collection extends \Magento\Sales\Model\Resource\Collection\AbstractCollec
     {
         $this->_init(
             'Magento\Sales\Model\Order\Creditmemo\Item',
-            'Magento\Sales\Model\Resource\Order\Creditmemo\Item'
+            'Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item'
         );
     }
 
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation.php
similarity index 80%
rename from app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Relation.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation.php
index 6aabb91138517a7696271fc16063a1fea8876789..e4233c776e1e1fd6aada55b3c8905de3455f5de3 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Relation.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Model\Resource\Order\Creditmemo;
+namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 
 /**
  * Class Relation
@@ -28,8 +28,8 @@ class Relation implements RelationInterface
      * @param Comment $creditmemoCommentResource
      */
     public function __construct(
-        \Magento\Sales\Model\Resource\Order\Creditmemo\Item $creditmemoItemResource,
-        \Magento\Sales\Model\Resource\Order\Creditmemo\Comment $creditmemoCommentResource
+        \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item $creditmemoItemResource,
+        \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment $creditmemoCommentResource
     ) {
         $this->creditmemoItemResource = $creditmemoItemResource;
         $this->creditmemoCommentResource = $creditmemoCommentResource;
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Relation/Refund.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation/Refund.php
similarity index 97%
rename from app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Relation/Refund.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation/Refund.php
index 355c0003f91233eb3477ceaf5aad43c2982c0360..ce9914878cdf0f53f94808a60b74bc931e841537 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Creditmemo/Relation/Refund.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Creditmemo/Relation/Refund.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Model\Resource\Order\Creditmemo\Relation;
+namespace Magento\Sales\Model\ResourceModel\Order\Creditmemo\Relation;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationInterface;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
 
 /**
  * Class Relation
@@ -55,12 +55,12 @@ class Refund implements RelationInterface
         /** @var \Magento\Sales\Model\Order\Creditmemo $object */
         if ($object->getState() == \Magento\Sales\Model\Order\Creditmemo::STATE_REFUNDED) {
             $this->prepareOrder($object);
-            $this->orderRepository->save($object->getOrder());
             if ($object->getInvoice()) {
                 $this->prepareInvoice($object);
                 $this->invoiceRepository->save($object->getInvoice());
             }
             $this->preparePayment($object);
+            $this->orderRepository->save($object->getOrder());
         }
     }
 
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Customer/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Customer/Collection.php
similarity index 91%
rename from app/code/Magento/Sales/Model/Resource/Order/Customer/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Customer/Collection.php
index 12e0c641a2391343d3e0e1d66630207330cad375..a02d73d7412e2c8d52c03f3ac39167d69dcf8bb8 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Customer/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Customer/Collection.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Customer;
+namespace Magento\Sales\Model\ResourceModel\Order\Customer;
 
-class Collection extends \Magento\Customer\Model\Resource\Customer\Collection
+class Collection extends \Magento\Customer\Model\ResourceModel\Customer\Collection
 {
     /**
      * @return $this
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Handler/Address.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Handler/Address.php
similarity index 95%
rename from app/code/Magento/Sales/Model/Resource/Order/Handler/Address.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Handler/Address.php
index eb0b517ee3f696c7e23f8512672eda825cf6e513..c25899153e9a40ce45c144784458f084a2186183 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Handler/Address.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Handler/Address.php
@@ -4,10 +4,10 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Model\Resource\Order\Handler;
+namespace Magento\Sales\Model\ResourceModel\Order\Handler;
 
 use Magento\Sales\Model\Order;
-use Magento\Sales\Model\Resource\Attribute;
+use Magento\Sales\Model\ResourceModel\Attribute;
 
 /**
  * Class Address
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Handler/State.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Handler/State.php
similarity index 96%
rename from app/code/Magento/Sales/Model/Resource/Order/Handler/State.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Handler/State.php
index f09ef08054b6e1cbafa8be5889b9f4a475e84d2b..6c720fe651a6be7b267e8d61edf5d56d1868d3c8 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Handler/State.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Handler/State.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Model\Resource\Order\Handler;
+namespace Magento\Sales\Model\ResourceModel\Order\Handler;
 
 use Magento\Sales\Model\Order;
 
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice.php
similarity index 81%
rename from app/code/Magento/Sales/Model/Resource/Order/Invoice.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Invoice.php
index 806119110d161f8546c8261d4cf829b18e77c5ee..a56998201292c7d200a4baf6afaf2dd0460be0c7 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice.php
@@ -3,13 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order;
+namespace Magento\Sales\Model\ResourceModel\Order;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\SalesSequence\Model\Manager;
-use Magento\Sales\Model\Resource\Attribute;
-use Magento\Sales\Model\Resource\EntityAbstract as SalesResource;
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
+use Magento\Sales\Model\ResourceModel\Attribute;
+use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\InvoiceResourceInterface;
 
 /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Attribute/Backend/Child.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Attribute/Backend/Child.php
similarity index 90%
rename from app/code/Magento/Sales/Model/Resource/Order/Invoice/Attribute/Backend/Child.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Attribute/Backend/Child.php
index ce0dfba8af1564199cc5137e519f9acfb958536d..c6587d3dd22493770da1c066f27170c878f4f98e 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Attribute/Backend/Child.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Attribute/Backend/Child.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Invoice\Attribute\Backend;
+namespace Magento\Sales\Model\ResourceModel\Order\Invoice\Attribute\Backend;
 
 /**
  * Invoice backend model for child attribute
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Attribute/Backend/Item.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Attribute/Backend/Item.php
similarity index 89%
rename from app/code/Magento/Sales/Model/Resource/Order/Invoice/Attribute/Backend/Item.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Attribute/Backend/Item.php
index 76063d697ffd2acb1947ebdb5887e54625138b4f..dc20cc97a951a48744f4a313828fdb37d0170877 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Attribute/Backend/Item.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Attribute/Backend/Item.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Invoice\Attribute\Backend;
+namespace Magento\Sales\Model\ResourceModel\Order\Invoice\Attribute\Backend;
 
 /**
  * Invoice backend model for item attribute
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Attribute/Backend/Order.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Attribute/Backend/Order.php
similarity index 90%
rename from app/code/Magento/Sales/Model/Resource/Order/Invoice/Attribute/Backend/Order.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Attribute/Backend/Order.php
index 5afdb2cbc26ead10cd7eee09998c8803fd36f994..81af6e7c8232b81afe2a084df94873e012181bc6 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Attribute/Backend/Order.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Attribute/Backend/Order.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Invoice\Attribute\Backend;
+namespace Magento\Sales\Model\ResourceModel\Order\Invoice\Attribute\Backend;
 
 /**
  * Invoice backend model for order attribute
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Collection.php
similarity index 87%
rename from app/code/Magento/Sales/Model/Resource/Order/Invoice/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Collection.php
index a8bb205da49af68137e46beb33ecae8996ab1d93..76bc9d901323c1011dba4572a8844312a54d522a 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Collection.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Invoice;
+namespace Magento\Sales\Model\ResourceModel\Order\Invoice;
 
 use Magento\Sales\Api\Data\InvoiceSearchResultInterface;
-use Magento\Sales\Model\Resource\Order\Collection\AbstractCollection;
+use Magento\Sales\Model\ResourceModel\Order\Collection\AbstractCollection;
 
 /**
  * Flat sales order invoice collection
@@ -50,7 +50,7 @@ class Collection extends AbstractCollection implements InvoiceSearchResultInterf
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order\Invoice', 'Magento\Sales\Model\Resource\Order\Invoice');
+        $this->_init('Magento\Sales\Model\Order\Invoice', 'Magento\Sales\Model\ResourceModel\Order\Invoice');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Comment.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment.php
similarity index 77%
rename from app/code/Magento/Sales/Model/Resource/Order/Invoice/Comment.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment.php
index c1895f5f9ed3851ffce87eedd2970888164007b4..cea28e92a6ed1757578b3066218e8c845f58a3f6 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Comment.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Invoice;
+namespace Magento\Sales\Model\ResourceModel\Order\Invoice;
 
-use Magento\Sales\Model\Resource\EntityAbstract;
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
+use Magento\Sales\Model\ResourceModel\EntityAbstract;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\InvoiceCommentResourceInterface;
 
 /**
@@ -31,19 +31,19 @@ class Comment extends EntityAbstract implements InvoiceCommentResourceInterface
     protected $validator;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
-     * @param \Magento\Sales\Model\Resource\Attribute $attribute
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
+     * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param \Magento\Sales\Model\Order\Invoice\Comment\Validator $validator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
-        \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite,
-        \Magento\Sales\Model\Resource\Attribute $attribute,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         \Magento\SalesSequence\Model\Manager $sequenceManager,
         \Magento\Sales\Model\Order\Invoice\Comment\Validator $validator,
         $connectionName = null
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Comment/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment/Collection.php
similarity index 83%
rename from app/code/Magento/Sales/Model/Resource/Order/Invoice/Comment/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment/Collection.php
index 0bdebe01502d9f5f455a0f7b66397f84631d8e08..30e88097046c963f59d0135931c53e7f53d6397b 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Comment/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Comment/Collection.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Invoice\Comment;
+namespace Magento\Sales\Model\ResourceModel\Order\Invoice\Comment;
 
 use Magento\Sales\Api\Data\InvoiceCommentSearchResultInterface;
-use Magento\Sales\Model\Resource\Order\Comment\Collection\AbstractCollection;
+use Magento\Sales\Model\ResourceModel\Order\Comment\Collection\AbstractCollection;
 
 /**
  * Flat sales order invoice comment collection
@@ -39,7 +39,7 @@ class Collection extends AbstractCollection implements InvoiceCommentSearchResul
         parent::_construct();
         $this->_init(
             'Magento\Sales\Model\Order\Invoice\Comment',
-            'Magento\Sales\Model\Resource\Order\Invoice\Comment'
+            'Magento\Sales\Model\ResourceModel\Order\Invoice\Comment'
         );
     }
 
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Grid/StatusList.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Grid/StatusList.php
similarity index 92%
rename from app/code/Magento/Sales/Model/Resource/Order/Invoice/Grid/StatusList.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Grid/StatusList.php
index bfdd88978a25c7d966d07740c39f2406509f7c69..c4ecae1591987aa887c0b46ec45eace8c41d7ce0 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Grid/StatusList.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Grid/StatusList.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Invoice\Grid;
+namespace Magento\Sales\Model\ResourceModel\Order\Invoice\Grid;
 
 /**
  * Sales invoices statuses option array
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Item.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Item.php
similarity index 92%
rename from app/code/Magento/Sales/Model/Resource/Order/Invoice/Item.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Item.php
index 985ec1396657ef3d172f782be3f7ef892b5380e8..b24e08d4111ec78f8491d27753e0a932b5716f37 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Item.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Item.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Invoice;
+namespace Magento\Sales\Model\ResourceModel\Order\Invoice;
 
 /**
  * Flat sales order invoice item resource
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Item extends \Magento\Sales\Model\Resource\EntityAbstract
+class Item extends \Magento\Sales\Model\ResourceModel\EntityAbstract
 {
     /**
      * Event prefix
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Item/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Item/Collection.php
similarity index 81%
rename from app/code/Magento/Sales/Model/Resource/Order/Invoice/Item/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Item/Collection.php
index 7412b77d0cea7899bfe03634911f48da0ae59f28..bf837280617e5fdb08b15dc607d5410f39097c01 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Item/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Item/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Invoice\Item;
+namespace Magento\Sales\Model\ResourceModel\Order\Invoice\Item;
 
 /**
  * Flat sales order invoice item collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Sales\Model\Resource\Collection\AbstractCollection
+class Collection extends \Magento\Sales\Model\ResourceModel\Collection\AbstractCollection
 {
     /**
      * Event prefix
@@ -33,7 +33,7 @@ class Collection extends \Magento\Sales\Model\Resource\Collection\AbstractCollec
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order\Invoice\Item', 'Magento\Sales\Model\Resource\Order\Invoice\Item');
+        $this->_init('Magento\Sales\Model\Order\Invoice\Item', 'Magento\Sales\Model\ResourceModel\Order\Invoice\Item');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Relation.php
similarity index 84%
rename from app/code/Magento/Sales/Model/Resource/Order/Invoice/Relation.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Relation.php
index b2da74d1d74333752376e0e0df64f2f99ad75a24..f46527a29a0a4c159405619852bff6dd8e647c3e 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Invoice/Relation.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Invoice/Relation.php
@@ -4,11 +4,11 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Model\Resource\Order\Invoice;
+namespace Magento\Sales\Model\ResourceModel\Order\Invoice;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationInterface;
-use Magento\Sales\Model\Resource\Order\Invoice\Item as InvoiceItemResource;
-use Magento\Sales\Model\Resource\Order\Invoice\Comment as InvoiceCommentResource;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
+use Magento\Sales\Model\ResourceModel\Order\Invoice\Item as InvoiceItemResource;
+use Magento\Sales\Model\ResourceModel\Order\Invoice\Comment as InvoiceCommentResource;
 
 /**
  * Class Relation
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Item.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Item.php
similarity index 91%
rename from app/code/Magento/Sales/Model/Resource/Order/Item.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Item.php
index 4c1482d66ada4ae429a1843c42ad7ceab785b58d..3de9ff2ab91634ee88c3e88f1bb24539db2f6859 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Item.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Item.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order;
+namespace Magento\Sales\Model\ResourceModel\Order;
 
-use Magento\Sales\Model\Resource\EntityAbstract as SalesResource;
+use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
 
 /**
  * Flat sales order item resource
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Item/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Item/Collection.php
similarity index 93%
rename from app/code/Magento/Sales/Model/Resource/Order/Item/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Item/Collection.php
index 841a4cb31bfedaca1f674d11ca0873a7276694ac..4f9af9a6c0de3bfa0b95e8efaf3a42ac9c295190 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Item/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Item/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Item;
+namespace Magento\Sales\Model\ResourceModel\Order\Item;
 
 /**
  * Flat sales order payment collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Sales\Model\Resource\Order\Collection\AbstractCollection
+class Collection extends \Magento\Sales\Model\ResourceModel\Order\Collection\AbstractCollection
 {
     /**
      * Event prefix
@@ -40,7 +40,7 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Collection\Abstract
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order\Item', 'Magento\Sales\Model\Resource\Order\Item');
+        $this->_init('Magento\Sales\Model\Order\Item', 'Magento\Sales\Model\ResourceModel\Order\Item');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Payment.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Payment.php
similarity index 87%
rename from app/code/Magento/Sales/Model/Resource/Order/Payment.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Payment.php
index cf6780d4002c38f34808f60dceb9ce796b104236..75106be008ed74d80901faab5b38b28e0a0703a5 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Payment.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Payment.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order;
+namespace Magento\Sales\Model\ResourceModel\Order;
 
-use Magento\Framework\App\Resource;
-use Magento\Sales\Model\Resource\EntityAbstract as SalesResource;
+use Magento\Framework\App\ResourceConnection;
+use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
 
 /**
  * Flat sales order payment resource
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Payment/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Collection.php
similarity index 79%
rename from app/code/Magento/Sales/Model/Resource/Order/Payment/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Collection.php
index ec38b9a073aa61e24ab0b300f9b0d43290e41750..7f7617544678691a3403289f2b6fa590f8badd4d 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Payment/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Collection.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Payment;
+namespace Magento\Sales\Model\ResourceModel\Order\Payment;
 
 use Magento\Sales\Api\Data\OrderPaymentSearchResultInterface;
-use Magento\Sales\Model\Resource\Order\Collection\AbstractCollection;
+use Magento\Sales\Model\ResourceModel\Order\Collection\AbstractCollection;
 
 /**
  * Flat sales order payment collection
@@ -32,18 +32,18 @@ class Collection extends AbstractCollection implements OrderPaymentSearchResultI
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param null $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct(
             $entityFactory,
@@ -63,7 +63,7 @@ class Collection extends AbstractCollection implements OrderPaymentSearchResultI
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order\Payment', 'Magento\Sales\Model\Resource\Order\Payment');
+        $this->_init('Magento\Sales\Model\Order\Payment', 'Magento\Sales\Model\ResourceModel\Order\Payment');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Payment/Transaction.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Transaction.php
similarity index 98%
rename from app/code/Magento/Sales/Model/Resource/Order/Payment/Transaction.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Transaction.php
index 22b1d37bc8ce8ffbbb7db51cbcc838d8fed5ac8d..cb0749bc00dfb1f03c19ecbf29ddedd9573d3e9c 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Payment/Transaction.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Transaction.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Payment;
+namespace Magento\Sales\Model\ResourceModel\Order\Payment;
 
-use Magento\Sales\Model\Resource\EntityAbstract;
+use Magento\Sales\Model\ResourceModel\EntityAbstract;
 use Magento\Sales\Model\Spi\TransactionResourceInterface;
 
 /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Payment/Transaction/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Transaction/Collection.php
similarity index 96%
rename from app/code/Magento/Sales/Model/Resource/Order/Payment/Transaction/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Transaction/Collection.php
index f8e80098cc5f54a157751dcc7f6b8581da2f106e..f2981e47d2d9c12de7e09fbe1939baa837d7f587 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Payment/Transaction/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Payment/Transaction/Collection.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Payment\Transaction;
+namespace Magento\Sales\Model\ResourceModel\Order\Payment\Transaction;
 
 use Magento\Sales\Api\Data\TransactionSearchResultInterface;
-use Magento\Sales\Model\Resource\Order\Collection\AbstractCollection;
+use Magento\Sales\Model\ResourceModel\Order\Collection\AbstractCollection;
 
 /**
  * Payment transactions collection
@@ -80,7 +80,7 @@ class Collection extends AbstractCollection implements TransactionSearchResultIn
     {
         $this->_init(
             'Magento\Sales\Model\Order\Payment\Transaction',
-            'Magento\Sales\Model\Resource\Order\Payment\Transaction'
+            'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction'
         );
         $this->addFilterToMap('created_at', 'main_table.created_at');
         parent::_construct();
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Plugin/Authorization.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Plugin/Authorization.php
similarity index 90%
rename from app/code/Magento/Sales/Model/Resource/Order/Plugin/Authorization.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Plugin/Authorization.php
index 4fc8acc8046c127a33caa8c4ce0046475926fe07..f577d91748f58a94caebc346496e304c62864b10 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Plugin/Authorization.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Plugin/Authorization.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Model\Resource\Order\Plugin;
+namespace Magento\Sales\Model\ResourceModel\Order\Plugin;
 
 use Magento\Authorization\Model\UserContextInterface;
 use Magento\Framework\Exception\NoSuchEntityException;
@@ -28,7 +28,7 @@ class Authorization
     /**
      * Checks if order is allowed
      *
-     * @param \Magento\Sales\Model\Resource\Order $subject
+     * @param \Magento\Sales\Model\ResourceModel\Order $subject
      * @param callable $proceed
      * @param \Magento\Framework\Model\AbstractModel $order
      * @param mixed $value
@@ -38,7 +38,7 @@ class Authorization
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundLoad(
-        \Magento\Sales\Model\Resource\Order $subject,
+        \Magento\Sales\Model\ResourceModel\Order $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $order,
         $value,
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Relation.php
similarity index 89%
rename from app/code/Magento/Sales/Model/Resource/Order/Relation.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Relation.php
index 467aa0014701f4653f4eb2c7e1192da01ec241e1..da599b38eb2d05043c3297de2d860d7338102446 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Relation.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Relation.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Model\Resource\Order;
+namespace Magento\Sales\Model\ResourceModel\Order;
 
-use Magento\Sales\Model\Resource\Order\Handler\Address as AddressHandler;
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationInterface;
-use Magento\Sales\Model\Resource\Order\Payment as OrderPaymentResource;
-use Magento\Sales\Model\Resource\Order\Status\History as OrderStatusHistoryResource;
+use Magento\Sales\Model\ResourceModel\Order\Handler\Address as AddressHandler;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
+use Magento\Sales\Model\ResourceModel\Order\Payment as OrderPaymentResource;
+use Magento\Sales\Model\ResourceModel\Order\Status\History as OrderStatusHistoryResource;
 use Magento\Sales\Api\OrderItemRepositoryInterface;
 
 /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Rss/OrderStatus.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Rss/OrderStatus.php
similarity index 89%
rename from app/code/Magento/Sales/Model/Resource/Order/Rss/OrderStatus.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Rss/OrderStatus.php
index 34cb71ad87ef861227a16cabc71f77a030ba2466..ff66da70df45fbfd74aaf50a9a602e8a7aa16c8d 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Rss/OrderStatus.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Rss/OrderStatus.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Rss;
+namespace Magento\Sales\Model\ResourceModel\Order\Rss;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Order Rss Resource Model
@@ -20,9 +20,9 @@ class OrderStatus
     protected $_resource;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      */
-    public function __construct(Resource $resource)
+    public function __construct(ResourceConnection $resource)
     {
         $this->_resource = $resource;
     }
@@ -35,7 +35,7 @@ class OrderStatus
      */
     public function getAllCommentCollection($orderId)
     {
-        /** @var $resource \Magento\Framework\App\Resource */
+        /** @var $resource \Magento\Framework\App\ResourceConnection */
         $resource = $this->_resource;
         $read = $resource->getConnection();
 
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment.php
similarity index 88%
rename from app/code/Magento/Sales/Model/Resource/Order/Shipment.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Shipment.php
index d0cbc8df97b34744ccccf1e633a6ccee45f43e8b..61874a01a76425934360e3f92284707127edfd1e 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order;
+namespace Magento\Sales\Model\ResourceModel\Order;
 
-use Magento\Framework\App\Resource as AppResource;
+use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\SalesSequence\Model\Manager;
-use Magento\Sales\Model\Resource\Attribute;
-use Magento\Sales\Model\Resource\EntityAbstract as SalesResource;
+use Magento\Sales\Model\ResourceModel\Attribute;
+use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
 use Magento\Sales\Model\Spi\ShipmentResourceInterface;
 
 /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Attribute/Backend/Child.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Attribute/Backend/Child.php
similarity index 89%
rename from app/code/Magento/Sales/Model/Resource/Order/Shipment/Attribute/Backend/Child.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Attribute/Backend/Child.php
index bc72264187431e663e1da33d279a996ed13f6199..1281d70fdb062941e493c7f28a0006d3cc25e3c4 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Attribute/Backend/Child.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Attribute/Backend/Child.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Shipment\Attribute\Backend;
+namespace Magento\Sales\Model\ResourceModel\Order\Shipment\Attribute\Backend;
 
 /**
  * Invoice backend model for child attribute
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Collection.php
similarity index 87%
rename from app/code/Magento/Sales/Model/Resource/Order/Shipment/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Collection.php
index 63744b59dca9fe0cb7c71b06b5de833fe536bf3b..2ea7343545ea36bf0a839d01053f7daf0980f2b6 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Collection.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Shipment;
+namespace Magento\Sales\Model\ResourceModel\Order\Shipment;
 
 use Magento\Sales\Api\Data\ShipmentSearchResultInterface;
-use Magento\Sales\Model\Resource\Order\Collection\AbstractCollection;
+use Magento\Sales\Model\ResourceModel\Order\Collection\AbstractCollection;
 
 /**
  * Sales order shipment collection
@@ -48,7 +48,7 @@ class Collection extends AbstractCollection implements ShipmentSearchResultInter
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order\Shipment', 'Magento\Sales\Model\Resource\Order\Shipment');
+        $this->_init('Magento\Sales\Model\Order\Shipment', 'Magento\Sales\Model\ResourceModel\Order\Shipment');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Comment.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment.php
similarity index 77%
rename from app/code/Magento/Sales/Model/Resource/Order/Shipment/Comment.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment.php
index 4740cd29ebb65d106ab1b5e45d54aa3da16db8e5..174d0c1e622df487a901969b50500f7cd4e15709 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Comment.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Shipment;
+namespace Magento\Sales\Model\ResourceModel\Order\Shipment;
 
-use Magento\Sales\Model\Resource\EntityAbstract;
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
+use Magento\Sales\Model\ResourceModel\EntityAbstract;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\ShipmentCommentResourceInterface;
 
 /**
@@ -31,19 +31,19 @@ class Comment extends EntityAbstract implements ShipmentCommentResourceInterface
     protected $validator;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
-     * @param \Magento\Sales\Model\Resource\Attribute $attribute
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
+     * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param \Magento\Sales\Model\Order\Shipment\Comment\Validator $validator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
-        \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite,
-        \Magento\Sales\Model\Resource\Attribute $attribute,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         \Magento\SalesSequence\Model\Manager $sequenceManager,
         \Magento\Sales\Model\Order\Shipment\Comment\Validator $validator,
         $connectionName = null
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Comment/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment/Collection.php
similarity index 82%
rename from app/code/Magento/Sales/Model/Resource/Order/Shipment/Comment/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment/Collection.php
index e8057070737df1bc0b1947d8e5bdc7cee757ddb4..a888d3de9a808d985c62521fe02d1d714a5cbbff 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Comment/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Comment/Collection.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Shipment\Comment;
+namespace Magento\Sales\Model\ResourceModel\Order\Shipment\Comment;
 
 use Magento\Sales\Api\Data\ShipmentCommentSearchResultInterface;
-use Magento\Sales\Model\Resource\Order\Comment\Collection\AbstractCollection;
+use Magento\Sales\Model\ResourceModel\Order\Comment\Collection\AbstractCollection;
 
 /**
  * Flat sales order shipment comments collection
@@ -38,7 +38,7 @@ class Collection extends AbstractCollection implements ShipmentCommentSearchResu
     {
         $this->_init(
             'Magento\Sales\Model\Order\Shipment\Comment',
-            'Magento\Sales\Model\Resource\Order\Shipment\Comment'
+            'Magento\Sales\Model\ResourceModel\Order\Shipment\Comment'
         );
     }
 
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Item.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Item.php
similarity index 90%
rename from app/code/Magento/Sales/Model/Resource/Order/Shipment/Item.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Item.php
index dc762e4546b7d4b8a9a6f5841a823fa134035552..c81251aba05aa2ab3110050361e951996ae05e63 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Item.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Item.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Shipment;
+namespace Magento\Sales\Model\ResourceModel\Order\Shipment;
 
-use Magento\Sales\Model\Resource\EntityAbstract as SalesResource;
+use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
 use Magento\Sales\Model\Spi\ShipmentItemResourceInterface;
 
 /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Item/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Item/Collection.php
similarity index 73%
rename from app/code/Magento/Sales/Model/Resource/Order/Shipment/Item/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Item/Collection.php
index bfd7d3bfa3e7af3ffdd3a36b36a1fc7ee8c959bb..5f443ed0d12ea213abcd0c710853ce1c2836df1e 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Item/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Item/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Shipment\Item;
+namespace Magento\Sales\Model\ResourceModel\Order\Shipment\Item;
 
 /**
  * Flat sales order shipment items collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Sales\Model\Resource\Collection\AbstractCollection
+class Collection extends \Magento\Sales\Model\ResourceModel\Collection\AbstractCollection
 {
     /**
      * Event prefix
@@ -33,7 +33,10 @@ class Collection extends \Magento\Sales\Model\Resource\Collection\AbstractCollec
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order\Shipment\Item', 'Magento\Sales\Model\Resource\Order\Shipment\Item');
+        $this->_init(
+            'Magento\Sales\Model\Order\Shipment\Item',
+            'Magento\Sales\Model\ResourceModel\Order\Shipment\Item'
+        );
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Relation.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php
similarity index 83%
rename from app/code/Magento/Sales/Model/Resource/Order/Shipment/Relation.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php
index 32efe9ad52732e700ddb73b33e6968e75c7a7f4a..943255b55d23ca9ac60652b3d81ea0c0d98ac914 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Relation.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Relation.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Model\Resource\Order\Shipment;
+namespace Magento\Sales\Model\ResourceModel\Order\Shipment;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationInterface;
-use Magento\Sales\Model\Resource\Order\Shipment\Item as ShipmentItemResource;
-use Magento\Sales\Model\Resource\Order\Shipment\Comment as ShipmentCommentResource;
-use Magento\Sales\Model\Resource\Order\Shipment\Track as ShipmentTrackResource;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface;
+use Magento\Sales\Model\ResourceModel\Order\Shipment\Item as ShipmentItemResource;
+use Magento\Sales\Model\ResourceModel\Order\Shipment\Comment as ShipmentCommentResource;
+use Magento\Sales\Model\ResourceModel\Order\Shipment\Track as ShipmentTrackResource;
 
 /**
  * Class Relation
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Track.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track.php
similarity index 77%
rename from app/code/Magento/Sales/Model/Resource/Order/Shipment/Track.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track.php
index 1c8c0be3324dd8b1c94a37f9aa9154a923648341..ad1ad038a02fb4ee072ac6ec8433713ca3f4bedb 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Track.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Shipment;
+namespace Magento\Sales\Model\ResourceModel\Order\Shipment;
 
-use Magento\Sales\Model\Resource\EntityAbstract as SalesResource;
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
+use Magento\Sales\Model\ResourceModel\EntityAbstract as SalesResource;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\ShipmentTrackResourceInterface;
 
 /**
@@ -31,19 +31,19 @@ class Track extends SalesResource implements ShipmentTrackResourceInterface
     protected $validator;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
-     * @param \Magento\Sales\Model\Resource\Attribute $attribute
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
+     * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param \Magento\Sales\Model\Order\Shipment\Track\Validator $validator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
-        \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite,
-        \Magento\Sales\Model\Resource\Attribute $attribute,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         \Magento\SalesSequence\Model\Manager $sequenceManager,
         \Magento\Sales\Model\Order\Shipment\Track\Validator $validator,
         $connectionName = null
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Track/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track/Collection.php
similarity index 78%
rename from app/code/Magento/Sales/Model/Resource/Order/Shipment/Track/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track/Collection.php
index bd6c1c463041d3041400eda68bf6eff6255d66f1..9ca3e4c3c0cd2e3c711528cc90f84dce4b59d3d0 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Shipment/Track/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Shipment/Track/Collection.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Shipment\Track;
+namespace Magento\Sales\Model\ResourceModel\Order\Shipment\Track;
 
 use Magento\Sales\Api\Data\ShipmentTrackSearchResultInterface;
-use Magento\Sales\Model\Resource\Order\Collection\AbstractCollection;
+use Magento\Sales\Model\ResourceModel\Order\Collection\AbstractCollection;
 
 /**
  * Flat sales order shipment tracks collection
@@ -43,7 +43,10 @@ class Collection extends AbstractCollection implements ShipmentTrackSearchResult
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order\Shipment\Track', 'Magento\Sales\Model\Resource\Order\Shipment\Track');
+        $this->_init(
+            'Magento\Sales\Model\Order\Shipment\Track',
+            'Magento\Sales\Model\ResourceModel\Order\Shipment\Track'
+        );
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Status.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Status.php
similarity index 96%
rename from app/code/Magento/Sales/Model/Resource/Order/Status.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Status.php
index 45867241a7f0d39373f5962645b3a7b518a142f6..e21f8de9ff9e06e7f64408256c919d04cfa1ac3a 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Status.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Status.php
@@ -3,21 +3,21 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order;
+namespace Magento\Sales\Model\ResourceModel\Order;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Psr\Log\LoggerInterface as LogWriter;
 use Magento\Framework\Exception\LocalizedException;
 use Magento\SalesSequence\Model\Manager;
-use \Magento\Sales\Model\Resource\EntityAbstract;
-use \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
+use \Magento\Sales\Model\ResourceModel\EntityAbstract;
+use \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 
 /**
  * Order status resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Status extends \Magento\Framework\Model\Resource\Db\VersionControl\AbstractDb
+class Status extends \Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb
 {
     /**
      * Status labels table
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Status/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Status/Collection.php
similarity index 90%
rename from app/code/Magento/Sales/Model/Resource/Order/Status/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Status/Collection.php
index f0532bbef278e2e54152ff60b81fcd70554ed15b..3c7d7d26fdc1d50ea6216558c40492555364b99d 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Status/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Status/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Status;
+namespace Magento\Sales\Model\ResourceModel\Order\Status;
 
 /**
  * Flat sales order status history collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Sales\Model\Resource\Collection\AbstractCollection
+class Collection extends \Magento\Sales\Model\ResourceModel\Collection\AbstractCollection
 {
     /**
      * Internal constructor
@@ -19,7 +19,7 @@ class Collection extends \Magento\Sales\Model\Resource\Collection\AbstractCollec
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order\Status', 'Magento\Sales\Model\Resource\Order\Status');
+        $this->_init('Magento\Sales\Model\Order\Status', 'Magento\Sales\Model\ResourceModel\Order\Status');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Status/History.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Status/History.php
similarity index 75%
rename from app/code/Magento/Sales/Model/Resource/Order/Status/History.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Status/History.php
index 0e8fcaab4665b98e7d17511c68062216e9612c06..1ce43da2b9902b9d255c255f5a901a199cd7702f 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Status/History.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Status/History.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Status;
+namespace Magento\Sales\Model\ResourceModel\Order\Status;
 
 use Magento\Sales\Model\Order\Status\History\Validator;
-use Magento\Sales\Model\Resource\EntityAbstract;
-use Magento\Framework\Model\Resource\Db\VersionControl\Snapshot;
+use Magento\Sales\Model\ResourceModel\EntityAbstract;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot;
 use Magento\Sales\Model\Spi\OrderStatusHistoryResourceInterface;
 
 /**
@@ -23,19 +23,19 @@ class History extends EntityAbstract implements OrderStatusHistoryResourceInterf
     protected $validator;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
-     * @param \Magento\Sales\Model\Resource\Attribute $attribute
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
+     * @param \Magento\Sales\Model\ResourceModel\Attribute $attribute
      * @param \Magento\SalesSequence\Model\Manager $sequenceManager
      * @param Snapshot $entitySnapshot
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite
      * @param Validator $validator
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
-        \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite $entityRelationComposite,
-        \Magento\Sales\Model\Resource\Attribute $attribute,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite $entityRelationComposite,
+        \Magento\Sales\Model\ResourceModel\Attribute $attribute,
         \Magento\SalesSequence\Model\Manager $sequenceManager,
         Validator $validator,
         $connectionName = null
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Status/History/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Status/History/Collection.php
similarity index 86%
rename from app/code/Magento/Sales/Model/Resource/Order/Status/History/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Status/History/Collection.php
index bd1373e0ef07d62835a56cfc556da2f293536d19..da4c726a2f98e0cfaad38ee1650d208e6ab01b71 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Status/History/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Status/History/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Status\History;
+namespace Magento\Sales\Model\ResourceModel\Order\Status\History;
 
 use Magento\Sales\Api\Data\OrderStatusHistorySearchResultInterface;
 use Magento\Sales\Model\AbstractModel;
 use Magento\Sales\Model\Order;
-use Magento\Sales\Model\Resource\Order\Collection\AbstractCollection;
+use Magento\Sales\Model\ResourceModel\Order\Collection\AbstractCollection;
 
 /**
  * Flat sales order status history collection
@@ -38,7 +38,10 @@ class Collection extends AbstractCollection implements OrderStatusHistorySearchR
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order\Status\History', 'Magento\Sales\Model\Resource\Order\Status\History');
+        $this->_init(
+            'Magento\Sales\Model\Order\Status\History',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History'
+        );
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Tax.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Tax.php
similarity index 75%
rename from app/code/Magento/Sales/Model/Resource/Order/Tax.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Tax.php
index 17c3a0c240318afc2ca73a915548b45f9c0ce243..fff08b2b711a55131725edca2af63d987d399f22 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Tax.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Tax.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order;
+namespace Magento\Sales\Model\ResourceModel\Order;
 
 /**
  * Order Tax Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Tax extends \Magento\Sales\Model\Resource\EntityAbstract
+class Tax extends \Magento\Sales\Model\ResourceModel\EntityAbstract
 {
     /**
      * Model initialization
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Tax/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Collection.php
similarity index 79%
rename from app/code/Magento/Sales/Model/Resource/Order/Tax/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Collection.php
index 0943c4e0d7c07596df4a936e8b90a0f4732320b3..12f957b4e73ee8311c79b1fde701bc1515f512cc 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Tax/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Tax;
+namespace Magento\Sales\Model\ResourceModel\Order\Tax;
 
 /**
  * Order Tax Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Sales\Model\Resource\Collection\AbstractCollection
+class Collection extends \Magento\Sales\Model\ResourceModel\Collection\AbstractCollection
 {
     /**
      * Model initialization
@@ -19,7 +19,7 @@ class Collection extends \Magento\Sales\Model\Resource\Collection\AbstractCollec
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sales\Model\Order\Tax', 'Magento\Sales\Model\Resource\Order\Tax');
+        $this->_init('Magento\Sales\Model\Order\Tax', 'Magento\Sales\Model\ResourceModel\Order\Tax');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Order/Tax/Item.php b/app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Item.php
similarity index 90%
rename from app/code/Magento/Sales/Model/Resource/Order/Tax/Item.php
rename to app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Item.php
index 29b0483fc3451cac26a05ddfd1103f8bd903bd27..16b3e4bb19ed63f1b0aadc38410ad487718afffc 100644
--- a/app/code/Magento/Sales/Model/Resource/Order/Tax/Item.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Order/Tax/Item.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Order\Tax;
+namespace Magento\Sales\Model\ResourceModel\Order\Tax;
 
 /**
  * Sales order tax resource model
  */
-class Item extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Sales/Model/Resource/Report.php b/app/code/Magento/Sales/Model/ResourceModel/Report.php
similarity index 83%
rename from app/code/Magento/Sales/Model/Resource/Report.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report.php
index dba4b71740455bfb2846397980721f7d434376fe..d44447b682b6db4e5638e2fde8b8aabb7e44d33e 100644
--- a/app/code/Magento/Sales/Model/Resource/Report.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource;
+namespace Magento\Sales\Model\ResourceModel;
 
 /**
  * Sales report resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Report extends \Magento\Sales\Model\Resource\EntityAbstract
+class Report extends \Magento\Sales\Model\ResourceModel\EntityAbstract
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Sales/Model/Resource/Report/AbstractReport.php b/app/code/Magento/Sales/Model/ResourceModel/Report/AbstractReport.php
similarity index 76%
rename from app/code/Magento/Sales/Model/Resource/Report/AbstractReport.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/AbstractReport.php
index 124626c792fec7368d9535e331da717c845a3ea2..a1486938bd4164e4446ca034ccbdd580d3467e70 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/AbstractReport.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/AbstractReport.php
@@ -3,13 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report;
+namespace Magento\Sales\Model\ResourceModel\Report;
 
 /**
  * Order report resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-abstract class AbstractReport extends \Magento\Reports\Model\Resource\Report\AbstractReport
+abstract class AbstractReport extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport
 {
 }
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Bestsellers.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers.php
similarity index 91%
rename from app/code/Magento/Sales/Model/Resource/Report/Bestsellers.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers.php
index f73b16d01701b3a4afb6656b8d69e43b861f832c..231e0774687acb07331413e6030028c0d275ed4b 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Bestsellers.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report;
+namespace Magento\Sales\Model\ResourceModel\Report;
 
 /**
  * Bestsellers report resource model
@@ -18,12 +18,12 @@ class Bestsellers extends AbstractReport
     const AGGREGATION_YEARLY = 'yearly';
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product
+     * @var \Magento\Catalog\Model\ResourceModel\Product
      */
     protected $_productResource;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Helper
+     * @var \Magento\Sales\Model\ResourceModel\Helper
      */
     protected $_salesResourceHelper;
 
@@ -37,27 +37,27 @@ class Bestsellers extends AbstractReport
     ];
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Framework\Stdlib\DateTime\Timezone\Validator $timezoneValidator
-     * @param \Magento\Catalog\Model\Resource\Product $productResource
-     * @param \Magento\Sales\Model\Resource\Helper $salesResourceHelper
+     * @param \Magento\Catalog\Model\ResourceModel\Product $productResource
+     * @param \Magento\Sales\Model\ResourceModel\Helper $salesResourceHelper
      * @param array $ignoredProductTypes
      * @param string $connectionName
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\Stdlib\DateTime\Timezone\Validator $timezoneValidator,
-        \Magento\Catalog\Model\Resource\Product $productResource,
-        \Magento\Sales\Model\Resource\Helper $salesResourceHelper,
+        \Magento\Catalog\Model\ResourceModel\Product $productResource,
+        \Magento\Sales\Model\ResourceModel\Helper $salesResourceHelper,
         $connectionName = null,
         array $ignoredProductTypes = []
     ) {
@@ -202,7 +202,7 @@ class Bestsellers extends AbstractReport
     /**
      * Update rating position
      *
-     * @param string $aggregation One of \Magento\Sales\Model\Resource\Report\Bestsellers::AGGREGATION_XXX constants
+     * @param string $aggregation
      * @return $this
      */
     protected function _updateRatingPos($aggregation)
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Bestsellers/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers/Collection.php
similarity index 97%
rename from app/code/Magento/Sales/Model/Resource/Report/Bestsellers/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers/Collection.php
index 469584c9de61179490c5e5258e862f65d98db39e..0a4fed17cfc69f5a897968e09329d3dbbf47f705 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Bestsellers/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Bestsellers/Collection.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Sales\Model\Resource\Report\Bestsellers;
+namespace Magento\Sales\Model\ResourceModel\Report\Bestsellers;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Sales\Model\Resource\Report\Collection\AbstractCollection
+class Collection extends \Magento\Sales\Model\ResourceModel\Report\Collection\AbstractCollection
 {
     /**
      * Rating limit
@@ -43,7 +43,7 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Sales\Model\Resource\Report $resource
+     * @param \Magento\Sales\Model\ResourceModel\Report $resource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      */
     public function __construct(
@@ -51,7 +51,7 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Sales\Model\Resource\Report $resource,
+        \Magento\Sales\Model\ResourceModel\Report $resource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $resource->init($this->getTableByAggregationPeriod('daily'));
@@ -240,7 +240,7 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac
      * Redeclare parent method for applying filters after parent method
      * but before adding unions and calculating totals
      *
-     * @return $this|\Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return $this|\Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      * @SuppressWarnings(PHPMD.CyclomaticComplexity)
      * @SuppressWarnings(PHPMD.NPathComplexity)
      * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Collection/AbstractCollection.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Collection/AbstractCollection.php
similarity index 90%
rename from app/code/Magento/Sales/Model/Resource/Report/Collection/AbstractCollection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Collection/AbstractCollection.php
index 46b00c9afaea2fe859f677b80a5df18c1b00efa5..cc5aa4ecd6089fdba34741eec17c47ef17c5e9a2 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Collection/AbstractCollection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Collection/AbstractCollection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Collection;
 
 /**
  * Report collection abstract model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class AbstractCollection extends \Magento\Reports\Model\Resource\Report\Collection\AbstractCollection
+class AbstractCollection extends \Magento\Reports\Model\ResourceModel\Report\Collection\AbstractCollection
 {
     /**
      * Order status
@@ -24,7 +24,7 @@ class AbstractCollection extends \Magento\Reports\Model\Resource\Report\Collecti
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Sales\Model\Resource\Report $resource
+     * @param \Magento\Sales\Model\ResourceModel\Report $resource
      * @param null $connection
      */
     public function __construct(
@@ -32,7 +32,7 @@ class AbstractCollection extends \Magento\Reports\Model\Resource\Report\Collecti
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Sales\Model\Resource\Report $resource,
+        \Magento\Sales\Model\ResourceModel\Report $resource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Invoiced.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Invoiced.php
similarity index 99%
rename from app/code/Magento/Sales/Model/Resource/Report/Invoiced.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Invoiced.php
index 69288c1ccefe0fb2693ea8e71ebc749784ef4b3f..42431df471a51374318be51520285b67a4f28986 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Invoiced.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Invoiced.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report;
+namespace Magento\Sales\Model\ResourceModel\Report;
 
 /**
  * Invoice report resource model
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Invoiced.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Invoiced/Collection/Invoiced.php
similarity index 85%
rename from app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Invoiced.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Invoiced/Collection/Invoiced.php
index 27cac231d89d3dfa6cd89c2315a8657caf9cd83e..8efd37b292885c43682ab41bc1f23b730d9c0117 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Invoiced.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Invoiced/Collection/Invoiced.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Invoiced\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Invoiced\Collection;
 
 /**
  * Sales report invoiced collection
@@ -17,7 +17,7 @@ class Invoiced extends Order
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Sales\Model\Resource\Report $resource
+     * @param \Magento\Sales\Model\ResourceModel\Report $resource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      */
     public function __construct(
@@ -25,7 +25,7 @@ class Invoiced extends Order
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Sales\Model\Resource\Report $resource,
+        \Magento\Sales\Model\ResourceModel\Report $resource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $resource->init('sales_invoiced_aggregated');
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Order.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Invoiced/Collection/Order.php
similarity index 91%
rename from app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Order.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Invoiced/Collection/Order.php
index 610736f4df857020402b2395e5d745fca139500c..15e1a7841b20537d64fe3f23bea902e023e3c552 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Invoiced/Collection/Order.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Invoiced/Collection/Order.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Invoiced\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Invoiced\Collection;
 
 /**
  * Sales report invoiced collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Order extends \Magento\Sales\Model\Resource\Report\Collection\AbstractCollection
+class Order extends \Magento\Sales\Model\ResourceModel\Report\Collection\AbstractCollection
 {
     /**
      * Period format
@@ -31,7 +31,7 @@ class Order extends \Magento\Sales\Model\Resource\Report\Collection\AbstractColl
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Sales\Model\Resource\Report $resource
+     * @param \Magento\Sales\Model\ResourceModel\Report $resource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      */
     public function __construct(
@@ -39,7 +39,7 @@ class Order extends \Magento\Sales\Model\Resource\Report\Collection\AbstractColl
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Sales\Model\Resource\Report $resource,
+        \Magento\Sales\Model\ResourceModel\Report $resource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $resource->init('sales_invoiced_aggregated_order');
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Order.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Order.php
similarity index 74%
rename from app/code/Magento/Sales/Model/Resource/Report/Order.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Order.php
index 8776053e27b3c99b22b711e07aff790176b136c3..743b1e197853ac4a3194dd8f4a59cb1b5cfa775f 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Order.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Order.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report;
+namespace Magento\Sales\Model\ResourceModel\Report;
 
 /**
  * Order entity resource model
@@ -11,35 +11,35 @@ namespace Magento\Sales\Model\Resource\Report;
 class Order extends AbstractReport
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Report\Order\CreatedatFactory
+     * @var \Magento\Sales\Model\ResourceModel\Report\Order\CreatedatFactory
      */
     protected $_createDatFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Report\Order\UpdatedatFactory
+     * @var \Magento\Sales\Model\ResourceModel\Report\Order\UpdatedatFactory
      */
     protected $_updateDatFactory;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Framework\Stdlib\DateTime\Timezone\Validator $timezoneValidator
-     * @param \Magento\Sales\Model\Resource\Report\Order\CreatedatFactory $createDatFactory
-     * @param \Magento\Sales\Model\Resource\Report\Order\UpdatedatFactory $updateDatFactory
+     * @param \Magento\Sales\Model\ResourceModel\Report\Order\CreatedatFactory $createDatFactory
+     * @param \Magento\Sales\Model\ResourceModel\Report\Order\UpdatedatFactory $updateDatFactory
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\Stdlib\DateTime\Timezone\Validator $timezoneValidator,
-        \Magento\Sales\Model\Resource\Report\Order\CreatedatFactory $createDatFactory,
-        \Magento\Sales\Model\Resource\Report\Order\UpdatedatFactory $updateDatFactory,
+        \Magento\Sales\Model\ResourceModel\Report\Order\CreatedatFactory $createDatFactory,
+        \Magento\Sales\Model\ResourceModel\Report\Order\UpdatedatFactory $updateDatFactory,
         $connectionName = null
     ) {
         parent::__construct(
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Order/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Order/Collection.php
similarity index 93%
rename from app/code/Magento/Sales/Model/Resource/Report/Order/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Order/Collection.php
index 8ba058d809a87c29d1be3bc360383a699c556ce1..bcee54291ffe41acac56415edf7beb7d8b86f2fd 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Order/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Order/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Order;
+namespace Magento\Sales\Model\ResourceModel\Report\Order;
 
 /**
  * Report order collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Sales\Model\Resource\Report\Collection\AbstractCollection
+class Collection extends \Magento\Sales\Model\ResourceModel\Report\Collection\AbstractCollection
 {
     /**
      * Period format
@@ -38,7 +38,7 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Sales\Model\Resource\Report $resource
+     * @param \Magento\Sales\Model\ResourceModel\Report $resource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      */
     public function __construct(
@@ -46,7 +46,7 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Sales\Model\Resource\Report $resource,
+        \Magento\Sales\Model\ResourceModel\Report $resource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $resource->init($this->_aggregationTable);
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Order/Createdat.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Order/Createdat.php
similarity index 98%
rename from app/code/Magento/Sales/Model/Resource/Report/Order/Createdat.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Order/Createdat.php
index a61a2855f45b2b57cf3ef109ae4a4c0b7b80acdd..4d6d22a3e60f848bc9c8b22e788e9be2c4c83e1f 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Order/Createdat.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Order/Createdat.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Order;
+namespace Magento\Sales\Model\ResourceModel\Report\Order;
 
 /**
  * Order entity resource model with aggregation by created at
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Createdat extends \Magento\Sales\Model\Resource\Report\AbstractReport
+class Createdat extends \Magento\Sales\Model\ResourceModel\Report\AbstractReport
 {
     /**
      * Model initialization
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Order/Updatedat.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Order/Updatedat.php
similarity index 93%
rename from app/code/Magento/Sales/Model/Resource/Report/Order/Updatedat.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Order/Updatedat.php
index be7479f9335fd9d1b123f1dd931b0c2e1d54d118..778963942cb1a5dabc7f7ee7841cdbfa99e64bc6 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Order/Updatedat.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Order/Updatedat.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Order;
+namespace Magento\Sales\Model\ResourceModel\Report\Order;
 
 /**
  * Order entity resource model with aggregation by updated at
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Order/Updatedat/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Order/Updatedat/Collection.php
similarity index 70%
rename from app/code/Magento/Sales/Model/Resource/Report/Order/Updatedat/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Order/Updatedat/Collection.php
index d1f801212fc915f2ee9bbf3f3dcec179c51b4dc8..4c7e2419697b6d60eaa57506d4aae7806008ceae 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Order/Updatedat/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Order/Updatedat/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Order\Updatedat;
+namespace Magento\Sales\Model\ResourceModel\Report\Order\Updatedat;
 
 /**
  * Report order updated_at collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Sales\Model\Resource\Report\Order\Collection
+class Collection extends \Magento\Sales\Model\ResourceModel\Report\Order\Collection
 {
     /**
      * Aggregated Data Table
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Refunded.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Refunded.php
similarity index 99%
rename from app/code/Magento/Sales/Model/Resource/Report/Refunded.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Refunded.php
index e34ef0bf64031bae7639dae7c8bac4821fd64f78..c364ac45b827723efd899b16105a76c932008ae4 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Refunded.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Refunded.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report;
+namespace Magento\Sales\Model\ResourceModel\Report;
 
 /**
  * Refund report resource model
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Order.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Refunded/Collection/Order.php
similarity index 90%
rename from app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Order.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Refunded/Collection/Order.php
index fab83f999ea517189981c72cb0ab9555e89b403e..669c3dad0df970dc5221feb7337042af9c1c117b 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Order.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Refunded/Collection/Order.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Refunded\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Refunded\Collection;
 
 /**
  * Sales report refunded collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Order extends \Magento\Sales\Model\Resource\Report\Collection\AbstractCollection
+class Order extends \Magento\Sales\Model\ResourceModel\Report\Collection\AbstractCollection
 {
     /**
      * Period format
@@ -31,7 +31,7 @@ class Order extends \Magento\Sales\Model\Resource\Report\Collection\AbstractColl
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Sales\Model\Resource\Report $resource
+     * @param \Magento\Sales\Model\ResourceModel\Report $resource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      */
     public function __construct(
@@ -39,7 +39,7 @@ class Order extends \Magento\Sales\Model\Resource\Report\Collection\AbstractColl
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Sales\Model\Resource\Report $resource,
+        \Magento\Sales\Model\ResourceModel\Report $resource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $resource->init('sales_refunded_aggregated_order');
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Refunded.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Refunded/Collection/Refunded.php
similarity index 85%
rename from app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Refunded.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Refunded/Collection/Refunded.php
index b93787a9c3a34c8003cadff3b4f1adf170d53da6..dd0fde69353e43bead3d07bcb0eaaeb067232850 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Refunded/Collection/Refunded.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Refunded/Collection/Refunded.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Refunded\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Refunded\Collection;
 
 /**
  * Sales report refunded collection
@@ -17,7 +17,7 @@ class Refunded extends Order
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Sales\Model\Resource\Report $resource
+     * @param \Magento\Sales\Model\ResourceModel\Report $resource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      */
     public function __construct(
@@ -25,7 +25,7 @@ class Refunded extends Order
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Sales\Model\Resource\Report $resource,
+        \Magento\Sales\Model\ResourceModel\Report $resource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $resource->init('sales_refunded_aggregated');
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Shipping.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Shipping.php
similarity index 99%
rename from app/code/Magento/Sales/Model/Resource/Report/Shipping.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Shipping.php
index 486493c39e6f03a86d36488a6c50164348a49605..73c1d069d9d9874827178d26c6879c93dbe84431 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Shipping.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Shipping.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report;
+namespace Magento\Sales\Model\ResourceModel\Report;
 
 /**
  * Shipping report resource model
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Order.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Shipping/Collection/Order.php
similarity index 91%
rename from app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Order.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Shipping/Collection/Order.php
index f4be9fb2be6e2181f62db47cf7cb410009884d9d..64ae9f6bad9297eb612d3334a54ffd3a5c217460 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Order.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Shipping/Collection/Order.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Shipping\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Shipping\Collection;
 
 /**
  * Sales report shipping collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Order extends \Magento\Sales\Model\Resource\Report\Collection\AbstractCollection
+class Order extends \Magento\Sales\Model\ResourceModel\Report\Collection\AbstractCollection
 {
     /**
      * Period format
@@ -31,7 +31,7 @@ class Order extends \Magento\Sales\Model\Resource\Report\Collection\AbstractColl
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Sales\Model\Resource\Report $resource
+     * @param \Magento\Sales\Model\ResourceModel\Report $resource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      */
     public function __construct(
@@ -39,7 +39,7 @@ class Order extends \Magento\Sales\Model\Resource\Report\Collection\AbstractColl
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Sales\Model\Resource\Report $resource,
+        \Magento\Sales\Model\ResourceModel\Report $resource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $resource->init('sales_shipping_aggregated_order');
diff --git a/app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Shipment.php b/app/code/Magento/Sales/Model/ResourceModel/Report/Shipping/Collection/Shipment.php
similarity index 85%
rename from app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Shipment.php
rename to app/code/Magento/Sales/Model/ResourceModel/Report/Shipping/Collection/Shipment.php
index 3e88292a747de8c845dd035061f50af43f175193..ba695373cedbbb148c099649c2b4b56ffaeacbec 100644
--- a/app/code/Magento/Sales/Model/Resource/Report/Shipping/Collection/Shipment.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Report/Shipping/Collection/Shipment.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Shipping\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Shipping\Collection;
 
 /**
  * Sales report shipping collection
@@ -17,7 +17,7 @@ class Shipment extends Order
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Sales\Model\Resource\Report $resource
+     * @param \Magento\Sales\Model\ResourceModel\Report $resource
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      */
     public function __construct(
@@ -25,7 +25,7 @@ class Shipment extends Order
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Sales\Model\Resource\Report $resource,
+        \Magento\Sales\Model\ResourceModel\Report $resource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $resource->init('sales_shipping_aggregated');
diff --git a/app/code/Magento/Sales/Model/Resource/Sale/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Sale/Collection.php
similarity index 93%
rename from app/code/Magento/Sales/Model/Resource/Sale/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Sale/Collection.php
index e47e38093a50a0ac3212ab92e4016c278199ad5d..37555ab7f2d3c4d3c8d61bfbf1a3fd751d5aaa4d 100644
--- a/app/code/Magento/Sales/Model/Resource/Sale/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Sale/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Sale;
+namespace Magento\Sales\Model\ResourceModel\Sale;
 
 use Magento\Framework\Data\Collection\EntityFactory;
 use Magento\Store\Model\StoreManagerInterface;
@@ -14,7 +14,7 @@ use Psr\Log\LoggerInterface as Logger;
 /**
  * Sales Collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Totals data
@@ -45,7 +45,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected $_orderStateCondition = null;
 
     /**
-     * @var \Magento\Store\Model\Resource\Store\CollectionFactory
+     * @var \Magento\Store\Model\ResourceModel\Store\CollectionFactory
      */
     protected $_storeCollectionFactory;
 
@@ -59,7 +59,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param Logger $logger
      * @param FetchStrategyInterface $fetchStrategy
      * @param ManagerInterface $eventManager
-     * @param \Magento\Store\Model\Resource\Store\CollectionFactory $storeCollectionFactory
+     * @param \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeCollectionFactory
      * @param StoreManagerInterface $storeManager
      */
     public function __construct(
@@ -67,7 +67,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         Logger $logger,
         FetchStrategyInterface $fetchStrategy,
         ManagerInterface $eventManager,
-        \Magento\Store\Model\Resource\Store\CollectionFactory $storeCollectionFactory,
+        \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeCollectionFactory,
         StoreManagerInterface $storeManager
     ) {
         $this->_storeCollectionFactory = $storeCollectionFactory;
@@ -86,7 +86,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\Sales\Model\Order', 'Magento\Sales\Model\Resource\Order');
+        $this->_init('Magento\Sales\Model\Order', 'Magento\Sales\Model\ResourceModel\Order');
     }
 
     /**
diff --git a/app/code/Magento/Sales/Model/Resource/Status/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Status/Collection.php
similarity index 72%
rename from app/code/Magento/Sales/Model/Resource/Status/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Status/Collection.php
index bdcbe49f60a0cf839e98df35a7f245548a3b4cad..ab2b6fe47ec6d98f5cbd1224d6d2187dc05b1a83 100644
--- a/app/code/Magento/Sales/Model/Resource/Status/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Status/Collection.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Status;
+namespace Magento\Sales\Model\ResourceModel\Status;
 
-class Collection extends \Magento\Sales\Model\Resource\Order\Status\Collection
+class Collection extends \Magento\Sales\Model\ResourceModel\Order\Status\Collection
 {
     /**
      * Join order states table
diff --git a/app/code/Magento/Sales/Model/Resource/Transaction/Grid/Collection.php b/app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/Collection.php
similarity index 73%
rename from app/code/Magento/Sales/Model/Resource/Transaction/Grid/Collection.php
rename to app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/Collection.php
index 0b396c97e29eb6f799828f0e59ba015e04215278..a9351c5f48037876de3a16df29e76ba36096fbae 100644
--- a/app/code/Magento/Sales/Model/Resource/Transaction/Grid/Collection.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/Collection.php
@@ -4,9 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Model\Resource\Transaction\Grid;
+namespace Magento\Sales\Model\ResourceModel\Transaction\Grid;
 
-class Collection extends \Magento\Sales\Model\Resource\Order\Payment\Transaction\Collection
+/**
+ * @SuppressWarnings(PHPMD.DepthOfInheritance)
+ */
+class Collection extends \Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection
 {
     /**
      * Core registry
@@ -20,20 +23,20 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Payment\Transaction
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot
+     * @param \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot
      * @param \Magento\Framework\Registry $registryManager
-     * @param null $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\DB\Adapter\AdapterInterface|null $connection
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot $entitySnapshot,
+        \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot $entitySnapshot,
         \Magento\Framework\Registry $registryManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->registryManager = $registryManager;
         parent::__construct(
diff --git a/app/code/Magento/Sales/Model/Resource/Transaction/Grid/TypeList.php b/app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/TypeList.php
similarity index 92%
rename from app/code/Magento/Sales/Model/Resource/Transaction/Grid/TypeList.php
rename to app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/TypeList.php
index 153300b4e4f4fa0c404763cd10c39f07b10112b9..7b9ac2a109482bc24f14284f8a889f9756e4a0d5 100644
--- a/app/code/Magento/Sales/Model/Resource/Transaction/Grid/TypeList.php
+++ b/app/code/Magento/Sales/Model/ResourceModel/Transaction/Grid/TypeList.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Transaction\Grid;
+namespace Magento\Sales\Model\ResourceModel\Transaction\Grid;
 
 use Magento\Sales\Api\TransactionRepositoryInterface;
 
diff --git a/app/code/Magento/Sales/Model/Rss/NewOrder.php b/app/code/Magento/Sales/Model/Rss/NewOrder.php
index f02e8328291def0fe3c61038eec7c6991159dc6b..8ffe8e0086d110736b9391227c72fb65179aa9ee 100644
--- a/app/code/Magento/Sales/Model/Rss/NewOrder.php
+++ b/app/code/Magento/Sales/Model/Rss/NewOrder.php
@@ -104,7 +104,7 @@ class NewOrder implements DataProviderInterface
 
         /** @var $order \Magento\Sales\Model\Order */
         $order = $this->orderFactory->create();
-        /** @var $collection \Magento\Sales\Model\Resource\Order\Collection */
+        /** @var $collection \Magento\Sales\Model\ResourceModel\Order\Collection */
         $collection = $order->getResourceCollection();
         $collection->addAttributeToFilter('created_at', ['date' => true, 'from' => $passDate])
             ->addAttributeToSort('created_at', 'desc');
diff --git a/app/code/Magento/Sales/Model/Rss/OrderStatus.php b/app/code/Magento/Sales/Model/Rss/OrderStatus.php
index 0ccf0f3705c5d849f61f2de5a24447048a51ec63..50a8b9f2d7d16c388cec0c0979860c68420dbaea 100644
--- a/app/code/Magento/Sales/Model/Rss/OrderStatus.php
+++ b/app/code/Magento/Sales/Model/Rss/OrderStatus.php
@@ -26,7 +26,7 @@ class OrderStatus implements DataProviderInterface
     protected $order;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Rss\OrderStatusFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Rss\OrderStatusFactory
      */
     protected $orderResourceFactory;
 
@@ -59,7 +59,7 @@ class OrderStatus implements DataProviderInterface
      * @param \Magento\Framework\ObjectManagerInterface $objectManager
      * @param \Magento\Framework\UrlInterface $urlBuilder
      * @param \Magento\Framework\App\RequestInterface $request
-     * @param \Magento\Sales\Model\Resource\Order\Rss\OrderStatusFactory $orderResourceFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Rss\OrderStatusFactory $orderResourceFactory
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
@@ -68,7 +68,7 @@ class OrderStatus implements DataProviderInterface
         \Magento\Framework\ObjectManagerInterface $objectManager,
         \Magento\Framework\UrlInterface $urlBuilder,
         \Magento\Framework\App\RequestInterface $request,
-        \Magento\Sales\Model\Resource\Order\Rss\OrderStatusFactory $orderResourceFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Rss\OrderStatusFactory $orderResourceFactory,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
@@ -165,7 +165,7 @@ class OrderStatus implements DataProviderInterface
      */
     protected function getEntries()
     {
-        /** @var $resourceModel \Magento\Sales\Model\Resource\Order\Rss\OrderStatus */
+        /** @var $resourceModel \Magento\Sales\Model\ResourceModel\Order\Rss\OrderStatus */
         $resourceModel = $this->orderResourceFactory->create();
         $results = $resourceModel->getAllCommentCollection($this->order->getId());
         $entries = [];
diff --git a/app/code/Magento/Sales/Observer/Backend/CatalogPriceRule.php b/app/code/Magento/Sales/Observer/Backend/CatalogPriceRule.php
new file mode 100644
index 0000000000000000000000000000000000000000..1aa86160a514660e0bdf3e79b33e17806e542182
--- /dev/null
+++ b/app/code/Magento/Sales/Observer/Backend/CatalogPriceRule.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Observer\Backend;
+
+use Magento\Framework\Event\ObserverInterface;
+
+class CatalogPriceRule implements ObserverInterface
+{
+    /**
+     * @var \Magento\Quote\Model\ResourceModel\Quote
+     */
+    protected $_quote;
+
+    /**
+     * @param \Magento\Quote\Model\ResourceModel\Quote $quote
+     */
+    public function __construct(\Magento\Quote\Model\ResourceModel\Quote $quote)
+    {
+        $this->_quote = $quote;
+    }
+
+    /**
+     * When applying a catalog price rule, make related quotes recollect on demand
+     *
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function execute(\Magento\Framework\Event\Observer $observer)
+    {
+        $this->_quote->markQuotesRecollectOnCatalogRules();
+    }
+}
diff --git a/app/code/Magento/Sales/Model/Observer/Backend/CatalogProductQuote.php b/app/code/Magento/Sales/Observer/Backend/CatalogProductSaveAfterObserver.php
similarity index 56%
rename from app/code/Magento/Sales/Model/Observer/Backend/CatalogProductQuote.php
rename to app/code/Magento/Sales/Observer/Backend/CatalogProductSaveAfterObserver.php
index b6e7642dbc47d8dc6815b1606d234cfd0d1fa4ae..6cd722d7793fb1c3bd44abe4d8637a924ffdca56 100644
--- a/app/code/Magento/Sales/Model/Observer/Backend/CatalogProductQuote.php
+++ b/app/code/Magento/Sales/Observer/Backend/CatalogProductSaveAfterObserver.php
@@ -3,19 +3,21 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer\Backend;
+namespace Magento\Sales\Observer\Backend;
 
-class CatalogProductQuote
+use Magento\Framework\Event\ObserverInterface;
+
+class CatalogProductSaveAfterObserver implements ObserverInterface
 {
     /**
-     * @var \Magento\Quote\Model\Resource\Quote
+     * @var \Magento\Quote\Model\ResourceModel\Quote
      */
     protected $_quote;
 
     /**
-     * @param \Magento\Quote\Model\Resource\Quote $quote
+     * @param \Magento\Quote\Model\ResourceModel\Quote $quote
      */
-    public function __construct(\Magento\Quote\Model\Resource\Quote $quote)
+    public function __construct(\Magento\Quote\Model\ResourceModel\Quote $quote)
     {
         $this->_quote = $quote;
     }
@@ -40,21 +42,9 @@ class CatalogProductQuote
      * @param \Magento\Framework\Event\Observer $observer
      * @return void
      */
-    public function catalogProductSaveAfter(\Magento\Framework\Event\Observer $observer)
+    public function execute(\Magento\Framework\Event\Observer $observer)
     {
         $product = $observer->getEvent()->getProduct();
         $this->_recollectQuotes($product->getId(), $product->getStatus());
     }
-
-    /**
-     * When deleting product, subtract it from all quotes quantities
-     *
-     * @param \Magento\Framework\Event\Observer $observer
-     * @return void
-     */
-    public function subtractQtyFromQuotes($observer)
-    {
-        $product = $observer->getEvent()->getProduct();
-        $this->_quote->substractProductFromQuotes($product);
-    }
 }
diff --git a/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php b/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php
new file mode 100644
index 0000000000000000000000000000000000000000..e213c3083ee681cdd3b2a04bd14eab4e829dc800
--- /dev/null
+++ b/app/code/Magento/Sales/Observer/Backend/SubtractQtyFromQuotesObserver.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Observer\Backend;
+
+use Magento\Framework\Event\ObserverInterface;
+
+class SubtractQtyFromQuotesObserver implements ObserverInterface
+{
+    /**
+     * @var \Magento\Quote\Model\ResourceModel\Quote
+     */
+    protected $_quote;
+
+    /**
+     * @param \Magento\Quote\Model\ResourceModel\Quote $quote
+     */
+    public function __construct(\Magento\Quote\Model\ResourceModel\Quote $quote)
+    {
+        $this->_quote = $quote;
+    }
+
+    /**
+     * When deleting product, subtract it from all quotes quantities
+     *
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     */
+    public function execute(\Magento\Framework\Event\Observer $observer)
+    {
+        $product = $observer->getEvent()->getProduct();
+        $this->_quote->substractProductFromQuotes($product);
+    }
+}
diff --git a/app/code/Magento/Sales/Model/Observer/Frontend/Quote/AddVatRequestParamsOrderComment.php b/app/code/Magento/Sales/Observer/Frontend/AddVatRequestParamsOrderComment.php
similarity index 66%
rename from app/code/Magento/Sales/Model/Observer/Frontend/Quote/AddVatRequestParamsOrderComment.php
rename to app/code/Magento/Sales/Observer/Frontend/AddVatRequestParamsOrderComment.php
index 649c92c04a358562f3fadc3f31fb491475dab08d..f3547099289a9ad8cf7e890fbe6acf50096a018a 100644
--- a/app/code/Magento/Sales/Model/Observer/Frontend/Quote/AddVatRequestParamsOrderComment.php
+++ b/app/code/Magento/Sales/Observer/Frontend/AddVatRequestParamsOrderComment.php
@@ -3,14 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer\Frontend\Quote;
+namespace Magento\Sales\Observer\Frontend;
 
 use Magento\Customer\Helper\Address as CustomerAddress;
+use Magento\Customer\Model\Address\AbstractAddress;
+use Magento\Framework\Event\Observer;
+use Magento\Framework\Event\ObserverInterface;
+use Magento\Sales\Model\Order;
+use Magento\Sales\Model\Order\Address;
 
 /**
  * Class AddVatRequestParamsOrderComment
  */
-class AddVatRequestParamsOrderComment
+class AddVatRequestParamsOrderComment implements ObserverInterface
 {
     /**
      * Customer address
@@ -30,16 +35,16 @@ class AddVatRequestParamsOrderComment
     /**
      * Add VAT validation request date and identifier to order comments
      *
-     * @param \Magento\Framework\Event\Observer $observer
+     * @param Observer $observer
      * @return void
      */
-    public function execute(\Magento\Framework\Event\Observer $observer)
+    public function execute(Observer $observer)
     {
-        /** @var $orderInstance \Magento\Sales\Model\Order */
+        /** @var $orderInstance Order */
         $orderInstance = $observer->getOrder();
-        /** @var $orderAddress \Magento\Sales\Model\Order\Address */
+        /** @var $orderAddress Address */
         $orderAddress = $this->_getVatRequiredSalesAddress($orderInstance);
-        if (!$orderAddress instanceof \Magento\Sales\Model\Order\Address) {
+        if (!$orderAddress instanceof Address) {
             return;
         }
 
@@ -60,22 +65,17 @@ class AddVatRequestParamsOrderComment
     /**
      * Retrieve sales address (order or quote) on which tax calculation must be based
      *
-     * @param \Magento\Sales\Model\Order $order
+     * @param Order $order
      * @param \Magento\Store\Model\Store|string|int|null $store
-     * @return \Magento\Sales\Model\Order\Address|null
+     * @return Address|null
      */
     protected function _getVatRequiredSalesAddress($order, $store = null)
     {
         $configAddressType = $this->customerAddressHelper->getTaxCalculationAddressType($store);
-        $requiredAddress = null;
-        switch ($configAddressType) {
-            case \Magento\Customer\Model\Address\AbstractAddress::TYPE_SHIPPING:
-                $requiredAddress = $order->getShippingAddress();
-                break;
-            default:
-                $requiredAddress = $order->getBillingAddress();
-                break;
-        }
+        $requiredAddress = $configAddressType === AbstractAddress::TYPE_SHIPPING
+            ? $order->getShippingAddress()
+            : $order->getBillingAddress();
+
         return $requiredAddress;
     }
 }
diff --git a/app/code/Magento/Sales/Model/Observer/Frontend/Quote/RestoreCustomerGroupId.php b/app/code/Magento/Sales/Observer/Frontend/RestoreCustomerGroupId.php
similarity index 69%
rename from app/code/Magento/Sales/Model/Observer/Frontend/Quote/RestoreCustomerGroupId.php
rename to app/code/Magento/Sales/Observer/Frontend/RestoreCustomerGroupId.php
index 1384cfecce1e13aec6560a12ae10fe49dc0fba29..fd0600014eb1c1d0a0583b11c881d47f5265fc6c 100644
--- a/app/code/Magento/Sales/Model/Observer/Frontend/Quote/RestoreCustomerGroupId.php
+++ b/app/code/Magento/Sales/Observer/Frontend/RestoreCustomerGroupId.php
@@ -3,14 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer\Frontend\Quote;
+namespace Magento\Sales\Observer\Frontend;
 
 use Magento\Customer\Helper\Address as CustomerAddress;
+use Magento\Customer\Model\Address\AbstractAddress;
+use Magento\Framework\Event\Observer;
+use Magento\Framework\Event\ObserverInterface;
+use Magento\Quote\Api\Data\ShippingAssignmentInterface;
+use Magento\Quote\Model\Quote;
 
 /**
  * Class RestoreCustomerGroupId
  */
-class RestoreCustomerGroupId
+class RestoreCustomerGroupId implements ObserverInterface
 {
     /**
      * Customer address
@@ -30,21 +35,21 @@ class RestoreCustomerGroupId
     /**
      * Restore initial customer group ID in quote if needed on collect_totals_after event of quote address
      *
-     * @param \Magento\Framework\Event\Observer $observer
+     * @param Observer $observer
      * @return void
      */
-    public function execute($observer)
+    public function execute(Observer $observer)
     {
-        /** @var \Magento\Quote\Api\Data\ShippingAssignmentInterface $shippingAssignment */
+        /** @var ShippingAssignmentInterface $shippingAssignment */
         $shippingAssignment = $observer->getEvent()->getShippingAssignment();
-        /** @var \Magento\Quote\Model\Quote $quote */
+        /** @var Quote $quote */
         $quote = $observer->getEvent()->getQuote();
 
         $address = $shippingAssignment->getShipping()->getAddress();
         $configAddressType = $this->customerAddressHelper->getTaxCalculationAddressType();
         // Restore initial customer group ID in quote only if VAT is calculated based on shipping address
         if ($address->hasPrevQuoteCustomerGroupId() &&
-            $configAddressType == \Magento\Customer\Model\Address\AbstractAddress::TYPE_SHIPPING
+            $configAddressType == AbstractAddress::TYPE_SHIPPING
         ) {
             $quote->setCustomerGroupId($address->getPrevQuoteCustomerGroupId());
             $address->unsPrevQuoteCustomerGroupId();
diff --git a/app/code/Magento/Sales/Observer/GridAsyncInsertObserver.php b/app/code/Magento/Sales/Observer/GridAsyncInsertObserver.php
new file mode 100644
index 0000000000000000000000000000000000000000..b6667193bf44dbf3f9d155066f2bb58315dbc2e0
--- /dev/null
+++ b/app/code/Magento/Sales/Observer/GridAsyncInsertObserver.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Observer;
+
+use Magento\Framework\Event\ObserverInterface;
+
+/**
+ * Sales entity grids indexing observer.
+ *
+ * Performs handling of events related to indexing
+ * of Order, Invoice, Shipment and Creditmemo grids.
+ */
+class GridAsyncInsertObserver implements ObserverInterface
+{
+    /**
+     * @var \Magento\Sales\Model\GridAsyncInsert
+     */
+    protected $asyncInsert;
+
+    /**
+     * @param \Magento\Sales\Model\GridAsyncInsert $asyncInsert
+     */
+    public function __construct(
+        \Magento\Sales\Model\GridAsyncInsert $asyncInsert
+    ) {
+        $this->asyncInsert = $asyncInsert;
+    }
+
+    /**
+     * Handles asynchronous insertion of the new entity into
+     * corresponding grid during cron job.
+     *
+     * Also method is used in the next events:
+     *
+     * - config_data_dev_grid_async_indexing_disabled
+     *
+     * Works only if asynchronous grid indexing is enabled
+     * in global settings.
+     *
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function execute(\Magento\Framework\Event\Observer $observer)
+    {
+        $this->asyncInsert->asyncInsert();
+    }
+}
diff --git a/app/code/Magento/Sales/Model/Observer/IndexGrid.php b/app/code/Magento/Sales/Observer/GridSyncInsertObserver.php
similarity index 50%
rename from app/code/Magento/Sales/Model/Observer/IndexGrid.php
rename to app/code/Magento/Sales/Observer/GridSyncInsertObserver.php
index d0c99b16c5d0bf285578b12e9177ee6dcea772b1..aae81b1e37c30f6328fa0638ce18b0d3ed773db3 100644
--- a/app/code/Magento/Sales/Model/Observer/IndexGrid.php
+++ b/app/code/Magento/Sales/Observer/GridSyncInsertObserver.php
@@ -3,7 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer;
+namespace Magento\Sales\Observer;
+
+use Magento\Framework\Event\ObserverInterface;
 
 /**
  * Sales entity grids indexing observer.
@@ -11,12 +13,12 @@ namespace Magento\Sales\Model\Observer;
  * Performs handling of events and cron jobs related to indexing
  * of Order, Invoice, Shipment and Creditmemo grids.
  */
-class IndexGrid
+class GridSyncInsertObserver implements ObserverInterface
 {
     /**
      * Entity grid model.
      *
-     * @var \Magento\Sales\Model\Resource\GridInterface
+     * @var \Magento\Sales\Model\ResourceModel\GridInterface
      */
     protected $entityGrid;
 
@@ -28,11 +30,11 @@ class IndexGrid
     protected $globalConfig;
 
     /**
-     * @param \Magento\Sales\Model\Resource\GridInterface $entityGrid
+     * @param \Magento\Sales\Model\ResourceModel\GridInterface $entityGrid
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
      */
     public function __construct(
-        \Magento\Sales\Model\Resource\GridInterface $entityGrid,
+        \Magento\Sales\Model\ResourceModel\GridInterface $entityGrid,
         \Magento\Framework\App\Config\ScopeConfigInterface $globalConfig
     ) {
         $this->entityGrid = $entityGrid;
@@ -56,49 +58,10 @@ class IndexGrid
      * @param \Magento\Framework\Event\Observer $observer
      * @return void
      */
-    public function syncInsert(\Magento\Framework\Event\Observer $observer)
+    public function execute(\Magento\Framework\Event\Observer $observer)
     {
         if (!$this->globalConfig->getValue('dev/grid/async_indexing')) {
             $this->entityGrid->refresh($observer->getObject()->getId());
         }
     }
-
-    /**
-     * Handles synchronous removing of the entity from
-     * corresponding grid on certain events.
-     *
-     * Used in the next events:
-     *
-     *  - sales_order_delete_after
-     *  - sales_order_invoice_delete_after
-     *  - sales_order_shipment_delete_after
-     *  - sales_order_creditmemo_delete_after
-     *
-     * @param \Magento\Framework\Event\Observer $observer
-     * @return void
-     */
-    public function syncRemove(\Magento\Framework\Event\Observer $observer)
-    {
-        $this->entityGrid->purge($observer->getDataObject()->getId());
-    }
-
-    /**
-     * Handles asynchronous insertion of the new entity into
-     * corresponding grid during cron job.
-     *
-     * Also method is used in the next events:
-     *
-     * - config_data_dev_grid_async_indexing_disabled
-     *
-     * Works only if asynchronous grid indexing is enabled
-     * in global settings.
-     *
-     * @return void
-     */
-    public function asyncInsert()
-    {
-        if ($this->globalConfig->getValue('dev/grid/async_indexing')) {
-            $this->entityGrid->refreshBySchedule();
-        }
-    }
 }
diff --git a/app/code/Magento/Sales/Observer/GridSyncRemoveObserver.php b/app/code/Magento/Sales/Observer/GridSyncRemoveObserver.php
new file mode 100644
index 0000000000000000000000000000000000000000..c4119fb0f44c9ea813547ab762cfe8e6f63689ac
--- /dev/null
+++ b/app/code/Magento/Sales/Observer/GridSyncRemoveObserver.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Observer;
+
+use Magento\Framework\Event\ObserverInterface;
+
+/**
+ * Sales entity grids indexing observer.
+ *
+ * Performs handling of events and cron jobs related to indexing
+ * of Order, Invoice, Shipment and Creditmemo grids.
+ */
+class GridSyncRemoveObserver implements ObserverInterface
+{
+    /**
+     * Entity grid model.
+     *
+     * @var \Magento\Sales\Model\ResourceModel\GridInterface
+     */
+    protected $entityGrid;
+
+    /**
+     * @param \Magento\Sales\Model\ResourceModel\GridInterface $entityGrid
+     */
+    public function __construct(
+        \Magento\Sales\Model\ResourceModel\GridInterface $entityGrid
+    ) {
+        $this->entityGrid = $entityGrid;
+    }
+
+    /**
+     * Handles synchronous removing of the entity from
+     * corresponding grid on certain events.
+     *
+     * Used in the next events:
+     *
+     *  - sales_order_delete_after
+     *  - sales_order_invoice_delete_after
+     *  - sales_order_shipment_delete_after
+     *  - sales_order_creditmemo_delete_after
+     *
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     */
+    public function execute(\Magento\Framework\Event\Observer $observer)
+    {
+        $this->entityGrid->purge($observer->getDataObject()->getId());
+    }
+}
diff --git a/app/code/Magento/Sales/Observer/Virtual/SendEmails.php b/app/code/Magento/Sales/Observer/Virtual/SendEmails.php
new file mode 100644
index 0000000000000000000000000000000000000000..561169fba08c9d3eb4dc5085756ff7288075bed6
--- /dev/null
+++ b/app/code/Magento/Sales/Observer/Virtual/SendEmails.php
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Observer\Virtual;
+
+use Magento\Framework\Event\ObserverInterface;
+
+/**
+ * Sales emails sending observer.
+ *
+ * Performs handling of cron jobs related to sending emails to customers
+ * after creation/modification of Order, Invoice, Shipment or Creditmemo.
+ */
+class SendEmails implements ObserverInterface
+{
+    /**
+     * Global configuration storage.
+     *
+     * @var \Magento\Sales\Model\EmailSenderHandler
+     */
+    protected $emailSenderHandler;
+
+    /**
+     * @param \Magento\Sales\Model\EmailSenderHandler $emailSenderHandler
+     */
+    public function __construct(\Magento\Sales\Model\EmailSenderHandler $emailSenderHandler)
+    {
+        $this->emailSenderHandler = $emailSenderHandler;
+    }
+
+    /**
+     * Handles asynchronous email sending during corresponding
+     * cron job.
+     *
+     * Also method is used in the next events:
+     *
+     * - config_data_sales_email_general_async_sending_disabled
+     *
+     * Works only if asynchronous email sending is enabled
+     * in global settings.
+     *
+     * @param \Magento\Framework\Event\Observer $observer
+     * @return void
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     */
+    public function execute(\Magento\Framework\Event\Observer $observer)
+    {
+        $this->emailSenderHandler->sendEmails();
+    }
+}
diff --git a/app/code/Magento/Sales/Setup/SalesSetup.php b/app/code/Magento/Sales/Setup/SalesSetup.php
index b135ce4d73de0fc11a08c390a40b085e6360799f..59a99044e17b867d5593e2027ebf2549c9e204e2 100644
--- a/app/code/Magento/Sales/Setup/SalesSetup.php
+++ b/app/code/Magento/Sales/Setup/SalesSetup.php
@@ -6,7 +6,7 @@
 namespace Magento\Sales\Setup;
 
 use Magento\Eav\Model\Entity\Setup\Context;
-use Magento\Eav\Model\Resource\Entity\Attribute\Group\CollectionFactory;
+use Magento\Eav\Model\ResourceModel\Entity\Attribute\Group\CollectionFactory;
 use Magento\Framework\App\CacheInterface;
 use Magento\Framework\App\Config\ScopeConfigInterface;
 use Magento\Framework\Encryption\EncryptorInterface;
@@ -214,30 +214,30 @@ class SalesSetup extends \Magento\Eav\Setup\EavSetup
     {
         $entities = [
             'order' => [
-                'entity_model' => 'Magento\Sales\Model\Resource\Order',
+                'entity_model' => 'Magento\Sales\Model\ResourceModel\Order',
                 'table' => 'sales_order',
-                'increment_model' => 'Magento\Eav\Model\Entity\Increment\Numeric',
+                'increment_model' => 'Magento\Eav\Model\Entity\Increment\NumericValue',
                 'increment_per_store' => true,
                 'attributes' => [],
             ],
             'invoice' => [
-                'entity_model' => 'Magento\Sales\Model\Resource\Order\Invoice',
+                'entity_model' => 'Magento\Sales\Model\ResourceModel\Order\Invoice',
                 'table' => 'sales_invoice',
-                'increment_model' => 'Magento\Eav\Model\Entity\Increment\Numeric',
+                'increment_model' => 'Magento\Eav\Model\Entity\Increment\NumericValue',
                 'increment_per_store' => true,
                 'attributes' => [],
             ],
             'creditmemo' => [
-                'entity_model' => 'Magento\Sales\Model\Resource\Order\Creditmemo',
+                'entity_model' => 'Magento\Sales\Model\ResourceModel\Order\Creditmemo',
                 'table' => 'sales_creditmemo',
-                'increment_model' => 'Magento\Eav\Model\Entity\Increment\Numeric',
+                'increment_model' => 'Magento\Eav\Model\Entity\Increment\NumericValue',
                 'increment_per_store' => true,
                 'attributes' => [],
             ],
             'shipment' => [
-                'entity_model' => 'Magento\Sales\Model\Resource\Order\Shipment',
+                'entity_model' => 'Magento\Sales\Model\ResourceModel\Order\Shipment',
                 'table' => 'sales_shipment',
-                'increment_model' => 'Magento\Eav\Model\Entity\Increment\Numeric',
+                'increment_model' => 'Magento\Eav\Model\Entity\Increment\NumericValue',
                 'increment_per_store' => true,
                 'attributes' => [],
             ],
diff --git a/app/code/Magento/Sales/Setup/UpgradeData.php b/app/code/Magento/Sales/Setup/UpgradeData.php
new file mode 100644
index 0000000000000000000000000000000000000000..f3283b97bd27e4c1ebc03b5b9bbd390624a0d124
--- /dev/null
+++ b/app/code/Magento/Sales/Setup/UpgradeData.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Sales\Setup;
+
+use Magento\Framework\Setup\UpgradeDataInterface;
+use Magento\Framework\Setup\ModuleContextInterface;
+use Magento\Framework\Setup\ModuleDataSetupInterface;
+
+class UpgradeData implements UpgradeDataInterface
+{
+    /**
+     * Sales setup factory
+     *
+     * @var SalesSetupFactory
+     */
+    protected $salesSetupFactory;
+
+    /**
+     * @var \Magento\Eav\Model\Config
+     */
+    protected $eavConfig;
+
+    /**
+     * @param SalesSetupFactory $salesSetupFactory
+     * @param \Magento\Eav\Model\Config $eavConfig
+     */
+    public function __construct(
+        SalesSetupFactory $salesSetupFactory,
+        \Magento\Eav\Model\Config $eavConfig
+    ) {
+        $this->salesSetupFactory = $salesSetupFactory;
+        $this->eavConfig = $eavConfig;
+    }
+
+    /**
+     * {@inheritdoc}
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
+    public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
+    {
+        $setup->startSetup();
+
+        /** @var SalesSetup $salesSetup */
+        $salesSetup = $this->salesSetupFactory->create(['setup' => $setup]);
+
+        if (version_compare($context->getVersion(), '2.0.1', '<')) {
+            $salesSetup->updateEntityType(
+                \Magento\Sales\Model\Order::ENTITY,
+                'entity_model',
+                'Magento\Sales\Model\ResourceModel\Order'
+            );
+            $salesSetup->updateEntityType(
+                \Magento\Sales\Model\Order::ENTITY,
+                'increment_model',
+                'Magento\Eav\Model\Entity\Increment\NumericValue'
+            );
+            $salesSetup->updateEntityType(
+                'invoice',
+                'entity_model',
+                'Magento\Sales\Model\ResourceModel\Order'
+            );
+            $salesSetup->updateEntityType(
+                'invoice',
+                'increment_model',
+                'Magento\Eav\Model\Entity\Increment\NumericValue'
+            );
+            $salesSetup->updateEntityType(
+                'creditmemo',
+                'entity_model',
+                'Magento\Sales\Model\ResourceModel\Order\Creditmemo'
+            );
+            $salesSetup->updateEntityType(
+                'creditmemo',
+                'increment_model',
+                'Magento\Eav\Model\Entity\Increment\NumericValue'
+            );
+            $salesSetup->updateEntityType(
+                'shipment',
+                'entity_model',
+                'Magento\Sales\Model\ResourceModel\Order\Shipment'
+            );
+            $salesSetup->updateEntityType(
+                'shipment',
+                'increment_model',
+                'Magento\Eav\Model\Entity\Increment\NumericValue'
+            );
+        }
+        $this->eavConfig->clear();
+        $setup->endSetup();
+    }
+}
diff --git a/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Status/Assign/FormTest.php b/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Status/Assign/FormTest.php
index b2f1555a3fc64da966fa6c8e03ac0d45f8586408..fe0a4949fa471ec97c18bf46e5d8cfe1bbfabe6c 100644
--- a/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Status/Assign/FormTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Block/Adminhtml/Order/Status/Assign/FormTest.php
@@ -24,7 +24,7 @@ class FormTest extends \PHPUnit_Framework_TestCase
     protected $formFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Status\CollectionFactory | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory | \PHPUnit_Framework_MockObject_MockObject
      */
     protected $collectionFactory;
 
@@ -39,7 +39,7 @@ class FormTest extends \PHPUnit_Framework_TestCase
 
         $this->formFactory = $this->getMock('Magento\Framework\Data\FormFactory', ['create'], [], '', false);
         $this->collectionFactory = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory',
             ['create'],
             [],
             '',
@@ -69,7 +69,7 @@ class FormTest extends \PHPUnit_Framework_TestCase
 
         $form = $this->getMock('Magento\Framework\Data\Form', [], [], '', false);
         $fieldset = $this->getMock('Magento\Framework\Data\Form\Element\Fieldset', [], [], '', false);
-        $collection = $this->getMock('Magento\Sales\Model\Resource\Order\Status\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Sales\Model\ResourceModel\Order\Status\Collection', [], [], '', false);
 
         $form->expects($this->once())
             ->method('addFieldset')
diff --git a/app/code/Magento/Sales/Test/Unit/Block/Order/HistoryTest.php b/app/code/Magento/Sales/Test/Unit/Block/Order/HistoryTest.php
index fcff002255a0610b1c8ffb9f6a10c6c6a40a4653..cfe163b08313eaa56d9fb9b8f6badc69b2de43ad 100644
--- a/app/code/Magento/Sales/Test/Unit/Block/Order/HistoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Block/Order/HistoryTest.php
@@ -18,7 +18,7 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
     protected $context;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderCollectionFactory;
 
@@ -45,7 +45,8 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->context = $this->getMock('Magento\Framework\View\Element\Template\Context', [], [], '', false, false);
-        $this->orderCollectionFactory = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\CollectionFactory')
+        $this->orderCollectionFactory =
+            $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\CollectionFactory')
             ->disableOriginalConstructor()->setMethods(['create'])->getMock();
 
         $this->customerSession = $this->getMockBuilder('Magento\Customer\Model\Session')
@@ -76,7 +77,7 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($statuses));
 
         $orderCollection = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Collection',
             ['addFieldToSelect', 'addFieldToFilter', 'setOrder'],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Block/Order/RecentTest.php b/app/code/Magento/Sales/Test/Unit/Block/Order/RecentTest.php
index a0b88ac060af55a682a1df24d8883461299c777f..5f2c7e0972b30b0de2af5fe2c0ea1765d11a7f63 100644
--- a/app/code/Magento/Sales/Test/Unit/Block/Order/RecentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Block/Order/RecentTest.php
@@ -18,7 +18,7 @@ class RecentTest extends \PHPUnit_Framework_TestCase
     protected $context;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderCollectionFactory;
 
@@ -36,7 +36,7 @@ class RecentTest extends \PHPUnit_Framework_TestCase
     {
         $this->context = $this->getMock('Magento\Framework\View\Element\Template\Context', [], [], '', false, false);
         $this->orderCollectionFactory = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\CollectionFactory',
             ['create'],
             [],
             '',
@@ -80,7 +80,7 @@ class RecentTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($statuses));
 
         $orderCollection = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Collection',
             [
                 'addAttributeToSelect',
                 'addFieldToFilter',
diff --git a/app/code/Magento/Sales/Test/Unit/Block/Reorder/SidebarTest.php b/app/code/Magento/Sales/Test/Unit/Block/Reorder/SidebarTest.php
index 5c34eb49fdbb927b11b9d118abe742663a0450b6..80aba86fa54770dab38abefc2229201b2e2cbe3b 100644
--- a/app/code/Magento/Sales/Test/Unit/Block/Reorder/SidebarTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Block/Reorder/SidebarTest.php
@@ -25,7 +25,7 @@ class SidebarTest extends \PHPUnit_Framework_TestCase
     protected $context;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderCollectionFactory;
 
@@ -45,7 +45,7 @@ class SidebarTest extends \PHPUnit_Framework_TestCase
     protected $httpContext;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderCollection;
 
@@ -69,7 +69,7 @@ class SidebarTest extends \PHPUnit_Framework_TestCase
         $this->context = $this->getMock('Magento\Framework\View\Element\Template\Context', [], [], '', false);
         $this->httpContext = $this->getMock('Magento\Framework\App\Http\Context', ['getValue'], [], '', false);
         $this->orderCollectionFactory = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\CollectionFactory',
             ['create'],
             [],
             '',
@@ -90,7 +90,7 @@ class SidebarTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->orderCollection = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Collection',
             [
                 'addAttributeToFilter',
                 'addAttributeToSort',
@@ -175,7 +175,7 @@ class SidebarTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue([$websiteId]));
 
         $item = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Item',
+            'Magento\Sales\Model\ResourceModel\Order\Item',
             ['__wakeup', 'getProduct'],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/CancelTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/CancelTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..186a40730f98aef4490443006c1338d5d0c2bf76
--- /dev/null
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/CancelTest.php
@@ -0,0 +1,142 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Sales\Test\Unit\Controller\Adminhtml\Order;
+
+use Magento\Framework\App\Action\Context;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
+
+/**
+ * Class CancelTest
+ */
+class CancelTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Sales\Controller\Adminhtml\Order\Cancel
+     */
+    protected $controller;
+
+    /**
+     * @var Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $context;
+
+    /**
+     * @var \Magento\Backend\Model\View\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultRedirect;
+
+    /**
+     * @var \Magento\Framework\App\Request\Http|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $request;
+
+    /**
+     * @var \Magento\Framework\App\ResponseInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $response;
+
+    /**
+     * @var \Magento\Framework\Message\Manager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $messageManager;
+
+    /**
+     * @var \Magento\Sales\Api\OrderRepositoryInterface
+     */
+    protected $orderRepositoryMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $validatorMock;
+
+    /**
+     * @var \Magento\Framework\ObjectManager\ObjectManager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $objectManager;
+
+    public function setUp()
+    {
+        $objectManagerHelper = new ObjectManagerHelper($this);
+        $this->context = $this->getMock(
+            'Magento\Backend\App\Action\Context',
+            [],
+            [],
+            '',
+            false
+        );
+        $resultRedirectFactory = $this->getMock(
+            'Magento\Backend\Model\View\Result\RedirectFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+        $this->response = $this->getMock(
+            'Magento\Framework\App\ResponseInterface',
+            ['setRedirect', 'sendResponse'],
+            [],
+            '',
+            false
+        );
+        $this->request = $this->getMockBuilder('Magento\Framework\App\Request\Http')
+            ->disableOriginalConstructor()->getMock();
+        $this->messageManager = $this->getMock(
+            'Magento\Framework\Message\Manager',
+            ['addSuccess', 'addError'],
+            [],
+            '',
+            false
+        );
+        $this->orderRepositoryMock = $this->getMockBuilder('Magento\Sales\Api\OrderRepositoryInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->validatorMock = $this->getMockBuilder('Magento\Framework\Data\Form\FormKey\Validator')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->resultRedirect = $this->getMock('Magento\Backend\Model\View\Result\Redirect', [], [], '', false);
+        $resultRedirectFactory->expects($this->any())->method('create')->willReturn($this->resultRedirect);
+
+        $this->context->expects($this->once())->method('getMessageManager')->willReturn($this->messageManager);
+        $this->context->expects($this->any())->method('getRequest')->willReturn($this->request);
+        $this->context->expects($this->once())->method('getResponse')->willReturn($this->response);
+        $this->context->expects($this->once())->method('getObjectManager')->willReturn($this->objectManager);
+        $this->context->expects($this->once())->method('getResultRedirectFactory')->willReturn($resultRedirectFactory);
+        $this->context->expects($this->once())->method('getFormKeyValidator')->willReturn($this->validatorMock);
+
+        $this->controller = $objectManagerHelper->getObject(
+            'Magento\Sales\Controller\Adminhtml\Order\Cancel',
+            [
+                'context' => $this->context,
+                'request' => $this->request,
+                'response' => $this->response,
+                'orderRepository' => $this->orderRepositoryMock
+            ]
+        );
+    }
+
+    public function testExecuteNotPost()
+    {
+        $this->validatorMock->expects($this->once())
+            ->method('validate')
+            ->willReturn(false);
+        $this->request->expects($this->once())
+            ->method('isPost')
+            ->willReturn(false);
+        $this->messageManager->expects($this->once())
+            ->method('addError')
+            ->with('You have not canceled the item.');
+        $this->resultRedirect->expects($this->once())
+            ->method('setPath')
+            ->with('sales/*/')
+            ->willReturnSelf();
+
+        $this->assertEquals($this->resultRedirect, $this->controller->execute());
+    }
+}
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/HoldTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/HoldTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..18dd6a8c8b3376d7cf936aafd0351afd9e922d3a
--- /dev/null
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/HoldTest.php
@@ -0,0 +1,142 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Sales\Test\Unit\Controller\Adminhtml\Order;
+
+use Magento\Framework\App\Action\Context;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
+
+/**
+ * Class HoldTest
+ */
+class HoldTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Sales\Controller\Adminhtml\Order\Hold
+     */
+    protected $controller;
+
+    /**
+     * @var Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $context;
+
+    /**
+     * @var \Magento\Backend\Model\View\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultRedirect;
+
+    /**
+     * @var \Magento\Framework\App\Request\Http|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $request;
+
+    /**
+     * @var \Magento\Framework\App\ResponseInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $response;
+
+    /**
+     * @var \Magento\Framework\Message\Manager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $messageManager;
+
+    /**
+     * @var \Magento\Sales\Api\OrderRepositoryInterface
+     */
+    protected $orderRepositoryMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $validatorMock;
+
+    /**
+     * @var \Magento\Framework\ObjectManager\ObjectManager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $objectManager;
+
+    public function setUp()
+    {
+        $objectManagerHelper = new ObjectManagerHelper($this);
+        $this->context = $this->getMock(
+            'Magento\Backend\App\Action\Context',
+            [],
+            [],
+            '',
+            false
+        );
+        $resultRedirectFactory = $this->getMock(
+            'Magento\Backend\Model\View\Result\RedirectFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+        $this->response = $this->getMock(
+            'Magento\Framework\App\ResponseInterface',
+            ['setRedirect', 'sendResponse'],
+            [],
+            '',
+            false
+        );
+        $this->request = $this->getMockBuilder('Magento\Framework\App\Request\Http')
+            ->disableOriginalConstructor()->getMock();
+        $this->messageManager = $this->getMock(
+            'Magento\Framework\Message\Manager',
+            ['addSuccess', 'addError'],
+            [],
+            '',
+            false
+        );
+        $this->orderRepositoryMock = $this->getMockBuilder('Magento\Sales\Api\OrderRepositoryInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->validatorMock = $this->getMockBuilder('Magento\Framework\Data\Form\FormKey\Validator')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->resultRedirect = $this->getMock('Magento\Backend\Model\View\Result\Redirect', [], [], '', false);
+        $resultRedirectFactory->expects($this->any())->method('create')->willReturn($this->resultRedirect);
+
+        $this->context->expects($this->once())->method('getMessageManager')->willReturn($this->messageManager);
+        $this->context->expects($this->any())->method('getRequest')->willReturn($this->request);
+        $this->context->expects($this->once())->method('getResponse')->willReturn($this->response);
+        $this->context->expects($this->once())->method('getObjectManager')->willReturn($this->objectManager);
+        $this->context->expects($this->once())->method('getResultRedirectFactory')->willReturn($resultRedirectFactory);
+        $this->context->expects($this->once())->method('getFormKeyValidator')->willReturn($this->validatorMock);
+
+        $this->controller = $objectManagerHelper->getObject(
+            'Magento\Sales\Controller\Adminhtml\Order\Hold',
+            [
+                'context' => $this->context,
+                'request' => $this->request,
+                'response' => $this->response,
+                'orderRepository' => $this->orderRepositoryMock
+            ]
+        );
+    }
+
+    public function testExecuteNotPost()
+    {
+        $this->validatorMock->expects($this->once())
+            ->method('validate')
+            ->willReturn(false);
+        $this->request->expects($this->once())
+            ->method('isPost')
+            ->willReturn(false);
+        $this->messageManager->expects($this->once())
+            ->method('addError')
+            ->with('You have not put the order on hold.');
+        $this->resultRedirect->expects($this->once())
+            ->method('setPath')
+            ->with('sales/*/')
+            ->willReturnSelf();
+
+        $this->assertEquals($this->resultRedirect, $this->controller->execute());
+    }
+}
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/SaveTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/SaveTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..619b6b0bbba4b665a6c426a48585f99d76f5e22a
--- /dev/null
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/Invoice/SaveTest.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Test\Unit\Controller\Adminhtml\Order\Invoice;
+
+use Magento\Backend\App\Action;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+
+/**
+ * Class SaveTest
+ */
+class SaveTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultPageFactoryMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $formKeyValidatorMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $requestMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $responseMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $messageManagerMock;
+
+    /**
+     * @var \Magento\Sales\Controller\Adminhtml\Order\Invoice\Save
+     */
+    protected $controller;
+
+    /**
+     * SetUp method
+     *
+     * @return void
+     */
+    public function setUp()
+    {
+        $objectManager = new ObjectManager($this);
+
+        $this->requestMock = $this->getMockBuilder('Magento\Framework\App\Request\Http')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+        $this->responseMock = $this->getMockBuilder('Magento\Framework\App\Response\Http')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->resultPageFactoryMock = $this->getMockBuilder('Magento\Framework\View\Result\PageFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+
+        $this->formKeyValidatorMock = $this->getMockBuilder('Magento\Framework\Data\Form\FormKey\Validator')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->messageManagerMock = $this->getMockBuilder('Magento\Framework\Message\ManagerInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $contextMock = $this->getMockBuilder('Magento\Backend\App\Action\Context')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())
+            ->method('getRequest')
+            ->will($this->returnValue($this->requestMock));
+        $contextMock->expects($this->any())
+            ->method('getResponse')
+            ->will($this->returnValue($this->responseMock));
+        $contextMock->expects($this->any())
+            ->method('getResultRedirectFactory')
+            ->will($this->returnValue($this->resultPageFactoryMock));
+        $contextMock->expects($this->any())
+            ->method('getFormKeyValidator')
+            ->will($this->returnValue($this->formKeyValidatorMock));
+        $contextMock->expects($this->any())
+            ->method('getMessageManager')
+            ->will($this->returnValue($this->messageManagerMock));
+
+        $this->controller = $objectManager->getObject(
+            'Magento\Sales\Controller\Adminhtml\Order\Invoice\Save',
+            [
+                'context' => $contextMock,
+            ]
+        );
+    }
+
+    /**
+     * Test execute
+     *
+     * @return void
+     */
+    public function testExecuteNotValidPost()
+    {
+        $redirectMock = $this->getMockBuilder('Magento\Backend\Model\View\Result\Redirect')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->resultPageFactoryMock->expects($this->once())
+            ->method('create')
+            ->willReturn($redirectMock);
+        $this->formKeyValidatorMock->expects($this->once())
+            ->method('validate')
+            ->with($this->requestMock)
+            ->willReturn(true);
+        $this->requestMock->expects($this->once())
+            ->method('isPost')
+            ->willReturn(false);
+        $this->messageManagerMock->expects($this->once())
+            ->method('addError')
+            ->with('We can\'t save the invoice right now.');
+        $redirectMock->expects($this->once())
+            ->method('setPath')
+            ->with('sales/order/index')
+            ->willReturnSelf();
+
+        $this->assertEquals($redirectMock, $this->controller->execute());
+    }
+}
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassCancelTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassCancelTest.php
index 0359eed52b0d959d6c1e8c0c0846fcb72842616d..40a5b450f042d308196b27fde855f6efe1838739 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassCancelTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassCancelTest.php
@@ -71,12 +71,12 @@ class MassCancelTest extends \PHPUnit_Framework_TestCase
     protected $orderMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderCollectionMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderCollectionFactoryMock;
 
@@ -108,11 +108,11 @@ class MassCancelTest extends \PHPUnit_Framework_TestCase
             false
         );
 
-        $this->orderCollectionMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Collection')
+        $this->orderCollectionMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
-        $resourceCollection = 'Magento\Sales\Model\Resource\Order\CollectionFactory';
+        $resourceCollection = 'Magento\Sales\Model\ResourceModel\Order\CollectionFactory';
         $this->orderCollectionFactoryMock = $this->getMockBuilder($resourceCollection)
             ->disableOriginalConstructor()
             ->setMethods(['create'])
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassHoldTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassHoldTest.php
index 9e7f392b3ecf810131e457c5467a10e21da0bdda..5c4d78706854baaba2625c1eda874f96391a71e6 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassHoldTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassHoldTest.php
@@ -71,12 +71,12 @@ class MassHoldTest extends \PHPUnit_Framework_TestCase
     protected $orderMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderCollectionMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderCollectionFactoryMock;
 
@@ -114,10 +114,10 @@ class MassHoldTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->messageManagerMock = $this->getMock('Magento\Framework\Message\Manager', [], [], '', false);
-        $this->orderCollectionMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Collection')
+        $this->orderCollectionMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Collection')
             ->disableOriginalConstructor()
             ->getMock();
-        $orderCollection = 'Magento\Sales\Model\Resource\Order\CollectionFactory';
+        $orderCollection = 'Magento\Sales\Model\ResourceModel\Order\CollectionFactory';
         $this->orderCollectionFactoryMock = $this->getMockBuilder($orderCollection)
             ->disableOriginalConstructor()
             ->setMethods(['create'])
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassUnholdTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassUnholdTest.php
index dd43b7ac2c570a363a11c7feab6ad9da601d2e05..127ccc343ae2d3793e8eda9ecca7ea83b70b5516 100644
--- a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassUnholdTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/MassUnholdTest.php
@@ -71,12 +71,12 @@ class MassUnholdTest extends \PHPUnit_Framework_TestCase
     protected $orderMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderCollectionMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderCollectionFactoryMock;
 
@@ -108,10 +108,10 @@ class MassUnholdTest extends \PHPUnit_Framework_TestCase
         );
         $this->messageManagerMock = $this->getMock('Magento\Framework\Message\Manager', [], [], '', false);
 
-        $this->orderCollectionMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Collection')
+        $this->orderCollectionMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Collection')
             ->disableOriginalConstructor()
             ->getMock();
-        $orderCollection = 'Magento\Sales\Model\Resource\Order\CollectionFactory';
+        $orderCollection = 'Magento\Sales\Model\ResourceModel\Order\CollectionFactory';
         $this->orderCollectionFactoryMock = $this->getMockBuilder($orderCollection)
             ->disableOriginalConstructor()
             ->setMethods(['create'])
diff --git a/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/UnholdTest.php b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/UnholdTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1dbf1baafa60d52ff06a74a8058d3224f0499b48
--- /dev/null
+++ b/app/code/Magento/Sales/Test/Unit/Controller/Adminhtml/Order/UnholdTest.php
@@ -0,0 +1,142 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Sales\Test\Unit\Controller\Adminhtml\Order;
+
+use Magento\Framework\App\Action\Context;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
+
+/**
+ * Class UnholdTest
+ */
+class UnholdTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Sales\Controller\Adminhtml\Order\Unhold
+     */
+    protected $controller;
+
+    /**
+     * @var Context|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $context;
+
+    /**
+     * @var \Magento\Backend\Model\View\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultRedirect;
+
+    /**
+     * @var \Magento\Framework\App\Request\Http|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $request;
+
+    /**
+     * @var \Magento\Framework\App\ResponseInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $response;
+
+    /**
+     * @var \Magento\Framework\Message\Manager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $messageManager;
+
+    /**
+     * @var \Magento\Sales\Api\OrderRepositoryInterface
+     */
+    protected $orderRepositoryMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $validatorMock;
+
+    /**
+     * @var \Magento\Framework\ObjectManager\ObjectManager|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $objectManager;
+
+    public function setUp()
+    {
+        $objectManagerHelper = new ObjectManagerHelper($this);
+        $this->context = $this->getMock(
+            'Magento\Backend\App\Action\Context',
+            [],
+            [],
+            '',
+            false
+        );
+        $resultRedirectFactory = $this->getMock(
+            'Magento\Backend\Model\View\Result\RedirectFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+        $this->response = $this->getMock(
+            'Magento\Framework\App\ResponseInterface',
+            ['setRedirect', 'sendResponse'],
+            [],
+            '',
+            false
+        );
+        $this->request = $this->getMockBuilder('Magento\Framework\App\Request\Http')
+            ->disableOriginalConstructor()->getMock();
+        $this->messageManager = $this->getMock(
+            'Magento\Framework\Message\Manager',
+            ['addSuccess', 'addError'],
+            [],
+            '',
+            false
+        );
+        $this->orderRepositoryMock = $this->getMockBuilder('Magento\Sales\Api\OrderRepositoryInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->validatorMock = $this->getMockBuilder('Magento\Framework\Data\Form\FormKey\Validator')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->resultRedirect = $this->getMock('Magento\Backend\Model\View\Result\Redirect', [], [], '', false);
+        $resultRedirectFactory->expects($this->any())->method('create')->willReturn($this->resultRedirect);
+
+        $this->context->expects($this->once())->method('getMessageManager')->willReturn($this->messageManager);
+        $this->context->expects($this->any())->method('getRequest')->willReturn($this->request);
+        $this->context->expects($this->once())->method('getResponse')->willReturn($this->response);
+        $this->context->expects($this->once())->method('getObjectManager')->willReturn($this->objectManager);
+        $this->context->expects($this->once())->method('getResultRedirectFactory')->willReturn($resultRedirectFactory);
+        $this->context->expects($this->once())->method('getFormKeyValidator')->willReturn($this->validatorMock);
+
+        $this->controller = $objectManagerHelper->getObject(
+            'Magento\Sales\Controller\Adminhtml\Order\Unhold',
+            [
+                'context' => $this->context,
+                'request' => $this->request,
+                'response' => $this->response,
+                'orderRepository' => $this->orderRepositoryMock
+            ]
+        );
+    }
+
+    public function testExecuteNotPost()
+    {
+        $this->validatorMock->expects($this->once())
+            ->method('validate')
+            ->willReturn(false);
+        $this->request->expects($this->once())
+            ->method('isPost')
+            ->willReturn(false);
+        $this->messageManager->expects($this->once())
+            ->method('addError')
+            ->with('Can\'t unhold order.');
+        $this->resultRedirect->expects($this->once())
+            ->method('setPath')
+            ->with('sales/*/')
+            ->willReturnSelf();
+
+        $this->assertEquals($this->resultRedirect, $this->controller->execute());
+    }
+}
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/CleanExpiredQuotesTest.php b/app/code/Magento/Sales/Test/Unit/Cron/CleanExpiredQuotesTest.php
similarity index 84%
rename from app/code/Magento/Sales/Test/Unit/Model/Observer/CleanExpiredQuotesTest.php
rename to app/code/Magento/Sales/Test/Unit/Cron/CleanExpiredQuotesTest.php
index 3605a2fadabc9391d1685dfb37a500db16e9ac26..12259cec19143b2c0f0c59e3d4adf8f73c53020a 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Observer/CleanExpiredQuotesTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Cron/CleanExpiredQuotesTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Observer;
+namespace Magento\Sales\Test\Unit\Cron;
 
-use \Magento\Sales\Model\Observer\CleanExpiredQuotes;
+use \Magento\Sales\Cron\CleanExpiredQuotes;
 
 /**
- * Tests Magento\Sales\Model\Observer\CleanExpiredQuotes
+ * Tests Magento\Sales\Cron\CleanExpiredQuotes
  */
 class CleanExpiredQuotesTest extends \PHPUnit_Framework_TestCase
 {
@@ -18,12 +18,12 @@ class CleanExpiredQuotesTest extends \PHPUnit_Framework_TestCase
     protected $storesConfigMock;
 
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $quoteFactoryMock;
 
     /**
-     * @var \Magento\Sales\Model\Observer\CleanExpiredQuotes
+     * @var \Magento\Sales\Cron\CleanExpiredQuotes
      */
     protected $observer;
 
@@ -31,7 +31,7 @@ class CleanExpiredQuotesTest extends \PHPUnit_Framework_TestCase
     {
         $this->storesConfigMock = $this->getMock('Magento\Store\Model\StoresConfig', [], [], '', false);
 
-        $this->quoteFactoryMock = $this->getMockBuilder('Magento\Quote\Model\Resource\Quote\CollectionFactory')
+        $this->quoteFactoryMock = $this->getMockBuilder('Magento\Quote\Model\ResourceModel\Quote\CollectionFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -51,7 +51,7 @@ class CleanExpiredQuotesTest extends \PHPUnit_Framework_TestCase
             ->with($this->equalTo('checkout/cart/delete_quote_after'))
             ->will($this->returnValue($lifetimes));
 
-        $quotesMock = $this->getMockBuilder('Magento\Quote\Model\Resource\Quote\Collection')
+        $quotesMock = $this->getMockBuilder('Magento\Quote\Model\ResourceModel\Quote\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->quoteFactoryMock->expects($this->exactly(count($lifetimes)))
diff --git a/app/code/Magento/Sales/Test/Unit/Helper/AdminTest.php b/app/code/Magento/Sales/Test/Unit/Helper/AdminTest.php
index da013477ba3813af3cc6979decbcd648cc569249..bbe39f3fb558f42492d2fa2e93dc90bdc42597f4 100644
--- a/app/code/Magento/Sales/Test/Unit/Helper/AdminTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Helper/AdminTest.php
@@ -290,7 +290,8 @@ class AdminTest extends \PHPUnit_Framework_TestCase
             'quote' => $quoteMock,
             'other' => 'other',
         ];
-        $collectionMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\Collection\AbstractCollection')
+        $collectionClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection';
+        $collectionMock = $this->getMockBuilder($collectionClassName)
             ->disableOriginalConstructor()
             ->getMock();
         $collectionMock->expects($this->any())
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportBestsellersDataTest.php b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportBestsellersDataTest.php
similarity index 80%
rename from app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportBestsellersDataTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportBestsellersDataTest.php
index 3321509f914b3c0bbf83e886a850fc8d7c61b20e..1cb96810b75f71cbbe356d0019da082254eaeedf 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportBestsellersDataTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportBestsellersDataTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Observer;
+namespace Magento\Sales\Test\Unit\Model\CronJob;
 
-use \Magento\Sales\Model\Observer\AggregateSalesReportBestsellersData;
+use \Magento\Sales\Model\CronJob\AggregateSalesReportBestsellersData;
 
 /**
- * Tests Magento\Sales\Model\Observer\AggregateSalesReportBestsellersDataTest
+ * Tests Magento\Sales\Model\CronJob\AggregateSalesReportBestsellersDataTest
  */
 class AggregateSalesReportBestsellersDataTest extends \PHPUnit_Framework_TestCase
 {
@@ -23,12 +23,12 @@ class AggregateSalesReportBestsellersDataTest extends \PHPUnit_Framework_TestCas
     protected $localeDateMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Report\BestsellersFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Report\BestsellersFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $bestsellersFactoryMock;
 
     /**
-     * @var \Magento\Sales\Model\Observer\AggregateSalesReportBestsellersData
+     * @var \Magento\Sales\Model\CronJob\AggregateSalesReportBestsellersData
      */
     protected $observer;
 
@@ -38,7 +38,8 @@ class AggregateSalesReportBestsellersDataTest extends \PHPUnit_Framework_TestCas
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->bestsellersFactoryMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Report\BestsellersFactory')
+        $this->bestsellersFactoryMock =
+            $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Report\BestsellersFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -56,7 +57,7 @@ class AggregateSalesReportBestsellersDataTest extends \PHPUnit_Framework_TestCas
     public function testExecute()
     {
         $date = $this->setupAggregate();
-        $bestsellersMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Report\Bestsellers')
+        $bestsellersMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Report\Bestsellers')
             ->disableOriginalConstructor()
             ->getMock();
         $bestsellersMock->expects($this->once())
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportInvoicedDataTest.php b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportInvoicedDataTest.php
similarity index 83%
rename from app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportInvoicedDataTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportInvoicedDataTest.php
index 602754ba9e2818ea3f73b714eaa6c3728129eb0f..281d7e071ed134ceb5af1221d901530c0bcef7c3 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportInvoicedDataTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportInvoicedDataTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Observer;
+namespace Magento\Sales\Test\Unit\Model\CronJob;
 
-use \Magento\Sales\Model\Observer\AggregateSalesReportInvoicedData;
+use \Magento\Sales\Model\CronJob\AggregateSalesReportInvoicedData;
 
 /**
- * Tests Magento\Sales\Model\Observer\AggregateSalesReportInvoicedDataTest
+ * Tests Magento\Sales\Model\CronJob\AggregateSalesReportInvoicedDataTest
  */
 class AggregateSalesReportInvoicedDataTest extends \PHPUnit_Framework_TestCase
 {
@@ -23,12 +23,12 @@ class AggregateSalesReportInvoicedDataTest extends \PHPUnit_Framework_TestCase
     protected $localeDateMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Report\InvoicedFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Report\InvoicedFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $invoicedFactoryMock;
 
     /**
-     * @var \Magento\Sales\Model\Observer\AggregateSalesReportInvoicedData
+     * @var \Magento\Sales\Model\CronJob\AggregateSalesReportInvoicedData
      */
     protected $observer;
 
@@ -38,7 +38,7 @@ class AggregateSalesReportInvoicedDataTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->invoicedFactoryMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Report\InvoicedFactory')
+        $this->invoicedFactoryMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Report\InvoicedFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -56,7 +56,7 @@ class AggregateSalesReportInvoicedDataTest extends \PHPUnit_Framework_TestCase
     public function testExecute()
     {
         $date = $this->setupAggregate();
-        $invoicedMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Report\Invoiced')
+        $invoicedMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Report\Invoiced')
             ->disableOriginalConstructor()
             ->getMock();
         $invoicedMock->expects($this->once())
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportOrderDataTest.php b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportOrderDataTest.php
similarity index 84%
rename from app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportOrderDataTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportOrderDataTest.php
index 81a719a67187d865403add4a5acd1340ec13eb4e..5c4188caa4d2a5280fda49e718512172cd85c3ef 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportOrderDataTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportOrderDataTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Observer;
+namespace Magento\Sales\Test\Unit\Model\CronJob;
 
-use \Magento\Sales\Model\Observer\AggregateSalesReportOrderData;
+use \Magento\Sales\Model\CronJob\AggregateSalesReportOrderData;
 
 /**
- * Tests Magento\Sales\Model\Observer\AggregateSalesReportOrderDataTest
+ * Tests Magento\Sales\Model\CronJob\AggregateSalesReportOrderDataTest
  */
 class AggregateSalesReportOrderDataTest extends \PHPUnit_Framework_TestCase
 {
@@ -23,12 +23,12 @@ class AggregateSalesReportOrderDataTest extends \PHPUnit_Framework_TestCase
     protected $localeDateMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Report\OrderFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Report\OrderFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderFactoryMock;
 
     /**
-     * @var \Magento\Sales\Model\Observer\AggregateSalesReportOrderData
+     * @var \Magento\Sales\Model\CronJob\AggregateSalesReportOrderData
      */
     protected $observer;
 
@@ -38,7 +38,7 @@ class AggregateSalesReportOrderDataTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->orderFactoryMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Report\OrderFactory')
+        $this->orderFactoryMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Report\OrderFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -56,7 +56,7 @@ class AggregateSalesReportOrderDataTest extends \PHPUnit_Framework_TestCase
     public function testExecute()
     {
         $date = $this->setupAggregate();
-        $orderMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Report\Order')
+        $orderMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Report\Order')
             ->disableOriginalConstructor()
             ->getMock();
         $orderMock->expects($this->once())
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportRefundedDataTest.php b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportRefundedDataTest.php
similarity index 83%
rename from app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportRefundedDataTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportRefundedDataTest.php
index 2525439b893d638def14128b73c2e24955ea0855..cc38c8bd98ed3386f8ed428e6eaa82d9de06d7fa 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Observer/AggregateSalesReportRefundedDataTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/CronJob/AggregateSalesReportRefundedDataTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Observer;
+namespace Magento\Sales\Test\Unit\Model\CronJob;
 
-use \Magento\Sales\Model\Observer\AggregateSalesReportRefundedData;
+use \Magento\Sales\Model\CronJob\AggregateSalesReportRefundedData;
 
 /**
- * Tests Magento\Sales\Model\Observer\AggregateSalesReportRefundedDataTest
+ * Tests Magento\Sales\Model\CronJob\AggregateSalesReportRefundedDataTest
  */
 class AggregateSalesReportRefundedDataTest extends \PHPUnit_Framework_TestCase
 {
@@ -23,12 +23,12 @@ class AggregateSalesReportRefundedDataTest extends \PHPUnit_Framework_TestCase
     protected $localeDateMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Report\RefundedFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Report\RefundedFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $refundedFactoryMock;
 
     /**
-     * @var \Magento\Sales\Model\Observer\AggregateSalesReportRefundedData
+     * @var \Magento\Sales\Model\CronJob\AggregateSalesReportRefundedData
      */
     protected $observer;
 
@@ -38,7 +38,7 @@ class AggregateSalesReportRefundedDataTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->refundedFactoryMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Report\RefundedFactory')
+        $this->refundedFactoryMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Report\RefundedFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -56,7 +56,7 @@ class AggregateSalesReportRefundedDataTest extends \PHPUnit_Framework_TestCase
     public function testExecute()
     {
         $date = $this->setupAggregate();
-        $refundedMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Report\Refunded')
+        $refundedMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Report\Refunded')
             ->disableOriginalConstructor()
             ->getMock();
         $refundedMock->expects($this->once())
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/CleanExpiredOrdersTest.php b/app/code/Magento/Sales/Test/Unit/Model/CronJob/CleanExpiredOrdersTest.php
similarity index 92%
rename from app/code/Magento/Sales/Test/Unit/Model/Observer/CleanExpiredOrdersTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/CronJob/CleanExpiredOrdersTest.php
index 2513787d60792df5f7ccbc87d3583a3637652685..6edbe75d8986d4e78a3958d3541788ca3c6c1ef4 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Observer/CleanExpiredOrdersTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/CronJob/CleanExpiredOrdersTest.php
@@ -4,9 +4,10 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Test\Unit\Model\Observer;
+namespace Magento\Sales\Test\Unit\Model\CronJob;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\Sales\Model\CronJob\CleanExpiredOrders;
 
 class CleanExpiredOrdersTest extends \PHPUnit_Framework_TestCase
 {
@@ -36,7 +37,7 @@ class CleanExpiredOrdersTest extends \PHPUnit_Framework_TestCase
     protected $objectManager;
 
     /**
-     * @var \Magento\Sales\Model\Observer\CleanExpiredOrders
+     * @var CleanExpiredOrders
      */
     protected $model;
 
@@ -50,14 +51,14 @@ class CleanExpiredOrdersTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->collectionFactoryMock = $this->getMock(
-            '\Magento\Sales\Model\Resource\Order\CollectionFactory',
+            '\Magento\Sales\Model\ResourceModel\Order\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->orderCollectionMock = $this->getMock(
-            '\Magento\Sales\Model\Resource\Order\Collection',
+            '\Magento\Sales\Model\ResourceModel\Order\Collection',
             [],
             [],
             '',
@@ -66,7 +67,7 @@ class CleanExpiredOrdersTest extends \PHPUnit_Framework_TestCase
 
         $this->loggerMock = $this->getMock('\Psr\Log\LoggerInterface');
 
-        $this->model = new \Magento\Sales\Model\Observer\CleanExpiredOrders(
+        $this->model = new CleanExpiredOrders(
             $this->storesConfigMock,
             $this->loggerMock,
             $this->collectionFactoryMock
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/SendEmailsTest.php b/app/code/Magento/Sales/Test/Unit/Model/EmailSenderHandlerTest.php
similarity index 87%
rename from app/code/Magento/Sales/Test/Unit/Model/Observer/SendEmailsTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/EmailSenderHandlerTest.php
index 0b3e4a9905a17f761eb6b763df933dabf5630d6b..ce2b840390225123977bcdd01c5b925d6f06e903 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Observer/SendEmailsTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/EmailSenderHandlerTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Observer;
+namespace Magento\Sales\Test\Unit\Model;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 /**
  * Unit test of sales emails sending observer.
  */
-class SendEmailsTest extends \PHPUnit_Framework_TestCase
+class EmailSenderHandlerTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * Subject of testing.
      *
-     * @var \Magento\Sales\Model\Observer\SendEmails
+     * @var \Magento\Sales\Model\EmailSenderHandler
      */
     protected $object;
 
@@ -29,14 +29,14 @@ class SendEmailsTest extends \PHPUnit_Framework_TestCase
     /**
      * Entity resource model mock.
      *
-     * @var \Magento\Sales\Model\Resource\EntityAbstract|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\EntityAbstract|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entityResource;
 
     /**
      * Entity collection model mock.
      *
-     * @var \Magento\Sales\Model\Resource\Collection\AbstractCollection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Collection\AbstractCollection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entityCollection;
 
@@ -60,7 +60,7 @@ class SendEmailsTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->entityResource = $this->getMockForAbstractClass(
-            'Magento\Sales\Model\Resource\EntityAbstract',
+            'Magento\Sales\Model\ResourceModel\EntityAbstract',
             [],
             '',
             false,
@@ -70,7 +70,7 @@ class SendEmailsTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->entityCollection = $this->getMockForAbstractClass(
-            'Magento\Sales\Model\Resource\Collection\AbstractCollection',
+            'Magento\Sales\Model\ResourceModel\Collection\AbstractCollection',
             [],
             '',
             false,
@@ -88,7 +88,7 @@ class SendEmailsTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->object = $objectManager->getObject(
-            'Magento\Sales\Model\Observer\SendEmails',
+            'Magento\Sales\Model\EmailSenderHandler',
             [
                 'emailSender' => $this->emailSender,
                 'entityResource' => $this->entityResource,
@@ -156,7 +156,7 @@ class SendEmailsTest extends \PHPUnit_Framework_TestCase
             }
         }
 
-        $this->object->execute();
+        $this->object->sendEmails();
     }
 
     /**
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Grid/Child/CollectionUpdaterTest.php b/app/code/Magento/Sales/Test/Unit/Model/Grid/Child/CollectionUpdaterTest.php
index 65ed955a7abbea8cde583645c7bfbf499d29bd3a..ee286701e9edaf18a023dd1cab3f45ab53440e15 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Grid/Child/CollectionUpdaterTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Grid/Child/CollectionUpdaterTest.php
@@ -32,7 +32,7 @@ class CollectionUpdaterTest extends \PHPUnit_Framework_TestCase
     public function testUpdateIfOrderExists()
     {
         $collectionMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Payment\Transaction\Collection', [], [], '', false
+            'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection', [], [], '', false
         );
         $transactionMock = $this->getMock('Magento\Sales\Model\Order\Payment\Transaction', [], [], '', false);
         $this->registryMock
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Grid/CollectionUpdaterTest.php b/app/code/Magento/Sales/Test/Unit/Model/Grid/CollectionUpdaterTest.php
index f2f200a245d712b05e10578b2ff754b9f9dfbc85..b331f205de65807b2222c680e1b9ebcf6ca1f408 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Grid/CollectionUpdaterTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Grid/CollectionUpdaterTest.php
@@ -32,7 +32,7 @@ class CollectionUpdaterTest extends \PHPUnit_Framework_TestCase
     public function testUpdateIfOrderNotExists()
     {
         $collectionMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Payment\Transaction\Collection', [], [], '', false
+            'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection', [], [], '', false
         );
         $this->registryMock
             ->expects($this->once())
@@ -51,7 +51,7 @@ class CollectionUpdaterTest extends \PHPUnit_Framework_TestCase
     public function testUpdateIfOrderExists()
     {
         $collectionMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Payment\Transaction\Collection', [], [], '', false
+            'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection', [], [], '', false
         );
         $orderMock = $this->getMock('Magento\Sales\Model\Order', [], [], '', false);
         $this->registryMock
diff --git a/app/code/Magento/Sales/Test/Unit/Model/GridAsyncInsertTest.php b/app/code/Magento/Sales/Test/Unit/Model/GridAsyncInsertTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a823425effd1362cd0f72c4941f606162b58f34c
--- /dev/null
+++ b/app/code/Magento/Sales/Test/Unit/Model/GridAsyncInsertTest.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Sales\Test\Unit\Model;
+
+/**
+ * Class GridAsyncInsertTest
+ */
+class GridAsyncInsertTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Sales\Model\GridAsyncInsert
+     */
+    protected $unit;
+
+    /**
+     * @var \Magento\Sales\Model\ResourceModel\GridInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $gridAggregatorMock;
+
+    /**
+     * @var \Magento\Sales\Model\AbstractModel|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $salesModelMock;
+
+    /**
+     * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $scopeConfigurationMock;
+
+    public function setUp()
+    {
+        $this->gridAggregatorMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\GridInterface')
+            ->getMockForAbstractClass();
+        $this->salesModelMock = $this->getMockBuilder('Magento\Sales\Model\AbstractModel')
+            ->disableOriginalConstructor()
+            ->setMethods(
+                [
+                    'getId'
+                ]
+            )
+            ->getMockForAbstractClass();
+        $this->scopeConfigurationMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
+            ->getMockForAbstractClass();
+
+        $this->unit = new \Magento\Sales\Model\GridAsyncInsert(
+            $this->gridAggregatorMock,
+            $this->scopeConfigurationMock
+        );
+    }
+
+    public function testAsyncInsert()
+    {
+        $this->scopeConfigurationMock->expects($this->once())
+            ->method('getValue')
+            ->with('dev/grid/async_indexing', 'default', null)
+            ->willReturn(true);
+        $this->gridAggregatorMock->expects($this->once())
+            ->method('refreshBySchedule');
+        $this->unit->asyncInsert();
+    }
+
+    public function testAsyncInsertDisabled()
+    {
+        $this->scopeConfigurationMock->expects($this->once())
+            ->method('getValue')
+            ->with('dev/grid/async_indexing', 'default', null)
+            ->willReturn(false);
+        $this->gridAggregatorMock->expects($this->never())
+            ->method('refreshBySchedule');
+        $this->unit->asyncInsert();
+    }
+}
diff --git a/app/code/Magento/Sales/Test/Unit/Model/InvoiceRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/InvoiceRepositoryTest.php
index d392df97b3b3fda89f8ccff915a441633a6ec08e..4a2ef97a19764b757f6de4da62500cbfeee27653 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/InvoiceRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/InvoiceRepositoryTest.php
@@ -29,7 +29,7 @@ class InvoiceRepositoryTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->invoiceMetadata = $this->getMock('Magento\Sales\Model\Resource\Metadata', [], [], '', false);
+        $this->invoiceMetadata = $this->getMock('Magento\Sales\Model\ResourceModel\Metadata', [], [], '', false);
         $this->searchResultFactory = $this->getMockBuilder('Magento\Sales\Api\Data\InvoiceSearchResultInterfaceFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
@@ -58,7 +58,7 @@ class InvoiceRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getNewInstance')
             ->willReturn($entity);
 
-        $mapper = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Invoice')
+        $mapper = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Invoice')
             ->disableOriginalConstructor()
             ->getMock();
         $mapper->expects($this->once())
@@ -98,7 +98,7 @@ class InvoiceRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getNewInstance')
             ->willReturn($entity);
 
-        $mapper = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Invoice')
+        $mapper = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Invoice')
             ->disableOriginalConstructor()
             ->getMock();
         $mapper->expects($this->once())
@@ -155,7 +155,7 @@ class InvoiceRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getFilterGroups')
             ->willReturn($filterGroups);
 
-        $collection = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Invoice\Collection')
+        $collection = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Invoice\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $collection->expects($this->once())
@@ -178,7 +178,7 @@ class InvoiceRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getEntityId')
             ->willReturn(1);
 
-        $mapper = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Invoice')
+        $mapper = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Invoice')
             ->disableOriginalConstructor()
             ->getMock();
         $mapper->expects($this->once())
@@ -206,7 +206,7 @@ class InvoiceRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getNewInstance')
             ->willReturn($entity);
 
-        $mapper = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Invoice')
+        $mapper = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Invoice')
             ->disableOriginalConstructor()
             ->getMock();
         $mapper->expects($this->once())
@@ -237,7 +237,7 @@ class InvoiceRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getEntityId')
             ->willReturn(1);
 
-        $mapper = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Invoice')
+        $mapper = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Invoice')
             ->disableOriginalConstructor()
             ->getMock();
         $mapper->expects($this->once())
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php
index a545d687d9b4b63c108b521f6952dd4e19758ce0..f943f6632225b1c026852e51ebfa4339444a999b 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/AddressRepositoryTest.php
@@ -22,7 +22,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
     /**
      * Sales resource metadata.
      *
-     * @var \Magento\Sales\Model\Resource\Metadata|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Metadata|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $metadata;
 
@@ -36,7 +36,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
         $objectManager = new ObjectManager($this);
 
         $this->metadata = $this->getMock(
-            'Magento\Sales\Model\Resource\Metadata',
+            'Magento\Sales\Model\ResourceModel\Metadata',
             ['getNewInstance', 'getMapper'],
             [],
             '',
@@ -86,7 +86,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
                 ->willReturn($entityId);
 
             $mapper = $this->getMockForAbstractClass(
-                'Magento\Framework\Model\Resource\Db\AbstractDb',
+                'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
                 [],
                 '',
                 false,
@@ -182,7 +182,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             ->willReturn([$filterGroup]);
 
         $collection = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Address\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Address\Collection',
             ['addFieldToFilter'],
             [],
             '',
@@ -213,7 +213,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             ->willReturn(1);
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -249,7 +249,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getEntityId');
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -282,7 +282,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             ->willReturn(1);
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -318,7 +318,7 @@ class AddressRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getEntityId');
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/ConfigTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/ConfigTest.php
index 9a845304e23b45d5202ee38657be101cd30f7f57..4934cf523150ffba043a2666253a99adebf6d973 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/ConfigTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/ConfigTest.php
@@ -18,7 +18,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     protected $salesConfig;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Status\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderStatusCollectionFactoryMock;
 
@@ -26,7 +26,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
     {
         $orderStatusFactory = $this->getMock('Magento\Sales\Model\Order\StatusFactory', [], [], '', false, false);
         $this->orderStatusCollectionFactoryMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory',
             ['create'],
             [],
             '',
@@ -78,7 +78,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
         $expectedResult = ['complete', 'pending_payment'];
 
         $collectionMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Status\Collection',
             ['create', 'joinStates'],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoNotifierTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoNotifierTest.php
index 9f6096a4b02da6a1af58de6195f7254607ac2399..a5a0eba66d7472ff207c2da587e33a1601efbffc 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoNotifierTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoNotifierTest.php
@@ -9,7 +9,7 @@ namespace Magento\Sales\Test\Unit\Model\Order;
 use \Magento\Sales\Model\Order\CreditmemoNotifier;
 
 use Magento\Framework\Exception\MailException;
-use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory;
 
 /**
  * Class CreditmemoNotifierTest
@@ -44,7 +44,7 @@ class CreditmemoNotifierTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->historyCollectionFactory = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory',
             ['create'],
             [],
             '',
@@ -78,7 +78,7 @@ class CreditmemoNotifierTest extends \PHPUnit_Framework_TestCase
     public function testNotifySuccess()
     {
         $historyCollection = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\History\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History\Collection',
             ['getUnnotifiedForInstance', 'save', 'setIsCustomerNotified'],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoRepositoryTest.php
index 79fafb090ecc8a12a0528d110b3fda2e957f6962..cba7908dacd42bae57729dfe770587a2708c8f4a 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoRepositoryTest.php
@@ -19,7 +19,7 @@ class CreditmemoRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $creditmemo;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Metadata|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Metadata|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $metadataMock;
 
@@ -31,7 +31,7 @@ class CreditmemoRepositoryTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->metadataMock = $this->getMock('Magento\Sales\Model\Resource\Metadata', [], [], '', false);
+        $this->metadataMock = $this->getMock('Magento\Sales\Model\ResourceModel\Metadata', [], [], '', false);
         $this->searchResultFactoryMock = $this->getMock(
             'Magento\Sales\Api\Data\CreditmemoSearchResultInterfaceFactory',
             ['create'],
@@ -62,7 +62,7 @@ class CreditmemoRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getNewInstance')
             ->willReturn($entity);
 
-        $mapper = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Creditmemo')
+        $mapper = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Creditmemo')
             ->disableOriginalConstructor()
             ->getMock();
         $mapper->expects($this->once())
@@ -103,7 +103,7 @@ class CreditmemoRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getNewInstance')
             ->willReturn($entity);
 
-        $mapper = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Creditmemo')
+        $mapper = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Creditmemo')
             ->disableOriginalConstructor()
             ->getMock();
         $mapper->expects($this->once())
@@ -160,7 +160,7 @@ class CreditmemoRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getFilterGroups')
             ->willReturn($filterGroups);
 
-        $collection = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Creditmemo\Collection')
+        $collection = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $collection->expects($this->once())
@@ -183,7 +183,7 @@ class CreditmemoRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getEntityId')
             ->willReturn(1);
 
-        $mapper = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Creditmemo')
+        $mapper = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Creditmemo')
             ->disableOriginalConstructor()
             ->getMock();
         $mapper->expects($this->once())
@@ -209,7 +209,7 @@ class CreditmemoRepositoryTest extends \PHPUnit_Framework_TestCase
         $entity->expects($this->never())
             ->method('getEntityId');
 
-        $mapper = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Creditmemo')
+        $mapper = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Creditmemo')
             ->disableOriginalConstructor()
             ->getMock();
         $mapper->expects($this->once())
@@ -232,7 +232,7 @@ class CreditmemoRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getEntityId')
             ->willReturn(1);
 
-        $mapper = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Creditmemo')
+        $mapper = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Creditmemo')
             ->disableOriginalConstructor()
             ->getMock();
         $mapper->expects($this->once())
@@ -258,7 +258,7 @@ class CreditmemoRepositoryTest extends \PHPUnit_Framework_TestCase
         $entity->expects($this->never())
             ->method('getEntityId');
 
-        $mapper = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Creditmemo')
+        $mapper = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Creditmemo')
             ->disableOriginalConstructor()
             ->getMock();
         $mapper->expects($this->once())
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoTest.php
index eb1420e18902ef366f90459901db62e879acc5bf..5f8ff1349677164de2b1f30f25616fef2de9be7d 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/CreditmemoTest.php
@@ -8,10 +8,10 @@
 
 namespace Magento\Sales\Test\Unit\Model\Order;
 
-use Magento\Sales\Model\Resource\OrderFactory;
+use Magento\Sales\Model\ResourceModel\OrderFactory;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
-use Magento\Sales\Model\Resource\Order\Creditmemo\Item\CollectionFactory;
-use Magento\Sales\Model\Resource\Order\Creditmemo\Item\Collection as ItemCollection;
+use Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item\Collection as ItemCollection;
 
 /**
  * Class CreditmemoTest
@@ -45,7 +45,7 @@ class CreditmemoTest extends \PHPUnit_Framework_TestCase
 
         $objectManagerHelper = new ObjectManagerHelper($this);
         $this->cmItemCollectionFactoryMock = $this->getMockBuilder(
-            '\Magento\Sales\Model\Resource\Order\Creditmemo\Item\CollectionFactory'
+            '\Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item\CollectionFactory'
         )->disableOriginalConstructor()
         ->setMethods(['create'])
         ->getMock();
@@ -68,7 +68,7 @@ class CreditmemoTest extends \PHPUnit_Framework_TestCase
                     false
                 ),
             'commentCollectionFactory' => $this->getMock(
-                    'Magento\Sales\Model\Resource\Order\Creditmemo\Comment\CollectionFactory',
+                    'Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\CollectionFactory',
                     [],
                     [],
                     '',
@@ -155,7 +155,7 @@ class CreditmemoTest extends \PHPUnit_Framework_TestCase
         $items[] = $itemMock;
 
         /** @var ItemCollection|\PHPUnit_Framework_MockObject_MockObject $itemCollectionMock */
-        $itemCollectionMock = $this->getMockBuilder('\Magento\Sales\Model\Resource\Order\Creditmemo\Item\Collection')
+        $itemCollectionMock = $this->getMockBuilder('\Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $itemCollectionMock->expects($this->once())
@@ -182,7 +182,7 @@ class CreditmemoTest extends \PHPUnit_Framework_TestCase
         $items[] = $itemMock;
 
         /** @var ItemCollection|\PHPUnit_Framework_MockObject_MockObject $itemCollectionMock */
-        $itemCollectionMock = $this->getMockBuilder('\Magento\Sales\Model\Resource\Order\Creditmemo\Item\Collection')
+        $itemCollectionMock = $this->getMockBuilder('\Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $itemCollectionMock->expects($this->once())
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/CreditmemoSenderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/CreditmemoSenderTest.php
index 1c7f98c3a1228dfed39e86762608cb04025f0732..3fee3ed0f7041d6497bb08c659926a726ca36c86 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/CreditmemoSenderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/CreditmemoSenderTest.php
@@ -20,7 +20,7 @@ class CreditmemoSenderTest extends AbstractSenderTest
     protected $creditmemoMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\EntityAbstract|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\EntityAbstract|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $creditmemoResourceMock;
 
@@ -29,7 +29,7 @@ class CreditmemoSenderTest extends AbstractSenderTest
         $this->stepMockSetup();
 
         $this->creditmemoResourceMock = $this->getMock(
-            '\Magento\Sales\Model\Resource\Order\Creditmemo',
+            '\Magento\Sales\Model\ResourceModel\Order\Creditmemo',
             ['saveAttribute'],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/InvoiceCommentSenderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/InvoiceCommentSenderTest.php
index 0e44676e83d84a3c00820fa5e4cb1031d0fa8a10..285947ab531c45974ee1435bc2008248a576aa9d 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/InvoiceCommentSenderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/InvoiceCommentSenderTest.php
@@ -31,7 +31,7 @@ class InvoiceCommentSenderTest extends AbstractSenderTest
         );
 
         $this->invoiceResource = $this->getMock(
-            '\Magento\Sales\Model\Resource\Order\Invoice',
+            '\Magento\Sales\Model\ResourceModel\Order\Invoice',
             [],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/InvoiceSenderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/InvoiceSenderTest.php
index af477dce80a846e014d8559d1f290dea2ead066d..a90dea58280a3b64e7312fc5d65858a92a724299 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/InvoiceSenderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/InvoiceSenderTest.php
@@ -20,7 +20,7 @@ class InvoiceSenderTest extends AbstractSenderTest
     protected $invoiceMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\EntityAbstract|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\EntityAbstract|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $invoiceResourceMock;
 
@@ -29,7 +29,7 @@ class InvoiceSenderTest extends AbstractSenderTest
         $this->stepMockSetup();
 
         $this->invoiceResourceMock = $this->getMock(
-            '\Magento\Sales\Model\Resource\Order\Invoice',
+            '\Magento\Sales\Model\ResourceModel\Order\Invoice',
             ['saveAttribute'],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/OrderSenderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/OrderSenderTest.php
index 2e692ca7dc6cc602040988ebb805e8507c266671..916aa8434a75cd5cb3e81c2cb4ca6f175339a2cb 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/OrderSenderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/OrderSenderTest.php
@@ -15,7 +15,7 @@ class OrderSenderTest extends AbstractSenderTest
     protected $sender;
 
     /**
-     * @var \Magento\Sales\Model\Resource\EntityAbstract|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\EntityAbstract|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderResourceMock;
 
@@ -24,7 +24,7 @@ class OrderSenderTest extends AbstractSenderTest
         $this->stepMockSetup();
 
         $this->orderResourceMock = $this->getMock(
-            '\Magento\Sales\Model\Resource\Order',
+            '\Magento\Sales\Model\ResourceModel\Order',
             ['saveAttribute'],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/ShipmentSenderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/ShipmentSenderTest.php
index 19572f23533a6bdefba08194271576a8b9050d4c..4d3fdd81fa2f63d6e309d29a175138f8e9bed847 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/ShipmentSenderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Email/Sender/ShipmentSenderTest.php
@@ -20,7 +20,7 @@ class ShipmentSenderTest extends AbstractSenderTest
     protected $shipmentMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\EntityAbstract|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\EntityAbstract|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $shipmentResourceMock;
 
@@ -29,7 +29,7 @@ class ShipmentSenderTest extends AbstractSenderTest
         $this->stepMockSetup();
 
         $this->shipmentResourceMock = $this->getMock(
-            '\Magento\Sales\Model\Resource\Order\Shipment',
+            '\Magento\Sales\Model\ResourceModel\Order\Shipment',
             ['saveAttribute'],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Invoice/Total/ShippingTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Invoice/Total/ShippingTest.php
index 3be97feaa775bb35fe02900c6cf2f507e31f74b9..dccd3fc4e82ce1497d5d35500a4c0f516672ea5b 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/Invoice/Total/ShippingTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Invoice/Total/ShippingTest.php
@@ -26,7 +26,7 @@ class ShippingTest extends \PHPUnit_Framework_TestCase
         $arguments = [
             'orderFactory' => $this->getMock('Magento\Sales\Model\OrderFactory', [], [], '', false),
             'orderResourceFactory' => $this->getMock(
-                'Magento\Sales\Model\Resource\OrderFactory',
+                'Magento\Sales\Model\ResourceModel\OrderFactory',
                 [],
                 [],
                 '',
@@ -40,7 +40,7 @@ class ShippingTest extends \PHPUnit_Framework_TestCase
                     false
                 ),
             'invoiceItemCollectionFactory' => $this->getMock(
-                'Magento\Sales\Model\Resource\Order\Invoice\Item\CollectionFactory',
+                'Magento\Sales\Model\ResourceModel\Order\Invoice\Item\CollectionFactory',
                 [],
                 [],
                 '',
@@ -54,7 +54,7 @@ class ShippingTest extends \PHPUnit_Framework_TestCase
                 false
             ),
             'commentCollectionFactory' => $this->getMock(
-                'Magento\Sales\Model\Resource\Order\Invoice\Comment\CollectionFactory',
+                'Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\CollectionFactory',
                 [],
                 [],
                 '',
@@ -84,7 +84,7 @@ class ShippingTest extends \PHPUnit_Framework_TestCase
         $arguments = [
             'productFactory' => $this->getMock('Magento\Catalog\Model\ProductFactory', [], [], '', false),
             'orderItemCollectionFactory' => $this->getMock(
-                'Magento\Sales\Model\Resource\Order\Item\CollectionFactory',
+                'Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory',
                 [],
                 [],
                 '',
@@ -112,7 +112,7 @@ class ShippingTest extends \PHPUnit_Framework_TestCase
                 false
             ),
             'orderTaxCollectionFactory' => $this->getMock(
-                'Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory',
+                'Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory',
                 [],
                 [],
                 '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/InvoiceNotifierTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/InvoiceNotifierTest.php
index 214eb992d17233be956b12e9401ef544e2711c6a..34050dbd3a4e942010f79888ca656a909a023968 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/InvoiceNotifierTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/InvoiceNotifierTest.php
@@ -9,7 +9,7 @@ namespace Magento\Sales\Test\Unit\Model\Order;
 use \Magento\Sales\Model\Order\InvoiceNotifier;
 
 use Magento\Framework\Exception\MailException;
-use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory;
 
 /**
  * Class InvoiceNotifierTest
@@ -44,7 +44,7 @@ class InvoiceNotifierTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->historyCollectionFactory = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory',
             ['create'],
             [],
             '',
@@ -78,7 +78,7 @@ class InvoiceNotifierTest extends \PHPUnit_Framework_TestCase
     public function testNotifySuccess()
     {
         $historyCollection = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\History\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History\Collection',
             ['getUnnotifiedForInstance', 'save', 'setIsCustomerNotified'],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/InvoiceTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/InvoiceTest.php
index 61e519785d59b0f1d2eeb4b5d82a020448523985..bc4f964ba7f93b4679629d90f3bc6e489a17d545 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/InvoiceTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/InvoiceTest.php
@@ -9,7 +9,7 @@
 namespace Magento\Sales\Test\Unit\Model\Order;
 
 use Magento\Sales\Model\Order\Invoice;
-use Magento\Sales\Model\Resource\OrderFactory;
+use Magento\Sales\Model\ResourceModel\OrderFactory;
 
 /**
  * Class InvoiceTest
@@ -93,7 +93,7 @@ class InvoiceTest extends \PHPUnit_Framework_TestCase
             'context' => $contextMock,
             'orderFactory' => $this->orderFactory,
             'orderResourceFactory' => $this->getMock(
-                'Magento\Sales\Model\Resource\OrderFactory',
+                'Magento\Sales\Model\ResourceModel\OrderFactory',
                 [],
                 [],
                 '',
@@ -107,7 +107,7 @@ class InvoiceTest extends \PHPUnit_Framework_TestCase
                     false
                 ),
             'invoiceItemCollectionFactory' => $this->getMock(
-                'Magento\Sales\Model\Resource\Order\Invoice\Item\CollectionFactory',
+                'Magento\Sales\Model\ResourceModel\Order\Invoice\Item\CollectionFactory',
                 [],
                 [],
                 '',
@@ -121,7 +121,7 @@ class InvoiceTest extends \PHPUnit_Framework_TestCase
                 false
             ),
             'commentCollectionFactory' => $this->getMock(
-                'Magento\Sales\Model\Resource\Order\Invoice\Comment\CollectionFactory',
+                'Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\CollectionFactory',
                 [],
                 [],
                 '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php
index 0da34e42feee6f55593dddea98f46e5f3aeff3a1..e2deb200dbcfcd930ae170dee2cd48819509a8f3 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/ItemRepositoryTest.php
@@ -15,7 +15,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $objectFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Metadata | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Metadata | \PHPUnit_Framework_MockObject_MockObject
      */
     protected $metadata;
 
@@ -51,7 +51,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['create'])
             ->getMock();
 
-        $this->metadata = $this->getMockBuilder('Magento\Sales\Model\Resource\Metadata')
+        $this->metadata = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Metadata')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -109,7 +109,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getItemId')
             ->willReturn(null);
 
-        $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->getMock();
         $orderItemResourceMock->expects($this->once())
@@ -150,7 +150,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getItemId')
             ->willReturn($orderItemId);
 
-        $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->getMock();
         $orderItemResourceMock->expects($this->once())
@@ -255,7 +255,7 @@ class ItemRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getBuyRequest')
             ->willReturn($requestMock);
 
-        $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\AbstractDb')
+        $orderItemResourceMock = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->getMock();
         $orderItemResourceMock->expects($this->once())
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/ItemTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/ItemTest.php
index 88bd090c82de801918bc806e6432043025e54727..bdf4983d2d2ac73d3cf0a33f38b12a5aec195e77 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/ItemTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/ItemTest.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Sales\Test\Unit\Model\Order;
 
-use Magento\Sales\Model\Resource\OrderFactory;
+use Magento\Sales\Model\ResourceModel\OrderFactory;
 use \Magento\Sales\Model\Order;
 
 /**
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Payment/RepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Payment/RepositoryTest.php
index d9a8b0e70223b838cd9a97bfaaf14fbe573d6ef7..1458d17c5993ebc27f4c6d92d7c56444e15b3a84 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/Payment/RepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Payment/RepositoryTest.php
@@ -53,7 +53,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->metaData = $this->getMock(
-            'Magento\Sales\Model\Resource\Metadata',
+            'Magento\Sales\Model\ResourceModel\Metadata',
             [],
             [],
             '',
@@ -74,14 +74,14 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->collection = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Payment\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Payment\Collection',
             [],
             [],
             '',
             false
         );
         $this->paymentResource = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Payment',
+            'Magento\Sales\Model\ResourceModel\Order\Payment',
             [],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/Payment/Transaction/RepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/Payment/Transaction/RepositoryTest.php
index 1babb714902efb3b52b7787ad97c8f2efb883e3f..de367294c098b7bfb353fcf8af619c49b6236c17 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/Payment/Transaction/RepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/Payment/Transaction/RepositoryTest.php
@@ -107,7 +107,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->metaData = $this->getMock(
-            'Magento\Sales\Model\Resource\Metadata',
+            'Magento\Sales\Model\ResourceModel\Metadata',
             [],
             [],
             '',
@@ -128,7 +128,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->transactionResource = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Payment\Transaction',
+            'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction',
             [],
             [],
             '',
@@ -156,7 +156,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->collection = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Payment\Transaction\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php
index 2a0b28329abf4349296612058a4f90cdb399ad57..29757fc570f2380410376d09d3ca137062ffad9d 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/PaymentTest.php
@@ -221,7 +221,7 @@ class PaymentTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->transactionCollectionFactory = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Payment\Transaction\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\CollectionFactory',
             ['create'],
             [],
             '',
@@ -1284,7 +1284,7 @@ class PaymentTest extends \PHPUnit_Framework_TestCase
         $this->payment->setId($paymentId);
         $this->orderMock->setId($orderId);
         $transaction = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Payment\Transaction',
+            'Magento\Sales\Model\ResourceModel\Order\Payment\Transaction',
             [],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php
index f1dc70905c92fe3677fcb627d642a8cdb2a8c1b5..36a8360ee094fbf2c05b70ed871492d1b0b0d25b 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/ShipmentRepositoryTest.php
@@ -22,7 +22,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
     /**
      * Sales resource metadata.
      *
-     * @var \Magento\Sales\Model\Resource\Metadata|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Metadata|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $metadata;
 
@@ -36,7 +36,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
         $objectManager = new ObjectManager($this);
 
         $this->metadata = $this->getMock(
-            'Magento\Sales\Model\Resource\Metadata',
+            'Magento\Sales\Model\ResourceModel\Metadata',
             ['getNewInstance', 'getMapper'],
             [],
             '',
@@ -86,7 +86,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
                 ->willReturn($entityId);
 
             $mapper = $this->getMockForAbstractClass(
-                'Magento\Framework\Model\Resource\Db\AbstractDb',
+                'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
                 [],
                 '',
                 false,
@@ -182,7 +182,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
             ->willReturn([$filterGroup]);
 
         $collection = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Shipment\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Shipment\Collection',
             ['addFieldToFilter'],
             [],
             '',
@@ -213,7 +213,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
             ->willReturn(1);
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -249,7 +249,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getEntityId');
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -282,7 +282,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
             ->willReturn(1);
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -318,7 +318,7 @@ class ShipmentRepositoryTest extends \PHPUnit_Framework_TestCase
             ->method('getEntityId');
 
         $mapper = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Order/StatusTest.php b/app/code/Magento/Sales/Test/Unit/Model/Order/StatusTest.php
index 4c9e369d0f162fdec234628109d5ee1619f7d97c..50d1d1e65f6bad4ded5fdc70eb61e78d4ef243b0 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Order/StatusTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Order/StatusTest.php
@@ -13,7 +13,7 @@ namespace Magento\Sales\Test\Unit\Model\Order;
 class StatusTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Status|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -39,7 +39,7 @@ class StatusTest extends \PHPUnit_Framework_TestCase
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->resourceMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status',
+            'Magento\Sales\Model\ResourceModel\Order\Status',
             [],
             [],
             '',
@@ -152,7 +152,7 @@ class StatusTest extends \PHPUnit_Framework_TestCase
     protected function _getPreparedModel($resource = null, $eventDispatcher = null)
     {
         if (!$resource) {
-            $resource = $this->getMock('Magento\Sales\Model\Resource\Order\Status', [], [], '', false);
+            $resource = $this->getMock('Magento\Sales\Model\ResourceModel\Order\Status', [], [], '', false);
         }
         if (!$eventDispatcher) {
             $eventDispatcher = $this->getMock('Magento\Framework\Event\ManagerInterface', [], [], '', false);
@@ -174,7 +174,7 @@ class StatusTest extends \PHPUnit_Framework_TestCase
         $status = 'test_status';
         $visibleOnFront = true;
 
-        $resource = $this->getMock('Magento\Sales\Model\Resource\Order\Status', [], [], '', false);
+        $resource = $this->getMock('Magento\Sales\Model\ResourceModel\Order\Status', [], [], '', false);
         $resource->expects($this->once())
             ->method('beginTransaction');
         $resource->expects($this->once())
diff --git a/app/code/Magento/Sales/Test/Unit/Model/OrderNotifierTest.php b/app/code/Magento/Sales/Test/Unit/Model/OrderNotifierTest.php
index 53cd9bf2d2e15c08b8a65caf29b5bc3fe9a9469a..4d8c354b7e3abc0c2d11ce67c2bbdc522cc6bcb3 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/OrderNotifierTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/OrderNotifierTest.php
@@ -9,7 +9,7 @@ namespace Magento\Sales\Test\Unit\Model;
 use \Magento\Sales\Model\OrderNotifier;
 
 use Magento\Framework\Exception\MailException;
-use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory;
 
 /**
  * Class OrderNotifierTest
@@ -44,7 +44,7 @@ class OrderNotifierTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->historyCollectionFactory = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory',
             ['create'],
             [],
             '',
@@ -78,7 +78,7 @@ class OrderNotifierTest extends \PHPUnit_Framework_TestCase
     public function testNotifySuccess()
     {
         $historyCollection = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\History\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History\Collection',
             ['getUnnotifiedForInstance', 'save', 'setIsCustomerNotified'],
             [],
             '',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php b/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php
index bb549f3640583338a880744c08372f8870f0139c..e334be584109f0df3fda0bb7d0ef2c62296107f6 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/OrderTest.php
@@ -7,7 +7,7 @@ namespace Magento\Sales\Test\Unit\Model;
 
 use \Magento\Sales\Model\Order;
 
-use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory as HistoryCollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory as HistoryCollectionFactory;
 
 /**
  * Test class for \Magento\Sales\Model\Order
@@ -40,7 +40,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
     protected $incrementId;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Item | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Item | \PHPUnit_Framework_MockObject_MockObject
      */
     protected $item;
 
@@ -58,34 +58,34 @@ class OrderTest extends \PHPUnit_Framework_TestCase
     {
         $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->paymentCollectionFactoryMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Payment\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Payment\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->orderItemCollectionFactoryMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Item\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Item\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->historyCollectionFactoryMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->item = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Item',
+            'Magento\Sales\Model\ResourceModel\Order\Item',
             ['isDeleted', 'getQtyToInvoice', 'getParentItemId', 'getQuoteItemId', 'getLockedDoInvoice'],
             [],
             '',
             false
         );
-        $collection = $this->getMock('Magento\Sales\Model\Resource\Order\Item\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Sales\Model\ResourceModel\Order\Item\Collection', [], [], '', false);
         $collection->expects($this->any())
             ->method('setOrderFilter')
             ->willReturnSelf();
@@ -126,6 +126,30 @@ class OrderTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    public function testGetItemById()
+    {
+        $realOrderItemId = 1;
+        $fakeOrderItemId = 2;
+
+        $orderItem = $this->getMock(
+            'Magento\Sales\Model\Order\Item',
+            [],
+            [],
+            '',
+            false
+        );
+
+        $this->order->setData(
+            \Magento\Sales\Api\Data\OrderInterface::ITEMS,
+            [
+                $realOrderItemId => $orderItem
+            ]
+        );
+
+        $this->assertEquals($orderItem, $this->order->getItemById($realOrderItemId));
+        $this->assertEquals(null, $this->order->getItemById($fakeOrderItemId));
+    }
+
     /**
      * @param int|null $gettingQuoteItemId
      * @param int|null $quoteItemId
@@ -308,7 +332,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
 
     public function testCanEditIfHasInvoices()
     {
-        $invoiceCollection = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Invoice\Collection')
+        $invoiceCollection = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Invoice\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['count'])
             ->getMock();
@@ -325,7 +349,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
 
     public function testCanCancelCanReviewPayment()
     {
-        $paymentMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Payment')
+        $paymentMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Payment')
             ->disableOriginalConstructor()
             ->setMethods(['isDeleted', 'canReviewPayment', 'canFetchTransactionInfo', '__wakeUp'])
             ->getMock();
@@ -343,7 +367,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
 
     public function testCanCancelAllInvoiced()
     {
-        $paymentMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Payment')
+        $paymentMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Payment')
             ->disableOriginalConstructor()
             ->setMethods(['isDeleted', 'canReviewPayment', 'canFetchTransactionInfo', '__wakeUp'])
             ->getMock();
@@ -354,7 +378,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
             ->method('canFetchTransactionInfo')
             ->will($this->returnValue(false));
         $collectionMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Item\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Item\Collection',
             ['getItems', 'setOrderFilter'],
             [],
             '',
@@ -385,7 +409,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
 
     public function testCanCancelState()
     {
-        $paymentMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Payment')
+        $paymentMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Payment')
             ->disableOriginalConstructor()
             ->setMethods(['isDeleted', 'canReviewPayment', 'canFetchTransactionInfo', '__wakeUp'])
             ->getMock();
@@ -410,7 +434,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
      */
     public function testCanCancelActionFlag($cancelActionFlag)
     {
-        $paymentMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Payment')
+        $paymentMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Payment')
             ->disableOriginalConstructor()
             ->setMethods(['isDeleted', 'canReviewPayment', 'canFetchTransactionInfo', '__wakeUp'])
             ->getMock();
@@ -498,7 +522,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
     {
         $iterator = new \ArrayIterator([$paymentMock]);
 
-        $collectionMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Payment\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Payment\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['setOrderFilter', 'getIterator'])
             ->getMock();
@@ -576,7 +600,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
      */
     protected function prepareItemMock($qtyInvoiced)
     {
-        $itemMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Item')
+        $itemMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Item')
             ->disableOriginalConstructor()
             ->setMethods(['isDeleted', 'filterByTypes', 'filterByParent', 'getQtyToInvoice', '__wakeUp'])
             ->getMock();
@@ -587,7 +611,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
 
         $iterator = new \ArrayIterator([$itemMock]);
 
-        $itemCollectionMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Item\Collection')
+        $itemCollectionMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Item\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['setOrderFilter', 'getIterator', 'getItems'])
             ->getMock();
@@ -656,7 +680,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
         $collectionMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\History\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History\Collection',
             [
                 'setOrderFilter',
                 'setOrder',
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/AttributeTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/AttributeTest.php
similarity index 92%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/AttributeTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/AttributeTest.php
index c108d9e8e83ea9803435bfdf2db89922f29506f8..034fd0c7d4525eea530f977ffce8474fcbcac990 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/AttributeTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/AttributeTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Resource;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel;
 
 /**
  * Class AttributeTest
@@ -11,11 +11,11 @@ namespace Magento\Sales\Test\Unit\Model\Resource;
 class AttributeTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Attribute|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Attribute|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $attribute;
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $appResourceMock;
     /**
@@ -34,7 +34,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->appResourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -72,7 +72,7 @@ class AttributeTest extends \PHPUnit_Framework_TestCase
             ->method('insert');
         $this->connectionMock->expects($this->any())
             ->method('lastInsertId');
-        $this->attribute = new \Magento\Sales\Model\Resource\Attribute(
+        $this->attribute = new \Magento\Sales\Model\ResourceModel\Attribute(
             $this->appResourceMock,
             $this->eventManagerMock
         );
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/GridPoolTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/GridPoolTest.php
similarity index 76%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/GridPoolTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/GridPoolTest.php
index fe9a0fa65f03bc5381ffc4136f0c82bce51d54f6..7f1d6d3a421d0fc71d6f899e31ed3c961617daa9 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/GridPoolTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/GridPoolTest.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Sales\Test\Unit\Model\Resource;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel;
 
 /**
  * Class GridPoolTest
@@ -14,23 +14,23 @@ namespace Magento\Sales\Test\Unit\Model\Resource;
 class GridPoolTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\GridPool
+     * @var \Magento\Sales\Model\ResourceModel\GridPool
      */
     protected $gridPool;
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Grid|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Grid|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderGridMock;
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Invoice\Grid|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Grid|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $invoiceGridMock;
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Shipment\Grid|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Grid|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $shipmentGridMock;
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Creditmemo\Grid|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Grid|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $creditmemoGridMock;
     /**
@@ -44,16 +44,16 @@ class GridPoolTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->orderGridMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Grid', [], [], '', false
+            'Magento\Sales\Model\ResourceModel\Grid', [], [], '', false
         );
         $this->invoiceGridMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Grid', [], [], '', false
+            'Magento\Sales\Model\ResourceModel\Grid', [], [], '', false
         );
         $this->shipmentGridMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Grid', [], [], '', false
+            'Magento\Sales\Model\ResourceModel\Grid', [], [], '', false
         );
         $this->creditmemoGridMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Grid', [], [], '', false
+            'Magento\Sales\Model\ResourceModel\Grid', [], [], '', false
         );
         $this->statementMock = $this->getMockForAbstractClass('Zend_Db_Statement_Interface');
         $grids = [
@@ -62,7 +62,7 @@ class GridPoolTest extends \PHPUnit_Framework_TestCase
             'shipment_grid' => $this->shipmentGridMock,
             'creditmemo_grid' => $this->creditmemoGridMock
         ];
-        $this->gridPool = new \Magento\Sales\Model\Resource\GridPool($grids);
+        $this->gridPool = new \Magento\Sales\Model\ResourceModel\GridPool($grids);
     }
 
     /**
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/HelperTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/HelperTest.php
similarity index 91%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/HelperTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/HelperTest.php
index d002a790a96ae85962366dee2e57f3f08fe9b8af..8cfc71f74eb4d6b11e6a4c48baa6addd27fd0386 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/HelperTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/HelperTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Resource;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
@@ -28,7 +28,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase
     private $connectionMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Helper
+     * @var \Magento\Sales\Model\ResourceModel\Helper
      */
     private $helper;
 
@@ -39,7 +39,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase
     {
         $objectManager = new ObjectManagerHelper($this);
         $this->appResource = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -47,7 +47,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->resourceHelper = $this->getMock(
-            'Magento\Reports\Model\Resource\Helper',
+            'Magento\Reports\Model\ResourceModel\Helper',
             [],
             [],
             '',
@@ -63,7 +63,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->helper = $objectManager->getObject(
-            'Magento\Sales\Model\Resource\Helper',
+            'Magento\Sales\Model\ResourceModel\Helper',
             [
                 'resource' => $this->appResource,
                 'reportsResourceHelper' => $this->resourceHelper
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/AddressTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php
similarity index 87%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/AddressTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php
index 839aecf2bff30449a35718b870b61798e8b37d4b..ffeb136782b1ce1b16873f54caa70ce3a1dbbb88 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/AddressTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/AddressTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Resource\Order;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order;
 
 /**
  * Class AddressTest
@@ -11,12 +11,12 @@ namespace Magento\Sales\Test\Unit\Model\Resource\Order;
 class AddressTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Address
+     * @var \Magento\Sales\Model\ResourceModel\Order\Address
      */
     protected $addressResource;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $appResourceMock;
 
@@ -41,12 +41,12 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     protected $validatorMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\GridPool|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\GridPool|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $gridPoolMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -67,7 +67,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->appResourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -88,14 +88,14 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->gridPoolMock = $this->getMock(
-            'Magento\Sales\Model\Resource\GridPool',
+            'Magento\Sales\Model\ResourceModel\GridPool',
             ['refreshByOrderId'],
             [],
             '',
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -113,7 +113,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
         $this->connectionMock->expects($this->any())
             ->method('lastInsertId');
         $this->addressResource = $objectManager->getObject(
-            'Magento\Sales\Model\Resource\Order\Address',
+            'Magento\Sales\Model\ResourceModel\Order\Address',
             [
                 'resource' => $this->appResourceMock,
                 'validator' => $this->validatorMock,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Creditmemo/CommentTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/CommentTest.php
similarity index 86%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Creditmemo/CommentTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/CommentTest.php
index 8987c0a98f9c599b277fac812e49f8ee671db2ad..1a0c25004dd66102e2b6cdd2d3d31fa32098abbb 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Creditmemo/CommentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/CommentTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Resource\Order\Creditmemo;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Creditmemo;
 
 /**
  * Class CommentTest
@@ -11,7 +11,7 @@ namespace Magento\Sales\Test\Unit\Model\Resource\Order\Creditmemo;
 class CommentTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Creditmemo\Comment
+     * @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment
      */
     protected $commentResource;
 
@@ -21,7 +21,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
     protected $commentModelMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $appResourceMock;
 
@@ -35,7 +35,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
      */
     protected $validatorMock;
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -52,7 +52,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->appResourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -73,7 +73,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -94,20 +94,20 @@ class CommentTest extends \PHPUnit_Framework_TestCase
         $this->commentModelMock->expects($this->any())->method('isSaveAllowed')->will($this->returnValue(true));
 
         $relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\Resource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock);
         $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock);
 
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->commentResource = $objectManager->getObject(
-            'Magento\Sales\Model\Resource\Order\Creditmemo\Comment',
+            'Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment',
             [
                 'context' => $contextMock,
                 'validator' => $this->validatorMock,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/Relation/RefundTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/Relation/RefundTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..81efd7fbebc61c63a7be64d5964538173e97dc78
--- /dev/null
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/Relation/RefundTest.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Creditmemo\Relation;
+
+/**
+ * Class RefundTest
+ */
+class RefundTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Relation\Refund
+     */
+    protected $refundResource;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $orderRepositoryMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $invoiceRepositoryMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $priceCurrencyMock;
+
+    /**
+     * Set up
+     */
+    protected function setUp()
+    {
+        $this->orderRepositoryMock = $this->getMockBuilder('Magento\Sales\Api\OrderRepositoryInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->invoiceRepositoryMock = $this->getMockBuilder('Magento\Sales\Api\InvoiceRepositoryInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->priceCurrencyMock = $this->getMockBuilder('Magento\Framework\Pricing\PriceCurrencyInterface')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->refundResource = $objectManager->getObject(
+            'Magento\Sales\Model\ResourceModel\Order\Creditmemo\Relation\Refund',
+            [
+                'orderRepository' => $this->orderRepositoryMock,
+                'invoiceRepository' => $this->invoiceRepositoryMock,
+                'priceCurrency' => $this->priceCurrencyMock
+            ]
+        );
+    }
+
+    public function testProcessRelation()
+    {
+        $paymentMock = $this->getMockBuilder('Magento\Sales\Model\Order\Payment')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $orderMock = $this->getMockBuilder('Magento\Sales\Model\Order')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $orderMock->expects($this->once())
+            ->method('getPayment')
+            ->willReturn($paymentMock);
+
+        $creditmemoMock = $this->getMockBuilder('Magento\Sales\Model\Order\Creditmemo')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $creditmemoMock->expects($this->once())
+            ->method('getState')
+            ->willReturn(\Magento\Sales\Model\Order\Creditmemo::STATE_REFUNDED);
+        $creditmemoMock->expects($this->any())
+            ->method('getOrder')
+            ->willReturn($orderMock);
+
+        $this->orderRepositoryMock->expects($this->once())
+            ->method('save')
+            ->with($orderMock);
+
+        $this->assertNull($this->refundResource->processRelation($creditmemoMock));
+    }
+}
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Creditmemo/RelationTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/RelationTest.php
similarity index 86%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Creditmemo/RelationTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/RelationTest.php
index 4bcc1d94ad54d3373a3c0cc5fc6c868b675ee6e1..d12fc0fdb6c3619687e6ce3b864a5e4bc2adf2a2 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Creditmemo/RelationTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Creditmemo/RelationTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Test\Unit\Model\Resource\Order\Creditmemo;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Creditmemo;
 
 /**
  * Class RelationTest
@@ -12,12 +12,12 @@ namespace Magento\Sales\Test\Unit\Model\Resource\Order\Creditmemo;
 class RelationTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Creditmemo\Relation
+     * @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Relation
      */
     protected $relationProcessor;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Creditmemo\Item|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $itemResourceMock;
 
@@ -37,13 +37,13 @@ class RelationTest extends \PHPUnit_Framework_TestCase
     protected $itemMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Creditmemo\Comment|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $commentResourceMock;
 
     public function setUp()
     {
-        $this->itemResourceMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Creditmemo\Item')
+        $this->itemResourceMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
@@ -51,7 +51,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
                 ]
             )
             ->getMock();
-        $this->commentResourceMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Creditmemo\Comment')
+        $this->commentResourceMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
@@ -80,7 +80,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
         $this->commentMock = $this->getMockBuilder('Magento\Sales\Model\Order\Creditmemo')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->relationProcessor = new \Magento\Sales\Model\Resource\Order\Creditmemo\Relation(
+        $this->relationProcessor = new \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Relation(
             $this->itemResourceMock,
             $this->commentResourceMock
         );
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Handler/AddressTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Handler/AddressTest.php
similarity index 90%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Handler/AddressTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Handler/AddressTest.php
index 4ec3a5d0f9363cef7999e6658a8257cf09c76786..c2a49abfdda2c72584f54719f148352c504c0afe 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Handler/AddressTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Handler/AddressTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Resource\Order\Handler;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Handler;
 
 /**
  * Class AddressTest
@@ -11,15 +11,15 @@ namespace Magento\Sales\Test\Unit\Model\Resource\Order\Handler;
 class AddressTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Handler\Address
+     * @var \Magento\Sales\Model\ResourceModel\Order\Handler\Address
      */
     protected $address;
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Address\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Address\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $addressCollectionMock;
     /**
-     * @var \Magento\Sales\Model\Resource\Attribute|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Attribute|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $attributeMock;
     /**
@@ -34,7 +34,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->attributeMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Attribute',
+            'Magento\Sales\Model\ResourceModel\Attribute',
             [],
             [],
             '',
@@ -69,13 +69,13 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->addressCollectionMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Address\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Address\Collection',
             [],
             [],
             '',
             false
         );
-        $this->address = new \Magento\Sales\Model\Resource\Order\Handler\Address(
+        $this->address = new \Magento\Sales\Model\ResourceModel\Order\Handler\Address(
             $this->attributeMock
         );
     }
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Handler/StateTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Handler/StateTest.php
similarity index 95%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Handler/StateTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Handler/StateTest.php
index 30baabf851a18b7b7476cba3a09c5fb7cc8750d8..521c2a9c5201fe4e7da7e63987156dbc436736de 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Handler/StateTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Handler/StateTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Resource\Order\Handler;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Handler;
 
 use Magento\Sales\Model\Order;
 
@@ -13,7 +13,7 @@ use Magento\Sales\Model\Order;
 class StateTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Handler\State
+     * @var \Magento\Sales\Model\ResourceModel\Order\Handler\State
      */
     protected $state;
     /**
@@ -58,13 +58,13 @@ class StateTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->addressCollectionMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Address\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Address\Collection',
             [],
             [],
             '',
             false
         );
-        $this->state = new \Magento\Sales\Model\Resource\Order\Handler\State();
+        $this->state = new \Magento\Sales\Model\ResourceModel\Order\Handler\State();
     }
 
     /**
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Invoice/CommentTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/CommentTest.php
similarity index 86%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Invoice/CommentTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/CommentTest.php
index 3879a40c820bbe6af4e95b4cc1f5eabbfd88e171..f6f3276422d09cb38ae802b7601c6236699010ba 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Invoice/CommentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/CommentTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Resource\Order\Invoice;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Invoice;
 
 /**
  * Class CommentTest
@@ -11,7 +11,7 @@ namespace Magento\Sales\Test\Unit\Model\Resource\Order\Invoice;
 class CommentTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Invoice\Comment
+     * @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment
      */
     protected $commentResource;
 
@@ -21,7 +21,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
     protected $commentModelMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $appResourceMock;
 
@@ -35,7 +35,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
      */
     protected $validatorMock;
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -52,7 +52,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->appResourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -73,7 +73,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -93,20 +93,20 @@ class CommentTest extends \PHPUnit_Framework_TestCase
         $this->commentModelMock->expects($this->any())->method('isSaveAllowed')->will($this->returnValue(true));
 
         $relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\Resource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock);
         $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock);
 
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->commentResource = $objectManager->getObject(
-            'Magento\Sales\Model\Resource\Order\Invoice\Comment',
+            'Magento\Sales\Model\ResourceModel\Order\Invoice\Comment',
             [
                 'context' => $contextMock,
                 'validator' => $this->validatorMock,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Invoice/RelationTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/RelationTest.php
similarity index 86%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Invoice/RelationTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/RelationTest.php
index 852901f95893bf00816c1f70b8b9aafdc869dac9..d1e2d034d198e7ff979ac52b1e0aa9ace2473786 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Invoice/RelationTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Invoice/RelationTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Test\Unit\Model\Resource\Order\Invoice;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Invoice;
 
 /**
  * Class RelationTest
@@ -12,17 +12,17 @@ namespace Magento\Sales\Test\Unit\Model\Resource\Order\Invoice;
 class RelationTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Invoice\Relation
+     * @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Relation
      */
     protected $relationProcessor;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Invoice\Item|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Item|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $invoiceItemResourceMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Invoice\Comment|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Comment|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $invoiceCommentResourceMock;
 
@@ -48,7 +48,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->invoiceItemResourceMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Invoice\Item')
+        $this->invoiceItemResourceMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Invoice\Item')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
@@ -56,7 +56,8 @@ class RelationTest extends \PHPUnit_Framework_TestCase
                 ]
             )
             ->getMock();
-        $this->invoiceCommentResourceMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Invoice\Comment')
+        $this->invoiceCommentResourceMock =
+            $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Invoice\Comment')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
@@ -86,7 +87,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
-        $this->relationProcessor = new \Magento\Sales\Model\Resource\Order\Invoice\Relation(
+        $this->relationProcessor = new \Magento\Sales\Model\ResourceModel\Order\Invoice\Relation(
             $this->invoiceItemResourceMock,
             $this->invoiceCommentResourceMock
         );
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/RelationTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/RelationTest.php
similarity index 92%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/RelationTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/RelationTest.php
index 260d75f12467ab523bfef212daa9220073d25230..ac97f0d7bcaab3c2041dd0f6e29599f04a298e16 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/RelationTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/RelationTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Test\Unit\Model\Resource\Order;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order;
 
 /**
  * Class RelationTest
@@ -12,11 +12,11 @@ namespace Magento\Sales\Test\Unit\Model\Resource\Order;
 class RelationTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Relation
+     * @var \Magento\Sales\Model\ResourceModel\Order\Relation
      */
     protected $relationProcessor;
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Handler\Address|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Handler\Address|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $addressHandlerMock;
 
@@ -26,12 +26,12 @@ class RelationTest extends \PHPUnit_Framework_TestCase
     protected $orderItemRepositoryMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Payment|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Payment|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $orderPaymentResourceMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Status\History|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status\History|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $statusHistoryResource;
 
@@ -62,7 +62,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->addressHandlerMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Handler\Address')
+        $this->addressHandlerMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Handler\Address')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
@@ -79,7 +79,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
                 ]
             )
             ->getMockForAbstractClass();
-        $this->orderPaymentResourceMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Payment')
+        $this->orderPaymentResourceMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Payment')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
@@ -87,7 +87,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
                 ]
             )
             ->getMock();
-        $this->statusHistoryResource = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Status\History')
+        $this->statusHistoryResource = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Status\History')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
@@ -152,7 +152,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
                 ]
             )
             ->getMock();
-        $this->relationProcessor = new \Magento\Sales\Model\Resource\Order\Relation(
+        $this->relationProcessor = new \Magento\Sales\Model\ResourceModel\Order\Relation(
             $this->addressHandlerMock,
             $this->orderItemRepositoryMock,
             $this->orderPaymentResourceMock,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Shipment/CommentTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/CommentTest.php
similarity index 86%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Shipment/CommentTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/CommentTest.php
index 24c8a967073326881bd58533d2211eda24102830..b45655d8b8528e4a55c8d5718df36541812a8c98 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Shipment/CommentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/CommentTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Resource\Order\Shipment;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Shipment;
 
 /**
  * Class CommentTest
@@ -11,7 +11,7 @@ namespace Magento\Sales\Test\Unit\Model\Resource\Order\Shipment;
 class CommentTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Shipment\Comment
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment
      */
     protected $commentResource;
 
@@ -21,7 +21,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
     protected $commentModelMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $appResourceMock;
 
@@ -35,7 +35,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
      */
     protected $validatorMock;
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -52,7 +52,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->appResourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -73,7 +73,7 @@ class CommentTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -93,20 +93,20 @@ class CommentTest extends \PHPUnit_Framework_TestCase
         $this->commentModelMock->expects($this->any())->method('isSaveAllowed')->will($this->returnValue(true));
 
         $relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\Resource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock);
         $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock);
 
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->commentResource = $objectManager->getObject(
-            'Magento\Sales\Model\Resource\Order\Shipment\Comment',
+            'Magento\Sales\Model\ResourceModel\Order\Shipment\Comment',
             [
                 'context' => $contextMock,
                 'validator' => $this->validatorMock,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Shipment/RelationTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/RelationTest.php
similarity index 86%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Shipment/RelationTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/RelationTest.php
index 8a6a11b7872f0d4c5bc58099a292b0f4dd3a69f4..d72916ce667d2ef1ef89870db377b922255e74dc 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Shipment/RelationTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/RelationTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Test\Unit\Model\Resource\Order\Shipment;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Shipment;
 
 /**
  * Class RelationTest
@@ -12,22 +12,22 @@ namespace Magento\Sales\Test\Unit\Model\Resource\Order\Shipment;
 class RelationTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Shipment\Relation
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Relation
      */
     protected $relationProcessor;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Shipment\Item|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Item|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $itemResourceMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Shipment\Track|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Track|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $trackResourceMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Shipment\Comment|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Comment|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $commentResourceMock;
 
@@ -53,7 +53,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->itemResourceMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Shipment\Item')
+        $this->itemResourceMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Shipment\Item')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
@@ -61,7 +61,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
                 ]
             )
             ->getMock();
-        $this->commentResourceMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Shipment\Comment')
+        $this->commentResourceMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Shipment\Comment')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
@@ -69,7 +69,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
                 ]
             )
             ->getMock();
-        $this->trackResourceMock = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Shipment\Track')
+        $this->trackResourceMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Shipment\Track')
             ->disableOriginalConstructor()
             ->setMethods(
                 [
@@ -102,7 +102,7 @@ class RelationTest extends \PHPUnit_Framework_TestCase
         $this->commentMock = $this->getMockBuilder('Magento\Sales\Model\Order\Shipment')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->relationProcessor = new \Magento\Sales\Model\Resource\Order\Shipment\Relation(
+        $this->relationProcessor = new \Magento\Sales\Model\ResourceModel\Order\Shipment\Relation(
             $this->itemResourceMock,
             $this->trackResourceMock,
             $this->commentResourceMock
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Shipment/TrackTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/TrackTest.php
similarity index 86%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Shipment/TrackTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/TrackTest.php
index 7d0f6989da59691f43c9c82ef4e12e180f0ef8e3..87b96f2d2e44ea144b8c6a3e32cbcd92eb216589 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Shipment/TrackTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Shipment/TrackTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Resource\Order\Shipment;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Shipment;
 
 /**
  * Class TrackTest
@@ -11,7 +11,7 @@ namespace Magento\Sales\Test\Unit\Model\Resource\Order\Shipment;
 class TrackTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Shipment\Track
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Track
      */
     protected $trackResource;
 
@@ -21,7 +21,7 @@ class TrackTest extends \PHPUnit_Framework_TestCase
     protected $trackModelMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $appResourceMock;
 
@@ -35,7 +35,7 @@ class TrackTest extends \PHPUnit_Framework_TestCase
      */
     protected $validatorMock;
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -52,7 +52,7 @@ class TrackTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->appResourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -73,7 +73,7 @@ class TrackTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -93,20 +93,20 @@ class TrackTest extends \PHPUnit_Framework_TestCase
         $this->trackModelMock->expects($this->any())->method('isSaveAllowed')->will($this->returnValue(true));
 
         $relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\Resource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock);
         $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock);
 
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->trackResource = $objectManager->getObject(
-            'Magento\Sales\Model\Resource\Order\Shipment\Track',
+            'Magento\Sales\Model\ResourceModel\Order\Shipment\Track',
             [
                 'context' => $contextMock,
                 'validator' => $this->validatorMock,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Status/History/CollectionTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/History/CollectionTest.php
similarity index 88%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Status/History/CollectionTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/History/CollectionTest.php
index b2e646ed70acde146e4ee639058ed66e96a5b015..ef6984b3abfce6d65c55273ec9daf349ab3a12d8 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Status/History/CollectionTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/History/CollectionTest.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Test\Unit\Model\Resource\Order\Status\History;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Status\History;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Status\History\Collection
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status\History\Collection
      */
     protected $collection;
 
@@ -34,7 +34,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $historyItemMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -48,7 +48,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
      */
     protected $entityFactoryMock;
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -65,7 +65,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Sales\Model\Resource\EntityAbstract',
+            'Magento\Sales\Model\ResourceModel\EntityAbstract',
             [],
             '',
             false,
@@ -74,7 +74,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ['getConnection', 'getMainTable', 'getTable', '__wakeup']
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -110,7 +110,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($this->historyItemMock));
 
         $logger = $this->getMock('Psr\Log\LoggerInterface');
-        $this->collection = new \Magento\Sales\Model\Resource\Order\Status\History\Collection(
+        $this->collection = new \Magento\Sales\Model\ResourceModel\Order\Status\History\Collection(
             $this->entityFactoryMock,
             $logger,
             $this->fetchStrategyMock,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Status/HistoryTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/HistoryTest.php
similarity index 85%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Status/HistoryTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/HistoryTest.php
index 8b0643b3e328d65b57f4bcfa2f6bd0b4b40a9cef..27a1c50495f3f3221bb8a4fc386c11793c667e5a 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Status/HistoryTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Status/HistoryTest.php
@@ -3,21 +3,21 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Resource\Order\Status;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Status;
 
 /**
  * Class HistoryTest
- * @package Magento\Sales\Model\Resource\Order\Status
+ * @package Magento\Sales\Model\ResourceModel\Order\Status
  */
 class HistoryTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Status\History
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status\History
      */
     protected $historyResource;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $appResourceMock;
 
@@ -37,14 +37,14 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
     protected $validatorMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
     public function setUp()
     {
         $this->appResourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -65,7 +65,7 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
@@ -84,19 +84,19 @@ class HistoryTest extends \PHPUnit_Framework_TestCase
             ->method('lastInsertId');
 
         $relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\Resource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->appResourceMock);
         $contextMock->expects($this->once())->method('getObjectRelationProcessor')->willReturn($relationProcessorMock);
 
         $this->historyResource = $objectManager->getObject(
-            'Magento\Sales\Model\Resource\Order\Status\History',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History',
             [
                 'context' => $contextMock,
                 'validator' => $this->validatorMock,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/StatusTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/StatusTest.php
similarity index 90%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/StatusTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/StatusTest.php
index 6fd225a7a75d195a31103ca2f2776e7b35020f0a..b03a438a46168b3adf5ae27fcd56190d9f3b7455 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/StatusTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/StatusTest.php
@@ -6,22 +6,22 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Sales\Test\Unit\Model\Resource\Order;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order;
 
 /**
  * Class StatusTest
  *
- * @package Magento\Sales\Model\Resource
+ * @package Magento\Sales\Model\ResourceModel
  */
 class StatusTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Status
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status
      */
     protected $model;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -56,7 +56,7 @@ class StatusTest extends \PHPUnit_Framework_TestCase
         $this->connectionMock->expects($this->any())->method('select')->will($this->returnValue($this->selectMock));
 
         $this->resourceMock = $this->getMock(
-            '\Magento\Framework\App\Resource',
+            '\Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -75,7 +75,7 @@ class StatusTest extends \PHPUnit_Framework_TestCase
 
         $this->configMock = $this->getMock('\Magento\Eav\Model\Config', ['getConnectionName'], [], '', false);
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->model = $objectManager->getObject('Magento\Sales\Model\Resource\Order\Status',
+        $this->model = $objectManager->getObject('Magento\Sales\Model\ResourceModel\Order\Status',
             ['resource' => $this->resourceMock]
         );
     }
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Tax/ItemTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Tax/ItemTest.php
similarity index 89%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Tax/ItemTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Tax/ItemTest.php
index 0cf9c15e850c7f8d6ab0c8f1cc5c5ae6bcb22fbe..5bed5a9003ea6a97b3f5e8a700de7aef9ba36a5e 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/Order/Tax/ItemTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/Order/Tax/ItemTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Resource\Order\Tax;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel\Order\Tax;
 
 /**
  * Class ItemTest
@@ -16,12 +16,12 @@ class ItemTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $appResourceMock;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Tax\Item
+     * @var \Magento\Sales\Model\ResourceModel\Order\Tax\Item
      */
     protected $taxItem;
 
@@ -38,7 +38,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->appResourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -50,7 +50,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
         $this->appResourceMock->expects($this->any())->method('getTableName')->willReturnArgument(0);
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->taxItem = $objectManager->getObject(
-            'Magento\Sales\Model\Resource\Order\Tax\Item',
+            'Magento\Sales\Model\ResourceModel\Order\Tax\Item',
             [
                 'resource' => $this->appResourceMock
             ]
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Resource/OrderTest.php b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/OrderTest.php
similarity index 89%
rename from app/code/Magento/Sales/Test/Unit/Model/Resource/OrderTest.php
rename to app/code/Magento/Sales/Test/Unit/Model/ResourceModel/OrderTest.php
index 7b3db77a193818a4fa6d458f5918b7172e315959..b84194d4fc18460e3c7c770eae6406be44014a77 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Resource/OrderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/ResourceModel/OrderTest.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Resource;
+namespace Magento\Sales\Test\Unit\Model\ResourceModel;
 
-use Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite;
-use \Magento\Sales\Model\Resource\Order;
+use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
+use \Magento\Sales\Model\ResourceModel\Order;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
@@ -19,11 +19,11 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHe
 class OrderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order
+     * @var \Magento\Sales\Model\ResourceModel\Order
      */
     protected $resource;
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
     /**
@@ -59,7 +59,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
      */
     protected $connectionMock;
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $entitySnapshotMock;
 
@@ -69,7 +69,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
     protected $relationCompositeMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $objectRelationProcessorMock;
     /**
@@ -77,7 +77,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
-        $this->resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->orderMock = $this->getMock('Magento\Sales\Model\Order', [], [], '', false);
         $this->orderItemMock = $this->getMock(
             'Magento\Sales\Model\Order\Item',
@@ -126,27 +126,27 @@ class OrderTest extends \PHPUnit_Framework_TestCase
         );
         $this->salesSequenceMock = $this->getMock('Magento\SalesSequence\Model\Sequence', [], [], '', false);
         $this->entitySnapshotMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             [],
             [],
             '',
             false
         );
         $this->relationCompositeMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite',
             [],
             [],
             '',
             false
         );
         $this->objectRelationProcessorMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\ObjectRelationProcessor',
+            'Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
         $contextMock->expects($this->once())
             ->method('getObjectRelationProcessor')
@@ -154,7 +154,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
 
         $objectManager = new ObjectManagerHelper($this);
         $this->resource = $objectManager->getObject(
-            'Magento\Sales\Model\Resource\Order',
+            'Magento\Sales\Model\ResourceModel\Order',
             [
                 'context' => $contextMock,
                 'sequenceManager' => $this->salesSequenceManagerMock,
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Rss/NewOrderTest.php b/app/code/Magento/Sales/Test/Unit/Model/Rss/NewOrderTest.php
index 64152cda276410d4f31f1711e81735745e946c9d..a0c73185d6634c8e0245043faf7a3ef33fc28dc4 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Rss/NewOrderTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Rss/NewOrderTest.php
@@ -131,7 +131,7 @@ class NewOrderTest extends \PHPUnit_Framework_TestCase
         $order->expects($this->once())->method('getIncrementId')->will($this->returnValue('100000001'));
         $order->expects($this->once())->method('getCreatedAt')->will($this->returnValue(time()));
 
-        $collection = $this->getMockBuilder('\Magento\Sales\Model\Resource\Order\Collection')
+        $collection = $this->getMockBuilder('\Magento\Sales\Model\ResourceModel\Order\Collection')
             ->setMethods(['addAttributeToFilter', 'addAttributeToSort', 'getIterator'])
             ->disableOriginalConstructor()->getMock();
         $collection->expects($this->once())->method('addAttributeToFilter')->will($this->returnSelf());
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Rss/OrderStatusTest.php b/app/code/Magento/Sales/Test/Unit/Model/Rss/OrderStatusTest.php
index 05d77a8f33fee634ffcaccdca8925434e0825b84..491fed095b02693c5f228af671cd17060c4da5c8 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Rss/OrderStatusTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Model/Rss/OrderStatusTest.php
@@ -89,7 +89,8 @@ class OrderStatusTest extends \PHPUnit_Framework_TestCase
         $this->objectManager = $this->getMock('Magento\Framework\ObjectManagerInterface');
         $this->urlInterface = $this->getMock('Magento\Framework\UrlInterface');
         $this->requestInterface = $this->getMock('Magento\Framework\App\RequestInterface');
-        $this->orderStatusFactory = $this->getMockBuilder('Magento\Sales\Model\Resource\Order\Rss\OrderStatusFactory')
+        $this->orderStatusFactory =
+            $this->getMockBuilder('Magento\Sales\Model\ResourceModel\Order\Rss\OrderStatusFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -137,7 +138,7 @@ class OrderStatusTest extends \PHPUnit_Framework_TestCase
         $this->requestInterface->expects($this->any())->method('getParam')
             ->with('data')
             ->will($this->returnValue('eyJvcmRlcl9pZCI6MSwiaW5jcmVtZW50X2lkIjoiMTAwMDAwMDAxIiwiY3VzdG9tZXJfaWQiOjF9'));
-        $resource = $this->getMockBuilder('\Magento\Sales\Model\Resource\Order\Rss\OrderStatus')
+        $resource = $this->getMockBuilder('\Magento\Sales\Model\ResourceModel\Order\Rss\OrderStatus')
             ->setMethods(['getAllCommentCollection'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/Backend/CatalogPriceRuleTest.php b/app/code/Magento/Sales/Test/Unit/Observer/Backend/CatalogPriceRuleTest.php
similarity index 51%
rename from app/code/Magento/Sales/Test/Unit/Model/Observer/Backend/CatalogPriceRuleTest.php
rename to app/code/Magento/Sales/Test/Unit/Observer/Backend/CatalogPriceRuleTest.php
index 5e2bf0275dfb9ef62b0f71ad7a8876e52ef9cb69..483dd014d71b2cd8486934eab80acb2ed3a8e40a 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Observer/Backend/CatalogPriceRuleTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Observer/Backend/CatalogPriceRuleTest.php
@@ -3,12 +3,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Observer\Backend;
+namespace Magento\Sales\Test\Unit\Observer\Backend;
+
+use Magento\Framework\Event\Observer;
+use Magento\Sales\Observer\Backend\CatalogPriceRule;
 
 class CatalogPriceRuleTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Observer\Backend\CatalogPriceRule
+     * @var CatalogPriceRule
      */
     protected $_model;
 
@@ -17,15 +20,21 @@ class CatalogPriceRuleTest extends \PHPUnit_Framework_TestCase
      */
     protected $_quoteMock;
 
+    /**
+     * @var Observer|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $eventObserverMock;
+
     protected function setUp()
     {
-        $this->_quoteMock = $this->getMock('Magento\Quote\Model\Resource\Quote', [], [], '', false);
-        $this->_model = new \Magento\Sales\Model\Observer\Backend\CatalogPriceRule($this->_quoteMock);
+        $this->eventObserverMock = $this->getMock('Magento\Framework\Event\Observer');
+        $this->_quoteMock = $this->getMock('Magento\Quote\Model\ResourceModel\Quote', [], [], '', false);
+        $this->_model = new CatalogPriceRule($this->_quoteMock);
     }
 
     public function testDispatch()
     {
         $this->_quoteMock->expects($this->once())->method('markQuotesRecollectOnCatalogRules');
-        $this->_model->dispatch();
+        $this->_model->execute($this->eventObserverMock);
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/Backend/CatalogProductQuoteTest.php b/app/code/Magento/Sales/Test/Unit/Observer/Backend/CatalogProductSaveAfterObserverTest.php
similarity index 66%
rename from app/code/Magento/Sales/Test/Unit/Model/Observer/Backend/CatalogProductQuoteTest.php
rename to app/code/Magento/Sales/Test/Unit/Observer/Backend/CatalogProductSaveAfterObserverTest.php
index 95708e478a0ac800e040f0487d5558e8c8ae34b3..7672067f86b66596bc350ef6f8f9c61dde82fa3c 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Observer/Backend/CatalogProductQuoteTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Observer/Backend/CatalogProductSaveAfterObserverTest.php
@@ -3,12 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Observer\Backend;
+namespace Magento\Sales\Test\Unit\Observer\Backend;
 
-class CatalogProductQuoteTest extends \PHPUnit_Framework_TestCase
+use Magento\Sales\Observer\Backend\CatalogProductSaveAfterObserver;
+
+class CatalogProductSaveAfterObserverTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Observer\Backend\CatalogProductQuote
+     * @var CatalogProductSaveAfterObserver
      */
     protected $_model;
 
@@ -29,7 +31,7 @@ class CatalogProductQuoteTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_quoteMock = $this->getMock('Magento\Quote\Model\Resource\Quote', [], [], '', false);
+        $this->_quoteMock = $this->getMock('Magento\Quote\Model\ResourceModel\Quote', [], [], '', false);
         $this->_observerMock = $this->getMock('Magento\Framework\Event\Observer', [], [], '', false);
         $this->_eventMock = $this->getMock(
             'Magento\Framework\Event',
@@ -39,7 +41,7 @@ class CatalogProductQuoteTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->_observerMock->expects($this->any())->method('getEvent')->will($this->returnValue($this->_eventMock));
-        $this->_model = new \Magento\Sales\Model\Observer\Backend\CatalogProductQuote($this->_quoteMock);
+        $this->_model = new CatalogProductSaveAfterObserver($this->_quoteMock);
     }
 
     /**
@@ -60,25 +62,14 @@ class CatalogProductQuoteTest extends \PHPUnit_Framework_TestCase
         $productMock->expects($this->once())->method('getId')->will($this->returnValue($productId));
         $productMock->expects($this->once())->method('getStatus')->will($this->returnValue($productStatus));
         $this->_quoteMock->expects($this->any())->method('markQuotesRecollect');
-        $this->_model->catalogProductSaveAfter($this->_observerMock);
+        $this->_model->execute($this->_observerMock);
     }
 
+    /**
+     * @return array
+     */
     public function statusUpdateDataProvider()
     {
         return [[125, 1], [100, 0]];
     }
-
-    public function testSubtractQtyFromQuotes()
-    {
-        $productMock = $this->getMock(
-            'Magento\Catalog\Model\Product',
-            ['getId', 'getStatus', '__wakeup'],
-            [],
-            '',
-            false
-        );
-        $this->_eventMock->expects($this->once())->method('getProduct')->will($this->returnValue($productMock));
-        $this->_quoteMock->expects($this->once())->method('substractProductFromQuotes')->with($productMock);
-        $this->_model->subtractQtyFromQuotes($this->_observerMock);
-    }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php b/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..64e0a7433497dfca4266867f412038ed5efb3d40
--- /dev/null
+++ b/app/code/Magento/Sales/Test/Unit/Observer/Backend/SubtractQtyFromQuotesObserverTest.php
@@ -0,0 +1,60 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Test\Unit\Observer\Backend;
+
+use Magento\Sales\Observer\Backend\SubtractQtyFromQuotesObserver;
+
+class SubtractQtyFromQuotesObserverTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var SubtractQtyFromQuotesObserver
+     */
+    protected $_model;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $_quoteMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $_observerMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $_eventMock;
+
+    protected function setUp()
+    {
+        $this->_quoteMock = $this->getMock('Magento\Quote\Model\ResourceModel\Quote', [], [], '', false);
+        $this->_observerMock = $this->getMock('Magento\Framework\Event\Observer', [], [], '', false);
+        $this->_eventMock = $this->getMock(
+            'Magento\Framework\Event',
+            ['getProduct', 'getStatus', 'getProductId'],
+            [],
+            '',
+            false
+        );
+        $this->_observerMock->expects($this->any())->method('getEvent')->will($this->returnValue($this->_eventMock));
+        $this->_model = new SubtractQtyFromQuotesObserver($this->_quoteMock);
+    }
+
+    public function testSubtractQtyFromQuotes()
+    {
+        $productMock = $this->getMock(
+            'Magento\Catalog\Model\Product',
+            ['getId', 'getStatus', '__wakeup'],
+            [],
+            '',
+            false
+        );
+        $this->_eventMock->expects($this->once())->method('getProduct')->will($this->returnValue($productMock));
+        $this->_quoteMock->expects($this->once())->method('substractProductFromQuotes')->with($productMock);
+        $this->_model->execute($this->_observerMock);
+    }
+}
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/Frontend/Quote/AddVatRequestParamsOrderCommentTest.php b/app/code/Magento/Sales/Test/Unit/Observer/Frontend/AddVatRequestParamsOrderCommentTest.php
similarity index 94%
rename from app/code/Magento/Sales/Test/Unit/Model/Observer/Frontend/Quote/AddVatRequestParamsOrderCommentTest.php
rename to app/code/Magento/Sales/Test/Unit/Observer/Frontend/AddVatRequestParamsOrderCommentTest.php
index c7b0a8f2ab9e48576d4d93cc91ee728533c9affa..c4bc2bc5ead6a55d8a76577484fffebf4cae3ed3 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Observer/Frontend/Quote/AddVatRequestParamsOrderCommentTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Observer/Frontend/AddVatRequestParamsOrderCommentTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Observer\Frontend\Quote;
+namespace Magento\Sales\Test\Unit\Observer\Frontend;
 
-use \Magento\Sales\Model\Observer\Frontend\Quote\AddVatRequestParamsOrderComment;
+use \Magento\Sales\Observer\Frontend\AddVatRequestParamsOrderComment;
 
 /**
- * Tests Magento\Sales\Model\Observer\Frontend\Quote\AddVatRequestParamsOrderComment
+ * Tests Magento\Sales\Observer\Frontend\AddVatRequestParamsOrderComment
  */
 class AddVatRequestParamsOrderCommentTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/Frontend/Quote/RestoreCustomerGroupIdTest.php b/app/code/Magento/Sales/Test/Unit/Observer/Frontend/RestoreCustomerGroupIdTest.php
similarity index 93%
rename from app/code/Magento/Sales/Test/Unit/Model/Observer/Frontend/Quote/RestoreCustomerGroupIdTest.php
rename to app/code/Magento/Sales/Test/Unit/Observer/Frontend/RestoreCustomerGroupIdTest.php
index 48ae41556ae878f5632ffae0bfef9e659735a7fd..d89da2cbfb90ef75bdb93f38271b0e1370431f1e 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Observer/Frontend/Quote/RestoreCustomerGroupIdTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Observer/Frontend/RestoreCustomerGroupIdTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Test\Unit\Model\Observer\Frontend\Quote;
+namespace Magento\Sales\Test\Unit\Observer\Frontend;
 
-use \Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId;
+use \Magento\Sales\Observer\Frontend\RestoreCustomerGroupId;
 
 /**
- * Tests Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupIdTest
+ * Tests Magento\Sales\Observer\Frontend\RestoreCustomerGroupIdTest
  */
 class RestoreCustomerGroupIdTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/app/code/Magento/Sales/Test/Unit/Model/Observer/IndexGridTest.php b/app/code/Magento/Sales/Test/Unit/Observer/GridSyncInsertObserverTest.php
similarity index 58%
rename from app/code/Magento/Sales/Test/Unit/Model/Observer/IndexGridTest.php
rename to app/code/Magento/Sales/Test/Unit/Observer/GridSyncInsertObserverTest.php
index 11ba16ec146294e2ae7efd8acf2aa35c66e79344..695fe3c6d78898cb7ed2ff2ad980fbbf39b82f13 100644
--- a/app/code/Magento/Sales/Test/Unit/Model/Observer/IndexGridTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Observer/GridSyncInsertObserverTest.php
@@ -4,28 +4,23 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Sales\Test\Unit\Model\Observer;
+namespace Magento\Sales\Test\Unit\Observer;
 
 /**
- * Class IndexGridTest
+ * Class GridSyncInsertObserverTest
  */
-class IndexGridTest extends \PHPUnit_Framework_TestCase
+class GridSyncInsertObserverTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Observer\IndexGrid
+     * @var \Magento\Sales\Observer\GridSyncInsertObserver
      */
-    protected $indexGrid;
+    protected $unit;
 
     /**
-     * @var \Magento\Sales\Model\Resource\GridInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Sales\Model\ResourceModel\GridInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $gridAggregatorMock;
 
-    /**
-     * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
-     */
-    protected $scopeConfigurationMock;
-
     /**
      * @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -36,11 +31,14 @@ class IndexGridTest extends \PHPUnit_Framework_TestCase
      */
     protected $salesModelMock;
 
+    /**
+     * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $scopeConfigurationMock;
+
     public function setUp()
     {
-        $this->gridAggregatorMock = $this->getMockBuilder('Magento\Sales\Model\Resource\GridInterface')
-            ->getMockForAbstractClass();
-        $this->scopeConfigurationMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
+        $this->gridAggregatorMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\GridInterface')
             ->getMockForAbstractClass();
         $this->eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
             ->disableOriginalConstructor()
@@ -59,7 +57,10 @@ class IndexGridTest extends \PHPUnit_Framework_TestCase
                 ]
             )
             ->getMockForAbstractClass();
-        $this->indexGrid = new \Magento\Sales\Model\Observer\IndexGrid(
+        $this->scopeConfigurationMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
+            ->getMockForAbstractClass();
+
+        $this->unit = new \Magento\Sales\Observer\GridSyncInsertObserver(
             $this->gridAggregatorMock,
             $this->scopeConfigurationMock
         );
@@ -80,7 +81,7 @@ class IndexGridTest extends \PHPUnit_Framework_TestCase
         $this->gridAggregatorMock->expects($this->once())
             ->method('refresh')
             ->with('sales-id-value');
-        $this->indexGrid->syncInsert($this->eventObserverMock);
+        $this->unit->execute($this->eventObserverMock);
     }
 
     public function testSyncInsertDisabled()
@@ -92,42 +93,6 @@ class IndexGridTest extends \PHPUnit_Framework_TestCase
         $this->gridAggregatorMock->expects($this->never())
             ->method('refresh')
             ->with('sales-id-value');
-        $this->indexGrid->syncInsert($this->eventObserverMock);
-    }
-
-    public function testSyncRemove()
-    {
-        $this->eventObserverMock->expects($this->once())
-            ->method('getDataObject')
-            ->willReturn($this->salesModelMock);
-        $this->salesModelMock->expects($this->once())
-            ->method('getId')
-            ->willReturn('sales-id-value');
-        $this->gridAggregatorMock->expects($this->once())
-            ->method('purge')
-            ->with('sales-id-value');
-        $this->indexGrid->syncRemove($this->eventObserverMock);
-    }
-
-    public function testAsyncInsert()
-    {
-        $this->scopeConfigurationMock->expects($this->once())
-            ->method('getValue')
-            ->with('dev/grid/async_indexing', 'default', null)
-            ->willReturn(true);
-        $this->gridAggregatorMock->expects($this->once())
-            ->method('refreshBySchedule');
-        $this->indexGrid->asyncInsert();
-    }
-
-    public function testAsyncInsertDisabled()
-    {
-        $this->scopeConfigurationMock->expects($this->once())
-            ->method('getValue')
-            ->with('dev/grid/async_indexing', 'default', null)
-            ->willReturn(false);
-        $this->gridAggregatorMock->expects($this->never())
-            ->method('refreshBySchedule');
-        $this->indexGrid->asyncInsert();
+        $this->unit->execute($this->eventObserverMock);
     }
 }
diff --git a/app/code/Magento/Sales/Test/Unit/Observer/GridSyncRemoveObserverTest.php b/app/code/Magento/Sales/Test/Unit/Observer/GridSyncRemoveObserverTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..dbd022d85c34effbc31527278cc93481e6676f48
--- /dev/null
+++ b/app/code/Magento/Sales/Test/Unit/Observer/GridSyncRemoveObserverTest.php
@@ -0,0 +1,73 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Sales\Test\Unit\Observer;
+
+/**
+ * Class GridSyncRemoveObserverTest
+ */
+class GridSyncRemoveObserverTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Sales\Observer\GridSyncRemoveObserver
+     */
+    protected $unit;
+
+    /**
+     * @var \Magento\Sales\Model\ResourceModel\GridInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $gridAggregatorMock;
+
+    /**
+     * @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $eventObserverMock;
+
+    /**
+     * @var \Magento\Sales\Model\AbstractModel|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $salesModelMock;
+
+    public function setUp()
+    {
+        $this->gridAggregatorMock = $this->getMockBuilder('Magento\Sales\Model\ResourceModel\GridInterface')
+            ->getMockForAbstractClass();
+        $this->eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
+            ->disableOriginalConstructor()
+            ->setMethods(
+                [
+                    'getObject',
+                    'getDataObject'
+                ]
+            )
+            ->getMock();
+        $this->salesModelMock = $this->getMockBuilder('Magento\Sales\Model\AbstractModel')
+            ->disableOriginalConstructor()
+            ->setMethods(
+                [
+                    'getId'
+                ]
+            )
+            ->getMockForAbstractClass();
+        $this->unit = new \Magento\Sales\Observer\GridSyncRemoveObserver(
+            $this->gridAggregatorMock
+        );
+    }
+
+    public function testSyncRemove()
+    {
+        $this->eventObserverMock->expects($this->once())
+            ->method('getDataObject')
+            ->willReturn($this->salesModelMock);
+        $this->salesModelMock->expects($this->once())
+            ->method('getId')
+            ->willReturn('sales-id-value');
+        $this->gridAggregatorMock->expects($this->once())
+            ->method('purge')
+            ->with('sales-id-value');
+        $this->unit->execute($this->eventObserverMock);
+    }
+}
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/AddressTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/AddressTest.php
index 99674219370ed4c0ed0fe3f5784fc03708cbf81c..379117ef1d2dfade9c6f787777ed97c4578a9114 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/AddressTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/AddressTest.php
@@ -19,10 +19,28 @@ class AddressTest extends \PHPUnit_Framework_TestCase
      */
     protected $model;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Escaper
+     */
+    protected $escaper;
+
     public function setUp()
     {
         $objectManager = new ObjectManager($this);
-        $this->model = $objectManager->getObject('Magento\Sales\Ui\Component\Listing\Column\Address');
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
+        $this->escaper = $this->getMock('Magento\Framework\Escaper', ['escapeHtml'], [], '', false);
+        $this->model = $objectManager->getObject(
+            'Magento\Sales\Ui\Component\Listing\Column\Address',
+            [
+                'context' => $contextMock,
+                'escaper' => $this->escaper,
+            ]
+        );
     }
 
     public function testPrepareDataSource()
@@ -39,6 +57,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
         ];
 
         $this->model->setData('name', $itemName);
+        $this->escaper->expects($this->once())->method('escapeHtml')->with($newItemValue)->willReturnArgument(0);
         $dataSource = $this->model->prepareDataSource($dataSource);
         $this->assertEquals($newItemValue, $dataSource['data']['items'][0][$itemName]);
     }
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/CustomerGroupTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/CustomerGroupTest.php
index 262f0fdcb94ff88633c148b2ab38c3b8f2e3c6f4..d0e9e34bf7ac8fe3a9e51cee368cc61a5f6bc05a 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/CustomerGroupTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/CustomerGroupTest.php
@@ -27,10 +27,16 @@ class CustomerGroupTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $objectManager = new ObjectManager($this);
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->groupRepository = $this->getMockForAbstractClass('Magento\Customer\Api\GroupRepositoryInterface');
         $this->model = $objectManager->getObject(
             'Magento\Sales\Ui\Component\Listing\Column\CustomerGroup',
-            ['groupRepository' => $this->groupRepository]
+            ['groupRepository' => $this->groupRepository, 'context' => $contextMock]
         );
     }
 
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PaymentMethodTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PaymentMethodTest.php
index 10e64a079d6112899079a7a6c696ae6bc34eafaf..d8424896f059bcc9618d2160d9a7dc0ac612567c 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PaymentMethodTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PaymentMethodTest.php
@@ -27,10 +27,16 @@ class PaymentMethodTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $objectManager = new ObjectManager($this);
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->paymentHelper = $this->getMock('Magento\Payment\Helper\Data', [], [], '', false);
         $this->model = $objectManager->getObject(
             'Magento\Sales\Ui\Component\Listing\Column\PaymentMethod',
-            ['paymentHelper' => $this->paymentHelper]
+            ['paymentHelper' => $this->paymentHelper, 'context' => $contextMock]
         );
     }
 
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PriceTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PriceTest.php
index edc68cf7ab480af81789b3b0d8aa22b6b83857c5..a3cf58f61c04bb5e4be793ae9e36fac7f06aa222 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PriceTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/PriceTest.php
@@ -27,10 +27,16 @@ class PriceTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $objectManager = new ObjectManager($this);
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->priceFormatterMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\PriceCurrencyInterface');
         $this->model = $objectManager->getObject(
             'Magento\Sales\Ui\Component\Listing\Column\Price',
-            ['priceFormatter' => $this->priceFormatterMock]
+            ['priceFormatter' => $this->priceFormatterMock, 'context' => $contextMock]
         );
     }
 
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/Status/OptionsTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/Status/OptionsTest.php
index 32bf994688ef34d262681e12af76237a3a23ca78..501e124b51d0096ad522f044f3dc0b396f6461f9 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/Status/OptionsTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/Status/OptionsTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Sales\Test\Unit\Ui\Component\Listing\Column\Status;
 
-use Magento\Sales\Model\Resource\Order\Status\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use Magento\Sales\Ui\Component\Listing\Column\Status\Options;
 
@@ -28,7 +28,7 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
     {
         $objectManager = new ObjectManager($this);
         $this->collectionFactoryMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory',
             ['create'],
             [],
             '',
@@ -42,7 +42,8 @@ class OptionsTest extends \PHPUnit_Framework_TestCase
 
     public function testToOptionArray()
     {
-        $collectionMock = $this->getMock('Magento\Sales\Model\Resource\Order\Status\Collection', [], [], '', false);
+        $collectionMock =
+            $this->getMock('Magento\Sales\Model\ResourceModel\Order\Status\Collection', [], [], '', false);
         $options = ['options'];
 
         $this->collectionFactoryMock->expects($this->once())
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/StatusTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/StatusTest.php
index 573531f3806e2b8895f1e0ce5d619d1d2c5abc37..8ac8bc95748c5c623c8a5a1bb520450d22080c17 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/StatusTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/StatusTest.php
@@ -26,13 +26,13 @@ class StatusTest extends \PHPUnit_Framework_TestCase
                 ]
             ]
         ];
-        $collection = $this->getMock('Magento\Sales\Model\Resource\Order\Status\Collection', [], [], '', false);
+        $collection = $this->getMock('Magento\Sales\Model\ResourceModel\Order\Status\Collection', [], [], '', false);
         $collection->expects($this->once())
             ->method('toOptionHash')
             ->willReturn($itemMapping);
 
         $collectionFactoryMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory',
             ['create'],
             [],
             '',
@@ -43,9 +43,15 @@ class StatusTest extends \PHPUnit_Framework_TestCase
             ->willReturn($collection);
 
         $objectManager = new ObjectManager($this);
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $model = $objectManager->getObject(
             'Magento\Sales\Ui\Component\Listing\Column\Status',
-            ['collectionFactory' => $collectionFactoryMock]
+            ['collectionFactory' => $collectionFactoryMock, 'context' => $contextMock]
         );
         $model->setData('name', $itemName);
         $dataSource = $model->prepareDataSource($dataSource);
diff --git a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/ViewActionTest.php b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/ViewActionTest.php
index 660ee18828293e22a2e0e07384e361a32eb7e74c..11ad73a8b0f3a352b5b7316c07889e15c83bf30f 100644
--- a/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/ViewActionTest.php
+++ b/app/code/Magento/Sales/Test/Unit/Ui/Component/Listing/Column/ViewActionTest.php
@@ -50,11 +50,18 @@ class ViewActionTest extends \PHPUnit_Framework_TestCase
         $expectedUrlPath,
         $expectedUrlParam
     ) {
+        $contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->model = $this->objectManager->getObject(
             'Magento\Sales\Ui\Component\Listing\Column\ViewAction',
             [
                 'urlBuilder' => $this->urlBuilder,
-                'data' => $data
+                'data' => $data,
+                'context' => $contextMock,
             ]
         );
 
diff --git a/app/code/Magento/Sales/Ui/Component/Listing/Column/Address.php b/app/code/Magento/Sales/Ui/Component/Listing/Column/Address.php
index 17486e4cdc672812ed0f74353de8ac1c017f97b7..b5ed7c241c2c8be83f8a713677101173dcee4b34 100644
--- a/app/code/Magento/Sales/Ui/Component/Listing/Column/Address.php
+++ b/app/code/Magento/Sales/Ui/Component/Listing/Column/Address.php
@@ -5,16 +5,40 @@
  */
 namespace Magento\Sales\Ui\Component\Listing\Column;
 
+use Magento\Framework\Escaper;
 use Magento\Ui\Component\Listing\Columns\Column;
 use Magento\Framework\View\Element\UiComponent\ContextInterface;
 use Magento\Framework\View\Element\UiComponentFactory;
-use Magento\Sales\Model\Resource\Order\Status\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory;
 
 /**
  * Class Address
  */
 class Address extends Column
 {
+    /**
+     * @var Escaper
+     */
+    protected $escaper;
+
+    /**
+     * @param ContextInterface $context
+     * @param UiComponentFactory $uiComponentFactory
+     * @param Escaper $escaper
+     * @param array $components
+     * @param array $data
+     */
+    public function __construct(
+        ContextInterface $context,
+        UiComponentFactory $uiComponentFactory,
+        Escaper $escaper,
+        array $components = [],
+        array $data = []
+    ) {
+        $this->escaper = $escaper;
+        parent::__construct($context, $uiComponentFactory, $components, $data);
+    }
+
     /**
      * Prepare Data Source
      *
@@ -25,7 +49,9 @@ class Address extends Column
     {
         if (isset($dataSource['data']['items'])) {
             foreach ($dataSource['data']['items'] as & $item) {
-                $item[$this->getData('name')] = str_replace("\n", '<br/>', $item[$this->getData('name')]);
+                $item[$this->getData('name')] = $this->escaper->escapeHtml(
+                    str_replace("\n", '<br/>', $item[$this->getData('name')])
+                );
             }
         }
 
diff --git a/app/code/Magento/Sales/Ui/Component/Listing/Column/Status.php b/app/code/Magento/Sales/Ui/Component/Listing/Column/Status.php
index 980a3d7b127aa07e5effb0e6cb835ea3c731b28b..62885d8493d33acc0553c00cf6e7e74c595ab736 100644
--- a/app/code/Magento/Sales/Ui/Component/Listing/Column/Status.php
+++ b/app/code/Magento/Sales/Ui/Component/Listing/Column/Status.php
@@ -8,7 +8,7 @@ namespace Magento\Sales\Ui\Component\Listing\Column;
 use Magento\Ui\Component\Listing\Columns\Column;
 use Magento\Framework\View\Element\UiComponent\ContextInterface;
 use Magento\Framework\View\Element\UiComponentFactory;
-use Magento\Sales\Model\Resource\Order\Status\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory;
 
 /**
  * Class Status
diff --git a/app/code/Magento/Sales/Ui/Component/Listing/Column/Status/Options.php b/app/code/Magento/Sales/Ui/Component/Listing/Column/Status/Options.php
index 4f4e3f46b8a64cfaea1024f542c8f7de6a9a5a4f..65cdfd1238e7cd5f9b3ecd9388021092caf6f684 100644
--- a/app/code/Magento/Sales/Ui/Component/Listing/Column/Status/Options.php
+++ b/app/code/Magento/Sales/Ui/Component/Listing/Column/Status/Options.php
@@ -6,7 +6,7 @@
 namespace Magento\Sales\Ui\Component\Listing\Column\Status;
 
 use Magento\Framework\Data\OptionSourceInterface;
-use Magento\Sales\Model\Resource\Order\Status\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\CollectionFactory;
 
 /**
  * Class Options
diff --git a/app/code/Magento/Sales/composer.json b/app/code/Magento/Sales/composer.json
index 077a1ef5590d84199bb0e11a02db4895b5369629..3912b493e181e7e3a39d43da8c631aa54ee697b7 100644
--- a/app/code/Magento/Sales/composer.json
+++ b/app/code/Magento/Sales/composer.json
@@ -28,6 +28,9 @@
         "magento/module-ui": "1.0.0-beta",
         "magento/module-quote": "1.0.0-beta"
     },
+    "suggest": {
+        "magento/module-sales-sample-data": "Sample Data version:1.0.0-beta"
+    },
     "type": "magento2-module",
     "version": "1.0.0-beta",
     "license": [
diff --git a/app/code/Magento/Sales/etc/adminhtml/events.xml b/app/code/Magento/Sales/etc/adminhtml/events.xml
index 10a8f3a457bcd9ab8b3d8edf53d03fde90730849..21e9613d51e16f7459e62de4771beba7712d94b8 100644
--- a/app/code/Magento/Sales/etc/adminhtml/events.xml
+++ b/app/code/Magento/Sales/etc/adminhtml/events.xml
@@ -7,18 +7,15 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_delete_before">
-        <observer name="sales_quote_observer" instance="Magento\Sales\Model\Observer\Backend\CatalogProductQuote" method="subtractQtyFromQuotes" />
+        <observer name="sales_quote_observer" instance="Magento\Sales\Observer\Backend\SubtractQtyFromQuotesObserver" />
     </event>
     <event name="catalogrule_before_apply">
-        <observer name="sales_quote_observer" instance="Magento\Sales\Model\Observer\Backend\CatalogPriceRule" method="dispatch" />
+        <observer name="sales_quote_observer" instance="Magento\Sales\Observer\Backend\CatalogPriceRule" />
     </event>
     <event name="catalogrule_after_apply">
-        <observer name="sales_quote_observer" instance="Magento\Sales\Model\Observer\Backend\CatalogPriceRule" method="dispatch" />
+        <observer name="sales_quote_observer" instance="Magento\Sales\Observer\Backend\CatalogPriceRule" />
     </event>
     <event name="catalog_product_save_after">
-        <observer name="sales_quote" instance="Magento\Sales\Model\Observer\Backend\CatalogProductQuote" method="catalogProductSaveAfter" />
-    </event>
-    <event name="catalog_product_status_update">
-        <observer name="sales_quote" instance="Magento\Sales\Model\Observer\Backend\CatalogProductQuote" method="catalogProductStatusUpdate" />
+        <observer name="sales_quote" instance="Magento\Sales\Observer\Backend\CatalogProductSaveAfterObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Sales/etc/crontab.xml b/app/code/Magento/Sales/etc/crontab.xml
index 177ac5afa4c2e6bc4389be22a3ce0ab84778e517..833f16549508e9f294c6dabf1258dce5a9272dd2 100644
--- a/app/code/Magento/Sales/etc/crontab.xml
+++ b/app/code/Magento/Sales/etc/crontab.xml
@@ -7,49 +7,48 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
     <group id="default">
-        <job name="sales_clean_quotes" instance="Magento\Sales\Model\Observer\CleanExpiredQuotes" method="execute">
+        <job name="sales_clean_quotes" instance="Magento\Sales\Cron\CleanExpiredQuotes" method="execute">
             <schedule>0 0 * * *</schedule>
         </job>
-        <job name="sales_clean_orders" instance="Magento\Sales\Model\Observer\CleanExpiredOrders" method="execute">
+        <job name="sales_clean_orders" instance="Magento\Sales\Model\CronJob\CleanExpiredOrders" method="execute">
             <schedule>0 * * * *</schedule>
         </job>
-        <job name="aggregate_sales_report_order_data" instance="Magento\Sales\Model\Observer\AggregateSalesReportOrderData" method="execute">
+        <job name="aggregate_sales_report_order_data" instance="Magento\Sales\Model\CronJob\AggregateSalesReportOrderData" method="execute">
             <schedule>0 0 * * *</schedule>
         </job>
-        <job name="aggregate_sales_report_shipment_data" instance="Magento\Sales\Model\Observer\AggregateSalesReportShipmentData" method="execute">
+        <job name="aggregate_sales_report_invoiced_data"
+             instance="Magento\Sales\Model\CronJob\AggregateSalesReportInvoicedData" method="execute">
             <schedule>0 0 * * *</schedule>
         </job>
-        <job name="aggregate_sales_report_invoiced_data" instance="Magento\Sales\Model\Observer\AggregateSalesReportInvoicedData" method="execute">
+        <job name="aggregate_sales_report_refunded_data" instance="Magento\Sales\Model\CronJob\AggregateSalesReportRefundedData" method="execute">
             <schedule>0 0 * * *</schedule>
         </job>
-        <job name="aggregate_sales_report_refunded_data" instance="Magento\Sales\Model\Observer\AggregateSalesReportRefundedData" method="execute">
+        <job name="aggregate_sales_report_bestsellers_data"
+             instance="Magento\Sales\Model\CronJob\AggregateSalesReportBestsellersData" method="execute">
             <schedule>0 0 * * *</schedule>
         </job>
-        <job name="aggregate_sales_report_bestsellers_data" instance="Magento\Sales\Model\Observer\AggregateSalesReportBestsellersData" method="execute">
-            <schedule>0 0 * * *</schedule>
-        </job>
-        <job name="sales_grid_order_async_insert" instance="Magento\Sales\Model\Observer\Order\IndexGrid" method="asyncInsert">
+        <job name="sales_grid_order_async_insert" instance="SalesOrderIndexGridAsyncInsertCron" method="execute">
             <schedule>*/1 * * * *</schedule>
         </job>
-        <job name="sales_grid_order_invoice_async_insert" instance="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" method="asyncInsert">
+        <job name="sales_grid_order_invoice_async_insert" instance="SalesInvoiceIndexGridAsyncInsertCron" method="execute">
             <schedule>*/1 * * * *</schedule>
         </job>
-        <job name="sales_grid_order_shipment_async_insert" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="asyncInsert">
+        <job name="sales_grid_order_shipment_async_insert" instance="SalesShipmentIndexGridAsyncInsertCron" method="execute">
             <schedule>*/1 * * * *</schedule>
         </job>
-        <job name="sales_grid_order_creditmemo_async_insert" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="asyncInsert">
+        <job name="sales_grid_order_creditmemo_async_insert" instance="SalesCreditmemoIndexGridAsyncInsertCron" method="execute">
             <schedule>*/1 * * * *</schedule>
         </job>
-        <job name="sales_send_order_emails" instance="Magento\Sales\Model\Observer\Order\SendEmails" method="execute">
+        <job name="sales_send_order_emails" instance="SalesOrderSendEmailsCron" method="execute">
             <schedule>*/1 * * * *</schedule>
         </job>
-        <job name="sales_send_order_invoice_emails" instance="Magento\Sales\Model\Observer\Order\Invoice\SendEmails" method="execute">
+        <job name="sales_send_order_invoice_emails" instance="SalesInvoiceSendEmailsCron" method="execute">
             <schedule>*/1 * * * *</schedule>
         </job>
-        <job name="sales_send_order_shipment_emails" instance="Magento\Sales\Model\Observer\Order\Shipment\SendEmails" method="execute">
+        <job name="sales_send_order_shipment_emails" instance="SalesShipmentSendEmailsCron" method="execute">
             <schedule>*/1 * * * *</schedule>
         </job>
-        <job name="sales_send_order_creditmemo_emails" instance="Magento\Sales\Model\Observer\Order\Creditmemo\SendEmails" method="execute">
+        <job name="sales_send_order_creditmemo_emails" instance="SalesCreditmemoSendEmailsCron" method="execute">
             <schedule>*/1 * * * *</schedule>
         </job>
     </group>
diff --git a/app/code/Magento/Sales/etc/di.xml b/app/code/Magento/Sales/etc/di.xml
index 91ee4095b571ef5269f368410f011055fb6b5cea..61c7ea30be323950d132fa2ac362148104b35929 100644
--- a/app/code/Magento/Sales/etc/di.xml
+++ b/app/code/Magento/Sales/etc/di.xml
@@ -7,37 +7,37 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <preference for="Magento\Sales\Api\Data\CreditmemoCommentInterface" type="Magento\Sales\Model\Order\Creditmemo\Comment"/>
-    <preference for="Magento\Sales\Api\Data\CreditmemoCommentSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Creditmemo\Comment\Collection"/>
+    <preference for="Magento\Sales\Api\Data\CreditmemoCommentSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\Collection"/>
     <preference for="Magento\Sales\Api\Data\CreditmemoInterface" type="Magento\Sales\Model\Order\Creditmemo"/>
     <preference for="Magento\Sales\Api\Data\CreditmemoItemInterface" type="Magento\Sales\Model\Order\Creditmemo\Item"/>
-    <preference for="Magento\Sales\Api\Data\CreditmemoItemSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Creditmemo\Item\Collection"/>
-    <preference for="Magento\Sales\Api\Data\CreditmemoSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Creditmemo\Collection"/>
+    <preference for="Magento\Sales\Api\Data\CreditmemoItemSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item\Collection"/>
+    <preference for="Magento\Sales\Api\Data\CreditmemoSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection"/>
     <preference for="Magento\Sales\Api\Data\InvoiceCommentInterface" type="Magento\Sales\Model\Order\Invoice\Comment"/>
-    <preference for="Magento\Sales\Api\Data\InvoiceCommentSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Invoice\Comment\Collection"/>
+    <preference for="Magento\Sales\Api\Data\InvoiceCommentSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\Collection"/>
     <preference for="Magento\Sales\Api\Data\InvoiceInterface" type="Magento\Sales\Model\Order\Invoice"/>
     <preference for="Magento\Sales\Api\Data\InvoiceItemInterface" type="Magento\Sales\Model\Order\Invoice\Item"/>
-    <preference for="Magento\Sales\Api\Data\InvoiceItemSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Invoice\Item\Collection"/>
-    <preference for="Magento\Sales\Api\Data\InvoiceSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Invoice\Collection"/>
+    <preference for="Magento\Sales\Api\Data\InvoiceItemSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Invoice\Item\Collection"/>
+    <preference for="Magento\Sales\Api\Data\InvoiceSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Invoice\Collection"/>
     <preference for="Magento\Sales\Api\Data\OrderAddressInterface" type="Magento\Sales\Model\Order\Address"/>
-    <preference for="Magento\Sales\Api\Data\OrderAddressSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Address\Collection"/>
+    <preference for="Magento\Sales\Api\Data\OrderAddressSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Address\Collection"/>
     <preference for="Magento\Sales\Api\Data\OrderInterface" type="Magento\Sales\Model\Order"/>
     <preference for="Magento\Sales\Api\Data\OrderItemInterface" type="Magento\Sales\Model\Order\Item"/>
-    <preference for="Magento\Sales\Api\Data\OrderItemSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Item\Collection"/>
+    <preference for="Magento\Sales\Api\Data\OrderItemSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Item\Collection"/>
     <preference for="Magento\Sales\Api\Data\OrderPaymentInterface" type="Magento\Sales\Model\Order\Payment"/>
-    <preference for="Magento\Sales\Api\Data\OrderPaymentSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Payment\Collection"/>
-    <preference for="Magento\Sales\Api\Data\OrderSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Collection"/>
+    <preference for="Magento\Sales\Api\Data\OrderPaymentSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Payment\Collection"/>
+    <preference for="Magento\Sales\Api\Data\OrderSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Collection"/>
     <preference for="Magento\Sales\Api\Data\OrderStatusHistoryInterface" type="Magento\Sales\Model\Order\Status\History"/>
-    <preference for="Magento\Sales\Api\Data\OrderStatusHistorySearchResultInterface" type="Magento\Sales\Model\Resource\Order\Status\History\Collection"/>
+    <preference for="Magento\Sales\Api\Data\OrderStatusHistorySearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Status\History\Collection"/>
     <preference for="Magento\Sales\Api\Data\ShipmentCommentInterface" type="Magento\Sales\Model\Order\Shipment\Comment"/>
-    <preference for="Magento\Sales\Api\Data\ShipmentCommentSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Shipment\Comment\Collection"/>
+    <preference for="Magento\Sales\Api\Data\ShipmentCommentSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\Collection"/>
     <preference for="Magento\Sales\Api\Data\ShipmentInterface" type="Magento\Sales\Model\Order\Shipment"/>
     <preference for="Magento\Sales\Api\Data\ShipmentItemInterface" type="Magento\Sales\Model\Order\Shipment\Item"/>
-    <preference for="Magento\Sales\Api\Data\ShipmentItemSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Shipment\Item\Collection"/>
-    <preference for="Magento\Sales\Api\Data\ShipmentSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Shipment\Collection"/>
+    <preference for="Magento\Sales\Api\Data\ShipmentItemSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Shipment\Item\Collection"/>
+    <preference for="Magento\Sales\Api\Data\ShipmentSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Shipment\Collection"/>
     <preference for="Magento\Sales\Api\Data\ShipmentTrackInterface" type="Magento\Sales\Model\Order\Shipment\Track"/>
-    <preference for="Magento\Sales\Api\Data\ShipmentTrackSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Shipment\Track\Collection"/>
+    <preference for="Magento\Sales\Api\Data\ShipmentTrackSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Shipment\Track\Collection"/>
     <preference for="Magento\Sales\Api\Data\TransactionInterface" type="Magento\Sales\Model\Order\Payment\Transaction"/>
-    <preference for="Magento\Sales\Api\Data\TransactionSearchResultInterface" type="Magento\Sales\Model\Resource\Order\Payment\Transaction\Collection"/>
+    <preference for="Magento\Sales\Api\Data\TransactionSearchResultInterface" type="Magento\Sales\Model\ResourceModel\Order\Payment\Transaction\Collection"/>
     <preference for="Magento\Sales\Api\CreditmemoCommentRepositoryInterface" type="Magento\Sales\Api\Data\CreditmemoComment\Repository"/>
     <preference for="Magento\Sales\Api\CreditmemoItemRepositoryInterface" type="Magento\Sales\Api\Data\CreditmemoItem\Repository"/>
     <preference for="Magento\Sales\Api\CreditmemoRepositoryInterface" type="Magento\Sales\Model\Order\CreditmemoRepository"/>
@@ -61,23 +61,23 @@
     <preference for="Magento\Sales\Model\Order\Payment\Transaction\ManagerInterface" type="Magento\Sales\Model\Order\Payment\Transaction\Manager"/>
     <preference for="Magento\Sales\Model\Order\Payment\Transaction\BuilderInterface" type="Magento\Sales\Model\Order\Payment\Transaction\Builder"/>
     <preference for="Magento\Sales\Api\OrderCustomerManagementInterface" type="Magento\Sales\Model\Order\CustomerManagement" />
-    <preference for="Magento\Sales\Model\Spi\CreditmemoCommentResourceInterface" type="Magento\Sales\Model\Resource\Order\Creditmemo\Comment"/>
-    <preference for="Magento\Sales\Model\Spi\CreditmemoItemResourceInterface" type="Magento\Sales\Model\Resource\Order\Creditmemo\Item"/>
-    <preference for="Magento\Sales\Model\Spi\CreditmemoResourceInterface" type="Magento\Sales\Model\Resource\Order\Creditmemo"/>
-    <preference for="Magento\Sales\Model\Spi\InvoiceCommentResourceInterface" type="Magento\Sales\Model\Resource\Order\Invoice\Comment"/>
-    <preference for="Magento\Sales\Model\Spi\InvoiceItemResourceInterface" type="Magento\Sales\Model\Resource\Order\Invoice\Item"/>
-    <preference for="Magento\Sales\Model\Spi\InvoiceResourceInterface" type="Magento\Sales\Model\Resource\Order\Invoice"/>
-    <preference for="Magento\Sales\Model\Spi\OrderAddressResourceInterface" type="Magento\Sales\Model\Resource\Order\Address"/>
-    <preference for="Magento\Sales\Model\Spi\OrderItemResourceInterface" type="Magento\Sales\Model\Resource\Order\Item"/>
-    <preference for="Magento\Sales\Model\Spi\OrderPaymentResourceInterface" type="Magento\Sales\Model\Resource\Order\Payment"/>
-    <preference for="Magento\Sales\Model\Spi\OrderResourceInterface" type="Magento\Sales\Model\Resource\Order"/>
-    <preference for="Magento\Sales\Model\Spi\OrderStatusHistoryResourceInterface" type="Magento\Sales\Model\Resource\Order\Status\History"/>
-    <preference for="Magento\Sales\Model\Spi\ShipmentCommentResourceInterface" type="Magento\Sales\Model\Resource\Order\Shipment\Comment"/>
-    <preference for="Magento\Sales\Model\Spi\ShipmentItemResourceInterface" type="Magento\Sales\Model\Resource\Order\Shipment\Item"/>
-    <preference for="Magento\Sales\Model\Spi\ShipmentResourceInterface" type="Magento\Sales\Model\Resource\Order\Shipment"/>
-    <preference for="Magento\Sales\Model\Spi\ShipmentTrackResourceInterface" type="Magento\Sales\Model\Resource\Order\Shipment\Track"/>
-    <preference for="Magento\Sales\Model\Spi\TransactionResourceInterface" type="Magento\Sales\Model\Resource\Order\Payment\Transaction"/>
-    <type name="Magento\Sales\Model\Resource\Report" shared="false"/>
+    <preference for="Magento\Sales\Model\Spi\CreditmemoCommentResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment"/>
+    <preference for="Magento\Sales\Model\Spi\CreditmemoItemResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Creditmemo\Item"/>
+    <preference for="Magento\Sales\Model\Spi\CreditmemoResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Creditmemo"/>
+    <preference for="Magento\Sales\Model\Spi\InvoiceCommentResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Invoice\Comment"/>
+    <preference for="Magento\Sales\Model\Spi\InvoiceItemResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Invoice\Item"/>
+    <preference for="Magento\Sales\Model\Spi\InvoiceResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Invoice"/>
+    <preference for="Magento\Sales\Model\Spi\OrderAddressResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Address"/>
+    <preference for="Magento\Sales\Model\Spi\OrderItemResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Item"/>
+    <preference for="Magento\Sales\Model\Spi\OrderPaymentResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Payment"/>
+    <preference for="Magento\Sales\Model\Spi\OrderResourceInterface" type="Magento\Sales\Model\ResourceModel\Order"/>
+    <preference for="Magento\Sales\Model\Spi\OrderStatusHistoryResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Status\History"/>
+    <preference for="Magento\Sales\Model\Spi\ShipmentCommentResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Shipment\Comment"/>
+    <preference for="Magento\Sales\Model\Spi\ShipmentItemResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Shipment\Item"/>
+    <preference for="Magento\Sales\Model\Spi\ShipmentResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Shipment"/>
+    <preference for="Magento\Sales\Model\Spi\ShipmentTrackResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Shipment\Track"/>
+    <preference for="Magento\Sales\Model\Spi\TransactionResourceInterface" type="Magento\Sales\Model\ResourceModel\Order\Payment\Transaction"/>
+    <type name="Magento\Sales\Model\ResourceModel\Report" shared="false"/>
     <type name="Magento\Sales\Model\Order\Pdf\Config\Reader">
         <arguments>
             <argument name="fileName" xsi:type="string">pdf.xml</argument>
@@ -140,52 +140,179 @@
             </argument>
         </arguments>
     </type>
-    <virtualType name="Magento\Sales\Model\Observer\Order\IndexGrid" type="Magento\Sales\Model\Observer\IndexGrid">
+    <virtualType name="SalesOrderIndexGridSyncRemove" type="Magento\Sales\Observer\GridSyncRemoveObserver">
         <arguments>
-            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\Resource\Order\Grid</argument>
+            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Grid</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" type="Magento\Sales\Model\Observer\IndexGrid">
+    <virtualType name="SalesInvoiceIndexGridSyncRemove" type="Magento\Sales\Observer\GridSyncRemoveObserver">
         <arguments>
-            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\Resource\Order\Invoice\Grid</argument>
+            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice\Grid</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" type="Magento\Sales\Model\Observer\IndexGrid">
+    <virtualType name="SalesShipmentIndexGridSyncRemove" type="Magento\Sales\Observer\GridSyncRemoveObserver">
         <arguments>
             <argument name="entityGrid" xsi:type="object">ShipmentGridAggregator</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" type="Magento\Sales\Model\Observer\IndexGrid">
+    <virtualType name="SalesCreditmemoIndexGridSyncRemove" type="Magento\Sales\Observer\GridSyncRemoveObserver">
         <arguments>
             <argument name="entityGrid" xsi:type="object">CreditmemoGridAggregator</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Observer\Order\SendEmails" type="Magento\Sales\Model\Observer\SendEmails">
+
+    <virtualType name="SalesOrderIndexGridSyncInsert" type="Magento\Sales\Observer\GridSyncInsertObserver">
+        <arguments>
+            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Grid</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesInvoiceIndexGridSyncInsert" type="Magento\Sales\Observer\GridSyncInsertObserver">
+        <arguments>
+            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice\Grid</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesShipmentIndexGridSyncInsert" type="Magento\Sales\Observer\GridSyncInsertObserver">
+        <arguments>
+            <argument name="entityGrid" xsi:type="object">ShipmentGridAggregator</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesCreditmemoIndexGridSyncInsert" type="Magento\Sales\Observer\GridSyncInsertObserver">
+        <arguments>
+            <argument name="entityGrid" xsi:type="object">CreditmemoGridAggregator</argument>
+        </arguments>
+    </virtualType>
+
+    <virtualType name="SalesOrderIndexGridAsyncInsert" type="Magento\Sales\Model\GridAsyncInsert">
+        <arguments>
+            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Grid</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesInvoiceIndexGridAsyncInsert" type="Magento\Sales\Model\GridAsyncInsert">
+        <arguments>
+            <argument name="entityGrid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice\Grid</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesShipmentIndexGridAsyncInsert" type="Magento\Sales\Model\GridAsyncInsert">
+        <arguments>
+            <argument name="entityGrid" xsi:type="object">ShipmentGridAggregator</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesCreditmemoIndexGridAsyncInsert" type="Magento\Sales\Model\GridAsyncInsert">
+        <arguments>
+            <argument name="entityGrid" xsi:type="object">CreditmemoGridAggregator</argument>
+        </arguments>
+    </virtualType>
+
+    <virtualType name="SalesOrderIndexGridAsyncInsertObserver" type="Magento\Sales\Observer\GridAsyncInsertObserver">
+        <arguments>
+            <argument name="asyncInsert" xsi:type="object">SalesOrderIndexGridAsyncInsert</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesInvoiceIndexGridAsyncInsertObserver" type="Magento\Sales\Observer\GridAsyncInsertObserver">
+        <arguments>
+            <argument name="asyncInsert" xsi:type="object">SalesInvoiceIndexGridAsyncInsert</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesShipmentIndexGridAsyncInsertObserver" type="Magento\Sales\Observer\GridAsyncInsertObserver">
+        <arguments>
+            <argument name="asyncInsert" xsi:type="object">SalesShipmentIndexGridAsyncInsert</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesCreditmemoIndexGridAsyncInsertObserver" type="Magento\Sales\Observer\GridAsyncInsertObserver">
+        <arguments>
+            <argument name="asyncInsert" xsi:type="object">SalesCreditmemoIndexGridAsyncInsert</argument>
+        </arguments>
+    </virtualType>
+
+    <virtualType name="SalesOrderIndexGridAsyncInsertCron" type="Magento\Sales\Cron\GridAsyncInsert">
+        <arguments>
+            <argument name="asyncInsert" xsi:type="object">SalesOrderIndexGridAsyncInsert</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesInvoiceIndexGridAsyncInsertCron" type="Magento\Sales\Cron\GridAsyncInsert">
+        <arguments>
+            <argument name="asyncInsert" xsi:type="object">SalesInvoiceIndexGridAsyncInsert</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesShipmentIndexGridAsyncInsertCron" type="Magento\Sales\Cron\GridAsyncInsert">
+        <arguments>
+            <argument name="asyncInsert" xsi:type="object">SalesShipmentIndexGridAsyncInsert</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesCreditmemoIndexGridAsyncInsertCron" type="Magento\Sales\Cron\GridAsyncInsert">
+        <arguments>
+            <argument name="asyncInsert" xsi:type="object">SalesCreditmemoIndexGridAsyncInsert</argument>
+        </arguments>
+    </virtualType>
+
+    <virtualType name="SalesOrderSendEmails" type="Magento\Sales\Model\EmailSenderHandler">
         <arguments>
             <argument name="emailSender" xsi:type="object">Magento\Sales\Model\Order\Email\Sender\OrderSender</argument>
-            <argument name="entityResource" xsi:type="object">Magento\Sales\Model\Resource\Order</argument>
-            <argument name="entityCollection" xsi:type="object" shared="false">Magento\Sales\Model\Resource\Order\Collection</argument>
+            <argument name="entityResource" xsi:type="object">Magento\Sales\Model\ResourceModel\Order</argument>
+            <argument name="entityCollection" xsi:type="object" shared="false">Magento\Sales\Model\ResourceModel\Order\Collection</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Observer\Order\Invoice\SendEmails" type="Magento\Sales\Model\Observer\SendEmails">
+    <virtualType name="SalesOrderInvoiceSendEmails" type="Magento\Sales\Model\EmailSenderHandler">
         <arguments>
             <argument name="emailSender" xsi:type="object">Magento\Sales\Model\Order\Email\Sender\InvoiceSender</argument>
-            <argument name="entityResource" xsi:type="object">Magento\Sales\Model\Resource\Order\Invoice</argument>
-            <argument name="entityCollection" xsi:type="object" shared="false">Magento\Sales\Model\Resource\Order\Invoice\Collection</argument>
+            <argument name="entityResource" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice</argument>
+            <argument name="entityCollection" xsi:type="object" shared="false">Magento\Sales\Model\ResourceModel\Order\Invoice\Collection</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Observer\Order\Shipment\SendEmails" type="Magento\Sales\Model\Observer\SendEmails">
+    <virtualType name="SalesOrderShipmentSendEmails" type="Magento\Sales\Model\EmailSenderHandler">
         <arguments>
             <argument name="emailSender" xsi:type="object">Magento\Sales\Model\Order\Email\Sender\ShipmentSender</argument>
-            <argument name="entityResource" xsi:type="object">Magento\Sales\Model\Resource\Order\Shipment</argument>
-            <argument name="entityCollection" xsi:type="object" shared="false">Magento\Sales\Model\Resource\Order\Shipment\Collection</argument>
+            <argument name="entityResource" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Shipment</argument>
+            <argument name="entityCollection" xsi:type="object" shared="false">Magento\Sales\Model\ResourceModel\Order\Shipment\Collection</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Observer\Order\Creditmemo\SendEmails" type="Magento\Sales\Model\Observer\SendEmails">
+    <virtualType name="SalesOrderCreditmemoSendEmails" type="Magento\Sales\Model\EmailSenderHandler">
         <arguments>
             <argument name="emailSender" xsi:type="object">Magento\Sales\Model\Order\Email\Sender\CreditmemoSender</argument>
-            <argument name="entityResource" xsi:type="object">Magento\Sales\Model\Resource\Order\Creditmemo</argument>
-            <argument name="entityCollection" xsi:type="object" shared="false">Magento\Sales\Model\Resource\Order\Creditmemo\Collection</argument>
+            <argument name="entityResource" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Creditmemo</argument>
+            <argument name="entityCollection" xsi:type="object" shared="false">Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection</argument>
+        </arguments>
+    </virtualType>
+
+    <virtualType name="SalesOrderSendEmailsObserver" type="Magento\Sales\Observer\Virtual\SendEmails">
+        <arguments>
+            <argument name="emailSenderHandler" xsi:type="object">SalesOrderSendEmails</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesOrderInvoiceSendEmailsObserver" type="Magento\Sales\Observer\Virtual\SendEmails">
+        <arguments>
+            <argument name="emailSenderHandler" xsi:type="object">SalesOrderInvoiceSendEmails</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesOrderShipmentSendEmailsObserver" type="Magento\Sales\Observer\Virtual\SendEmails">
+        <arguments>
+            <argument name="emailSenderHandler" xsi:type="object">SalesOrderShipmentSendEmails</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesOrderCreditmemoSendEmailsObserver" type="Magento\Sales\Observer\Virtual\SendEmails">
+        <arguments>
+            <argument name="emailSenderHandler" xsi:type="object">SalesOrderCreditmemoSendEmails</argument>
+        </arguments>
+    </virtualType>
+
+    <virtualType name="SalesOrderSendEmailsCron" type="Magento\Sales\Cron\SendEmails">
+        <arguments>
+            <argument name="emailSenderHandler" xsi:type="object">SalesOrderSendEmails</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesInvoiceSendEmailsCron" type="Magento\Sales\Cron\SendEmails">
+        <arguments>
+            <argument name="emailSenderHandler" xsi:type="object">SalesOrderInvoiceSendEmails</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesShipmentSendEmailsCron" type="Magento\Sales\Cron\SendEmails">
+        <arguments>
+            <argument name="emailSenderHandler" xsi:type="object">SalesOrderShipmentSendEmails</argument>
+        </arguments>
+    </virtualType>
+    <virtualType name="SalesCreditmemoSendEmailsCron" type="Magento\Sales\Cron\SendEmails">
+        <arguments>
+            <argument name="emailSenderHandler" xsi:type="object">SalesOrderCreditmemoSendEmails</argument>
         </arguments>
     </virtualType>
     <type name="Magento\SalesSequence\Model\EntityPool">
@@ -198,81 +325,81 @@
             </argument>
         </arguments>
     </type>
-    <type name="Magento\SalesSequence\Model\Resource\Meta">
+    <type name="Magento\SalesSequence\Model\ResourceModel\Meta">
         <arguments>
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
     </type>
-    <type name="Magento\SalesSequence\Model\Resource\Profile">
+    <type name="Magento\SalesSequence\Model\ResourceModel\Profile">
         <arguments>
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
     </type>
-    <type name="Magento\Sales\Model\Resource\Report\Order\Createdat">
+    <type name="Magento\Sales\Model\ResourceModel\Report\Order\Createdat">
         <arguments>
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
     </type>
-    <type name="Magento\Sales\Model\Resource\Report\Bestsellers">
+    <type name="Magento\Sales\Model\ResourceModel\Report\Bestsellers">
         <arguments>
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
     </type>
-    <type name="Magento\Sales\Model\Resource\Order\Status">
+    <type name="Magento\Sales\Model\ResourceModel\Order\Status">
         <arguments>
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
     </type>
-    <virtualType name="OrderRelationsComposite" type="Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite">
+    <virtualType name="OrderRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
-                <item name="default" xsi:type="object">Magento\Sales\Model\Resource\Order\Relation</item>
+                <item name="default" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Relation</item>
             </argument>
         </arguments>
     </virtualType>
-    <type name="Magento\Sales\Model\Resource\Order">
+    <type name="Magento\Sales\Model\ResourceModel\Order">
         <arguments>
             <argument name="entityRelationComposite" xsi:type="object">OrderRelationsComposite</argument>
         </arguments>
     </type>
-    <virtualType name="InvoiceRelationsComposite" type="Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite">
+    <virtualType name="InvoiceRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
-                <item name="default" xsi:type="object">Magento\Sales\Model\Resource\Order\Invoice\Relation</item>
+                <item name="default" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice\Relation</item>
             </argument>
         </arguments>
     </virtualType>
-    <type name="Magento\Sales\Model\Resource\Order\Invoice">
+    <type name="Magento\Sales\Model\ResourceModel\Order\Invoice">
         <arguments>
             <argument name="entityRelationComposite" xsi:type="object">InvoiceRelationsComposite</argument>
         </arguments>
     </type>
-    <virtualType name="ShipmentRelationsComposite" type="Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite">
+    <virtualType name="ShipmentRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
-                <item name="default" xsi:type="object">Magento\Sales\Model\Resource\Order\Shipment\Relation</item>
+                <item name="default" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Shipment\Relation</item>
             </argument>
         </arguments>
     </virtualType>
-    <type name="Magento\Sales\Model\Resource\Order\Shipment">
+    <type name="Magento\Sales\Model\ResourceModel\Order\Shipment">
         <arguments>
             <argument name="entityRelationComposite" xsi:type="object">ShipmentRelationsComposite</argument>
         </arguments>
     </type>
-    <virtualType name="CreditmemoRelationsComposite" type="Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite">
+    <virtualType name="CreditmemoRelationsComposite" type="Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite">
         <arguments>
             <argument name="relationProcessors" xsi:type="array">
-                <item name="default" xsi:type="object">Magento\Sales\Model\Resource\Order\Creditmemo\Relation</item>
-                <item name="creditmemo_refund" xsi:type="object">Magento\Sales\Model\Resource\Order\Creditmemo\Relation\Refund</item>
+                <item name="default" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Creditmemo\Relation</item>
+                <item name="creditmemo_refund" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Creditmemo\Relation\Refund</item>
             </argument>
         </arguments>
     </virtualType>
-    <type name="Magento\Sales\Model\Resource\Order\Creditmemo">
+    <type name="Magento\Sales\Model\ResourceModel\Order\Creditmemo">
         <arguments>
             <argument name="entityRelationComposite" xsi:type="object">CreditmemoRelationsComposite</argument>
         </arguments>
     </type>
-    <virtualType name="Magento\Sales\Model\Resource\Order\Grid" type="Magento\Sales\Model\Resource\Grid">
+    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid" type="Magento\Sales\Model\ResourceModel\Grid">
         <arguments>
             <argument name="mainTableName" xsi:type="string">sales_order</argument>
             <argument name="gridTableName" xsi:type="string">sales_order_grid</argument>
@@ -324,7 +451,7 @@
             </argument>
         </arguments>
     </virtualType>
-    <virtualType name="ShipmentGridAggregator" type="Magento\Sales\Model\Resource\Grid">
+    <virtualType name="ShipmentGridAggregator" type="Magento\Sales\Model\ResourceModel\Grid">
         <arguments>
             <argument name="mainTableName" xsi:type="string">sales_shipment</argument>
             <argument name="gridTableName" xsi:type="string">sales_shipment_grid</argument>
@@ -375,7 +502,7 @@
             </argument>
         </arguments>
     </virtualType>
-    <virtualType name="CreditmemoGridAggregator" type="Magento\Sales\Model\Resource\Grid">
+    <virtualType name="CreditmemoGridAggregator" type="Magento\Sales\Model\ResourceModel\Grid">
         <arguments>
             <argument name="mainTableName" xsi:type="string">sales_creditmemo</argument>
             <argument name="gridTableName" xsi:type="string">sales_creditmemo_grid</argument>
@@ -430,7 +557,7 @@
             </argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Resource\Order\Invoice\Grid" type="Magento\Sales\Model\Resource\Grid">
+    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Invoice\Grid" type="Magento\Sales\Model\ResourceModel\Grid">
         <arguments>
             <argument name="mainTableName" xsi:type="string">sales_invoice</argument>
             <argument name="gridTableName" xsi:type="string">sales_invoice_grid</argument>
@@ -586,11 +713,11 @@
             </argument>
         </arguments>
     </virtualType>
-    <type name="Magento\Sales\Model\Resource\GridPool">
+    <type name="Magento\Sales\Model\ResourceModel\GridPool">
         <arguments>
             <argument name="grids" xsi:type="array">
-                <item name="order_grid" xsi:type="object">Magento\Sales\Model\Resource\Order\Grid</item>
-                <item name="invoice_grid" xsi:type="object">Magento\Sales\Model\Resource\Order\Invoice\Grid</item>
+                <item name="order_grid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Grid</item>
+                <item name="invoice_grid" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice\Grid</item>
                 <item name="shipment_grid" xsi:type="object">ShipmentGridAggregator</item>
                 <item name="creditmemo_grid" xsi:type="object">CreditmemoGridAggregator</item>
             </argument>
@@ -607,13 +734,13 @@
     <type name="Magento\Framework\View\Element\UiComponent\DataProvider\CollectionFactory">
         <arguments>
             <argument name="collections" xsi:type="array">
-                <item name="sales_order_grid_data_source" xsi:type="string">Magento\Sales\Model\Resource\Order\Grid\Collection</item>
-                <item name="sales_order_invoice_grid_data_source" xsi:type="string">Magento\Sales\Model\Resource\Order\Invoice\Grid\Collection</item>
-                <item name="sales_order_shipment_grid_data_source" xsi:type="string">Magento\Sales\Model\Resource\Order\Shipment\Grid\Collection</item>
-                <item name="sales_order_creditmemo_grid_data_source" xsi:type="string">Magento\Sales\Model\Resource\Order\Creditmemo\Grid\Collection</item>
-                <item name="sales_order_view_invoice_grid_data_source" xsi:type="string">Magento\Sales\Model\Resource\Order\Invoice\Orders\Grid\Collection</item>
-                <item name="sales_order_view_shipment_grid_data_source" xsi:type="string">Magento\Sales\Model\Resource\Order\Shipment\Order\Grid\Collection</item>
-                <item name="sales_order_view_creditmemo_grid_data_source" xsi:type="string">Magento\Sales\Model\Resource\Order\Creditmemo\Order\Grid\Collection</item>
+                <item name="sales_order_grid_data_source" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Grid\Collection</item>
+                <item name="sales_order_invoice_grid_data_source" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Invoice\Grid\Collection</item>
+                <item name="sales_order_shipment_grid_data_source" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Shipment\Grid\Collection</item>
+                <item name="sales_order_creditmemo_grid_data_source" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Creditmemo\Grid\Collection</item>
+                <item name="sales_order_view_invoice_grid_data_source" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Invoice\Orders\Grid\Collection</item>
+                <item name="sales_order_view_shipment_grid_data_source" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Shipment\Order\Grid\Collection</item>
+                <item name="sales_order_view_creditmemo_grid_data_source" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Creditmemo\Order\Grid\Collection</item>
             </argument>
         </arguments>
     </type>
@@ -622,93 +749,93 @@
             <argument name="state" xsi:type="object">Magento\Framework\App\State\Proxy</argument>
         </arguments>
     </type>
-    <virtualType name="Magento\Sales\Model\Resource\Order\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
+    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
         <arguments>
             <argument name="mainTable" xsi:type="string">sales_order_grid</argument>
-            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\Resource\Order</argument>
+            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\ResourceModel\Order</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Resource\Order\Invoice\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
+    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Invoice\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
         <arguments>
             <argument name="mainTable" xsi:type="string">sales_invoice_grid</argument>
-            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\Resource\Order\Invoice</argument>
+            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Invoice</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Resource\Order\Shipment\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
+    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Shipment\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
         <arguments>
             <argument name="mainTable" xsi:type="string">sales_shipment_grid</argument>
-            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\Resource\Order\Shipment</argument>
+            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Shipment</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Resource\Order\Creditmemo\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
+    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Creditmemo\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
         <arguments>
             <argument name="mainTable" xsi:type="string">sales_creditmemo_grid</argument>
-            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\Resource\Order\Creditmemo</argument>
+            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Creditmemo</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Resource\Order\Invoice\Orders\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
+    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Invoice\Orders\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
         <arguments>
             <argument name="mainTable" xsi:type="string">sales_invoice_grid</argument>
-            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\Resource\Order\Invoice</argument>
+            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Invoice</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Resource\Order\Shipment\Order\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
+    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Shipment\Order\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
         <arguments>
             <argument name="mainTable" xsi:type="string">sales_shipment_grid</argument>
-            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\Resource\Order\Shipment</argument>
+            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Shipment</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Sales\Model\Resource\Order\Creditmemo\Order\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
+    <virtualType name="Magento\Sales\Model\ResourceModel\Order\Creditmemo\Order\Grid\Collection" type="Magento\Framework\View\Element\UiComponent\DataProvider\SearchResult">
         <arguments>
             <argument name="mainTable" xsi:type="string">sales_creditmemo_grid</argument>
-            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\Resource\Order\Creditmemo</argument>
+            <argument name="resourceModel" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Creditmemo</argument>
         </arguments>
     </virtualType>
-    <virtualType name="orderMetadata" type="Magento\Sales\Model\Resource\Metadata">
+    <virtualType name="orderMetadata" type="Magento\Sales\Model\ResourceModel\Metadata">
         <arguments>
-            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\Resource\Order</argument>
+            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\ResourceModel\Order</argument>
             <argument name="modelClassName" xsi:type="string">Magento\Sales\Model\Order</argument>
         </arguments>
     </virtualType>
-    <virtualType name="orderItemMetadata" type="Magento\Sales\Model\Resource\Metadata">
+    <virtualType name="orderItemMetadata" type="Magento\Sales\Model\ResourceModel\Metadata">
         <arguments>
-            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\Resource\Order\Item</argument>
+            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Item</argument>
             <argument name="modelClassName" xsi:type="string">Magento\Sales\Model\Order\Item</argument>
         </arguments>
     </virtualType>
-    <virtualType name="invoiceMetadata" type="Magento\Sales\Model\Resource\Metadata">
+    <virtualType name="invoiceMetadata" type="Magento\Sales\Model\ResourceModel\Metadata">
         <arguments>
-            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\Resource\Order\Invoice</argument>
+            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Invoice</argument>
             <argument name="modelClassName" xsi:type="string">Magento\Sales\Model\Order\Invoice</argument>
         </arguments>
     </virtualType>
-    <virtualType name="shipmentMetadata" type="Magento\Sales\Model\Resource\Metadata">
+    <virtualType name="shipmentMetadata" type="Magento\Sales\Model\ResourceModel\Metadata">
         <arguments>
-            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\Resource\Order\Shipment</argument>
+            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Shipment</argument>
             <argument name="modelClassName" xsi:type="string">Magento\Sales\Model\Order\Shipment</argument>
         </arguments>
     </virtualType>
-    <virtualType name="creditmemoMetadata" type="Magento\Sales\Model\Resource\Metadata">
+    <virtualType name="creditmemoMetadata" type="Magento\Sales\Model\ResourceModel\Metadata">
         <arguments>
-            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\Resource\Order\Creditmemo</argument>
+            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Creditmemo</argument>
             <argument name="modelClassName" xsi:type="string">Magento\Sales\Model\Order\Creditmemo</argument>
         </arguments>
     </virtualType>
-    <virtualType name="transactionMetaData" type="Magento\Sales\Model\Resource\Metadata">
+    <virtualType name="transactionMetaData" type="Magento\Sales\Model\ResourceModel\Metadata">
         <arguments>
-            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\Resource\Order\Payment\Transaction</argument>
+            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Payment\Transaction</argument>
             <argument name="modelClassName" xsi:type="string">Magento\Sales\Model\Order\Payment\Transaction</argument>
         </arguments>
     </virtualType>
-    <virtualType name="paymentMetaData" type="Magento\Sales\Model\Resource\Metadata">
+    <virtualType name="paymentMetaData" type="Magento\Sales\Model\ResourceModel\Metadata">
         <arguments>
-            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\Resource\Order\Payment</argument>
+            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Payment</argument>
             <argument name="modelClassName" xsi:type="string">Magento\Sales\Model\Order\Payment</argument>
         </arguments>
     </virtualType>
-    <virtualType name="orderAddressMetadata" type="Magento\Sales\Model\Resource\Metadata">
+    <virtualType name="orderAddressMetadata" type="Magento\Sales\Model\ResourceModel\Metadata">
         <arguments>
-            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\Resource\Order\Address</argument>
+            <argument name="resourceClassName" xsi:type="string">Magento\Sales\Model\ResourceModel\Order\Address</argument>
             <argument name="modelClassName" xsi:type="string">Magento\Sales\Model\Order\Address</argument>
         </arguments>
     </virtualType>
@@ -772,7 +899,7 @@
             <argument name="stateCommand" xsi:type="object">Magento\Sales\Model\Order\Payment\State\RegisterCaptureNotificationCommand</argument>
         </arguments>
     </type>
-    <type name="Magento\Sales\Model\Resource\Order\Tax\Item">
+    <type name="Magento\Sales\Model\ResourceModel\Order\Tax\Item">
         <arguments>
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
diff --git a/app/code/Magento/Sales/etc/events.xml b/app/code/Magento/Sales/etc/events.xml
index 3650bd768afda158e9003f93932cb3eb06d834fe..f02fcdd77a5bcfc8b4fdbce4414cb6c7f6886759 100644
--- a/app/code/Magento/Sales/etc/events.xml
+++ b/app/code/Magento/Sales/etc/events.xml
@@ -7,45 +7,45 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_order_place_after">
-        <observer name="sales_vat_request_params_order_comment" instance="Magento\Sales\Model\Observer\Frontend\Quote\AddVatRequestParamsOrderComment" method="execute" />
+        <observer name="sales_vat_request_params_order_comment" instance="Magento\Sales\Observer\Frontend\AddVatRequestParamsOrderComment" />
     </event>
     <event name="sales_order_process_relation">
-        <observer name="sales_grid_order_sync_insert" instance="Magento\Sales\Model\Observer\Order\IndexGrid" method="syncInsert" />
+        <observer name="sales_grid_order_sync_insert" instance="SalesOrderIndexGridSyncInsert" />
     </event>
     <event name="sales_order_invoice_process_relation">
-        <observer name="sales_grid_order_invoice_sync_insert" instance="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" method="syncInsert" />
+        <observer name="sales_grid_order_invoice_sync_insert" instance="SalesInvoiceIndexGridSyncInsert" />
     </event>
     <event name="sales_order_shipment_process_relation">
-        <observer name="sales_grid_order_shipment_sync_insert" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="syncInsert" />
+        <observer name="sales_grid_order_shipment_sync_insert" instance="SalesShipmentIndexGridSyncInsert" />
     </event>
     <event name="sales_order_creditmemo_process_relation">
-        <observer name="sales_grid_order_creditmemo_sync_insert" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="syncInsert" />
+        <observer name="sales_grid_order_creditmemo_sync_insert" instance="SalesCreditmemoIndexGridSyncInsert" />
     </event>
     <event name="sales_order_delete_after">
-        <observer name="sales_grid_order_sync_remove" instance="Magento\Sales\Model\Observer\Order\IndexGrid" method="syncRemove" />
+        <observer name="sales_grid_order_sync_remove" instance="SalesOrderIndexGridSyncRemove" />
     </event>
     <event name="sales_order_invoice_delete_after">
-        <observer name="sales_grid_order_invoice_sync_remove" instance="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" method="syncRemove" />
+        <observer name="sales_grid_order_invoice_sync_remove" instance="SalesInvoiceIndexGridSyncRemove" />
     </event>
     <event name="sales_order_shipment_delete_after">
-        <observer name="sales_grid_order_shipment_sync_remove" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="syncRemove" />
+        <observer name="sales_grid_order_shipment_sync_remove" instance="SalesShipmentIndexGridSyncRemove" />
     </event>
     <event name="sales_order_creditmemo_delete_after">
-        <observer name="sales_grid_order_creditmemo_sync_remove" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="syncRemove" />
+        <observer name="sales_grid_order_creditmemo_sync_remove" instance="SalesCreditmemoIndexGridSyncRemove" />
     </event>
     <event name="config_data_dev_grid_async_indexing_disabled">
-        <observer name="sales_grid_order_async_insert" instance="Magento\Sales\Model\Observer\Order\IndexGrid" method="asyncInsert" />
-        <observer name="sales_grid_order_invoice_async_insert" instance="Magento\Sales\Model\Observer\Order\Invoice\IndexGrid" method="asyncInsert" />
-        <observer name="sales_grid_order_shipment_async_insert" instance="Magento\Sales\Model\Observer\Order\Shipment\IndexGrid" method="asyncInsert" />
-        <observer name="sales_grid_order_creditmemo_async_insert" instance="Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid" method="asyncInsert" />
+        <observer name="sales_grid_order_async_insert" instance="SalesOrderIndexGridAsyncInsertObserver" />
+        <observer name="sales_grid_order_invoice_async_insert" instance="SalesInvoiceIndexGridAsyncInsertObserver" />
+        <observer name="sales_grid_order_shipment_async_insert" instance="SalesShipmentIndexGridAsyncInsertObserver" />
+        <observer name="sales_grid_order_creditmemo_async_insert" instance="SalesCreditmemoIndexGridAsyncInsertObserver" />
     </event>
     <event name="config_data_sales_email_general_async_sending_disabled">
-        <observer name="sales_send_order_emails" instance="Magento\Sales\Model\Observer\Order\SendEmails" method="execute" />
-        <observer name="sales_send_order_invoice_emails" instance="Magento\Sales\Model\Observer\Order\Invoice\SendEmails" method="execute" />
-        <observer name="sales_send_order_shipment_emails" instance="Magento\Sales\Model\Observer\Order\Shipment\SendEmails" method="execute" />
-        <observer name="sales_send_order_creditmemo_emails" instance="Magento\Sales\Model\Observer\Order\Creditmemo\SendEmails" method="execute" />
+        <observer name="sales_send_order_emails" instance="SalesOrderSendEmailsObserver" />
+        <observer name="sales_send_order_invoice_emails" instance="SalesOrderInvoiceSendEmailsObserver" />
+        <observer name="sales_send_order_shipment_emails" instance="SalesOrderShipmentSendEmailsObserver" />
+        <observer name="sales_send_order_creditmemo_emails" instance="SalesOrderCreditmemoSendEmailsObserver" />
     </event>
     <event name="store_add">
-        <observer name="magento_sequence" instance="Magento\SalesSequence\Observer\SequenceCreatorObserver" method="execute" />
+        <observer name="magento_sequence" instance="Magento\SalesSequence\Observer\SequenceCreatorObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Sales/etc/frontend/events.xml b/app/code/Magento/Sales/etc/frontend/events.xml
index 85c7449ce2dd685413f9a927d7043f1a2b0cae25..19148c286ca4fc993a5757bbe3f8580fda65f526 100644
--- a/app/code/Magento/Sales/etc/frontend/events.xml
+++ b/app/code/Magento/Sales/etc/frontend/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_quote_address_collect_totals_after">
-        <observer name="sales_customer_validate_vat_number" instance="Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId" method="execute" />
+        <observer name="sales_customer_validate_vat_number" instance="Magento\Sales\Observer\Frontend\RestoreCustomerGroupId" />
     </event>
 </config>
diff --git a/app/code/Magento/Sales/etc/module.xml b/app/code/Magento/Sales/etc/module.xml
index 6ad917d859b9b403b2c2120aeb42deff3518130d..1239c5692db8756d769be1d617d17d1f1a736ade 100644
--- a/app/code/Magento/Sales/etc/module.xml
+++ b/app/code/Magento/Sales/etc/module.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
-    <module name="Magento_Sales" setup_version="2.0.0">
+    <module name="Magento_Sales" setup_version="2.0.1">
         <sequence>
             <module name="Magento_Rule"/>
             <module name="Magento_Catalog"/>
diff --git a/app/code/Magento/Sales/etc/webapi_rest/di.xml b/app/code/Magento/Sales/etc/webapi_rest/di.xml
index 756c0aa11178c86cb1c831b021aa357f70b022d0..b06d908c5bebddf7c90fa817b90875bc875db479 100644
--- a/app/code/Magento/Sales/etc/webapi_rest/di.xml
+++ b/app/code/Magento/Sales/etc/webapi_rest/di.xml
@@ -9,7 +9,7 @@
     <type name="Magento\Quote\Model\QuoteRepository">
         <plugin name="authorization" type="Magento\Quote\Model\QuoteRepository\Plugin\Authorization" />
     </type>
-    <type name="Magento\Sales\Model\Resource\Order">
-        <plugin name="authorization" type="Magento\Sales\Model\Resource\Order\Plugin\Authorization" />
+    <type name="Magento\Sales\Model\ResourceModel\Order">
+        <plugin name="authorization" type="Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization" />
     </type>
 </config>
diff --git a/app/code/Magento/Sales/etc/webapi_rest/events.xml b/app/code/Magento/Sales/etc/webapi_rest/events.xml
index 85c7449ce2dd685413f9a927d7043f1a2b0cae25..19148c286ca4fc993a5757bbe3f8580fda65f526 100644
--- a/app/code/Magento/Sales/etc/webapi_rest/events.xml
+++ b/app/code/Magento/Sales/etc/webapi_rest/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_quote_address_collect_totals_after">
-        <observer name="sales_customer_validate_vat_number" instance="Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId" method="execute" />
+        <observer name="sales_customer_validate_vat_number" instance="Magento\Sales\Observer\Frontend\RestoreCustomerGroupId" />
     </event>
 </config>
diff --git a/app/code/Magento/Sales/etc/webapi_soap/di.xml b/app/code/Magento/Sales/etc/webapi_soap/di.xml
index 756c0aa11178c86cb1c831b021aa357f70b022d0..b06d908c5bebddf7c90fa817b90875bc875db479 100644
--- a/app/code/Magento/Sales/etc/webapi_soap/di.xml
+++ b/app/code/Magento/Sales/etc/webapi_soap/di.xml
@@ -9,7 +9,7 @@
     <type name="Magento\Quote\Model\QuoteRepository">
         <plugin name="authorization" type="Magento\Quote\Model\QuoteRepository\Plugin\Authorization" />
     </type>
-    <type name="Magento\Sales\Model\Resource\Order">
-        <plugin name="authorization" type="Magento\Sales\Model\Resource\Order\Plugin\Authorization" />
+    <type name="Magento\Sales\Model\ResourceModel\Order">
+        <plugin name="authorization" type="Magento\Sales\Model\ResourceModel\Order\Plugin\Authorization" />
     </type>
 </config>
diff --git a/app/code/Magento/Sales/etc/webapi_soap/events.xml b/app/code/Magento/Sales/etc/webapi_soap/events.xml
index 85c7449ce2dd685413f9a927d7043f1a2b0cae25..19148c286ca4fc993a5757bbe3f8580fda65f526 100644
--- a/app/code/Magento/Sales/etc/webapi_soap/events.xml
+++ b/app/code/Magento/Sales/etc/webapi_soap/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_quote_address_collect_totals_after">
-        <observer name="sales_customer_validate_vat_number" instance="Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId" method="execute" />
+        <observer name="sales_customer_validate_vat_number" instance="Magento\Sales\Observer\Frontend\RestoreCustomerGroupId" />
     </event>
 </config>
diff --git a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_create_customer_block.xml b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_create_customer_block.xml
index cae60f1a945f464dbdad708cb16ab73ac54998e4..c1759dd7a0dbe158e7e92bce35ba4616a3021428 100644
--- a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_create_customer_block.xml
+++ b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_create_customer_block.xml
@@ -13,7 +13,7 @@
                     <argument name="id" xsi:type="string">sales_order_create_customer_grid</argument>
                     <argument name="use_ajax" xsi:type="string">1</argument>
                     <argument name="default_sort" xsi:type="string">entity_id</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Sales\Model\Resource\Order\Customer\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Customer\Collection</argument>
                     <argument name="pager_visibility" xsi:type="string">1</argument>
                     <argument name="grid_url" xsi:type="url" path="*/*/loadBlock">
                         <param name="block">customer_grid</param>
diff --git a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_creditmemo_grid_block.xml b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_creditmemo_grid_block.xml
index 4ac176cf7c529829eb19dea3c10967aece8ff3fb..4cd7410f4421d188dda20fbdaacf67faa3f510ec 100644
--- a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_creditmemo_grid_block.xml
+++ b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_creditmemo_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="sales.order_creditmemo.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">order_creditmemos</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Sales\Model\Resource\Order\Creditmemo\Order\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Creditmemo\Order\Grid\Collection</argument>
                     <argument name="use_ajax" xsi:type="boolean">true</argument>
                     <argument name="default_sort" xsi:type="string">created_at</argument>
                     <argument name="default_dir" xsi:type="string">DESC</argument>
@@ -65,7 +65,7 @@
                             <argument name="header" xsi:type="string" translate="true">Status</argument>
                             <argument name="type" xsi:type="string">options</argument>
                             <argument name="index" xsi:type="string">state</argument>
-                            <argument name="options" xsi:type="options" model="Magento\Sales\Model\Resource\Order\Creditmemo\Grid\StatusList"/>
+                            <argument name="options" xsi:type="options" model="Magento\Sales\Model\ResourceModel\Order\Creditmemo\Grid\StatusList"/>
                             <argument name="header_css_class" xsi:type="string">col-status</argument>
                             <argument name="column_css_class" xsi:type="string">col-status</argument>
                         </arguments>
diff --git a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_invoice_grid_block.xml b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_invoice_grid_block.xml
index 98d6852a2d776c0c205950e66528eb70abff15a9..f7c0d67733b25d623ac55c606324bdadcb1d5342 100644
--- a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_invoice_grid_block.xml
+++ b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_invoice_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="sales.order_invoice.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">order_invoices</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Sales\Model\Resource\Order\Invoice\Orders\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Invoice\Orders\Grid\Collection</argument>
                     <argument name="use_ajax" xsi:type="boolean">true</argument>
                     <argument name="default_sort" xsi:type="string">created_at</argument>
                     <argument name="default_dir" xsi:type="string">DESC</argument>
@@ -65,7 +65,7 @@
                             <argument name="header" xsi:type="string" translate="true">Status</argument>
                             <argument name="type" xsi:type="string">options</argument>
                             <argument name="index" xsi:type="string">state</argument>
-                            <argument name="options" xsi:type="options" model="Magento\Sales\Model\Resource\Order\Invoice\Grid\StatusList"/>
+                            <argument name="options" xsi:type="options" model="Magento\Sales\Model\ResourceModel\Order\Invoice\Grid\StatusList"/>
                             <argument name="header_css_class" xsi:type="string">col-status</argument>
                             <argument name="column_css_class" xsi:type="string">col-status</argument>
                         </arguments>
diff --git a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_invoice_new.xml b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_invoice_new.xml
index 195ee56afc7faa9ec32d8901a462e4e67c9f7fb0..e7ed10d6b757ef5119dbccd4c36c3b4b2193abb4 100644
--- a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_invoice_new.xml
+++ b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_invoice_new.xml
@@ -7,6 +7,9 @@
 -->
 <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
     <update handle="sales_order_item_price"/>
+    <head>
+        <link src="Magento_Sales::js/bootstrap/order-post-action.js"/>
+    </head>
     <body>
         <referenceContainer name="admin.scope.col.wrap" htmlClass="admin__old" /> <!-- ToDo UI: remove this wrapper with old styles removal. The class name "admin__old" is for tests only, we shouldn't use it in any way -->
 
diff --git a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_shipment_grid_block.xml b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_shipment_grid_block.xml
index be7fdc5df41979e9731e2f850848695c0375a437..c74ccc728b3ba08c10fd23940f3e30f18439e07a 100644
--- a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_shipment_grid_block.xml
+++ b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_shipment_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="sales.order_shipment.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">order_shipments</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Sales\Model\Resource\Order\Shipment\Order\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Sales\Model\ResourceModel\Order\Shipment\Order\Grid\Collection</argument>
                     <argument name="use_ajax" xsi:type="boolean">true</argument>
                     <argument name="default_sort" xsi:type="string">created_at</argument>
                     <argument name="default_dir" xsi:type="string">DESC</argument>
diff --git a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_status_index.xml b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_status_index.xml
index da6092e8c2de16512977c2841ad232288a03cf2e..2df3c7062c0e65d0484167bb046e06cc85174c34 100644
--- a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_status_index.xml
+++ b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_status_index.xml
@@ -12,7 +12,7 @@
                 <block class="Magento\Backend\Block\Widget\Grid" name="sales_order_status.grid" as="grid">
                     <arguments>
                         <argument name="id" xsi:type="string">sales_order_status_grid</argument>
-                        <argument name="dataSource" xsi:type="object">Magento\Sales\Model\Resource\Status\Collection</argument>
+                        <argument name="dataSource" xsi:type="object">Magento\Sales\Model\ResourceModel\Status\Collection</argument>
                         <argument name="default_sort" xsi:type="string">state</argument>
                         <argument name="default_dir" xsi:type="string">desc</argument>
                         <argument name="pager_visibility" xsi:type="string">0</argument>
diff --git a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_view.xml b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_view.xml
index aed7140464333d8293e45c77a8c80540ef59e224..10915f10d9355c4da3401dcab6fc330fe71b76dd 100644
--- a/app/code/Magento/Sales/view/adminhtml/layout/sales_order_view.xml
+++ b/app/code/Magento/Sales/view/adminhtml/layout/sales_order_view.xml
@@ -9,6 +9,7 @@
     <update handle="sales_order_transactions_grid_block"/>
     <head>
         <link src="Magento_Sales::js/bootstrap/order-create-index.js"/>
+        <link src="Magento_Sales::js/bootstrap/order-post-action.js"/>
     </head>
     <update handle="sales_order_item_price"/>
     <body>
diff --git a/app/code/Magento/Sales/view/adminhtml/layout/sales_transactions_grid_block.xml b/app/code/Magento/Sales/view/adminhtml/layout/sales_transactions_grid_block.xml
index e0f801b1af431cb3a526ec68d7b0067d808cab29..fe5c6a16e4e2da08b82ef72c5aa8bd61417af475 100644
--- a/app/code/Magento/Sales/view/adminhtml/layout/sales_transactions_grid_block.xml
+++ b/app/code/Magento/Sales/view/adminhtml/layout/sales_transactions_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="sales.transactions.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">sales_transactions_grid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Sales\Model\Resource\Transaction\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Sales\Model\ResourceModel\Transaction\Grid\Collection</argument>
                     <argument name="use_ajax" xsi:type="string">true</argument>
                     <argument name="default_sort" xsi:type="string">created_at</argument>
                     <argument name="default_dir" xsi:type="string">DESC</argument>
@@ -76,8 +76,8 @@
                             <argument name="header" xsi:type="string" translate="true">Payment Method</argument>
                             <argument name="type" xsi:type="string">options</argument>
                             <argument name="index" xsi:type="string">method</argument>
-                            <argument name="options" xsi:type="options" model="Magento\Payment\Model\Resource\Grid\TypeList"/>
-                            <argument name="option_groups" xsi:type="options" model="Magento\Payment\Model\Resource\Grid\GroupList"/>
+                            <argument name="options" xsi:type="options" model="Magento\Payment\Model\ResourceModel\Grid\TypeList"/>
+                            <argument name="option_groups" xsi:type="options" model="Magento\Payment\Model\ResourceModel\Grid\GroupList"/>
                             <argument name="header_css_class" xsi:type="string">col-method</argument>
                             <argument name="column_css_class" xsi:type="string">col-method</argument>
                         </arguments>
@@ -88,7 +88,7 @@
                             <argument name="type" xsi:type="string">options</argument>
                             <argument name="index" xsi:type="string">txn_type</argument>
                             <argument name="id" xsi:type="string">txn_type</argument>
-                            <argument name="options" xsi:type="options" model="Magento\Sales\Model\Resource\Transaction\Grid\TypeList"/>
+                            <argument name="options" xsi:type="options" model="Magento\Sales\Model\ResourceModel\Transaction\Grid\TypeList"/>
                             <argument name="header_css_class" xsi:type="string">col-transaction-type</argument>
                             <argument name="column_css_class" xsi:type="string">col-transaction-type</argument>
                         </arguments>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
index 4978e771c151aacefb017501d8a388a0a86e0400..a7f92654a75d0223583291749c5d0dbb5d8a83d7 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_creditmemo_grid.xml
@@ -40,17 +40,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_creditmemo_grid</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -60,7 +56,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -83,8 +79,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -92,377 +87,28 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns:${ $.index }.visible</item>
                         </item>
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Credit Memo #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Created</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="order_increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Order #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Order Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="billing_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_name</item>
-                        <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="state">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">state</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterRange name="base_grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">base_grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Refunded</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterSelect name="order_status">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">order_status</item>
-                        <item name="label" xsi:type="string" translate="true">Order Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
                 </argument>
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
+                        <item name="caption" xsi:type="string" translate="true">All Store Views</item>
                         <item name="dataScope" xsi:type="string">store_id</item>
                         <item name="label" xsi:type="string" translate="true">Purchased From</item>
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Billing Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="subtotal">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">subtotal</item>
-                        <item name="label" xsi:type="string" translate="true">Subtotal</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="shipping_and_handling">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_and_handling</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="adjustment_positive">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">adjustment_positive</item>
-                        <item name="label" xsi:type="string" translate="true">Adjustment Refund</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="adjustment_negative">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">adjustment_negative</item>
-                        <item name="label" xsi:type="string" translate="true">Adjustment Fee</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="order_base_grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_base_grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Grand Total</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -484,7 +130,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -497,9 +142,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.sales_order_creditmemo_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_creditmemo_grid.sales_order_creditmemo_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -508,303 +158,222 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Credit Memo</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Created</item>
                 </item>
             </argument>
         </column>
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
             </argument>
         </column>
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
             </argument>
         </column>
         <column name="billing_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
-        <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State">
+        <column name="state">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State\Options</item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="label" xsi:type="string" translate="true">Refunded</item>
                 </item>
             </argument>
         </column>
-        <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
+        <column name="order_status">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Order Status</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping &amp; Handling</item>
                 </item>
             </argument>
         </column>
         <column name="adjustment_positive" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Refund</item>
                 </item>
             </argument>
         </column>
         <column name="adjustment_negative" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Fee</item>
                 </item>
             </argument>
         </column>
         <column name="order_base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">sales/creditmemo/view</item>
                     <item name="urlEntityParamName" xsi:type="string">creditmemo_id</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
index 7a1af6d531cc547532c7c758599a398ccfb18421..6e57da8d260845951285c1c6cedc3b2f6a0f003a 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_grid.xml
@@ -48,17 +48,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_grid</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -68,7 +64,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -91,8 +87,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -100,305 +95,28 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">ID</item>
-                    </item>
-                </argument>
-            </filterInput>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
                 </argument>
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
+                        <item name="caption" xsi:type="string" translate="true">All Store Views</item>
                         <item name="dataScope" xsi:type="string">store_id</item>
                         <item name="label" xsi:type="string" translate="true">Purchase Point</item>
                     </item>
                 </argument>
             </filterSelect>
-            <filterRange name="created_at"  class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Purchase Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="billing_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_name</item>
-                        <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_name</item>
-                        <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="base_grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">base_grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Grand Total (Base)</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Grand Total (Purchased)</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterSelect name="status">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">status</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterRange name="subtotal">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">subtotal</item>
-                        <item name="label" xsi:type="string" translate="true">Subtotal</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="shipping_and_handling">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_and_handling</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterRange name="total_refunded">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">total_refunded</item>
-                        <item name="label" xsi:type="string" translate="true">Total Refunded</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -483,7 +201,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -496,9 +213,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.sales_order_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_grid.sales_order_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -507,264 +229,190 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">desc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">ID</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchase Point</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchase Date</item>
                 </item>
             </argument>
         </column>
         <column name="billing_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
                 </item>
             </argument>
         </column>
         <column name="base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total (Base)</item>
                 </item>
             </argument>
         </column>
         <column name="grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total (Purchased)</item>
                 </item>
             </argument>
         </column>
-        <column name="status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
+        <column name="status">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="total_refunded" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Total Refunded</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">sales/order/view</item>
                     <item name="urlEntityParamName" xsi:type="string">order_id</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
index a64f53bf8a8054d456bc104da68334e5ef19b902..2022ef7f1d5847b84dafdf368c065b0672acfc8c 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_invoice_grid.xml
@@ -40,17 +40,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_invoice_grid</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -60,7 +56,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -83,8 +79,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -92,278 +87,28 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Invoice #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Invoice Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="order_increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Order #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Order Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="billing_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_name</item>
-                        <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="state">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Invoice\State\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">state</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
                 </argument>
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
+                        <item name="caption" xsi:type="string" translate="true">All Store Views</item>
                         <item name="dataScope" xsi:type="string">store_id</item>
                         <item name="label" xsi:type="string" translate="true">Purchased From</item>
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Billing Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="subtotal">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">subtotal</item>
-                        <item name="label" xsi:type="string" translate="true">Subtotal</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="shipping_and_handling">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_and_handling</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Grand Total</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -385,7 +130,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -398,9 +142,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.sales_order_invoice_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_invoice_grid.sales_order_invoice_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -409,253 +158,183 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Invoice</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Invoice Date</item>
                 </item>
             </argument>
         </column>
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order #</item>
                 </item>
             </argument>
         </column>
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
             </argument>
         </column>
         <column name="billing_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
-        <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Invoice\State">
+        <column name="state">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Invoice\State\Options</item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="label" xsi:type="string" translate="true">Amount</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">increment_id</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">sales/invoice/view</item>
                     <item name="urlEntityParamName" xsi:type="string">invoice_id</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
index 17af032838e21d16fcda7b863c369ed3dd01ee5e..7fed1927717889996266120fc16e4d31db073391 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_shipment_grid.xml
@@ -40,17 +40,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_shipment_grid</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -60,7 +56,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -83,8 +79,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -92,220 +87,28 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Shipment #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Ship Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="order_increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Order #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Order Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="shipping_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_name</item>
-                        <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="total_qty">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">total_qty</item>
-                        <item name="label" xsi:type="string" translate="true">Total Quantity</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterSelect name="order_status">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">order_status</item>
-                        <item name="label" xsi:type="string" translate="true">Order Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
                 </argument>
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
+                        <item name="caption" xsi:type="string" translate="true">All Store Views</item>
                         <item name="dataScope" xsi:type="string">store_id</item>
                         <item name="label" xsi:type="string" translate="true">Purchased From</item>
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Billing Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -336,7 +139,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -349,9 +151,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.sales_order_shipment_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_shipment_grid.sales_order_shipment_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -360,228 +167,167 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipment</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Ship Date</item>
                 </item>
             </argument>
         </column>
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
             </argument>
         </column>
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
                 </item>
             </argument>
         </column>
         <column name="total_qty">
-            <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+            <argument name="data" xsi:type="array">               
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="label" xsi:type="string" translate="true">Total Quantity</item>
                 </item>
             </argument>
         </column>
-        <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
+        <column name="order_status">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Order Status</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">sales/shipment/view</item>
                     <item name="urlEntityParamName" xsi:type="string">shipment_id</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
index d48507f8beac9ecdc6b0125dd0c08a1433794b5c..4377aefc1b19b007bf3b9922994ba114cbb1add9 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_creditmemo_grid.xml
@@ -43,17 +43,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_view_creditmemo_grid</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -63,7 +59,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -86,8 +82,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -95,319 +90,28 @@
                     <item name="childDefaults" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
                         <item name="imports" xsi:type="array">
-                            <item name="visible" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.bookmarks:current.columns.${ $.index }.visible</item>
+                            <item name="visible" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns.${ $.index }:visible</item>
                         </item>
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Credit Memo</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Created</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="order_increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Order</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Order Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="billing_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_name</item>
-                        <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="state">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">state</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterRange name="base_grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">base_grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Refunded</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterSelect name="order_status">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">order_status</item>
-                        <item name="label" xsi:type="string" translate="true">Order Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
                 </argument>
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
+                        <item name="caption" xsi:type="string" translate="true">All Store Views</item>
                         <item name="dataScope" xsi:type="string">store_id</item>
                         <item name="label" xsi:type="string" translate="true">Purchased From</item>
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Billing Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="subtotal">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">subtotal</item>
-                        <item name="label" xsi:type="string" translate="true">Subtotal</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="shipping_and_handling">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_and_handling</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="order_base_grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_base_grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Grand Total</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -429,7 +133,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -442,9 +145,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.sales_order_creditmemo_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_creditmemo_grid.sales_order_view_creditmemo_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -453,303 +161,222 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Credit Memo</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Created</item>
                 </item>
             </argument>
         </column>
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
             </argument>
         </column>
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
             </argument>
         </column>
         <column name="billing_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
-        <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State">
+        <column name="state">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Creditmemo\State\Options</item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="label" xsi:type="string" translate="true">Refunded</item>
                 </item>
             </argument>
         </column>
-        <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
+        <column name="order_status">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Order Status</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping &amp; Handling</item>
                 </item>
             </argument>
         </column>
         <column name="adjustment_positive" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Refund</item>
                 </item>
             </argument>
         </column>
         <column name="adjustment_negative" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Adjustment Fee</item>
                 </item>
             </argument>
         </column>
         <column name="order_base_grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Grand Total</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">sales/order_creditmemo/view</item>
                     <item name="urlEntityParamName" xsi:type="string">creditmemo_id</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
index 9b5fe06dcac634070dc3d618a8f99f8cad876647..9ea839d31c23a9dea465d9806109c4e2a2ca6320 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_invoice_grid.xml
@@ -43,17 +43,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_view_invoice_grid</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -63,7 +59,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -86,8 +82,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -100,273 +95,23 @@
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Invoice #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Invoice Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="order_increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Order #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Order Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="billing_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_name</item>
-                        <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="state">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Invoice\State\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">state</item>
-                        <item name="label" xsi:type="string" translate="true">Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
                 </argument>
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
+                        <item name="caption" xsi:type="string" translate="true">All Store Views</item>
                         <item name="dataScope" xsi:type="string">store_id</item>
                         <item name="label" xsi:type="string" translate="true">Purchased From</item>
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Billing Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="subtotal">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">subtotal</item>
-                        <item name="label" xsi:type="string" translate="true">Subtotal</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="shipping_and_handling">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_and_handling</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterRange name="grand_total">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">grand_total</item>
-                        <item name="label" xsi:type="string" translate="true">Grand Total</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -388,7 +133,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -401,9 +145,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.sales_order_invoice_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_invoice_grid.sales_order_view_invoice_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -412,253 +161,183 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Invoice</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Invoice Date</item>
                 </item>
             </argument>
         </column>
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Order #</item>
                 </item>
             </argument>
         </column>
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
             </argument>
         </column>
         <column name="billing_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Bill-to Name</item>
                 </item>
             </argument>
         </column>
-        <column name="state" class="Magento\Sales\Ui\Component\Listing\Column\Invoice\State">
+        <column name="state">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Invoice\State\Options</item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Status</item>
                 </item>
             </argument>
         </column>
         <column name="grand_total" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="label" xsi:type="string" translate="true">Amount</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
         <column name="subtotal" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Subtotal</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_and_handling" class="Magento\Sales\Ui\Component\Listing\Column\Price">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping and Handling</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">increment_id</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">sales/order_invoice/view</item>
                     <item name="urlEntityParamName" xsi:type="string">invoice_id</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
index 399b0827be9d5b4ea7fb7a64b1b562c9a6959ee6..43539e5c20ccba9f758f5daab99fe880cb1c682e 100644
--- a/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
+++ b/app/code/Magento/Sales/view/adminhtml/ui_component/sales_order_view_shipment_grid.xml
@@ -43,17 +43,13 @@
         <bookmark name="bookmarks">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
-                    <item name="displayArea" xsi:type="string">dataGridActions</item>
                     <item name="storageConfig" xsi:type="array">
-                        <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
-                        <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
                         <item name="namespace" xsi:type="string">sales_order_view_shipment_grid</item>
                     </item>
                 </item>
             </argument>
         </bookmark>
-        <container name="columns_controls">
+        <component name="columns_controls">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="columnsData" xsi:type="array">
@@ -63,7 +59,7 @@
                     <item name="displayArea" xsi:type="string">dataGridActions</item>
                 </item>
             </argument>
-        </container>
+        </component>
         <exportButton name="export_button">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
@@ -86,8 +82,7 @@
         <filters name="listing_filters">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="displayArea" xsi:type="string">dataGridFilters</item>
-                    <item name="dataScope" xsi:type="string">filters</item>
+                    <item name="columnsProvider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns</item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.bookmarks</item>
                         <item name="namespace" xsi:type="string">current.filters</item>
@@ -100,219 +95,23 @@
                     </item>
                 </item>
             </argument>
-            <filterInput name="increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Shipment #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Ship Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="order_increment_id">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_increment_id</item>
-                        <item name="label" xsi:type="string" translate="true">Order #</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="order_created_at" class="Magento\Ui\Component\Filters\Type\DateRange">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">order_created_at</item>
-                        <item name="label" xsi:type="string" translate="true">Order Date</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterDate name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-                <filterDate name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                            <item name="dateFormat" xsi:type="string" translate="true">MM/dd/YYYY</item>
-                        </item>
-                    </argument>
-                </filterDate>
-            </filterRange>
-            <filterInput name="shipping_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_name</item>
-                        <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterRange name="total_qty">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">total_qty</item>
-                        <item name="label" xsi:type="string" translate="true">Total Quantity</item>
-                        <item name="childDefaults" xsi:type="array">
-                            <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.listing_filters</item>
-                        </item>
-                    </item>
-                </argument>
-                <filterInput name="from">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">from</item>
-                            <item name="label" xsi:type="string" translate="true">From</item>
-                            <item name="placeholder" xsi:type="string" translate="true">From</item>
-                        </item>
-                    </argument>
-                </filterInput>
-                <filterInput name="to">
-                    <argument name="data" xsi:type="array">
-                        <item name="config" xsi:type="array">
-                            <item name="dataScope" xsi:type="string">to</item>
-                            <item name="label" xsi:type="string" translate="true">To</item>
-                            <item name="placeholder" xsi:type="string" translate="true">To</item>
-                        </item>
-                    </argument>
-                </filterInput>
-            </filterRange>
-            <filterSelect name="order_status">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Sales\Ui\Component\Listing\Column\Status\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">order_status</item>
-                        <item name="label" xsi:type="string" translate="true">Order Status</item>
-                    </item>
-                </argument>
-            </filterSelect>
             <filterSelect name="store_id">
                 <argument name="optionsProvider" xsi:type="configurableObject">
                     <argument name="class" xsi:type="string">Magento\Store\Ui\Component\Listing\Column\Store\Options</argument>
                 </argument>
                 <argument name="data" xsi:type="array">
                     <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
+                        <item name="caption" xsi:type="string" translate="true">All Store Views</item>
                         <item name="dataScope" xsi:type="string">store_id</item>
                         <item name="label" xsi:type="string" translate="true">Purchased From</item>
                     </item>
                 </argument>
             </filterSelect>
-            <filterInput name="customer_name">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_name</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Name</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="customer_email">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">customer_email</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Email</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="customer_group_id">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Customer\Ui\Component\Listing\Column\Group\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">customer_group_id</item>
-                        <item name="label" xsi:type="string" translate="true">Customer Group</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="billing_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">billing_address</item>
-                        <item name="label" xsi:type="string" translate="true">Billing Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterInput name="shipping_address">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_address</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Address</item>
-                    </item>
-                </argument>
-            </filterInput>
-            <filterSelect name="payment_method">
-                <argument name="optionsProvider" xsi:type="configurableObject">
-                    <argument name="class" xsi:type="string">Magento\Payment\Ui\Component\Listing\Column\Method\Options</argument>
-                </argument>
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="caption" xsi:type="string" translate="true">Select...</item>
-                        <item name="dataScope" xsi:type="string">payment_method</item>
-                        <item name="label" xsi:type="string" translate="true">Payment Method</item>
-                    </item>
-                </argument>
-            </filterSelect>
-            <filterInput name="shipping_information">
-                <argument name="data" xsi:type="array">
-                    <item name="config" xsi:type="array">
-                        <item name="dataScope" xsi:type="string">shipping_information</item>
-                        <item name="label" xsi:type="string" translate="true">Shipping Information</item>
-                    </item>
-                </argument>
-            </filterInput>
         </filters>
         <massaction name="listing_massaction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
                     <item name="selectProvider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
-                    <item name="actions" xsi:type="array">
-                        <item name="pdfshipments_order" xsi:type="array">
-                        </item>
-                    </item>
                     <item name="indexField" xsi:type="string">entity_id</item>
                 </item>
             </argument>
@@ -334,7 +133,6 @@
                         <item name="namespace" xsi:type="string">current.paging</item>
                     </item>
                     <item name="selectProvider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns.ids</item>
-                    <item name="displayArea" xsi:type="string">bottom</item>
                 </item>
             </argument>
         </paging>
@@ -347,9 +145,14 @@
                     <item name="namespace" xsi:type="string">current</item>
                 </item>
                 <item name="childDefaults" xsi:type="array">
-                    <item name="controlVisibility" xsi:type="boolean">true</item>
-                    <item name="actionField" xsi:type="string">actions</item>
-                    <item name="clickAction" xsi:type="string">view</item>
+                    <item name="fieldAction" xsi:type="array">
+                        <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.sales_order_shipment_columns.actions</item>
+                        <item name="target" xsi:type="string">applyAction</item>
+                        <item name="params" xsi:type="array">
+                            <item name="0" xsi:type="string">view</item>
+                            <item name="1" xsi:type="string">${ $.$data.rowIndex }</item>
+                        </item>
+                    </item>
                     <item name="storageConfig" xsi:type="array">
                         <item name="provider" xsi:type="string">sales_order_view_shipment_grid.sales_order_view_shipment_grid.listing_top.bookmarks</item>
                         <item name="root" xsi:type="string">columns.${ $.index }</item>
@@ -358,228 +161,167 @@
                 </item>
             </item>
         </argument>
-        <column name="ids" class="Magento\Ui\Component\MassAction\Columns\Column">
+        <selectionsColumn name="ids">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="controlVisibility" xsi:type="boolean">false</item>
                 </item>
             </argument>
-        </column>
+        </selectionsColumn>
         <column name="increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipment</item>
                 </item>
             </argument>
         </column>
         <column name="created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Ship Date</item>
                 </item>
             </argument>
         </column>
         <column name="order_increment_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="sorting" xsi:type="string">asc</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="label" xsi:type="string" translate="true">Order</item>
                 </item>
             </argument>
         </column>
         <column name="order_created_at">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">dateRange</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/date</item>
                     <item name="dataType" xsi:type="string">date</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Order Date</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="label" xsi:type="string" translate="true">Ship-to Name</item>
                 </item>
             </argument>
         </column>
         <column name="total_qty">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="filter" xsi:type="string">textRange</item>
                     <item name="label" xsi:type="string" translate="true">Total Quantity</item>
                 </item>
             </argument>
         </column>
-        <column name="order_status" class="Magento\Sales\Ui\Component\Listing\Column\Status">
+        <column name="order_status">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Sales\Ui\Component\Listing\Column\Status\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">select</item>
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Order Status</item>
                 </item>
             </argument>
         </column>
         <column name="store_id" class="Magento\Store\Ui\Component\Listing\Column\Store">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
                     <item name="sortable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Purchased From</item>
                 </item>
             </argument>
         </column>
         <column name="customer_name">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Customer Name</item>
                 </item>
             </argument>
         </column>
         <column name="customer_email">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Email</item>
                 </item>
             </argument>
         </column>
-        <column name="customer_group_id" class="Magento\Sales\Ui\Component\Listing\Column\CustomerGroup">
+        <column name="customer_group_id">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Customer\Ui\Component\Listing\Column\Group\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Customer Group</item>
                 </item>
             </argument>
         </column>
         <column name="billing_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Billing Address</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_address" class="Magento\Sales\Ui\Component\Listing\Column\Address">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="bodyTmpl" xsi:type="string">ui/grid/cells/html</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Address</item>
                 </item>
             </argument>
         </column>
-        <column name="payment_method" class="Magento\Sales\Ui\Component\Listing\Column\PaymentMethod">
+        <column name="payment_method">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
+                <item name="options" xsi:type="object">Magento\Payment\Ui\Component\Listing\Column\Method\Options</item>
                 <item name="config" xsi:type="array">
+                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/select</item>
+                    <item name="filter" xsi:type="string">select</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
+                    <item name="dataType" xsi:type="string">select</item>
                     <item name="label" xsi:type="string" translate="true">Payment Method</item>
                 </item>
             </argument>
         </column>
         <column name="shipping_information">
             <argument name="data" xsi:type="array">
-                <item name="js_config" xsi:type="array">
-                    <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
-                </item>
                 <item name="config" xsi:type="array">
+                    <item name="filter" xsi:type="string">text</item>
                     <item name="visible" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">text</item>
-                    <item name="align" xsi:type="string">left</item>
                     <item name="label" xsi:type="string" translate="true">Shipping Information</item>
                 </item>
             </argument>
         </column>
-        <column name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
+        <actionsColumn name="actions" class="Magento\Sales\Ui\Component\Listing\Column\ViewAction">
             <argument name="data" xsi:type="array">
                 <item name="config" xsi:type="array">
-                    <item name="draggable" xsi:type="boolean">false</item>
-                    <item name="dataType" xsi:type="string">actions</item>
                     <item name="indexField" xsi:type="string">entity_id</item>
-                    <item name="align" xsi:type="string">left</item>
-                    <item name="label" xsi:type="string" translate="true">Action</item>
-                    <item name="data_type" xsi:type="string">actions</item>
-                    <item name="filterable" xsi:type="boolean">false</item>
-                    <item name="sortable" xsi:type="boolean">false</item>
                     <item name="viewUrlPath" xsi:type="string">adminhtml/order_shipment/view</item>
                     <item name="urlEntityParamName" xsi:type="string">shipment_id</item>
                 </item>
             </argument>
-        </column>
+        </actionsColumn>
     </columns>
 </listing>
diff --git a/app/code/Magento/Store/view/base/requirejs-config.js b/app/code/Magento/Sales/view/adminhtml/web/js/bootstrap/order-post-action.js
similarity index 53%
rename from app/code/Magento/Store/view/base/requirejs-config.js
rename to app/code/Magento/Sales/view/adminhtml/web/js/bootstrap/order-post-action.js
index 261efa74b09f936dfd22cd5d708df833a16a29d8..0741abff8562a89c556490873d54566696811dd9 100644
--- a/app/code/Magento/Store/view/base/requirejs-config.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/js/bootstrap/order-post-action.js
@@ -3,8 +3,6 @@
  * See COPYING.txt for license details.
  */
 
-var config = {
-    paths: {
-        'store/template': 'Magento_Store/templates'
-    }
-};
\ No newline at end of file
+require([
+    'Magento_Sales/order/view/post-wrapper'
+]);
diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js
index 6d88d084c36635f2c6d0f8f54e04dd491edd9730..1bcd3103237e7d2763d30036bb58bc2fcb73fa44 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/form.js
@@ -4,16 +4,18 @@
  */
 
 define([
-	"jquery",
-    "Magento_Sales/order/create/scripts"
-], function(jQuery){
-	var $el = jQuery('#edit_form'),
-		config,
-		baseUrl,
+    'jquery',
+    'Magento_Sales/order/create/scripts'
+], function (jQuery) {
+    'use strict';
+
+    var $el = jQuery('#edit_form'),
+        config,
+        baseUrl,
         order,
         payment;
 
-    if( !$el.length || !$el.data('order-config') ){
+    if (!$el.length || !$el.data('order-config')) {
         return;
     }
 
@@ -22,7 +24,7 @@ define([
 
     order = new AdminOrder(config);
     order.setLoadBaseUrl(baseUrl);
-    
+
     payment = {
         switchMethod: order.switchPaymentMethod.bind(order)
     };
diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
index da408242575901a134ea5af0fbd6cc7f550b4d1a..90f8b04c5c70b9d4d9fbb88d70e08bd307c83d04 100644
--- a/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/create/scripts.js
@@ -4,1367 +4,1385 @@
  */
 define([
     "jquery",
+    'Magento_Ui/js/modal/confirm',
+    'Magento_Ui/js/modal/alert',
     "mage/translate",
     "prototype",
-    "Magento_Catalog/catalog/product/composite/configure"
-], function(jQuery){
-
-window.AdminOrder = new Class.create();
-
-AdminOrder.prototype = {
-    initialize : function(data){
-        if(!data) data = {};
-        this.loadBaseUrl    = false;
-        this.customerId     = data.customer_id ? data.customer_id : false;
-        this.storeId        = data.store_id ? data.store_id : false;
-        this.currencyId     = false;
-        this.currencySymbol = data.currency_symbol ? data.currency_symbol : '';
-        this.addresses      = data.addresses ? data.addresses : $H({});
-        this.shippingAsBilling = data.shippingAsBilling ? data.shippingAsBilling : false;
-        this.gridProducts   = $H({});
-        this.gridProductsGift = $H({});
-        this.billingAddressContainer = '';
-        this.shippingAddressContainer= '';
-        this.isShippingMethodReseted = data.shipping_method_reseted ? data.shipping_method_reseted : false;
-        this.overlayData = $H({});
-        this.giftMessageDataChanged = false;
-        this.productConfigureAddFields = {};
-        this.productPriceBase = {};
-        this.collectElementsValue = true;
-        this.isOnlyVirtualProduct = false;
-        this.excludedPaymentMethods = [];
-        this.summarizePrice = true;
-        Event.observe(window, 'load',  (function(){
-            this.dataArea = new OrderFormArea('data', $(this.getAreaId('data')), this);
-            this.itemsArea = Object.extend(new OrderFormArea('items', $(this.getAreaId('items')), this), {
-                addControlButton: function(button){
-                    var controlButtonArea = $(this.node).select('.actions')[0];
-                    if (typeof controlButtonArea != 'undefined') {
-                        var buttons = controlButtonArea.childElements();
-                        for (var i = 0; i < buttons.length; i++) {
-                            if (buttons[i].innerHTML.include(button.label)) {
-                                return ;
+    "Magento_Catalog/catalog/product/composite/configure",
+    'Magento_Ui/js/lib/view/utils/async'
+], function(jQuery, confirm, alert){
+
+    window.AdminOrder = new Class.create();
+
+    AdminOrder.prototype = {
+        initialize : function(data){
+            if(!data) data = {};
+            this.loadBaseUrl    = false;
+            this.customerId     = data.customer_id ? data.customer_id : false;
+            this.storeId        = data.store_id ? data.store_id : false;
+            this.currencyId     = false;
+            this.currencySymbol = data.currency_symbol ? data.currency_symbol : '';
+            this.addresses      = data.addresses ? data.addresses : $H({});
+            this.shippingAsBilling = data.shippingAsBilling ? data.shippingAsBilling : false;
+            this.gridProducts   = $H({});
+            this.gridProductsGift = $H({});
+            this.billingAddressContainer = '';
+            this.shippingAddressContainer= '';
+            this.isShippingMethodReseted = data.shipping_method_reseted ? data.shipping_method_reseted : false;
+            this.overlayData = $H({});
+            this.giftMessageDataChanged = false;
+            this.productConfigureAddFields = {};
+            this.productPriceBase = {};
+            this.collectElementsValue = true;
+            this.isOnlyVirtualProduct = false;
+            this.excludedPaymentMethods = [];
+            this.summarizePrice = true;
+            jQuery.async('#order-items', (function(){
+                this.dataArea = new OrderFormArea('data', $(this.getAreaId('data')), this);
+                this.itemsArea = Object.extend(new OrderFormArea('items', $(this.getAreaId('items')), this), {
+                    addControlButton: function(button){
+                        var controlButtonArea = $(this.node).select('.actions')[0];
+                        if (typeof controlButtonArea != 'undefined') {
+                            var buttons = controlButtonArea.childElements();
+                            for (var i = 0; i < buttons.length; i++) {
+                                if (buttons[i].innerHTML.include(button.label)) {
+                                    return ;
+                                }
                             }
+                            button.insertIn(controlButtonArea, 'top');
                         }
-                        button.insertIn(controlButtonArea, 'top');
                     }
-                }
-            });
-
-            var searchButton = new ControlButton(jQuery.mage.__('Add Products')),
-                searchAreaId = this.getAreaId('search');
-            searchButton.onClick = function() {
-                $(searchAreaId).show();
-                var el = this;
-                window.setTimeout(function () {
-                    el.remove();
-                }, 10);
-            };
+                });
 
-            this.dataArea.onLoad = this.dataArea.onLoad.wrap(function(proceed) {
-                proceed();
-                this._parent.itemsArea.setNode($(this._parent.getAreaId('items')));
-                this._parent.itemsArea.onLoad();
-            });
+                var searchButton = new ControlButton(jQuery.mage.__('Add Products')),
+                    searchAreaId = this.getAreaId('search');
+                searchButton.onClick = function() {
+                    $(searchAreaId).show();
+                    var el = this;
+                    window.setTimeout(function () {
+                        el.remove();
+                    }, 10);
+                };
+
+                this.dataArea.onLoad = this.dataArea.onLoad.wrap(function(proceed) {
+                    proceed();
+                    this._parent.itemsArea.setNode($(this._parent.getAreaId('items')));
+                    this._parent.itemsArea.onLoad();
+                });
 
-            this.itemsArea.onLoad = this.itemsArea.onLoad.wrap(function(proceed) {
-                proceed();
-                if ($(searchAreaId) && !$(searchAreaId).visible()) {
-                    this.addControlButton(searchButton);
-                }
-            });
-            this.areasLoaded();
-            this.itemsArea.onLoad();
-        }).bind(this));
-
-        jQuery('#edit_form')
-            .on('submitOrder', function(){
-                jQuery(this).trigger('realOrder');
-            })
-            .on('realOrder', this._realSubmit.bind(this));
-
-    },
-
-    areasLoaded: function(){
-    },
-
-    itemsLoaded: function(){
-    },
-
-    dataLoaded: function(){
-        this.dataShow();
-    },
-
-    setLoadBaseUrl : function(url){
-        this.loadBaseUrl = url;
-    },
-
-    setAddresses : function(addresses){
-        this.addresses = addresses;
-    },
-
-    addExcludedPaymentMethod : function(method){
-        this.excludedPaymentMethods.push(method);
-    },
-
-    setCustomerId : function(id){
-        this.customerId = id;
-        this.loadArea('header', true);
-        $(this.getAreaId('header')).callback = 'setCustomerAfter';
-        $('back_order_top_button').hide();
-        $('reset_order_top_button').show();
-    },
-
-    setCustomerAfter : function () {
-        this.customerSelectorHide();
-        if (this.storeId) {
-            $(this.getAreaId('data')).callback = 'dataLoaded';
+                this.itemsArea.onLoad = this.itemsArea.onLoad.wrap(function(proceed) {
+                    proceed();
+                    if ($(searchAreaId) && !$(searchAreaId).visible()) {
+                        this.addControlButton(searchButton);
+                    }
+                });
+                this.areasLoaded();
+                this.itemsArea.onLoad();
+            }).bind(this));
+
+            jQuery('#edit_form')
+                .on('submitOrder', function(){
+                    jQuery(this).trigger('realOrder');
+                })
+                .on('realOrder', this._realSubmit.bind(this));
+
+        },
+
+        areasLoaded: function(){
+        },
+
+        itemsLoaded: function(){
+        },
+
+        dataLoaded: function(){
+            this.dataShow();
+        },
+
+        setLoadBaseUrl : function(url){
+            this.loadBaseUrl = url;
+        },
+
+        setAddresses : function(addresses){
+            this.addresses = addresses;
+        },
+
+        addExcludedPaymentMethod : function(method){
+            this.excludedPaymentMethods.push(method);
+        },
+
+        setCustomerId : function(id){
+            this.customerId = id;
+            this.loadArea('header', true);
+            $(this.getAreaId('header')).callback = 'setCustomerAfter';
+            $('back_order_top_button').hide();
+            $('reset_order_top_button').show();
+        },
+
+        setCustomerAfter : function () {
+            this.customerSelectorHide();
+            if (this.storeId) {
+                $(this.getAreaId('data')).callback = 'dataLoaded';
+                this.loadArea(['data'], true);
+            }
+            else {
+                this.storeSelectorShow();
+            }
+        },
+
+        setStoreId : function(id){
+            this.storeId = id;
+            this.storeSelectorHide();
+            this.sidebarShow();
+            //this.loadArea(['header', 'sidebar','data'], true);
+            this.dataShow();
+            this.loadArea(['header', 'data'], true);
+        },
+
+        setCurrencyId : function(id){
+            this.currencyId = id;
+            //this.loadArea(['sidebar', 'data'], true);
             this.loadArea(['data'], true);
-        }
-        else {
-            this.storeSelectorShow();
-        }
-    },
-
-    setStoreId : function(id){
-        this.storeId = id;
-        this.storeSelectorHide();
-        this.sidebarShow();
-        //this.loadArea(['header', 'sidebar','data'], true);
-        this.dataShow();
-        this.loadArea(['header', 'data'], true);
-    },
-
-    setCurrencyId : function(id){
-        this.currencyId = id;
-        //this.loadArea(['sidebar', 'data'], true);
-        this.loadArea(['data'], true);
-    },
-
-    setCurrencySymbol : function(symbol){
-        this.currencySymbol = symbol;
-    },
-
-    selectAddress : function(el, container){
-        id = el.value;
-        if (id.length == 0) {
-            id = '0';
-        }
-        if(this.addresses[id]){
-            this.fillAddressFields(container, this.addresses[id]);
-        }
-        else{
-            this.fillAddressFields(container, {});
-        }
+        },
 
-        var data = this.serializeData(container);
-        data[el.name] = id;
-        if(this.isShippingField(container) && !this.isShippingMethodReseted){
-            this.resetShippingMethod(data);
-        }
-        else{
-            this.saveData(data);
-        }
-    },
+        setCurrencySymbol : function(symbol){
+            this.currencySymbol = symbol;
+        },
 
-    isShippingField : function(fieldId){
-        if(this.shippingAsBilling){
-            return fieldId.include('billing');
-        }
-        return fieldId.include('shipping');
-    },
+        selectAddress : function(el, container){
+            id = el.value;
+            if (id.length == 0) {
+                id = '0';
+            }
+            if(this.addresses[id]){
+                this.fillAddressFields(container, this.addresses[id]);
+            }
+            else{
+                this.fillAddressFields(container, {});
+            }
 
-    isBillingField : function(fieldId){
-        return fieldId.include('billing');
-    },
+            var data = this.serializeData(container);
+            data[el.name] = id;
+            if(this.isShippingField(container) && !this.isShippingMethodReseted){
+                this.resetShippingMethod(data);
+            }
+            else{
+                this.saveData(data);
+            }
+        },
 
-    bindAddressFields : function(container) {
-        var fields = $(container).select('input', 'select', 'textarea');
-        for(var i=0;i<fields.length;i++){
-            Event.observe(fields[i], 'change', this.changeAddressField.bind(this));
-        }
-    },
+        isShippingField : function(fieldId){
+            if(this.shippingAsBilling){
+                return fieldId.include('billing');
+            }
+            return fieldId.include('shipping');
+        },
 
-    changeAddressField : function(event){
-        var field = Event.element(event);
-        var re = /[^\[]*\[([^\]]*)_address\]\[([^\]]*)\](\[(\d)\])?/;
-        var matchRes = field.name.match(re);
+        isBillingField : function(fieldId){
+            return fieldId.include('billing');
+        },
 
-        if (!matchRes) {
-            return;
-        }
+        bindAddressFields : function(container) {
+            var fields = $(container).select('input', 'select', 'textarea');
+            for(var i=0;i<fields.length;i++){
+                Event.observe(fields[i], 'change', this.changeAddressField.bind(this));
+            }
+        },
 
-        var type = matchRes[1];
-        var name = matchRes[2];
-        var data;
+        changeAddressField : function(event){
+            var field = Event.element(event);
+            var re = /[^\[]*\[([^\]]*)_address\]\[([^\]]*)\](\[(\d)\])?/;
+            var matchRes = field.name.match(re);
 
-        if(this.isBillingField(field.id)){
-            data = this.serializeData(this.billingAddressContainer)
-        }
-        else{
-            data = this.serializeData(this.shippingAddressContainer)
-        }
-        data = data.toObject();
+            if (!matchRes) {
+                return;
+            }
 
-        if( (type == 'billing' && this.shippingAsBilling)
-            || (type == 'shipping' && !this.shippingAsBilling) ) {
-            data['reset_shipping'] = true;
-        }
+            var type = matchRes[1];
+            var name = matchRes[2];
+            var data;
 
-        data['order['+type+'_address][customer_address_id]'] = $('order-'+type+'_address_customer_address_id').value;
+            if(this.isBillingField(field.id)){
+                data = this.serializeData(this.billingAddressContainer)
+            }
+            else{
+                data = this.serializeData(this.shippingAddressContainer)
+            }
+            data = data.toObject();
 
-        if (data['reset_shipping']) {
-            this.resetShippingMethod(data);
-        } else {
-            this.saveData(data);
-            if (name == 'country_id' || name == 'customer_address_id') {
-                this.loadArea(['shipping_method', 'billing_method', 'totals', 'items'], true, data);
+            if( (type == 'billing' && this.shippingAsBilling)
+                || (type == 'shipping' && !this.shippingAsBilling) ) {
+                data['reset_shipping'] = true;
             }
-            // added for reloading of default sender and default recipient for giftmessages
-            //this.loadArea(['giftmessage'], true, data);
-        }
-    },
-
-    fillAddressFields : function(container, data){
-        var regionIdElem = false;
-        var regionIdElemValue = false;
-
-        var fields = $(container).select('input', 'select', 'textarea');
-        var re = /[^\[]*\[[^\]]*\]\[([^\]]*)\](\[(\d)\])?/;
-        for(var i=0;i<fields.length;i++){
-            // skip input type file @Security error code: 1000
-            if (fields[i].tagName.toLowerCase() == 'input' && fields[i].type.toLowerCase() == 'file') {
-                continue;
-            }
-            var matchRes = fields[i].name.match(re);
-            if (matchRes === null) {
-                continue;
-            }
-            var name = matchRes[1];
-            var index = matchRes[3];
-
-            if (index){
-                // multiply line
-                if (data[name]){
-                    var values = data[name].split("\n");
-                    fields[i].value = values[index] ? values[index] : '';
+
+            data['order['+type+'_address][customer_address_id]'] = $('order-'+type+'_address_customer_address_id').value;
+
+            if (data['reset_shipping']) {
+                this.resetShippingMethod(data);
+            } else {
+                this.saveData(data);
+                if (name == 'country_id' || name == 'customer_address_id') {
+                    this.loadArea(['shipping_method', 'billing_method', 'totals', 'items'], true, data);
+                }
+                // added for reloading of default sender and default recipient for giftmessages
+                //this.loadArea(['giftmessage'], true, data);
+            }
+        },
+
+        fillAddressFields : function(container, data){
+            var regionIdElem = false;
+            var regionIdElemValue = false;
+
+            var fields = $(container).select('input', 'select', 'textarea');
+            var re = /[^\[]*\[[^\]]*\]\[([^\]]*)\](\[(\d)\])?/;
+            for(var i=0;i<fields.length;i++){
+                // skip input type file @Security error code: 1000
+                if (fields[i].tagName.toLowerCase() == 'input' && fields[i].type.toLowerCase() == 'file') {
+                    continue;
+                }
+                var matchRes = fields[i].name.match(re);
+                if (matchRes === null) {
+                    continue;
+                }
+                var name = matchRes[1];
+                var index = matchRes[3];
+
+                if (index){
+                    // multiply line
+                    if (data[name]){
+                        var values = data[name].split("\n");
+                        fields[i].value = values[index] ? values[index] : '';
+                    } else {
+                        fields[i].value = '';
+                    }
+                } else if (fields[i].tagName.toLowerCase() == 'select' && fields[i].multiple) {
+                    // multiselect
+                    if (data[name]) {
+                        values = [''];
+                        if (Object.isString(data[name])) {
+                            values = data[name].split(',');
+                        } else if (Object.isArray(data[name])) {
+                            values = data[name];
+                        }
+                        fields[i].setValue(values);
+                    }
                 } else {
-                    fields[i].value = '';
+                    fields[i].setValue(data[name] ? data[name] : '');
                 }
-            } else if (fields[i].tagName.toLowerCase() == 'select' && fields[i].multiple) {
-                // multiselect
-                if (data[name]) {
-                    values = [''];
-                    if (Object.isString(data[name])) {
-                        values = data[name].split(',');
-                    } else if (Object.isArray(data[name])) {
-                        values = data[name];
+
+                if (fields[i].changeUpdater) fields[i].changeUpdater();
+                if (name == 'region' && data['region_id'] && !data['region']){
+                    fields[i].value = data['region_id'];
+                }
+            }
+        },
+
+        disableShippingAddress : function(flag) {
+            this.shippingAsBilling = flag;
+            if ($('order-shipping_address_customer_address_id')) {
+                $('order-shipping_address_customer_address_id').disabled = flag;
+            }
+            if ($(this.shippingAddressContainer)) {
+                var dataFields = $(this.shippingAddressContainer).select('input', 'select', 'textarea');
+                for (var i = 0; i < dataFields.length; i++) {
+                    dataFields[i].disabled = flag;
+
+                    if(this.isOnlyVirtualProduct) {
+                        dataFields[i].setValue('');
                     }
-                    fields[i].setValue(values);
                 }
+                var buttons = $(this.shippingAddressContainer).select('button');
+                // Add corresponding class to buttons while disabling them
+                for (i = 0; i < buttons.length; i++) {
+                    buttons[i].disabled = flag;
+                    if (flag) {
+                        buttons[i].addClassName('disabled');
+                    } else {
+                        buttons[i].removeClassName('disabled');
+                    }
+                }
+            }
+        },
+
+        setShippingAsBilling : function(flag){
+            var data;
+            var areasToLoad = ['billing_method', 'shipping_address', 'totals', 'giftmessage'];
+            this.disableShippingAddress(flag);
+            if(flag){
+                data = this.serializeData(this.billingAddressContainer);
             } else {
-                fields[i].setValue(data[name] ? data[name] : '');
+                data = this.serializeData(this.shippingAddressContainer);
+                areasToLoad.push('shipping_method');
             }
+            data = data.toObject();
+            data['shipping_as_billing'] = flag ? 1 : 0;
+            data['reset_shipping'] = 1;
+            this.loadArea( areasToLoad, true, data);
+        },
+
+        resetShippingMethod : function(data){
+            var areasToLoad = ['billing_method', 'shipping_address', 'totals', 'giftmessage', 'items'];
+            if(!this.isOnlyVirtualProduct) {
+                areasToLoad.push('shipping_method');
+                areasToLoad.push('shipping_address');
+            }
+
+            data['reset_shipping'] = 1;
+            this.isShippingMethodReseted = true;
+            this.loadArea(areasToLoad, true, data);
+        },
+
+        loadShippingRates : function(){
+            this.isShippingMethodReseted = false;
+            this.loadArea(['shipping_method', 'totals'], true, {collect_shipping_rates: 1});
+        },
+
+        setShippingMethod : function(method){
+            var data = {};
+            data['order[shipping_method]'] = method;
+            this.loadArea(['shipping_method', 'totals', 'billing_method'], true, data);
+        },
 
-            if (fields[i].changeUpdater) fields[i].changeUpdater();
-            if (name == 'region' && data['region_id'] && !data['region']){
-                fields[i].value = data['region_id'];
+        switchPaymentMethod : function(method){
+            jQuery('#edit_form').trigger('changePaymentMethod', [method]);
+            this.setPaymentMethod(method);
+            var data = {};
+            data['order[payment_method]'] = method;
+            this.loadArea(['card_validation'], true, data);
+        },
+
+        setPaymentMethod : function(method){
+            if (this.paymentMethod && $('payment_form_'+this.paymentMethod)) {
+                var form = 'payment_form_'+this.paymentMethod;
+                [form + '_before', form, form + '_after'].each(function(el) {
+                    var block = $(el);
+                    if (block) {
+                        block.hide();
+                        block.select('input', 'select', 'textarea').each(function(field) {
+                            field.disabled = true;
+                        });
+                    }
+                });
             }
-        }
-    },
 
-    disableShippingAddress : function(flag) {
-        this.shippingAsBilling = flag;
-        if ($('order-shipping_address_customer_address_id')) {
-            $('order-shipping_address_customer_address_id').disabled = flag;
-        }
-        if ($(this.shippingAddressContainer)) {
-            var dataFields = $(this.shippingAddressContainer).select('input', 'select', 'textarea');
-            for (var i = 0; i < dataFields.length; i++) {
-                dataFields[i].disabled = flag;
+            if(!this.paymentMethod || method){
+                $('order-billing_method_form').select('input', 'select', 'textarea').each(function(elem){
+                    if(elem.type != 'radio') elem.disabled = true;
+                })
+            }
 
-                if(this.isOnlyVirtualProduct) {
-                    dataFields[i].setValue('');
-                }
+            if ($('payment_form_'+method)){
+                jQuery('#' + this.getAreaId('billing_method')).trigger('contentUpdated');
+                this.paymentMethod = method;
+                var form = 'payment_form_'+method;
+                [form + '_before', form, form + '_after'].each(function(el) {
+                    var block = $(el);
+                    if (block) {
+                        block.show();
+                        block.select('input', 'select', 'textarea').each(function(field) {
+                            field.disabled = false;
+                            if (!el.include('_before') && !el.include('_after') && !field.bindChange) {
+                                field.bindChange = true;
+                                field.paymentContainer = form;
+                                field.method = method;
+                                field.observe('change', this.changePaymentData.bind(this))
+                            }
+                        },this);
+                    }
+                },this);
             }
-            var buttons = $(this.shippingAddressContainer).select('button');
-            // Add corresponding class to buttons while disabling them
-            for (i = 0; i < buttons.length; i++) {
-                buttons[i].disabled = flag;
-                if (flag) {
-                    buttons[i].addClassName('disabled');
+        },
+
+        changePaymentData : function(event){
+            var elem = Event.element(event);
+            if(elem && elem.method){
+                var data = this.getPaymentData(elem.method);
+                if (data) {
+                    this.loadArea(['card_validation'], true, data);
                 } else {
-                    buttons[i].removeClassName('disabled');
+                    return;
                 }
             }
-        }
-    },
-
-    setShippingAsBilling : function(flag){
-        var data;
-        var areasToLoad = ['billing_method', 'shipping_address', 'totals', 'giftmessage'];
-        this.disableShippingAddress(flag);
-        if(flag){
-            data = this.serializeData(this.billingAddressContainer);
-        } else {
-            data = this.serializeData(this.shippingAddressContainer);
-            areasToLoad.push('shipping_method');
-        }
-        data = data.toObject();
-        data['shipping_as_billing'] = flag ? 1 : 0;
-        data['reset_shipping'] = 1;
-        this.loadArea( areasToLoad, true, data);
-    },
-
-    resetShippingMethod : function(data){
-        var areasToLoad = ['billing_method', 'shipping_address', 'totals', 'giftmessage', 'items'];
-        if(!this.isOnlyVirtualProduct) {
-            areasToLoad.push('shipping_method');
-            areasToLoad.push('shipping_address');
-        }
+        },
 
-        data['reset_shipping'] = 1;
-        this.isShippingMethodReseted = true;
-        this.loadArea(areasToLoad, true, data);
-    },
-
-    loadShippingRates : function(){
-        this.isShippingMethodReseted = false;
-        this.loadArea(['shipping_method', 'totals'], true, {collect_shipping_rates: 1});
-    },
-
-    setShippingMethod : function(method){
-        var data = {};
-        data['order[shipping_method]'] = method;
-        this.loadArea(['shipping_method', 'totals', 'billing_method'], true, data);
-    },
-
-    switchPaymentMethod : function(method){
-        jQuery('#edit_form').trigger('changePaymentMethod', [method]);
-        this.setPaymentMethod(method);
-        var data = {};
-        data['order[payment_method]'] = method;
-        this.loadArea(['card_validation'], true, data);
-    },
-
-    setPaymentMethod : function(method){
-        if (this.paymentMethod && $('payment_form_'+this.paymentMethod)) {
-            var form = 'payment_form_'+this.paymentMethod;
-            [form + '_before', form, form + '_after'].each(function(el) {
-                var block = $(el);
-                if (block) {
-                    block.hide();
-                    block.select('input', 'select', 'textarea').each(function(field) {
-                        field.disabled = true;
-                    });
-                }
-            });
-        }
-
-        if(!this.paymentMethod || method){
-            $('order-billing_method_form').select('input', 'select', 'textarea').each(function(elem){
-                if(elem.type != 'radio') elem.disabled = true;
-            })
-        }
-
-        if ($('payment_form_'+method)){
-            jQuery('#' + this.getAreaId('billing_method')).trigger('contentUpdated');
-            this.paymentMethod = method;
-            var form = 'payment_form_'+method;
-            [form + '_before', form, form + '_after'].each(function(el) {
-                var block = $(el);
-                if (block) {
-                   block.show();
-                   block.select('input', 'select', 'textarea').each(function(field) {
-                       field.disabled = false;
-                       if (!el.include('_before') && !el.include('_after') && !field.bindChange) {
-                           field.bindChange = true;
-                           field.paymentContainer = form; 
-                           field.method = method;
-                           field.observe('change', this.changePaymentData.bind(this))
-                        }
-                    },this);
+        getPaymentData : function(currentMethod){
+            if (typeof(currentMethod) == 'undefined') {
+                if (this.paymentMethod) {
+                    currentMethod = this.paymentMethod;
+                } else {
+                    return false;
                 }
-            },this);
-        }
-    },
-
-    changePaymentData : function(event){
-        var elem = Event.element(event);
-        if(elem && elem.method){
-            var data = this.getPaymentData(elem.method);
-            if (data) {
-                 this.loadArea(['card_validation'], true, data);
-            } else {
-                return;
             }
-        }
-    },
-
-    getPaymentData : function(currentMethod){
-        if (typeof(currentMethod) == 'undefined') {
-            if (this.paymentMethod) {
-                currentMethod = this.paymentMethod;
-            } else {
+            if (this.isPaymentValidationAvailable() == false) {
                 return false;
             }
-        }
-        if (this.isPaymentValidationAvailable() == false) {
-            return false;
-        }
-        var data = {};
-        var fields = $('payment_form_' + currentMethod).select('input', 'select');
-        for(var i=0;i<fields.length;i++){
-            data[fields[i].name] = fields[i].getValue();
-        }
-        if ((typeof data['payment[cc_type]']) != 'undefined' && (!data['payment[cc_type]'] || !data['payment[cc_number]'])) {
-            return false;
-        }
-        return data;
-    },
-
-    applyCoupon : function(code){
-        this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, {'order[coupon][code]':code, reset_shipping: true});
-        this.orderItemChanged = false;
-    },
-
-    addProduct : function(id){
-        this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, {add_product:id, reset_shipping: true});
-    },
-
-    removeQuoteItem : function(id){
-        this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true,
-            {remove_item:id, from:'quote',reset_shipping: true});
-    },
-
-    moveQuoteItem : function(id, to){
-        this.loadArea(['sidebar_'+to, 'items', 'shipping_method', 'totals', 'billing_method'], this.getAreaId('items'),
-            {move_item:id, to:to, reset_shipping: true});
-    },
-
-    productGridShow : function(buttonElement){
-        this.productGridShowButton = buttonElement;
-        Element.hide(buttonElement);
-        this.showArea('search');
-    },
-
-    productGridRowInit : function(grid, row){
-        var checkbox = $(row).select('.checkbox')[0];
-        var inputs = $(row).select('.input-text');
-        if (checkbox && inputs.length > 0) {
-            checkbox.inputElements = inputs;
-            for (var i = 0; i < inputs.length; i++) {
-                var input = inputs[i];
-                input.checkboxElement = checkbox;
-
-                var product = this.gridProducts.get(checkbox.value);
-                if (product) {
-                    var defaultValue = product[input.name];
-                    if (defaultValue) {
-                        if (input.name == 'giftmessage') {
-                            input.checked = true;
-                        } else {
-                            input.value = defaultValue;
+            var data = {};
+            var fields = $('payment_form_' + currentMethod).select('input', 'select');
+            for(var i=0;i<fields.length;i++){
+                data[fields[i].name] = fields[i].getValue();
+            }
+            if ((typeof data['payment[cc_type]']) != 'undefined' && (!data['payment[cc_type]'] || !data['payment[cc_number]'])) {
+                return false;
+            }
+            return data;
+        },
+
+        applyCoupon : function(code){
+            this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, {'order[coupon][code]':code, reset_shipping: true});
+            this.orderItemChanged = false;
+        },
+
+        addProduct : function(id){
+            this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true, {add_product:id, reset_shipping: true});
+        },
+
+        removeQuoteItem : function(id){
+            this.loadArea(['items', 'shipping_method', 'totals', 'billing_method'], true,
+                {remove_item:id, from:'quote',reset_shipping: true});
+        },
+
+        moveQuoteItem : function(id, to){
+            this.loadArea(['sidebar_'+to, 'items', 'shipping_method', 'totals', 'billing_method'], this.getAreaId('items'),
+                {move_item:id, to:to, reset_shipping: true});
+        },
+
+        productGridShow : function(buttonElement){
+            this.productGridShowButton = buttonElement;
+            Element.hide(buttonElement);
+            this.showArea('search');
+        },
+
+        productGridRowInit : function(grid, row){
+            var checkbox = $(row).select('.checkbox')[0];
+            var inputs = $(row).select('.input-text');
+            if (checkbox && inputs.length > 0) {
+                checkbox.inputElements = inputs;
+                for (var i = 0; i < inputs.length; i++) {
+                    var input = inputs[i];
+                    input.checkboxElement = checkbox;
+
+                    var product = this.gridProducts.get(checkbox.value);
+                    if (product) {
+                        var defaultValue = product[input.name];
+                        if (defaultValue) {
+                            if (input.name == 'giftmessage') {
+                                input.checked = true;
+                            } else {
+                                input.value = defaultValue;
+                            }
                         }
                     }
-                }
 
-                input.disabled = !checkbox.checked || input.hasClassName('input-inactive');
+                    input.disabled = !checkbox.checked || input.hasClassName('input-inactive');
 
-                Event.observe(input,'keyup', this.productGridRowInputChange.bind(this));
-                Event.observe(input,'change',this.productGridRowInputChange.bind(this));
+                    Event.observe(input,'keyup', this.productGridRowInputChange.bind(this));
+                    Event.observe(input,'change',this.productGridRowInputChange.bind(this));
+                }
             }
-        }
-    },
-
-    productGridRowInputChange : function(event){
-        var element = Event.element(event);
-        if (element && element.checkboxElement && element.checkboxElement.checked){
-            if (element.name!='giftmessage' || element.checked) {
-                this.gridProducts.get(element.checkboxElement.value)[element.name] = element.value;
-            } else if (element.name=='giftmessage' && this.gridProducts.get(element.checkboxElement.value)[element.name]) {
-                delete(this.gridProducts.get(element.checkboxElement.value)[element.name]);
+        },
+
+        productGridRowInputChange : function(event){
+            var element = Event.element(event);
+            if (element && element.checkboxElement && element.checkboxElement.checked){
+                if (element.name!='giftmessage' || element.checked) {
+                    this.gridProducts.get(element.checkboxElement.value)[element.name] = element.value;
+                } else if (element.name=='giftmessage' && this.gridProducts.get(element.checkboxElement.value)[element.name]) {
+                    delete(this.gridProducts.get(element.checkboxElement.value)[element.name]);
+                }
             }
-        }
-    },
-
-    productGridRowClick : function(grid, event){
-        var trElement = Event.findElement(event, 'tr');
-        var qtyElement = trElement.select('input[name="qty"]')[0];
-        var eventElement = Event.element(event);
-        var isInputCheckbox = eventElement.tagName == 'INPUT' && eventElement.type == 'checkbox';
-        var isInputQty = eventElement.tagName == 'INPUT' && eventElement.name == 'qty';
-        if (trElement && !isInputQty) {
-            var checkbox = Element.select(trElement, 'input[type="checkbox"]')[0];
-            var confLink = Element.select(trElement, 'a')[0];
-            var priceColl = Element.select(trElement, '.price')[0];
-            if (checkbox) {
-                // processing non composite product
-                if (confLink.readAttribute('disabled')) {
-                    var checked = isInputCheckbox ? checkbox.checked : !checkbox.checked;
-                    grid.setCheckboxChecked(checkbox, checked);
-                // processing composite product
-                } else if (isInputCheckbox && !checkbox.checked) {
-                    grid.setCheckboxChecked(checkbox, false);
-                // processing composite product
-                } else if (!isInputCheckbox || (isInputCheckbox && checkbox.checked)) {
-                    var listType = confLink.readAttribute('list_type');
-                    var productId = confLink.readAttribute('product_id');
-                    if (typeof this.productPriceBase[productId] == 'undefined') {
-                        var priceBase = priceColl.innerHTML.match(/.*?([\d,]+\.?\d*)/);
-                        if (!priceBase) {
-                            this.productPriceBase[productId] = 0;
-                        } else {
-                            this.productPriceBase[productId] = parseFloat(priceBase[1].replace(/,/g,''));
+        },
+
+        productGridRowClick : function(grid, event){
+            var trElement = Event.findElement(event, 'tr');
+            var qtyElement = trElement.select('input[name="qty"]')[0];
+            var eventElement = Event.element(event);
+            var isInputCheckbox = eventElement.tagName == 'INPUT' && eventElement.type == 'checkbox';
+            var isInputQty = eventElement.tagName == 'INPUT' && eventElement.name == 'qty';
+            if (trElement && !isInputQty) {
+                var checkbox = Element.select(trElement, 'input[type="checkbox"]')[0];
+                var confLink = Element.select(trElement, 'a')[0];
+                var priceColl = Element.select(trElement, '.price')[0];
+                if (checkbox) {
+                    // processing non composite product
+                    if (confLink.readAttribute('disabled')) {
+                        var checked = isInputCheckbox ? checkbox.checked : !checkbox.checked;
+                        grid.setCheckboxChecked(checkbox, checked);
+                        // processing composite product
+                    } else if (isInputCheckbox && !checkbox.checked) {
+                        grid.setCheckboxChecked(checkbox, false);
+                        // processing composite product
+                    } else if (!isInputCheckbox || (isInputCheckbox && checkbox.checked)) {
+                        var listType = confLink.readAttribute('list_type');
+                        var productId = confLink.readAttribute('product_id');
+                        if (typeof this.productPriceBase[productId] == 'undefined') {
+                            var priceBase = priceColl.innerHTML.match(/.*?([\d,]+\.?\d*)/);
+                            if (!priceBase) {
+                                this.productPriceBase[productId] = 0;
+                            } else {
+                                this.productPriceBase[productId] = parseFloat(priceBase[1].replace(/,/g,''));
+                            }
                         }
+                        productConfigure.setConfirmCallback(listType, function() {
+                            // sync qty of popup and qty of grid
+                            var confirmedCurrentQty = productConfigure.getCurrentConfirmedQtyElement();
+                            if (qtyElement && confirmedCurrentQty && !isNaN(confirmedCurrentQty.value)) {
+                                qtyElement.value = confirmedCurrentQty.value;
+                            }
+                            // calc and set product price
+                            var productPrice = this._calcProductPrice();
+                            if (this._isSummarizePrice()) {
+                                productPrice += this.productPriceBase[productId];
+                            }
+                            productPrice = parseFloat(productPrice);
+                            priceColl.innerHTML = this.currencySymbol + productPrice.toFixed(2);
+                            // and set checkbox checked
+                            grid.setCheckboxChecked(checkbox, true);
+                        }.bind(this));
+                        productConfigure.setCancelCallback(listType, function() {
+                            if (!$(productConfigure.confirmedCurrentId) || !$(productConfigure.confirmedCurrentId).innerHTML) {
+                                grid.setCheckboxChecked(checkbox, false);
+                            }
+                        });
+                        productConfigure.setShowWindowCallback(listType, function() {
+                            // sync qty of grid and qty of popup
+                            var formCurrentQty = productConfigure.getCurrentFormQtyElement();
+                            if (formCurrentQty && qtyElement && !isNaN(qtyElement.value)) {
+                                formCurrentQty.value = qtyElement.value;
+                            }
+                        }.bind(this));
+                        productConfigure.showItemConfiguration(listType, productId);
                     }
-                    productConfigure.setConfirmCallback(listType, function() {
-                        // sync qty of popup and qty of grid
-                        var confirmedCurrentQty = productConfigure.getCurrentConfirmedQtyElement();
-                        if (qtyElement && confirmedCurrentQty && !isNaN(confirmedCurrentQty.value)) {
-                            qtyElement.value = confirmedCurrentQty.value;
-                        }
-                        // calc and set product price
-                        var productPrice = this._calcProductPrice();
-                        if (this._isSummarizePrice()) {
-                            productPrice += this.productPriceBase[productId];
-                        }
-                        productPrice = parseFloat(productPrice);
-                        priceColl.innerHTML = this.currencySymbol + productPrice.toFixed(2);
-                        // and set checkbox checked
-                        grid.setCheckboxChecked(checkbox, true);
-                    }.bind(this));
-                    productConfigure.setCancelCallback(listType, function() {
-                        if (!$(productConfigure.confirmedCurrentId) || !$(productConfigure.confirmedCurrentId).innerHTML) {
-                            grid.setCheckboxChecked(checkbox, false);
-                        }
-                    });
-                    productConfigure.setShowWindowCallback(listType, function() {
-                        // sync qty of grid and qty of popup
-                        var formCurrentQty = productConfigure.getCurrentFormQtyElement();
-                        if (formCurrentQty && qtyElement && !isNaN(qtyElement.value)) {
-                            formCurrentQty.value = qtyElement.value;
-                        }
-                    }.bind(this));
-                    productConfigure.showItemConfiguration(listType, productId);
                 }
             }
-        }
-    },
-
-    /**
-     * Is need to summarize price
-     */
-    _isSummarizePrice: function(elm) {
-        if (elm && elm.hasAttribute('summarizePrice')) {
-            this.summarizePrice = parseInt(elm.readAttribute('summarizePrice'));
-        }
-        return this.summarizePrice;
-    },
-    /**
-     * Calc product price through its options
-     */
-    _calcProductPrice: function () {
-        var productPrice = 0;
-        var getPriceFields = function (elms) {
+        },
+
+        /**
+         * Is need to summarize price
+         */
+        _isSummarizePrice: function(elm) {
+            if (elm && elm.hasAttribute('summarizePrice')) {
+                this.summarizePrice = parseInt(elm.readAttribute('summarizePrice'));
+            }
+            return this.summarizePrice;
+        },
+        /**
+         * Calc product price through its options
+         */
+        _calcProductPrice: function () {
             var productPrice = 0;
-            var getPrice = function (elm) {
-                var optQty = 1;
-                if (elm.hasAttribute('qtyId')) {
-                    if (!$(elm.getAttribute('qtyId')).value) {
-                        return 0;
-                    } else {
-                        optQty = parseFloat($(elm.getAttribute('qtyId')).value);
+            var getPriceFields = function (elms) {
+                var productPrice = 0;
+                var getPrice = function (elm) {
+                    var optQty = 1;
+                    if (elm.hasAttribute('qtyId')) {
+                        if (!$(elm.getAttribute('qtyId')).value) {
+                            return 0;
+                        } else {
+                            optQty = parseFloat($(elm.getAttribute('qtyId')).value);
+                        }
                     }
-                }
-                if (elm.hasAttribute('price') && !elm.disabled) {
-                    return parseFloat(elm.readAttribute('price')) * optQty;
-                }
-                return 0;
-            };
-            for(var i = 0; i < elms.length; i++) {
-                if (elms[i].type == 'select-one' || elms[i].type == 'select-multiple') {
-                    for(var ii = 0; ii < elms[i].options.length; ii++) {
-                        if (elms[i].options[ii].selected) {
-                            if (this._isSummarizePrice(elms[i].options[ii])) {
-                                productPrice += getPrice(elms[i].options[ii]);
-                            } else {
-                                productPrice = getPrice(elms[i].options[ii]);
+                    if (elm.hasAttribute('price') && !elm.disabled) {
+                        return parseFloat(elm.readAttribute('price')) * optQty;
+                    }
+                    return 0;
+                };
+                for(var i = 0; i < elms.length; i++) {
+                    if (elms[i].type == 'select-one' || elms[i].type == 'select-multiple') {
+                        for(var ii = 0; ii < elms[i].options.length; ii++) {
+                            if (elms[i].options[ii].selected) {
+                                if (this._isSummarizePrice(elms[i].options[ii])) {
+                                    productPrice += getPrice(elms[i].options[ii]);
+                                } else {
+                                    productPrice = getPrice(elms[i].options[ii]);
+                                }
                             }
                         }
                     }
-                }
-                else if (((elms[i].type == 'checkbox' || elms[i].type == 'radio') && elms[i].checked)
+                    else if (((elms[i].type == 'checkbox' || elms[i].type == 'radio') && elms[i].checked)
                         || ((elms[i].type == 'file' || elms[i].type == 'text' || elms[i].type == 'textarea' || elms[i].type == 'hidden')
-                            && Form.Element.getValue(elms[i]))
-                ) {
-                    if (this._isSummarizePrice(elms[i])) {
-                        productPrice += getPrice(elms[i]);
-                    } else {
-                        productPrice = getPrice(elms[i]);
+                        && Form.Element.getValue(elms[i]))
+                    ) {
+                        if (this._isSummarizePrice(elms[i])) {
+                            productPrice += getPrice(elms[i]);
+                        } else {
+                            productPrice = getPrice(elms[i]);
+                        }
                     }
                 }
-            }
+                return productPrice;
+            }.bind(this);
+            productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('input'));
+            productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('select'));
+            productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('textarea'));
             return productPrice;
-        }.bind(this);
-        productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('input'));
-        productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('select'));
-        productPrice += getPriceFields($(productConfigure.confirmedCurrentId).getElementsByTagName('textarea'));
-        return productPrice;
-    },
-
-    productGridCheckboxCheck : function(grid, element, checked){
-        if (checked) {
-            if(element.inputElements) {
-                this.gridProducts.set(element.value, {});
-                var product = this.gridProducts.get(element.value);
-                for (var i = 0; i < element.inputElements.length; i++) {
-                    var input = element.inputElements[i];
-                    if (!input.hasClassName('input-inactive')) {
-                        input.disabled = false;
-                        if (input.name == 'qty' && !input.value) {
-                            input.value = 1;
+        },
+
+        productGridCheckboxCheck : function(grid, element, checked){
+            if (checked) {
+                if(element.inputElements) {
+                    this.gridProducts.set(element.value, {});
+                    var product = this.gridProducts.get(element.value);
+                    for (var i = 0; i < element.inputElements.length; i++) {
+                        var input = element.inputElements[i];
+                        if (!input.hasClassName('input-inactive')) {
+                            input.disabled = false;
+                            if (input.name == 'qty' && !input.value) {
+                                input.value = 1;
+                            }
                         }
-                    }
 
-                    if (input.checked || input.name != 'giftmessage') {
-                        product[input.name] = input.value;
-                    } else if (product[input.name]) {
-                        delete(product[input.name]);
+                        if (input.checked || input.name != 'giftmessage') {
+                            product[input.name] = input.value;
+                        } else if (product[input.name]) {
+                            delete(product[input.name]);
+                        }
+                    }
+                }
+            } else {
+                if(element.inputElements){
+                    for(var i = 0; i < element.inputElements.length; i++) {
+                        element.inputElements[i].disabled = true;
                     }
                 }
+                this.gridProducts.unset(element.value);
             }
-        } else {
-            if(element.inputElements){
-                for(var i = 0; i < element.inputElements.length; i++) {
-                    element.inputElements[i].disabled = true;
+            grid.reloadParams = {'products[]':this.gridProducts.keys()};
+        },
+
+        /**
+         * Submit configured products to quote
+         */
+        productGridAddSelected : function(){
+            if(this.productGridShowButton) Element.show(this.productGridShowButton);
+            var area = ['search', 'items', 'shipping_method', 'totals', 'giftmessage','billing_method'];
+            // prepare additional fields and filtered items of products
+            var fieldsPrepare = {};
+            var itemsFilter = [];
+            var products = this.gridProducts.toObject();
+            for (var productId in products) {
+                itemsFilter.push(productId);
+                var paramKey = 'item['+productId+']';
+                for (var productParamKey in products[productId]) {
+                    paramKey += '['+productParamKey+']';
+                    fieldsPrepare[paramKey] = products[productId][productParamKey];
                 }
             }
-            this.gridProducts.unset(element.value);
-        }
-        grid.reloadParams = {'products[]':this.gridProducts.keys()};
-    },
-
-    /**
-     * Submit configured products to quote
-     */
-    productGridAddSelected : function(){
-        if(this.productGridShowButton) Element.show(this.productGridShowButton);
-        var area = ['search', 'items', 'shipping_method', 'totals', 'giftmessage','billing_method'];
-        // prepare additional fields and filtered items of products
-        var fieldsPrepare = {};
-        var itemsFilter = [];
-        var products = this.gridProducts.toObject();
-        for (var productId in products) {
-            itemsFilter.push(productId);
-            var paramKey = 'item['+productId+']';
-            for (var productParamKey in products[productId]) {
-                paramKey += '['+productParamKey+']';
-                fieldsPrepare[paramKey] = products[productId][productParamKey];
+            this.productConfigureSubmit('product_to_add', area, fieldsPrepare, itemsFilter);
+            productConfigure.clean('quote_items');
+            this.hideArea('search');
+            this.gridProducts = $H({});
+        },
+
+        selectCustomer : function(grid, event){
+            var element = Event.findElement(event, 'tr');
+            if (element.title){
+                this.setCustomerId(element.title);
             }
-        }
-        this.productConfigureSubmit('product_to_add', area, fieldsPrepare, itemsFilter);
-        productConfigure.clean('quote_items');
-        this.hideArea('search');
-        this.gridProducts = $H({});
-    },
-
-    selectCustomer : function(grid, event){
-        var element = Event.findElement(event, 'tr');
-        if (element.title){
-            this.setCustomerId(element.title);
-        }
-    },
-
-    customerSelectorHide : function(){
-        this.hideArea('customer-selector');
-    },
+        },
 
-    customerSelectorShow : function(){
-        this.showArea('customer-selector');
-    },
+        customerSelectorHide : function(){
+            this.hideArea('customer-selector');
+        },
 
-    storeSelectorHide : function(){
-        this.hideArea('store-selector');
-    },
+        customerSelectorShow : function(){
+            this.showArea('customer-selector');
+        },
 
-    storeSelectorShow : function(){
-        this.showArea('store-selector');
-    },
+        storeSelectorHide : function(){
+            this.hideArea('store-selector');
+        },
 
-    dataHide : function(){
-        this.hideArea('data');
-    },
+        storeSelectorShow : function(){
+            this.showArea('store-selector');
+        },
 
-    dataShow : function(){
-        if ($('submit_order_top_button')) {
-            $('submit_order_top_button').show();
-        }
-        this.showArea('data');
-    },
-
-    clearShoppingCart : function(confirmMessage){
-        if (confirm(confirmMessage)) {
-            this.collectElementsValue = false;
-            order.sidebarApplyChanges({'sidebar[empty_customer_cart]': 1});
-            this.collectElementsValue = true;
-        }
-    },
+        dataHide : function(){
+            this.hideArea('data');
+        },
 
-    sidebarApplyChanges : function(auxiliaryParams) {
-        if ($(this.getAreaId('sidebar'))) {
-            var data = {};
-            if (this.collectElementsValue) {
-                var elems = $(this.getAreaId('sidebar')).select('input');
-                for (var i=0; i < elems.length; i++) {
-                    if (elems[i].getValue()) {
-                        data[elems[i].name] = elems[i].getValue();
+        dataShow : function(){
+            if ($('submit_order_top_button')) {
+                $('submit_order_top_button').show();
+            }
+            this.showArea('data');
+        },
+
+        clearShoppingCart : function(confirmMessage){
+            var self = this;
+
+            confirm({
+                content: confirmMessage,
+                actions: {
+                    confirm: function() {
+                        self.collectElementsValue = false;
+                        order.sidebarApplyChanges({'sidebar[empty_customer_cart]': 1});
+                        self.collectElementsValue = true;
                     }
                 }
-            }
-            if (auxiliaryParams instanceof Object) {
-                for (var paramName in auxiliaryParams) {
-                    data[paramName] = String(auxiliaryParams[paramName]);
+            });
+        },
+
+        sidebarApplyChanges : function(auxiliaryParams) {
+            if ($(this.getAreaId('sidebar'))) {
+                var data = {};
+                if (this.collectElementsValue) {
+                    var elems = $(this.getAreaId('sidebar')).select('input');
+                    for (var i=0; i < elems.length; i++) {
+                        if (elems[i].getValue()) {
+                            data[elems[i].name] = elems[i].getValue();
+                        }
+                    }
+                }
+                if (auxiliaryParams instanceof Object) {
+                    for (var paramName in auxiliaryParams) {
+                        data[paramName] = String(auxiliaryParams[paramName]);
+                    }
                 }
+                data.reset_shipping = true;
+                this.loadArea(['sidebar', 'items', 'shipping_method', 'billing_method','totals', 'giftmessage'], true, data);
             }
-            data.reset_shipping = true;
-            this.loadArea(['sidebar', 'items', 'shipping_method', 'billing_method','totals', 'giftmessage'], true, data);
-        }
-    },
+        },
 
-    sidebarHide : function(){
-        if(this.storeId === false && $('page:left') && $('page:container')){
-            $('page:left').hide();
-            $('page:container').removeClassName('container');
-            $('page:container').addClassName('container-collapsed');
-        }
-    },
+        sidebarHide : function(){
+            if(this.storeId === false && $('page:left') && $('page:container')){
+                $('page:left').hide();
+                $('page:container').removeClassName('container');
+                $('page:container').addClassName('container-collapsed');
+            }
+        },
 
-    sidebarShow : function(){
-        if($('page:left') && $('page:container')){
-            $('page:left').show();
-            $('page:container').removeClassName('container-collapsed');
-            $('page:container').addClassName('container');
-        }
-    },
-
-    /**
-     * Show configuration of product and add handlers on submit form
-     *
-     * @param productId
-     */
-    sidebarConfigureProduct: function (listType, productId, itemId) {
-        // create additional fields
-        var params = {};
-        params.reset_shipping = true;
-        params.add_product = productId;
-        this.prepareParams(params);
-        for (var i in params) {
-            if (params[i] === null) {
-                unset(params[i]);
-            } else if (typeof(params[i]) == 'boolean') {
-                params[i] = params[i] ? 1 : 0;
+        sidebarShow : function(){
+            if($('page:left') && $('page:container')){
+                $('page:left').show();
+                $('page:container').removeClassName('container-collapsed');
+                $('page:container').addClassName('container');
             }
-        }
-        var fields = [];
-        for (var name in params) {
-            fields.push(new Element('input', {type: 'hidden', name: name, value: params[name]}));
-        }
-        // add additional fields before triggered submit
-        productConfigure.setBeforeSubmitCallback(listType, function() {
-            productConfigure.addFields(fields);
-        }.bind(this));
-        // response handler
-        productConfigure.setOnLoadIFrameCallback(listType, function(response) {
-            if (!response.ok) {
-                return;
+        },
+
+        /**
+         * Show configuration of product and add handlers on submit form
+         *
+         * @param productId
+         */
+        sidebarConfigureProduct: function (listType, productId, itemId) {
+            // create additional fields
+            var params = {};
+            params.reset_shipping = true;
+            params.add_product = productId;
+            this.prepareParams(params);
+            for (var i in params) {
+                if (params[i] === null) {
+                    unset(params[i]);
+                } else if (typeof(params[i]) == 'boolean') {
+                    params[i] = params[i] ? 1 : 0;
+                }
             }
-            this.loadArea(['items', 'shipping_method', 'billing_method','totals', 'giftmessage'], true);
-        }.bind(this));
-        // show item configuration
-        itemId = itemId ? itemId : productId;
-        productConfigure.showItemConfiguration(listType, itemId);
-        return false;
-    },
-
-    removeSidebarItem : function(id, from){
-        this.loadArea(['sidebar_'+from], 'sidebar_data_'+from, {remove_item:id, from:from});
-    },
-
-    itemsUpdate : function(){
-        var area = ['sidebar', 'items', 'shipping_method', 'billing_method','totals', 'giftmessage'];
-        // prepare additional fields
-        var fieldsPrepare = {update_items: 1};
-        var info = $('order-items_grid').select('input', 'select', 'textarea');
-        for(var i=0; i<info.length; i++){
-            if(!info[i].disabled && (info[i].type != 'checkbox' || info[i].checked)) {
-                fieldsPrepare[info[i].name] = info[i].getValue();
+            var fields = [];
+            for (var name in params) {
+                fields.push(new Element('input', {type: 'hidden', name: name, value: params[name]}));
             }
-        }
-        fieldsPrepare = Object.extend(fieldsPrepare, this.productConfigureAddFields);
-        this.productConfigureSubmit('quote_items', area, fieldsPrepare);
-        this.orderItemChanged = false;
-    },
-
-    itemsOnchangeBind : function(){
-        var elems = $('order-items_grid').select('input', 'select', 'textarea');
-        for(var i=0; i<elems.length; i++){
-            if(!elems[i].bindOnchange){
-                elems[i].bindOnchange = true;
-                elems[i].observe('change', this.itemChange.bind(this))
+            // add additional fields before triggered submit
+            productConfigure.setBeforeSubmitCallback(listType, function() {
+                productConfigure.addFields(fields);
+            }.bind(this));
+            // response handler
+            productConfigure.setOnLoadIFrameCallback(listType, function(response) {
+                if (!response.ok) {
+                    return;
+                }
+                this.loadArea(['items', 'shipping_method', 'billing_method','totals', 'giftmessage'], true);
+            }.bind(this));
+            // show item configuration
+            itemId = itemId ? itemId : productId;
+            productConfigure.showItemConfiguration(listType, itemId);
+            return false;
+        },
+
+        removeSidebarItem : function(id, from){
+            this.loadArea(['sidebar_'+from], 'sidebar_data_'+from, {remove_item:id, from:from});
+        },
+
+        itemsUpdate : function(){
+            var area = ['sidebar', 'items', 'shipping_method', 'billing_method','totals', 'giftmessage'];
+            // prepare additional fields
+            var fieldsPrepare = {update_items: 1};
+            var info = $('order-items_grid').select('input', 'select', 'textarea');
+            for(var i=0; i<info.length; i++){
+                if(!info[i].disabled && (info[i].type != 'checkbox' || info[i].checked)) {
+                    fieldsPrepare[info[i].name] = info[i].getValue();
+                }
             }
-        }
-    },
-
-    itemChange : function(event){
-        this.giftmessageOnItemChange(event);
-        this.orderItemChanged = true;
-    },
-
-    /**
-     * Submit batch of configured products
-     *
-     * @param listType
-     * @param area
-     * @param fieldsPrepare
-     * @param itemsFilter
-     */
-    productConfigureSubmit : function(listType, area, fieldsPrepare, itemsFilter) {
-        // prepare loading areas and build url
-        area = this.prepareArea(area);
-        this.loadingAreas = area;
-        var url = this.loadBaseUrl + 'block/' + area + '?isAjax=true';
-
-        // prepare additional fields
-        fieldsPrepare = this.prepareParams(fieldsPrepare);
-        fieldsPrepare.reset_shipping = 1;
-        fieldsPrepare.json = 1;
-
-        // create fields
-        var fields = [];
-        for (var name in fieldsPrepare) {
-            fields.push(new Element('input', {type: 'hidden', name: name, value: fieldsPrepare[name]}));
-        }
-        productConfigure.addFields(fields);
+            fieldsPrepare = Object.extend(fieldsPrepare, this.productConfigureAddFields);
+            this.productConfigureSubmit('quote_items', area, fieldsPrepare);
+            this.orderItemChanged = false;
+        },
+
+        itemsOnchangeBind : function(){
+            var elems = $('order-items_grid').select('input', 'select', 'textarea');
+            for(var i=0; i<elems.length; i++){
+                if(!elems[i].bindOnchange){
+                    elems[i].bindOnchange = true;
+                    elems[i].observe('change', this.itemChange.bind(this))
+                }
+            }
+        },
+
+        itemChange : function(event){
+            this.giftmessageOnItemChange(event);
+            this.orderItemChanged = true;
+        },
+
+        /**
+         * Submit batch of configured products
+         *
+         * @param listType
+         * @param area
+         * @param fieldsPrepare
+         * @param itemsFilter
+         */
+        productConfigureSubmit : function(listType, area, fieldsPrepare, itemsFilter) {
+            // prepare loading areas and build url
+            area = this.prepareArea(area);
+            this.loadingAreas = area;
+            var url = this.loadBaseUrl + 'block/' + area + '?isAjax=true';
 
-        // filter items
-        if (itemsFilter) {
-            productConfigure.addItemsFilter(listType, itemsFilter);
-        }
+            // prepare additional fields
+            fieldsPrepare = this.prepareParams(fieldsPrepare);
+            fieldsPrepare.reset_shipping = 1;
+            fieldsPrepare.json = 1;
 
-        // prepare and do submit
-        productConfigure.addListType(listType, {urlSubmit: url});
-        productConfigure.setOnLoadIFrameCallback(listType, function(response){
-            this.loadAreaResponseHandler(response);
-        }.bind(this));
-        productConfigure.submit(listType);
-        // clean
-        this.productConfigureAddFields = {};
-    },
-
-    /**
-     * Show configuration of quote item
-     *
-     * @param itemId
-     */
-    showQuoteItemConfiguration: function(itemId){
-        var listType = 'quote_items';
-        var qtyElement = $('order-items_grid').select('input[name="item\['+itemId+'\]\[qty\]"]')[0];
-        productConfigure.setConfirmCallback(listType, function() {
-            // sync qty of popup and qty of grid
-            var confirmedCurrentQty = productConfigure.getCurrentConfirmedQtyElement();
-            if (qtyElement && confirmedCurrentQty && !isNaN(confirmedCurrentQty.value)) {
-                qtyElement.value = confirmedCurrentQty.value;
-            }
-            this.productConfigureAddFields['item['+itemId+'][configured]'] = 1;
-
-        }.bind(this));
-        productConfigure.setShowWindowCallback(listType, function() {
-            // sync qty of grid and qty of popup
-            var formCurrentQty = productConfigure.getCurrentFormQtyElement();
-            if (formCurrentQty && qtyElement && !isNaN(qtyElement.value)) {
-                formCurrentQty.value = qtyElement.value;
-            }
-        }.bind(this));
-        productConfigure.showItemConfiguration(listType, itemId);
-    },
-
-    accountFieldsBind : function(container){
-        if($(container)){
-            var fields = $(container).select('input', 'select', 'textarea');
-            for(var i=0; i<fields.length; i++){
-                if(fields[i].id == 'group_id'){
-                    fields[i].observe('change', this.accountGroupChange.bind(this))
+            // create fields
+            var fields = [];
+            for (var name in fieldsPrepare) {
+                fields.push(new Element('input', {type: 'hidden', name: name, value: fieldsPrepare[name]}));
+            }
+            productConfigure.addFields(fields);
+
+            // filter items
+            if (itemsFilter) {
+                productConfigure.addItemsFilter(listType, itemsFilter);
+            }
+
+            // prepare and do submit
+            productConfigure.addListType(listType, {urlSubmit: url});
+            productConfigure.setOnLoadIFrameCallback(listType, function(response){
+                this.loadAreaResponseHandler(response);
+            }.bind(this));
+            productConfigure.submit(listType);
+            // clean
+            this.productConfigureAddFields = {};
+        },
+
+        /**
+         * Show configuration of quote item
+         *
+         * @param itemId
+         */
+        showQuoteItemConfiguration: function(itemId){
+            var listType = 'quote_items';
+            var qtyElement = $('order-items_grid').select('input[name="item\['+itemId+'\]\[qty\]"]')[0];
+            productConfigure.setConfirmCallback(listType, function() {
+                // sync qty of popup and qty of grid
+                var confirmedCurrentQty = productConfigure.getCurrentConfirmedQtyElement();
+                if (qtyElement && confirmedCurrentQty && !isNaN(confirmedCurrentQty.value)) {
+                    qtyElement.value = confirmedCurrentQty.value;
                 }
-                else{
-                    fields[i].observe('change', this.accountFieldChange.bind(this))
+                this.productConfigureAddFields['item['+itemId+'][configured]'] = 1;
+
+            }.bind(this));
+            productConfigure.setShowWindowCallback(listType, function() {
+                // sync qty of grid and qty of popup
+                var formCurrentQty = productConfigure.getCurrentFormQtyElement();
+                if (formCurrentQty && qtyElement && !isNaN(qtyElement.value)) {
+                    formCurrentQty.value = qtyElement.value;
+                }
+            }.bind(this));
+            productConfigure.showItemConfiguration(listType, itemId);
+        },
+
+        accountFieldsBind : function(container){
+            if($(container)){
+                var fields = $(container).select('input', 'select', 'textarea');
+                for(var i=0; i<fields.length; i++){
+                    if(fields[i].id == 'group_id'){
+                        fields[i].observe('change', this.accountGroupChange.bind(this))
+                    }
+                    else{
+                        fields[i].observe('change', this.accountFieldChange.bind(this))
+                    }
                 }
             }
-        }
-    },
+        },
 
-    accountGroupChange : function(){
-        this.loadArea(['data'], true, this.serializeData('order-form_account').toObject());
-    },
+        accountGroupChange : function(){
+            this.loadArea(['data'], true, this.serializeData('order-form_account').toObject());
+        },
 
-    accountFieldChange : function(){
-        this.saveData(this.serializeData('order-form_account'));
-    },
+        accountFieldChange : function(){
+            this.saveData(this.serializeData('order-form_account'));
+        },
 
-    commentFieldsBind : function(container){
-        if($(container)){
-            var fields = $(container).select('input', 'textarea');
-            for(var i=0; i<fields.length; i++)
-                fields[i].observe('change', this.commentFieldChange.bind(this))
-        }
-    },
+        commentFieldsBind : function(container){
+            if($(container)){
+                var fields = $(container).select('input', 'textarea');
+                for(var i=0; i<fields.length; i++)
+                    fields[i].observe('change', this.commentFieldChange.bind(this))
+            }
+        },
 
-    commentFieldChange : function(){
-        this.saveData(this.serializeData('order-comment'));
-    },
+        commentFieldChange : function(){
+            this.saveData(this.serializeData('order-comment'));
+        },
 
-    giftmessageFieldsBind : function(container){
-        if($(container)){
-            var fields = $(container).select('input', 'textarea');
-            for(var i=0; i<fields.length; i++)
-                fields[i].observe('change', this.giftmessageFieldChange.bind(this))
-        }
-    },
-
-    giftmessageFieldChange : function(){
-        this.giftMessageDataChanged = true;
-    },
-
-    giftmessageOnItemChange : function(event) {
-        var element = Event.element(event);
-        if(element.name.indexOf("giftmessage") != -1 && element.type == "checkbox" && !element.checked) {
-            var messages = $("order-giftmessage").select('textarea');
-            var name;
-            for(var i=0; i<messages.length; i++) {
-                name = messages[i].id.split("_");
-                if(name.length < 2) continue;
-                if (element.name.indexOf("[" + name[1] + "]") != -1 && messages[i].value != "") {
-                    alert("First, clean the Message field in Gift Message form");
-                    element.checked = true;
+        giftmessageFieldsBind : function(container){
+            if($(container)){
+                var fields = $(container).select('input', 'textarea');
+                for(var i=0; i<fields.length; i++)
+                    fields[i].observe('change', this.giftmessageFieldChange.bind(this))
+            }
+        },
+
+        giftmessageFieldChange : function(){
+            this.giftMessageDataChanged = true;
+        },
+
+        giftmessageOnItemChange : function(event) {
+            var element = Event.element(event);
+            if(element.name.indexOf("giftmessage") != -1 && element.type == "checkbox" && !element.checked) {
+                var messages = $("order-giftmessage").select('textarea');
+                var name;
+                for(var i=0; i<messages.length; i++) {
+                    name = messages[i].id.split("_");
+                    if(name.length < 2) continue;
+                    if (element.name.indexOf("[" + name[1] + "]") != -1 && messages[i].value != "") {
+                        alert({
+                            content: "First, clean the Message field in Gift Message form"
+                        });
+                        element.checked = true;
+                    }
                 }
             }
-        }
-    },
+        },
+
+        loadArea : function(area, indicator, params){
+            var deferred = new jQuery.Deferred();
+            var url = this.loadBaseUrl;
+            if (area) {
+                area = this.prepareArea(area);
+                url += 'block/' + area;
+            }
+            if (indicator === true) indicator = 'html-body';
+            params = this.prepareParams(params);
+            params.json = true;
+            if (!this.loadingAreas) this.loadingAreas = [];
+            if (indicator) {
+                this.loadingAreas = area;
+                new Ajax.Request(url, {
+                    parameters:params,
+                    loaderArea: indicator,
+                    onSuccess: function(transport) {
+                        var response = transport.responseText.evalJSON();
+                        this.loadAreaResponseHandler(response);
+                        deferred.resolve();
+                    }.bind(this)
+                });
+            }
+            else {
+                new Ajax.Request(url, {
+                    parameters:params,
+                    loaderArea: indicator,
+                    onSuccess: function(transport) {
+                        deferred.resolve();
+                    }
+                });
+            }
+            if (typeof productConfigure != 'undefined' && area instanceof Array && area.indexOf('items') != -1) {
+                productConfigure.clean('quote_items');
+            }
+            return deferred.promise();
+        },
 
-    loadArea : function(area, indicator, params){
-        var deferred = new jQuery.Deferred();
-        var url = this.loadBaseUrl;
-        if (area) {
-            area = this.prepareArea(area);
-            url += 'block/' + area;
-        }
-        if (indicator === true) indicator = 'html-body';
-        params = this.prepareParams(params);
-        params.json = true;
-        if (!this.loadingAreas) this.loadingAreas = [];
-        if (indicator) {
-            this.loadingAreas = area;
-            new Ajax.Request(url, {
-                parameters:params,
-                loaderArea: indicator,
-                onSuccess: function(transport) {
-                    var response = transport.responseText.evalJSON();
-                    this.loadAreaResponseHandler(response);
-                    deferred.resolve();
-                }.bind(this)
-            });
-        }
-        else {
-            new Ajax.Request(url, {
-                parameters:params,
-                loaderArea: indicator,
-                onSuccess: function(transport) {
-                    deferred.resolve();
+        loadAreaResponseHandler : function (response) {
+            if (response.error) {
+                alert({
+                    content: response.message
+                });
+            }
+            if (response.ajaxExpired && response.ajaxRedirect) {
+                setLocation(response.ajaxRedirect);
+            }
+            if (!this.loadingAreas) {
+                this.loadingAreas = [];
+            }
+            if (typeof this.loadingAreas == 'string') {
+                this.loadingAreas = [this.loadingAreas];
+            }
+            if (this.loadingAreas.indexOf('message') == -1) {
+                this.loadingAreas.push('message');
+            }
+            if (response.header) {
+                jQuery('.page-actions-inner').attr('data-title', response.header);
+            }
+
+            for (var i = 0; i < this.loadingAreas.length; i++) {
+                var id = this.loadingAreas[i];
+                if ($(this.getAreaId(id))) {
+                    if ('message' != id || response[id]) {
+                        $(this.getAreaId(id)).update(response[id]);
+                    }
+                    if ($(this.getAreaId(id)).callback) {
+                        this[$(this.getAreaId(id)).callback]();
+                    }
                 }
-            });
-        }
-        if (typeof productConfigure != 'undefined' && area instanceof Array && area.indexOf('items') != -1) {
-            productConfigure.clean('quote_items');
-        }
-        return deferred.promise();
-    },
+            }
+        },
 
-    loadAreaResponseHandler : function (response) {
-        if (response.error) {
-            alert(response.message);
-        }
-        if (response.ajaxExpired && response.ajaxRedirect) {
-            setLocation(response.ajaxRedirect);
-        }
-        if (!this.loadingAreas) {
-            this.loadingAreas = [];
-        }
-        if (typeof this.loadingAreas == 'string') {
-            this.loadingAreas = [this.loadingAreas];
-        }
-        if (this.loadingAreas.indexOf('message') == -1) {
-            this.loadingAreas.push('message');
-        }
-        if (response.header) {
-            jQuery('.page-actions-inner').attr('data-title', response.header);
-        }
+        prepareArea : function(area) {
+            if (this.giftMessageDataChanged) {
+                return area.without('giftmessage');
+            }
+            return area;
+        },
+
+        saveData : function(data){
+            this.loadArea(false, false, data);
+        },
+
+        showArea : function(area){
+            var id = this.getAreaId(area);
+            if($(id)) {
+                $(id).show();
+                this.areaOverlay();
+            }
+        },
 
-        for (var i = 0; i < this.loadingAreas.length; i++) {
-            var id = this.loadingAreas[i];
-            if ($(this.getAreaId(id))) {
-                if ('message' != id || response[id]) {
-                    $(this.getAreaId(id)).update(response[id]);
-                }
-                if ($(this.getAreaId(id)).callback) {
-                    this[$(this.getAreaId(id)).callback]();
-                }
+        hideArea : function(area){
+            var id = this.getAreaId(area);
+            if($(id)) {
+                $(id).hide();
+                this.areaOverlay();
             }
-        }
-    },
+        },
 
-    prepareArea : function(area) {
-        if (this.giftMessageDataChanged) {
-            return area.without('giftmessage');
-        }
-        return area;
-    },
-
-    saveData : function(data){
-        this.loadArea(false, false, data);
-    },
-
-    showArea : function(area){
-        var id = this.getAreaId(area);
-        if($(id)) {
-            $(id).show();
-            this.areaOverlay();
-        }
-    },
+        areaOverlay : function()
+        {
+            $H(order.overlayData).each(function(e){
+                e.value.fx();
+            });
+        },
 
-    hideArea : function(area){
-        var id = this.getAreaId(area);
-        if($(id)) {
-            $(id).hide();
-            this.areaOverlay();
-        }
-    },
-
-    areaOverlay : function()
-    {
-        $H(order.overlayData).each(function(e){
-            e.value.fx();
-        });
-    },
-
-    getAreaId : function(area){
-        return 'order-'+area;
-    },
-
-    prepareParams : function(params){
-        if (!params) {
-            params = {};
-        }
-        if (!params.customer_id) {
-            params.customer_id = this.customerId;
-        }
-        if (!params.store_id) {
-            params.store_id = this.storeId;
-        }
-        if (!params.currency_id) {
-            params.currency_id = this.currencyId;
-        }
-        if (!params.form_key) {
-            params.form_key = FORM_KEY;
-        }
+        getAreaId : function(area){
+            return 'order-'+area;
+        },
 
-        if (this.isPaymentValidationAvailable()) {
-            var data = this.serializeData('order-billing_method');
-            if (data) {
-                data.each(function(value) {
-                    params[value[0]] = value[1];
-                });
+        prepareParams : function(params){
+            if (!params) {
+                params = {};
             }
-        } else {
-            params['payment[method]'] = this.paymentMethod;
-        }
-        return params;
-    },
-
-    /**
-     * Prevent from sending credit card information to server for some payment methods
-     *
-     * @returns {boolean}
-     */
-    isPaymentValidationAvailable : function(){
-        return ((typeof this.paymentMethod) == 'undefined'
+            if (!params.customer_id) {
+                params.customer_id = this.customerId;
+            }
+            if (!params.store_id) {
+                params.store_id = this.storeId;
+            }
+            if (!params.currency_id) {
+                params.currency_id = this.currencyId;
+            }
+            if (!params.form_key) {
+                params.form_key = FORM_KEY;
+            }
+
+            if (this.isPaymentValidationAvailable()) {
+                var data = this.serializeData('order-billing_method');
+                if (data) {
+                    data.each(function(value) {
+                        params[value[0]] = value[1];
+                    });
+                }
+            } else {
+                params['payment[method]'] = this.paymentMethod;
+            }
+            return params;
+        },
+
+        /**
+         * Prevent from sending credit card information to server for some payment methods
+         *
+         * @returns {boolean}
+         */
+        isPaymentValidationAvailable : function(){
+            return ((typeof this.paymentMethod) == 'undefined'
             || this.excludedPaymentMethods.indexOf(this.paymentMethod) == -1);
-    },
+        },
 
-    serializeData : function(container){
-        var fields = $(container).select('input', 'select', 'textarea');
-        var data = Form.serializeElements(fields, true);
+        serializeData : function(container){
+            var fields = $(container).select('input', 'select', 'textarea');
+            var data = Form.serializeElements(fields, true);
 
-        return $H(data);
-    },
+            return $H(data);
+        },
 
-    toggleCustomPrice: function(checkbox, elemId, tierBlock) {
-        if (checkbox.checked) {
-            $(elemId).disabled = false;
-            $(elemId).show();
-            if($(tierBlock)) $(tierBlock).hide();
-        }
-        else {
-            $(elemId).disabled = true;
-            $(elemId).hide();
-            if($(tierBlock)) $(tierBlock).show();
-        }
-    },
-
-    submit : function()
-    {
-        jQuery('#edit_form').trigger('processStart');
-        jQuery('#edit_form').trigger('submitOrder');
-    },
-
-    _realSubmit: function () {
-        var disableAndSave = function() {
-            disableElements('save');
-            jQuery('#edit_form').on('invalid-form.validate', function() {
-                enableElements('save');
-                jQuery('#edit_form').trigger('processStop');
-                jQuery('#edit_form').off('invalid-form.validate');
-            });
-            jQuery('#edit_form').triggerHandler('save');
-        }
-        if (this.orderItemChanged) {
-            if (confirm('You have item changes')) {
+        toggleCustomPrice: function(checkbox, elemId, tierBlock) {
+            if (checkbox.checked) {
+                $(elemId).disabled = false;
+                $(elemId).show();
+                if($(tierBlock)) $(tierBlock).hide();
+            }
+            else {
+                $(elemId).disabled = true;
+                $(elemId).hide();
+                if($(tierBlock)) $(tierBlock).show();
+            }
+        },
+
+        submit : function()
+        {
+            jQuery('#edit_form').trigger('processStart');
+            jQuery('#edit_form').trigger('submitOrder');
+        },
+
+        _realSubmit: function () {
+            var disableAndSave = function() {
+                disableElements('save');
+                jQuery('#edit_form').on('invalid-form.validate', function() {
+                    enableElements('save');
+                    jQuery('#edit_form').trigger('processStop');
+                    jQuery('#edit_form').off('invalid-form.validate');
+                });
+                jQuery('#edit_form').triggerHandler('save');
+            }
+            if (this.orderItemChanged) {
+                if (confirm('You have item changes')) {
+                    disableAndSave();
+                } else {
+                    this.itemsUpdate();
+                }
+            } else {
                 disableAndSave();
+            }
+        },
+
+        overlay : function(elId, show, observe) {
+            if (typeof(show) == 'undefined') { show = true; }
+
+            var orderObj = this;
+            var obj = this.overlayData.get(elId);
+            if (!obj) {
+                obj = {
+                    show: show,
+                    el: elId,
+                    order: orderObj,
+                    fx: function(event) {
+                        this.order.processOverlay(this.el, this.show);
+                    }
+                };
+                obj.bfx = obj.fx.bindAsEventListener(obj);
+                this.overlayData.set(elId, obj);
             } else {
-                this.itemsUpdate();
+                obj.show = show;
+                Event.stopObserving(window, 'resize', obj.bfx);
             }
-        } else {
-            disableAndSave();
-        }
-    },
-
-    overlay : function(elId, show, observe) {
-        if (typeof(show) == 'undefined') { show = true; }
-
-        var orderObj = this;
-        var obj = this.overlayData.get(elId);
-        if (!obj) {
-            obj = {
-                show: show,
-                el: elId,
-                order: orderObj,
-                fx: function(event) {
-                    this.order.processOverlay(this.el, this.show);
-                }
-            };
-            obj.bfx = obj.fx.bindAsEventListener(obj);
-            this.overlayData.set(elId, obj);
-        } else {
-            obj.show = show;
-            Event.stopObserving(window, 'resize', obj.bfx);
-        }
 
-        Event.observe(window, 'resize', obj.bfx);
+            Event.observe(window, 'resize', obj.bfx);
 
-        this.processOverlay(elId, show);
-    },
+            this.processOverlay(elId, show);
+        },
 
-    processOverlay : function(elId, show) {
-        var el = $(elId);
+        processOverlay : function(elId, show) {
+            var el = $(elId);
 
-        if (!el) {
-            return;
-        }
+            if (!el) {
+                return;
+            }
 
-        var parentEl = el.up(1);
-        if (show) {
-            parentEl.removeClassName('ignore-validate');
-        } else {
-            parentEl.addClassName('ignore-validate');
-        }
+            var parentEl = el.up(1);
+            if (show) {
+                parentEl.removeClassName('ignore-validate');
+            } else {
+                parentEl.addClassName('ignore-validate');
+            }
 
-        if (Prototype.Browser.IE) {
-            parentEl.select('select').each(function (elem) {
-                if (show) {
-                    elem.needShowOnSuccess = false;
-                    elem.style.visibility = '';
-                } else {
-                    elem.style.visibility = 'hidden';
-                    elem.needShowOnSuccess = true;
-                }
+            if (Prototype.Browser.IE) {
+                parentEl.select('select').each(function (elem) {
+                    if (show) {
+                        elem.needShowOnSuccess = false;
+                        elem.style.visibility = '';
+                    } else {
+                        elem.style.visibility = 'hidden';
+                        elem.needShowOnSuccess = true;
+                    }
+                });
+            }
+
+            parentEl.setStyle({position: 'relative'});
+            el.setStyle({
+                display: show ? 'none' : ''
             });
-        }
+        },
 
-        parentEl.setStyle({position: 'relative'});
-        el.setStyle({
-            display: show ? 'none' : ''
-        });
-    },
-
-    validateVat: function(parameters)
-    {
-        var params = {
-            country: $(parameters.countryElementId).value,
-            vat: $(parameters.vatElementId).value
-        };
-
-        if (this.storeId !== false) {
-            params.store_id = this.storeId;
-        }
+        validateVat: function(parameters)
+        {
+            var params = {
+                country: $(parameters.countryElementId).value,
+                vat: $(parameters.vatElementId).value
+            };
 
-        var currentCustomerGroupId = $(parameters.groupIdHtmlId).value;
-
-        new Ajax.Request(parameters.validateUrl, {
-            parameters: params,
-            onSuccess: function(response) {
-                var message = '';
-                var groupActionRequired = null;
-                try {
-                    response = response.responseText.evalJSON();
-
-                    if (null === response.group) {
-                        if (true === response.valid) {
-                            message = parameters.vatValidMessage;
-                        } else if (true === response.success) {
-                            message = parameters.vatInvalidMessage.replace(/%s/, params.vat);
+            if (this.storeId !== false) {
+                params.store_id = this.storeId;
+            }
+
+            var currentCustomerGroupId = $(parameters.groupIdHtmlId).value;
+
+            new Ajax.Request(parameters.validateUrl, {
+                parameters: params,
+                onSuccess: function(response) {
+                    var message = '';
+                    var groupActionRequired = null;
+                    try {
+                        response = response.responseText.evalJSON();
+
+                        if (null === response.group) {
+                            if (true === response.valid) {
+                                message = parameters.vatValidMessage;
+                            } else if (true === response.success) {
+                                message = parameters.vatInvalidMessage.replace(/%s/, params.vat);
+                            } else {
+                                message = parameters.vatValidationFailedMessage;
+                            }
                         } else {
-                            message = parameters.vatValidationFailedMessage;
-                        }
-                    } else {
-                        if (true === response.valid) {
-                            message = parameters.vatValidAndGroupValidMessage;
-                            if (0 === response.group) {
-                                message = parameters.vatValidAndGroupInvalidMessage;
+                            if (true === response.valid) {
+                                message = parameters.vatValidAndGroupValidMessage;
+                                if (0 === response.group) {
+                                    message = parameters.vatValidAndGroupInvalidMessage;
+                                    groupActionRequired = 'inform';
+                                } else if (currentCustomerGroupId != response.group) {
+                                    message = parameters.vatValidAndGroupChangeMessage;
+                                    groupActionRequired = 'change';
+                                }
+                            } else if (response.success) {
+                                message = parameters.vatInvalidMessage.replace(/%s/, params.vat);
+                                groupActionRequired = 'inform';
+                            } else {
+                                message = parameters.vatValidationFailedMessage;
                                 groupActionRequired = 'inform';
-                            } else if (currentCustomerGroupId != response.group) {
-                                message = parameters.vatValidAndGroupChangeMessage;
-                                groupActionRequired = 'change';
                             }
-                        } else if (response.success) {
-                            message = parameters.vatInvalidMessage.replace(/%s/, params.vat);
-                            groupActionRequired = 'inform';
-                        } else {
-                            message = parameters.vatValidationFailedMessage;
-                            groupActionRequired = 'inform';
                         }
+                    } catch (e) {
+                        message = parameters.vatValidationFailedMessage;
                     }
-                } catch (e) {
-                    message = parameters.vatValidationFailedMessage;
-                }
-                if (null === groupActionRequired) {
-                    alert(message);
-                }
-                else {
-                    this.processCustomerGroupChange(
-                        parameters.groupIdHtmlId,
-                        message,
-                        parameters.vatCustomerGroupMessage,
-                        parameters.vatGroupErrorMessage,
-                        response.group,
-                        groupActionRequired
-                    );
+                    if (null === groupActionRequired) {
+                        alert({
+                            content: message
+                        });
+                    }
+                    else {
+                        this.processCustomerGroupChange(
+                            parameters.groupIdHtmlId,
+                            message,
+                            parameters.vatCustomerGroupMessage,
+                            parameters.vatGroupErrorMessage,
+                            response.group,
+                            groupActionRequired
+                        );
+                    }
+                }.bind(this)
+            });
+        },
+
+        processCustomerGroupChange: function(groupIdHtmlId, message, customerGroupMessage, errorMessage, groupId, action)
+        {
+            var groupMessage = '';
+            try {
+                var currentCustomerGroupId = $(groupIdHtmlId).value;
+                var currentCustomerGroupTitle =
+                    $$('#' + groupIdHtmlId + ' > option[value=' + currentCustomerGroupId + ']')[0].text;
+                var customerGroupOption = $$('#' + groupIdHtmlId + ' > option[value=' + groupId + ']')[0];
+                groupMessage = customerGroupMessage.replace(/%s/, customerGroupOption.text);
+            } catch (e) {
+                groupMessage = errorMessage;
+                if (action === 'change') {
+                    message = '';
+                    action = 'inform';
                 }
-            }.bind(this)
-        });
-    },
-
-    processCustomerGroupChange: function(groupIdHtmlId, message, customerGroupMessage, errorMessage, groupId, action)
-    {
-        var groupMessage = '';
-        try {
-            var currentCustomerGroupId = $(groupIdHtmlId).value;
-            var currentCustomerGroupTitle =
-                $$('#' + groupIdHtmlId + ' > option[value=' + currentCustomerGroupId + ']')[0].text;
-            var customerGroupOption = $$('#' + groupIdHtmlId + ' > option[value=' + groupId + ']')[0];
-            groupMessage = customerGroupMessage.replace(/%s/, customerGroupOption.text);
-        } catch (e) {
-            groupMessage = errorMessage;
-            if (action === 'change') {
-                message = '';
-                action = 'inform';
             }
-        }
 
-        if (action === 'change') {
-            var confirmText = message.replace(/%s/, customerGroupOption.text);
-            confirmText = confirmText.replace(/%s/, currentCustomerGroupTitle);
-            if (confirm(confirmText)) {
-                $$('#' + groupIdHtmlId + ' option').each(function (o) {
-                    o.selected = o.readAttribute('value') == groupId;
+            if (action === 'change') {
+                var confirmText = message.replace(/%s/, customerGroupOption.text);
+                confirmText = confirmText.replace(/%s/, currentCustomerGroupTitle);
+                if (confirm(confirmText)) {
+                    $$('#' + groupIdHtmlId + ' option').each(function (o) {
+                        o.selected = o.readAttribute('value') == groupId;
+                    });
+                    this.accountGroupChange();
+                }
+            } else if (action === 'inform') {
+                alert({
+                    content: message + '\n' + groupMessage
                 });
-                this.accountGroupChange();
             }
-        } else if (action === 'inform') {
-            alert(message + '\n' + groupMessage);
         }
-    }
-};
-
-window.OrderFormArea = Class.create();
-OrderFormArea.prototype = {
-    _name: null,
-    _node: null,
-    _parent: null,
-    _callbackName: null,
-
-    initialize: function(name, node, parent){
-        if(!node)
-            return;
-        this._name = name;
-        this._parent = parent;
-        this._callbackName = node.callback;
-        if (typeof this._callbackName == 'undefined') {
-            this._callbackName = name + 'Loaded';
-            node.callback = this._callbackName;
+    };
+
+    window.OrderFormArea = Class.create();
+    OrderFormArea.prototype = {
+        _name: null,
+        _node: null,
+        _parent: null,
+        _callbackName: null,
+
+        initialize: function(name, node, parent){
+            if(!node)
+                return;
+            this._name = name;
+            this._parent = parent;
+            this._callbackName = node.callback;
+            if (typeof this._callbackName == 'undefined') {
+                this._callbackName = name + 'Loaded';
+                node.callback = this._callbackName;
+            }
+            parent[this._callbackName] = parent[this._callbackName].wrap((function (proceed){
+                proceed();
+                this.onLoad();
+            }).bind(this));
+
+            this.setNode(node);
+        },
+
+        setNode: function(node){
+            if (!node.callback) {
+                node.callback = this._callbackName;
+            }
+            this.node = node;
+        },
+
+        onLoad: function(){
         }
-        parent[this._callbackName] = parent[this._callbackName].wrap((function (proceed){
-            proceed();
-            this.onLoad();
-        }).bind(this));
+    };
+
+    window.ControlButton = Class.create();
+
+    ControlButton.prototype = {
+        _label: '',
+        _node: null,
+
+        initialize: function(label){
+            this._label = label;
+            this._node = new Element('button', {
+                'class': 'action-secondary action-add',
+                'type':  'button'
+            });
+        },
 
-        this.setNode(node);
-    },
+        onClick: function(){
+        },
 
-    setNode: function(node){
-        if (!node.callback) {
-            node.callback = this._callbackName;
+        insertIn: function(element, position){
+            var node = Object.extend(this._node),
+                content = {};
+            node.observe('click', this.onClick);
+            node.update('<span>' + this._label + '</span>');
+            content[position] = node;
+            Element.insert(element, content);
         }
-        this.node = node;
-    },
-
-    onLoad: function(){
-    }
-};
-
-window.ControlButton = Class.create();
-
-ControlButton.prototype = {
-    _label: '',
-    _node: null,
-
-    initialize: function(label){
-        this._label = label;
-        this._node = new Element('button', {
-            'class': 'action-secondary action-add',
-            'type':  'button'
-        });
-    },
-
-    onClick: function(){
-    },
-
-    insertIn: function(element, position){
-        var node = Object.extend(this._node),
-            content = {};
-        node.observe('click', this.onClick);
-        node.update('<span>' + this._label + '</span>');
-        content[position] = node;
-        Element.insert(element, content);
-    }
-};
+    };
 
 });
diff --git a/app/code/Magento/Sales/view/adminhtml/web/order/view/post-wrapper.js b/app/code/Magento/Sales/view/adminhtml/web/order/view/post-wrapper.js
new file mode 100644
index 0000000000000000000000000000000000000000..2ae6b67096271374f01dc91bce0e0888cf4a20d0
--- /dev/null
+++ b/app/code/Magento/Sales/view/adminhtml/web/order/view/post-wrapper.js
@@ -0,0 +1,59 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'jquery',
+    'Magento_Ui/js/modal/confirm',
+    'mage/translate'
+], function ($, confirm) {
+    'use strict';
+
+    /**
+     * @param {String} url
+     * @returns {Object}
+     */
+    function getForm(url) {
+        return $('<form>', {
+            'action': url,
+            'method': 'POST'
+        }).append($('<input>', {
+            'name': 'form_key',
+            'value': window.FORM_KEY,
+            'type': 'hidden'
+        }));
+    }
+
+    $('#order-view-cancel-button').click(function () {
+        var msg = $.mage.__('Are you sure you want to cancel this order?'),
+            url = $('#order-view-cancel-button').data('url');
+
+        confirm({
+            'content': msg,
+            'actions': {
+
+                /**
+                 * 'Confirm' action handler.
+                 */
+                confirm: function () {
+                    getForm(url).appendTo('body').submit();
+                }
+            }
+        });
+
+        return false;
+    });
+
+    $('#order-view-hold-button').click(function () {
+        var url = $('#order-view-hold-button').data('url');
+
+        getForm(url).appendTo('body').submit();
+    });
+
+    $('#order-view-unhold-button').click(function () {
+        var url = $('#order-view-unhold-button').data('url');
+
+        getForm(url).appendTo('body').submit();
+    });
+});
diff --git a/app/code/Magento/SalesRule/Block/Adminhtml/Promo/Quote/Edit/Tab/Coupons/Grid.php b/app/code/Magento/SalesRule/Block/Adminhtml/Promo/Quote/Edit/Tab/Coupons/Grid.php
index 8e726aef97be44ed6334bab0d5fa8376f9276f9b..c55468d6d73ed9b13ce6bad5a869f92a12824c08 100644
--- a/app/code/Magento/SalesRule/Block/Adminhtml/Promo/Quote/Edit/Tab/Coupons/Grid.php
+++ b/app/code/Magento/SalesRule/Block/Adminhtml/Promo/Quote/Edit/Tab/Coupons/Grid.php
@@ -23,21 +23,21 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_coreRegistry = null;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Coupon\CollectionFactory
+     * @var \Magento\SalesRule\Model\ResourceModel\Coupon\CollectionFactory
      */
     protected $_salesRuleCoupon;
 
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
-     * @param \Magento\SalesRule\Model\Resource\Coupon\CollectionFactory $salesRuleCoupon
+     * @param \Magento\SalesRule\Model\ResourceModel\Coupon\CollectionFactory $salesRuleCoupon
      * @param \Magento\Framework\Registry $coreRegistry
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
-        \Magento\SalesRule\Model\Resource\Coupon\CollectionFactory $salesRuleCoupon,
+        \Magento\SalesRule\Model\ResourceModel\Coupon\CollectionFactory $salesRuleCoupon,
         \Magento\Framework\Registry $coreRegistry,
         array $data = []
     ) {
@@ -68,7 +68,7 @@ class Grid extends \Magento\Backend\Block\Widget\Grid\Extended
         $priceRule = $this->_coreRegistry->registry('current_promo_quote_rule');
 
         /**
-         * @var \Magento\SalesRule\Model\Resource\Coupon\Collection $collection
+         * @var \Magento\SalesRule\Model\ResourceModel\Coupon\Collection $collection
          */
         $collection = $this->_salesRuleCoupon->create()->addRuleToFilter($priceRule)->addGeneratedCouponsFilter();
 
diff --git a/app/code/Magento/SalesRule/Block/Adminhtml/Promo/Quote/Edit/Tab/Main.php b/app/code/Magento/SalesRule/Block/Adminhtml/Promo/Quote/Edit/Tab/Main.php
index 319b5ef3ae68eb45fad1bdf29e6f53a64c96855c..6be438a2fd3c1fa48ac2947d9c536bfe654b49ae 100644
--- a/app/code/Magento/SalesRule/Block/Adminhtml/Promo/Quote/Edit/Tab/Main.php
+++ b/app/code/Magento/SalesRule/Block/Adminhtml/Promo/Quote/Edit/Tab/Main.php
@@ -318,7 +318,7 @@ class Main extends Generic implements TabInterface
         $this->setChild(
             'form_after',
             $this->getLayout()->createBlock(
-                'Magento\Backend\Block\Widget\Form\Element\Dependence'
+                'Magento\SalesRule\Block\Widget\Form\Element\Dependence'
             )->addFieldMap(
                 $couponTypeFiled->getHtmlId(),
                 $couponTypeFiled->getName()
diff --git a/app/code/Magento/SalesRule/Block/Widget/Form/Element/Dependence.php b/app/code/Magento/SalesRule/Block/Widget/Form/Element/Dependence.php
new file mode 100644
index 0000000000000000000000000000000000000000..e95b3ed22887adbc6501a717c286958e10769a9c
--- /dev/null
+++ b/app/code/Magento/SalesRule/Block/Widget/Form/Element/Dependence.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\SalesRule\Block\Widget\Form\Element;
+
+/**
+ * Form element dependencies mapper
+ * Assumes that one element may depend on other element values.
+ * Will toggle as "enabled" only if all elements it depends from toggle as true.
+ */
+class Dependence extends \Magento\Backend\Block\Widget\Form\Element\Dependence
+{
+    /**
+     * @param \Magento\Backend\Block\Context $context
+     * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
+     * @param \Magento\Config\Model\Config\Structure\Element\Dependency\FieldFactory $fieldFactory
+     * @param array $data
+     */
+    public function __construct(
+        \Magento\Backend\Block\Context $context,
+        \Magento\Framework\Json\EncoderInterface $jsonEncoder,
+        \Magento\Config\Model\Config\Structure\Element\Dependency\FieldFactory $fieldFactory,
+        array $data = []
+    ) {
+        parent::__construct($context, $jsonEncoder, $fieldFactory, $data);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function _toHtml()
+    {
+        if (!$this->_depends) {
+            return '';
+        }
+
+        return '<script>
+            require(["uiRegistry", "mage/adminhtml/form"], function(registry) {
+        var controller = new FormElementDependenceController(' .
+            $this->_getDependsJson() .
+            ($this->_configOptions ? ', ' .
+            $this->_jsonEncoder->encode(
+                $this->_configOptions
+            ) : '') . ');
+            registry.set("formDependenceController", controller);
+            });</script>';
+    }
+}
diff --git a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/CouponsMassDelete.php b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/CouponsMassDelete.php
index 8208b96f4c9a080d93520ddaff46afec32599267..623dedb6ae1b083261baf4195a6fdb160d011c2b 100644
--- a/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/CouponsMassDelete.php
+++ b/app/code/Magento/SalesRule/Controller/Adminhtml/Promo/Quote/CouponsMassDelete.php
@@ -26,7 +26,7 @@ class CouponsMassDelete extends \Magento\SalesRule\Controller\Adminhtml\Promo\Qu
 
         if (is_array($codesIds)) {
             $couponsCollection = $this->_objectManager->create(
-                'Magento\SalesRule\Model\Resource\Coupon\Collection'
+                'Magento\SalesRule\Model\ResourceModel\Coupon\Collection'
             )->addFieldToFilter(
                 'coupon_id',
                 ['in' => $codesIds]
diff --git a/app/code/Magento/SalesRule/Cron/AggregateSalesReportCouponsData.php b/app/code/Magento/SalesRule/Cron/AggregateSalesReportCouponsData.php
index f738e264f55b62c2ea50c44f0a455980c39b3349..8c816b2c3de0a179319d0263901262b2be9b6685 100644
--- a/app/code/Magento/SalesRule/Cron/AggregateSalesReportCouponsData.php
+++ b/app/code/Magento/SalesRule/Cron/AggregateSalesReportCouponsData.php
@@ -8,7 +8,7 @@ namespace Magento\SalesRule\Cron;
 class AggregateSalesReportCouponsData
 {
     /**
-     * @var \Magento\SalesRule\Model\Resource\Report\Rule
+     * @var \Magento\SalesRule\Model\ResourceModel\Report\Rule
      */
     protected $_reportRule;
 
@@ -23,12 +23,12 @@ class AggregateSalesReportCouponsData
     protected $_localeDate;
 
     /**
-     * @param \Magento\SalesRule\Model\Resource\Report\Rule $reportRule
+     * @param \Magento\SalesRule\Model\ResourceModel\Report\Rule $reportRule
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      */
     public function __construct(
-        \Magento\SalesRule\Model\Resource\Report\Rule $reportRule,
+        \Magento\SalesRule\Model\ResourceModel\Report\Rule $reportRule,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
     ) {
diff --git a/app/code/Magento/SalesRule/Model/Coupon.php b/app/code/Magento/SalesRule/Model/Coupon.php
index a58143f4e93c6af0783b4244da433db2ea099a5b..7a7f6d30e567ac2d4f0c53108bb33147d8ed7d37 100644
--- a/app/code/Magento/SalesRule/Model/Coupon.php
+++ b/app/code/Magento/SalesRule/Model/Coupon.php
@@ -8,8 +8,8 @@ namespace Magento\SalesRule\Model;
 /**
  * SalesRule Coupon Model
  *
- * @method \Magento\SalesRule\Model\Resource\Coupon _getResource()
- * @method \Magento\SalesRule\Model\Resource\Coupon getResource()
+ * @method \Magento\SalesRule\Model\ResourceModel\Coupon _getResource()
+ * @method \Magento\SalesRule\Model\ResourceModel\Coupon getResource()
  */
 class Coupon extends \Magento\Framework\Model\AbstractExtensibleModel implements
     \Magento\SalesRule\Api\Data\CouponInterface
@@ -33,7 +33,7 @@ class Coupon extends \Magento\Framework\Model\AbstractExtensibleModel implements
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\SalesRule\Model\Resource\Coupon');
+        $this->_init('Magento\SalesRule\Model\ResourceModel\Coupon');
     }
 
     /**
diff --git a/app/code/Magento/SalesRule/Model/Coupon/Massgenerator.php b/app/code/Magento/SalesRule/Model/Coupon/Massgenerator.php
index 5874b0f08d41b6e4f54bb017f0d5514c2e059e43..00cf6dcb73396c603a6c1907b8e0ab8d34cb9593 100644
--- a/app/code/Magento/SalesRule/Model/Coupon/Massgenerator.php
+++ b/app/code/Magento/SalesRule/Model/Coupon/Massgenerator.php
@@ -8,7 +8,7 @@ namespace Magento\SalesRule\Model\Coupon;
 /**
  * SalesRule Mass Coupon Generator
  *
- * @method \Magento\SalesRule\Model\Resource\Coupon getResource()
+ * @method \Magento\SalesRule\Model\ResourceModel\Coupon getResource()
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
@@ -65,7 +65,7 @@ class Massgenerator extends \Magento\Framework\Model\AbstractModel implements
      * @param \Magento\SalesRule\Model\CouponFactory $couponFactory
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -76,7 +76,7 @@ class Massgenerator extends \Magento\Framework\Model\AbstractModel implements
         \Magento\SalesRule\Model\CouponFactory $couponFactory,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Framework\Stdlib\DateTime $dateTime,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -94,7 +94,7 @@ class Massgenerator extends \Magento\Framework\Model\AbstractModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\SalesRule\Model\Resource\Coupon');
+        $this->_init('Magento\SalesRule\Model\ResourceModel\Coupon');
     }
 
     /**
diff --git a/app/code/Magento/SalesRule/Model/CouponRepository.php b/app/code/Magento/SalesRule/Model/CouponRepository.php
index e39c835f9249727ef7cc95852f184866b29bc09c..730ea9680e44cde98d6019030e39f9b631659042 100644
--- a/app/code/Magento/SalesRule/Model/CouponRepository.php
+++ b/app/code/Magento/SalesRule/Model/CouponRepository.php
@@ -8,7 +8,7 @@ namespace Magento\SalesRule\Model;
 
 use Magento\Framework\Api\Search\FilterGroup;
 use Magento\Framework\Api\SortOrder;
-use Magento\SalesRule\Model\Resource\Coupon\Collection;
+use Magento\SalesRule\Model\ResourceModel\Coupon\Collection;
 
 /**
  * Coupon CRUD class
@@ -33,7 +33,7 @@ class CouponRepository implements \Magento\SalesRule\Api\CouponRepositoryInterfa
     protected $searchResultFactory;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Coupon\CollectionFactory
+     * @var \Magento\SalesRule\Model\ResourceModel\Coupon\CollectionFactory
      */
     protected $collectionFactory;
 
@@ -51,7 +51,7 @@ class CouponRepository implements \Magento\SalesRule\Api\CouponRepositoryInterfa
      * @param CouponFactory $couponFactory
      * @param RuleFactory $ruleFactory
      * @param \Magento\SalesRule\Api\Data\CouponSearchResultInterfaceFactory $searchResultFactory
-     * @param Resource\Coupon\CollectionFactory $collectionFactory
+     * @param \Magento\SalesRule\Model\ResourceModel\Coupon\CollectionFactory $collectionFactory
      * @param Spi\CouponResourceInterface $resourceModel
      * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor
      */
@@ -59,7 +59,7 @@ class CouponRepository implements \Magento\SalesRule\Api\CouponRepositoryInterfa
         \Magento\SalesRule\Model\CouponFactory $couponFactory,
         \Magento\SalesRule\Model\RuleFactory $ruleFactory,
         \Magento\SalesRule\Api\Data\CouponSearchResultInterfaceFactory $searchResultFactory,
-        \Magento\SalesRule\Model\Resource\Coupon\CollectionFactory $collectionFactory,
+        \Magento\SalesRule\Model\ResourceModel\Coupon\CollectionFactory $collectionFactory,
         \Magento\SalesRule\Model\Spi\CouponResourceInterface $resourceModel,
         \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor
     ) {
@@ -149,7 +149,7 @@ class CouponRepository implements \Magento\SalesRule\Api\CouponRepositoryInterfa
      */
     public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria)
     {
-        /** @var \Magento\SalesRule\Model\Resource\Coupon\Collection $collection */
+        /** @var \Magento\SalesRule\Model\ResourceModel\Coupon\Collection $collection */
         $collection = $this->collectionFactory->create();
         $couponInterfaceName = 'Magento\SalesRule\Api\Data\CouponInterface';
         $this->extensionAttributesJoinProcessor->process($collection, $couponInterfaceName);
diff --git a/app/code/Magento/SalesRule/Model/Plugin/QuoteConfigProductAttributes.php b/app/code/Magento/SalesRule/Model/Plugin/QuoteConfigProductAttributes.php
index 52fb187cefa3087e43ae7dfe5367fe7b50c70734..3de728f8efb1ae024403318f77ab73481aa6001e 100644
--- a/app/code/Magento/SalesRule/Model/Plugin/QuoteConfigProductAttributes.php
+++ b/app/code/Magento/SalesRule/Model/Plugin/QuoteConfigProductAttributes.php
@@ -7,7 +7,7 @@ namespace Magento\SalesRule\Model\Plugin;
 
 use Magento\Store\Model\StoreManagerInterface;
 use Magento\Customer\Model\Session;
-use Magento\SalesRule\Model\Resource\Rule as RuleResource;
+use Magento\SalesRule\Model\ResourceModel\Rule as RuleResource;
 
 class QuoteConfigProductAttributes
 {
diff --git a/app/code/Magento/SalesRule/Model/Plugin/Resource/Rule.php b/app/code/Magento/SalesRule/Model/Plugin/ResourceModel/Rule.php
similarity index 73%
rename from app/code/Magento/SalesRule/Model/Plugin/Resource/Rule.php
rename to app/code/Magento/SalesRule/Model/Plugin/ResourceModel/Rule.php
index 8cf4dc3e13c5fcc07dee407eac012af632e56447..382615a98a6418f6030e75805b5d4c9bb7e04948 100644
--- a/app/code/Magento/SalesRule/Model/Plugin/Resource/Rule.php
+++ b/app/code/Magento/SalesRule/Model/Plugin/ResourceModel/Rule.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Plugin\Resource;
+namespace Magento\SalesRule\Model\Plugin\ResourceModel;
 
 class Rule
 {
     /**
-     * @param \Magento\SalesRule\Model\Resource\Rule $subject
+     * @param \Magento\SalesRule\Model\ResourceModel\Rule $subject
      * @param \Closure $proceed
      * @param \Magento\Framework\Model\AbstractModel $object
      * @return \Magento\Framework\Model\AbstractModel
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundLoadCustomerGroupIds(
-        \Magento\SalesRule\Model\Resource\Rule $subject,
+        \Magento\SalesRule\Model\ResourceModel\Rule $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $object
     ) {
@@ -23,14 +23,14 @@ class Rule
     }
 
     /**
-     * @param \Magento\SalesRule\Model\Resource\Rule $subject
+     * @param \Magento\SalesRule\Model\ResourceModel\Rule $subject
      * @param \Closure $proceed
      * @param \Magento\Framework\Model\AbstractModel $object
      * @return \Magento\Framework\Model\AbstractModel
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function aroundLoadWebsiteIds(
-        \Magento\SalesRule\Model\Resource\Rule $subject,
+        \Magento\SalesRule\Model\ResourceModel\Rule $subject,
         \Closure $proceed,
         \Magento\Framework\Model\AbstractModel $object
     ) {
diff --git a/app/code/Magento/SalesRule/Model/Resource/Coupon.php b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon.php
similarity index 96%
rename from app/code/Magento/SalesRule/Model/Resource/Coupon.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Coupon.php
index d9fa4205f1b630847c4e7faa6475ec076550045f..c415cb5dec572ce41dd4f868ffd3a43b16326c51 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Coupon.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource;
+namespace Magento\SalesRule\Model\ResourceModel;
 
 use Magento\Framework\Model\AbstractModel;
 
@@ -12,7 +12,7 @@ use Magento\Framework\Model\AbstractModel;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Coupon extends \Magento\Framework\Model\Resource\Db\AbstractDb implements
+class Coupon extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements
     \Magento\SalesRule\Model\Spi\CouponResourceInterface
 {
     /**
diff --git a/app/code/Magento/SalesRule/Model/Resource/Coupon/Collection.php b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Collection.php
similarity index 92%
rename from app/code/Magento/SalesRule/Model/Resource/Coupon/Collection.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Collection.php
index 4959146f989a0ee65d70af478910c51114e08b04..19a56cc3e57ee19e9e2102c3e608859c97d39f32 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Coupon/Collection.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Collection.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource\Coupon;
+namespace Magento\SalesRule\Model\ResourceModel\Coupon;
 
 use Magento\Backend\Block\Widget\Grid\Column;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\SalesRule\Model\Rule;
 
 /**
@@ -24,7 +24,7 @@ class Collection extends AbstractCollection
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\SalesRule\Model\Coupon', 'Magento\SalesRule\Model\Resource\Coupon');
+        $this->_init('Magento\SalesRule\Model\Coupon', 'Magento\SalesRule\Model\ResourceModel\Coupon');
     }
 
     /**
diff --git a/app/code/Magento/SalesRule/Model/Resource/Coupon/Usage.php b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Usage.php
similarity index 95%
rename from app/code/Magento/SalesRule/Model/Resource/Coupon/Usage.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Usage.php
index 9adc42fdf051e6dbb50f6defbde6a25bb6fb669a..1770de0f50761d00ca1d15917411c7ed0fb1790b 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Coupon/Usage.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Coupon/Usage.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource\Coupon;
+namespace Magento\SalesRule\Model\ResourceModel\Coupon;
 
 /**
  * SalesRule Model Resource Coupon_Usage
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Usage extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Usage extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Constructor
diff --git a/app/code/Magento/SalesRule/Model/Resource/Report/Collection.php b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Collection.php
similarity index 89%
rename from app/code/Magento/SalesRule/Model/Resource/Report/Collection.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Report/Collection.php
index 68de297555b8a0016fd631d8c5ecf20ceab15757..98417ab4a897cd9444f2d554a8fd26f638eef745 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Report/Collection.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource\Report;
+namespace Magento\SalesRule\Model\ResourceModel\Report;
 
 /**
  * Sales report coupons collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Sales\Model\Resource\Report\Collection\AbstractCollection
+class Collection extends \Magento\Sales\Model\ResourceModel\Report\Collection\AbstractCollection
 {
     /**
      * Period format for report (day, month, year)
@@ -41,7 +41,7 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac
     protected $_rulesIdsFilter;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Report\RuleFactory $ruleFactory
+     * @var \Magento\SalesRule\Model\ResourceModel\Report\RuleFactory $ruleFactory
      */
     protected $_ruleFactory;
 
@@ -50,8 +50,8 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\SalesRule\Model\Resource\Report\RuleFactory $ruleFactory
-     * @param \Magento\Sales\Model\Resource\Report $resource
+     * @param \Magento\SalesRule\Model\ResourceModel\Report\RuleFactory $ruleFactory
+     * @param \Magento\Sales\Model\ResourceModel\Report $resource
      * @param mixed $connection
      */
     public function __construct(
@@ -59,8 +59,8 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Sales\Model\Resource\Report $resource,
-        \Magento\SalesRule\Model\Resource\Report\RuleFactory $ruleFactory,
+        \Magento\Sales\Model\ResourceModel\Report $resource,
+        \Magento\SalesRule\Model\ResourceModel\Report\RuleFactory $ruleFactory,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $this->_ruleFactory = $ruleFactory;
@@ -178,7 +178,7 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac
     /**
      * Apply collection custom filter
      *
-     * @return \Magento\Sales\Model\Resource\Report\Collection\AbstractCollection
+     * @return \Magento\Sales\Model\ResourceModel\Report\Collection\AbstractCollection
      */
     protected function _applyCustomFilter()
     {
diff --git a/app/code/Magento/SalesRule/Model/Resource/Report/Rule.php b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule.php
similarity index 77%
rename from app/code/Magento/SalesRule/Model/Resource/Report/Rule.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule.php
index 5f6bd0e0db288f7df348e9751cd0c2b592414844..0cb09c6767363beceb4edeaf6f1b47294c4f945c 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Report/Rule.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule.php
@@ -3,45 +3,45 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource\Report;
+namespace Magento\SalesRule\Model\ResourceModel\Report;
 
 /**
  * Rule report resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Rule extends \Magento\Reports\Model\Resource\Report\AbstractReport
+class Rule extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport
 {
     /**
-     * @var \Magento\SalesRule\Model\Resource\Report\Rule\CreatedatFactory
+     * @var \Magento\SalesRule\Model\ResourceModel\Report\Rule\CreatedatFactory
      */
     protected $_createdatFactory;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Report\Rule\UpdatedatFactory
+     * @var \Magento\SalesRule\Model\ResourceModel\Report\Rule\UpdatedatFactory
      */
     protected $_updatedatFactory;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Framework\Stdlib\DateTime\Timezone\Validator $timezoneValidator
-     * @param \Magento\SalesRule\Model\Resource\Report\Rule\CreatedatFactory $createdatFactory
-     * @param \Magento\SalesRule\Model\Resource\Report\Rule\UpdatedatFactory $updatedatFactory
+     * @param \Magento\SalesRule\Model\ResourceModel\Report\Rule\CreatedatFactory $createdatFactory
+     * @param \Magento\SalesRule\Model\ResourceModel\Report\Rule\UpdatedatFactory $updatedatFactory
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\Stdlib\DateTime\Timezone\Validator $timezoneValidator,
-        \Magento\SalesRule\Model\Resource\Report\Rule\CreatedatFactory $createdatFactory,
-        \Magento\SalesRule\Model\Resource\Report\Rule\UpdatedatFactory $updatedatFactory,
+        \Magento\SalesRule\Model\ResourceModel\Report\Rule\CreatedatFactory $createdatFactory,
+        \Magento\SalesRule\Model\ResourceModel\Report\Rule\UpdatedatFactory $updatedatFactory,
         $connectionName = null
     ) {
         parent::__construct(
diff --git a/app/code/Magento/SalesRule/Model/Resource/Report/Rule/Createdat.php b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule/Createdat.php
similarity index 97%
rename from app/code/Magento/SalesRule/Model/Resource/Report/Rule/Createdat.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule/Createdat.php
index c4cc247bb9040f3dc826bd056d2afb135daf6273..f49e2e084882803282f072b60c266735d41329d9 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Report/Rule/Createdat.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule/Createdat.php
@@ -6,14 +6,14 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\SalesRule\Model\Resource\Report\Rule;
+namespace Magento\SalesRule\Model\ResourceModel\Report\Rule;
 
 /**
  * Rule report resource model with aggregation by created at
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Createdat extends \Magento\Reports\Model\Resource\Report\AbstractReport
+class Createdat extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport
 {
     /**
      * Resource Report Rule constructor
diff --git a/app/code/Magento/SalesRule/Model/Resource/Report/Rule/Updatedat.php b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule/Updatedat.php
similarity index 83%
rename from app/code/Magento/SalesRule/Model/Resource/Report/Rule/Updatedat.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule/Updatedat.php
index caba0aed1248e14d5242eb10388bf463dac7bca0..939d3202dbf148d59703c32862bcb589681fa89b 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Report/Rule/Updatedat.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Rule/Updatedat.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource\Report\Rule;
+namespace Magento\SalesRule\Model\ResourceModel\Report\Rule;
 
 /**
  * Rule report resource model with aggregation by updated at
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Updatedat extends \Magento\SalesRule\Model\Resource\Report\Rule\Createdat
+class Updatedat extends \Magento\SalesRule\Model\ResourceModel\Report\Rule\Createdat
 {
     /**
      * Resource Report Rule constructor
diff --git a/app/code/Magento/SalesRule/Model/Resource/Report/Updatedat/Collection.php b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Updatedat/Collection.php
similarity index 70%
rename from app/code/Magento/SalesRule/Model/Resource/Report/Updatedat/Collection.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Report/Updatedat/Collection.php
index 07b3c360ec154323375d9cc40c1a513a372bd03f..2df6361d2fd3598cfba47da650b39716e4b1c591 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Report/Updatedat/Collection.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Report/Updatedat/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource\Report\Updatedat;
+namespace Magento\SalesRule\Model\ResourceModel\Report\Updatedat;
 
 /**
  * Sales report coupons collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\SalesRule\Model\Resource\Report\Collection
+class Collection extends \Magento\SalesRule\Model\ResourceModel\Report\Collection
 {
     /**
      * Aggregated Data Table
diff --git a/app/code/Magento/SalesRule/Model/Resource/Rule.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule.php
similarity index 95%
rename from app/code/Magento/SalesRule/Model/Resource/Rule.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Rule.php
index fdc473a642c39463ef9e0bfae42e260d7e1d67eb..c4fc5d41ece13cdd6146062d6e9ec8819d90e42a 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Rule.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource;
+namespace Magento\SalesRule\Model\ResourceModel;
 
 use Magento\Framework\Model\AbstractModel;
 
 /**
  * Sales Rule resource model
  */
-class Rule extends \Magento\Rule\Model\Resource\AbstractResource
+class Rule extends \Magento\Rule\Model\ResourceModel\AbstractResource
 {
     /**
      * Store associated with rule entities information map
@@ -48,20 +48,20 @@ class Rule extends \Magento\Rule\Model\Resource\AbstractResource
     protected $string;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Coupon
+     * @var \Magento\SalesRule\Model\ResourceModel\Coupon
      */
     protected $_resourceCoupon;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\StringUtils $string
-     * @param \Magento\SalesRule\Model\Resource\Coupon $resourceCoupon
+     * @param \Magento\SalesRule\Model\ResourceModel\Coupon $resourceCoupon
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\StringUtils $string,
-        \Magento\SalesRule\Model\Resource\Coupon $resourceCoupon,
+        \Magento\SalesRule\Model\ResourceModel\Coupon $resourceCoupon,
         $connectionName = null
     ) {
         $this->string = $string;
diff --git a/app/code/Magento/SalesRule/Model/Resource/Rule/Collection.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Collection.php
similarity index 96%
rename from app/code/Magento/SalesRule/Model/Resource/Rule/Collection.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Rule/Collection.php
index cee9cd29366f3756504d3fe44bfc803f2c4473ff..1fa75ae94d63b5d119a16c26956dc31b7164eca5 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Rule/Collection.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Collection.php
@@ -6,14 +6,14 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\SalesRule\Model\Resource\Rule;
+namespace Magento\SalesRule\Model\ResourceModel\Rule;
 
 /**
  * Sales Rules resource collection model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Rule\Model\Resource\Rule\Collection\AbstractCollection
+class Collection extends \Magento\Rule\Model\ResourceModel\Rule\Collection\AbstractCollection
 {
     /**
      * Store associated with rule entities information map
@@ -45,7 +45,7 @@ class Collection extends \Magento\Rule\Model\Resource\Rule\Collection\AbstractCo
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -54,7 +54,7 @@ class Collection extends \Magento\Rule\Model\Resource\Rule\Collection\AbstractCo
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->_date = $date;
@@ -67,7 +67,7 @@ class Collection extends \Magento\Rule\Model\Resource\Rule\Collection\AbstractCo
      */
     protected function _construct()
     {
-        $this->_init('Magento\SalesRule\Model\Rule', 'Magento\SalesRule\Model\Resource\Rule');
+        $this->_init('Magento\SalesRule\Model\Rule', 'Magento\SalesRule\Model\ResourceModel\Rule');
         $this->_map['fields']['rule_id'] = 'main_table.rule_id';
     }
 
diff --git a/app/code/Magento/SalesRule/Model/Resource/Rule/Customer.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer.php
similarity index 90%
rename from app/code/Magento/SalesRule/Model/Resource/Rule/Customer.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer.php
index 9478a7516beaa5e932982926c6398b5aae097bdc..26e84f9b8216d6013aac2d6a31eb355fab65cf37 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Rule/Customer.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource\Rule;
+namespace Magento\SalesRule\Model\ResourceModel\Rule;
 
 /**
  * SalesRule Rule Customer Model Resource
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Customer extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Customer extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Constructor
diff --git a/app/code/Magento/SalesRule/Model/Resource/Rule/Customer/Collection.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer/Collection.php
similarity index 67%
rename from app/code/Magento/SalesRule/Model/Resource/Rule/Customer/Collection.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer/Collection.php
index 80c4dab0219ae8798dcb27efcb0df28f28919493..9d8822b51b2ab791841fbc7b03d29af230711836 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Rule/Customer/Collection.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Customer/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource\Rule\Customer;
+namespace Magento\SalesRule\Model\ResourceModel\Rule\Customer;
 
 /**
  * SalesRule Model Resource Rule Customer_Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Collection constructor
@@ -20,6 +20,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\SalesRule\Model\Rule\Customer', 'Magento\SalesRule\Model\Resource\Rule\Customer');
+        $this->_init('Magento\SalesRule\Model\Rule\Customer', 'Magento\SalesRule\Model\ResourceModel\Rule\Customer');
     }
 }
diff --git a/app/code/Magento/SalesRule/Model/Resource/Rule/Quote/Collection.php b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Quote/Collection.php
similarity index 72%
rename from app/code/Magento/SalesRule/Model/Resource/Rule/Quote/Collection.php
rename to app/code/Magento/SalesRule/Model/ResourceModel/Rule/Quote/Collection.php
index 21636d3a656b4fd3e985245dc18d047ea9663053..1ee69eca7338bb13954f9bb41e6f9faef5637c38 100644
--- a/app/code/Magento/SalesRule/Model/Resource/Rule/Quote/Collection.php
+++ b/app/code/Magento/SalesRule/Model/ResourceModel/Rule/Quote/Collection.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource\Rule\Quote;
+namespace Magento\SalesRule\Model\ResourceModel\Rule\Quote;
 
-class Collection extends \Magento\SalesRule\Model\Resource\Rule\Collection
+class Collection extends \Magento\SalesRule\Model\ResourceModel\Rule\Collection
 {
     /**
      * Add websites for load
diff --git a/app/code/Magento/SalesRule/Model/Rss/Discounts.php b/app/code/Magento/SalesRule/Model/Rss/Discounts.php
index 54b45399455ada22045511adb76365de460eaa6f..a75c8c99671bfb4a452b4629e4609ab4842ab7dc 100644
--- a/app/code/Magento/SalesRule/Model/Rss/Discounts.php
+++ b/app/code/Magento/SalesRule/Model/Rss/Discounts.php
@@ -12,7 +12,7 @@ namespace Magento\SalesRule\Model\Rss;
 class Discounts
 {
     /**
-     * @var \Magento\SalesRule\Model\Resource\Rule\CollectionFactory
+     * @var \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory
      */
     protected $collectionFactory;
 
@@ -23,11 +23,11 @@ class Discounts
 
     /**
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
-     * @param \Magento\SalesRule\Model\Resource\Rule\CollectionFactory $collectionFactory
+     * @param \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory $collectionFactory
      */
     public function __construct(
         \Magento\Framework\Stdlib\DateTime $dateTime,
-        \Magento\SalesRule\Model\Resource\Rule\CollectionFactory $collectionFactory
+        \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory $collectionFactory
     ) {
         $this->dateTime = $dateTime;
         $this->collectionFactory = $collectionFactory;
@@ -36,11 +36,11 @@ class Discounts
     /**
      * @param int $websiteId
      * @param int $customerGroupId
-     * @return \Magento\SalesRule\Model\Resource\Rule\Collection
+     * @return \Magento\SalesRule\Model\ResourceModel\Rule\Collection
      */
     public function getDiscountCollection($websiteId, $customerGroupId)
     {
-        /** @var $collection \Magento\SalesRule\Model\Resource\Rule\Collection */
+        /** @var $collection \Magento\SalesRule\Model\ResourceModel\Rule\Collection */
         $collection = $this->collectionFactory->create();
         $collection->addWebsiteGroupDateFilter(
             $websiteId,
diff --git a/app/code/Magento/SalesRule/Model/Rule.php b/app/code/Magento/SalesRule/Model/Rule.php
index b823b0342d45b3874e2a0c9069ac8975f7d403d6..200a836592c1c8bdfd1cf21d2330b23d7b609aca 100644
--- a/app/code/Magento/SalesRule/Model/Rule.php
+++ b/app/code/Magento/SalesRule/Model/Rule.php
@@ -10,8 +10,8 @@ use Magento\Quote\Model\Quote\Address;
 /**
  * Shopping Cart Rule data model
  *
- * @method \Magento\SalesRule\Model\Resource\Rule _getResource()
- * @method \Magento\SalesRule\Model\Resource\Rule getResource()
+ * @method \Magento\SalesRule\Model\ResourceModel\Rule _getResource()
+ * @method \Magento\SalesRule\Model\ResourceModel\Rule getResource()
  * @method string getName()
  * @method \Magento\SalesRule\Model\Rule setName(string $value)
  * @method string getDescription()
@@ -163,7 +163,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
     protected $_condProdCombineF;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Coupon\Collection
+     * @var \Magento\SalesRule\Model\ResourceModel\Coupon\Collection
      */
     protected $_couponCollection;
 
@@ -181,9 +181,9 @@ class Rule extends \Magento\Rule\Model\AbstractModel
      * @param \Magento\SalesRule\Model\Coupon\CodegeneratorFactory $codegenFactory
      * @param \Magento\SalesRule\Model\Rule\Condition\CombineFactory $condCombineFactory
      * @param \Magento\SalesRule\Model\Rule\Condition\Product\CombineFactory $condProdCombineF
-     * @param \Magento\SalesRule\Model\Resource\Coupon\Collection $couponCollection
+     * @param \Magento\SalesRule\Model\ResourceModel\Coupon\Collection $couponCollection
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -197,9 +197,9 @@ class Rule extends \Magento\Rule\Model\AbstractModel
         \Magento\SalesRule\Model\Coupon\CodegeneratorFactory $codegenFactory,
         \Magento\SalesRule\Model\Rule\Condition\CombineFactory $condCombineFactory,
         \Magento\SalesRule\Model\Rule\Condition\Product\CombineFactory $condProdCombineF,
-        \Magento\SalesRule\Model\Resource\Coupon\Collection $couponCollection,
+        \Magento\SalesRule\Model\ResourceModel\Coupon\Collection $couponCollection,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -220,7 +220,7 @@ class Rule extends \Magento\Rule\Model\AbstractModel
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\SalesRule\Model\Resource\Rule');
+        $this->_init('Magento\SalesRule\Model\ResourceModel\Rule');
         $this->setIdFieldName('rule_id');
     }
 
diff --git a/app/code/Magento/SalesRule/Model/Rule/Condition/Product/Combine.php b/app/code/Magento/SalesRule/Model/Rule/Condition/Product/Combine.php
index 8100cd2ad18cab45a6aaa5fa812982339bef2fa5..5e441ac86a0b6906f0b9f1dee81f99030ae60ce0 100644
--- a/app/code/Magento/SalesRule/Model/Rule/Condition/Product/Combine.php
+++ b/app/code/Magento/SalesRule/Model/Rule/Condition/Product/Combine.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\SalesRule\Model\Rule\Condition\Product;
 
-use Magento\Catalog\Model\Resource\Product\Collection;
+use Magento\Catalog\Model\ResourceModel\Product\Collection;
 
 class Combine extends \Magento\Rule\Model\Condition\Combine
 {
diff --git a/app/code/Magento/SalesRule/Model/Rule/Customer.php b/app/code/Magento/SalesRule/Model/Rule/Customer.php
index 0bd03dbad0b4e6f654b5242185705b3664d9528b..97b581a072c072b158ef36af342ac9145b0411b9 100644
--- a/app/code/Magento/SalesRule/Model/Rule/Customer.php
+++ b/app/code/Magento/SalesRule/Model/Rule/Customer.php
@@ -8,8 +8,8 @@ namespace Magento\SalesRule\Model\Rule;
 /**
  * SalesRule Rule Customer Model
  *
- * @method \Magento\SalesRule\Model\Resource\Rule\Customer _getResource()
- * @method \Magento\SalesRule\Model\Resource\Rule\Customer getResource()
+ * @method \Magento\SalesRule\Model\ResourceModel\Rule\Customer _getResource()
+ * @method \Magento\SalesRule\Model\ResourceModel\Rule\Customer getResource()
  * @method int getRuleId()
  * @method \Magento\SalesRule\Model\Rule\Customer setRuleId(int $value)
  * @method int getCustomerId()
@@ -29,7 +29,7 @@ class Customer extends \Magento\Framework\Model\AbstractModel
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\SalesRule\Model\Resource\Rule\Customer');
+        $this->_init('Magento\SalesRule\Model\ResourceModel\Rule\Customer');
     }
 
     /**
diff --git a/app/code/Magento/SalesRule/Model/RuleRepository.php b/app/code/Magento/SalesRule/Model/RuleRepository.php
index d62b894038b4f745de00518b9cbd8800f1f73ba3..3a1e3d554d3eb257a09ff1d20d9b87c66de02f47 100644
--- a/app/code/Magento/SalesRule/Model/RuleRepository.php
+++ b/app/code/Magento/SalesRule/Model/RuleRepository.php
@@ -8,7 +8,7 @@ namespace Magento\SalesRule\Model;
 use Magento\Framework\Api\Search\FilterGroup;
 use Magento\Framework\Api\SearchCriteriaInterface;
 use Magento\Framework\Api\SortOrder;
-use Magento\SalesRule\Model\Resource\Rule\Collection;
+use Magento\SalesRule\Model\ResourceModel\Rule\Collection;
 
 /**
  * Sales rule CRUD class
@@ -58,7 +58,7 @@ class RuleRepository implements \Magento\SalesRule\Api\RuleRepositoryInterface
     protected $extensionAttributesJoinProcessor;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Rule\CollectionFactory
+     * @var \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory
      */
     protected $ruleCollectionFactory;
 
@@ -70,7 +70,7 @@ class RuleRepository implements \Magento\SalesRule\Api\RuleRepositoryInterface
      * @param \Magento\SalesRule\Model\Converter\ToModel $toModelConverter
      * @param \Magento\SalesRule\Api\Data\RuleSearchResultInterfaceFactory $searchResultFactory
      * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor
-     * @param \Magento\SalesRule\Model\Resource\Rule\CollectionFactory $ruleCollectionFactory
+     * @param \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory $ruleCollectionFactory
      * @param \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
      */
     public function __construct(
@@ -81,7 +81,7 @@ class RuleRepository implements \Magento\SalesRule\Api\RuleRepositoryInterface
         \Magento\SalesRule\Model\Converter\ToModel $toModelConverter,
         \Magento\SalesRule\Api\Data\RuleSearchResultInterfaceFactory $searchResultFactory,
         \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $extensionAttributesJoinProcessor,
-        \Magento\SalesRule\Model\Resource\Rule\CollectionFactory $ruleCollectionFactory,
+        \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory $ruleCollectionFactory,
         \Magento\Framework\Reflection\DataObjectProcessor $dataObjectProcessor
     ) {
         $this->ruleFactory = $ruleFactory;
@@ -129,7 +129,7 @@ class RuleRepository implements \Magento\SalesRule\Api\RuleRepositoryInterface
      */
     public function getList(SearchCriteriaInterface $searchCriteria)
     {
-        /** @var \Magento\SalesRule\Model\Resource\Rule\Collection $collection */
+        /** @var \Magento\SalesRule\Model\ResourceModel\Rule\Collection $collection */
         $collection = $this->ruleCollectionFactory->create();
         $ruleInterfaceName = 'Magento\SalesRule\Api\Data\RuleInterface';
         $this->extensionAttributesJoinProcessor->process($collection, $ruleInterfaceName);
diff --git a/app/code/Magento/SalesRule/Model/RulesApplier.php b/app/code/Magento/SalesRule/Model/RulesApplier.php
index 20b8c40142e50f2234bd0e2f6b203ea178118565..2daae02eee32d7558f1636daa09ef400231ceffe 100644
--- a/app/code/Magento/SalesRule/Model/RulesApplier.php
+++ b/app/code/Magento/SalesRule/Model/RulesApplier.php
@@ -44,7 +44,7 @@ class RulesApplier
      * Apply rules to current order item
      *
      * @param \Magento\Quote\Model\Quote\Item\AbstractItem $item
-     * @param \Magento\SalesRule\Model\Resource\Rule\Collection $rules
+     * @param \Magento\SalesRule\Model\ResourceModel\Rule\Collection $rules
      * @param bool $skipValidation
      * @param mixed $couponCode
      * @return array
diff --git a/app/code/Magento/SalesRule/Model/Service/CouponManagementService.php b/app/code/Magento/SalesRule/Model/Service/CouponManagementService.php
index 2c3c6476a597b7204b9f8afa554a240c0b27963c..811f966152efb067f1e1796c7bbab840affd7ac8 100644
--- a/app/code/Magento/SalesRule/Model/Service/CouponManagementService.php
+++ b/app/code/Magento/SalesRule/Model/Service/CouponManagementService.php
@@ -24,7 +24,7 @@ class CouponManagementService implements \Magento\SalesRule\Api\CouponManagement
     protected $ruleFactory;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Coupon\CollectionFactory
+     * @var \Magento\SalesRule\Model\ResourceModel\Coupon\CollectionFactory
      */
     protected $collectionFactory;
 
@@ -46,7 +46,7 @@ class CouponManagementService implements \Magento\SalesRule\Api\CouponManagement
     /**
      * @param \Magento\SalesRule\Model\CouponFactory $couponFactory
      * @param \Magento\SalesRule\Model\RuleFactory $ruleFactory
-     * @param \Magento\SalesRule\Model\Resource\Coupon\CollectionFactory $collectionFactory
+     * @param \Magento\SalesRule\Model\ResourceModel\Coupon\CollectionFactory $collectionFactory
      * @param \Magento\SalesRule\Model\Coupon\Massgenerator $couponGenerator
      * @param \Magento\SalesRule\Model\Spi\CouponResourceInterface $resourceModel
      * @param \Magento\SalesRule\Api\Data\CouponMassDeleteResultInterfaceFactory $couponMassDeleteResultFactory
@@ -54,7 +54,7 @@ class CouponManagementService implements \Magento\SalesRule\Api\CouponManagement
     public function __construct(
         \Magento\SalesRule\Model\CouponFactory $couponFactory,
         \Magento\SalesRule\Model\RuleFactory $ruleFactory,
-        \Magento\SalesRule\Model\Resource\Coupon\CollectionFactory $collectionFactory,
+        \Magento\SalesRule\Model\ResourceModel\Coupon\CollectionFactory $collectionFactory,
         \Magento\SalesRule\Model\Coupon\Massgenerator $couponGenerator,
         \Magento\SalesRule\Model\Spi\CouponResourceInterface $resourceModel,
         \Magento\SalesRule\Api\Data\CouponMassDeleteResultInterfaceFactory $couponMassDeleteResultFactory
diff --git a/app/code/Magento/SalesRule/Model/Utility.php b/app/code/Magento/SalesRule/Model/Utility.php
index fe0ec375306347bf65f6bbfa69462edb4bf79c40..cbd34d7b07b73dec12963b955ae8915cd8b45f4c 100644
--- a/app/code/Magento/SalesRule/Model/Utility.php
+++ b/app/code/Magento/SalesRule/Model/Utility.php
@@ -26,7 +26,7 @@ class Utility
     protected $_baseRoundingDeltas = [];
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Coupon\UsageFactory
+     * @var \Magento\SalesRule\Model\ResourceModel\Coupon\UsageFactory
      */
     protected $usageFactory;
 
@@ -51,14 +51,14 @@ class Utility
     protected $priceCurrency;
 
     /**
-     * @param Resource\Coupon\UsageFactory $usageFactory
+     * @param \Magento\SalesRule\Model\ResourceModel\Coupon\UsageFactory $usageFactory
      * @param CouponFactory $couponFactory
      * @param Rule\CustomerFactory $customerFactory
      * @param \Magento\Framework\DataObjectFactory $objectFactory
      * @param PriceCurrencyInterface $priceCurrency
      */
     public function __construct(
-        \Magento\SalesRule\Model\Resource\Coupon\UsageFactory $usageFactory,
+        \Magento\SalesRule\Model\ResourceModel\Coupon\UsageFactory $usageFactory,
         \Magento\SalesRule\Model\CouponFactory $couponFactory,
         \Magento\SalesRule\Model\Rule\CustomerFactory $customerFactory,
         \Magento\Framework\DataObjectFactory $objectFactory,
diff --git a/app/code/Magento/SalesRule/Model/Validator.php b/app/code/Magento/SalesRule/Model/Validator.php
index b86faa99816ade7822fb863c1743c016699fadf1..f69e85931f4596f91cc7155257d5c4f55b70d929 100644
--- a/app/code/Magento/SalesRule/Model/Validator.php
+++ b/app/code/Magento/SalesRule/Model/Validator.php
@@ -29,7 +29,7 @@ class Validator extends \Magento\Framework\Model\AbstractModel
     /**
      * Rule source collection
      *
-     * @var \Magento\SalesRule\Model\Resource\Rule\Collection
+     * @var \Magento\SalesRule\Model\ResourceModel\Rule\Collection
      */
     protected $_rules;
 
@@ -63,7 +63,7 @@ class Validator extends \Magento\Framework\Model\AbstractModel
     protected $_catalogData = null;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Rule\CollectionFactory
+     * @var \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -95,14 +95,14 @@ class Validator extends \Magento\Framework\Model\AbstractModel
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param Resource\Rule\CollectionFactory $collectionFactory
+     * @param \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory $collectionFactory
      * @param \Magento\Catalog\Helper\Data $catalogData
      * @param Utility $utility
      * @param RulesApplier $rulesApplier
      * @param \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency
      * @param Validator\Pool $validators
      * @param \Magento\Framework\Message\ManagerInterface $messageManager
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -110,14 +110,14 @@ class Validator extends \Magento\Framework\Model\AbstractModel
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\SalesRule\Model\Resource\Rule\CollectionFactory $collectionFactory,
+        \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory $collectionFactory,
         \Magento\Catalog\Helper\Data $catalogData,
         \Magento\SalesRule\Model\Utility $utility,
         \Magento\SalesRule\Model\RulesApplier $rulesApplier,
         \Magento\Framework\Pricing\PriceCurrencyInterface $priceCurrency,
         \Magento\SalesRule\Model\Validator\Pool $validators,
         \Magento\Framework\Message\ManagerInterface $messageManager,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -162,7 +162,7 @@ class Validator extends \Magento\Framework\Model\AbstractModel
     /**
      * Get rules collection for current object state
      *
-     * @return \Magento\SalesRule\Model\Resource\Rule\Collection
+     * @return \Magento\SalesRule\Model\ResourceModel\Rule\Collection
      */
     protected function _getRules()
     {
diff --git a/app/code/Magento/SalesRule/Observer/CheckSalesRulesAvailability.php b/app/code/Magento/SalesRule/Observer/CheckSalesRulesAvailability.php
index 08e64c95917041c580c48b0ce72db1fca563beb3..cd7a40a1112b8a413470cb8293fdaa02d46a5e10 100644
--- a/app/code/Magento/SalesRule/Observer/CheckSalesRulesAvailability.php
+++ b/app/code/Magento/SalesRule/Observer/CheckSalesRulesAvailability.php
@@ -8,7 +8,7 @@ namespace Magento\SalesRule\Observer;
 class CheckSalesRulesAvailability
 {
     /**
-     * @var \Magento\SalesRule\Model\Resource\Rule\CollectionFactory
+     * @var \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -18,11 +18,11 @@ class CheckSalesRulesAvailability
     protected $messageManager;
 
     /**
-     * @param \Magento\SalesRule\Model\Resource\Rule\CollectionFactory $collectionFactory
+     * @param \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory $collectionFactory
      * @param \Magento\Framework\Message\ManagerInterface $messageManager
      */
     public function __construct(
-        \Magento\SalesRule\Model\Resource\Rule\CollectionFactory $collectionFactory,
+        \Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory $collectionFactory,
         \Magento\Framework\Message\ManagerInterface $messageManager
     ) {
         $this->_collectionFactory = $collectionFactory;
@@ -38,7 +38,7 @@ class CheckSalesRulesAvailability
      */
     public function checkSalesRulesAvailability($attributeCode)
     {
-        /* @var $collection \Magento\SalesRule\Model\Resource\Rule\Collection */
+        /* @var $collection \Magento\SalesRule\Model\ResourceModel\Rule\Collection */
         $collection = $this->_collectionFactory->create()->addAttributeInConditionFilter($attributeCode);
 
         $disabledRulesCount = 0;
diff --git a/app/code/Magento/SalesRule/Observer/SalesOrderAfterPlaceObserver.php b/app/code/Magento/SalesRule/Observer/SalesOrderAfterPlaceObserver.php
index d50a06b4266fd41c3101f9c87a93607a5733fcc1..1d1a6be10918d384aaaa5906b395c7f30f02c8e3 100644
--- a/app/code/Magento/SalesRule/Observer/SalesOrderAfterPlaceObserver.php
+++ b/app/code/Magento/SalesRule/Observer/SalesOrderAfterPlaceObserver.php
@@ -26,7 +26,7 @@ class SalesOrderAfterPlaceObserver implements ObserverInterface
     protected $_coupon;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Coupon\Usage
+     * @var \Magento\SalesRule\Model\ResourceModel\Coupon\Usage
      */
     protected $_couponUsage;
 
@@ -34,13 +34,13 @@ class SalesOrderAfterPlaceObserver implements ObserverInterface
      * @param \Magento\SalesRule\Model\RuleFactory $ruleFactory
      * @param \Magento\SalesRule\Model\Rule\CustomerFactory $ruleCustomerFactory
      * @param \Magento\SalesRule\Model\Coupon $coupon
-     * @param \Magento\SalesRule\Model\Resource\Coupon\Usage $couponUsage
+     * @param \Magento\SalesRule\Model\ResourceModel\Coupon\Usage $couponUsage
      */
     public function __construct(
         \Magento\SalesRule\Model\RuleFactory $ruleFactory,
         \Magento\SalesRule\Model\Rule\CustomerFactory $ruleCustomerFactory,
         \Magento\SalesRule\Model\Coupon $coupon,
-        \Magento\SalesRule\Model\Resource\Coupon\Usage $couponUsage
+        \Magento\SalesRule\Model\ResourceModel\Coupon\Usage $couponUsage
     ) {
         $this->_ruleFactory = $ruleFactory;
         $this->_ruleCustomerFactory = $ruleCustomerFactory;
diff --git a/app/code/Magento/SalesRule/Test/Unit/Cron/AggregateSalesReportCouponsDataTest.php b/app/code/Magento/SalesRule/Test/Unit/Cron/AggregateSalesReportCouponsDataTest.php
index d84fbd97b51f2286d972dbcb562fc938f6a294b9..6d400a0a2438bc33817deea62ca0dda141a625d2 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Cron/AggregateSalesReportCouponsDataTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Cron/AggregateSalesReportCouponsDataTest.php
@@ -23,7 +23,7 @@ class AggregateSalesReportCouponsDataTest extends \PHPUnit_Framework_TestCase
     protected $localeDate;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Report\Rule|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\SalesRule\Model\ResourceModel\Report\Rule|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $reportRule;
 
@@ -46,7 +46,7 @@ class AggregateSalesReportCouponsDataTest extends \PHPUnit_Framework_TestCase
     {
         $this->localeResolver = $this->getMock('Magento\Framework\Locale\Resolver', [], [], '', false);
         $this->localeDate = $this->getMock('Magento\Framework\Stdlib\DateTime\Timezone', ['date'], [], '', false);
-        $this->reportRule = $this->getMock('Magento\SalesRule\Model\Resource\Report\Rule', [], [], '', false);
+        $this->reportRule = $this->getMock('Magento\SalesRule\Model\ResourceModel\Report\Rule', [], [], '', false);
     }
 
     public function testExecute()
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Coupon/MassgeneratorTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Coupon/MassgeneratorTest.php
index 941029d0c217558474a8ce876e857c1f23efade9..f8358e33673e2a8d78e12c2cf6d402d65e90d3ea 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/Coupon/MassgeneratorTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/Coupon/MassgeneratorTest.php
@@ -103,7 +103,7 @@ class MassgeneratorTest extends \PHPUnit_Framework_TestCase
 
         $salesRuleCouponMock = $this->getMock('Magento\SalesRule\Helper\Coupon', ['getCharset'], [], '', false);
         $resourceMock = $this->getMock(
-            'Magento\SalesRule\Model\Resource\Coupon',
+            'Magento\SalesRule\Model\ResourceModel\Coupon',
             ['exists', '__wakeup', 'getIdFieldName'],
             [],
             '',
@@ -182,7 +182,7 @@ class MassgeneratorTest extends \PHPUnit_Framework_TestCase
 
         $salesRuleCouponMock = $this->getMock('Magento\SalesRule\Helper\Coupon', ['getCharset'], [], '', false);
         $resourceMock = $this->getMock(
-            'Magento\SalesRule\Model\Resource\Coupon',
+            'Magento\SalesRule\Model\ResourceModel\Coupon',
             ['exists', '__wakeup', 'getIdFieldName'],
             [],
             '',
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/CouponRepositoryTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/CouponRepositoryTest.php
index 598eb6e58c67f994e5d5c51df51ec67eb70df3bf..0d73d1a2ac2229d28fc213d6c7c1e5d95c90262b 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/CouponRepositoryTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/CouponRepositoryTest.php
@@ -74,13 +74,13 @@ class CouponRepositoryTest extends \PHPUnit_Framework_TestCase
         $this->couponFactory = $this->getMock('\Magento\SalesRule\Model\CouponFactory', ['create'], [], '', false);
         $this->ruleFactory = $this->getMock('\Magento\SalesRule\Model\RuleFactory', ['create'], [], '', false);
         $this->collectionFactory = $this->getMock(
-            '\Magento\SalesRule\Model\Resource\Coupon\CollectionFactory',
+            '\Magento\SalesRule\Model\ResourceModel\Coupon\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
-        $this->resource = $this->getMock('\Magento\SalesRule\Model\Resource\Coupon', [], [], '', false);
+        $this->resource = $this->getMock('\Magento\SalesRule\Model\ResourceModel\Coupon', [], [], '', false);
         $this->extensionAttributesJoinProcessorMock = $this->getMock(
             '\Magento\Framework\Api\ExtensionAttribute\JoinProcessor',
             ['process'],
@@ -218,7 +218,7 @@ class CouponRepositoryTest extends \PHPUnit_Framework_TestCase
          * @var \Magento\Framework\Api\SearchCriteriaInterface $searchCriteriaMock
          */
         $searchCriteriaMock = $this->getMock('\Magento\Framework\Api\SearchCriteria', [], [], '', false);
-        $collectionMock = $this->getMock('Magento\SalesRule\Model\Resource\Coupon\Collection', [], [], '', false);
+        $collectionMock = $this->getMock('Magento\SalesRule\Model\ResourceModel\Coupon\Collection', [], [], '', false);
         $filterGroupMock = $this->getMock('\Magento\Framework\Api\Search\FilterGroup', [], [], '', false);
         $filterMock = $this->getMock('\Magento\Framework\Api\Filter', [], [], '', false);
         $sortOrderMock = $this->getMock('\Magento\Framework\Api\SortOrder', [], [], '', false);
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/CouponTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/CouponTest.php
index 6b40d0108a872949d90f2b65cb162002776c7462..ceba985e4b45aa0c998c12672c02d481301134a9 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/CouponTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/CouponTest.php
@@ -11,7 +11,7 @@ namespace Magento\SalesRule\Test\Unit\Model;
 class CouponTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\SalesRule\Model\Resource\Coupon|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\SalesRule\Model\ResourceModel\Coupon|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -30,7 +30,7 @@ class CouponTest extends \PHPUnit_Framework_TestCase
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
         $this->resourceMock = $this->getMock(
-            'Magento\SalesRule\Model\Resource\Coupon',
+            'Magento\SalesRule\Model\ResourceModel\Coupon',
             ['loadPrimaryByRule', 'load', '__wakeup', 'getIdFieldName'],
             [],
             '',
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Plugin/QuoteConfigProductAttributesTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Plugin/QuoteConfigProductAttributesTest.php
index d54b668f67f06c48d1066c1d17aaecfb784c750f..07c236b923357596b77b96cc882e04d5dd5be016 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/Plugin/QuoteConfigProductAttributesTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/Plugin/QuoteConfigProductAttributesTest.php
@@ -14,14 +14,14 @@ class QuoteConfigProductAttributesTest extends \PHPUnit_Framework_TestCase
     protected $plugin;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Rule|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\SalesRule\Model\ResourceModel\Rule|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $ruleResource;
 
     public function setUp()
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->ruleResource = $this->getMock('Magento\SalesRule\Model\Resource\Rule', [], [], '', false);
+        $this->ruleResource = $this->getMock('Magento\SalesRule\Model\ResourceModel\Rule', [], [], '', false);
 
         $this->plugin = $objectManager->getObject(
             'Magento\SalesRule\Model\Plugin\QuoteConfigProductAttributes',
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Plugin/Resource/RuleTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Plugin/ResourceModel/RuleTest.php
similarity index 88%
rename from app/code/Magento/SalesRule/Test/Unit/Model/Plugin/Resource/RuleTest.php
rename to app/code/Magento/SalesRule/Test/Unit/Model/Plugin/ResourceModel/RuleTest.php
index 9b8dd4ada65feca2b7c184c154268413d776d6ca..8b97ab61c70651a9de4c1420046e83f2f8559ca5 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/Plugin/Resource/RuleTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/Plugin/ResourceModel/RuleTest.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\SalesRule\Test\Unit\Model\Plugin\Resource;
+namespace Magento\SalesRule\Test\Unit\Model\Plugin\ResourceModel;
 
 class RuleTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\SalesRule\Model\Plugin\Resource\Rule
+     * @var \Magento\SalesRule\Model\Plugin\ResourceModel\Rule
      */
     protected $plugin;
 
@@ -31,7 +31,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->ruleResource = $this->getMockBuilder('Magento\SalesRule\Model\Resource\Rule')
+        $this->ruleResource = $this->getMockBuilder('Magento\SalesRule\Model\ResourceModel\Rule')
             ->disableOriginalConstructor()
             ->getMock();
         $this->genericClosure = function () {
@@ -41,7 +41,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
 
-        $this->plugin = $objectManager->getObject('Magento\SalesRule\Model\Plugin\Resource\Rule');
+        $this->plugin = $objectManager->getObject('Magento\SalesRule\Model\Plugin\ResourceModel\Rule');
     }
 
     public function testAroundLoadCustomerGroupIds()
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Quote/DiscountTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Quote/DiscountTest.php
index 0d209edfb7ff73cd01ef2d9d0f2dd58930f469d0..7c163d51f75f9516f61d9d0842383fd5825f27d0 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/Quote/DiscountTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/Quote/DiscountTest.php
@@ -80,11 +80,14 @@ class DiscountTest extends \PHPUnit_Framework_TestCase
 
         $this->addressMock = $this->getMock(
             '\Magento\Quote\Model\Quote\Address',
-            ['getQuote', 'getAllItems', 'getShippingAmount', '__wakeup'],
+            ['getQuote', 'getAllItems', 'getShippingAmount', '__wakeup', 'getCustomAttributesCodes'],
             [],
             '',
             false
         );
+        $this->addressMock->expects($this->any())
+            ->method('getCustomAttributesCodes')
+            ->willReturn([]);
 
         $shipping = $this->getMock('\Magento\Quote\Api\Data\ShippingInterface');
         $shipping->expects($this->any())->method('getAddress')->willReturn($this->addressMock);
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Resource/Report/CollectionTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/Report/CollectionTest.php
similarity index 93%
rename from app/code/Magento/SalesRule/Test/Unit/Model/Resource/Report/CollectionTest.php
rename to app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/Report/CollectionTest.php
index 3f5fce172994deee40e83b18f1707384bee6d7af..b75aa5b7f0658bd702e5cc59e0add16de7114030 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/Resource/Report/CollectionTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/Report/CollectionTest.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\SalesRule\Test\Unit\Model\Resource\Report;
+namespace Magento\SalesRule\Test\Unit\Model\ResourceModel\Report;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\SalesRule\Model\Resource\Report\Collection
+     * @var \Magento\SalesRule\Model\ResourceModel\Report\Collection
      */
     protected $object;
 
@@ -84,7 +84,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->reportResource = $this->getMock(
-            'Magento\Sales\Model\Resource\Report',
+            'Magento\Sales\Model\ResourceModel\Report',
             ['getConnection', 'getMainTable'],
             [],
             '',
@@ -119,14 +119,14 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('test_main_table'));
 
         $this->ruleFactory = $this->getMock(
-            'Magento\SalesRule\Model\Resource\Report\RuleFactory',
+            'Magento\SalesRule\Model\ResourceModel\Report\RuleFactory',
             ['create'],
             [],
             '',
             false
         );
 
-        $this->object = new \Magento\SalesRule\Model\Resource\Report\Collection(
+        $this->object = new \Magento\SalesRule\Model\ResourceModel\Report\Collection(
             $this->entityFactory, $this->loggerMock, $this->fetchStrategy,
             $this->eventManager, $this->reportResource, $this->ruleFactory
         );
@@ -219,7 +219,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected function getRuleMock()
     {
         return $this->getMock(
-            'Magento\SalesRule\Model\Resource\Report\Rule',
+            'Magento\SalesRule\Model\ResourceModel\Report\Rule',
             ['getUniqRulesNamesList'],
             [],
             '',
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Resource/Report/RuleTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/Report/RuleTest.php
similarity index 91%
rename from app/code/Magento/SalesRule/Test/Unit/Model/Resource/Report/RuleTest.php
rename to app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/Report/RuleTest.php
index 2007aeca42b11df79d63aabbe39f44cbc9dc2dfe..f84600cef01e75da20a5e64d655bcc751b1dd48c 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/Resource/Report/RuleTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/Report/RuleTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Test\Unit\Model\Resource\Report;
+namespace Magento\SalesRule\Test\Unit\Model\ResourceModel\Report;
 
 class RuleTest extends \PHPUnit_Framework_TestCase
 {
@@ -69,7 +69,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
         );
 
         $resourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -80,14 +80,14 @@ class RuleTest extends \PHPUnit_Framework_TestCase
 
         $flagFactory = $this->getMock('Magento\Reports\Model\FlagFactory', [], [], '', false);
         $createdatFactoryMock = $this->getMock(
-            'Magento\SalesRule\Model\Resource\Report\Rule\CreatedatFactory',
+            'Magento\SalesRule\Model\ResourceModel\Report\Rule\CreatedatFactory',
             ['create'],
             [],
             '',
             false
         );
         $updatedatFactoryMock = $this->getMock(
-            'Magento\SalesRule\Model\Resource\Report\Rule\UpdatedatFactory',
+            'Magento\SalesRule\Model\ResourceModel\Report\Rule\UpdatedatFactory',
             ['create'],
             [],
             '',
@@ -96,7 +96,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
 
         $objectHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $model = $objectHelper->getObject(
-            'Magento\SalesRule\Model\Resource\Report\Rule',
+            'Magento\SalesRule\Model\ResourceModel\Report\Rule',
             [
                 'resource' => $resourceMock,
                 'reportsFlagFactory' => $flagFactory,
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Resource/RuleTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/RuleTest.php
similarity index 94%
rename from app/code/Magento/SalesRule/Test/Unit/Model/Resource/RuleTest.php
rename to app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/RuleTest.php
index fec3070f47996620247367d683b597294275f3f9..e32936a18e067b093e9f0e361dd167dc31410278 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/Resource/RuleTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/ResourceModel/RuleTest.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\SalesRule\Test\Unit\Model\Resource;
+namespace Magento\SalesRule\Test\Unit\Model\ResourceModel;
 
 class RuleTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\SalesRule\Model\Resource\Rule
+     * @var \Magento\SalesRule\Model\ResourceModel\Rule
      */
     protected $model;
 
@@ -31,15 +31,15 @@ class RuleTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->ruleResource = $this->getMockBuilder('Magento\SalesRule\Model\Resource\Rule')
+        $this->ruleResource = $this->getMockBuilder('Magento\SalesRule\Model\ResourceModel\Rule')
             ->disableOriginalConstructor()
             ->getMock();
 
-        $context = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\Context')
+        $context = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\Context')
             ->disableOriginalConstructor()
             ->getMock();
         $connectionName = 'test';
-        $resources = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $resources = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $context->expects($this->any())
@@ -62,7 +62,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->model = $objectManager->getObject(
-            'Magento\SalesRule\Model\Resource\Rule',
+            'Magento\SalesRule\Model\ResourceModel\Rule',
             [
                 'context' => $context,
                 'connectionName' => $connectionName
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Rss/DiscountsTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Rss/DiscountsTest.php
index e0cf41a83ec86ba02f9a60f628dc67a4ecd84dbd..7f555ba438792c86acb7379b1fa1fe265cd556f7 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/Rss/DiscountsTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/Rss/DiscountsTest.php
@@ -31,7 +31,7 @@ class DiscountsTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->collectionFactory = $this->getMock(
-            'Magento\SalesRule\Model\Resource\Rule\CollectionFactory',
+            'Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory',
             ['create'],
             [],
             '',
@@ -50,7 +50,7 @@ class DiscountsTest extends \PHPUnit_Framework_TestCase
     public function testGetDiscountCollection()
     {
         $ruleCollection = $this->getMock(
-            'Magento\SalesRule\Model\Resource\Rule\Collection',
+            'Magento\SalesRule\Model\ResourceModel\Rule\Collection',
             [
                 'addWebsiteGroupDateFilter',
                 'addFieldToFilter',
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/RuleRepositoryTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/RuleRepositoryTest.php
index e2774a8694899d75393e749d696c3f8b2fe48e6f..52ac57c4609cf18239973fe6af7a9209803727ca 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/RuleRepositoryTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/RuleRepositoryTest.php
@@ -68,7 +68,7 @@ class RuleRepositoryTest extends \PHPUnit_Framework_TestCase
         $className = '\Magento\SalesRule\Api\Data\RuleSearchResultInterface';
         $this->searchResultsMock = $this->getMock($className, [], [], '', false);
 
-        $className = '\Magento\SalesRule\Model\Resource\Rule\CollectionFactory';
+        $className = '\Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory';
         $this->collectionFactory = $this->getMock($className, ['create'], [], '', false);
 
         $className = '\Magento\Framework\Api\ExtensionAttribute\JoinProcessor';
@@ -139,7 +139,7 @@ class RuleRepositoryTest extends \PHPUnit_Framework_TestCase
          * @var \Magento\Framework\Api\SearchCriteriaInterface $searchCriteriaMock
          */
         $searchCriteriaMock = $this->getMock('\Magento\Framework\Api\SearchCriteria', [], [], '', false);
-        $collectionMock = $this->getMock('Magento\SalesRule\Model\Resource\Rule\Collection', [], [], '', false);
+        $collectionMock = $this->getMock('Magento\SalesRule\Model\ResourceModel\Rule\Collection', [], [], '', false);
         $filterGroupMock = $this->getMock('\Magento\Framework\Api\Search\FilterGroup', [], [], '', false);
         $filterMock = $this->getMock('\Magento\Framework\Api\Filter', [], [], '', false);
         $sortOrderMock = $this->getMock('\Magento\Framework\Api\SortOrder', [], [], '', false);
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/Service/CouponManagementServiceTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/Service/CouponManagementServiceTest.php
index 4120dec4a747f9d4dbfc539c23fdf849b16ed3dd..9996010de5973d77e22ed97cca4186279334fde6 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/Service/CouponManagementServiceTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/Service/CouponManagementServiceTest.php
@@ -67,7 +67,7 @@ class CouponManagementServiceTest extends \PHPUnit_Framework_TestCase
         $className = '\Magento\SalesRule\Model\RuleFactory';
         $this->ruleFactory = $this->getMock($className, ['create'], [], '', false);
 
-        $className = '\Magento\SalesRule\Model\Resource\Coupon\CollectionFactory';
+        $className = '\Magento\SalesRule\Model\ResourceModel\Coupon\CollectionFactory';
         $this->collectionFactory = $this->getMock($className, ['create'], [], '', false);
 
         $className = '\Magento\SalesRule\Model\Coupon\Massgenerator';
@@ -261,9 +261,9 @@ class CouponManagementServiceTest extends \PHPUnit_Framework_TestCase
         $coupon = $this->getMock($className, [], [], '', false);
         $coupon->expects($this->exactly(3))->method('delete');
 
-        $className = '\Magento\SalesRule\Model\Resource\Coupon\Collection';
+        $className = '\Magento\SalesRule\Model\ResourceModel\Coupon\Collection';
         /**
-         * @var  \Magento\SalesRule\Model\Resource\Coupon\Collection $couponCollection
+         * @var  \Magento\SalesRule\Model\ResourceModel\Coupon\Collection $couponCollection
          */
         $couponCollection = $this->getMock($className, [], [], '', false);
 
@@ -285,9 +285,9 @@ class CouponManagementServiceTest extends \PHPUnit_Framework_TestCase
     {
         $ids = [1, 2, 3];
 
-        $className = '\Magento\SalesRule\Model\Resource\Coupon\Collection';
+        $className = '\Magento\SalesRule\Model\ResourceModel\Coupon\Collection';
         /**
-         * @var  \Magento\SalesRule\Model\Resource\Coupon\Collection $couponCollection
+         * @var  \Magento\SalesRule\Model\ResourceModel\Coupon\Collection $couponCollection
          */
         $couponCollection = $this->getMock($className, [], [], '', false);
         $couponCollection->expects($this->once())->method('addFieldToFilter')->willReturnSelf();
@@ -313,9 +313,9 @@ class CouponManagementServiceTest extends \PHPUnit_Framework_TestCase
         $coupon->expects($this->any())->method('delete')->willThrowException(new \Exception());
 
         /**
-         * @var  \Magento\SalesRule\Model\Resource\Coupon\Collection $couponCollection
+         * @var  \Magento\SalesRule\Model\ResourceModel\Coupon\Collection $couponCollection
          */
-        $className = '\Magento\SalesRule\Model\Resource\Coupon\Collection';
+        $className = '\Magento\SalesRule\Model\ResourceModel\Coupon\Collection';
         $couponCollection = $this->getMock($className, [], [], '', false);
         $couponCollection->expects($this->once())->method('addFieldToFilter')->willReturnSelf();
         $couponCollection->expects($this->once())->method('getItems')->willReturn([$coupon, $coupon, $coupon]);
@@ -341,9 +341,9 @@ class CouponManagementServiceTest extends \PHPUnit_Framework_TestCase
         $coupon = $this->getMock($className, [], [], '', false);
         $coupon->expects($this->exactly(3))->method('delete');
 
-        $className = '\Magento\SalesRule\Model\Resource\Coupon\Collection';
+        $className = '\Magento\SalesRule\Model\ResourceModel\Coupon\Collection';
         /**
-         * @var  \Magento\SalesRule\Model\Resource\Coupon\Collection $couponCollection
+         * @var  \Magento\SalesRule\Model\ResourceModel\Coupon\Collection $couponCollection
          */
         $couponCollection = $this->getMock($className, [], [], '', false);
 
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/UtilityTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/UtilityTest.php
index d9fd1a1ffc6989ef105212796683bd0e64b8437d..e75e226c4d628e1d139a8aeffd8c1af2cb804c7b 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/UtilityTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/UtilityTest.php
@@ -13,7 +13,7 @@ namespace Magento\SalesRule\Test\Unit\Model;
 class UtilityTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\SalesRule\Model\Resource\Coupon\UsageFactory | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\SalesRule\Model\ResourceModel\Coupon\UsageFactory | \PHPUnit_Framework_MockObject_MockObject
      */
     protected $usageFactory;
 
@@ -75,7 +75,7 @@ class UtilityTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->usageFactory = $this->getMock(
-            'Magento\SalesRule\Model\Resource\Coupon\UsageFactory',
+            'Magento\SalesRule\Model\ResourceModel\Coupon\UsageFactory',
             ['create'],
             [],
             '',
@@ -264,7 +264,7 @@ class UtilityTest extends \PHPUnit_Framework_TestCase
         $this->objectFactory->expects($this->once())
             ->method('create')
             ->will($this->returnValue($couponUsage));
-        $couponUsageModel = $this->getMock('\Magento\SalesRule\Model\Resource\Coupon\Usage', [], [], '', false);
+        $couponUsageModel = $this->getMock('\Magento\SalesRule\Model\ResourceModel\Coupon\Usage', [], [], '', false);
         $couponUsage->setData(['coupon_id' => $couponId, 'times_used' => $timesUsed]);
         $this->usageFactory->expects($this->once())
             ->method('create')
diff --git a/app/code/Magento/SalesRule/Test/Unit/Model/ValidatorTest.php b/app/code/Magento/SalesRule/Test/Unit/Model/ValidatorTest.php
index 04edd6f7e143be4bec34cd52052917b5319f9bbe..8959ca08e6a508676bd1c9bae6a641822063de5d 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Model/ValidatorTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Model/ValidatorTest.php
@@ -42,7 +42,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
     protected $utility;
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Rule\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\SalesRule\Model\ResourceModel\Rule\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $ruleCollection;
 
@@ -76,7 +76,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
         $this->utility = $this->getMock('Magento\SalesRule\Model\Utility', [], [], '', false);
         $this->validators = $this->getMock('Magento\SalesRule\Model\Validator\Pool', ['getValidators'], [], '', false);
         $this->messageManager = $this->getMock('\Magento\Framework\Message\Manager', [], [], '', false);
-        $this->ruleCollection = $this->getMockBuilder('Magento\SalesRule\Model\Resource\Rule\Collection')
+        $this->ruleCollection = $this->getMockBuilder('Magento\SalesRule\Model\ResourceModel\Rule\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $ruleCollectionFactoryMock = $this->prepareRuleCollectionMock($this->ruleCollection);
@@ -401,7 +401,8 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
             ->method('load')
             ->will($this->returnSelf());
 
-        $ruleCollectionFactoryMock = $this->getMockBuilder('Magento\SalesRule\Model\Resource\Rule\CollectionFactory')
+        $ruleCollectionFactoryMock =
+            $this->getMockBuilder('Magento\SalesRule\Model\ResourceModel\Rule\CollectionFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -525,7 +526,7 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
 
         $addressMock = $this->getMockBuilder('Magento\Quote\Model\Quote\Address')
             ->disableOriginalConstructor()
-            ->setMethods(['getShippingAmountForDiscount', 'getQuote'])
+            ->setMethods(['getShippingAmountForDiscount', 'getQuote', 'getCustomAttributesCodes'])
             ->getMock();
         $addressMock->expects($this->any())
             ->method('getShippingAmountForDiscount')
@@ -533,6 +534,9 @@ class ValidatorTest extends \PHPUnit_Framework_TestCase
         $addressMock->expects($this->any())
             ->method('getQuote')
             ->willReturn($quoteMock);
+        $addressMock->expects($this->any())
+            ->method('getCustomAttributesCodes')
+            ->willReturn([]);
         return $addressMock;
     }
 
diff --git a/app/code/Magento/SalesRule/Test/Unit/Observer/CatalogAttributeDeleteAfterObserverTest.php b/app/code/Magento/SalesRule/Test/Unit/Observer/CatalogAttributeDeleteAfterObserverTest.php
index 2260db87a24b15c2c86d839d90021b256debad2f..f01054103e5fcdf739da69293522fd1a212b3ba7 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Observer/CatalogAttributeDeleteAfterObserverTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Observer/CatalogAttributeDeleteAfterObserverTest.php
@@ -47,7 +47,7 @@ class CatalogAttributeDeleteAfterObserverTest extends \PHPUnit_Framework_TestCas
         $observer = $this->getMock('Magento\Framework\Event\Observer', [], [], '', false);
         $event = $this->getMock('Magento\Framework\Event', ['getAttribute', '__wakeup'], [], '', false);
         $attribute = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['dataHasChangedFor', 'getIsUsedForPromoRules', 'getAttributeCode', '__wakeup'],
             [],
             '',
diff --git a/app/code/Magento/SalesRule/Test/Unit/Observer/CatalogAttributeSaveAfterObserverTest.php b/app/code/Magento/SalesRule/Test/Unit/Observer/CatalogAttributeSaveAfterObserverTest.php
index ae070a7a893efd196870e199442af7a9569396a3..b089c880fce4e147a38e1082360f9abb7a8bac2f 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Observer/CatalogAttributeSaveAfterObserverTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Observer/CatalogAttributeSaveAfterObserverTest.php
@@ -48,7 +48,7 @@ class CatalogAttributeSaveAfterObserverTest extends \PHPUnit_Framework_TestCase
         $observer = $this->getMock('Magento\Framework\Event\Observer', [], [], '', false);
         $event = $this->getMock('Magento\Framework\Event', ['getAttribute', '__wakeup'], [], '', false);
         $attribute = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['dataHasChangedFor', 'getIsUsedForPromoRules', 'getAttributeCode', '__wakeup'],
             [],
             '',
diff --git a/app/code/Magento/SalesRule/Test/Unit/Observer/SalesOrderAfterPlaceObserverTest.php b/app/code/Magento/SalesRule/Test/Unit/Observer/SalesOrderAfterPlaceObserverTest.php
index 9cf4c56102536dfe6d8ed555a0d2f8fcc13a8926..ea5f29203970fba3ffd172039e9d9a839a77d386 100644
--- a/app/code/Magento/SalesRule/Test/Unit/Observer/SalesOrderAfterPlaceObserverTest.php
+++ b/app/code/Magento/SalesRule/Test/Unit/Observer/SalesOrderAfterPlaceObserverTest.php
@@ -29,7 +29,7 @@ class SalesOrderAfterPlaceObserverTest extends \PHPUnit_Framework_TestCase
 
 
     /**
-     * @var \Magento\SalesRule\Model\Resource\Coupon\Usage|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\SalesRule\Model\ResourceModel\Coupon\Usage|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $couponUsage;
 
@@ -76,7 +76,7 @@ class SalesOrderAfterPlaceObserverTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->couponUsage = $this->getMock('Magento\SalesRule\Model\Resource\Coupon\Usage', [], [], '', false);
+        $this->couponUsage = $this->getMock('Magento\SalesRule\Model\ResourceModel\Coupon\Usage', [], [], '', false);
     }
 
     /**
diff --git a/app/code/Magento/SalesRule/composer.json b/app/code/Magento/SalesRule/composer.json
index 681974c676cdc424cdaa1533fd0c693aad03c9ff..fb676265acfa072bb71be278f4f349580f471ea9 100644
--- a/app/code/Magento/SalesRule/composer.json
+++ b/app/code/Magento/SalesRule/composer.json
@@ -20,6 +20,9 @@
         "magento/module-quote": "1.0.0-beta",
         "magento/framework": "1.0.0-beta"
     },
+    "suggest": {
+        "magento/module-sales-rule-sample-data": "Sample Data version:1.0.0-beta"
+    },
     "type": "magento2-module",
     "version": "1.0.0-beta",
     "license": [
diff --git a/app/code/Magento/SalesRule/etc/adminhtml/events.xml b/app/code/Magento/SalesRule/etc/adminhtml/events.xml
index e1437b91da7525bfcfc23c9b82f500f0a29470cf..3cb7b8e096112b7aef993e6f919e38fff9384c4d 100644
--- a/app/code/Magento/SalesRule/etc/adminhtml/events.xml
+++ b/app/code/Magento/SalesRule/etc/adminhtml/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_entity_attribute_delete_after">
-        <observer name="salesrule" instance="Magento\SalesRule\Observer\CatalogAttributeDeleteAfterObserver" method="execute" />
+        <observer name="salesrule" instance="Magento\SalesRule\Observer\CatalogAttributeDeleteAfterObserver" />
     </event>
     <event name="catalog_entity_attribute_save_after">
-        <observer name="salesrule" instance="Magento\SalesRule\Observer\CatalogAttributeSaveAfterObserver" method="execute" />
+        <observer name="salesrule" instance="Magento\SalesRule\Observer\CatalogAttributeSaveAfterObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/SalesRule/etc/di.xml b/app/code/Magento/SalesRule/etc/di.xml
index a80e3e7257d3f8aef071576119c7f9c1f7351891..69970e486d2d01ed52849937e7ad404917f26301 100644
--- a/app/code/Magento/SalesRule/etc/di.xml
+++ b/app/code/Magento/SalesRule/etc/di.xml
@@ -21,7 +21,7 @@
     <preference for="Magento\SalesRule\Api\CouponRepositoryInterface"
                 type="Magento\SalesRule\Model\CouponRepository" />
     <preference for="Magento\SalesRule\Model\Spi\CouponResourceInterface"
-                type="Magento\SalesRule\Model\Resource\Coupon" />
+                type="Magento\SalesRule\Model\ResourceModel\Coupon" />
     <preference for="Magento\SalesRule\Api\Data\CouponSearchResultInterface"
                 type="Magento\Framework\Api\SearchResults" />
     <preference for="Magento\SalesRule\Api\Data\CouponGenerationSpecInterface"
@@ -42,7 +42,7 @@
             </argument>
         </arguments>
     </type>
-    <type name="Magento\SalesRule\Model\Resource\Rule\Collection" shared="false" />
+    <type name="Magento\SalesRule\Model\ResourceModel\Rule\Collection" shared="false" />
     <type name="Magento\Quote\Model\Quote\Config">
         <plugin name="append_sales_rule_keys_to_quote" type="Magento\SalesRule\Model\Plugin\QuoteConfigProductAttributes"/>
     </type>
@@ -60,17 +60,17 @@
             </argument>
         </arguments>
     </type>
-    <type name="Magento\SalesRule\Model\Resource\Report\Rule">
+    <type name="Magento\SalesRule\Model\ResourceModel\Report\Rule">
         <arguments>
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
     </type>
-    <type name="Magento\SalesRule\Model\Resource\Report\Rule\Createdat">
+    <type name="Magento\SalesRule\Model\ResourceModel\Report\Rule\Createdat">
         <arguments>
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
     </type>
-    <type name="Magento\SalesRule\Model\Resource\Report\Rule\Updatedat">
+    <type name="Magento\SalesRule\Model\ResourceModel\Report\Rule\Updatedat">
         <arguments>
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
diff --git a/app/code/Magento/SalesRule/etc/events.xml b/app/code/Magento/SalesRule/etc/events.xml
index ccba6b27b1b31aa57a769e9741f3188548b22710..df797ce4f1954faf10d3f9eb231b1cd63b66b29a 100644
--- a/app/code/Magento/SalesRule/etc/events.xml
+++ b/app/code/Magento/SalesRule/etc/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="sales_order_place_after">
-        <observer name="salesrule" instance="Magento\SalesRule\Observer\SalesOrderAfterPlaceObserver" method="execute" />
+        <observer name="salesrule" instance="Magento\SalesRule\Observer\SalesOrderAfterPlaceObserver" />
     </event>
     <event name="sales_model_service_quote_submit_before">
-        <observer name="salesrule" instance="Magento\SalesRule\Observer\AddSalesRuleNameToOrderObserver" method="execute" />
+        <observer name="salesrule" instance="Magento\SalesRule\Observer\AddSalesRuleNameToOrderObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/SalesRule/etc/frontend/di.xml b/app/code/Magento/SalesRule/etc/frontend/di.xml
index 3b980e3cb0661fc3573c1b3be3369a033f0175a4..7f0dd329bddfc5eafcec1a9877f097fceb58348b 100644
--- a/app/code/Magento/SalesRule/etc/frontend/di.xml
+++ b/app/code/Magento/SalesRule/etc/frontend/di.xml
@@ -6,8 +6,8 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
-    <type name="Magento\SalesRule\Model\Resource\Rule">
-        <plugin name="catalog_rule_resource_rule_after_loader" type="Magento\SalesRule\Model\Plugin\Resource\Rule"/>
+    <type name="Magento\SalesRule\Model\ResourceModel\Rule">
+        <plugin name="catalog_rule_resource_rule_after_loader" type="Magento\SalesRule\Model\Plugin\ResourceModel\Rule"/>
     </type>
     <type name="Magento\SalesRule\Model\Rule">
         <plugin name="catalog_rule_model_Rule_after_loader" type="Magento\SalesRule\Model\Plugin\Rule"/>
diff --git a/app/code/Magento/SalesRule/view/adminhtml/layout/sales_rule_promo_quote_index.xml b/app/code/Magento/SalesRule/view/adminhtml/layout/sales_rule_promo_quote_index.xml
index f1b4a15f17c19af213864c213f766d80fd1c61be..3bdb9332a23c3d7a93d244e07f26ae9c44f431d0 100644
--- a/app/code/Magento/SalesRule/view/adminhtml/layout/sales_rule_promo_quote_index.xml
+++ b/app/code/Magento/SalesRule/view/adminhtml/layout/sales_rule_promo_quote_index.xml
@@ -12,7 +12,7 @@
                 <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.block.promo.quote.grid" as="grid">
                     <arguments>
                         <argument name="id" xsi:type="string">promo_quote_grid</argument>
-                        <argument name="dataSource" xsi:type="object">Magento\SalesRule\Model\Resource\Rule\Quote\Collection</argument>
+                        <argument name="dataSource" xsi:type="object">Magento\SalesRule\Model\ResourceModel\Rule\Quote\Collection</argument>
                         <argument name="default_sort" xsi:type="string">sort_order</argument>
                         <argument name="default_dir" xsi:type="string">ASC</argument>
                         <argument name="save_parameters_in_session" xsi:type="string">1</argument>
diff --git a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
index f2a8fc4b3f05836448233f3d45264c1043081ada..329ef5513920b13295bcc86a8e435a36a1e658c3 100644
--- a/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
+++ b/app/code/Magento/SalesRule/view/adminhtml/templates/promo/salesrulejs.phtml
@@ -5,7 +5,12 @@
  */
 ?>
 <script>
-require(['jquery', "prototype"], function(jQuery){
+require([
+    'jquery',
+    "uiRegistry",
+    'Magento_Ui/js/modal/alert',
+    'prototype'
+], function(jQuery, registry, alert){
 
 //<![CDATA[
 var couponTypeSpecific = '<?php /* @escapeNotVerified */ echo \Magento\SalesRule\Model\Rule::COUPON_TYPE_SPECIFIC ?>',
@@ -80,7 +85,11 @@ function generateCouponCodes(idPrefix, generateUrl, grid) {
         onComplete : function (transport, param){
             var response = false;
             if (transport && transport.responseText) {
-                response = eval('(' + transport.responseText + ')');
+                try {
+                    response = JSON.parse(transport.responseText);
+                } catch (e) {
+                    console.warn('An error occured while parsing response');
+                }
             }
             if (couponCodesGrid) {
                 couponCodesGrid.reload();
@@ -93,7 +102,9 @@ function generateCouponCodes(idPrefix, generateUrl, grid) {
                 }
             }
             if (response && response.error) {
-                alert(response.error);
+                alert({
+                    content: response.error
+                });
             }
         }
     });
@@ -116,7 +127,7 @@ window.handleCouponTypeChange = handleCouponTypeChange;
 window.handleCouponsTabContentActivity = handleCouponsTabContentActivity;
 window.disableEnableCouponsTabContent = disableEnableCouponsTabContent;
 
-jQuery(window).load(function(){
+registry.get('formDependenceController', function() {
     handleCouponsTabContentActivity();
     handleCouponTypeChange();
 });
diff --git a/app/code/Magento/SalesSequence/Model/Builder.php b/app/code/Magento/SalesSequence/Model/Builder.php
index a77be81f53371e5afcbce8e60a877e59708b65ab..643c704874fccc8ec96a4dc726bcecf8bb8da3d9 100644
--- a/app/code/Magento/SalesSequence/Model/Builder.php
+++ b/app/code/Magento/SalesSequence/Model/Builder.php
@@ -6,8 +6,8 @@
 namespace Magento\SalesSequence\Model;
 
 use Magento\Framework\Webapi\Exception;
-use Magento\SalesSequence\Model\Resource\Meta as ResourceMetadata;
-use Magento\Framework\App\Resource as AppResource;
+use Magento\SalesSequence\Model\ResourceModel\Meta as ResourceMetadata;
+use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\Framework\DB\Ddl\Sequence as DdlSequence;
 use Psr\Log\LoggerInterface as Logger;
 
diff --git a/app/code/Magento/SalesSequence/Model/Manager.php b/app/code/Magento/SalesSequence/Model/Manager.php
index d6590d6624ac8342a21e9dfef9eb92f52fb980e8..6f5d194908d60471c624393a4be01369558e58f1 100644
--- a/app/code/Magento/SalesSequence/Model/Manager.php
+++ b/app/code/Magento/SalesSequence/Model/Manager.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\SalesSequence\Model;
 
-use Magento\SalesSequence\Model\Resource\Meta as ResourceSequenceMeta;
+use Magento\SalesSequence\Model\ResourceModel\Meta as ResourceSequenceMeta;
 
 /**
  * Class Manager
diff --git a/app/code/Magento/SalesSequence/Model/Meta.php b/app/code/Magento/SalesSequence/Model/Meta.php
index 8f1c216619f0a0b65125f8fe156b43072f3b8430..582f8591634088959e3bf6b229e8ce9006271f3e 100644
--- a/app/code/Magento/SalesSequence/Model/Meta.php
+++ b/app/code/Magento/SalesSequence/Model/Meta.php
@@ -17,6 +17,6 @@ class Meta extends AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\SalesSequence\Model\Resource\Meta');
+        $this->_init('Magento\SalesSequence\Model\ResourceModel\Meta');
     }
 }
diff --git a/app/code/Magento/SalesSequence/Model/Profile.php b/app/code/Magento/SalesSequence/Model/Profile.php
index b6db02e4805bd53b142566e91d345e536f3d80c8..6f50f02a804451b136f9094f43234d290d6816f7 100644
--- a/app/code/Magento/SalesSequence/Model/Profile.php
+++ b/app/code/Magento/SalesSequence/Model/Profile.php
@@ -17,6 +17,6 @@ class Profile extends AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\SalesSequence\Model\Resource\Profile');
+        $this->_init('Magento\SalesSequence\Model\ResourceModel\Profile');
     }
 }
diff --git a/app/code/Magento/SalesSequence/Model/Resource/Meta.php b/app/code/Magento/SalesSequence/Model/ResourceModel/Meta.php
similarity index 93%
rename from app/code/Magento/SalesSequence/Model/Resource/Meta.php
rename to app/code/Magento/SalesSequence/Model/ResourceModel/Meta.php
index f5fbf4398240a87b347ce34859af017385e72ef4..68d2e73be0f8fbb254b47af2f8609dd334fee259 100644
--- a/app/code/Magento/SalesSequence/Model/Resource/Meta.php
+++ b/app/code/Magento/SalesSequence/Model/ResourceModel/Meta.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesSequence\Model\Resource;
+namespace Magento\SalesSequence\Model\ResourceModel;
 
 use Magento\Framework\Exception\LocalizedException as Exception;
 use Magento\Framework\Exception\NoSuchEntityException;
-use Magento\Framework\Model\Resource\Db\Context as DatabaseContext;
-use Magento\SalesSequence\Model\Resource\Profile as ResourceProfile;
+use Magento\Framework\Model\ResourceModel\Db\Context as DatabaseContext;
+use Magento\SalesSequence\Model\ResourceModel\Profile as ResourceProfile;
 use Magento\SalesSequence\Model\MetaFactory;
 use Magento\SalesSequence\Model\Profile as ModelProfile;
 
 /**
  * Class Meta represents metadata for sequence as sequence table and store id
  */
-class Meta extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Meta extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Event prefix
diff --git a/app/code/Magento/SalesSequence/Model/Resource/Profile.php b/app/code/Magento/SalesSequence/Model/ResourceModel/Profile.php
similarity index 90%
rename from app/code/Magento/SalesSequence/Model/Resource/Profile.php
rename to app/code/Magento/SalesSequence/Model/ResourceModel/Profile.php
index e6fd53aebdae2b6a7ac4a25f83c5d165831229b4..cfb57ae81f3d970179a48eacc09fae8ad9ca0803 100644
--- a/app/code/Magento/SalesSequence/Model/Resource/Profile.php
+++ b/app/code/Magento/SalesSequence/Model/ResourceModel/Profile.php
@@ -3,16 +3,16 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesSequence\Model\Resource;
+namespace Magento\SalesSequence\Model\ResourceModel;
 
 use Magento\SalesSequence\Model\Meta as ModelMeta;
-use Magento\Framework\Model\Resource\Db\Context as DatabaseContext;
+use Magento\Framework\Model\ResourceModel\Db\Context as DatabaseContext;
 use Magento\SalesSequence\Model\ProfileFactory;
 
 /**
  * Class Profile represents profile data for sequence as prefix, suffix, start value etc.
  */
-class Profile extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Profile extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Event prefix
diff --git a/app/code/Magento/SalesSequence/Model/Sequence.php b/app/code/Magento/SalesSequence/Model/Sequence.php
index 242dc3de97cf1559b74c98e9c4550cdb571e94c2..7928268ea6c7f06d984102eee5687f0d06587607 100644
--- a/app/code/Magento/SalesSequence/Model/Sequence.php
+++ b/app/code/Magento/SalesSequence/Model/Sequence.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\SalesSequence\Model;
 
-use Magento\Framework\App\Resource as AppResource;
+use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\Framework\DB\Sequence\SequenceInterface;
 
 /**
diff --git a/app/code/Magento/SalesSequence/Test/Unit/Model/BuilderTest.php b/app/code/Magento/SalesSequence/Test/Unit/Model/BuilderTest.php
index ba5bba1a493d7373b378719c9692835073bbc992..536c196bbc4d78aec0a6f242e846000b6c495e51 100644
--- a/app/code/Magento/SalesSequence/Test/Unit/Model/BuilderTest.php
+++ b/app/code/Magento/SalesSequence/Test/Unit/Model/BuilderTest.php
@@ -16,7 +16,7 @@ class BuilderTest extends \PHPUnit_Framework_TestCase
     private $sequenceBuilder;
 
     /**
-     * @var \Magento\SalesSequence\Model\Resource\Meta | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\SalesSequence\Model\ResourceModel\Meta | \PHPUnit_Framework_MockObject_MockObject
      */
     private $resourceSequenceMeta;
 
@@ -51,7 +51,7 @@ class BuilderTest extends \PHPUnit_Framework_TestCase
     private $sequence;
 
     /**
-     * @var \Magento\Framework\App\Resource | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection | \PHPUnit_Framework_MockObject_MockObject
      */
     private $resourceMock;
 
@@ -67,7 +67,7 @@ class BuilderTest extends \PHPUnit_Framework_TestCase
             ['query']
         );
         $this->resourceSequenceMeta = $this->getMock(
-            'Magento\SalesSequence\Model\Resource\Meta',
+            'Magento\SalesSequence\Model\ResourceModel\Meta',
             ['loadByEntityTypeAndStore', 'save', 'createSequence'],
             [],
             '',
@@ -88,7 +88,7 @@ class BuilderTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
diff --git a/app/code/Magento/SalesSequence/Test/Unit/Model/ManagerTest.php b/app/code/Magento/SalesSequence/Test/Unit/Model/ManagerTest.php
index 159a3d7b9253852e02f8032aeee53ec13a1963ac..d2ba2483e1c7c849ed4a2ad020d5a2a6ccab378c 100644
--- a/app/code/Magento/SalesSequence/Test/Unit/Model/ManagerTest.php
+++ b/app/code/Magento/SalesSequence/Test/Unit/Model/ManagerTest.php
@@ -11,7 +11,7 @@ namespace Magento\SalesSequence\Test\Unit\Model;
 class ManagerTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\SalesSequence\Model\Resource\Meta | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\SalesSequence\Model\ResourceModel\Meta | \PHPUnit_Framework_MockObject_MockObject
      */
     private $resourceSequenceMeta;
 
@@ -56,7 +56,7 @@ class ManagerTest extends \PHPUnit_Framework_TestCase
             []
         );
         $this->resourceSequenceMeta = $this->getMock(
-            'Magento\SalesSequence\Model\Resource\Meta',
+            'Magento\SalesSequence\Model\ResourceModel\Meta',
             ['loadByEntityTypeAndStore'],
             [],
             '',
diff --git a/app/code/Magento/SalesSequence/Test/Unit/Model/Resource/MetaTest.php b/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/MetaTest.php
similarity index 90%
rename from app/code/Magento/SalesSequence/Test/Unit/Model/Resource/MetaTest.php
rename to app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/MetaTest.php
index 9b8f56282596c674115dbed49a9d8dd428b79b3e..250eab5f505b393e9940cc3b98debb948010a215 100644
--- a/app/code/Magento/SalesSequence/Test/Unit/Model/Resource/MetaTest.php
+++ b/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/MetaTest.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesSequence\Test\Unit\Model\Resource;
+namespace Magento\SalesSequence\Test\Unit\Model\ResourceModel;
 
-use Magento\Framework\App\Resource;
-use Magento\SalesSequence\Model\Resource\Meta;
+use Magento\Framework\App\ResourceConnection;
+use Magento\SalesSequence\Model\ResourceModel\Meta;
 
 /**
  * Class MetaTest
@@ -19,7 +19,7 @@ class MetaTest extends \PHPUnit_Framework_TestCase
     private $connectionMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\Context | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\Context | \PHPUnit_Framework_MockObject_MockObject
      */
     private $dbContext;
 
@@ -39,7 +39,7 @@ class MetaTest extends \PHPUnit_Framework_TestCase
     private $profile;
 
     /**
-     * @var \Magento\SalesSequence\Model\Resource\Profile | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\SalesSequence\Model\ResourceModel\Profile | \PHPUnit_Framework_MockObject_MockObject
      */
     private $resourceProfile;
 
@@ -73,7 +73,7 @@ class MetaTest extends \PHPUnit_Framework_TestCase
             ['query']
         );
         $this->dbContext = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\Context',
+            'Magento\Framework\Model\ResourceModel\Db\Context',
             [],
             [],
             '',
@@ -87,14 +87,14 @@ class MetaTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceProfile = $this->getMock(
-            'Magento\SalesSequence\Model\Resource\Profile',
+            'Magento\SalesSequence\Model\ResourceModel\Profile',
             ['loadActiveProfile', 'save'],
             [],
             '',
             false
         );
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             ['getConnection', 'getTableName'],
             [],
             '',
diff --git a/app/code/Magento/SalesSequence/Test/Unit/Model/Resource/ProfileTest.php b/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/ProfileTest.php
similarity index 92%
rename from app/code/Magento/SalesSequence/Test/Unit/Model/Resource/ProfileTest.php
rename to app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/ProfileTest.php
index 0a2da20f45a0d144b99ee6e8e6361a6fa5760adb..8945f7adb8681fb798dffe9614e77dbe95d47d61 100644
--- a/app/code/Magento/SalesSequence/Test/Unit/Model/Resource/ProfileTest.php
+++ b/app/code/Magento/SalesSequence/Test/Unit/Model/ResourceModel/ProfileTest.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesSequence\Test\Unit\Model\Resource;
+namespace Magento\SalesSequence\Test\Unit\Model\ResourceModel;
 
-use Magento\SalesSequence\Model\Resource\Profile;
+use Magento\SalesSequence\Model\ResourceModel\Profile;
 
 /**
  * Class ProfileTest
@@ -18,7 +18,7 @@ class ProfileTest extends \PHPUnit_Framework_TestCase
     private $connectionMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\Context | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\Context | \PHPUnit_Framework_MockObject_MockObject
      */
     private $dbContext;
 
@@ -67,7 +67,7 @@ class ProfileTest extends \PHPUnit_Framework_TestCase
             ['query']
         );
         $this->dbContext = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\Context',
+            'Magento\Framework\Model\ResourceModel\Db\Context',
             [],
             [],
             '',
@@ -81,7 +81,7 @@ class ProfileTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             ['getConnection', 'getTableName'],
             [],
             '',
diff --git a/app/code/Magento/SalesSequence/Test/Unit/Model/SequenceTest.php b/app/code/Magento/SalesSequence/Test/Unit/Model/SequenceTest.php
index 30d8952db68ad01a83175095b0f5880d4915538d..8439db23ed45c28f30ad909b59d45137dafc8e9d 100644
--- a/app/code/Magento/SalesSequence/Test/Unit/Model/SequenceTest.php
+++ b/app/code/Magento/SalesSequence/Test/Unit/Model/SequenceTest.php
@@ -17,7 +17,7 @@ class SequenceTest extends \PHPUnit_Framework_TestCase
      */
     private $connectionMock;
     /**
-     * @var \Magento\Framework\App\Resource | \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection | \PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
 
@@ -53,7 +53,7 @@ class SequenceTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resource = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             ['getConnection'],
             [],
             '',
diff --git a/app/code/Magento/SampleData/Console/Command/SampleDataDeployCommand.php b/app/code/Magento/SampleData/Console/Command/SampleDataDeployCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..8b3ca20ca09c9ba8d88a25c55fc5edc25b1867cf
--- /dev/null
+++ b/app/code/Magento/SampleData/Console/Command/SampleDataDeployCommand.php
@@ -0,0 +1,104 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\SampleData\Console\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Magento\SampleData\Model\Dependency;
+use Magento\Framework\App\State;
+use Symfony\Component\Console\Input\ArrayInput;
+use Symfony\Component\Console\Input\ArrayInputFactory;
+use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\Framework\Filesystem;
+use Composer\Console\Application;
+use Composer\Console\ApplicationFactory;
+
+/**
+ * Command for deployment of Sample Data
+ */
+class SampleDataDeployCommand extends Command
+{
+    /**
+     * @var Filesystem
+     */
+    private $filesystem;
+
+    /**
+     * @var Dependency
+     */
+    private $sampleDataDependency;
+
+    /**
+     * @var ArrayInputFactory
+     */
+    private $arrayInputFactory;
+
+    /**
+     * @var ApplicationFactory
+     */
+    private $applicationFactory;
+
+    /**
+     * @param Filesystem $filesystem
+     * @param Dependency $sampleDataDependency
+     * @param ArrayInputFactory $arrayInputFactory
+     * @param ApplicationFactory $applicationFactory
+     */
+    public function __construct(
+        Filesystem $filesystem,
+        Dependency $sampleDataDependency,
+        ArrayInputFactory $arrayInputFactory,
+        ApplicationFactory $applicationFactory
+    ) {
+        $this->filesystem = $filesystem;
+        $this->sampleDataDependency = $sampleDataDependency;
+        $this->arrayInputFactory = $arrayInputFactory;
+        $this->applicationFactory = $applicationFactory;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('sampledata:deploy')
+            ->setDescription('Deploy sample data modules');
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $sampleDataPackages = $this->sampleDataDependency->getSampleDataPackages();
+        if (!empty($sampleDataPackages)) {
+            $baseDir = $this->filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath();
+            $commonArgs = ['--working-dir' => $baseDir, '--no-interaction' => 1, '--no-progress' => 1];
+            $packages = [];
+            foreach ($sampleDataPackages as $name => $version) {
+                $packages[] = "$name:$version";
+            }
+            $commonArgs = array_merge(['packages' => $packages], $commonArgs);
+            $arguments = array_merge(['command' => 'require'], $commonArgs);
+            /** @var ArrayInput $commandInput */
+            $commandInput = $this->arrayInputFactory->create(['parameters' => $arguments]);
+
+            /** @var Application $application */
+            $application = $this->applicationFactory->create();
+            $application->setAutoExit(false);
+            $result = $application->run($commandInput, $output);
+            if ($result !== 0) {
+                $output->writeln('<info>' . 'There is an error during sample data deployment.' . '</info>');
+            }
+        } else {
+            $output->writeln('<info>' . 'There is no sample data for current set of modules.' . '</info>');
+        }
+    }
+}
diff --git a/app/code/Magento/SampleData/Console/Command/SampleDataRemoveCommand.php b/app/code/Magento/SampleData/Console/Command/SampleDataRemoveCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..d5c2bbfd37ec6a06532c633ca910b84d323a8875
--- /dev/null
+++ b/app/code/Magento/SampleData/Console/Command/SampleDataRemoveCommand.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\SampleData\Console\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Magento\SampleData\Model\Dependency;
+use Symfony\Component\Console\Input\ArrayInput;
+use Symfony\Component\Console\Input\ArrayInputFactory;
+use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\Framework\Filesystem;
+use Composer\Console\Application;
+use Composer\Console\ApplicationFactory;
+
+/**
+ * Command for remove Sample Data packages
+ */
+class SampleDataRemoveCommand extends Command
+{
+    /**
+     * @var Filesystem
+     */
+    private $filesystem;
+
+    /**
+     * @var Dependency
+     */
+    private $sampleDataDependency;
+
+    /**
+     * @var ArrayInputFactory
+     */
+    private $arrayInputFactory;
+
+    /**
+     * @var ApplicationFactory
+     */
+    private $applicationFactory;
+
+    /**
+     * @param Filesystem $filesystem
+     * @param Dependency $sampleDataDependency
+     * @param ArrayInputFactory $arrayInputFactory
+     * @param ApplicationFactory $applicationFactory
+     */
+    public function __construct(
+        Filesystem $filesystem,
+        Dependency $sampleDataDependency,
+        ArrayInputFactory $arrayInputFactory,
+        ApplicationFactory $applicationFactory
+    ) {
+        $this->filesystem = $filesystem;
+        $this->sampleDataDependency = $sampleDataDependency;
+        $this->arrayInputFactory = $arrayInputFactory;
+        $this->applicationFactory = $applicationFactory;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('sampledata:remove')
+            ->setDescription('Remove all sample data packages from composer.json');
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $sampleDataPackages = $this->sampleDataDependency->getSampleDataPackages();
+        if (!empty($sampleDataPackages)) {
+            $baseDir = $this->filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath();
+            $commonArgs = ['--working-dir' => $baseDir, '--no-interaction' => 1, '--no-progress' => 1];
+            $packages = array_keys($sampleDataPackages);
+            $arguments = array_merge(['command' => 'remove', 'packages' => $packages], $commonArgs);
+            /** @var ArrayInput $commandInput */
+            $commandInput = $this->arrayInputFactory->create(['parameters' => $arguments]);
+
+            /** @var Application $application */
+            $application = $this->applicationFactory->create();
+            $application->setAutoExit(false);
+            $result = $application->run($commandInput, $output);
+            if ($result !== 0) {
+                $output->writeln('<info>' . 'There is an error during remove sample data.' . '</info>');
+            }
+        } else {
+            $output->writeln('<info>' . 'There is no sample data for current set of modules.' . '</info>');
+        }
+    }
+}
diff --git a/app/code/Magento/SampleData/Console/Command/SampleDataResetCommand.php b/app/code/Magento/SampleData/Console/Command/SampleDataResetCommand.php
new file mode 100644
index 0000000000000000000000000000000000000000..07777fca6e5231c6412a15969655a5114518facf
--- /dev/null
+++ b/app/code/Magento/SampleData/Console/Command/SampleDataResetCommand.php
@@ -0,0 +1,76 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\SampleData\Console\Command;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Magento\SampleData\Model\Dependency;
+
+/**
+ * Command for reset Sample Data modules version
+ */
+class SampleDataResetCommand extends Command
+{
+    /**
+     * @var Dependency
+     */
+    private $sampleDataDependency;
+
+    /**
+     * @var \Magento\Framework\Module\ModuleResource
+     */
+    private $moduleResource;
+
+    /**
+     * @var \Magento\Framework\Module\PackageInfo
+     */
+    private $packageInfo;
+
+    /**
+     * @param Dependency $sampleDataDependency
+     * @param \Magento\Framework\Module\ModuleResource $moduleResource
+     * @param \Magento\Framework\Module\PackageInfo $packageInfo
+     */
+    public function __construct(
+        Dependency $sampleDataDependency,
+        \Magento\Framework\Module\ModuleResource $moduleResource,
+        \Magento\Framework\Module\PackageInfo $packageInfo
+    ) {
+        $this->sampleDataDependency = $sampleDataDependency;
+        $this->moduleResource = $moduleResource;
+        $this->packageInfo = $packageInfo;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this->setName('sampledata:reset')
+            ->setDescription('Reset all sample data modules for re-installation');
+        parent::configure();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $sampleDataPackages = $this->sampleDataDependency->getSampleDataPackages();
+        if (!empty($sampleDataPackages)) {
+            foreach (array_keys($sampleDataPackages) as $name) {
+                $moduleName = $this->packageInfo->getModuleName($name);
+                $this->moduleResource->setDataVersion($moduleName, '');
+            }
+            $output->writeln('<info>' . 'Reset of sample data version completed successfully.' . '</info>');
+        } else {
+            $output->writeln('<info>' . 'There is no sample data for current set of modules.' . '</info>');
+        }
+    }
+}
diff --git a/app/code/Magento/SampleData/Console/CommandList.php b/app/code/Magento/SampleData/Console/CommandList.php
new file mode 100644
index 0000000000000000000000000000000000000000..c6a4df47af8bfa29457e92fa4c0be9d955915604
--- /dev/null
+++ b/app/code/Magento/SampleData/Console/CommandList.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\SampleData\Console;
+
+use Magento\Framework\ObjectManagerInterface;
+
+/**
+ * Class CommandList
+ */
+class CommandList implements \Magento\Framework\Console\CommandListInterface
+{
+    /**
+     * Object Manager
+     *
+     * @var ObjectManagerInterface
+     */
+    private $objectManager;
+
+    /**
+     * @param ObjectManagerInterface $objectManager
+     */
+    public function __construct(ObjectManagerInterface $objectManager)
+    {
+        $this->objectManager = $objectManager;
+    }
+
+    /**
+     * Gets list of command classes
+     *
+     * @return string[]
+     */
+    protected function getCommandsClasses()
+    {
+        return [
+            'Magento\SampleData\Console\Command\SampleDataDeployCommand',
+            'Magento\SampleData\Console\Command\SampleDataRemoveCommand'
+        ];
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getCommands()
+    {
+        $commands = [];
+        foreach ($this->getCommandsClasses() as $class) {
+            if (class_exists($class)) {
+                $commands[] = $this->objectManager->get($class);
+            } else {
+                throw new \Exception('Class ' . $class . ' does not exist');
+            }
+        }
+        return $commands;
+    }
+}
diff --git a/app/code/Magento/SampleData/Model/Dependency.php b/app/code/Magento/SampleData/Model/Dependency.php
new file mode 100644
index 0000000000000000000000000000000000000000..81dffb3d20f8b0053556850602623d56740e88e1
--- /dev/null
+++ b/app/code/Magento/SampleData/Model/Dependency.php
@@ -0,0 +1,111 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\SampleData\Model;
+
+use Magento\Framework\Component\ComponentRegistrar;
+use Magento\Framework\Composer\ComposerInformation;
+use Magento\Framework\Filesystem;
+use Magento\Framework\Config\Composer\Package;
+use Magento\Framework\Config\Composer\PackageFactory;
+
+/**
+ * Sample Data dependency
+ */
+class Dependency
+{
+    /**
+     * Sample data version text
+     */
+    const SAMPLE_DATA_SUGGEST = 'Sample Data version:';
+
+    /**
+     * @var ComposerInformation
+     */
+    protected $composerInformation;
+
+    /**
+     * @var Filesystem
+     */
+    private $filesystem;
+
+    /**
+     * @var PackageFactory
+     */
+    private $packageFactory;
+
+    /**
+     * @var ComponentRegistrar
+     */
+    private $componentRegistrar;
+
+    /**
+     * @param ComposerInformation $composerInformation
+     * @param Filesystem $filesystem
+     * @param PackageFactory $packageFactory
+     * @param ComponentRegistrar $componentRegistrar
+     */
+    public function __construct(
+        ComposerInformation $composerInformation,
+        Filesystem $filesystem,
+        PackageFactory $packageFactory,
+        ComponentRegistrar $componentRegistrar
+    ) {
+        $this->composerInformation = $composerInformation;
+        $this->filesystem = $filesystem;
+        $this->packageFactory = $packageFactory;
+        $this->componentRegistrar = $componentRegistrar;
+    }
+
+    /**
+     * Retrieve list of sample data packages from suggests
+     *
+     * @return array
+     */
+    public function getSampleDataPackages()
+    {
+        $installExtensions = [];
+        $suggests = $this->composerInformation->getSuggestedPackages();
+        $suggests = array_merge($suggests, $this->getSuggestsFromModules());
+        foreach ($suggests as $name => $version) {
+            if (strpos($version, self::SAMPLE_DATA_SUGGEST) === 0) {
+                $installExtensions[$name] = substr($version, strlen(self::SAMPLE_DATA_SUGGEST));
+            }
+        }
+        return $installExtensions;
+    }
+
+    /**
+     * Retrieve suggested sample data packages from modules composer.json
+     *
+     * @return array
+     */
+    protected function getSuggestsFromModules()
+    {
+        $suggests = [];
+        foreach ($this->componentRegistrar->getPaths(ComponentRegistrar::MODULE) as $moduleDir) {
+            $file = $moduleDir . '/composer.json';
+
+            /** @var Package $package */
+            $package = $this->getModuleComposerPackage($file);
+            $suggest = json_decode(json_encode($package->get('suggest')), true);
+            if (!empty($suggest)) {
+                $suggests += $suggest;
+            }
+        }
+        return $suggests;
+    }
+
+    /**
+     * Load package
+     *
+     * @param string $file
+     * @return Package
+     */
+    protected function getModuleComposerPackage($file)
+    {
+        return $this->packageFactory->create(['json' => json_decode(file_get_contents($file))]);
+    }
+}
diff --git a/app/code/Magento/SampleData/README.md b/app/code/Magento/SampleData/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..3ab503211a258a4f90f21b4e80a0cc728f7a1b8f
--- /dev/null
+++ b/app/code/Magento/SampleData/README.md
@@ -0,0 +1,83 @@
+# Introduction
+
+Magento sample data uses the responsive Luma theme to display a sample store, complete with products, categories, promotional price rules, CMS pages, banners, and so on. You can use the sample data to come up to speed quickly and see the power and flexibility of the Magento storefront.
+
+Installing sample data is optional; you can install it before or after you install the Magento software.
+
+# Deployment
+
+Deployment of Sample Data can be performed in three ways: using Magento CLI, composer and from GitHub repository.
+
+## Using CLI
+
+SampleData module is included to default scope of Magento CE modules. To deploy other sample data modules (e.g. ConfigurableSampleData, CatalogSampleData e.t.c) Magento CLI command can be used:
+
+```
+# bin/magento sampledata:deploy
+```
+
+CLI command collects suggest node from composer.json files of modules which suggest to install sample data:
+
+```
+"suggest": {
+  "magento/module-catalog-sample-data": "Sample Data version:1.0.0-beta"
+}
+```
+
+## Using Composer
+
+Also it's possible to add needed sample data modules manually (via composer require or editing main composer.json file)
+
+1. Specify packages
+```
+{
+    "require": {
+    ...
+       "magento/module-catalog-sample-data": "{version}",
+        "magento/module-configurable-sample-data": "{version}",
+        "magento/module-cms-sample-data": "{version}",
+        "magento/module-sales-sample-data": "{version}"
+        ....
+    }
+ }
+{version} - Go to packages.magento.com and write down suitable versions of magento/sample-data and magento/sample-data-media (typically, you should choose the most recent version).
+```
+2. Run composer update from your Magento root directory
+
+## From GitHub Repository
+
+1. Clone Sample Data from https://github.com/magento/magento2-sample-data
+2. Link Sample Data and Magento Edition using tool <sample-data-ce-root>/dev/tools/build-sample-data.php
+```
+php -f <sample-data-ce-root>/dev/tools/build-sample-data.php -- --ce-source="path/to/magento/ce/edition"
+```
+
+# Installing
+
+Being once deployed the Sample Data is available for installation through the Magento Setup Wizard or using CLI.
+
+## Web Installation
+
+Deployed SampleData modules have been selected to be installed by default. To prepare installation Magento with SampleData finish installation as you do it usual. In success page user will be notified about successfully installed SampleData
+
+## Console Installation
+
+Use Magento CLI installation command to install Magento as usual.
+
+# Uninstalling
+
+There is CLI command which allows to remove all sample data modules from Magento (only for case when sample data was installed via composer):
+
+```
+# bin/magento sampledata:remove
+```
+
+# Re-installation
+
+To prepare sample data for re installation process run:
+
+```
+# bin/magento sampledata:reset
+```
+
+Then install or upgrade Magento as usual
diff --git a/app/code/Magento/SampleData/Setup/InstallData.php b/app/code/Magento/SampleData/Setup/InstallData.php
new file mode 100644
index 0000000000000000000000000000000000000000..734aa424918b307202e442c1736d20126e3c10a7
--- /dev/null
+++ b/app/code/Magento/SampleData/Setup/InstallData.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\SampleData\Setup;
+
+use Magento\Framework\Setup;
+
+/**
+ * Class PostInstallSampleData
+ */
+class InstallData implements Setup\InstallDataInterface
+{
+    /**
+     * @var \Magento\Framework\Setup\SampleData\State
+     */
+    protected $state;
+
+    /**
+     * @param \Magento\Framework\Setup\SampleData\State $state
+     */
+    public function __construct(
+        \Magento\Framework\Setup\SampleData\State $state
+    ) {
+        $this->state = $state;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function install(Setup\ModuleDataSetupInterface $setup, Setup\ModuleContextInterface $moduleContext)
+    {
+        $this->state->clearState();
+    }
+}
diff --git a/app/code/Magento/SampleData/Test/Unit/Console/Command/SampleDataDeployCommandTest.php b/app/code/Magento/SampleData/Test/Unit/Console/Command/SampleDataDeployCommandTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..cbc3d330e725b83c01442658d8636fcf78737971
--- /dev/null
+++ b/app/code/Magento/SampleData/Test/Unit/Console/Command/SampleDataDeployCommandTest.php
@@ -0,0 +1,65 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\SampleData\Test\Unit\Console\Command;
+
+use Magento\Framework\App\Filesystem\DirectoryList;
+use Magento\SampleData\Console\Command\SampleDataDeployCommand;
+use Symfony\Component\Console\Tester\CommandTester;
+
+class SampleDataDeployCommandTest extends \PHPUnit_Framework_TestCase
+{
+    public function testExecute()
+    {
+        $this->markTestSkipped('MAGETWO-43636: This test should be fixed by NORD team');
+        $directoryRead = $this->getMock('\Magento\Framework\Filesystem\Directory\ReadInterface', [], [], '', false);
+        $directoryRead->expects($this->atLeastOnce())->method('getAbsolutePath')->willReturn('/path/to/composer.json');
+
+        $filesystem = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
+        $filesystem->expects($this->atLeastOnce())->method('getDirectoryRead')->with(DirectoryList::ROOT)
+            ->willReturn($directoryRead);
+
+        $sampleDataDependency = $this->getMock('Magento\SampleData\Model\Dependency', [], [], '', false);
+        $sampleDataDependency->expects($this->atLeastOnce())->method('getSampleDataPackages')->willReturn(
+            [
+                'magento/module-cms-sample-data' => '1.0.0-beta'
+            ]
+        );
+
+        $arrayInput = $this->getMock('Symfony\Component\Console\Input\ArrayInput', [], [], '', false);
+
+        $arrayInputFactory = $this
+            ->getMock('Symfony\Component\Console\Input\ArrayInputFactory', ['create'], [], '', false);
+        $requireArgs = [
+            'command' => 'require',
+            '--working-dir' => '/path/to/composer.json',
+            '--no-interaction' => 1,
+            '--no-progress' => 1,
+            'packages' => ['magento/module-cms-sample-data:1.0.0-beta']
+        ];
+        $arrayInputFactory->expects($this->atLeastOnce())
+            ->method('create')
+            ->with(['parameters' => $requireArgs])
+            ->willReturn($arrayInput);
+        $application = $this->getMock('Composer\Console\Application', [], [], '', false);
+        $application->expects($this->atLeastOnce())->method('run')->with($arrayInput, $this->anything())
+            ->willReturnCallback(function ($input, $output) {
+                $input->getFirstArgument();
+                $output->writeln('./composer.json has been updated');
+            });
+
+        $applicationFactory = $this->getMock('Composer\Console\ApplicationFactory', ['create'], [], '', false);
+        $applicationFactory->expects($this->atLeastOnce())->method('create')->willReturn($application);
+
+        $commandTester = new CommandTester(
+            new SampleDataDeployCommand($filesystem, $sampleDataDependency, $arrayInputFactory, $applicationFactory)
+        );
+        $commandTester->execute([]);
+
+        $expectedMsg = './composer.json has been updated' . PHP_EOL;
+
+        $this->assertEquals($expectedMsg, $commandTester->getDisplay());
+    }
+}
diff --git a/app/code/Magento/SampleData/cli_commands.php b/app/code/Magento/SampleData/cli_commands.php
new file mode 100644
index 0000000000000000000000000000000000000000..910351b75fac1db976ca06b6965e7d9e95bd555b
--- /dev/null
+++ b/app/code/Magento/SampleData/cli_commands.php
@@ -0,0 +1,9 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+if (PHP_SAPI == 'cli') {
+    \Magento\Framework\Console\CommandLocator::register('Magento\SampleData\Console\CommandList');
+}
diff --git a/app/code/Magento/SampleData/composer.json b/app/code/Magento/SampleData/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..d0f7006fc2df73edd424ed913d0a8a49d771fa58
--- /dev/null
+++ b/app/code/Magento/SampleData/composer.json
@@ -0,0 +1,26 @@
+{
+    "name": "magento/module-sample-data",
+    "description": "Sample Data fixtures",
+    "require": {
+        "php": "~5.5.0|~5.6.0|~7.0.0",
+        "magento/framework": "~1.0.0-beta"
+    },
+    "suggest": {
+        "magento/sample-data-media": "Sample Data version:~1.0.0-beta"
+    },
+    "type": "magento2-module",
+    "version": "1.0.0-beta",
+    "license": [
+        "OSL-3.0",
+        "AFL-3.0"
+    ],
+    "autoload": {
+        "files": [
+            "cli_commands.php",
+            "registration.php"
+        ],
+        "psr-4": {
+            "Magento\\SampleData\\": ""
+        }
+    }
+}
diff --git a/app/code/Magento/SampleData/etc/di.xml b/app/code/Magento/SampleData/etc/di.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a34bdcabd0f54469bc025bea70300fdc9876ee05
--- /dev/null
+++ b/app/code/Magento/SampleData/etc/di.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
+    <type name="Magento\Framework\Console\CommandList">
+        <arguments>
+            <argument name="commands" xsi:type="array">
+                <item name="sampleDataDeployCommand" xsi:type="object">Magento\SampleData\Console\Command\SampleDataDeployCommand</item>
+                <item name="sampleDataResetCommand" xsi:type="object">Magento\SampleData\Console\Command\SampleDataResetCommand</item>
+                <item name="sampleDataRemoveCommand" xsi:type="object">Magento\SampleData\Console\Command\SampleDataRemoveCommand</item>
+            </argument>
+        </arguments>
+    </type>
+</config>
diff --git a/app/code/Magento/SampleData/etc/module.xml b/app/code/Magento/SampleData/etc/module.xml
new file mode 100644
index 0000000000000000000000000000000000000000..37798ad6de8946eb8c56e345bd625be1ba17beb3
--- /dev/null
+++ b/app/code/Magento/SampleData/etc/module.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
+    <module name="Magento_SampleData" setup_version="2.0.0">
+    </module>
+</config>
diff --git a/app/code/Magento/SampleData/registration.php b/app/code/Magento/SampleData/registration.php
new file mode 100644
index 0000000000000000000000000000000000000000..7dfbb9f61f8a29c260b91a0117242a053fcdf04f
--- /dev/null
+++ b/app/code/Magento/SampleData/registration.php
@@ -0,0 +1,11 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+\Magento\Framework\Component\ComponentRegistrar::register(
+    \Magento\Framework\Component\ComponentRegistrar::MODULE,
+    'Magento_SampleData',
+    __DIR__
+);
diff --git a/app/code/Magento/Search/Block/Adminhtml/Dashboard/Last.php b/app/code/Magento/Search/Block/Adminhtml/Dashboard/Last.php
index b0fbd373efa7fa5403dde0299ce837582ae647c1..bd7a674c05b32b1c734aa7d242a9d5c1355c3fcf 100644
--- a/app/code/Magento/Search/Block/Adminhtml/Dashboard/Last.php
+++ b/app/code/Magento/Search/Block/Adminhtml/Dashboard/Last.php
@@ -12,12 +12,12 @@ namespace Magento\Search\Block\Adminhtml\Dashboard;
 class Last extends \Magento\Backend\Block\Dashboard\Grid
 {
     /**
-     * @var \Magento\Search\Model\Resource\Query\Collection
+     * @var \Magento\Search\Model\ResourceModel\Query\Collection
      */
     protected $_collection;
 
     /**
-     * @var \Magento\Search\Model\Resource\Query\CollectionFactory
+     * @var \Magento\Search\Model\ResourceModel\Query\CollectionFactory
      */
     protected $_queriesFactory;
 
@@ -33,14 +33,14 @@ class Last extends \Magento\Backend\Block\Dashboard\Grid
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Framework\Module\Manager $moduleManager
-     * @param \Magento\Search\Model\Resource\Query\CollectionFactory $queriesFactory
+     * @param \Magento\Search\Model\ResourceModel\Query\CollectionFactory $queriesFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Framework\Module\Manager $moduleManager,
-        \Magento\Search\Model\Resource\Query\CollectionFactory $queriesFactory,
+        \Magento\Search\Model\ResourceModel\Query\CollectionFactory $queriesFactory,
         array $data = []
     ) {
         $this->_moduleManager = $moduleManager;
diff --git a/app/code/Magento/Search/Block/Adminhtml/Dashboard/Top.php b/app/code/Magento/Search/Block/Adminhtml/Dashboard/Top.php
index e08ec6515edb1b598bd1a7d054aae66ab2b4af32..82e862ba5cbdfb8c2be8c65360926d89c434fde7 100644
--- a/app/code/Magento/Search/Block/Adminhtml/Dashboard/Top.php
+++ b/app/code/Magento/Search/Block/Adminhtml/Dashboard/Top.php
@@ -12,12 +12,12 @@ namespace Magento\Search\Block\Adminhtml\Dashboard;
 class Top extends \Magento\Backend\Block\Dashboard\Grid
 {
     /**
-     * @var \Magento\Search\Model\Resource\Query\Collection
+     * @var \Magento\Search\Model\ResourceModel\Query\Collection
      */
     protected $_collection;
 
     /**
-     * @var \Magento\Search\Model\Resource\Query\CollectionFactory
+     * @var \Magento\Search\Model\ResourceModel\Query\CollectionFactory
      */
     protected $_queriesFactory;
 
@@ -33,14 +33,14 @@ class Top extends \Magento\Backend\Block\Dashboard\Grid
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Framework\Module\Manager $moduleManager
-     * @param \Magento\Search\Model\Resource\Query\CollectionFactory $queriesFactory
+     * @param \Magento\Search\Model\ResourceModel\Query\CollectionFactory $queriesFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Framework\Module\Manager $moduleManager,
-        \Magento\Search\Model\Resource\Query\CollectionFactory $queriesFactory,
+        \Magento\Search\Model\ResourceModel\Query\CollectionFactory $queriesFactory,
         array $data = []
     ) {
         $this->_moduleManager = $moduleManager;
diff --git a/app/code/Magento/Search/Block/Term.php b/app/code/Magento/Search/Block/Term.php
index 3b010fa85898bde27bb3b64263dd4715590e79a7..68561df594b2a00818c66586651587883ef6fe14 100644
--- a/app/code/Magento/Search/Block/Term.php
+++ b/app/code/Magento/Search/Block/Term.php
@@ -13,7 +13,7 @@ use Magento\Framework\UrlFactory;
 use Magento\Framework\UrlInterface;
 use Magento\Framework\View\Element\Template;
 use Magento\Framework\View\Element\Template\Context;
-use Magento\Search\Model\Resource\Query\CollectionFactory;
+use Magento\Search\Model\ResourceModel\Query\CollectionFactory;
 
 class Term extends Template
 {
diff --git a/app/code/Magento/Search/Model/Query.php b/app/code/Magento/Search/Model/Query.php
index c343147bebc174724c39836991c0631dff887162..894d8d69f3646c6c99647eca0468a9301be0f042 100644
--- a/app/code/Magento/Search/Model/Query.php
+++ b/app/code/Magento/Search/Model/Query.php
@@ -5,23 +5,23 @@
  */
 namespace Magento\Search\Model;
 
-use Magento\Framework\App\Resource;
-use Magento\Search\Model\Resource\Query\Collection as QueryCollection;
-use Magento\Search\Model\Resource\Query\CollectionFactory as QueryCollectionFactory;
+use Magento\Framework\App\ResourceConnection;
+use Magento\Search\Model\ResourceModel\Query\Collection as QueryCollection;
+use Magento\Search\Model\ResourceModel\Query\CollectionFactory as QueryCollectionFactory;
 use Magento\Search\Model\SearchCollectionInterface as Collection;
 use Magento\Search\Model\SearchCollectionFactory as CollectionFactory;
 use Magento\Framework\App\Config\ScopeConfigInterface;
 use Magento\Framework\Data\Collection\AbstractDb as DbCollection;
 use Magento\Framework\Model\AbstractModel;
-use Magento\Framework\Model\Resource\AbstractResource;
+use Magento\Framework\Model\ResourceModel\AbstractResource;
 use Magento\Framework\Registry;
 use Magento\Store\Model\StoreManagerInterface;
 
 /**
  * Search query model
  *
- * @method \Magento\Search\Model\Resource\Query _getResource()
- * @method \Magento\Search\Model\Resource\Query getResource()
+ * @method \Magento\Search\Model\ResourceModel\Query _getResource()
+ * @method \Magento\Search\Model\ResourceModel\Query getResource()
  * @method \Magento\Search\Model\Query setQueryText(string $value)
  * @method int getNumResults()
  * @method \Magento\Search\Model\Query setNumResults(int $value)
@@ -102,7 +102,7 @@ class Query extends AbstractModel implements QueryInterface
      * @param CollectionFactory $searchCollectionFactory
      * @param StoreManagerInterface $storeManager
      * @param ScopeConfigInterface $scopeConfig
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param DbCollection $resourceCollection
      * @param array $data
      */
@@ -131,7 +131,7 @@ class Query extends AbstractModel implements QueryInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Search\Model\Resource\Query');
+        $this->_init('Magento\Search\Model\ResourceModel\Query');
     }
 
     /**
diff --git a/app/code/Magento/Search/Model/Resource/Query.php b/app/code/Magento/Search/Model/ResourceModel/Query.php
similarity index 94%
rename from app/code/Magento/Search/Model/Resource/Query.php
rename to app/code/Magento/Search/Model/ResourceModel/Query.php
index fb48c4d8cc59d1d5d90ef4713568c5d3b48dff51..f539cc3bd5241df6711a8676250b093cc7363fd1 100644
--- a/app/code/Magento/Search/Model/Resource/Query.php
+++ b/app/code/Magento/Search/Model/ResourceModel/Query.php
@@ -6,11 +6,11 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Search\Model\Resource;
+namespace Magento\Search\Model\ResourceModel;
 
 use Magento\Framework\DB\Select;
 use Magento\Framework\Model\AbstractModel;
-use Magento\Framework\Model\Resource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 use Magento\Search\Model\Query as QueryModel;
 
 /**
@@ -32,13 +32,13 @@ class Query extends AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
@@ -82,7 +82,7 @@ class Query extends AbstractDb
      * @param AbstractModel $object
      * @param int|string $value
      * @param null|string $field
-     * @return $this|\Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return $this|\Magento\Framework\Model\ResourceModel\Db\AbstractDb
      * @SuppressWarnings("unused")
      */
     public function load(AbstractModel $object, $value, $field = null)
diff --git a/app/code/Magento/Search/Model/Resource/Query/Collection.php b/app/code/Magento/Search/Model/ResourceModel/Query/Collection.php
similarity index 93%
rename from app/code/Magento/Search/Model/Resource/Query/Collection.php
rename to app/code/Magento/Search/Model/ResourceModel/Query/Collection.php
index 6796d33d3ee3cf93e86f7277cea97b88bdb55d25..9df7dc3ffaee5974cc2764235b0269498dab7167 100644
--- a/app/code/Magento/Search/Model/Resource/Query/Collection.php
+++ b/app/code/Magento/Search/Model/ResourceModel/Query/Collection.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Search\Model\Resource\Query;
+namespace Magento\Search\Model\ResourceModel\Query;
 
 use Magento\Store\Model\Store;
 
@@ -11,7 +11,7 @@ use Magento\Store\Model\Store;
  * Search query collection
  *
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store for filter
@@ -42,7 +42,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\DB\Helper $resourceHelper
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
@@ -52,7 +52,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Helper $resourceHelper,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         $this->_resourceHelper = $resourceHelper;
@@ -66,7 +66,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Search\Model\Query', 'Magento\Search\Model\Resource\Query');
+        $this->_init('Magento\Search\Model\Query', 'Magento\Search\Model\ResourceModel\Query');
     }
 
     /**
diff --git a/app/code/Magento/Search/Test/Unit/Model/QueryTest.php b/app/code/Magento/Search/Test/Unit/Model/QueryTest.php
index 33de15f3609392514681a0010eb38f5a017e62d7..3dde729dd81392227473e3cba928f0cf080552df 100644
--- a/app/code/Magento/Search/Test/Unit/Model/QueryTest.php
+++ b/app/code/Magento/Search/Test/Unit/Model/QueryTest.php
@@ -15,7 +15,7 @@ class QueryTest extends \PHPUnit_Framework_TestCase
     private $model;
 
     /**
-     * @var \Magento\Search\Model\Resource\Query|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Search\Model\ResourceModel\Query|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
 
@@ -23,7 +23,7 @@ class QueryTest extends \PHPUnit_Framework_TestCase
     {
         $objectManager = new ObjectManager($this);
 
-        $this->resource = $this->getMockBuilder('Magento\Search\Model\Resource\Query')
+        $this->resource = $this->getMockBuilder('Magento\Search\Model\ResourceModel\Query')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Search/Test/Unit/Model/Resource/QueryTest.php b/app/code/Magento/Search/Test/Unit/Model/ResourceModel/QueryTest.php
similarity index 92%
rename from app/code/Magento/Search/Test/Unit/Model/Resource/QueryTest.php
rename to app/code/Magento/Search/Test/Unit/Model/ResourceModel/QueryTest.php
index bacac8e7692fafd6d370e362d574fc3f9b3bba66..0d7688bf5a53e7cfdd6f2ca7a7522253cf5d017e 100644
--- a/app/code/Magento/Search/Test/Unit/Model/Resource/QueryTest.php
+++ b/app/code/Magento/Search/Test/Unit/Model/ResourceModel/QueryTest.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Search\Test\Unit\Model\Resource;
+namespace Magento\Search\Test\Unit\Model\ResourceModel;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
 class QueryTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Search\Model\Resource\Query
+     * @var \Magento\Search\Model\ResourceModel\Query
      */
     private $model;
 
@@ -27,21 +27,21 @@ class QueryTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
 
-        $resource = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $resource->expects($this->any())
             ->method('getConnection')
             ->willReturn($this->adapter);
 
-        $context = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\Context')
+        $context = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\Context')
             ->disableOriginalConstructor()
             ->getMock();
         $context->expects($this->any())
             ->method('getResources')
             ->willReturn($resource);
 
-        $this->model = $objectManager->getObject('Magento\Search\Model\Resource\Query', ['context' => $context]);
+        $this->model = $objectManager->getObject('Magento\Search\Model\ResourceModel\Query', ['context' => $context]);
     }
 
     public function testSaveIncrementalPopularity()
diff --git a/app/code/Magento/Search/view/adminhtml/layout/search_term_block.xml b/app/code/Magento/Search/view/adminhtml/layout/search_term_block.xml
index 964c2e3663d0680e913e46b5bf43f0fa9dc7427b..683ca23d8899e4ec426f8571415b8479745dde7e 100644
--- a/app/code/Magento/Search/view/adminhtml/layout/search_term_block.xml
+++ b/app/code/Magento/Search/view/adminhtml/layout/search_term_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.report.search.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">searchReportGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Search\Model\Resource\Query\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Search\Model\ResourceModel\Query\Collection</argument>
                     <argument name="default_sort" xsi:type="string">query_id</argument>
                     <argument name="default_dir" xsi:type="string">DESC</argument>
                 </arguments>
diff --git a/app/code/Magento/Search/view/adminhtml/layout/search_term_grid_block.xml b/app/code/Magento/Search/view/adminhtml/layout/search_term_grid_block.xml
index dc5ab12de3b94c38b975a858f28f19591def8752..ed5954ed02b21b48ff0cfe57c8d25f934d3fcc07 100644
--- a/app/code/Magento/Search/view/adminhtml/layout/search_term_grid_block.xml
+++ b/app/code/Magento/Search/view/adminhtml/layout/search_term_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.catalog.search.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">search_term_grid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Search\Model\Resource\Query\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Search\Model\ResourceModel\Query\Collection</argument>
                     <argument name="default_sort" xsi:type="string">name</argument>
                     <argument name="default_dir" xsi:type="string">ASC</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
diff --git a/app/code/Magento/Search/view/adminhtml/layout/search_term_report_block.xml b/app/code/Magento/Search/view/adminhtml/layout/search_term_report_block.xml
index b942297986385478e18e40663aabf2bfe1dced1c..5c9084aea6955644311a7339c70bebe7571ba5ab 100644
--- a/app/code/Magento/Search/view/adminhtml/layout/search_term_report_block.xml
+++ b/app/code/Magento/Search/view/adminhtml/layout/search_term_report_block.xml
@@ -12,7 +12,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.report.search.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">searchReportGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Search\Model\Resource\Query\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Search\Model\ResourceModel\Query\Collection</argument>
                     <argument name="default_sort" xsi:type="string">query_id</argument>
                     <argument name="default_dir" xsi:type="string">DESC</argument>
                 </arguments>
diff --git a/app/code/Magento/SendFriend/Model/Resource/SendFriend.php b/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend.php
similarity index 93%
rename from app/code/Magento/SendFriend/Model/Resource/SendFriend.php
rename to app/code/Magento/SendFriend/Model/ResourceModel/SendFriend.php
index 9ee39aac2ab106e9a7b327482d148ff9040a63c5..5a9b520ce46fd7d91df68bca4b5114637fad9565 100644
--- a/app/code/Magento/SendFriend/Model/Resource/SendFriend.php
+++ b/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SendFriend\Model\Resource;
+namespace Magento\SendFriend\Model\ResourceModel;
 
 /**
  * SendFriend Log Resource Model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class SendFriend extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class SendFriend extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and table
diff --git a/app/code/Magento/SendFriend/Model/Resource/SendFriend/Collection.php b/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend/Collection.php
similarity index 66%
rename from app/code/Magento/SendFriend/Model/Resource/SendFriend/Collection.php
rename to app/code/Magento/SendFriend/Model/ResourceModel/SendFriend/Collection.php
index 95691dda11ca0ed71a21cae36cb5f1e7192f571a..fa3a1c614f570ad5686465ad134571794a45b8fd 100644
--- a/app/code/Magento/SendFriend/Model/Resource/SendFriend/Collection.php
+++ b/app/code/Magento/SendFriend/Model/ResourceModel/SendFriend/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SendFriend\Model\Resource\SendFriend;
+namespace Magento\SendFriend\Model\ResourceModel\SendFriend;
 
 /**
  * SendFriend log resource collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init resource collection
@@ -19,6 +19,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\SendFriend\Model\SendFriend', 'Magento\SendFriend\Model\Resource\SendFriend');
+        $this->_init('Magento\SendFriend\Model\SendFriend', 'Magento\SendFriend\Model\ResourceModel\SendFriend');
     }
 }
diff --git a/app/code/Magento/SendFriend/Model/SendFriend.php b/app/code/Magento/SendFriend/Model/SendFriend.php
index 9e2b889f6a4f454c511b8c7204a1378415b6a82a..7a89d671ce88ce748bbbee07344f7b16785bce69 100644
--- a/app/code/Magento/SendFriend/Model/SendFriend.php
+++ b/app/code/Magento/SendFriend/Model/SendFriend.php
@@ -10,8 +10,8 @@ use Magento\Framework\Exception\LocalizedException as CoreException;
 /**
  * SendFriend Log
  *
- * @method \Magento\SendFriend\Model\Resource\SendFriend _getResource()
- * @method \Magento\SendFriend\Model\Resource\SendFriend getResource()
+ * @method \Magento\SendFriend\Model\ResourceModel\SendFriend _getResource()
+ * @method \Magento\SendFriend\Model\ResourceModel\SendFriend getResource()
  * @method int getIp()
  * @method \Magento\SendFriend\Model\SendFriend setIp(int $value)
  * @method int getTime()
@@ -119,7 +119,7 @@ class SendFriend extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress
      * @param \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
      * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -135,7 +135,7 @@ class SendFriend extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\HTTP\PhpEnvironment\RemoteAddress $remoteAddress,
         \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager,
         \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -157,7 +157,7 @@ class SendFriend extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\SendFriend\Model\Resource\SendFriend');
+        $this->_init('Magento\SendFriend\Model\ResourceModel\SendFriend');
     }
 
     /**
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/MassPrintShippingLabel.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/MassPrintShippingLabel.php
index 9db8516006b8e737fb6ac251e4c8898011324dd6..1a1790149b7d61b645293f96af243a2bfa3860c3 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/MassPrintShippingLabel.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/MassPrintShippingLabel.php
@@ -9,14 +9,14 @@ namespace Magento\Shipping\Controller\Adminhtml\Order\Shipment;
 use Magento\Backend\App\Action;
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Backend\App\Action\Context;
 use Magento\Shipping\Model\Shipping\LabelGenerator;
 use Magento\Framework\App\Response\Http\FileFactory;
-use Magento\Sales\Model\Resource\Order\Shipment\CollectionFactory as ShipmentCollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory as ShipmentCollectionFactory;
 use Magento\Framework\Controller\ResultInterface;
-use Magento\Sales\Model\Resource\Order\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\CollectionFactory;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Save.php b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Save.php
index ec2d611f3b7974d5ff0f3cd0540501f247ba50ab..0704ac04041c34b05fe18e22d6fb300d0e83221c 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Save.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Order/Shipment/Save.php
@@ -83,6 +83,16 @@ class Save extends \Magento\Backend\App\Action
      */
     public function execute()
     {
+        /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */
+        $resultRedirect = $this->resultRedirectFactory->create();
+
+        $formKeyIsValid = $this->_formKeyValidator->validate($this->getRequest());
+        $isPost = $this->getRequest()->isPost();
+        if (!$formKeyIsValid || !$isPost) {
+            $this->messageManager->addError(__('We can\'t save the shipment right now.'));
+            return $resultRedirect->setPath('sales/order/index');
+        }
+
         $data = $this->getRequest()->getParam('shipment');
 
         if (!empty($data['comment_text'])) {
diff --git a/app/code/Magento/Shipping/Controller/Adminhtml/Shipment/MassPrintShippingLabel.php b/app/code/Magento/Shipping/Controller/Adminhtml/Shipment/MassPrintShippingLabel.php
index ab4dbf392617fd15abe0aa4c89d3761c3e23a0d7..7fba9c9936043c0952e92db9816f49df4318d5d0 100644
--- a/app/code/Magento/Shipping/Controller/Adminhtml/Shipment/MassPrintShippingLabel.php
+++ b/app/code/Magento/Shipping/Controller/Adminhtml/Shipment/MassPrintShippingLabel.php
@@ -9,13 +9,13 @@ namespace Magento\Shipping\Controller\Adminhtml\Shipment;
 use Magento\Backend\App\Action;
 use Magento\Framework\App\ResponseInterface;
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Ui\Component\MassAction\Filter;
 use Magento\Backend\App\Action\Context;
 use Magento\Shipping\Model\Shipping\LabelGenerator;
 use Magento\Framework\App\Response\Http\FileFactory;
 use Magento\Framework\Controller\ResultInterface;
-use Magento\Sales\Model\Resource\Order\Shipment\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Shipment\CollectionFactory;
 
 class MassPrintShippingLabel extends \Magento\Sales\Controller\Adminhtml\Order\AbstractMassAction
 {
diff --git a/app/code/Magento/Shipping/Model/Info.php b/app/code/Magento/Shipping/Model/Info.php
index 956a012224d165928ae802b0a132263ceece94aa..e61bfc36a804d33ac3d02cedafd26c103b278c44 100644
--- a/app/code/Magento/Shipping/Model/Info.php
+++ b/app/code/Magento/Shipping/Model/Info.php
@@ -42,7 +42,7 @@ class Info extends \Magento\Framework\DataObject
     protected $_trackFactory;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Shipment\Track\CollectionFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory
      */
     protected $_trackCollectionFactory;
 
@@ -51,7 +51,7 @@ class Info extends \Magento\Framework\DataObject
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
      * @param \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository
      * @param \Magento\Shipping\Model\Order\TrackFactory $trackFactory
-     * @param \Magento\Shipping\Model\Resource\Order\Track\CollectionFactory $trackCollectionFactory
+     * @param \Magento\Shipping\Model\ResourceModel\Order\Track\CollectionFactory $trackCollectionFactory
      * @param array $data
      */
     public function __construct(
@@ -59,7 +59,7 @@ class Info extends \Magento\Framework\DataObject
         \Magento\Sales\Model\OrderFactory $orderFactory,
         \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository,
         \Magento\Shipping\Model\Order\TrackFactory $trackFactory,
-        \Magento\Shipping\Model\Resource\Order\Track\CollectionFactory $trackCollectionFactory,
+        \Magento\Shipping\Model\ResourceModel\Order\Track\CollectionFactory $trackCollectionFactory,
         array $data = []
     ) {
         $this->_shippingData = $shippingData;
@@ -205,7 +205,7 @@ class Info extends \Magento\Framework\DataObject
 
     /**
      * @param Shipment $shipment
-     * @return \Magento\Shipping\Model\Resource\Order\Track\Collection
+     * @return \Magento\Shipping\Model\ResourceModel\Order\Track\Collection
      */
     protected function _getTracksCollection(Shipment $shipment)
     {
diff --git a/app/code/Magento/Shipping/Model/Observer.php b/app/code/Magento/Shipping/Model/Observer.php
index e29359060abb9170593593d4b2b50606c98ffdde..d618c8839b8588243004bb1708fba744f26bd110 100644
--- a/app/code/Magento/Shipping/Model/Observer.php
+++ b/app/code/Magento/Shipping/Model/Observer.php
@@ -13,17 +13,17 @@ class Observer
     protected $_localeResolver;
 
     /**
-     * @var \Magento\Sales\Model\Resource\Report\ShippingFactory
+     * @var \Magento\Sales\Model\ResourceModel\Report\ShippingFactory
      */
     protected $_shippingFactory;
 
     /**
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
-     * @param \Magento\Sales\Model\Resource\Report\ShippingFactory $shippingFactory
+     * @param \Magento\Sales\Model\ResourceModel\Report\ShippingFactory $shippingFactory
      */
     public function __construct(
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
-        \Magento\Sales\Model\Resource\Report\ShippingFactory $shippingFactory
+        \Magento\Sales\Model\ResourceModel\Report\ShippingFactory $shippingFactory
     ) {
         $this->_localeResolver = $localeResolver;
         $this->_shippingFactory = $shippingFactory;
diff --git a/app/code/Magento/Shipping/Model/Order/Track.php b/app/code/Magento/Shipping/Model/Order/Track.php
index e9c914ae853281212adb39220a4fadf113b04497..c707a3d6dc99bb4636634834fdbb467e982bc20f 100644
--- a/app/code/Magento/Shipping/Model/Order/Track.php
+++ b/app/code/Magento/Shipping/Model/Order/Track.php
@@ -9,8 +9,8 @@ namespace Magento\Shipping\Model\Order;
 use Magento\Framework\Api\AttributeValueFactory;
 
 /**
- * @method \Magento\Sales\Model\Resource\Order\Shipment\Track _getResource()
- * @method \Magento\Sales\Model\Resource\Order\Shipment\Track getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Shipment\Track _getResource()
+ * @method \Magento\Sales\Model\ResourceModel\Order\Shipment\Track getResource()
  * @method int getParentId()
  * @method float getWeight()
  * @method float getQty()
@@ -37,7 +37,7 @@ class Track extends \Magento\Sales\Model\Order\Shipment\Track
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository
      * @param \Magento\Shipping\Model\CarrierFactory $carrierFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      *
@@ -51,7 +51,7 @@ class Track extends \Magento\Sales\Model\Order\Shipment\Track
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Sales\Model\Order\ShipmentRepository $shipmentRepository,
         \Magento\Shipping\Model\CarrierFactory $carrierFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Shipping/Model/Resource/Order/Track/Collection.php b/app/code/Magento/Shipping/Model/ResourceModel/Order/Track/Collection.php
similarity index 58%
rename from app/code/Magento/Shipping/Model/Resource/Order/Track/Collection.php
rename to app/code/Magento/Shipping/Model/ResourceModel/Order/Track/Collection.php
index 46a7a105c799a437be7c4d597e6bb4ec791d1960..4c4afc9a5b926e0ea97711ec9ab18b1e8c6cdf1a 100644
--- a/app/code/Magento/Shipping/Model/Resource/Order/Track/Collection.php
+++ b/app/code/Magento/Shipping/Model/ResourceModel/Order/Track/Collection.php
@@ -3,13 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Shipping\Model\Resource\Order\Track;
+namespace Magento\Shipping\Model\ResourceModel\Order\Track;
 
 /**
  * Flat sales order shipment tracks collection
  *
+ * @SuppressWarnings(PHPMD.DepthOfInheritance)
  */
-class Collection extends \Magento\Sales\Model\Resource\Order\Shipment\Track\Collection
+class Collection extends \Magento\Sales\Model\ResourceModel\Order\Shipment\Track\Collection
 {
     /**
      * Model initialization
@@ -18,6 +19,6 @@ class Collection extends \Magento\Sales\Model\Resource\Order\Shipment\Track\Coll
      */
     protected function _construct()
     {
-        $this->_init('Magento\Shipping\Model\Order\Track', 'Magento\Sales\Model\Resource\Order\Shipment\Track');
+        $this->_init('Magento\Shipping\Model\Order\Track', 'Magento\Sales\Model\ResourceModel\Order\Shipment\Track');
     }
 }
diff --git a/app/code/Magento/Shipping/Model/ShipmentNotifier.php b/app/code/Magento/Shipping/Model/ShipmentNotifier.php
index c506229f1f635d02fd7208538550a739d08e2bf1..ab4997edddebefc7e14e817f26a08041dd85d878 100644
--- a/app/code/Magento/Shipping/Model/ShipmentNotifier.php
+++ b/app/code/Magento/Shipping/Model/ShipmentNotifier.php
@@ -8,7 +8,7 @@ namespace Magento\Shipping\Model;
 
 use Psr\Log\LoggerInterface as Logger;
 use Magento\Sales\Model\Order\Email\Sender\ShipmentSender;
-use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory;
 
 /**
  * Class ShipmentNotifier
diff --git a/app/code/Magento/Shipping/Model/Shipping/LabelGenerator.php b/app/code/Magento/Shipping/Model/Shipping/LabelGenerator.php
index ad4dbab755e3847e21bcae41adbebcc86d9c8586..330bec5c52b755ead7bc57e1eeab3eb6f9df89ea 100644
--- a/app/code/Magento/Shipping/Model/Shipping/LabelGenerator.php
+++ b/app/code/Magento/Shipping/Model/Shipping/LabelGenerator.php
@@ -17,7 +17,7 @@ class LabelGenerator
     /**
      * @var \Magento\Shipping\Model\CarrierFactory
      */
-    protected $_carrierFactory;
+    protected $carrierFactory;
 
     /**
      * @var \Magento\Shipping\Model\Shipping\LabelsFactory
@@ -53,7 +53,7 @@ class LabelGenerator
         \Magento\Sales\Model\Order\Shipment\TrackFactory $trackFactory,
         \Magento\Framework\Filesystem $filesystem
     ) {
-        $this->_carrierFactory = $carrierFactory;
+        $this->carrierFactory = $carrierFactory;
         $this->labelFactory = $labelFactory;
         $this->scopeConfig = $scopeConfig;
         $this->trackFactory = $trackFactory;
@@ -69,7 +69,7 @@ class LabelGenerator
     public function create(\Magento\Sales\Model\Order\Shipment $shipment, RequestInterface $request)
     {
         $order = $shipment->getOrder();
-        $carrier = $this->_carrierFactory->create($order->getShippingMethod(true)->getCarrierCode());
+        $carrier = $this->carrierFactory->create($order->getShippingMethod(true)->getCarrierCode());
         if (!$carrier->isShippingLabelsAvailable()) {
             throw new \Magento\Framework\Exception\LocalizedException(__('Shipping labels is not available.'));
         }
@@ -99,12 +99,34 @@ class LabelGenerator
             $shipment->getStoreId()
         );
         if (!empty($trackingNumbers)) {
-            foreach ($trackingNumbers as $trackingNumber) {
-                $track = $this->trackFactory->create()
-                    ->setNumber($trackingNumber)
-                    ->setCarrierCode($carrierCode)
-                    ->setTitle($carrierTitle);
-                $shipment->addTrack($track);
+            $this->addTrackingNumbersToShipment($shipment, $trackingNumbers, $carrierCode, $carrierTitle);
+        }
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Shipment $shipment
+     * @param array $trackingNumbers
+     * @param string $carrierCode
+     * @param string $carrierTitle
+     *
+     * @return void
+     */
+    private function addTrackingNumbersToShipment(
+        \Magento\Sales\Model\Order\Shipment $shipment,
+        $trackingNumbers,
+        $carrierCode,
+        $carrierTitle
+    ) {
+        foreach ($trackingNumbers as $number) {
+            if (is_array($number)) {
+                $this->addTrackingNumbersToShipment($shipment, $number, $carrierCode, $carrierTitle);
+            } else {
+                $shipment->addTrack(
+                    $this->trackFactory->create()
+                        ->setNumber($number)
+                        ->setCarrierCode($carrierCode)
+                        ->setTitle($carrierTitle)
+                );
             }
         }
     }
@@ -147,7 +169,7 @@ class LabelGenerator
             DirectoryList::TMP
         );
         $directory->create();
-        $image = imagecreatefromstring($imageString);
+        $image = @imagecreatefromstring($imageString);
         if (!$image) {
             return false;
         }
diff --git a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/SaveTest.php b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/SaveTest.php
index 8b46339e7c054cc49cfd43bcd51ebd2f298fcc9c..fad9df01c37444630cce0ecec464f66cd5c1f1a8 100644
--- a/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/SaveTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Controller/Adminhtml/Order/Shipment/SaveTest.php
@@ -73,11 +73,24 @@ class SaveTest extends \PHPUnit_Framework_TestCase
      */
     protected $helper;
 
+    /**
+     * @var \Magento\Framework\Controller\Result\Redirect|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $resultRedirect;
+
+    /**
+     * @var \Magento\Framework\Data\Form\FormKey\Validator|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $formKeyValidator;
+
     /**
      * @var \Magento\Shipping\Controller\Adminhtml\Order\Shipment\Save
      */
     protected $saveAction;
 
+    /**
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
     public function setUp()
     {
         $objectManagerHelper = new ObjectManagerHelper($this);
@@ -98,7 +111,8 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             'Magento\Backend\App\Action\Context',
             [
                 'getRequest', 'getResponse', 'getMessageManager', 'getRedirect',
-                'getObjectManager', 'getSession', 'getActionFlag', 'getHelper'
+                'getObjectManager', 'getSession', 'getActionFlag', 'getHelper',
+                'getResultRedirectFactory', 'getFormKeyValidator'
             ],
             [],
             '',
@@ -135,7 +149,38 @@ class SaveTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->actionFlag = $this->getMock('Magento\Framework\App\ActionFlag', ['get'], [], '', false);
-        $this->helper = $this->getMock('\Magento\Backend\Helper\Data', ['getUrl'], [], '', false);
+        $this->helper = $this->getMock('Magento\Backend\Helper\Data', ['getUrl'], [], '', false);
+
+        $this->resultRedirect = $this->getMock(
+            'Magento\Framework\Controller\Result\Redirect',
+            ['setPath'],
+            [],
+            '',
+            false
+        );
+        $this->resultRedirect->expects($this->any())
+            ->method('setPath')
+            ->willReturn($this->resultRedirect);
+
+        $resultRedirectFactory = $this->getMock(
+            'Magento\Framework\Controller\Result\RedirectFactory',
+            ['create'],
+            [],
+            '',
+            false
+        );
+        $resultRedirectFactory->expects($this->once())
+            ->method('create')
+            ->willReturn($this->resultRedirect);
+
+        $this->formKeyValidator = $this->getMock(
+            'Magento\Framework\Data\Form\FormKey\Validator',
+            ['validate'],
+            [],
+            '',
+            false
+        );
+
         $this->context->expects($this->once())
             ->method('getMessageManager')
             ->will($this->returnValue($this->messageManager));
@@ -157,113 +202,165 @@ class SaveTest extends \PHPUnit_Framework_TestCase
         $this->context->expects($this->once())
             ->method('getHelper')
             ->will($this->returnValue($this->helper));
+        $this->context->expects($this->once())
+            ->method('getResultRedirectFactory')
+            ->will($this->returnValue($resultRedirectFactory));
+        $this->context->expects($this->once())
+            ->method('getFormKeyValidator')
+            ->will($this->returnValue($this->formKeyValidator));
+
         $this->saveAction = $objectManagerHelper->getObject(
             'Magento\Shipping\Controller\Adminhtml\Order\Shipment\Save',
             [
-                'labelGenerator' => $this->labelGenerator, 'shipmentSender' => $this->shipmentSender,
-                'context' => $this->context, 'shipmentLoader' => $this->shipmentLoader,
-                'request' => $this->request, 'response' => $this->response
+                'labelGenerator' => $this->labelGenerator,
+                'shipmentSender' => $this->shipmentSender,
+                'context' => $this->context,
+                'shipmentLoader' => $this->shipmentLoader,
+                'request' => $this->request,
+                'response' => $this->response
             ]
         );
     }
 
-    public function testExecute()
+    /**
+     * @param bool $formKeyIsValid
+     * @param bool $isPost
+     * @dataProvider executeDataProvider
+     * @SuppressWarnings(PHPMD.ExcessiveMethodLength)
+     */
+    public function testExecute($formKeyIsValid, $isPost)
     {
-        $shipmentId = 1000012;
-        $orderId = 10003;
-        $tracking = [];
-        $shipmentData = ['items' => [], 'send_email' => ''];
-        $shipment = $this->getMock(
-            'Magento\Sales\Model\Order\Shipment',
-            ['load', 'save', 'register', 'getOrder', 'getOrderId', '__wakeup'],
-            [],
-            '',
-            false
-        );
-        $order = $this->getMock(
-            'Magento\Sales\Model\Order',
-            ['setCustomerNoteNotify', '__wakeup'],
-            [],
-            '',
-            false
-        );
+        $this->formKeyValidator->expects($this->any())
+            ->method('validate')
+            ->willReturn($formKeyIsValid);
 
         $this->request->expects($this->any())
-            ->method('getParam')
-            ->will(
-                $this->returnValueMap(
-                    [
-                        ['order_id', null, $orderId],
-                        ['shipment_id', null, $shipmentId],
-                        ['shipment', null, $shipmentData],
-                        ['tracking', null, $tracking],
-                    ]
-                )
+            ->method('isPost')
+            ->willReturn($isPost);
+
+        if (!$formKeyIsValid || !$isPost) {
+            $this->messageManager->expects($this->once())
+                ->method('addError');
+
+            $this->resultRedirect->expects($this->once())
+                ->method('setPath')
+                ->with('sales/order/index');
+
+            $this->shipmentLoader->expects($this->never())
+                ->method('load');
+
+            $this->assertEquals($this->resultRedirect, $this->saveAction->execute());
+        } else {
+            $shipmentId = 1000012;
+            $orderId = 10003;
+            $tracking = [];
+            $shipmentData = ['items' => [], 'send_email' => ''];
+            $shipment = $this->getMock(
+                'Magento\Sales\Model\Order\Shipment',
+                ['load', 'save', 'register', 'getOrder', 'getOrderId', '__wakeup'],
+                [],
+                '',
+                false
+            );
+            $order = $this->getMock(
+                'Magento\Sales\Model\Order',
+                ['setCustomerNoteNotify', '__wakeup'],
+                [],
+                '',
+                false
             );
-        $this->shipmentLoader->expects($this->any())
-            ->method('setShipmentId')
-            ->with($shipmentId);
-        $this->shipmentLoader->expects($this->any())
-            ->method('setOrderId')
-            ->with($orderId);
-        $this->shipmentLoader->expects($this->any())
-            ->method('setShipment')
-            ->with($shipmentData);
-        $this->shipmentLoader->expects($this->any())
-            ->method('setTracking')
-            ->with($tracking);
-        $this->shipmentLoader->expects($this->once())
-            ->method('load')
-            ->will($this->returnValue($shipment));
-        $shipment->expects($this->once())
-            ->method('register')
-            ->will($this->returnSelf());
-        $shipment->expects($this->any())
-            ->method('getOrder')
-            ->will($this->returnValue($order));
-        $order->expects($this->once())
-            ->method('setCustomerNoteNotify')
-            ->with(false);
-        $this->labelGenerator->expects($this->any())
-            ->method('create')
-            ->with($shipment, $this->request)
-            ->will($this->returnValue(true));
-        $saveTransaction = $this->getMockBuilder('Magento\Framework\DB\Transaction')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-        $saveTransaction->expects($this->at(0))
-            ->method('addObject')
-            ->with($shipment)
-            ->will($this->returnSelf());
-        $saveTransaction->expects($this->at(1))
-            ->method('addObject')
-            ->with($order)
-            ->will($this->returnSelf());
-        $saveTransaction->expects($this->at(2))
-            ->method('save');
-
-        $this->session->expects($this->once())
-            ->method('getCommentText')
-            ->with(true);
 
-        $this->objectManager->expects($this->once())
-            ->method('create')
-            ->with('Magento\Framework\DB\Transaction')
-            ->will($this->returnValue($saveTransaction));
-        $this->objectManager->expects($this->once())
-            ->method('get')
-            ->with('Magento\Backend\Model\Session')
-            ->will($this->returnValue($this->session));
-        $path = 'sales/order/view';
-        $arguments = ['order_id' => $orderId];
-        $shipment->expects($this->once())
-            ->method('getOrderId')
-            ->will($this->returnValue($orderId));
-        $this->prepareRedirect($path, $arguments);
-
-        $this->saveAction->execute();
-        $this->assertEquals($this->response, $this->saveAction->getResponse());
+            $this->request->expects($this->any())
+                ->method('getParam')
+                ->will(
+                    $this->returnValueMap(
+                        [
+                            ['order_id', null, $orderId],
+                            ['shipment_id', null, $shipmentId],
+                            ['shipment', null, $shipmentData],
+                            ['tracking', null, $tracking],
+                        ]
+                    )
+                );
+
+            $this->shipmentLoader->expects($this->any())
+                ->method('setShipmentId')
+                ->with($shipmentId);
+            $this->shipmentLoader->expects($this->any())
+                ->method('setOrderId')
+                ->with($orderId);
+            $this->shipmentLoader->expects($this->any())
+                ->method('setShipment')
+                ->with($shipmentData);
+            $this->shipmentLoader->expects($this->any())
+                ->method('setTracking')
+                ->with($tracking);
+            $this->shipmentLoader->expects($this->once())
+                ->method('load')
+                ->will($this->returnValue($shipment));
+            $shipment->expects($this->once())
+                ->method('register')
+                ->will($this->returnSelf());
+            $shipment->expects($this->any())
+                ->method('getOrder')
+                ->will($this->returnValue($order));
+            $order->expects($this->once())
+                ->method('setCustomerNoteNotify')
+                ->with(false);
+            $this->labelGenerator->expects($this->any())
+                ->method('create')
+                ->with($shipment, $this->request)
+                ->will($this->returnValue(true));
+            $saveTransaction = $this->getMockBuilder('Magento\Framework\DB\Transaction')
+                ->disableOriginalConstructor()
+                ->setMethods([])
+                ->getMock();
+            $saveTransaction->expects($this->at(0))
+                ->method('addObject')
+                ->with($shipment)
+                ->will($this->returnSelf());
+            $saveTransaction->expects($this->at(1))
+                ->method('addObject')
+                ->with($order)
+                ->will($this->returnSelf());
+            $saveTransaction->expects($this->at(2))
+                ->method('save');
+
+            $this->session->expects($this->once())
+                ->method('getCommentText')
+                ->with(true);
+
+            $this->objectManager->expects($this->once())
+                ->method('create')
+                ->with('Magento\Framework\DB\Transaction')
+                ->will($this->returnValue($saveTransaction));
+            $this->objectManager->expects($this->once())
+                ->method('get')
+                ->with('Magento\Backend\Model\Session')
+                ->will($this->returnValue($this->session));
+            $path = 'sales/order/view';
+            $arguments = ['order_id' => $orderId];
+            $shipment->expects($this->once())
+                ->method('getOrderId')
+                ->will($this->returnValue($orderId));
+            $this->prepareRedirect($path, $arguments);
+
+            $this->saveAction->execute();
+            $this->assertEquals($this->response, $this->saveAction->getResponse());
+        }
+    }
+
+    /**
+     * @return array
+     */
+    public function executeDataProvider()
+    {
+        return [
+            [false, false],
+            [true, false],
+            [false, true],
+            [true, true]
+        ];
     }
 
     /**
diff --git a/app/code/Magento/Shipping/Test/Unit/Model/ShipmentNotifierTest.php b/app/code/Magento/Shipping/Test/Unit/Model/ShipmentNotifierTest.php
index 254b84c536927339625d3eac444bc7ebaca8844a..34773790b45bc5be8b7a4220e8a5aa546488e57a 100644
--- a/app/code/Magento/Shipping/Test/Unit/Model/ShipmentNotifierTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Model/ShipmentNotifierTest.php
@@ -9,7 +9,7 @@ namespace Magento\Shipping\Test\Unit\Model;
 use \Magento\Shipping\Model\ShipmentNotifier;
 
 use Magento\Framework\Exception\MailException;
-use Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory;
+use Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory;
 
 /**
  * Class ShipmentNotifierTest
@@ -44,7 +44,7 @@ class ShipmentNotifierTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->historyCollectionFactory = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\History\CollectionFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History\CollectionFactory',
             ['create'],
             [],
             '',
@@ -78,7 +78,7 @@ class ShipmentNotifierTest extends \PHPUnit_Framework_TestCase
     public function testNotifySuccess()
     {
         $historyCollection = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Status\History\Collection',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History\Collection',
             ['getUnnotifiedForInstance', 'save', 'setIsCustomerNotified'],
             [],
             '',
diff --git a/app/code/Magento/Shipping/Test/Unit/Model/ShipmentTest.php b/app/code/Magento/Shipping/Test/Unit/Model/ShipmentTest.php
index 7842964852aa9d8178287bef3c338c7058e8bc29..da1e1bcced77e18add2998d74d916fdaeb4ec4c9 100644
--- a/app/code/Magento/Shipping/Test/Unit/Model/ShipmentTest.php
+++ b/app/code/Magento/Shipping/Test/Unit/Model/ShipmentTest.php
@@ -44,14 +44,14 @@ class ShipmentTest extends \PHPUnit_Framework_TestCase
             'dateTime' => $this->getMock('Magento\Framework\Stdlib\DateTime', [], [], '', false),
             'orderRepository' => $this->orderRepository,
             'shipmentItemCollectionFactory' => $this->getMock(
-                    'Magento\Sales\Model\Resource\Order\Shipment\Item\CollectionFactory',
+                    'Magento\Sales\Model\ResourceModel\Order\Shipment\Item\CollectionFactory',
                     [],
                     [],
                     '',
                     false
                 ),
             'trackCollectionFactory' => $this->getMock(
-                    'Magento\Sales\Model\Resource\Order\Shipment\Track\CollectionFactory',
+                    'Magento\Sales\Model\ResourceModel\Order\Shipment\Track\CollectionFactory',
                     [],
                     [],
                     '',
@@ -65,7 +65,7 @@ class ShipmentTest extends \PHPUnit_Framework_TestCase
                     false
                 ),
             'commentCollectionFactory' => $this->getMock(
-                    'Magento\Sales\Model\Resource\Order\Shipment\Comment\CollectionFactory',
+                    'Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\CollectionFactory',
                     [],
                     [],
                     '',
diff --git a/app/code/Magento/Shipping/Test/Unit/Model/Shipping/LabelGeneratorTest.php b/app/code/Magento/Shipping/Test/Unit/Model/Shipping/LabelGeneratorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..79de98420e6c89a394d775ffcafa8380a350e7ff
--- /dev/null
+++ b/app/code/Magento/Shipping/Test/Unit/Model/Shipping/LabelGeneratorTest.php
@@ -0,0 +1,236 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Shipping\Test\Unit\Model\Shipping;
+
+use Magento\Framework\DataObject;
+use Magento\Sales\Model\Order\Shipment;
+use Magento\Store\Model\ScopeInterface;
+
+/**
+ * Class LabelGeneratorTest
+ *
+ * Test class for \Magento\Shipping\Model\Shipping\LabelGenerator
+ */
+class LabelGeneratorTest extends \PHPUnit_Framework_TestCase
+{
+    const CARRIER_CODE = 'fedex';
+
+    const CARRIER_TITLE = 'Fedex carrier';
+
+    /**
+     * @var \Magento\Shipping\Model\CarrierFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $carrierFactory;
+
+    /**
+     * @var \Magento\Shipping\Model\Shipping\LabelsFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $labelsFactory;
+
+    /**
+     * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $scopeConfig;
+
+    /**
+     * @var \Magento\Sales\Model\Order\Shipment\TrackFactory|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $trackFactory;
+
+    /**
+     * @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $filesystem;
+
+    /**
+     * @var \Magento\Shipping\Model\Shipping\LabelGenerator
+     */
+    private $labelGenerator;
+
+    protected function setUp()
+    {
+        $this->carrierFactory = $this->getMockBuilder('Magento\Shipping\Model\CarrierFactory')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->labelsFactory = $this->getMockBuilder('Magento\Shipping\Model\Shipping\LabelsFactory')
+            ->disableOriginalConstructor()
+            ->setMethods(['create'])
+            ->getMock();
+        $this->scopeConfig = $this->getMock('Magento\Framework\App\Config\ScopeConfigInterface');
+        $this->trackFactory = $this->getMockBuilder('Magento\Sales\Model\Order\Shipment\TrackFactory')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->filesystem = $this->getMockBuilder('Magento\Framework\Filesystem')
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $this->labelGenerator = new \Magento\Shipping\Model\Shipping\LabelGenerator(
+            $this->carrierFactory,
+            $this->labelsFactory,
+            $this->scopeConfig,
+            $this->trackFactory,
+            $this->filesystem
+        );
+    }
+
+    /**
+     * @covers \Magento\Shipping\Model\Shipping\LabelGenerator
+     * @param array $info
+     * @dataProvider labelInfoDataProvider
+     */
+    public function testAddTrackingNumbersToShipment(array $info)
+    {
+        $order = $this->getMockBuilder('Magento\Sales\Model\Order')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $order->expects(static::once())
+            ->method('getShippingMethod')
+            ->with(true)
+            ->willReturn($this->getShippingMethodMock());
+
+        /**
+         * @var $shipmentMock \Magento\Sales\Model\Order\Shipment|\PHPUnit_Framework_MockObject_MockObject
+         */
+        $shipmentMock = $this->getMockBuilder('Magento\Sales\Model\Order\Shipment')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $shipmentMock->expects(static::once())->method('getOrder')->willReturn($order);
+
+        $this->carrierFactory->expects(static::once())
+            ->method('create')
+            ->with(self::CARRIER_CODE)
+            ->willReturn($this->getCarrierMock());
+
+        $labelsMock = $this->getMockBuilder('\Magento\Shipping\Model\Shipping\Labels')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $labelsMock->expects(static::once())
+            ->method('requestToShipment')
+            ->with($shipmentMock)
+            ->willReturn($this->getResponseMock($info));
+
+        $this->labelsFactory->expects(static::once())
+            ->method('create')
+            ->willReturn($labelsMock);
+
+        $this->filesystem->expects(static::once())
+            ->method('getDirectoryWrite')
+            ->willReturn($this->getMock('Magento\Framework\Filesystem\Directory\WriteInterface'));
+
+        $this->scopeConfig->expects(static::once())
+            ->method('getValue')
+            ->with(
+                'carriers/' . self::CARRIER_CODE . '/title',
+                ScopeInterface::SCOPE_STORE,
+                null
+            )->willReturn(self::CARRIER_TITLE);
+
+        $this->labelsFactory->expects(static::once())
+            ->method('create')
+            ->willReturn($labelsMock);
+
+        $trackMock = $this->getMockBuilder('Magento\Sales\Model\Order\Shipment\Track')
+            ->setMethods(['setNumber', 'setCarrierCode', 'setTitle'])
+            ->disableOriginalConstructor()
+            ->getMock();
+
+        $i = 0;
+        $trackingNumbers = is_array($info['tracking_number']) ? $info['tracking_number'] : [$info['tracking_number']];
+        foreach ($trackingNumbers as $trackingNumber) {
+            $trackMock->expects(static::at($i++))
+                ->method('setNumber')
+                ->with($trackingNumber)
+                ->willReturnSelf();
+            $trackMock->expects(static::at($i++))
+                ->method('setCarrierCode')
+                ->with(self::CARRIER_CODE)
+                ->willReturnSelf();
+            $trackMock->expects(static::at($i++))
+                ->method('setTitle')
+                ->with(self::CARRIER_TITLE)
+                ->willReturnSelf();
+        }
+
+        $this->trackFactory->expects(static::any())
+            ->method('create')
+            ->willReturn($trackMock);
+
+        /**
+         * @var $requestMock \Magento\Framework\App\RequestInterface|\PHPUnit_Framework_MockObject_MockObject
+         */
+        $requestMock = $this->getMock('Magento\Framework\App\RequestInterface');
+        $this->labelGenerator->create($shipmentMock, $requestMock);
+    }
+
+    /**
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    private function getShippingMethodMock()
+    {
+        $shippingMethod = $this->getMockBuilder('Magento\Framework\DataObject')
+            ->disableOriginalConstructor()
+            ->setMethods(['getCarrierCode'])
+            ->getMock();
+        $shippingMethod->expects(static::once())
+            ->method('getCarrierCode')
+            ->willReturn(self::CARRIER_CODE);
+
+        return $shippingMethod;
+    }
+
+    /**
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    private function getCarrierMock()
+    {
+        $carrierMock = $this->getMockBuilder('Magento\Shipping\Model\Carrier\AbstractCarrier')
+            ->disableOriginalConstructor()
+            ->setMethods(['isShippingLabelsAvailable', 'getCarrierCode'])
+            ->getMockForAbstractClass();
+        $carrierMock->expects(static::once())
+            ->method('isShippingLabelsAvailable')
+            ->willReturn(true);
+        $carrierMock->expects(static::once())
+            ->method('getCarrierCode')
+            ->willReturn(self::CARRIER_CODE);
+
+        return $carrierMock;
+    }
+
+    /**
+     * @param array $info
+     * @return \PHPUnit_Framework_MockObject_MockObject
+     */
+    private function getResponseMock(array $info)
+    {
+        $responseMock = $this->getMockBuilder('\Magento\Framework\DataObject')
+            ->setMethods(['hasErrors', 'hasInfo', 'getInfo'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $responseMock->expects(static::once())
+            ->method('hasErrors')
+            ->willReturn(false);
+        $responseMock->expects(static::once())
+            ->method('hasInfo')
+            ->willReturn(true);
+        $responseMock->expects(static::once())
+            ->method('getInfo')
+            ->willReturn([$info]);
+
+        return $responseMock;
+    }
+
+    /**
+     * @return array
+     */
+    public function labelInfoDataProvider()
+    {
+        return [
+            [['tracking_number' => ['111111', '222222', '333333'], 'label_content' => 'some']],
+            [['tracking_number' => '111111', 'label_content' => 'some']],
+        ];
+    }
+}
diff --git a/app/code/Magento/Shipping/view/adminhtml/templates/create/items.phtml b/app/code/Magento/Shipping/view/adminhtml/templates/create/items.phtml
index 0aed9867ff6502cc619759ab8dec71882bcfdc41..3044a6dc5e844f7c330e262683e998d4c7f4755c 100644
--- a/app/code/Magento/Shipping/view/adminhtml/templates/create/items.phtml
+++ b/app/code/Magento/Shipping/view/adminhtml/templates/create/items.phtml
@@ -115,8 +115,9 @@
 <script>
 require([
     "jquery",
+    "Magento_Ui/js/modal/alert",
     "prototype"
-], function(jQuery){
+], function(jQuery, alert){
 
 //<![CDATA[
 var sendEmailCheckbox = $('send_email');
@@ -145,7 +146,9 @@ window.toggleCreateLabelCheckbox = function() {
 }
 window.submitShipment = function(btn) {
     if (!validQtyItems()) {
-        alert('<?php /* @escapeNotVerified */ echo __('Invalid value(s) for Qty to Ship') ?>');
+        alert({
+            content: '<?php /* @escapeNotVerified */ echo __('Invalid value(s) for Qty to Ship') ?>'
+        });
         return;
     }
     var checkbox = $(btn).up('.order-totals').select('#create_shipping_label')[0];
diff --git a/app/code/Magento/Shipping/view/adminhtml/templates/order/packaging/packed.phtml b/app/code/Magento/Shipping/view/adminhtml/templates/order/packaging/packed.phtml
index 821d5065ac63de9a26af68f446220c2f75072f8d..1779164460f2e8d9bff57dcc96be69d0a01cfbb2 100644
--- a/app/code/Magento/Shipping/view/adminhtml/templates/order/packaging/packed.phtml
+++ b/app/code/Magento/Shipping/view/adminhtml/templates/order/packaging/packed.phtml
@@ -7,184 +7,170 @@
 // @codingStandardsIgnoreFile
 
 ?>
-<div id="popup-window-mask" style="display:none;"></div>
-<div id="packed_window" style="display:none;" class="packed-window">
-    <div class="popup-window-wrapper">
-        <div class="popup-window-title">
-            <span class="title"><?php /* @escapeNotVerified */ echo __('Packages') ?></span>
+
+<div id="packed_window">
+<?php foreach ($block->getPackages() as $packageId => $package): ?>
+    <?php $package = new \Magento\Framework\DataObject($package) ?>
+    <?php $params = new \Magento\Framework\DataObject($package->getParams()) ?>
+    <section class="admin__page-section">
+        <div class="admin__page-section-title">
+            <span class="title"><?php /* @escapeNotVerified */ echo __('Package') . ' ' . $packageId ?></span>
         </div>
-        <div class="packed-content">
-            <div class="popup-window-content">
-            <?php foreach ($block->getPackages() as $packageId => $package): ?>
-                <div class="package">
-                    <?php $package = new \Magento\Framework\DataObject($package) ?>
-                    <?php $params = new \Magento\Framework\DataObject($package->getParams()) ?>
-                    <div class="package-number popup-fieldset-title">
-                        <div class="title"><?php /* @escapeNotVerified */ echo __('Package') . ' ' . $packageId ?></div>
-                    </div>
-                    <div class="package-info">
-                        <table class="package-options">
-                            <tbody>
-                                <tr>
-                                    <th><?php /* @escapeNotVerified */ echo __('Type') ?></th>
-                                    <td><?php /* @escapeNotVerified */ echo $block->getContainerTypeByCode($params->getContainer()) ?></td>
-                                    <th><?php /* @escapeNotVerified */ echo __('Length') ?></th>
-                                    <td>
-                                        <?php if ($params->getLength() != null): ?>
-                                            <?php /* @escapeNotVerified */ echo $params->getLength() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?>
-                                        <?php else: ?>
-                                            --
-                                        <?php endif; ?>
-                                    </td>
-                                    <?php if ($params->getDeliveryConfirmation() != null): ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Signature Confirmation') ?></th>
-                                        <td><?php /* @escapeNotVerified */ echo $block->getDeliveryConfirmationTypeByCode($params->getDeliveryConfirmation()) ?></td>
-                                    <?php else: ?>
-                                        <th>&nbsp;</th>
-                                        <td>&nbsp;</td>
-                                    <?php endif; ?>
-                                </tr>
-                                <tr>
-                                    <?php if ($block->displayCustomsValue()): ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Customs Value') ?></th>
-                                        <td><?php /* @escapeNotVerified */ echo $block->displayCustomsPrice($params->getCustomsValue()) ?></td>
-                                    <?php else: ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Total Weight') ?></th>
-                                        <td><?php /* @escapeNotVerified */ echo $params->getWeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureWeightName($params->getWeightUnits()) ?></td>
-                                    <?php endif; ?>
-                                    <th><?php /* @escapeNotVerified */ echo __('Width') ?></th>
-                                    <td>
-                                        <?php if ($params->getWidth() != null): ?>
-                                            <?php /* @escapeNotVerified */ echo $params->getWidth() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?>
-                                        <?php else: ?>
-                                            --
-                                        <?php endif; ?>
-                                    </td>
-                                    <?php if ($params->getContentType() != null): ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Contents') ?></th>
-                                        <?php if ($params->getContentType() == 'OTHER'): ?>
-                                            <td><?php echo $block->escapeHtml($params->getContentTypeOther()) ?></td>
-                                        <?php else: ?>
-                                            <td><?php /* @escapeNotVerified */ echo $block->getContentTypeByCode($params->getContentType()) ?></td>
-                                        <?php endif; ?>
-                                    <?php else: ?>
-                                        <th>&nbsp;</th>
-                                        <td>&nbsp;</td>
-                                    <?php endif; ?>
-                                </tr>
-                                <tr>
-                                    <?php if ($block->displayCustomsValue()): ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Total Weight') ?></th>
-                                        <td><?php /* @escapeNotVerified */ echo $params->getWeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureWeightName($params->getWeightUnits()) ?></td>
-                                    <?php else: ?>
-                                        <th>&nbsp;</th>
-                                        <td>&nbsp;</td>
-                                    <?php endif; ?>
-                                    <th><?php /* @escapeNotVerified */ echo __('Height') ?></th>
-                                    <td>
-                                        <?php if ($params->getHeight() != null): ?>
-                                            <?php /* @escapeNotVerified */ echo $params->getHeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?>
-                                        <?php else: ?>
-                                            --
-                                        <?php endif; ?>
-                                    <td>
-                                    <th>&nbsp;</th>
-                                    <td>&nbsp;</td>
-                                </tr>
-                                <tr>
-                                    <?php if ($params->getSize()): ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Size') ?></th>
-                                        <td><?php /* @escapeNotVerified */ echo ucfirst(strtolower($params->getSize())) ?></td>
-                                    <?php else: ?>
-                                        <th>&nbsp;</th>
-                                        <td>&nbsp;</td>
-                                    <?php endif; ?>
-                                    <?php if ($params->getGirth()): ?>
-                                        <th><?php /* @escapeNotVerified */ echo __('Girth') ?></th>
-                                        <td><?php /* @escapeNotVerified */ echo $params->getGirth() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getGirthDimensionUnits()) ?></td>
-                                    <?php else: ?>
-                                        <th>&nbsp;</th>
-                                        <td>&nbsp;</td>
-                                    <?php endif; ?>
-                                    <th>&nbsp;</th>
-                                    <td>&nbsp;</td>
-                                </tr>
-                            </tbody>
-                        </table>
-                    </div>
-                    <div class="package-number popup-fieldset-title">
-                        <div class="title"><?php /* @escapeNotVerified */ echo __('Items in the Package') ?></div>
-                    </div>
-                    <div class="grid">
-                        <table class="data">
-                            <thead>
-                            <tr class="headings">
-                                <th class="col-product no-link"><span><?php /* @escapeNotVerified */ echo __('Product') ?></span></th>
-                                <th class="col-weight no-link"><span><?php /* @escapeNotVerified */ echo __('Weight') ?></span></th>
-                                <?php if ($block->displayCustomsValue()): ?>
-                                    <th class="col-custom no-link"><span><?php /* @escapeNotVerified */ echo __('Customs Value') ?></span></th>
+        <div class="admin__page-section-content">
+            <div class="row row-gutter">
+                <div class="col-m-4">
+                    <table class="admin__table-secondary">
+                        <tbody>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Type') ?></th>
+                                <td><?php /* @escapeNotVerified */ echo $block->getContainerTypeByCode($params->getContainer()) ?></td>
+                            </tr>
+                            <tr>
+                            <?php if ($block->displayCustomsValue()): ?>
+                                <th><?php /* @escapeNotVerified */ echo __('Customs Value') ?></th>
+                                <td><?php /* @escapeNotVerified */ echo $block->displayCustomsPrice($params->getCustomsValue()) ?></td>
+                            <?php else: ?>
+                                <th><?php /* @escapeNotVerified */ echo __('Total Weight') ?></th>
+                                <td><?php /* @escapeNotVerified */ echo $params->getWeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureWeightName($params->getWeightUnits()) ?></td>
+                            <?php endif; ?>
+                            </tr>
+                        <?php if ($params->getSize()): ?>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Size') ?></th>
+                                <td><?php /* @escapeNotVerified */ echo ucfirst(strtolower($params->getSize())) ?></td>
+                            </tr>
+                        <?php endif; ?>
+                        </tbody>
+                    </table>
+                </div>
+                <div class="col-m-4">
+                    <table class="admin__table-secondary">
+                        <tbody>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Length') ?></th>
+                                <td>
+                                <?php if ($params->getLength() != null): ?>
+                                    <?php /* @escapeNotVerified */ echo $params->getLength() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?>
+                                <?php else: ?>
+                                    --
                                 <?php endif; ?>
-                                <th class="col-qty_ordered no-link"><span><?php /* @escapeNotVerified */ echo __('Qty Ordered') ?></span></th>
-                                <th class="col-qty no-link last"><span><?php /* @escapeNotVerified */ echo __('Qty') ?></span></th>
+                                </td>
                             </tr>
-                            </thead>
-                            <tbody id="">
-                            <?php foreach ($package->getItems() as $itemId => $item) : ?>
-                                <?php $item = new \Magento\Framework\DataObject($item) ?>
-                                <tr title="#" id="" class="">
-                                    <td class="col-product name">
-                                        <?php /* @escapeNotVerified */ echo $item->getName(); ?>
-                                    </td>
-                                    <td class="col-weight weight ">
-                                        <?php /* @escapeNotVerified */ echo $item->getWeight(); ?>
-                                    </td>
-                                    <?php if ($block->displayCustomsValue()): ?>
-                                        <td class="col-custom "><?php /* @escapeNotVerified */ echo $block->displayCustomsPrice($item->getCustomsValue()) ?></td>
-                                    <?php endif; ?>
-                                    <td class="col-qty_ordered">
-                                        <?php /* @escapeNotVerified */ echo $block->getQtyOrderedItem($item->getOrderItemId()); ?>
-                                    </td>
-                                    <td class="col-qty last">
-                                        <?php /* @escapeNotVerified */ echo $item->getQty()*1; ?>
-                                    </td>
-                                </tr>
-                            <?php endforeach; ?>
-                            </tbody>
-                        </table>
-                    </div>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Width') ?></th>
+                                <td>
+                                <?php if ($params->getWidth() != null): ?>
+                                    <?php /* @escapeNotVerified */ echo $params->getWidth() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?>
+                                <?php else: ?>
+                                    --
+                                <?php endif; ?>
+                                </td>
+                            </tr>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Height') ?></th>
+                                <td>
+                                <?php if ($params->getHeight() != null): ?>
+                                    <?php /* @escapeNotVerified */ echo $params->getHeight() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getDimensionUnits()) ?>
+                                <?php else: ?>
+                                    --
+                                <?php endif; ?>
+                                </td>
+                            </tr>
+                        </tbody>
+                    </table>
+                </div>
+                <div class="col-m-4">
+                    <table class="admin__table-secondary">
+                        <tbody>
+                        <?php if ($params->getDeliveryConfirmation() != null): ?>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Signature Confirmation') ?></th>
+                                <td><?php /* @escapeNotVerified */ echo $block->getDeliveryConfirmationTypeByCode($params->getDeliveryConfirmation()) ?></td>
+                            </tr>
+                        <?php endif; ?>
+                        <?php if ($params->getContentType() != null): ?>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Contents') ?></th>
+                                <?php if ($params->getContentType() == 'OTHER'): ?>
+                                    <td><?php echo $block->escapeHtml($params->getContentTypeOther()) ?></td>
+                                <?php else: ?>
+                                    <td><?php /* @escapeNotVerified */ echo $block->getContentTypeByCode($params->getContentType()) ?></td>
+                                <?php endif; ?>
+                            </tr>
+                        <?php endif; ?>
+                        <?php if ($params->getGirth()): ?>
+                            <tr>
+                                <th><?php /* @escapeNotVerified */ echo __('Girth') ?></th>
+                                <td><?php /* @escapeNotVerified */ echo $params->getGirth() . ' ' . $this->helper('Magento\Shipping\Helper\Carrier')->getMeasureDimensionName($params->getGirthDimensionUnits()) ?></td>
+                            </tr>
+                        <?php endif; ?>
+                        </tbody>
+                    </table>
                 </div>
-            <?php endforeach; ?>
             </div>
         </div>
-        <div class="popup-window-buttons-set">
-            <?php /* @escapeNotVerified */ echo $block->getPrintButton() ?>
-            <button type="button" class="action-ok SavePackagesBtn save" onclick="hidePackedWindow();" title="<?php /* @escapeNotVerified */ echo __('Products should be added to package(s)')?>">
-                <span><?php /* @escapeNotVerified */ echo __('OK') ?></span>
-            </button>
+        <div class="admin__page-section-item-title">
+            <span class="title"><?php /* @escapeNotVerified */ echo __('Items in the Package') ?></span>
         </div>
-    </div>
+        <div class="admin__table-wrapper">
+            <table class="data-table admin__table-primary">
+                <thead>
+                <tr class="headings">
+                    <th class="col-product"><span><?php /* @escapeNotVerified */ echo __('Product') ?></span></th>
+                    <th class="col-weight"><span><?php /* @escapeNotVerified */ echo __('Weight') ?></span></th>
+                    <?php if ($block->displayCustomsValue()): ?>
+                        <th class="col-custom"><span><?php /* @escapeNotVerified */ echo __('Customs Value') ?></span></th>
+                    <?php endif; ?>
+                    <th class="col-qty"><span><?php /* @escapeNotVerified */ echo __('Qty Ordered') ?></span></th>
+                    <th class="col-qty"><span><?php /* @escapeNotVerified */ echo __('Qty') ?></span></th>
+                </tr>
+                </thead>
+                <tbody id="">
+                <?php foreach ($package->getItems() as $itemId => $item) : ?>
+                    <?php $item = new \Magento\Framework\DataObject($item) ?>
+                    <tr title="#" id="">
+                        <td class="col-product">
+                            <?php /* @escapeNotVerified */ echo $item->getName(); ?>
+                        </td>
+                        <td class="col-weight">
+                            <?php /* @escapeNotVerified */ echo $item->getWeight(); ?>
+                        </td>
+                        <?php if ($block->displayCustomsValue()): ?>
+                            <td class="col-custom"><?php /* @escapeNotVerified */ echo $block->displayCustomsPrice($item->getCustomsValue()) ?></td>
+                        <?php endif; ?>
+                        <td class="col-qty">
+                            <?php /* @escapeNotVerified */ echo $block->getQtyOrderedItem($item->getOrderItemId()); ?>
+                        </td>
+                        <td class="col-qty">
+                            <?php /* @escapeNotVerified */ echo $item->getQty()*1; ?>
+                        </td>
+                    </tr>
+                <?php endforeach; ?>
+                </tbody>
+            </table>
+        </div>
+    </section>
+<?php endforeach; ?>
 </div>
-
 <script>
-require(['prototype'], function(){
-
-//<![CDATA[
     function showPackedWindow() {
-        var window = $('packed_window');
-        window.show().setStyle({
-            'marginLeft': -window.getDimensions().width/2 + 'px'
-        });
-        $('popup-window-mask').setStyle({
-            height: $('html-body').getHeight() + 'px'
-        }).show();
+        jQuery('#packed_window').modal('openModal');
     }
-    function hidePackedWindow() {
-        $('packed_window').hide();
-        $('popup-window-mask').hide();
+</script>
+<?php
+$printLocation = $block->getUrl(
+    'adminhtml/order_shipment/printPackage',
+    array('shipment_id' => $block->getShipment()->getId())
+);
+?>
+<script type="text/x-magento-init">
+    {
+        "#packed_window": {
+            "Magento_Shipping/js/packages":{
+                "type":"slide",
+                "title":"<?= /* @escapeNotVerified */  __('Packages') ?>",
+                "url": "<?= /* @escapeNotVerified */ $printLocation ?>"
+            }
+        }
     }
-    window.hidePackedWindow = hidePackedWindow;
-    window.showPackedWindow = showPackedWindow;
-//]]>
-
-});
 </script>
diff --git a/app/code/Magento/Shipping/view/adminhtml/templates/order/Tracking/view.phtml b/app/code/Magento/Shipping/view/adminhtml/templates/order/tracking/view.phtml
similarity index 100%
rename from app/code/Magento/Shipping/view/adminhtml/templates/order/Tracking/view.phtml
rename to app/code/Magento/Shipping/view/adminhtml/templates/order/tracking/view.phtml
diff --git a/app/code/Magento/Shipping/view/adminhtml/web/js/packages.js b/app/code/Magento/Shipping/view/adminhtml/web/js/packages.js
new file mode 100644
index 0000000000000000000000000000000000000000..36b934c0e9c7ec58d553a463fdd051d7658f163b
--- /dev/null
+++ b/app/code/Magento/Shipping/view/adminhtml/web/js/packages.js
@@ -0,0 +1,39 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'jquery',
+    'Magento_Ui/js/modal/modal',
+    'mage/translate'
+], function ($, modal, $t) {
+    'use strict';
+
+    return function (config, element) {
+        config.buttons = [
+            {
+                text: $t('Print'),
+                'class': 'action action-primary',
+
+                /**
+                 * Click handler
+                 */
+                click: function () {
+                    window.location.href = this.options.url;
+                }
+            }, {
+                text: $t('Cancel'),
+                'class': 'action action-secondary',
+
+                /**
+                 * Click handler
+                 */
+                click: function () {
+                    this.closeModal();
+                }
+            }
+        ];
+        modal(config, element);
+    };
+});
diff --git a/app/code/Magento/Sitemap/Model/Observer.php b/app/code/Magento/Sitemap/Model/Observer.php
index e9c37512bd14e7786be9d416a38e91814cb6edf3..4f54445e6ae1035cf2a18debe7804566b8e1db76 100644
--- a/app/code/Magento/Sitemap/Model/Observer.php
+++ b/app/code/Magento/Sitemap/Model/Observer.php
@@ -45,7 +45,7 @@ class Observer
     protected $_scopeConfig;
 
     /**
-     * @var \Magento\Sitemap\Model\Resource\Sitemap\CollectionFactory
+     * @var \Magento\Sitemap\Model\ResourceModel\Sitemap\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -66,14 +66,14 @@ class Observer
 
     /**
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
-     * @param Resource\Sitemap\CollectionFactory $collectionFactory
+     * @param \Magento\Sitemap\Model\ResourceModel\Sitemap\CollectionFactory $collectionFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder
      * @param \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
      */
     public function __construct(
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
-        \Magento\Sitemap\Model\Resource\Sitemap\CollectionFactory $collectionFactory,
+        \Magento\Sitemap\Model\ResourceModel\Sitemap\CollectionFactory $collectionFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder,
         \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
@@ -105,7 +105,7 @@ class Observer
         }
 
         $collection = $this->_collectionFactory->create();
-        /* @var $collection \Magento\Sitemap\Model\Resource\Sitemap\Collection */
+        /* @var $collection \Magento\Sitemap\Model\ResourceModel\Sitemap\Collection */
         foreach ($collection as $sitemap) {
             /* @var $sitemap \Magento\Sitemap\Model\Sitemap */
 
diff --git a/app/code/Magento/Sitemap/Model/Resource/Catalog/Category.php b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Category.php
similarity index 93%
rename from app/code/Magento/Sitemap/Model/Resource/Catalog/Category.php
rename to app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Category.php
index 6955d96d6b54a22cea01e26e3690ba188d6f3cdb..75e853c13c6024ec0969a2a163d00fce5eafde9d 100644
--- a/app/code/Magento/Sitemap/Model/Resource/Catalog/Category.php
+++ b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Category.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sitemap\Model\Resource\Catalog;
+namespace Magento\Sitemap\Model\ResourceModel\Catalog;
 
 use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
 
@@ -12,7 +12,7 @@ use Magento\CatalogUrlRewrite\Model\CategoryUrlRewriteGenerator;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Category extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Category extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Collection Zend Db select
@@ -34,20 +34,20 @@ class Category extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category
+     * @var \Magento\Catalog\Model\ResourceModel\Category
      */
     protected $_categoryResource;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Catalog\Model\Resource\Category $categoryResource
+     * @param \Magento\Catalog\Model\ResourceModel\Category $categoryResource
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Catalog\Model\Resource\Category $categoryResource,
+        \Magento\Catalog\Model\ResourceModel\Category $categoryResource,
         $connectionName = null
     ) {
         $this->_storeManager = $storeManager;
diff --git a/app/code/Magento/Sitemap/Model/Resource/Catalog/Product.php b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php
similarity index 94%
rename from app/code/Magento/Sitemap/Model/Resource/Catalog/Product.php
rename to app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php
index ad5ef50ab3c7a774a6cbdf004b4db748a48fb21d..5a93ef13583fe43c2dc45ad7e19aa294c46c4094 100644
--- a/app/code/Magento/Sitemap/Model/Resource/Catalog/Product.php
+++ b/app/code/Magento/Sitemap/Model/ResourceModel/Catalog/Product.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sitemap\Model\Resource\Catalog;
+namespace Magento\Sitemap\Model\ResourceModel\Catalog;
 
 use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
 
@@ -13,7 +13,7 @@ use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator;
  * @author      Magento Core Team <core@magentocommerce.com>
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Product extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Product extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     const NOT_SELECTED_IMAGE = 'no_selection';
 
@@ -48,7 +48,7 @@ class Product extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_sitemapData = null;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product
+     * @var \Magento\Catalog\Model\ResourceModel\Product
      */
     protected $_productResource;
 
@@ -68,7 +68,7 @@ class Product extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_productStatus;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media
      */
     protected $_mediaAttribute;
 
@@ -83,26 +83,26 @@ class Product extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_mediaConfig;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Sitemap\Helper\Data $sitemapData
-     * @param \Magento\Catalog\Model\Resource\Product $productResource
+     * @param \Magento\Catalog\Model\ResourceModel\Product $productResource
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Catalog\Model\Product\Visibility $productVisibility
      * @param \Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus
-     * @param \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media $mediaAttribute
+     * @param \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media $mediaAttribute
      * @param \Magento\Eav\Model\ConfigFactory $eavConfigFactory
      * @param \Magento\Catalog\Model\Product\Media\Config $mediaConfig
      * @param string $connectionName
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Sitemap\Helper\Data $sitemapData,
-        \Magento\Catalog\Model\Resource\Product $productResource,
+        \Magento\Catalog\Model\ResourceModel\Product $productResource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Catalog\Model\Product\Visibility $productVisibility,
         \Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus,
-        \Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media $mediaAttribute,
+        \Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media $mediaAttribute,
         \Magento\Eav\Model\ConfigFactory $eavConfigFactory,
         \Magento\Catalog\Model\Product\Media\Config $mediaConfig,
         $connectionName = null
@@ -234,7 +234,7 @@ class Product extends \Magento\Framework\Model\Resource\Db\AbstractDb
                 'attribute_id' => $attribute->getId(),
                 'table' => $attribute->getBackend()->getTable(),
                 'is_global' => $attribute->getIsGlobal() ==
-                \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL,
+                \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
                 'backend_type' => $attribute->getBackendType(),
             ];
         }
diff --git a/app/code/Magento/Sitemap/Model/Resource/Cms/Page.php b/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php
similarity index 93%
rename from app/code/Magento/Sitemap/Model/Resource/Cms/Page.php
rename to app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php
index e676b9630680919dcd6d05e32c6846e5ddf8bc50..07640bb6a7f2e18902ce628c2070814eb09ef0ca 100644
--- a/app/code/Magento/Sitemap/Model/Resource/Cms/Page.php
+++ b/app/code/Magento/Sitemap/Model/ResourceModel/Cms/Page.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sitemap\Model\Resource\Cms;
+namespace Magento\Sitemap\Model\ResourceModel\Cms;
 
 /**
  * Sitemap cms page collection model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Page extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Page extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Init resource model (catalog/category)
diff --git a/app/code/Magento/Sitemap/Model/Resource/Sitemap.php b/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap.php
similarity index 75%
rename from app/code/Magento/Sitemap/Model/Resource/Sitemap.php
rename to app/code/Magento/Sitemap/Model/ResourceModel/Sitemap.php
index ef960f83a84b2ea969cc3d8bf420ad6c3ce820c5..b3ff7ce4838c62655195eaf80fa533ce375d9da2 100644
--- a/app/code/Magento/Sitemap/Model/Resource/Sitemap.php
+++ b/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sitemap\Model\Resource;
+namespace Magento\Sitemap\Model\ResourceModel;
 
 /**
  * Sitemap resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Sitemap extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Sitemap extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Init resource model
diff --git a/app/code/Magento/Sitemap/Model/Resource/Sitemap/Collection.php b/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap/Collection.php
similarity index 78%
rename from app/code/Magento/Sitemap/Model/Resource/Sitemap/Collection.php
rename to app/code/Magento/Sitemap/Model/ResourceModel/Sitemap/Collection.php
index db5c66b319ab2bf21828bcf4aa35e751001e85a8..b470759b8901a99f4a9fc6c759016f38112cd56c 100644
--- a/app/code/Magento/Sitemap/Model/Resource/Sitemap/Collection.php
+++ b/app/code/Magento/Sitemap/Model/ResourceModel/Sitemap/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sitemap\Model\Resource\Sitemap;
+namespace Magento\Sitemap\Model\ResourceModel\Sitemap;
 
 /**
  * Sitemap resource model collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Init collection
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     public function _construct()
     {
-        $this->_init('Magento\Sitemap\Model\Sitemap', 'Magento\Sitemap\Model\Resource\Sitemap');
+        $this->_init('Magento\Sitemap\Model\Sitemap', 'Magento\Sitemap\Model\ResourceModel\Sitemap');
     }
 
     /**
diff --git a/app/code/Magento/Sitemap/Model/Sitemap.php b/app/code/Magento/Sitemap/Model/Sitemap.php
index 841e232dd0bf6cfeaa5de6098ceca5c732ce341d..722c823d3f02854a938fb5280da07669e957b9e5 100644
--- a/app/code/Magento/Sitemap/Model/Sitemap.php
+++ b/app/code/Magento/Sitemap/Model/Sitemap.php
@@ -13,8 +13,8 @@ use Magento\Framework\App\Filesystem\DirectoryList;
 /**
  * Sitemap model
  *
- * @method \Magento\Sitemap\Model\Resource\Sitemap _getResource()
- * @method \Magento\Sitemap\Model\Resource\Sitemap getResource()
+ * @method \Magento\Sitemap\Model\ResourceModel\Sitemap _getResource()
+ * @method \Magento\Sitemap\Model\ResourceModel\Sitemap getResource()
  * @method string getSitemapType()
  * @method \Magento\Sitemap\Model\Sitemap setSitemapType(string $value)
  * @method string getSitemapFilename()
@@ -112,17 +112,17 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel
     protected $_escaper;
 
     /**
-     * @var \Magento\Sitemap\Model\Resource\Catalog\CategoryFactory
+     * @var \Magento\Sitemap\Model\ResourceModel\Catalog\CategoryFactory
      */
     protected $_categoryFactory;
 
     /**
-     * @var \Magento\Sitemap\Model\Resource\Catalog\ProductFactory
+     * @var \Magento\Sitemap\Model\ResourceModel\Catalog\ProductFactory
      */
     protected $_productFactory;
 
     /**
-     * @var \Magento\Sitemap\Model\Resource\Cms\PageFactory
+     * @var \Magento\Sitemap\Model\ResourceModel\Cms\PageFactory
      */
     protected $_cmsFactory;
 
@@ -152,14 +152,14 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Escaper $escaper
      * @param \Magento\Sitemap\Helper\Data $sitemapData
      * @param \Magento\Framework\Filesystem $filesystem
-     * @param \Magento\Sitemap\Model\Resource\Catalog\CategoryFactory $categoryFactory
-     * @param \Magento\Sitemap\Model\Resource\Catalog\ProductFactory $productFactory
-     * @param \Magento\Sitemap\Model\Resource\Cms\PageFactory $cmsFactory
+     * @param \Magento\Sitemap\Model\ResourceModel\Catalog\CategoryFactory $categoryFactory
+     * @param \Magento\Sitemap\Model\ResourceModel\Catalog\ProductFactory $productFactory
+     * @param \Magento\Sitemap\Model\ResourceModel\Cms\PageFactory $cmsFactory
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $modelDate
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\App\RequestInterface $request
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -170,14 +170,14 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Escaper $escaper,
         \Magento\Sitemap\Helper\Data $sitemapData,
         \Magento\Framework\Filesystem $filesystem,
-        \Magento\Sitemap\Model\Resource\Catalog\CategoryFactory $categoryFactory,
-        \Magento\Sitemap\Model\Resource\Catalog\ProductFactory $productFactory,
-        \Magento\Sitemap\Model\Resource\Cms\PageFactory $cmsFactory,
+        \Magento\Sitemap\Model\ResourceModel\Catalog\CategoryFactory $categoryFactory,
+        \Magento\Sitemap\Model\ResourceModel\Catalog\ProductFactory $productFactory,
+        \Magento\Sitemap\Model\ResourceModel\Cms\PageFactory $cmsFactory,
         \Magento\Framework\Stdlib\DateTime\DateTime $modelDate,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\App\RequestInterface $request,
         \Magento\Framework\Stdlib\DateTime $dateTime,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -201,7 +201,7 @@ class Sitemap extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Sitemap\Model\Resource\Sitemap');
+        $this->_init('Magento\Sitemap\Model\ResourceModel\Sitemap');
     }
 
     /**
diff --git a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php
index 449516d07beb5bcf67831c1f4c1b9ba40d78182a..cb48d8a7bc15ad08b40a1ed8ee88a7b9dbf77f92 100644
--- a/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php
+++ b/app/code/Magento/Sitemap/Test/Unit/Model/SitemapTest.php
@@ -16,22 +16,22 @@ class SitemapTest extends \PHPUnit_Framework_TestCase
     protected $_helperMockSitemap;
 
     /**
-     * @var \Magento\Sitemap\Model\Resource\Sitemap
+     * @var \Magento\Sitemap\Model\ResourceModel\Sitemap
      */
     protected $_resourceMock;
 
     /**
-     * @var \Magento\Sitemap\Model\Resource\Catalog\Category
+     * @var \Magento\Sitemap\Model\ResourceModel\Catalog\Category
      */
     protected $_sitemapCategoryMock;
 
     /**
-     * @var \Magento\Sitemap\Model\Resource\Catalog\Product
+     * @var \Magento\Sitemap\Model\ResourceModel\Catalog\Product
      */
     protected $_sitemapProductMock;
 
     /**
-     * @var \Magento\Sitemap\Model\Resource\Cms\Page
+     * @var \Magento\Sitemap\Model\ResourceModel\Cms\Page
      */
     protected $_sitemapCmsPageMock;
 
@@ -56,13 +56,13 @@ class SitemapTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->_sitemapCategoryMock = $this->getMockBuilder(
-            'Magento\Sitemap\Model\Resource\Catalog\Category'
+            'Magento\Sitemap\Model\ResourceModel\Catalog\Category'
         )->disableOriginalConstructor()->getMock();
         $this->_sitemapProductMock = $this->getMockBuilder(
-            'Magento\Sitemap\Model\Resource\Catalog\Product'
+            'Magento\Sitemap\Model\ResourceModel\Catalog\Product'
         )->disableOriginalConstructor()->getMock();
         $this->_sitemapCmsPageMock = $this->getMockBuilder(
-            'Magento\Sitemap\Model\Resource\Cms\Page'
+            'Magento\Sitemap\Model\ResourceModel\Cms\Page'
         )->disableOriginalConstructor()->getMock();
         $this->_helperMockSitemap = $this->getMock(
             'Magento\Sitemap\Helper\Data',
@@ -114,7 +114,7 @@ class SitemapTest extends \PHPUnit_Framework_TestCase
         $this->_helperMockSitemap->expects($this->any())->method('getPagePriority')->will($this->returnValue('0.25'));
 
         $this->_resourceMock = $this->getMockBuilder(
-            'Magento\Sitemap\Model\Resource\Sitemap'
+            'Magento\Sitemap\Model\ResourceModel\Sitemap'
         )->setMethods(
             ['_construct', 'beginTransaction', 'rollBack', 'save', 'addCommitCallback', 'commit', '__wakeup']
         )->disableOriginalConstructor()->getMock();
@@ -585,7 +585,7 @@ class SitemapTest extends \PHPUnit_Framework_TestCase
     protected function _getModelConstructorArgs()
     {
         $categoryFactory = $this->getMockBuilder(
-            'Magento\Sitemap\Model\Resource\Catalog\CategoryFactory'
+            'Magento\Sitemap\Model\ResourceModel\Catalog\CategoryFactory'
         )->setMethods(
             ['create']
         )->disableOriginalConstructor()->getMock();
@@ -598,14 +598,14 @@ class SitemapTest extends \PHPUnit_Framework_TestCase
         );
 
         $productFactory = $this->getMockBuilder(
-            'Magento\Sitemap\Model\Resource\Catalog\ProductFactory'
+            'Magento\Sitemap\Model\ResourceModel\Catalog\ProductFactory'
         )->setMethods(
             ['create']
         )->disableOriginalConstructor()->getMock();
         $productFactory->expects($this->any())->method('create')->will($this->returnValue($this->_sitemapProductMock));
 
         $cmsFactory = $this->getMockBuilder(
-            'Magento\Sitemap\Model\Resource\Cms\PageFactory'
+            'Magento\Sitemap\Model\ResourceModel\Cms\PageFactory'
         )->setMethods(
             ['create']
         )->disableOriginalConstructor()->getMock();
diff --git a/app/code/Magento/Sitemap/etc/di.xml b/app/code/Magento/Sitemap/etc/di.xml
index ce96f8645f2388b12240cd3befddb6d6445853ef..cc300f0f99225a885c2a2615c0c0d0533130034f 100644
--- a/app/code/Magento/Sitemap/etc/di.xml
+++ b/app/code/Magento/Sitemap/etc/di.xml
@@ -8,7 +8,7 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <type name="Magento\Sitemap\Model\Sitemap">
         <arguments>
-            <argument name="resource" xsi:type="object">Magento\Sitemap\Model\Resource\Sitemap</argument>
+            <argument name="resource" xsi:type="object">Magento\Sitemap\Model\ResourceModel\Sitemap</argument>
         </arguments>
     </type>
 </config>
diff --git a/app/code/Magento/Sitemap/view/adminhtml/layout/adminhtml_sitemap_index_grid_block.xml b/app/code/Magento/Sitemap/view/adminhtml/layout/adminhtml_sitemap_index_grid_block.xml
index aac8b8a34de8e84ced11860eb910b7bd2257ae7c..49be7c36447697dd1a74343ca4508162dce51cbf 100644
--- a/app/code/Magento/Sitemap/view/adminhtml/layout/adminhtml_sitemap_index_grid_block.xml
+++ b/app/code/Magento/Sitemap/view/adminhtml/layout/adminhtml_sitemap_index_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.sitemap.container.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">sitemapGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Sitemap\Model\Resource\Sitemap\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Sitemap\Model\ResourceModel\Sitemap\Collection</argument>
                     <argument name="default_sort" xsi:type="string">sitemap_id</argument>
                 </arguments>
                 <block class="Magento\Backend\Block\Widget\Grid\ColumnSet" name="adminhtml.sitemap.container.grid.columnSet" as="grid.columnSet">
diff --git a/app/code/Magento/Store/App/Request/PathInfoProcessor.php b/app/code/Magento/Store/App/Request/PathInfoProcessor.php
index ebe3b64aa3b9c90283a41a36a2fa62843ddd819d..ef07979226c54544c0650487071ae7e045255ffa 100644
--- a/app/code/Magento/Store/App/Request/PathInfoProcessor.php
+++ b/app/code/Magento/Store/App/Request/PathInfoProcessor.php
@@ -5,19 +5,21 @@
  */
 namespace Magento\Store\App\Request;
 
+use Magento\Framework\Exception\NoSuchEntityException;
+
 class PathInfoProcessor implements \Magento\Framework\App\Request\PathInfoProcessorInterface
 {
     /**
      * @var \Magento\Store\Model\StoreManagerInterface
      */
-    private $_storeManager;
+    private $storeManager;
 
     /**
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      */
     public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager)
     {
-        $this->_storeManager = $storeManager;
+        $this->storeManager = $storeManager;
     }
 
     /**
@@ -33,14 +35,15 @@ class PathInfoProcessor implements \Magento\Framework\App\Request\PathInfoProces
         $storeCode = $pathParts[0];
 
         try {
-            $store = $this->_storeManager->getStore($storeCode);
-        } catch (\InvalidArgumentException $e) { // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException
+            /** @var \Magento\Store\Api\Data\StoreInterface $store */
+            $store = $this->storeManager->getStore($storeCode);
+        } catch (NoSuchEntityException $e) {
             return $pathInfo;
         }
 
         if ($store->isUseStoreInUrl()) {
             if (!$request->isDirectAccessFrontendName($storeCode)) {
-                $this->_storeManager->setCurrentStore($storeCode);
+                $this->storeManager->setCurrentStore($storeCode);
                 $pathInfo = '/' . (isset($pathParts[1]) ? $pathParts[1] : '');
                 return $pathInfo;
             } elseif (!empty($storeCode)) {
diff --git a/app/code/Magento/Store/Controller/Store/SwitchAction.php b/app/code/Magento/Store/Controller/Store/SwitchAction.php
index 647b2cf6c320f7e6f277fd155d9bf52232a450cf..b527b7ad4fe702f5194e115229d0bb4699388ca0 100644
--- a/app/code/Magento/Store/Controller/Store/SwitchAction.php
+++ b/app/code/Magento/Store/Controller/Store/SwitchAction.php
@@ -9,6 +9,7 @@ namespace Magento\Store\Controller\Store;
 use Magento\Framework\App\Action\Action;
 use Magento\Framework\App\Action\Context as ActionContext;
 use Magento\Framework\App\Http\Context as HttpContext;
+use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Store\Api\StoreCookieManagerInterface;
 use Magento\Store\Api\StoreRepositoryInterface;
 use Magento\Store\Model\Store;
@@ -78,7 +79,7 @@ class SwitchAction extends Action
             $store = $this->storeRepository->getActiveStoreByCode($storeCode);
         } catch (StoreIsInactiveException $e) {
             $error = __('Requested store is inactive');
-        } catch (\InvalidArgumentException $e) {
+        } catch (NoSuchEntityException $e) {
             $error = __('Requested store is not found');
         }
 
diff --git a/app/code/Magento/Store/Model/Config/Reader/DefaultReader.php b/app/code/Magento/Store/Model/Config/Reader/DefaultReader.php
index 7bb9981369440c9c8062ffe6308376c8b089a05f..5943281817914d994e6c6f4a59591dc5ad053262 100644
--- a/app/code/Magento/Store/Model/Config/Reader/DefaultReader.php
+++ b/app/code/Magento/Store/Model/Config/Reader/DefaultReader.php
@@ -23,19 +23,19 @@ class DefaultReader implements \Magento\Framework\App\Config\Scope\ReaderInterfa
     protected $_converter;
 
     /**
-     * @var \Magento\Store\Model\Resource\Config\Collection\ScopedFactory
+     * @var \Magento\Store\Model\ResourceModel\Config\Collection\ScopedFactory
      */
     protected $_collectionFactory;
 
     /**
      * @param \Magento\Framework\App\Config\Initial $initialConfig
      * @param \Magento\Framework\App\Config\Scope\Converter $converter
-     * @param \Magento\Store\Model\Resource\Config\Collection\ScopedFactory $collectionFactory
+     * @param \Magento\Store\Model\ResourceModel\Config\Collection\ScopedFactory $collectionFactory
      */
     public function __construct(
         \Magento\Framework\App\Config\Initial $initialConfig,
         \Magento\Framework\App\Config\Scope\Converter $converter,
-        \Magento\Store\Model\Resource\Config\Collection\ScopedFactory $collectionFactory
+        \Magento\Store\Model\ResourceModel\Config\Collection\ScopedFactory $collectionFactory
     ) {
         $this->_initialConfig = $initialConfig;
         $this->_converter = $converter;
diff --git a/app/code/Magento/Store/Model/Config/Reader/Store.php b/app/code/Magento/Store/Model/Config/Reader/Store.php
index c79a06ffe4c3a1478a7ab0a1424ab109bc2bfd92..427106531e9681cbf369675908c5d6ad25de5059 100644
--- a/app/code/Magento/Store/Model/Config/Reader/Store.php
+++ b/app/code/Magento/Store/Model/Config/Reader/Store.php
@@ -25,7 +25,7 @@ class Store implements \Magento\Framework\App\Config\Scope\ReaderInterface
     protected $_converter;
 
     /**
-     * @var \Magento\Store\Model\Resource\Config\Collection\ScopedFactory
+     * @var \Magento\Store\Model\ResourceModel\Config\Collection\ScopedFactory
      */
     protected $_collectionFactory;
 
@@ -38,14 +38,14 @@ class Store implements \Magento\Framework\App\Config\Scope\ReaderInterface
      * @param \Magento\Framework\App\Config\Initial $initialConfig
      * @param \Magento\Framework\App\Config\ScopePool $scopePool
      * @param \Magento\Store\Model\Config\Converter $converter
-     * @param \Magento\Store\Model\Resource\Config\Collection\ScopedFactory $collectionFactory
+     * @param \Magento\Store\Model\ResourceModel\Config\Collection\ScopedFactory $collectionFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      */
     public function __construct(
         \Magento\Framework\App\Config\Initial $initialConfig,
         \Magento\Framework\App\Config\ScopePool $scopePool,
         \Magento\Store\Model\Config\Converter $converter,
-        \Magento\Store\Model\Resource\Config\Collection\ScopedFactory $collectionFactory,
+        \Magento\Store\Model\ResourceModel\Config\Collection\ScopedFactory $collectionFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager
     ) {
         $this->_initialConfig = $initialConfig;
diff --git a/app/code/Magento/Store/Model/Config/Reader/Website.php b/app/code/Magento/Store/Model/Config/Reader/Website.php
index 7971deb6c9713199cfe7c85617ebe767556edb18..e06743c31caa3d65809b59257dd94a2e5a2497f4 100644
--- a/app/code/Magento/Store/Model/Config/Reader/Website.php
+++ b/app/code/Magento/Store/Model/Config/Reader/Website.php
@@ -25,7 +25,7 @@ class Website implements \Magento\Framework\App\Config\Scope\ReaderInterface
     protected $_converter;
 
     /**
-     * @var \Magento\Store\Model\Resource\Config\Collection\ScopedFactory
+     * @var \Magento\Store\Model\ResourceModel\Config\Collection\ScopedFactory
      */
     protected $_collectionFactory;
 
@@ -38,14 +38,14 @@ class Website implements \Magento\Framework\App\Config\Scope\ReaderInterface
      * @param \Magento\Framework\App\Config\Initial $initialConfig
      * @param \Magento\Framework\App\Config\ScopePool $scopePool
      * @param \Magento\Framework\App\Config\Scope\Converter $converter
-     * @param \Magento\Store\Model\Resource\Config\Collection\ScopedFactory $collectionFactory
+     * @param \Magento\Store\Model\ResourceModel\Config\Collection\ScopedFactory $collectionFactory
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
      */
     public function __construct(
         \Magento\Framework\App\Config\Initial $initialConfig,
         \Magento\Framework\App\Config\ScopePool $scopePool,
         \Magento\Framework\App\Config\Scope\Converter $converter,
-        \Magento\Store\Model\Resource\Config\Collection\ScopedFactory $collectionFactory,
+        \Magento\Store\Model\ResourceModel\Config\Collection\ScopedFactory $collectionFactory,
         \Magento\Store\Model\WebsiteFactory $websiteFactory
     ) {
         $this->_initialConfig = $initialConfig;
diff --git a/app/code/Magento/Store/Model/Group.php b/app/code/Magento/Store/Model/Group.php
index 9354404d90ae12915466ef2d4cd49e976448b912..7ef0dd37d50391d52ff4d99a20b33237c21803f9 100644
--- a/app/code/Magento/Store/Model/Group.php
+++ b/app/code/Magento/Store/Model/Group.php
@@ -7,8 +7,8 @@
 /**
  * Store group model
  *
- * @method \Magento\Store\Model\Resource\Group _getResource()
- * @method \Magento\Store\Model\Resource\Group getResource()
+ * @method \Magento\Store\Model\ResourceModel\Group _getResource()
+ * @method \Magento\Store\Model\ResourceModel\Group getResource()
  */
 namespace Magento\Store\Model;
 
@@ -43,7 +43,7 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
     /**
      * Group Store collection array
      *
-     * @var \Magento\Store\Model\Resource\Store\Collection[]
+     * @var \Magento\Store\Model\ResourceModel\Store\Collection[]
      */
     protected $_stores;
 
@@ -81,7 +81,7 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
     private $_isReadOnly = false;
 
     /**
-     * @var \Magento\Config\Model\Resource\Config\Data
+     * @var \Magento\Config\Model\ResourceModel\Config\Data
      */
     protected $_configDataResource;
 
@@ -100,10 +100,10 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Config\Model\Resource\Config\Data $configDataResource
+     * @param \Magento\Config\Model\ResourceModel\Config\Data $configDataResource
      * @param \Magento\Store\Model\Store $store
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -113,10 +113,10 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
-        \Magento\Config\Model\Resource\Config\Data $configDataResource,
-        \Magento\Store\Model\Resource\Store\CollectionFactory $storeListFactory,
+        \Magento\Config\Model\ResourceModel\Config\Data $configDataResource,
+        \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeListFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -141,7 +141,7 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Store\Model\Resource\Group');
+        $this->_init('Magento\Store\Model\ResourceModel\Group');
     }
 
     /**
@@ -188,7 +188,7 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
     /**
      * Retrieve new (not loaded) Store collection object with group filter
      *
-     * @return \Magento\Store\Model\Resource\Store\Collection
+     * @return \Magento\Store\Model\ResourceModel\Store\Collection
      */
     public function getStoreCollection()
     {
@@ -198,7 +198,7 @@ class Group extends \Magento\Framework\Model\AbstractExtensibleModel implements
     /**
      * Retrieve website store objects
      *
-     * @return \Magento\Store\Model\Resource\Store\Collection[]
+     * @return \Magento\Store\Model\ResourceModel\Store\Collection[]
      */
     public function getStores()
     {
diff --git a/app/code/Magento/Store/Model/GroupRepository.php b/app/code/Magento/Store/Model/GroupRepository.php
index 011e64238aadbe8701b48e717c91726dd746a155..c341ea3d2762cc7b5166a6bf86fc4c48eb229be4 100644
--- a/app/code/Magento/Store/Model/GroupRepository.php
+++ b/app/code/Magento/Store/Model/GroupRepository.php
@@ -25,17 +25,17 @@ class GroupRepository implements \Magento\Store\Api\GroupRepositoryInterface
     protected $allLoaded = false;
 
     /**
-     * @var \Magento\Store\Model\Resource\Group\CollectionFactory
+     * @var \Magento\Store\Model\ResourceModel\Group\CollectionFactory
      */
     protected $groupCollectionFactory;
 
     /**
      * @param GroupFactory $groupFactory
-     * @param \Magento\Store\Model\Resource\Group\CollectionFactory $groupCollectionFactory
+     * @param \Magento\Store\Model\ResourceModel\Group\CollectionFactory $groupCollectionFactory
      */
     public function __construct(
         GroupFactory $groupFactory,
-        \Magento\Store\Model\Resource\Group\CollectionFactory $groupCollectionFactory
+        \Magento\Store\Model\ResourceModel\Group\CollectionFactory $groupCollectionFactory
     ) {
         $this->groupFactory = $groupFactory;
         $this->groupCollectionFactory = $groupCollectionFactory;
@@ -64,7 +64,7 @@ class GroupRepository implements \Magento\Store\Api\GroupRepositoryInterface
     public function getList()
     {
         if (!$this->allLoaded) {
-            /** @var \Magento\Store\Model\Resource\Group\Collection $groupCollection */
+            /** @var \Magento\Store\Model\ResourceModel\Group\Collection $groupCollection */
             $groupCollection = $this->groupCollectionFactory->create();
             $groupCollection->setLoadDefault(true);
             foreach ($groupCollection as $item) {
diff --git a/app/code/Magento/Store/Model/Resource/Config/Collection/Scoped.php b/app/code/Magento/Store/Model/ResourceModel/Config/Collection/Scoped.php
similarity index 85%
rename from app/code/Magento/Store/Model/Resource/Config/Collection/Scoped.php
rename to app/code/Magento/Store/Model/ResourceModel/Config/Collection/Scoped.php
index dad27c68f64d6f5efcf445dbc8ffdf85f9bfab7e..3e37e1ad8d6a0305ae34675f64479d4278a60e1a 100644
--- a/app/code/Magento/Store/Model/Resource/Config/Collection/Scoped.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Config/Collection/Scoped.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Store\Model\Resource\Config\Collection;
+namespace Magento\Store\Model\ResourceModel\Config\Collection;
 
-class Scoped extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Scoped extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Scope to filter by
@@ -28,7 +28,7 @@ class Scoped extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCol
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Config\Model\Resource\Config\Data $resource
+     * @param \Magento\Config\Model\ResourceModel\Config\Data $resource
      * @param string $scope
      * @param mixed $connection
      * @param mixed $scopeId
@@ -38,7 +38,7 @@ class Scoped extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCol
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Config\Model\Resource\Config\Data $resource,
+        \Magento\Config\Model\ResourceModel\Config\Data $resource,
         $scope,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
         $scopeId = null
diff --git a/app/code/Magento/Store/Model/Resource/Group.php b/app/code/Magento/Store/Model/ResourceModel/Group.php
similarity index 97%
rename from app/code/Magento/Store/Model/Resource/Group.php
rename to app/code/Magento/Store/Model/ResourceModel/Group.php
index 0261fec217047b9d6580d51e84ccba02c3b7a58e..c3365055aa47d849c6584ee9a8b23bb7fa619970 100644
--- a/app/code/Magento/Store/Model/Resource/Group.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Group.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Store\Model\Resource;
+namespace Magento\Store\Model\ResourceModel;
 
 /**
  * Store group resource model
  */
-class Group extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Group extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Store/Model/Resource/Group/Collection.php b/app/code/Magento/Store/Model/ResourceModel/Group/Collection.php
similarity index 92%
rename from app/code/Magento/Store/Model/Resource/Group/Collection.php
rename to app/code/Magento/Store/Model/ResourceModel/Group/Collection.php
index 3f36a0229884193d4f197a22878232718882cb75..805b90c291abf0d66f79229649d2b6d7a7f59030 100644
--- a/app/code/Magento/Store/Model/Resource/Group/Collection.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Group/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Store\Model\Resource\Group;
+namespace Magento\Store\Model\ResourceModel\Group;
 
 /**
  * Store group collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define resource model
@@ -18,7 +18,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected function _construct()
     {
         $this->setFlag('load_default_store_group', false);
-        $this->_init('Magento\Store\Model\Group', 'Magento\Store\Model\Resource\Group');
+        $this->_init('Magento\Store\Model\Group', 'Magento\Store\Model\ResourceModel\Group');
     }
 
     /**
diff --git a/app/code/Magento/Store/Model/Resource/Store.php b/app/code/Magento/Store/Model/ResourceModel/Store.php
similarity index 94%
rename from app/code/Magento/Store/Model/Resource/Store.php
rename to app/code/Magento/Store/Model/ResourceModel/Store.php
index 444871418e55fa5fbf94b421e40819a3b85b6fe1..fec1340afe64d53a36823924841dd2cb04922c11 100644
--- a/app/code/Magento/Store/Model/Resource/Store.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Store.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Store\Model\Resource;
+namespace Magento\Store\Model\ResourceModel;
 
 /**
  * Store Resource Model
  */
-class Store extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Store extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\App\Cache\Type\Config
@@ -16,11 +16,11 @@ class Store extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $configCache;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\App\Cache\Type\Config $configCacheType
     ) {
         $this->configCache = $configCacheType;
diff --git a/app/code/Magento/Store/Model/Resource/Store/Collection.php b/app/code/Magento/Store/Model/ResourceModel/Store/Collection.php
similarity index 96%
rename from app/code/Magento/Store/Model/Resource/Store/Collection.php
rename to app/code/Magento/Store/Model/ResourceModel/Store/Collection.php
index 3eb4358c1e5724f67dc1096bf7adb41d7029204f..ebef78956a418fc4838bf0b48b68a61a3eaf9502 100644
--- a/app/code/Magento/Store/Model/Resource/Store/Collection.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Store/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Store\Model\Resource\Store;
+namespace Magento\Store\Model\ResourceModel\Store;
 
 /**
  * Stores collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Name prefix of events that are dispatched by model
@@ -32,7 +32,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected function _construct()
     {
         $this->setFlag('load_default_store', false);
-        $this->_init('Magento\Store\Model\Store', 'Magento\Store\Model\Resource\Store');
+        $this->_init('Magento\Store\Model\Store', 'Magento\Store\Model\ResourceModel\Store');
     }
 
     /**
diff --git a/app/code/Magento/Store/Model/Resource/Website.php b/app/code/Magento/Store/Model/ResourceModel/Website.php
similarity index 97%
rename from app/code/Magento/Store/Model/Resource/Website.php
rename to app/code/Magento/Store/Model/ResourceModel/Website.php
index 3466cba79c4fbba50c78a10dff0122f6505fc9ce..43b2612d2160c6f40fe581e146156c319643f881 100644
--- a/app/code/Magento/Store/Model/Resource/Website.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Website.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Store\Model\Resource;
+namespace Magento\Store\Model\ResourceModel;
 
 /**
  * Website Resource Model
  */
-class Website extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Website extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Store/Model/Resource/Website/Collection.php b/app/code/Magento/Store/Model/ResourceModel/Website/Collection.php
similarity index 96%
rename from app/code/Magento/Store/Model/Resource/Website/Collection.php
rename to app/code/Magento/Store/Model/ResourceModel/Website/Collection.php
index 3c50219847772b12b8effdb57a5f9423f9619fac..419350a90318e4ba520551e0d17860be5d709a4a 100644
--- a/app/code/Magento/Store/Model/Resource/Website/Collection.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Website/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Store\Model\Resource\Website;
+namespace Magento\Store\Model\ResourceModel\Website;
 
 /**
  * Websites collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Map field to alias
@@ -25,7 +25,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected function _construct()
     {
         $this->setFlag('load_default_website', false);
-        $this->_init('Magento\Store\Model\Website', 'Magento\Store\Model\Resource\Website');
+        $this->_init('Magento\Store\Model\Website', 'Magento\Store\Model\ResourceModel\Website');
     }
 
     /**
diff --git a/app/code/Magento/Store/Model/Resource/Website/Grid/Collection.php b/app/code/Magento/Store/Model/ResourceModel/Website/Grid/Collection.php
similarity index 72%
rename from app/code/Magento/Store/Model/Resource/Website/Grid/Collection.php
rename to app/code/Magento/Store/Model/ResourceModel/Website/Grid/Collection.php
index 318051598ef5fc9afcf682c0072faae13288e37f..fdc99c33c2f49c8f26d9b70a1d33b6f37e871fdb 100644
--- a/app/code/Magento/Store/Model/Resource/Website/Grid/Collection.php
+++ b/app/code/Magento/Store/Model/ResourceModel/Website/Grid/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Store\Model\Resource\Website\Grid;
+namespace Magento\Store\Model\ResourceModel\Website\Grid;
 
 /**
  * Grid collection
  */
-class Collection extends \Magento\Store\Model\Resource\Website\Collection
+class Collection extends \Magento\Store\Model\ResourceModel\Website\Collection
 {
     /**
      * Join website and store names
diff --git a/app/code/Magento/Store/Model/Service/StoreConfigManager.php b/app/code/Magento/Store/Model/Service/StoreConfigManager.php
index 96cd4ea5b41e10d79e981f4f4b9bb2ac37db6a99..0774f616c688077e36e3632bc35e640429229099 100644
--- a/app/code/Magento/Store/Model/Service/StoreConfigManager.php
+++ b/app/code/Magento/Store/Model/Service/StoreConfigManager.php
@@ -8,7 +8,7 @@ namespace Magento\Store\Model\Service;
 class StoreConfigManager implements \Magento\Store\Api\StoreConfigManagerInterface
 {
     /**
-     * @var \Magento\Store\Model\Resource\Store\CollectionFactory
+     * @var \Magento\Store\Model\ResourceModel\Store\CollectionFactory
      */
     protected $storeCollectionFactory;
 
@@ -34,15 +34,16 @@ class StoreConfigManager implements \Magento\Store\Api\StoreConfigManagerInterfa
         'setBaseCurrencyCode' => 'currency/options/base',
         'setDefaultDisplayCurrencyCode' => 'currency/options/default',
         'setTimezone' => 'general/locale/timezone',
+        'setWeightUnit' => \Magento\Directory\Helper\Data::XML_PATH_WEIGHT_UNIT
     ];
 
     /**
-     * @param \Magento\Store\Model\Resource\Store\CollectionFactory $storeCollectionFactory
+     * @param \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeCollectionFactory
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
      * @param \Magento\Store\Model\Data\StoreConfigFactory $storeConfigFactory
      */
     public function __construct(
-        \Magento\Store\Model\Resource\Store\CollectionFactory $storeCollectionFactory,
+        \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeCollectionFactory,
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\Data\StoreConfigFactory $storeConfigFactory
     ) {
@@ -91,9 +92,6 @@ class StoreConfigManager implements \Magento\Store\Api\StoreConfigManagerInterfa
             $storeConfig->$methodName($configValue);
         }
 
-        //Hard code the weight unit for now
-        $storeConfig->setWeightUnit('lbs');
-
         $storeConfig->setBaseUrl($store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB, false));
         $storeConfig->setSecureBaseUrl($store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB, true));
         $storeConfig->setBaseLinkUrl($store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_LINK, false));
diff --git a/app/code/Magento/Store/Model/Store.php b/app/code/Magento/Store/Model/Store.php
index b227288fcd84e410b8b60c178bbb6e2f383879c4..50e457c24782605c1290cfd6820ad04f11ec1301 100644
--- a/app/code/Magento/Store/Model/Store.php
+++ b/app/code/Magento/Store/Model/Store.php
@@ -238,7 +238,7 @@ class Store extends AbstractExtensibleModel implements
     protected $_request;
 
     /**
-     * @var \Magento\Config\Model\Resource\Config\Data
+     * @var \Magento\Config\Model\ResourceModel\Config\Data
      */
     protected $_configDataResource;
 
@@ -303,12 +303,12 @@ class Store extends AbstractExtensibleModel implements
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Store\Model\Resource\Store $resource
+     * @param \Magento\Store\Model\ResourceModel\Store $resource
      * @param \Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDatabase
      * @param \Magento\Framework\App\Cache\Type\Config $configCacheType
      * @param \Magento\Framework\UrlInterface $url
      * @param \Magento\Framework\App\RequestInterface $request
-     * @param \Magento\Config\Model\Resource\Config\Data $configDataResource
+     * @param \Magento\Config\Model\ResourceModel\Config\Data $configDataResource
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Framework\App\Config\ReinitableConfigInterface $config
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
@@ -331,12 +331,12 @@ class Store extends AbstractExtensibleModel implements
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
-        \Magento\Store\Model\Resource\Store $resource,
+        \Magento\Store\Model\ResourceModel\Store $resource,
         \Magento\MediaStorage\Helper\File\Storage\Database $coreFileStorageDatabase,
         \Magento\Framework\App\Cache\Type\Config $configCacheType,
         \Magento\Framework\UrlInterface $url,
         \Magento\Framework\App\RequestInterface $request,
-        \Magento\Config\Model\Resource\Config\Data $configDataResource,
+        \Magento\Config\Model\ResourceModel\Config\Data $configDataResource,
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Framework\App\Config\ReinitableConfigInterface $config,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
@@ -410,7 +410,7 @@ class Store extends AbstractExtensibleModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Store\Model\Resource\Store');
+        $this->_init('Magento\Store\Model\ResourceModel\Store');
     }
 
     /**
diff --git a/app/code/Magento/Store/Model/StoreManagement.php b/app/code/Magento/Store/Model/StoreManagement.php
index fdb1ccd64b729e8da2ca9169cc30cea248cc8854..fb7b325fc1738e5162ee7f5e57e85f63a403c169 100644
--- a/app/code/Magento/Store/Model/StoreManagement.php
+++ b/app/code/Magento/Store/Model/StoreManagement.php
@@ -6,7 +6,7 @@
 namespace Magento\Store\Model;
 
 use Magento\Store\Api\StoreManagementInterface;
-use Magento\Store\Model\Resource\Store\CollectionFactory;
+use Magento\Store\Model\ResourceModel\Store\CollectionFactory;
 
 /**
  * @api
@@ -31,7 +31,7 @@ class StoreManagement implements StoreManagementInterface
     public function getCount()
     {
         $stores = $this->storesFactory->create();
-        /** @var \Magento\Store\Model\Resource\Store\Collection $stores */
+        /** @var \Magento\Store\Model\ResourceModel\Store\Collection $stores */
         $stores->setWithoutDefaultFilter();
         return $stores->getSize();
     }
diff --git a/app/code/Magento/Store/Model/StoreRepository.php b/app/code/Magento/Store/Model/StoreRepository.php
index 322c358be356f223e4abb459392c04f807a00ec4..3b2d9bcd03a4f047043dc444ceca081e6007ebd2 100644
--- a/app/code/Magento/Store/Model/StoreRepository.php
+++ b/app/code/Magento/Store/Model/StoreRepository.php
@@ -15,7 +15,7 @@ class StoreRepository implements \Magento\Store\Api\StoreRepositoryInterface
     protected $storeFactory;
 
     /**
-     * @var \Magento\Store\Model\Resource\Store\CollectionFactory
+     * @var \Magento\Store\Model\ResourceModel\Store\CollectionFactory
      */
     protected $storeCollectionFactory;
 
@@ -36,11 +36,11 @@ class StoreRepository implements \Magento\Store\Api\StoreRepositoryInterface
 
     /**
      * @param StoreFactory $storeFactory
-     * @param \Magento\Store\Model\Resource\Store\CollectionFactory $storeCollectionFactory
+     * @param \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeCollectionFactory
      */
     public function __construct(
         StoreFactory $storeFactory,
-        \Magento\Store\Model\Resource\Store\CollectionFactory $storeCollectionFactory
+        \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeCollectionFactory
     ) {
         $this->storeFactory = $storeFactory;
         $this->storeCollectionFactory = $storeCollectionFactory;
@@ -57,8 +57,7 @@ class StoreRepository implements \Magento\Store\Api\StoreRepositoryInterface
         $store = $this->storeFactory->create();
         $store->load($code, 'code');
         if ($store->getId() === null) {
-            // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException
-            throw new \InvalidArgumentException();
+            throw new NoSuchEntityException(__('Requested store is not found'));
         }
         $this->entities[$code] = $store;
         $this->entitiesById[$store->getId()] = $store;
@@ -89,7 +88,7 @@ class StoreRepository implements \Magento\Store\Api\StoreRepositoryInterface
         $store = $this->storeFactory->create();
         $store->load($id);
         if ($store->getId() === null) {
-            throw new NoSuchEntityException();
+            throw new NoSuchEntityException(__('Requested store is not found'));
         }
         $this->entitiesById[$id] = $store;
         $this->entities[$store->getCode()] = $store;
@@ -115,7 +114,7 @@ class StoreRepository implements \Magento\Store\Api\StoreRepositoryInterface
     public function getList()
     {
         if (!$this->allLoaded) {
-            /** @var $storeCollection \Magento\Store\Model\Resource\Store\Collection */
+            /** @var $storeCollection \Magento\Store\Model\ResourceModel\Store\Collection */
             $storeCollection = $this->storeCollectionFactory->create();
             $storeCollection->setLoadDefault(true);
             foreach ($storeCollection as $item) {
diff --git a/app/code/Magento/Store/Model/StoreResolver.php b/app/code/Magento/Store/Model/StoreResolver.php
index 79a6e53423c79fc953185864180f8fcbae4a41f7..1f37a8611a2772fcab985224bff9b9fe8db8650b 100644
--- a/app/code/Magento/Store/Model/StoreResolver.php
+++ b/app/code/Magento/Store/Model/StoreResolver.php
@@ -137,14 +137,9 @@ class StoreResolver implements \Magento\Store\Api\StoreResolverInterface
         try {
             $store = $this->storeRepository->getActiveStoreByCode($storeCode);
         } catch (StoreIsInactiveException $e) {
-            $error = __('Requested store is inactive');
-        } catch (\InvalidArgumentException $e) { // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException
-            $error = __('Requested store is not found');
+            throw new NoSuchEntityException(__('Requested store is inactive'));
         }
 
-        if (isset($error, $e)) {
-            throw new NoSuchEntityException($error, $e);
-        }
         return $store;
     }
 
@@ -160,14 +155,9 @@ class StoreResolver implements \Magento\Store\Api\StoreResolverInterface
         try {
             $store = $this->storeRepository->getActiveStoreById($id);
         } catch (StoreIsInactiveException $e) {
-            $error = __('Default store is inactive');
-        } catch (\InvalidArgumentException $e) { // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException
-            $error = __('Default store is not found');
+            throw new NoSuchEntityException(__('Default store is inactive'));
         }
 
-        if (isset($error, $e)) {
-            throw new NoSuchEntityException($error, $e);
-        }
         return $store;
     }
 }
diff --git a/app/code/Magento/Store/Model/Website.php b/app/code/Magento/Store/Model/Website.php
index aa31a0a96b14ddd715a6271820ff4820584a1397..375064ca57f1519aa331df6ae59f39ffc1cd5333 100644
--- a/app/code/Magento/Store/Model/Website.php
+++ b/app/code/Magento/Store/Model/Website.php
@@ -8,8 +8,8 @@ namespace Magento\Store\Model;
 /**
  * Core Website model
  *
- * @method \Magento\Store\Model\Resource\Website _getResource()
- * @method \Magento\Store\Model\Resource\Website getResource()
+ * @method \Magento\Store\Model\ResourceModel\Website _getResource()
+ * @method \Magento\Store\Model\ResourceModel\Website getResource()
  * @method string getGroupTitle()
  * @method string getStoreTitle()
  * @method int getStoreId()
@@ -130,12 +130,12 @@ class Website extends \Magento\Framework\Model\AbstractExtensibleModel implement
     private $_isReadOnly = false;
 
     /**
-     * @var \Magento\Config\Model\Resource\Config\Data
+     * @var \Magento\Config\Model\ResourceModel\Config\Data
      */
     protected $_configDataResource;
 
     /**
-     * @var \Magento\Store\Model\Resource\Store\CollectionFactory
+     * @var \Magento\Store\Model\ResourceModel\Store\CollectionFactory
      */
     protected $storeListFactory;
 
@@ -164,14 +164,14 @@ class Website extends \Magento\Framework\Model\AbstractExtensibleModel implement
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Config\Model\Resource\Config\Data $configDataResource
+     * @param \Magento\Config\Model\ResourceModel\Config\Data $configDataResource
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $coreConfig
-     * @param \Magento\Store\Model\Resource\Store\CollectionFactory $storeListFactory
+     * @param \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeListFactory
      * @param \Magento\Store\Model\GroupFactory $storeGroupFactory
      * @param \Magento\Store\Model\WebsiteFactory $websiteFactory
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Directory\Model\CurrencyFactory $currencyFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -181,14 +181,14 @@ class Website extends \Magento\Framework\Model\AbstractExtensibleModel implement
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         \Magento\Framework\Api\AttributeValueFactory $customAttributeFactory,
-        \Magento\Config\Model\Resource\Config\Data $configDataResource,
+        \Magento\Config\Model\ResourceModel\Config\Data $configDataResource,
         \Magento\Framework\App\Config\ScopeConfigInterface $coreConfig,
-        \Magento\Store\Model\Resource\Store\CollectionFactory $storeListFactory,
+        \Magento\Store\Model\ResourceModel\Store\CollectionFactory $storeListFactory,
         \Magento\Store\Model\GroupFactory $storeGroupFactory,
         \Magento\Store\Model\WebsiteFactory $websiteFactory,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -217,7 +217,7 @@ class Website extends \Magento\Framework\Model\AbstractExtensibleModel implement
      */
     protected function _construct()
     {
-        $this->_init('Magento\Store\Model\Resource\Website');
+        $this->_init('Magento\Store\Model\ResourceModel\Website');
     }
 
     /**
@@ -301,7 +301,7 @@ class Website extends \Magento\Framework\Model\AbstractExtensibleModel implement
     /**
      * Retrieve new (not loaded) Group collection object with website filter
      *
-     * @return \Magento\Store\Model\Resource\Group\Collection
+     * @return \Magento\Store\Model\ResourceModel\Group\Collection
      */
     public function getGroupCollection()
     {
@@ -408,7 +408,7 @@ class Website extends \Magento\Framework\Model\AbstractExtensibleModel implement
     /**
      * Retrieve new (not loaded) Store collection object with website filter
      *
-     * @return \Magento\Store\Model\Resource\Store\Collection
+     * @return \Magento\Store\Model\ResourceModel\Store\Collection
      */
     public function getStoreCollection()
     {
diff --git a/app/code/Magento/Store/Model/WebsiteManagement.php b/app/code/Magento/Store/Model/WebsiteManagement.php
index 6d4cf6d883653472e1adef2d7b5c2d2315ca1ee9..fecd74d47889e6cb1a105ec0f14a23dc6ffb6b54 100644
--- a/app/code/Magento/Store/Model/WebsiteManagement.php
+++ b/app/code/Magento/Store/Model/WebsiteManagement.php
@@ -6,7 +6,7 @@
 namespace Magento\Store\Model;
 
 use Magento\Store\Api\WebsiteManagementInterface;
-use Magento\Store\Model\Resource\Website\CollectionFactory;
+use Magento\Store\Model\ResourceModel\Website\CollectionFactory;
 
 /**
  * @api
@@ -31,7 +31,7 @@ class WebsiteManagement implements WebsiteManagementInterface
     public function getCount()
     {
         $websites = $this->websitesFactory->create();
-        /** @var \Magento\Store\Model\Resource\Website\Collection $websites */
+        /** @var \Magento\Store\Model\ResourceModel\Website\Collection $websites */
         return $websites->getSize();
     }
 }
diff --git a/app/code/Magento/Store/Model/WebsiteRepository.php b/app/code/Magento/Store/Model/WebsiteRepository.php
index 1ed2b1dcbff084821b475ee88a09d1085482bab1..50c22753bad46228fa9f6dd5daaa1ce84e6906f1 100644
--- a/app/code/Magento/Store/Model/WebsiteRepository.php
+++ b/app/code/Magento/Store/Model/WebsiteRepository.php
@@ -6,6 +6,7 @@
 namespace Magento\Store\Model;
 
 use Magento\Framework\Exception\NoSuchEntityException;
+use Magento\Store\Model\ResourceModel\Website\CollectionFactory;
 
 class WebsiteRepository implements \Magento\Store\Api\WebsiteRepositoryInterface
 {
@@ -15,7 +16,7 @@ class WebsiteRepository implements \Magento\Store\Api\WebsiteRepositoryInterface
     protected $factory;
 
     /**
-     * @var Resource\Website\CollectionFactory
+     * @var CollectionFactory
      */
     protected $websiteCollectionFactory;
 
@@ -41,11 +42,11 @@ class WebsiteRepository implements \Magento\Store\Api\WebsiteRepositoryInterface
 
     /**
      * @param WebsiteFactory $factory
-     * @param Resource\Website\CollectionFactory $websiteCollectionFactory
+     * @param CollectionFactory $websiteCollectionFactory
      */
     public function __construct(
         WebsiteFactory $factory,
-        Resource\Website\CollectionFactory $websiteCollectionFactory
+        CollectionFactory $websiteCollectionFactory
     ) {
         $this->factory = $factory;
         $this->websiteCollectionFactory = $websiteCollectionFactory;
@@ -117,7 +118,7 @@ class WebsiteRepository implements \Magento\Store\Api\WebsiteRepositoryInterface
                 }
             }
             if (!$this->allLoaded) {
-                /** @var Resource\Website\Collection $collection */
+                /** @var \Magento\Store\Model\ResourceModel\Website\Collection $collection */
                 $collection = $this->websiteCollectionFactory->create();
                 $collection->addFieldToFilter('is_default', 1);
                 $items = $collection->getItems();
diff --git a/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php b/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php
index b81f0a6544f2327e0841362790f1c2260d2ca053..9ba184b950995a49cd6b6618e6d76a013717e6b9 100644
--- a/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php
+++ b/app/code/Magento/Store/Test/Unit/App/Request/PathInfoProcessorTest.php
@@ -5,6 +5,8 @@
  */
 namespace Magento\Store\Test\Unit\App\Request;
 
+use Magento\Framework\Exception\NoSuchEntityException;
+
 class PathInfoProcessorTest extends \PHPUnit_Framework_TestCase
 {
     /**
@@ -112,8 +114,7 @@ class PathInfoProcessorTest extends \PHPUnit_Framework_TestCase
     {
         $store = $this->getMock('\Magento\Store\Model\Store', [], [], '', false);
         $this->_storeManagerMock->expects($this->once())->method('getStore')->with('storeCode')
-            // TODO: MAGETWO-39826 Need to replace on NoSuchEntityException
-            ->willThrowException(new \InvalidArgumentException());
+            ->willThrowException(new NoSuchEntityException());
         $store->expects($this->never())->method('isUseStoreInUrl');
         $this->_requestMock->expects($this->never())->method('isDirectAccessFrontendName');
 
diff --git a/app/code/Magento/Store/Test/Unit/Model/Config/Reader/DefaultReaderTest.php b/app/code/Magento/Store/Test/Unit/Model/Config/Reader/DefaultReaderTest.php
index 60abe2b3b92b802da618d1083a4e1d934041dafe..d55a6d3e974096fb4da799ebb2421ba75d00be8e 100644
--- a/app/code/Magento/Store/Test/Unit/Model/Config/Reader/DefaultReaderTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/Config/Reader/DefaultReaderTest.php
@@ -28,7 +28,7 @@ class DefaultReaderTest extends \PHPUnit_Framework_TestCase
     {
         $this->_initialConfigMock = $this->getMock('Magento\Framework\App\Config\Initial', [], [], '', false);
         $this->_collectionFactory = $this->getMock(
-            'Magento\Store\Model\Resource\Config\Collection\ScopedFactory',
+            'Magento\Store\Model\ResourceModel\Config\Collection\ScopedFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Store/Test/Unit/Model/Config/Reader/StoreTest.php b/app/code/Magento/Store/Test/Unit/Model/Config/Reader/StoreTest.php
index b556e74223dab4e614d553e0fb357f5b1ebc5a54..9e39fc17e0f24989343c4b2ee7eba3d78b5c3173 100644
--- a/app/code/Magento/Store/Test/Unit/Model/Config/Reader/StoreTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/Config/Reader/StoreTest.php
@@ -43,7 +43,7 @@ class StoreTest extends \PHPUnit_Framework_TestCase
         $this->_storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface');
         $this->_initialConfigMock = $this->getMock('Magento\Framework\App\Config\Initial', [], [], '', false);
         $this->_collectionFactory = $this->getMock(
-            'Magento\Store\Model\Resource\Config\Collection\ScopedFactory',
+            'Magento\Store\Model\ResourceModel\Config\Collection\ScopedFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Store/Test/Unit/Model/Config/Reader/WebsiteTest.php b/app/code/Magento/Store/Test/Unit/Model/Config/Reader/WebsiteTest.php
index 2b2ec4f7193098a4f7d1387690d5a77107abb4dc..01670bcb980affdf451b9b0ef0118f9fc7cb2ff5 100644
--- a/app/code/Magento/Store/Test/Unit/Model/Config/Reader/WebsiteTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/Config/Reader/WebsiteTest.php
@@ -37,7 +37,7 @@ class WebsiteTest extends \PHPUnit_Framework_TestCase
         $this->_initialConfigMock = $this->getMock('Magento\Framework\App\Config\Initial', [], [], '', false);
         $this->_scopePullMock = $this->getMock('Magento\Framework\App\Config\ScopePool', [], [], '', false);
         $this->_collectionFactory = $this->getMock(
-            'Magento\Store\Model\Resource\Config\Collection\ScopedFactory',
+            'Magento\Store\Model\ResourceModel\Config\Collection\ScopedFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Store/Test/Unit/Model/Service/StoreConfigManagerTest.php b/app/code/Magento/Store/Test/Unit/Model/Service/StoreConfigManagerTest.php
index add3eec63d69b91342b8dfb1c880e2d9787fb9bd..b7ef7b804044572ad58c74bf29c32b1c9e636115 100644
--- a/app/code/Magento/Store/Test/Unit/Model/Service/StoreConfigManagerTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/Service/StoreConfigManagerTest.php
@@ -18,7 +18,7 @@ class StoreConfigManagerTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Store\Model\Resource\Store\CollectionFactory
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Store\Model\ResourceModel\Store\CollectionFactory
      */
     protected $storeCollectionFactoryMock;
 
@@ -39,7 +39,7 @@ class StoreConfigManagerTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['create'])
             ->getMock();
         $this->storeCollectionFactoryMock = $this->getMockBuilder(
-            '\Magento\Store\Model\Resource\Store\CollectionFactory'
+            '\Magento\Store\Model\ResourceModel\Store\CollectionFactory'
         )->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -121,6 +121,7 @@ class StoreConfigManagerTest extends \PHPUnit_Framework_TestCase
         $timeZone = 'America/Los_Angeles';
         $baseCurrencyCode = 'USD';
         $defaultDisplayCurrencyCode = 'GBP';
+        $weightUnit = 'lbs';
 
         $storeMocks = [];
         $storeConfigs = [
@@ -138,7 +139,7 @@ class StoreConfigManagerTest extends \PHPUnit_Framework_TestCase
         ];
         $storeMocks[] = $this->getStoreMock($storeConfigs);
 
-        $storeCollectionMock = $this->getMockBuilder('\Magento\Store\Model\Resource\Store\Collection')
+        $storeCollectionMock = $this->getMockBuilder('\Magento\Store\Model\ResourceModel\Store\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $storeCollectionMock->expects($this->once())
@@ -161,6 +162,7 @@ class StoreConfigManagerTest extends \PHPUnit_Framework_TestCase
             ['currency/options/base', ScopeInterface::SCOPE_STORES, $code, $baseCurrencyCode],
             ['currency/options/default', ScopeInterface::SCOPE_STORES, $code, $defaultDisplayCurrencyCode],
             ['general/locale/timezone', ScopeInterface::SCOPE_STORES, $code, $timeZone],
+            [\Magento\Directory\Helper\Data::XML_PATH_WEIGHT_UNIT, ScopeInterface::SCOPE_STORES, $code, $weightUnit]
         ];
         $this->scopeConfigMock->expects($this->any())
             ->method('getValue')
@@ -171,7 +173,7 @@ class StoreConfigManagerTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals(1, count($result));
         $this->assertEquals($id, $result[0]->getId());
         $this->assertEquals($code, $result[0]->getCode());
-        $this->assertEquals('lbs', $result[0]->getWeightUnit());
+        $this->assertEquals($weightUnit, $result[0]->getWeightUnit());
         $this->assertEquals($baseUrl, $result[0]->getBaseUrl());
         $this->assertEquals($secureBaseUrl, $result[0]->getSecureBaseUrl());
         $this->assertEquals($baseLinkUrl, $result[0]->getBaseLinkUrl());
diff --git a/app/code/Magento/Store/Test/Unit/Model/StoreManagementTest.php b/app/code/Magento/Store/Test/Unit/Model/StoreManagementTest.php
index 2520ae86d7741ecb24f85c25e1705764c606f468..b4b29954903e2bde709dfc9c3838dd4d894be661 100644
--- a/app/code/Magento/Store/Test/Unit/Model/StoreManagementTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/StoreManagementTest.php
@@ -13,14 +13,14 @@ class StoreManagementTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Store\Model\Resource\Store\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Store\Model\ResourceModel\Store\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $storesFactoryMock;
 
     protected function setUp()
     {
         $this->storesFactoryMock = $this->getMock(
-            'Magento\Store\Model\Resource\Store\CollectionFactory',
+            'Magento\Store\Model\ResourceModel\Store\CollectionFactory',
             ['create'],
             [],
             '',
@@ -33,7 +33,7 @@ class StoreManagementTest extends \PHPUnit_Framework_TestCase
 
     public function testGetCount()
     {
-        $storesMock = $this->getMock('\Magento\Store\Model\Resource\Store\Collection', [], [], '', false);
+        $storesMock = $this->getMock('\Magento\Store\Model\ResourceModel\Store\Collection', [], [], '', false);
 
         $this->storesFactoryMock
             ->expects($this->once())
diff --git a/app/code/Magento/Store/Test/Unit/Model/StoreTest.php b/app/code/Magento/Store/Test/Unit/Model/StoreTest.php
index bd1493a96a93f829844abaa47f4985ae9010720c..ef18fa928f1110d956bad7db3f60a5f80b1962e4 100644
--- a/app/code/Magento/Store/Test/Unit/Model/StoreTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/StoreTest.php
@@ -71,9 +71,9 @@ class StoreTest extends \PHPUnit_Framework_TestCase
      */
     public function testLoad($key, $field)
     {
-        /** @var \Magento\Store\Model\Resource\Store $resource */
+        /** @var \Magento\Store\Model\ResourceModel\Store $resource */
         $resource = $this->getMock(
-            '\Magento\Store\Model\Resource\Store',
+            '\Magento\Store\Model\ResourceModel\Store',
             ['load', 'getIdFieldName', '__wakeup'],
             [],
             '',
diff --git a/app/code/Magento/Store/Test/Unit/Model/WebsiteManagementTest.php b/app/code/Magento/Store/Test/Unit/Model/WebsiteManagementTest.php
index 72f1ce5a14866fb6a507a266cc3f278bacb2c91f..a294514dec4f0053cf3d96ac46e0411a1fc59e6b 100644
--- a/app/code/Magento/Store/Test/Unit/Model/WebsiteManagementTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/WebsiteManagementTest.php
@@ -13,14 +13,14 @@ class WebsiteManagementTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Store\Model\Resource\Website\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Store\Model\ResourceModel\Website\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $websitesFactoryMock;
 
     protected function setUp()
     {
         $this->websitesFactoryMock = $this->getMock(
-            'Magento\Store\Model\Resource\Website\CollectionFactory',
+            'Magento\Store\Model\ResourceModel\Website\CollectionFactory',
             ['create'],
             [],
             '',
@@ -33,7 +33,7 @@ class WebsiteManagementTest extends \PHPUnit_Framework_TestCase
 
     public function testGetCount()
     {
-        $websitesMock = $this->getMock('\Magento\Store\Model\Resource\Website\Collection', [], [], '', false);
+        $websitesMock = $this->getMock('\Magento\Store\Model\ResourceModel\Website\Collection', [], [], '', false);
 
         $this->websitesFactoryMock
             ->expects($this->once())
diff --git a/app/code/Magento/Store/Test/Unit/Model/WebsiteTest.php b/app/code/Magento/Store/Test/Unit/Model/WebsiteTest.php
index 2570356dc84e5948d73b0c3f5edef2c1d57aad01..7f2907118a8d3e35b2320d0ce02538f4704f2b12 100644
--- a/app/code/Magento/Store/Test/Unit/Model/WebsiteTest.php
+++ b/app/code/Magento/Store/Test/Unit/Model/WebsiteTest.php
@@ -12,7 +12,7 @@ class WebsiteTest extends \PHPUnit_Framework_TestCase
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
         $websiteCollection = $this->getMock(
-            'Magento\Store\Model\Resource\Website\Collection',
+            'Magento\Store\Model\ResourceModel\Website\Collection',
             ['getSize'],
             [],
             '',
diff --git a/app/code/Magento/Store/etc/data_source/website.xml b/app/code/Magento/Store/etc/data_source/website.xml
index 7e08efedffd0ad50cd57b1bf2921b6d5933e3acc..0c7322e12a4f5ba1b204e20c959a6635a2cca676 100644
--- a/app/code/Magento/Store/etc/data_source/website.xml
+++ b/app/code/Magento/Store/etc/data_source/website.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/data_source.xsd">
-    <dataSource name="website" label="Website" dataSet="Magento\Store\Model\Resource\Website\Collection">
+    <dataSource name="website" label="Website" dataSet="Magento\Store\Model\ResourceModel\Website\Collection">
         <fields>
             <field name="website_id" dataType="number" visible="false"/>
             <field name="name" dataType="text"/>
diff --git a/app/code/Magento/Store/etc/di.xml b/app/code/Magento/Store/etc/di.xml
index 58539845dd65c03350af20782b4863226f85d4a7..2030977642d46bbda361efa1651f66be832e2258 100644
--- a/app/code/Magento/Store/etc/di.xml
+++ b/app/code/Magento/Store/etc/di.xml
@@ -85,19 +85,19 @@
     <type name="Magento\Framework\Url\RouteParamsResolver">
         <plugin name="storeUrlRouteParamsResolver" type="Magento\Store\Url\Plugin\RouteParamsResolver"/>
     </type>
-    <type name="Magento\Store\Model\Resource\Website\Collection">
+    <type name="Magento\Store\Model\ResourceModel\Website\Collection">
         <arguments>
-            <argument name="fetchStrategy" xsi:type="object">Magento\Store\Model\Resource\Website\Collection\FetchStrategy</argument>
+            <argument name="fetchStrategy" xsi:type="object">Magento\Store\Model\ResourceModel\Website\Collection\FetchStrategy</argument>
         </arguments>
     </type>
-    <type name="Magento\Store\Model\Resource\Group\Collection">
+    <type name="Magento\Store\Model\ResourceModel\Group\Collection">
         <arguments>
-            <argument name="fetchStrategy" xsi:type="object">Magento\Store\Model\Resource\Group\Collection\FetchStrategy</argument>
+            <argument name="fetchStrategy" xsi:type="object">Magento\Store\Model\ResourceModel\Group\Collection\FetchStrategy</argument>
         </arguments>
     </type>
-    <type name="Magento\Store\Model\Resource\Store\Collection">
+    <type name="Magento\Store\Model\ResourceModel\Store\Collection">
         <arguments>
-            <argument name="fetchStrategy" xsi:type="object">Magento\Store\Model\Resource\Store\Collection\FetchStrategy</argument>
+            <argument name="fetchStrategy" xsi:type="object">Magento\Store\Model\ResourceModel\Store\Collection\FetchStrategy</argument>
         </arguments>
     </type>
     <type name="Magento\Store\Model\Store">
@@ -119,7 +119,7 @@
             <argument name="scopeCode" xsi:type="init_parameter">Magento\Store\Model\StoreManager::PARAM_RUN_CODE</argument>
         </arguments>
     </type>
-    <virtualType name="Magento\Store\Model\Resource\Group\Collection\FetchStrategy" type="Magento\Framework\Data\Collection\Db\FetchStrategy\Cache">
+    <virtualType name="Magento\Store\Model\ResourceModel\Group\Collection\FetchStrategy" type="Magento\Framework\Data\Collection\Db\FetchStrategy\Cache">
         <arguments>
             <argument name="cache" xsi:type="object">Magento\Framework\App\Cache\Type\Collection</argument>
             <argument name="cacheIdPrefix" xsi:type="string">app_</argument>
@@ -129,7 +129,7 @@
             <argument name="cacheLifetime" xsi:type="boolean">false</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Store\Model\Resource\Store\Collection\FetchStrategy" type="Magento\Framework\Data\Collection\Db\FetchStrategy\Cache">
+    <virtualType name="Magento\Store\Model\ResourceModel\Store\Collection\FetchStrategy" type="Magento\Framework\Data\Collection\Db\FetchStrategy\Cache">
         <arguments>
             <argument name="cache" xsi:type="object">Magento\Framework\App\Cache\Type\Collection</argument>
             <argument name="cacheIdPrefix" xsi:type="string">app_</argument>
@@ -139,7 +139,7 @@
             <argument name="cacheLifetime" xsi:type="boolean">false</argument>
         </arguments>
     </virtualType>
-    <virtualType name="Magento\Store\Model\Resource\Website\Collection\FetchStrategy" type="Magento\Framework\Data\Collection\Db\FetchStrategy\Cache">
+    <virtualType name="Magento\Store\Model\ResourceModel\Website\Collection\FetchStrategy" type="Magento\Framework\Data\Collection\Db\FetchStrategy\Cache">
         <arguments>
             <argument name="cache" xsi:type="object">Magento\Framework\App\Cache\Type\Collection</argument>
             <argument name="cacheIdPrefix" xsi:type="string">app_</argument>
diff --git a/app/code/Magento/Store/view/base/web/js/listing/filter/store.js b/app/code/Magento/Store/view/base/web/js/listing/filter/store.js
deleted file mode 100644
index 62e97751c2c757dd76c1fb3b75fef0ea76a861c7..0000000000000000000000000000000000000000
--- a/app/code/Magento/Store/view/base/web/js/listing/filter/store.js
+++ /dev/null
@@ -1,92 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'Magento_Ui/js/listing/filter/abstract',
-    'underscore'
-], function (AbstractControl, _) {
-    'use strict';
-
-    /**
-     * Recursively loops through array of objects ({label: '...', value: '...'}
-     *     or {label: '...', items: [...]}), looking for label, corresponding to value.
-     * @param  {Array} arr
-     * @param  {String} selected
-     * @return {String} found label
-     */
-    function findIn(arr, selected) {
-        var found;
-
-        arr.some(function(obj){
-            found = 'value' in obj ?
-                obj.value == selected && obj.label :
-                findIn(obj.items, selected);
-
-            return found;
-        });
-
-        return found;
-    }
-
-    return AbstractControl.extend({
-
-        /**
-         * Invokes initialize method of parent class and initializes properties of instance.
-         * @param {Object} data - Item of "fields" array from grid configuration
-         * @param {Object} config - Filter configuration
-         */
-        initialize: function (data) {
-            this.constructor.__super__.initialize.apply(this, arguments);
-
-            this.caption = 'Select...';
-
-            this.observe('selected', '');
-
-            this.options = this.options || [];
-
-            this.module = 'store';
-        },
-
-        /**
-         * Checkes if current state is empty.
-         * @return {Boolean}
-         */
-        isEmpty: function(){
-            return !this.selected();
-        },
-
-        /**
-         * Returns string value of current state for UI
-         * @return {String}
-         */
-        display: function (selected) {
-            var label = findIn(this.options, selected);
-            
-            return label;
-        },
-
-        /**
-         * Returns dump of instance's current state
-         * @returns {Object} - object which represents current state of instance
-         */
-        dump: function () {
-            var selected = this.selected();
-
-            this.output(this.display(selected));
-
-            return {
-                field: this.index,
-                value: selected
-            }
-        },
-
-        /**
-         * Resets state properties of instance and calls dump method.
-         * @returns {Object} - object which represents current state of instance
-         */
-        reset: function () {
-            this.selected(null);
-        }
-    });
-});
\ No newline at end of file
diff --git a/app/code/Magento/Store/view/base/web/templates/filter/filter_store.html b/app/code/Magento/Store/view/base/web/templates/filter/filter_store.html
deleted file mode 100644
index 2e94ac95898039befd8caa88f8532043afded4ab..0000000000000000000000000000000000000000
--- a/app/code/Magento/Store/view/base/web/templates/filter/filter_store.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<div class="field">
-    <label class="label" data-bind="attr: {for: index}">
-        <span data-bind="text: label"></span>
-    </label>
-    <div class="control">
-        <select data-bind="value: selected">
-            <option></option>
-            <!-- ko foreach: { data: options, as: 'option' } -->
-                <!-- ko template: 'store/filter/store/item' --><!-- /ko -->
-            <!-- /ko -->
-        </select>
-    </div>
-</div>
\ No newline at end of file
diff --git a/app/code/Magento/Store/view/base/web/templates/filter/store/item.html b/app/code/Magento/Store/view/base/web/templates/filter/store/item.html
deleted file mode 100644
index c14bb1f3b37c07e1aef319099dab6b77748e6c82..0000000000000000000000000000000000000000
--- a/app/code/Magento/Store/view/base/web/templates/filter/store/item.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!--
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
--->
-<!-- ko ifnot: 'items' in option  -->
-    <option data-bind="attr: { label: option.label, value: option.value }, text: option.label"></option>
-<!-- /ko -->
-<!-- ko if: 'items' in option  -->
-    <optgroup data-bind="attr: { label: option.label }"></optgroup>
-    <!-- ko foreach: { data: option.items, as: 'option' } -->
-        <!-- ko template: 'store/filter/store/item' --><!-- /ko -->
-    <!-- /ko -->
-<!-- /ko -->
\ No newline at end of file
diff --git a/app/code/Magento/Swatches/Block/Adminhtml/Attribute/Edit/Options/AbstractSwatch.php b/app/code/Magento/Swatches/Block/Adminhtml/Attribute/Edit/Options/AbstractSwatch.php
index 8d0a190dc7f3ae481c0a80fcb4467b2eb1ad4ea1..865cf0f283454fa89c1b4999a388500b53ecf8e1 100644
--- a/app/code/Magento/Swatches/Block/Adminhtml/Attribute/Edit/Options/AbstractSwatch.php
+++ b/app/code/Magento/Swatches/Block/Adminhtml/Attribute/Edit/Options/AbstractSwatch.php
@@ -28,7 +28,7 @@ abstract class AbstractSwatch extends \Magento\Eav\Block\Adminhtml\Attribute\Edi
      * Prepare option values of user defined attribute
      *
      * @codeCoverageIgnore
-     * @param array|\Magento\Eav\Model\Resource\Entity\Attribute\Option $option
+     * @param array|\Magento\Eav\Model\ResourceModel\Entity\Attribute\Option $option
      * @param string $inputType
      * @param array $defaultValues
      * @return array
@@ -55,7 +55,7 @@ abstract class AbstractSwatch extends \Magento\Eav\Block\Adminhtml\Attribute\Edi
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory
      * @param \Magento\Framework\Validator\UniversalFactory $universalFactory
      * @param \Magento\Catalog\Model\Product\Media\Config $mediaConfig
      * @param \Magento\Swatches\Helper\Media $swatchHelper
@@ -64,7 +64,7 @@ abstract class AbstractSwatch extends \Magento\Eav\Block\Adminhtml\Attribute\Edi
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory $attrOptionCollectionFactory,
         \Magento\Framework\Validator\UniversalFactory $universalFactory,
         \Magento\Catalog\Model\Product\Media\Config $mediaConfig,
         \Magento\Swatches\Helper\Media $swatchHelper,
diff --git a/app/code/Magento/Swatches/Block/LayeredNavigation/RenderLayered.php b/app/code/Magento/Swatches/Block/LayeredNavigation/RenderLayered.php
index ad2432144d35ab86409f40f86a91b7c4cb6d8576..04f0ddaa9b2e631ac8d88d25bf3b8e9b252f4ca2 100644
--- a/app/code/Magento/Swatches/Block/LayeredNavigation/RenderLayered.php
+++ b/app/code/Magento/Swatches/Block/LayeredNavigation/RenderLayered.php
@@ -6,7 +6,7 @@
 namespace Magento\Swatches\Block\LayeredNavigation;
 
 use Magento\Eav\Model\Entity\Attribute;
-use Magento\Catalog\Model\Resource\Layer\Filter\AttributeFactory;
+use Magento\Catalog\Model\ResourceModel\Layer\Filter\AttributeFactory;
 use Magento\Framework\View\Element\Template;
 use Magento\Eav\Model\Entity\Attribute\Option;
 use Magento\Catalog\Model\Layer\Filter\Item as FilterItem;
diff --git a/app/code/Magento/Swatches/Helper/Data.php b/app/code/Magento/Swatches/Helper/Data.php
index 25123be51554271a572c218182a4655e85ebfd96..aecd9db6cfab974ed1d26ad1f23941f55686005c 100644
--- a/app/code/Magento/Swatches/Helper/Data.php
+++ b/app/code/Magento/Swatches/Helper/Data.php
@@ -8,10 +8,10 @@ namespace Magento\Swatches\Helper;
 use Magento\Framework\App\Helper\Context;
 use Magento\Catalog\Api\Data\ProductInterface as Product;
 use Magento\Swatches\Model\Swatch;
-use Magento\Catalog\Model\Resource\Eav\Attribute;
+use Magento\Catalog\Model\ResourceModel\Eav\Attribute;
 use Magento\Framework\Exception\InputException;
 use Magento\Catalog\Api\ProductRepositoryInterface;
-use Magento\Catalog\Model\Resource\Product\Collection as ProductCollection;
+use Magento\Catalog\Model\ResourceModel\Product\Collection as ProductCollection;
 
 /**
  * Class Helper Data
@@ -39,7 +39,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     protected $model;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $productCollectionFactory;
 
@@ -59,7 +59,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     protected $storeManager;
 
     /**
-     * @var \Magento\Swatches\Model\Resource\Swatch\CollectionFactory
+     * @var \Magento\Swatches\Model\ResourceModel\Swatch\CollectionFactory
      */
     protected $swatchCollectionFactory;
 
@@ -83,20 +83,20 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
 
     /**
      * @param Context $context
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
      * @param \Magento\ConfigurableProduct\Model\Product\Type\Configurable $configurable
      * @param ProductRepositoryInterface $productRepository
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Swatches\Model\Resource\Swatch\CollectionFactory $swatchCollectionFactory
+     * @param \Magento\Swatches\Model\ResourceModel\Swatch\CollectionFactory $swatchCollectionFactory
      * @param \Magento\Catalog\Helper\Image $imageHelper
      */
     public function __construct(
         Context $context,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
         \Magento\ConfigurableProduct\Model\Product\Type\Configurable $configurable,
         ProductRepositoryInterface $productRepository,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
-        \Magento\Swatches\Model\Resource\Swatch\CollectionFactory $swatchCollectionFactory,
+        \Magento\Swatches\Model\ResourceModel\Swatch\CollectionFactory $swatchCollectionFactory,
         \Magento\Catalog\Helper\Image $imageHelper
     ) {
         $this->productCollectionFactory   = $productCollectionFactory;
@@ -387,9 +387,11 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     {
         return [
             'large' => $this->imageHelper->init($product, 'product_page_image_large')
+                ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
                 ->setImageFile($imageFile)
                 ->getUrl(),
             'medium' => $this->imageHelper->init($product, 'product_page_image_medium')
+                ->constrainOnly(true)->keepAspectRatio(true)->keepFrame(false)
                 ->setImageFile($imageFile)
                 ->getUrl(),
             'small' => $this->imageHelper->init($product, 'product_page_image_small')
@@ -402,7 +404,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
      * Retrieve collection of Swatch attributes
      *
      * @param Product $product
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute[]
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute[]
      */
     public function getSwatchAttributes(Product $product)
     {
@@ -420,7 +422,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
      * Retrieve collection of Eav Attributes from Configurable product
      *
      * @param Product $product
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute[]
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute[]
      */
     public function getAttributesFromConfigurable(Product $product)
     {
@@ -430,7 +432,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
             $configurableAttributes = $typeInstance->getConfigurableAttributes($product);
             /** @var \Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute $configurableAttribute */
             foreach ($configurableAttributes as $configurableAttribute) {
-                /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attribute */
+                /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
                 $attribute = $configurableAttribute->getProductAttribute();
                 $result[] = $attribute;
             }
@@ -468,7 +470,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
      */
     public function getSwatchesByOptionsId(array $optionIds)
     {
-        /** @var \Magento\Swatches\Model\Resource\Swatch\Collection $swatchCollection */
+        /** @var \Magento\Swatches\Model\ResourceModel\Swatch\Collection $swatchCollection */
         $swatchCollection = $this->swatchCollectionFactory->create();
         $swatchCollection->addFilterByOptionsIds($optionIds);
 
diff --git a/app/code/Magento/Swatches/Helper/Media.php b/app/code/Magento/Swatches/Helper/Media.php
index d16ed5a8477d5fa9a0dfd39737137d9e5792e216..855d549f4d11561800b6ebaa52329842df3a337f 100644
--- a/app/code/Magento/Swatches/Helper/Media.php
+++ b/app/code/Magento/Swatches/Helper/Media.php
@@ -52,7 +52,7 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper
     protected $imageFactory;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\Collection
+     * @var \Magento\Theme\Model\ResourceModel\Theme\Collection
      */
     protected $themeCollection;
 
@@ -72,7 +72,7 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper
      * @param \Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDb
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Image\Factory $imageFactory
-     * @param \Magento\Theme\Model\Resource\Theme\Collection $themeCollection
+     * @param \Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection
      * @param \Magento\Framework\View\ConfigInterface $configInterface
      */
     public function __construct(
@@ -81,7 +81,7 @@ class Media extends \Magento\Framework\App\Helper\AbstractHelper
         \Magento\MediaStorage\Helper\File\Storage\Database $fileStorageDb,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Image\Factory $imageFactory,
-        \Magento\Theme\Model\Resource\Theme\Collection $themeCollection,
+        \Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection,
         \Magento\Framework\View\ConfigInterface $configInterface
     ) {
         $this->mediaConfig = $mediaConfig;
diff --git a/app/code/Magento/Swatches/Model/Form/Element/AbstractSwatch.php b/app/code/Magento/Swatches/Model/Form/Element/AbstractSwatch.php
index 66f78718236dc6b516b7047243f11765ab197624..ad625b962f5e5bddff7d4384dfc462aabf52647e 100644
--- a/app/code/Magento/Swatches/Model/Form/Element/AbstractSwatch.php
+++ b/app/code/Magento/Swatches/Model/Form/Element/AbstractSwatch.php
@@ -17,7 +17,7 @@ class AbstractSwatch extends \Magento\Framework\Data\Form\Element\Select
     {
         $options = [];
         $attribute = $this->getData('entity_attribute');
-        if ($attribute instanceof \Magento\Catalog\Model\Resource\Eav\Attribute) {
+        if ($attribute instanceof \Magento\Catalog\Model\ResourceModel\Eav\Attribute) {
             $options = $attribute->getSource()->getAllOptions(true, true);
         }
         return $options;
diff --git a/app/code/Magento/Swatches/Model/Plugin/EavAttribute.php b/app/code/Magento/Swatches/Model/Plugin/EavAttribute.php
index 31f0c2dbf5231f6e1ec051e8838d537687f4d1da..acb69c3cca99f57dcae5a585e9fb5cb4e39044d3 100644
--- a/app/code/Magento/Swatches/Model/Plugin/EavAttribute.php
+++ b/app/code/Magento/Swatches/Model/Plugin/EavAttribute.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Swatches\Model\Plugin;
 
-use Magento\Catalog\Model\Resource\Eav\Attribute;
+use Magento\Catalog\Model\ResourceModel\Eav\Attribute;
 use Magento\Swatches\Model\Swatch;
 
 /**
@@ -21,7 +21,7 @@ class EavAttribute
     const BASE_OPTION_TITLE = 'option';
 
     /**
-     * @var \Magento\Swatches\Model\Resource\Swatch\CollectionFactory
+     * @var \Magento\Swatches\Model\ResourceModel\Swatch\CollectionFactory
      */
     protected $swatchCollectionFactory;
 
@@ -50,12 +50,12 @@ class EavAttribute
     protected $isSwatchExists;
 
     /**
-     * @param \Magento\Swatches\Model\Resource\Swatch\CollectionFactory $collectionFactory
+     * @param \Magento\Swatches\Model\ResourceModel\Swatch\CollectionFactory $collectionFactory
      * @param \Magento\Swatches\Model\SwatchFactory $swatchFactory
      * @param \Magento\Swatches\Helper\Data $swatchHelper
      */
     public function __construct(
-        \Magento\Swatches\Model\Resource\Swatch\CollectionFactory $collectionFactory,
+        \Magento\Swatches\Model\ResourceModel\Swatch\CollectionFactory $collectionFactory,
         \Magento\Swatches\Model\SwatchFactory $swatchFactory,
         \Magento\Swatches\Helper\Data $swatchHelper
     ) {
diff --git a/app/code/Magento/Swatches/Model/Plugin/ProductImage.php b/app/code/Magento/Swatches/Model/Plugin/ProductImage.php
index f2ef7223f507a2ace830658f32b6847c26c54d15..a4d894b19f437536945737088ee67a05f122b8cf 100644
--- a/app/code/Magento/Swatches/Model/Plugin/ProductImage.php
+++ b/app/code/Magento/Swatches/Model/Plugin/ProductImage.php
@@ -119,7 +119,7 @@ class ProductImage
     /**
      * Check if we can replace original image with swatch image on catalog/category/list page
      *
-     * @param \Magento\Catalog\Model\Resource\Eav\Attribute $attribute
+     * @param \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute
      * @return bool
      */
     protected function canReplaceImageWithSwatch($attribute)
diff --git a/app/code/Magento/Swatches/Model/Resource/Swatch.php b/app/code/Magento/Swatches/Model/ResourceModel/Swatch.php
similarity index 86%
rename from app/code/Magento/Swatches/Model/Resource/Swatch.php
rename to app/code/Magento/Swatches/Model/ResourceModel/Swatch.php
index b4b5e103ffc582c309e527016b1f26f2f7844cd8..fa230bf8eae2f7b99587b44d2aa4195f190197ab 100644
--- a/app/code/Magento/Swatches/Model/Resource/Swatch.php
+++ b/app/code/Magento/Swatches/Model/ResourceModel/Swatch.php
@@ -4,13 +4,13 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Swatches\Model\Resource;
+namespace Magento\Swatches\Model\ResourceModel;
 
 /**
  * @codeCoverageIgnore
  * Swatch Resource Model
  */
-class Swatch extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Swatch extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize resource model
diff --git a/app/code/Magento/Swatches/Model/Resource/Swatch/Collection.php b/app/code/Magento/Swatches/Model/ResourceModel/Swatch/Collection.php
similarity index 82%
rename from app/code/Magento/Swatches/Model/Resource/Swatch/Collection.php
rename to app/code/Magento/Swatches/Model/ResourceModel/Swatch/Collection.php
index 1b7a46475ebc17828676ded916063157a7ebe0fb..4099c2347538504604aa3c784440d0fa4dffafa8 100644
--- a/app/code/Magento/Swatches/Model/Resource/Swatch/Collection.php
+++ b/app/code/Magento/Swatches/Model/ResourceModel/Swatch/Collection.php
@@ -3,13 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Swatches\Model\Resource\Swatch;
+namespace Magento\Swatches\Model\ResourceModel\Swatch;
 
 /**
  * @codeCoverageIgnore
  * Swatch Collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Standard collection initialization
@@ -18,7 +18,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Swatches\Model\Swatch', 'Magento\Swatches\Model\Resource\Swatch');
+        $this->_init('Magento\Swatches\Model\Swatch', 'Magento\Swatches\Model\ResourceModel\Swatch');
     }
 
     /**
diff --git a/app/code/Magento/Swatches/Model/Swatch.php b/app/code/Magento/Swatches/Model/Swatch.php
index 94955bd725680dddd4b8d2507f0891ebc2655d11..cfb4d34e398dcc4efb954ebc0bb0918fa7597bab 100644
--- a/app/code/Magento/Swatches/Model/Swatch.php
+++ b/app/code/Magento/Swatches/Model/Swatch.php
@@ -48,6 +48,6 @@ class Swatch extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Swatches\Model\Resource\Swatch');
+        $this->_init('Magento\Swatches\Model\ResourceModel\Swatch');
     }
 }
diff --git a/app/code/Magento/Swatches/Setup/InstallData.php b/app/code/Magento/Swatches/Setup/InstallData.php
index 183c80af48b9604202d3760bece8ae4d87a72410..ac3a90209547164ca3cf9915e4a2d78dd0b2b7df 100644
--- a/app/code/Magento/Swatches/Setup/InstallData.php
+++ b/app/code/Magento/Swatches/Setup/InstallData.php
@@ -60,7 +60,7 @@ class InstallData implements InstallDataInterface
                 'frontend' => 'Magento\Catalog\Model\Product\Attribute\Frontend\Image',
                 'required' => false,
                 'sort_order' => 3,
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
                 'used_in_product_listing' => true
             ]
         );
diff --git a/app/code/Magento/Swatches/Test/Unit/Block/Adminhtml/Attribute/Edit/Options/AbstractSwatchTest.php b/app/code/Magento/Swatches/Test/Unit/Block/Adminhtml/Attribute/Edit/Options/AbstractSwatchTest.php
index cf542625aebe5f30a3d4ec328d9da712bba7f13a..2131bee8604aad40451aa152f264ff720576bba3 100644
--- a/app/code/Magento/Swatches/Test/Unit/Block/Adminhtml/Attribute/Edit/Options/AbstractSwatchTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Block/Adminhtml/Attribute/Edit/Options/AbstractSwatchTest.php
@@ -50,7 +50,7 @@ class AbstractSwatchTest extends \PHPUnit_Framework_TestCase
         $this->contextMock = $this->getMock('\Magento\Backend\Block\Template\Context', [], [], '', false);
         $this->registryMock = $this->getMock('\Magento\Framework\Registry', [], [], '', false);
         $this->attrOptionCollectionFactoryMock = $this->getMock(
-            '\Magento\Eav\Model\Resource\Entity\Attribute\Option\CollectionFactory',
+            '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\CollectionFactory',
             ['create'],
             [],
             '',
@@ -95,7 +95,7 @@ class AbstractSwatchTest extends \PHPUnit_Framework_TestCase
             $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
 
             $option = $this->getMock(
-                '\Magento\Eav\Model\Resource\Entity\Attribute\Option',
+                '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Option',
                 ['getId', 'getValue', 'getLabel'],
                 [],
                 '',
@@ -103,7 +103,7 @@ class AbstractSwatchTest extends \PHPUnit_Framework_TestCase
             );
 
             $attrOptionCollectionMock = $objectManager->getCollectionMock(
-                '\Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection',
+                '\Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection',
                 [$option, $option]
             );
 
@@ -112,7 +112,7 @@ class AbstractSwatchTest extends \PHPUnit_Framework_TestCase
                 ->method('create')
                 ->willReturn($attrOptionCollectionMock);
 
-            $attribute = $this->getMock('\Magento\Eav\Model\Resource\Entity\Attribute', ['getId'], [], '', false);
+            $attribute = $this->getMock('\Magento\Eav\Model\ResourceModel\Entity\Attribute', ['getId'], [], '', false);
             $attribute->expects($this->once())->method('getId')->willReturn(23);
 
             $this->registryMock
diff --git a/app/code/Magento/Swatches/Test/Unit/Block/LayeredNavigation/RenderLayeredTest.php b/app/code/Magento/Swatches/Test/Unit/Block/LayeredNavigation/RenderLayeredTest.php
index d89a0f82d62ba31d56484c4a6682399b0b46fb70..5cad768787a1ff2874cc8e585477ac2c4a5fef27 100644
--- a/app/code/Magento/Swatches/Test/Unit/Block/LayeredNavigation/RenderLayeredTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Block/LayeredNavigation/RenderLayeredTest.php
@@ -55,14 +55,14 @@ class RenderLayeredTest extends \PHPUnit_Framework_TestCase
         $this->contextMock->expects($this->any())->method('getUrlBuilder')->willReturn($this->urlBuilder);
         $this->eavAttributeMock = $this->getMock('\Magento\Eav\Model\Entity\Attribute', [], [], '', false);
         $this->layerAttributeFactoryMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Layer\Filter\AttributeFactory',
+            '\Magento\Catalog\Model\ResourceModel\Layer\Filter\AttributeFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->layerAttributeMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Layer\Filter\Attribute',
+            '\Magento\Catalog\Model\ResourceModel\Layer\Filter\Attribute',
             ['getCount'],
             [],
             '',
@@ -91,7 +91,7 @@ class RenderLayeredTest extends \PHPUnit_Framework_TestCase
     public function testSetSwatchFilter()
     {
         $this->block->method('filter')->willReturn($this->filterMock);
-        $eavAttribute = $this->getMock('\Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $eavAttribute = $this->getMock('\Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $this->filterMock->expects($this->once())->method('getAttributeModel')->willReturn($eavAttribute);
         $this->block->method('eavAttribute')->willReturn($eavAttribute);
         $result = $this->block->setSwatchFilter($this->filterMock);
@@ -165,7 +165,7 @@ class RenderLayeredTest extends \PHPUnit_Framework_TestCase
         $option4 = $this->getMock('\Magento\Eav\Model\Entity\Attribute\Option', [], [], '', false);
         $option4->expects($this->any())->method('getValue')->willReturn('green');
 
-        $eavAttribute = $this->getMock('\Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $eavAttribute = $this->getMock('\Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $eavAttribute->expects($this->once())
             ->method('getOptions')
             ->willReturn([$option1, $option2, $option3, $option4]);
diff --git a/app/code/Magento/Swatches/Test/Unit/Controller/Ajax/MediaTest.php b/app/code/Magento/Swatches/Test/Unit/Controller/Ajax/MediaTest.php
index 7c81c70b46ab79e426a9bbc24760489baddf508a..6358b2d5ccf11cc6850007db480ecba0b85b9c79 100644
--- a/app/code/Magento/Swatches/Test/Unit/Controller/Ajax/MediaTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Controller/Ajax/MediaTest.php
@@ -23,7 +23,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Catalog\Model\Product|\PHPUnit_Framework_MockObject_MockObject */
     protected $productMock;
 
-    /** @var \Magento\Catalog\Model\Resource\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject */
     protected $attributeMock;
 
     /** @var \Magento\Framework\App\Action\Context|\PHPUnit_Framework_MockObject_MockObject */
@@ -64,7 +64,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->productMock = $this->getMock('\Magento\Catalog\Model\Product', [], [], '', false);
-        $this->attributeMock = $this->getMock('\Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $this->attributeMock = $this->getMock('\Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $this->contextMock = $this->getMock('\Magento\Framework\App\Action\Context', [], [], '', false);
 
         $this->requestMock = $this->getMock('\Magento\Framework\App\Request', ['getParam'], [], '', false);
diff --git a/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php b/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php
index 45d74671694de644b748acc6d2415d6d6e8a4ec5..31e868cdf4ca9db70978464cd227f92479104f1f 100644
--- a/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Helper/DataTest.php
@@ -10,10 +10,10 @@ class DataTest extends \PHPUnit_Framework_TestCase
     /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Helper\Image */
     protected $imageHelperMock;
 
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Resource\Product\CollectionFactory */
+    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory */
     protected $productCollectionFactoryMock;
 
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Resource\Product\Collection */
+    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\ResourceModel\Product\Collection */
     protected $productCollectionMock;
 
     /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\ConfigurableProduct\Model\Product\Type\Configurable */
@@ -28,10 +28,10 @@ class DataTest extends \PHPUnit_Framework_TestCase
     /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Store\Model\StoreManager */
     protected $storeManagerMock;
 
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Swatches\Model\Resource\Swatch\CollectionFactory */
+    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Swatches\Model\ResourceModel\Swatch\CollectionFactory */
     protected $swatchCollectionFactoryMock;
 
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\Resource\Eav\Attribute */
+    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Catalog\Model\ResourceModel\Eav\Attribute */
     protected $attributeMock;
 
     /** @var \Magento\Framework\TestFramework\Unit\Helper\ObjectManager */
@@ -49,7 +49,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
 
         $this->imageHelperMock = $this->getMock('\Magento\Catalog\Helper\Image', [], [], '', false);
         $this->productCollectionFactoryMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Product\CollectionFactory',
+            '\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory',
             ['create'],
             [],
             '',
@@ -59,7 +59,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
         $this->productMock = $this->getMock('\Magento\Catalog\Model\Product', [], [], '', false);
 
         $this->productCollectionMock = $this->objectManager->getCollectionMock(
-            '\Magento\Catalog\Model\Resource\Product\Collection',
+            '\Magento\Catalog\Model\ResourceModel\Product\Collection',
             [
                 $this->productMock,
                 $this->productMock,
@@ -85,14 +85,14 @@ class DataTest extends \PHPUnit_Framework_TestCase
 
         $this->storeManagerMock = $this->getMock('\Magento\Store\Model\StoreManager', [], [], '', false);
         $this->swatchCollectionFactoryMock = $this->getMock(
-            '\Magento\Swatches\Model\Resource\Swatch\CollectionFactory',
+            '\Magento\Swatches\Model\ResourceModel\Swatch\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
 
-        $this->attributeMock = $this->getMock('\Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $this->attributeMock = $this->getMock('\Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
 
         $this->swatchHelperObject = $this->objectManager->getObject(
             '\Magento\Swatches\Helper\Data',
@@ -334,6 +334,15 @@ class DataTest extends \PHPUnit_Framework_TestCase
             ->method('setImageFile')
             ->with($image)
             ->willReturnSelf();
+        $this->imageHelperMock->expects($this->any())
+            ->method('constrainOnly')
+            ->willReturnSelf();
+        $this->imageHelperMock->expects($this->any())
+            ->method('keepAspectRatio')
+            ->willReturnSelf();
+        $this->imageHelperMock->expects($this->any())
+            ->method('keepFrame')
+            ->willReturnSelf();
         $this->imageHelperMock->expects($this->any())
             ->method('getUrl')
             ->willReturn('http://full_path_to_image/magento1.png');
@@ -645,7 +654,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
         $swatchMock->expects($this->at(2))->method('getData')->with('')->willReturn($optionsData[0]);
 
         $swatchCollectionMock = $this->objectManager->getCollectionMock(
-            '\Magento\Swatches\Model\Resource\Swatch\Collection',
+            '\Magento\Swatches\Model\ResourceModel\Swatch\Collection',
             [
                 $swatchMock,
             ]
@@ -694,7 +703,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
         $swatchMock->expects($this->at(9))->method('getData')->with('')->willReturn($optionsData[1]);
 
         $swatchCollectionMock = $this->objectManager->getCollectionMock(
-            '\Magento\Swatches\Model\Resource\Swatch\Collection',
+            '\Magento\Swatches\Model\ResourceModel\Swatch\Collection',
             [
                 $swatchMock,
                 $swatchMock,
@@ -730,7 +739,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
         $swatchMock->expects($this->at(4))->method('getData')->with('')->willReturn($optionsData);
 
         $swatchCollectionMock = $this->objectManager->getCollectionMock(
-            '\Magento\Swatches\Model\Resource\Swatch\Collection',
+            '\Magento\Swatches\Model\ResourceModel\Swatch\Collection',
             [
                 $swatchMock,
             ]
diff --git a/app/code/Magento/Swatches/Test/Unit/Helper/MediaTest.php b/app/code/Magento/Swatches/Test/Unit/Helper/MediaTest.php
index eab1172dd0c8ad4a2216d49c5f56beaecd560cf3..d1075244c0ddcfb74ab792b38369e8a0e441ff45 100644
--- a/app/code/Magento/Swatches/Test/Unit/Helper/MediaTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Helper/MediaTest.php
@@ -28,7 +28,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
     /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Image\Factory */
     protected $imageFactoryMock;
 
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Theme\Model\Resource\Theme\Collection */
+    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Theme\Model\ResourceModel\Theme\Collection */
     protected $themeCollectionMock;
 
     /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\View\Config */
@@ -73,7 +73,7 @@ class MediaTest extends \PHPUnit_Framework_TestCase
 
         $this->imageFactoryMock = $this->getMock('\Magento\Framework\Image\Factory', [], [], '', false);
         $this->themeCollectionMock = $this->getMock(
-            '\Magento\Theme\Model\Resource\Theme\Collection',
+            '\Magento\Theme\Model\ResourceModel\Theme\Collection',
             ['loadRegisteredThemes'],
             [],
             '',
diff --git a/app/code/Magento/Swatches/Test/Unit/Model/Form/Element/AbstractSwatchTest.php b/app/code/Magento/Swatches/Test/Unit/Model/Form/Element/AbstractSwatchTest.php
index 1c3920ea897705d6f554ebb88d8297135d7fe98d..f6e73f7b696fdf3a46a399e7103eaa77dbaca804 100644
--- a/app/code/Magento/Swatches/Test/Unit/Model/Form/Element/AbstractSwatchTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Model/Form/Element/AbstractSwatchTest.php
@@ -11,7 +11,7 @@ class AbstractSwatchTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Swatches\Model\Form\Element\AbstractSwatch|\PHPUnit_Framework_MockObject_MockObject */
     private $swatch;
 
-    /** @var \Magento\Catalog\Model\Resource\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject */
     private $attribute;
 
     /** @var \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource|\PHPUnit_Framework_MockObject_MockObject */
@@ -22,7 +22,7 @@ class AbstractSwatchTest extends \PHPUnit_Framework_TestCase
         $this->source = $this->getMockBuilder('Magento\Eav\Model\Entity\Attribute\Source\AbstractSource')
             ->getMockForAbstractClass();
 
-        $this->attribute = $this->getMockBuilder('Magento\Catalog\Model\Resource\Eav\Attribute')
+        $this->attribute = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Swatches/Test/Unit/Model/Plugin/EavAttributeTest.php b/app/code/Magento/Swatches/Test/Unit/Model/Plugin/EavAttributeTest.php
index 26719648a2c82b04f7ca73d71051fe4592176326..4f6018ac343955b3a2a7ae859b3b0d2fe110c5e6 100644
--- a/app/code/Magento/Swatches/Test/Unit/Model/Plugin/EavAttributeTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Model/Plugin/EavAttributeTest.php
@@ -21,13 +21,13 @@ class EavAttributeTest extends \PHPUnit_Framework_TestCase
     /** @var EavAttribute */
     private $eavAttribute;
 
-    /** @var \Magento\Catalog\Model\Resource\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject */
     private $attribute;
 
     /** @var \Magento\Swatches\Model\SwatchFactory|\PHPUnit_Framework_MockObject_MockObject */
     private $swatchFactory;
 
-    /** @var \Magento\Swatches\Model\Resource\Swatch\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Swatches\Model\ResourceModel\Swatch\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject */
     private $collectionFactory;
 
     /** @var \Magento\Swatches\Helper\Data|\PHPUnit_Framework_MockObject_MockObject */
@@ -39,10 +39,10 @@ class EavAttributeTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Swatches\Model\Swatch|\PHPUnit_Framework_MockObject_MockObject */
     private $swatch;
 
-    /** @var \Magento\Swatches\Model\Resource\Swatch|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Swatches\Model\ResourceModel\Swatch|\PHPUnit_Framework_MockObject_MockObject */
     private $resource;
 
-    /** @var \Magento\Swatches\Model\Resource\Swatch\Collection|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Swatches\Model\ResourceModel\Swatch\Collection|\PHPUnit_Framework_MockObject_MockObject */
     private $collection;
 
     /** @var array */
@@ -56,14 +56,15 @@ class EavAttributeTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->attribute = $this->getMock('\Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $this->attribute = $this->getMock('\Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $this->swatchFactory = $this->getMock('\Magento\Swatches\Model\SwatchFactory', ['create'], [], '', false);
         $this->swatchHelper = $this->getMock('\Magento\Swatches\Helper\Data', [], [], '', false);
         $this->swatch = $this->getMock('\Magento\Swatches\Model\Swatch', [], [], '', false);
-        $this->resource = $this->getMock('Magento\Swatches\Model\Resource\Swatch', [], [], '', false);
-        $this->collection = $this->getMock('\Magento\Swatches\Model\Resource\Swatch\Collection', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Swatches\Model\ResourceModel\Swatch', [], [], '', false);
+        $this->collection =
+            $this->getMock('\Magento\Swatches\Model\ResourceModel\Swatch\Collection', [], [], '', false);
         $this->collectionFactory = $this->getMock(
-            '\Magento\Swatches\Model\Resource\Swatch\CollectionFactory',
+            '\Magento\Swatches\Model\ResourceModel\Swatch\CollectionFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Swatches/Test/Unit/Model/Plugin/FilterRendererTest.php b/app/code/Magento/Swatches/Test/Unit/Model/Plugin/FilterRendererTest.php
index 9faae0f3902e8f0b125910414b21b3b517b9f0a5..d5fe40d250fc6a4790b029305438ceff38624027 100644
--- a/app/code/Magento/Swatches/Test/Unit/Model/Plugin/FilterRendererTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Model/Plugin/FilterRendererTest.php
@@ -89,7 +89,7 @@ class FilterRendererTest extends \PHPUnit_Framework_TestCase
 
     public function testAroundRenderTrue()
     {
-        $attributeMock = $this->getMock('\Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $attributeMock = $this->getMock('\Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $this->filterMock->expects($this->atLeastOnce())->method('getAttributeModel')->willReturn($attributeMock);
         $this->filterMock->expects($this->once())->method('hasAttributeModel')->willReturn(true);
         $this->swatchHelperMock
@@ -106,7 +106,7 @@ class FilterRendererTest extends \PHPUnit_Framework_TestCase
 
     public function testAroundRenderFalse()
     {
-        $attributeMock = $this->getMock('\Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $attributeMock = $this->getMock('\Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $this->filterMock->expects($this->atLeastOnce())->method('getAttributeModel')->willReturn($attributeMock);
         $this->filterMock->expects($this->once())->method('hasAttributeModel')->willReturn(true);
         $this->swatchHelperMock
diff --git a/app/code/Magento/Swatches/Test/Unit/Model/Plugin/ProductImageTest.php b/app/code/Magento/Swatches/Test/Unit/Model/Plugin/ProductImageTest.php
index a68d129e1c5a58426960d221b2d13c7a9fd95767..2c469b1ae2e21c84218bfecaada63f86660e497e 100644
--- a/app/code/Magento/Swatches/Test/Unit/Model/Plugin/ProductImageTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Model/Plugin/ProductImageTest.php
@@ -13,13 +13,13 @@ class ProductImageTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Swatches\Helper\Data|\PHPUnit_Framework_MockObject_MockObject */
     protected $swatchesHelperMock;
 
-    /** @var \Magento\Catalog\Model\Resource\Eav\AttributeFactory|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory|\PHPUnit_Framework_MockObject_MockObject */
     protected $attributeFactoryMock;
 
     /** @var \Magento\Eav\Model\Config|\PHPUnit_Framework_MockObject_MockObject */
     protected $eavConfigMock;
 
-    /** @var \Magento\Catalog\Model\Resource\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute|\PHPUnit_Framework_MockObject_MockObject */
     protected $attributeMock;
 
     /** @var \Magento\Framework\App\Request\Http|\PHPUnit_Framework_MockObject_MockObject */
@@ -42,7 +42,7 @@ class ProductImageTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->attributeFactoryMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Eav\AttributeFactory',
+            '\Magento\Catalog\Model\ResourceModel\Eav\AttributeFactory',
             ['create'],
             [],
             '',
@@ -58,7 +58,7 @@ class ProductImageTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->attributeMock = $this->getMock(
-            '\Magento\Catalog\Model\Resource\Eav\Attribute',
+            '\Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             ['loadByCode', 'getId', 'getUsedInProductListing', 'getIsFilterable', 'getData'],
             [],
             '',
diff --git a/app/code/Magento/Swatches/Test/Unit/Model/Plugin/ProductTest.php b/app/code/Magento/Swatches/Test/Unit/Model/Plugin/ProductTest.php
index 3cff4b70576494222e57c2537f580cca441b774d..3bc92eaaa2543ac39f22f3bbb9f0ebfee5b39f20 100644
--- a/app/code/Magento/Swatches/Test/Unit/Model/Plugin/ProductTest.php
+++ b/app/code/Magento/Swatches/Test/Unit/Model/Plugin/ProductTest.php
@@ -17,7 +17,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     {
         $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $productMock = $this->getMock('\Magento\Catalog\Model\Product', ['getTypeId'], [], '', false);
-        $roleMock = $this->getMock('\Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $roleMock = $this->getMock('\Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
 
         $imageRolesArray = [
             'image' => $roleMock,
diff --git a/app/code/Magento/Swatches/composer.json b/app/code/Magento/Swatches/composer.json
index 6a2c1e87ada811548efc050aee3412bc197f49d6..addde5d3f7e224dda2a475df85396c0eb00d74bf 100644
--- a/app/code/Magento/Swatches/composer.json
+++ b/app/code/Magento/Swatches/composer.json
@@ -15,7 +15,8 @@
         "magento/framework": "1.0.0-beta"
     },
     "suggest": {
-        "magento/module-layered-navigation": "1.0.0-beta"
+        "magento/module-layered-navigation": "1.0.0-beta",
+        "magento/module-swatches-sample-data": "Sample Data version:1.0.0-beta"
     },
     "type": "magento2-module",
     "version": "1.0.0-beta",
diff --git a/app/code/Magento/Swatches/etc/adminhtml/events.xml b/app/code/Magento/Swatches/etc/adminhtml/events.xml
index d75d2fa360d80d7433c561ba793f9d077ce4fbba..1938ddd8ef7fb217e9fc8072b671b0499b149519 100644
--- a/app/code/Magento/Swatches/etc/adminhtml/events.xml
+++ b/app/code/Magento/Swatches/etc/adminhtml/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="product_attribute_form_build_main_tab">
-        <observer name="add_swatch_fields_to_attribute" instance="Magento\Swatches\Observer\AddFieldsToAttributeObserver" method="execute" />
+        <observer name="add_swatch_fields_to_attribute" instance="Magento\Swatches\Observer\AddFieldsToAttributeObserver" />
     </event>
     <event name="adminhtml_product_attribute_types">
-        <observer name="swatch_attribute_type" instance="Magento\Swatches\Observer\AddSwatchAttributeTypeObserver" method="execute" />
+        <observer name="swatch_attribute_type" instance="Magento\Swatches\Observer\AddSwatchAttributeTypeObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Swatches/etc/di.xml b/app/code/Magento/Swatches/etc/di.xml
index ac62a22502c2c036bcfca8b724c296654c64da43..9b29bc1d2acf3e8a873bb62ae86f1be710108499 100644
--- a/app/code/Magento/Swatches/etc/di.xml
+++ b/app/code/Magento/Swatches/etc/di.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
-    <type name="Magento\Catalog\Model\Resource\Eav\Attribute">
+    <type name="Magento\Catalog\Model\ResourceModel\Eav\Attribute">
         <plugin name="save_swatches_option_params" type="Magento\Swatches\Model\Plugin\EavAttribute"/>
     </type>
     <type name="Magento\Catalog\Block\Product\AbstractProduct">
diff --git a/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml b/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml
index 8b2b70a2cdbfb947c6f7716c1d51d23d07deb0ee..0f911d563f714492a0700f50cdbb1746683f3fbe 100644
--- a/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml
+++ b/app/code/Magento/Swatches/view/adminhtml/templates/catalog/product/attribute/js.phtml
@@ -8,7 +8,14 @@
 
 ?>
 <script>
-require(["jquery", 'uiRegistry', "collapsable", "prototype"], function(jQuery, rg){
+require([
+    "jquery",
+    "uiRegistry",
+    "Magento_Ui/js/modal/alert",
+    'Magento_Ui/js/modal/prompt',
+    "collapsable",
+    "prototype"
+], function(jQuery, rg, alert, prompt){
 
 function toggleApplyVisibility(select) {
     if ($(select).value == 1) {
@@ -324,36 +331,48 @@ function updateRequriedOptions()
 
 function saveAttributeInNewSet(promptMessage)
 {
-    var newAttributeSetName = prompt(promptMessage, '');
-
-    if (newAttributeSetName == null) {
-        return;
-    }
-
-    var rules = ['required-entry', 'validate-no-html-tags'];
-    for (var i = 0; i < rules.length; i++) {
-        if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) {
-            alert(jQuery.validator.messages[rules[i]]);
-            return;
+    var newAttributeSetName;
+
+    prompt({
+        content: promptMessage,
+        actions: {
+            confirm: function(val) {
+                newAttributeSetName = val;
+
+                if (!newAttributeSetName) {
+                    return;
+                }
+
+                var rules = ['required-entry', 'validate-no-html-tags'];
+                for (var i = 0; i < rules.length; i++) {
+                    if (!jQuery.validator.methods[rules[i]](newAttributeSetName)) {
+                        alert({
+                            content: jQuery.validator.messages[rules[i]]
+                        });
+
+                        return;
+                    }
+                }
+
+                var newAttributeSetNameInputId = 'new_attribute_set_name';
+
+                if ($(newAttributeSetNameInputId)) {
+                    $(newAttributeSetNameInputId).value = newAttributeSetName;
+                } else {
+                    $('edit_form').insert({
+                        top: new Element('input', {
+                            type: 'hidden',
+                            id: newAttributeSetNameInputId,
+                            name: 'new_attribute_set_name',
+                            value: newAttributeSetName
+                        })
+                    });
+                }
+                // Temporary solution will replaced after refactoring of attributes functionality
+                jQuery('#edit_form').triggerHandler('save');
+            }
         }
-    }
-
-    var newAttributeSetNameInputId = 'new_attribute_set_name';
-
-    if ($(newAttributeSetNameInputId)) {
-        $(newAttributeSetNameInputId).value = newAttributeSetName;
-    } else {
-        $('edit_form').insert({
-            top: new Element('input', {
-                type: 'hidden',
-                id: newAttributeSetNameInputId,
-                name: 'new_attribute_set_name',
-                value: newAttributeSetName
-            })
-        });
-    }
-    // Temporary solution will replaced after refactoring of attributes functionality
-    jQuery('#edit_form').triggerHandler('save');
+    });
 }
 
 if($('frontend_input')){
diff --git a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
index df8fa96a64910f32363ef0abac90c712b6127a95..0baa01cffda9cb3416b06663705dd7e2110ebb1a 100644
--- a/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
+++ b/app/code/Magento/Swatches/view/frontend/web/js/SwatchRenderer.js
@@ -181,7 +181,8 @@ define(["jquery", "jquery/ui"], function ($) {
             onlySwatches: false,                               // show only swatch controls
             enableControlLabel: true,                          // enable label for control
             moreButtonText: 'More',                            // text for more button
-            mediaCallback: ''                                  // Callback url for media
+            mediaCallback: '',                                 // Callback url for media
+            mediaGalleryInitial: [{}]                          // Cache for BaseProduct images. Needed when option unset
         },
 
         /**
@@ -204,6 +205,30 @@ define(["jquery", "jquery/ui"], function ($) {
             }
         },
 
+        /**
+         * @private
+         */
+        _create: function () {
+            var options = this.options,
+                gallery = $('[data-gallery-role=gallery-placeholder]', '.column.main'),
+                isProductViewExist = $('body.catalog-product-view').size() > 0,
+                $main = isProductViewExist ?
+                    this.element.parents('.column.main') :
+                    this.element.parents('.product-item-info');
+
+            if (isProductViewExist) {
+                gallery.on('gallery:loaded', function () {
+                    var galleryObject = gallery.data('gallery');
+
+                    options.mediaGalleryInitial = galleryObject.returnCurrentImages();
+                });
+            } else {
+                options.mediaGalleryInitial = [{
+                    'img': $main.find('.product-image-photo').attr('src')
+                }];
+            }
+        },
+
         /**
          * Render controls
          *
@@ -245,10 +270,12 @@ define(["jquery", "jquery/ui"], function ($) {
 
                 // Aggregate options array to hash (key => value)
                 $.each(item.options, function () {
-                    $widget.optionsMap[item.id][this.id] = {
-                        price: parseInt($widget.options.jsonConfig.optionPrices[this.products[0]].finalPrice.amount, 10),
-                        products: this.products
-                    };
+                    if (this.products.length > 0) {
+                        $widget.optionsMap[item.id][this.id] = {
+                            price: parseInt($widget.options.jsonConfig.optionPrices[this.products[0]].finalPrice.amount, 10),
+                            products: this.products
+                        };
+                    }
                 });
             });
 
@@ -324,13 +351,13 @@ define(["jquery", "jquery/ui"], function ($) {
                 // Color
                 else if (type == 1) {
                     html += '<div class="' + optionClass + ' color" ' + attr +
-                    '" style="background: ' + value + ' no-repeat center; background-size: initial;">' + '' + '</div>';
+                        '" style="background: ' + value + ' no-repeat center; background-size: initial;">' + '' + '</div>';
                 }
 
                 // Image
                 else if (type == 2) {
                     html += '<div class="' + optionClass + ' image" ' + attr +
-                    '" style="background: url(' + value + ') no-repeat center; background-size: initial;">' + '' + '</div>';
+                        '" style="background: url(' + value + ') no-repeat center; background-size: initial;">' + '' + '</div>';
                 }
 
                 // Clear
@@ -694,7 +721,8 @@ define(["jquery", "jquery/ui"], function ($) {
          * @private
          */
         _ProductMediaCallback: function ($this, response) {
-            var $main = ($('body.catalog-product-view').size() > 0)
+            var isProductViewExist = $('body.catalog-product-view').size() > 0,
+                $main = isProductViewExist
                     ? $this.parents('.column.main')
                     : $this.parents('.product-item-info'),
                 $widget = this,
@@ -703,24 +731,52 @@ define(["jquery", "jquery/ui"], function ($) {
                     return e.hasOwnProperty('large') && e.hasOwnProperty('medium') && e.hasOwnProperty('small');
                 };
 
-            if ($widget._ObjectLength(response) > 0) {
-                if (support(response)) {
-                    images.push({large: response.large, medium: response.medium, small: response.small});
-                    if (response.hasOwnProperty('gallery')) {
-                        $.each(response.gallery, function () {
-                            if (!support(this) || response.large == this.large) {
-                                return;
-                            }
-                            images.push({large: this.large, medium: this.medium, small: this.small});
+            if ($widget._ObjectLength(response) < 1) {
+                this.updateBaseImage(this.options.mediaGalleryInitial, $main, isProductViewExist);
+
+                return;
+            }
+
+            if (support(response)) {
+                images.push({
+                    full: response.large,
+                    img: response.medium,
+                    thumb: response.small
+                });
+
+                if (response.hasOwnProperty('gallery')) {
+                    $.each(response.gallery, function () {
+                        if (!support(this) || response.large === this.large) {
+                            return;
+                        }
+                        images.push({
+                            full: this.large,
+                            img: this.medium,
+                            thumb: this.small
                         });
-                    }
+                    });
                 }
+            }
 
-                if ($('body.catalog-product-view').size() > 0) {
-                    $main.find('[data-role=media-gallery]').gallery('option', 'images', images);
-                } else {
-                    $main.find('.product-image-photo').attr('src', images.shift().medium);
-                }
+            this.updateBaseImage(images, $main, isProductViewExist);
+        },
+
+        /**
+         * Update [gallery-placeholder] or [product-image-photo]
+         * @param {Array} images
+         * @param {jQuery} context
+         * @param {Boolean} isProductViewExist
+         */
+        updateBaseImage: function (images, context, isProductViewExist) {
+            var justAnImage = images[0];
+
+            if (isProductViewExist) {
+                context
+                    .find('[data-gallery-role=gallery-placeholder]')
+                    .data('gallery')
+                    .updateData(images);
+            } else if (justAnImage && justAnImage.img) {
+                context.find('.product-image-photo').attr('src', justAnImage.img);
             }
         },
 
@@ -732,10 +788,7 @@ define(["jquery", "jquery/ui"], function ($) {
         _XhrKiller: function () {
             var $widget = this;
 
-            if (
-                $widget.xhr != undefined
-                || $widget.xhr != null
-            ) {
+            if ($widget.xhr !== undefined && $widget.xhr !== null) {
                 $widget.xhr.abort();
                 $widget.xhr = null;
             }
@@ -748,12 +801,12 @@ define(["jquery", "jquery/ui"], function ($) {
          */
         _EmulateSelected: function () {
             var $widget = this,
-                $this = $widget.element;
-            var request = $.parseParams(window.location.search.substring(1));
+                $this = $widget.element,
+                request = $.parseParams(window.location.search.substring(1));
 
             $.each(request, function (key, value) {
                 $this.find('.' + $widget.options.classes.attributeClass
-                + '[attribute-code="' + key + '"] [option-id="' + value + '"]').trigger('click');
+                    + '[attribute-code="' + key + '"] [option-id="' + value + '"]').trigger('click');
             });
         },
 
@@ -763,11 +816,14 @@ define(["jquery", "jquery/ui"], function ($) {
          * @returns {number}
          * @private
          */
-        _ObjectLength: function(obj) {
-            var size = 0, key;
+        _ObjectLength: function (obj) {
+            var size = 0,
+                key;
+
             for (key in obj) {
                 if (obj.hasOwnProperty(key)) size++;
             }
+
             return size;
         }
     });
diff --git a/app/code/Magento/Tax/Controller/Adminhtml/Tax/IgnoreTaxNotification.php b/app/code/Magento/Tax/Controller/Adminhtml/Tax/IgnoreTaxNotification.php
index 9fede0b0238787abcc72a691b7473f588a90434b..89ab88a5965a07d63ce3bdb7374604fe6e3d78cc 100644
--- a/app/code/Magento/Tax/Controller/Adminhtml/Tax/IgnoreTaxNotification.php
+++ b/app/code/Magento/Tax/Controller/Adminhtml/Tax/IgnoreTaxNotification.php
@@ -43,7 +43,7 @@ class IgnoreTaxNotification extends \Magento\Tax\Controller\Adminhtml\Tax
         if ($section) {
             try {
                 $path = 'tax/notification/ignore_' . $section;
-                $this->_objectManager->get('Magento\Config\Model\Resource\Config')
+                $this->_objectManager->get('Magento\Config\Model\ResourceModel\Config')
                     ->saveConfig($path, 1, ScopeConfigInterface::SCOPE_TYPE_DEFAULT, 0);
             } catch (\Exception $e) {
                 $this->messageManager->addError($e->getMessage());
diff --git a/app/code/Magento/Tax/Helper/Data.php b/app/code/Magento/Tax/Helper/Data.php
index 4cee19387113a00e28623b848b65aa63130b73f4..7618dc1cfb4985eddc041085b9c8650d236a65a9 100644
--- a/app/code/Magento/Tax/Helper/Data.php
+++ b/app/code/Magento/Tax/Helper/Data.php
@@ -69,7 +69,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     protected $_localeFormat;
 
     /**
-     * @var \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory
+     * @var \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory
      */
     protected $_orderTaxCollectionFactory;
 
@@ -101,7 +101,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
      * @param Config                                                        $taxConfig
      * @param \Magento\Store\Model\StoreManagerInterface                    $storeManager
      * @param \Magento\Framework\Locale\FormatInterface                     $localeFormat
-     * @param \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $orderTaxCollectionFactory
+     * @param \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory $orderTaxCollectionFactory
      * @param \Magento\Framework\Locale\ResolverInterface                   $localeResolver
      * @param \Magento\Catalog\Helper\Data                                  $catalogHelper
      * @param OrderTaxManagementInterface                                   $orderTaxManagement
@@ -114,7 +114,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
         Config $taxConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Locale\FormatInterface $localeFormat,
-        \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $orderTaxCollectionFactory,
+        \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory $orderTaxCollectionFactory,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         \Magento\Catalog\Helper\Data $catalogHelper,
         OrderTaxManagementInterface $orderTaxManagement,
diff --git a/app/code/Magento/Tax/Observer/AggregateSalesReportTaxData.php b/app/code/Magento/Tax/Model/AggregateSalesReportTaxData.php
similarity index 80%
rename from app/code/Magento/Tax/Observer/AggregateSalesReportTaxData.php
rename to app/code/Magento/Tax/Model/AggregateSalesReportTaxData.php
index db020c638b45afbee42b4eb65dd802992edabc81..50c117064ef8366bf2ad7be8d0f304605a41f273 100644
--- a/app/code/Magento/Tax/Observer/AggregateSalesReportTaxData.php
+++ b/app/code/Magento/Tax/Model/AggregateSalesReportTaxData.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Tax\Observer;
+namespace Magento\Tax\Model;
 
 class AggregateSalesReportTaxData
 {
@@ -14,7 +14,7 @@ class AggregateSalesReportTaxData
     protected $localeDate;
 
     /**
-     * @var \Magento\Tax\Model\Resource\Report\TaxFactory
+     * @var \Magento\Tax\Model\ResourceModel\Report\TaxFactory
      */
     protected $reportTaxFactory;
 
@@ -25,12 +25,12 @@ class AggregateSalesReportTaxData
 
     /**
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
-     * @param \Magento\Tax\Model\Resource\Report\TaxFactory $reportTaxFactory
+     * @param \Magento\Tax\Model\ResourceModel\Report\TaxFactory $reportTaxFactory
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      */
     public function __construct(
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
-        \Magento\Tax\Model\Resource\Report\TaxFactory $reportTaxFactory,
+        \Magento\Tax\Model\ResourceModel\Report\TaxFactory $reportTaxFactory,
         \Magento\Framework\Locale\ResolverInterface $localeResolver
     ) {
         $this->localeDate = $localeDate;
@@ -48,7 +48,7 @@ class AggregateSalesReportTaxData
         $this->localeResolver->emulate(0);
         $currentDate = $this->localeDate->date();
         $date = $currentDate->modify('-25 hours');
-        /** @var $reportTax \Magento\Tax\Model\Resource\Report\Tax */
+        /** @var $reportTax \Magento\Tax\Model\ResourceModel\Report\Tax */
         $reportTax = $this->reportTaxFactory->create();
         $reportTax->aggregate($date);
         $this->localeResolver->revert();
diff --git a/app/code/Magento/Tax/Model/Calculation.php b/app/code/Magento/Tax/Model/Calculation.php
index 4fc42634f777ccde3fe39a6a13866ca8be474b99..847d5df6988eb92d8369f4b58ff3e2749c242500 100644
--- a/app/code/Magento/Tax/Model/Calculation.php
+++ b/app/code/Magento/Tax/Model/Calculation.php
@@ -132,7 +132,7 @@ class Calculation extends \Magento\Framework\Model\AbstractModel
     protected $_customerFactory;
 
     /**
-     * @var \Magento\Tax\Model\Resource\TaxClass\CollectionFactory
+     * @var \Magento\Tax\Model\ResourceModel\TaxClass\CollectionFactory
      */
     protected $_classesFactory;
 
@@ -197,8 +197,8 @@ class Calculation extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Customer\Model\Session $customerSession
      * @param \Magento\Customer\Model\CustomerFactory $customerFactory
-     * @param Resource\TaxClass\CollectionFactory $classesFactory
-     * @param Resource\Calculation $resource
+     * @param \Magento\Tax\Model\ResourceModel\TaxClass\CollectionFactory $classesFactory
+     * @param \Magento\Tax\Model\ResourceModel\Calculation $resource
      * @param CustomerAccountManagement $customerAccountManagement
      * @param CustomerGroupManagement $customerGroupManagement
      * @param CustomerGroupRepository $customerGroupRepository
@@ -219,8 +219,8 @@ class Calculation extends \Magento\Framework\Model\AbstractModel
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Customer\Model\Session $customerSession,
         \Magento\Customer\Model\CustomerFactory $customerFactory,
-        \Magento\Tax\Model\Resource\TaxClass\CollectionFactory $classesFactory,
-        \Magento\Tax\Model\Resource\Calculation $resource,
+        \Magento\Tax\Model\ResourceModel\TaxClass\CollectionFactory $classesFactory,
+        \Magento\Tax\Model\ResourceModel\Calculation $resource,
         CustomerAccountManagement $customerAccountManagement,
         CustomerGroupManagement $customerGroupManagement,
         CustomerGroupRepository $customerGroupRepository,
@@ -254,7 +254,7 @@ class Calculation extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Tax\Model\Resource\Calculation');
+        $this->_init('Magento\Tax\Model\ResourceModel\Calculation');
     }
 
     /**
@@ -528,6 +528,7 @@ class Calculation extends \Magento\Framework\Model\AbstractModel
                 && $basedOn == 'shipping'
             ) {
                 if ($customerId) {
+                    //fallback to default address for registered customer
                     try {
                         $defaultBilling = $this->customerAccountManagement->getDefaultBillingAddress($customerId);
                     } catch (NoSuchEntityException $e) {
@@ -546,7 +547,14 @@ class Calculation extends \Magento\Framework\Model\AbstractModel
                         $basedOn = 'default';
                     }
                 } else {
-                    $basedOn = 'default';
+                    //fallback for guest
+                    if ($basedOn == 'billing' && is_object($shippingAddress) && $shippingAddress->getCountryId()) {
+                        $billingAddress = $shippingAddress;
+                    } elseif ($basedOn == 'shipping' && is_object($billingAddress) && $billingAddress->getCountryId()) {
+                        $shippingAddress = $billingAddress;
+                    } else {
+                        $basedOn = 'default';
+                    }
                 }
             }
         }
diff --git a/app/code/Magento/Tax/Model/Calculation/Rate.php b/app/code/Magento/Tax/Model/Calculation/Rate.php
index cfdb536af25c203245c55c3793ba6cfd6c5c827a..0eca26d8eff0c425b93cc4b23537eff44ec3f823 100644
--- a/app/code/Magento/Tax/Model/Calculation/Rate.php
+++ b/app/code/Magento/Tax/Model/Calculation/Rate.php
@@ -16,8 +16,8 @@ use Magento\Tax\Api\Data\TaxRateInterface;
 /**
  * Tax Rate Model
  *
- * @method \Magento\Tax\Model\Resource\Calculation\Rate _getResource()
- * @method \Magento\Tax\Model\Resource\Calculation\Rate getResource()
+ * @method \Magento\Tax\Model\ResourceModel\Calculation\Rate _getResource()
+ * @method \Magento\Tax\Model\ResourceModel\Calculation\Rate getResource()
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class Rate extends \Magento\Framework\Model\AbstractExtensibleModel implements TaxRateInterface
@@ -72,7 +72,7 @@ class Rate extends \Magento\Framework\Model\AbstractExtensibleModel implements T
      * @param \Magento\Directory\Model\RegionFactory $regionFactory
      * @param Rate\TitleFactory $taxTitleFactory
      * @param Region $directoryRegion
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -85,7 +85,7 @@ class Rate extends \Magento\Framework\Model\AbstractExtensibleModel implements T
         \Magento\Directory\Model\RegionFactory $regionFactory,
         \Magento\Tax\Model\Calculation\Rate\TitleFactory $taxTitleFactory,
         Region $directoryRegion,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -110,7 +110,7 @@ class Rate extends \Magento\Framework\Model\AbstractExtensibleModel implements T
      */
     protected function _construct()
     {
-        $this->_init('Magento\Tax\Model\Resource\Calculation\Rate');
+        $this->_init('Magento\Tax\Model\ResourceModel\Calculation\Rate');
     }
 
     /**
diff --git a/app/code/Magento/Tax/Model/Calculation/Rate/Title.php b/app/code/Magento/Tax/Model/Calculation/Rate/Title.php
index 141e62435538b94a97d91671966161b6bf174b7c..5b3103ad4b730c73f5911f06db774dc88d8d632e 100644
--- a/app/code/Magento/Tax/Model/Calculation/Rate/Title.php
+++ b/app/code/Magento/Tax/Model/Calculation/Rate/Title.php
@@ -7,8 +7,8 @@
 /**
  * Tax Rate Title Model
  *
- * @method \Magento\Tax\Model\Resource\Calculation\Rate\Title _getResource()
- * @method \Magento\Tax\Model\Resource\Calculation\Rate\Title getResource()
+ * @method \Magento\Tax\Model\ResourceModel\Calculation\Rate\Title _getResource()
+ * @method \Magento\Tax\Model\ResourceModel\Calculation\Rate\Title getResource()
  * @method int getTaxCalculationRateId()
  *
  * @author      Magento Core Team <core@magentocommerce.com>
@@ -32,7 +32,7 @@ class Title extends \Magento\Framework\Model\AbstractExtensibleModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Tax\Model\Resource\Calculation\Rate\Title');
+        $this->_init('Magento\Tax\Model\ResourceModel\Calculation\Rate\Title');
     }
 
     /**
diff --git a/app/code/Magento/Tax/Model/Calculation/RateRepository.php b/app/code/Magento/Tax/Model/Calculation/RateRepository.php
index c1ac30fd9adadc68528d48df01890ec0f9b6b5ed..4dc01984ca71572d037592a74142d359b94ca9b2 100644
--- a/app/code/Magento/Tax/Model/Calculation/RateRepository.php
+++ b/app/code/Magento/Tax/Model/Calculation/RateRepository.php
@@ -15,7 +15,7 @@ use Magento\Framework\Exception\InputException;
 use Magento\Framework\Exception\LocalizedException;
 use Magento\Tax\Model\Calculation\Rate;
 use Magento\Tax\Model\Calculation\Rate\Converter;
-use Magento\Tax\Model\Resource\Calculation\Rate\Collection;
+use Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -59,7 +59,7 @@ class RateRepository implements \Magento\Tax\Api\TaxRateRepositoryInterface
     protected $regionFactory;
 
     /**
-     * @var \Magento\Tax\Model\Resource\Calculation\Rate
+     * @var \Magento\Tax\Model\ResourceModel\Calculation\Rate
      */
     protected $resourceModel;
 
@@ -75,7 +75,7 @@ class RateRepository implements \Magento\Tax\Api\TaxRateRepositoryInterface
      * @param RateFactory $rateFactory
      * @param CountryFactory $countryFactory
      * @param RegionFactory $regionFactory
-     * @param \Magento\Tax\Model\Resource\Calculation\Rate $rateResource
+     * @param \Magento\Tax\Model\ResourceModel\Calculation\Rate $rateResource
      * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor
      */
     public function __construct(
@@ -85,7 +85,7 @@ class RateRepository implements \Magento\Tax\Api\TaxRateRepositoryInterface
         RateFactory $rateFactory,
         CountryFactory $countryFactory,
         RegionFactory $regionFactory,
-        \Magento\Tax\Model\Resource\Calculation\Rate $rateResource,
+        \Magento\Tax\Model\ResourceModel\Calculation\Rate $rateResource,
         \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor
     ) {
         $this->converter = $converter;
@@ -150,7 +150,7 @@ class RateRepository implements \Magento\Tax\Api\TaxRateRepositoryInterface
      */
     public function getList(\Magento\Framework\Api\SearchCriteriaInterface $searchCriteria)
     {
-        /** @var \Magento\Tax\Model\Resource\Calculation\Rate\Collection $collection */
+        /** @var \Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection $collection */
         $collection = $this->rateFactory->create()->getCollection();
         $this->joinProcessor->process($collection);
         $collection->joinRegionTable();
diff --git a/app/code/Magento/Tax/Model/Calculation/Rule.php b/app/code/Magento/Tax/Model/Calculation/Rule.php
index 0953adde3d24964e7c11855b2095e0189e983fdc..665a3d8f3783f4fc8499bf32a211f717aab06d61 100644
--- a/app/code/Magento/Tax/Model/Calculation/Rule.php
+++ b/app/code/Magento/Tax/Model/Calculation/Rule.php
@@ -12,8 +12,8 @@ use Magento\Tax\Api\Data\TaxRuleInterface;
 /**
  * Tax Rule Model
  *
- * @method \Magento\Tax\Model\Resource\Calculation\Rule _getResource()
- * @method \Magento\Tax\Model\Resource\Calculation\Rule getResource()
+ * @method \Magento\Tax\Model\ResourceModel\Calculation\Rule _getResource()
+ * @method \Magento\Tax\Model\ResourceModel\Calculation\Rule getResource()
  */
 class Rule extends \Magento\Framework\Model\AbstractExtensibleModel implements TaxRuleInterface
 {
@@ -70,7 +70,7 @@ class Rule extends \Magento\Framework\Model\AbstractExtensibleModel implements T
      * @param \Magento\Tax\Model\ClassModel $taxClass
      * @param \Magento\Tax\Model\Calculation $calculation
      * @param Rule\Validator $validator
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -83,7 +83,7 @@ class Rule extends \Magento\Framework\Model\AbstractExtensibleModel implements T
         \Magento\Tax\Model\ClassModel $taxClass,
         \Magento\Tax\Model\Calculation $calculation,
         \Magento\Tax\Model\Calculation\Rule\Validator $validator,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -98,7 +98,7 @@ class Rule extends \Magento\Framework\Model\AbstractExtensibleModel implements T
             $resourceCollection,
             $data
         );
-        $this->_init('Magento\Tax\Model\Resource\Calculation\Rule');
+        $this->_init('Magento\Tax\Model\ResourceModel\Calculation\Rule');
         $this->_taxClass = $taxClass;
     }
 
diff --git a/app/code/Magento/Tax/Model/ClassModel.php b/app/code/Magento/Tax/Model/ClassModel.php
index 69a220c6bcec6745f45e93e9986f765d819e77d1..30f2507b77f387914de52abeab45a860de9a7f9b 100644
--- a/app/code/Magento/Tax/Model/ClassModel.php
+++ b/app/code/Magento/Tax/Model/ClassModel.php
@@ -13,8 +13,8 @@ use Magento\Tax\Api\Data\TaxClassInterface;
 /**
  * Tax class model
  *
- * @method \Magento\Tax\Model\Resource\TaxClass _getResource()
- * @method \Magento\Tax\Model\Resource\TaxClass getResource()
+ * @method \Magento\Tax\Model\ResourceModel\TaxClass _getResource()
+ * @method \Magento\Tax\Model\ResourceModel\TaxClass getResource()
  */
 class ClassModel extends \Magento\Framework\Model\AbstractExtensibleModel implements
     \Magento\Tax\Api\Data\TaxClassInterface
@@ -48,7 +48,7 @@ class ClassModel extends \Magento\Framework\Model\AbstractExtensibleModel implem
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
      * @param TaxClass\Factory $classFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -58,7 +58,7 @@ class ClassModel extends \Magento\Framework\Model\AbstractExtensibleModel implem
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
         \Magento\Tax\Model\TaxClass\Factory $classFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -79,7 +79,7 @@ class ClassModel extends \Magento\Framework\Model\AbstractExtensibleModel implem
      */
     public function _construct()
     {
-        $this->_init('Magento\Tax\Model\Resource\TaxClass');
+        $this->_init('Magento\Tax\Model\ResourceModel\TaxClass');
     }
 
     /**
diff --git a/app/code/Magento/Tax/Model/Config/Notification.php b/app/code/Magento/Tax/Model/Config/Notification.php
index 2bcf7f1ad27ecb3ae149c19e82f798dad0a476bf..1373b4659841916f193f176add390e101e4cb395 100644
--- a/app/code/Magento/Tax/Model/Config/Notification.php
+++ b/app/code/Magento/Tax/Model/Config/Notification.php
@@ -13,7 +13,7 @@ use Magento\Framework\App\Config\ScopeConfigInterface;
 class Notification extends \Magento\Framework\App\Config\Value
 {
     /**
-     * @var \Magento\Config\Model\Resource\Config
+     * @var \Magento\Config\Model\ResourceModel\Config
      */
     protected $resourceConfig;
 
@@ -21,8 +21,8 @@ class Notification extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Config\Model\Resource\Config $resourceConfig
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Config\Model\ResourceModel\Config $resourceConfig
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -30,8 +30,8 @@ class Notification extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
-        \Magento\Config\Model\Resource\Config $resourceConfig,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Config\Model\ResourceModel\Config $resourceConfig,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Tax/Model/Config/TaxClass.php b/app/code/Magento/Tax/Model/Config/TaxClass.php
index 96846a9c909200db1f9ebd8107a9e3a938ec3ac0..95b643be212841013fcd1e1620e8c5ed6ee138b5 100644
--- a/app/code/Magento/Tax/Model/Config/TaxClass.php
+++ b/app/code/Magento/Tax/Model/Config/TaxClass.php
@@ -11,7 +11,7 @@ namespace Magento\Tax\Model\Config;
 class TaxClass extends \Magento\Framework\App\Config\Value
 {
     /**
-     * @var \Magento\Config\Model\Resource\Config
+     * @var \Magento\Config\Model\ResourceModel\Config
      */
     protected $resourceConfig;
 
@@ -24,9 +24,9 @@ class TaxClass extends \Magento\Framework\App\Config\Value
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Config\Model\Resource\Config $resourceConfig
+     * @param \Magento\Config\Model\ResourceModel\Config $resourceConfig
      * @param \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -34,9 +34,9 @@ class TaxClass extends \Magento\Framework\App\Config\Value
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
-        \Magento\Config\Model\Resource\Config $resourceConfig,
+        \Magento\Config\Model\ResourceModel\Config $resourceConfig,
         \Magento\Eav\Model\Entity\AttributeFactory $attributeFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Tax/Model/Resource/Calculation.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation.php
similarity index 97%
rename from app/code/Magento/Tax/Model/Resource/Calculation.php
rename to app/code/Magento/Tax/Model/ResourceModel/Calculation.php
index 2bcc8382d7941fccd29ddf204af4fdaf49691ffb..d275644f22027f282c77f46dc01b274fab1b4936 100644
--- a/app/code/Magento/Tax/Model/Resource/Calculation.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation.php
@@ -8,9 +8,9 @@
 /**
  * Tax Calculation Resource Model
  */
-namespace Magento\Tax\Model\Resource;
+namespace Magento\Tax\Model\ResourceModel;
 
-class Calculation extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Calculation extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store ISO 3166-1 alpha-2 USA country code
@@ -24,13 +24,6 @@ class Calculation extends \Magento\Framework\Model\Resource\Db\AbstractDb
      */
     protected $_ratesCache = [];
 
-    /**
-     * Primary key auto increment flag
-     *
-     * @var bool
-     */
-    protected $_isPkAutoIncrement = false;
-
     /**
      * Tax data
      *
@@ -44,13 +37,13 @@ class Calculation extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Tax\Helper\Data $taxData
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Tax\Helper\Data $taxData,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         $connectionName = null
diff --git a/app/code/Magento/Tax/Model/Resource/Calculation/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Collection.php
similarity index 67%
rename from app/code/Magento/Tax/Model/Resource/Calculation/Collection.php
rename to app/code/Magento/Tax/Model/ResourceModel/Calculation/Collection.php
index a180dcb438cd24011d69a67785b7d48be2b5d74f..ab2cdde74beb87d7161e98b2ed9530457af44ac5 100644
--- a/app/code/Magento/Tax/Model/Resource/Calculation/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tax\Model\Resource\Calculation;
+namespace Magento\Tax\Model\ResourceModel\Calculation;
 
 /**
  * Tax Calculation Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
@@ -19,6 +19,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Tax\Model\Calculation', 'Magento\Tax\Model\Resource\Calculation');
+        $this->_init('Magento\Tax\Model\Calculation', 'Magento\Tax\Model\ResourceModel\Calculation');
     }
 }
diff --git a/app/code/Magento/Tax/Model/Resource/Calculation/Rate.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate.php
similarity index 91%
rename from app/code/Magento/Tax/Model/Resource/Calculation/Rate.php
rename to app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate.php
index adb46b754b3d7ddec1ec69e311174f269e4441bb..862d7c7d5c1479826844d8d2a56bb4d7bd892745 100644
--- a/app/code/Magento/Tax/Model/Resource/Calculation/Rate.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Tax\Model\Resource\Calculation;
+namespace Magento\Tax\Model\ResourceModel\Calculation;
 
-class Rate extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Rate extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/Resource/Calculation/Rate/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Collection.php
similarity index 94%
rename from app/code/Magento/Tax/Model/Resource/Calculation/Rate/Collection.php
rename to app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Collection.php
index c97c77276a5c724e8096507627add5eb0f0c966b..646c1dc8b592f286133cd7369d72764a044a37af 100644
--- a/app/code/Magento/Tax/Model/Resource/Calculation/Rate/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Collection.php
@@ -7,9 +7,9 @@
 /**
  * Tax rate collection
  */
-namespace Magento\Tax\Model\Resource\Calculation\Rate;
+namespace Magento\Tax\Model\ResourceModel\Calculation\Rate;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Value of fetched from DB of rules per cycle
@@ -28,7 +28,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -37,7 +37,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_storeManager = $storeManager;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
@@ -50,7 +50,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Tax\Model\Calculation\Rate', 'Magento\Tax\Model\Resource\Calculation\Rate');
+        $this->_init('Magento\Tax\Model\Calculation\Rate', 'Magento\Tax\Model\ResourceModel\Calculation\Rate');
     }
 
     /**
diff --git a/app/code/Magento/Tax/Model/Resource/Calculation/Rate/Title.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title.php
similarity index 85%
rename from app/code/Magento/Tax/Model/Resource/Calculation/Rate/Title.php
rename to app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title.php
index fcffd5d9b5273039e6b151366649c36620ac0530..320b69aa8dfb71575fcd8a1db780cb1f15eaae2d 100644
--- a/app/code/Magento/Tax/Model/Resource/Calculation/Rate/Title.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tax\Model\Resource\Calculation\Rate;
+namespace Magento\Tax\Model\ResourceModel\Calculation\Rate;
 
 /**
  * Tax Rate Title Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Title extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Title extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/Resource/Calculation/Rate/Title/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title/Collection.php
similarity index 58%
rename from app/code/Magento/Tax/Model/Resource/Calculation/Rate/Title/Collection.php
rename to app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title/Collection.php
index 7b41f159e7e82b8dd65e5e0f822bc4e22860c43a..77685615aca9a38f55cfd6d6ae162013abcf940b 100644
--- a/app/code/Magento/Tax/Model/Resource/Calculation/Rate/Title/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rate/Title/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tax\Model\Resource\Calculation\Rate\Title;
+namespace Magento\Tax\Model\ResourceModel\Calculation\Rate\Title;
 
 /**
  * Tax Rate Title Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
@@ -19,14 +19,17 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Tax\Model\Calculation\Rate\Title', 'Magento\Tax\Model\Resource\Calculation\Rate\Title');
+        $this->_init(
+            'Magento\Tax\Model\Calculation\Rate\Title',
+            'Magento\Tax\Model\ResourceModel\Calculation\Rate\Title'
+        );
     }
 
     /**
      * Add rate id filter
      *
      * @param int $rateId
-     * @return \Magento\Tax\Model\Resource\Calculation\Rate\Title\Collection
+     * @return \Magento\Tax\Model\ResourceModel\Calculation\Rate\Title\Collection
      */
     public function loadByRateId($rateId)
     {
diff --git a/app/code/Magento/Tax/Model/Resource/Calculation/Rule.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule.php
similarity index 89%
rename from app/code/Magento/Tax/Model/Resource/Calculation/Rule.php
rename to app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule.php
index 272963db2d3ad9b28a1d21aa4aec020c623ca0d2..33cf510d08825a6eb3383a400177ce127995ccb3 100644
--- a/app/code/Magento/Tax/Model/Resource/Calculation/Rule.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tax\Model\Resource\Calculation;
+namespace Magento\Tax\Model\ResourceModel\Calculation;
 
 /**
  * Tax rate resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Rule extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Rule extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
@@ -25,7 +25,7 @@ class Rule extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Initialize unique fields
      *
-     * @return \Magento\Tax\Model\Resource\Calculation\Rule
+     * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule
      */
     protected function _initUniqueFields()
     {
diff --git a/app/code/Magento/Tax/Model/Resource/Calculation/Rule/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule/Collection.php
similarity index 86%
rename from app/code/Magento/Tax/Model/Resource/Calculation/Rule/Collection.php
rename to app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule/Collection.php
index 8c39b7f01cb7019876f192c86250fa31a19d5794..c469c26435a11639c3e668505281c22a097d4d45 100644
--- a/app/code/Magento/Tax/Model/Resource/Calculation/Rule/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Calculation/Rule/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tax\Model\Resource\Calculation\Rule;
+namespace Magento\Tax\Model\ResourceModel\Calculation\Rule;
 
 /**
  * Tax rule collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Tax\Model\Calculation\Rule', 'Magento\Tax\Model\Resource\Calculation\Rule');
+        $this->_init('Magento\Tax\Model\Calculation\Rule', 'Magento\Tax\Model\ResourceModel\Calculation\Rule');
     }
 
     /**
@@ -40,7 +40,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * Join calculation data to result
      *
      * @param string $alias table alias
-     * @return \Magento\Tax\Model\Resource\Calculation\Rule\Collection
+     * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection
      */
     public function joinCalculationData($alias)
     {
@@ -62,7 +62,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param string $secondaryJoinField
      * @param string $titleField
      * @param string $dataField
-     * @return \Magento\Tax\Model\Resource\Calculation\Rule\Collection
+     * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection
      */
     protected function _add($itemTable, $primaryJoinField, $secondaryJoinField, $titleField, $dataField)
     {
@@ -104,7 +104,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     /**
      * Add product tax classes to result
      *
-     * @return \Magento\Tax\Model\Resource\Calculation\Rule\Collection
+     * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection
      */
     public function addProductTaxClassesToResult()
     {
@@ -114,7 +114,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     /**
      * Add customer tax classes to result
      *
-     * @return \Magento\Tax\Model\Resource\Calculation\Rule\Collection
+     * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection
      */
     public function addCustomerTaxClassesToResult()
     {
@@ -124,7 +124,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     /**
      * Add rates to result
      *
-     * @return \Magento\Tax\Model\Resource\Calculation\Rule\Collection
+     * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection
      */
     public function addRatesToResult()
     {
@@ -142,7 +142,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      *
      * @param string $type
      * @param int $id
-     * @return \Magento\Tax\Model\Resource\Calculation\Rule\Collection
+     * @return \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection
      * @throws \Magento\Framework\Exception\LocalizedException
      */
     public function setClassTypeFilter($type, $id)
diff --git a/app/code/Magento/Tax/Model/Resource/Report/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Report/Collection.php
similarity index 91%
rename from app/code/Magento/Tax/Model/Resource/Report/Collection.php
rename to app/code/Magento/Tax/Model/ResourceModel/Report/Collection.php
index 2c782c2c59d485640234734faf07092a79181b50..b6044aa257e847e6fcde2df3171a36eab85240a2 100644
--- a/app/code/Magento/Tax/Model/Resource/Report/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Report/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Tax\Model\Resource\Report;
+namespace Magento\Tax\Model\ResourceModel\Report;
 
-class Collection extends \Magento\Sales\Model\Resource\Report\Collection\AbstractCollection
+class Collection extends \Magento\Sales\Model\ResourceModel\Report\Collection\AbstractCollection
 {
     /**
      * @var \Zend_Db_Expr
@@ -35,7 +35,7 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Sales\Model\Resource\Report $resource
+     * @param \Magento\Sales\Model\ResourceModel\Report $resource
      * @param mixed $connection
      */
     public function __construct(
@@ -43,7 +43,7 @@ class Collection extends \Magento\Sales\Model\Resource\Report\Collection\Abstrac
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Sales\Model\Resource\Report $resource,
+        \Magento\Sales\Model\ResourceModel\Report $resource,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
         $resource->init($this->_aggregationTable);
diff --git a/app/code/Magento/Tax/Model/Resource/Report/Tax.php b/app/code/Magento/Tax/Model/ResourceModel/Report/Tax.php
similarity index 68%
rename from app/code/Magento/Tax/Model/Resource/Report/Tax.php
rename to app/code/Magento/Tax/Model/ResourceModel/Report/Tax.php
index 92f822038dce7c28f1ecc353e228504b7523bd16..5f8be548f3f0911d68c93c8059c58ff6323c765d 100644
--- a/app/code/Magento/Tax/Model/Resource/Report/Tax.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Report/Tax.php
@@ -7,40 +7,40 @@
 /**
  * Tax report resource model
  */
-namespace Magento\Tax\Model\Resource\Report;
+namespace Magento\Tax\Model\ResourceModel\Report;
 
-class Tax extends \Magento\Reports\Model\Resource\Report\AbstractReport
+class Tax extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport
 {
     /**
-     * @var \Magento\Tax\Model\Resource\Report\Tax\CreatedatFactory
+     * @var \Magento\Tax\Model\ResourceModel\Report\Tax\CreatedatFactory
      */
     protected $_createdAtFactory;
 
     /**
-     * @var \Magento\Tax\Model\Resource\Report\Tax\UpdatedatFactory
+     * @var \Magento\Tax\Model\ResourceModel\Report\Tax\UpdatedatFactory
      */
     protected $_updatedAtFactory;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate
      * @param \Magento\Reports\Model\FlagFactory $reportsFlagFactory
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Framework\Stdlib\DateTime\Timezone\Validator $timezoneValidator
-     * @param \Magento\Tax\Model\Resource\Report\Tax\CreatedatFactory $createdAtFactory
-     * @param \Magento\Tax\Model\Resource\Report\Tax\UpdatedatFactory $updatedAtFactory
+     * @param \Magento\Tax\Model\ResourceModel\Report\Tax\CreatedatFactory $createdAtFactory
+     * @param \Magento\Tax\Model\ResourceModel\Report\Tax\UpdatedatFactory $updatedAtFactory
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
         \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\Stdlib\DateTime\Timezone\Validator $timezoneValidator,
-        \Magento\Tax\Model\Resource\Report\Tax\CreatedatFactory $createdAtFactory,
-        \Magento\Tax\Model\Resource\Report\Tax\UpdatedatFactory $updatedAtFactory,
+        \Magento\Tax\Model\ResourceModel\Report\Tax\CreatedatFactory $createdAtFactory,
+        \Magento\Tax\Model\ResourceModel\Report\Tax\UpdatedatFactory $updatedAtFactory,
         $connectionName = null
     ) {
         $this->_createdAtFactory = $createdAtFactory;
@@ -75,9 +75,9 @@ class Tax extends \Magento\Reports\Model\Resource\Report\AbstractReport
      */
     public function aggregate($from = null, $to = null)
     {
-        /** @var $createdAt \Magento\Tax\Model\Resource\Report\Tax\Createdat */
+        /** @var $createdAt \Magento\Tax\Model\ResourceModel\Report\Tax\Createdat */
         $createdAt = $this->_createdAtFactory->create();
-        /** @var $updatedAt \Magento\Tax\Model\Resource\Report\Tax\Updatedat */
+        /** @var $updatedAt \Magento\Tax\Model\ResourceModel\Report\Tax\Updatedat */
         $updatedAt = $this->_updatedAtFactory->create();
 
         $createdAt->aggregate($from, $to);
diff --git a/app/code/Magento/Tax/Model/Resource/Report/Tax/Createdat.php b/app/code/Magento/Tax/Model/ResourceModel/Report/Tax/Createdat.php
similarity index 97%
rename from app/code/Magento/Tax/Model/Resource/Report/Tax/Createdat.php
rename to app/code/Magento/Tax/Model/ResourceModel/Report/Tax/Createdat.php
index dddf9db36251e085c23f9e1eee00ba99af7884bb..0f2985a03c99f3546baa88d7acd13552a060a987 100644
--- a/app/code/Magento/Tax/Model/Resource/Report/Tax/Createdat.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Report/Tax/Createdat.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Tax\Model\Resource\Report\Tax;
+namespace Magento\Tax\Model\ResourceModel\Report\Tax;
 
-class Createdat extends \Magento\Reports\Model\Resource\Report\AbstractReport
+class Createdat extends \Magento\Reports\Model\ResourceModel\Report\AbstractReport
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/Resource/Report/Tax/Updatedat.php b/app/code/Magento/Tax/Model/ResourceModel/Report/Tax/Updatedat.php
similarity index 84%
rename from app/code/Magento/Tax/Model/Resource/Report/Tax/Updatedat.php
rename to app/code/Magento/Tax/Model/ResourceModel/Report/Tax/Updatedat.php
index 1f5767c6357d0663ef3264b2a97cce61e56ed7bf..3630f8a8706c5ab2d748b79a6480575bb03fc9c5 100644
--- a/app/code/Magento/Tax/Model/Resource/Report/Tax/Updatedat.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Report/Tax/Updatedat.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Tax\Model\Resource\Report\Tax;
+namespace Magento\Tax\Model\ResourceModel\Report\Tax;
 
-class Updatedat extends \Magento\Tax\Model\Resource\Report\Tax\Createdat
+class Updatedat extends \Magento\Tax\Model\ResourceModel\Report\Tax\Createdat
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/Resource/Report/Updatedat/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Report/Updatedat/Collection.php
similarity index 71%
rename from app/code/Magento/Tax/Model/Resource/Report/Updatedat/Collection.php
rename to app/code/Magento/Tax/Model/ResourceModel/Report/Updatedat/Collection.php
index e43dc83c86459842ee30f1d779b540ea4d07581b..e3de6471a5b0cfd830147e63141b4407224cb9a7 100644
--- a/app/code/Magento/Tax/Model/Resource/Report/Updatedat/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Report/Updatedat/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Tax\Model\Resource\Report\Updatedat;
+namespace Magento\Tax\Model\ResourceModel\Report\Updatedat;
 
-class Collection extends \Magento\Tax\Model\Resource\Report\Collection
+class Collection extends \Magento\Tax\Model\ResourceModel\Report\Collection
 {
     /**
      * Aggregated Data Table
diff --git a/app/code/Magento/Tax/Model/Resource/Sales/Order/Tax.php b/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax.php
similarity index 75%
rename from app/code/Magento/Tax/Model/Resource/Sales/Order/Tax.php
rename to app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax.php
index d5c3f05ee370fdc0e0e9c1f17f76af2973882467..82130cbb126cf67cb56bc144a63bf7bf255ef119 100644
--- a/app/code/Magento/Tax/Model/Resource/Sales/Order/Tax.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tax\Model\Resource\Sales\Order;
+namespace Magento\Tax\Model\ResourceModel\Sales\Order;
 
 /**
  * Sales order tax resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Tax extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Tax extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/Resource/Sales/Order/Tax/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax/Collection.php
similarity index 72%
rename from app/code/Magento/Tax/Model/Resource/Sales/Order/Tax/Collection.php
rename to app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax/Collection.php
index 8157a35a07e48b429a6884ad95e1775b4560c047..72dc76bd6e820f433c58ef1ed204e95a0b5fb501 100644
--- a/app/code/Magento/Tax/Model/Resource/Sales/Order/Tax/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/Sales/Order/Tax/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tax\Model\Resource\Sales\Order\Tax;
+namespace Magento\Tax\Model\ResourceModel\Sales\Order\Tax;
 
 /**
  * Order Tax Collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
@@ -19,14 +19,14 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Tax\Model\Sales\Order\Tax', 'Magento\Tax\Model\Resource\Sales\Order\Tax');
+        $this->_init('Magento\Tax\Model\Sales\Order\Tax', 'Magento\Tax\Model\ResourceModel\Sales\Order\Tax');
     }
 
     /**
      * Retrieve order tax collection by order identifier
      *
      * @param \Magento\Framework\DataObject $order
-     * @return \Magento\Tax\Model\Resource\Sales\Order\Tax\Collection
+     * @return \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\Collection
      */
     public function loadByOrder($order)
     {
diff --git a/app/code/Magento/Tax/Model/Resource/TaxClass.php b/app/code/Magento/Tax/Model/ResourceModel/TaxClass.php
similarity index 85%
rename from app/code/Magento/Tax/Model/Resource/TaxClass.php
rename to app/code/Magento/Tax/Model/ResourceModel/TaxClass.php
index 4550d4f72c4c5cde4e68e43c0ed3e549a13ea5cc..cfed10f0917328053554f54a27bfc7a709d6247a 100644
--- a/app/code/Magento/Tax/Model/Resource/TaxClass.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/TaxClass.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tax\Model\Resource;
+namespace Magento\Tax\Model\ResourceModel;
 
 /**
  * Tax class resource
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class TaxClass extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class TaxClass extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Tax/Model/Resource/TaxClass/Collection.php b/app/code/Magento/Tax/Model/ResourceModel/TaxClass/Collection.php
similarity index 84%
rename from app/code/Magento/Tax/Model/Resource/TaxClass/Collection.php
rename to app/code/Magento/Tax/Model/ResourceModel/TaxClass/Collection.php
index 9df30a727ba1762f7bc02a058c4cefbf1a571bd9..82e6b03f634868feb6b9bc26519646c932661a02 100644
--- a/app/code/Magento/Tax/Model/Resource/TaxClass/Collection.php
+++ b/app/code/Magento/Tax/Model/ResourceModel/TaxClass/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Tax\Model\Resource\TaxClass;
+namespace Magento\Tax\Model\ResourceModel\TaxClass;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Resource initialization
@@ -20,7 +20,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     public function _construct()
     {
-        $this->_init('Magento\Tax\Model\ClassModel', 'Magento\Tax\Model\Resource\TaxClass');
+        $this->_init('Magento\Tax\Model\ClassModel', 'Magento\Tax\Model\ResourceModel\TaxClass');
     }
 
     /**
diff --git a/app/code/Magento/Tax/Model/Sales/Order/Tax.php b/app/code/Magento/Tax/Model/Sales/Order/Tax.php
index e66460936a4b9763475c508d93788b167b4530c7..84b162bfd0fabd3e4b6333359d4e98ab90062d66 100644
--- a/app/code/Magento/Tax/Model/Sales/Order/Tax.php
+++ b/app/code/Magento/Tax/Model/Sales/Order/Tax.php
@@ -6,8 +6,8 @@
 namespace Magento\Tax\Model\Sales\Order;
 
 /**
- * @method \Magento\Tax\Model\Resource\Sales\Order\Tax _getResource()
- * @method \Magento\Tax\Model\Resource\Sales\Order\Tax getResource()
+ * @method \Magento\Tax\Model\ResourceModel\Sales\Order\Tax _getResource()
+ * @method \Magento\Tax\Model\ResourceModel\Sales\Order\Tax getResource()
  * @method int getOrderId()
  * @method \Magento\Tax\Model\Sales\Order\Tax setOrderId(int $value)
  * @method int getPriority()
@@ -38,7 +38,7 @@ class Tax extends \Magento\Framework\Model\AbstractExtensibleModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Tax\Model\Resource\Sales\Order\Tax');
+        $this->_init('Magento\Tax\Model\ResourceModel\Sales\Order\Tax');
     }
 
     /**
diff --git a/app/code/Magento/Tax/Model/Sales/Order/TaxManagement.php b/app/code/Magento/Tax/Model/Sales/Order/TaxManagement.php
index 8067b04543639fdd9d5a362c51abe8da5da82266..b49e43108e40bd270bb01b4e9b508d0e7406a7d3 100644
--- a/app/code/Magento/Tax/Model/Sales/Order/TaxManagement.php
+++ b/app/code/Magento/Tax/Model/Sales/Order/TaxManagement.php
@@ -16,7 +16,7 @@ use Magento\Sales\Model\Order\Tax\Item;
 class TaxManagement implements \Magento\Tax\Api\OrderTaxManagementInterface
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Tax\ItemFactory
+     * @var \Magento\Sales\Model\ResourceModel\Order\Tax\ItemFactory
      */
     protected $orderItemTaxFactory;
 
@@ -42,14 +42,14 @@ class TaxManagement implements \Magento\Tax\Api\OrderTaxManagementInterface
 
     /**
      * @param \Magento\Sales\Model\OrderFactory $orderFactory
-     * @param \Magento\Sales\Model\Resource\Order\Tax\ItemFactory $orderItemTaxFactory
+     * @param \Magento\Sales\Model\ResourceModel\Order\Tax\ItemFactory $orderItemTaxFactory
      * @param \Magento\Tax\Api\Data\OrderTaxDetailsInterfaceFactory $orderTaxDetailsDataObjectFactory
      * @param \Magento\Tax\Api\Data\OrderTaxDetailsItemInterfaceFactory $itemDataObjectFactory
      * @param TaxDetailsDataObjectFactory $appliedTaxDataObjectFactory
      */
     public function __construct(
         \Magento\Sales\Model\OrderFactory $orderFactory,
-        \Magento\Sales\Model\Resource\Order\Tax\ItemFactory $orderItemTaxFactory,
+        \Magento\Sales\Model\ResourceModel\Order\Tax\ItemFactory $orderItemTaxFactory,
         \Magento\Tax\Api\Data\OrderTaxDetailsInterfaceFactory $orderTaxDetailsDataObjectFactory,
         \Magento\Tax\Api\Data\OrderTaxDetailsItemInterfaceFactory $itemDataObjectFactory,
         TaxDetailsDataObjectFactory $appliedTaxDataObjectFactory
diff --git a/app/code/Magento/Tax/Model/Sales/Pdf/Grandtotal.php b/app/code/Magento/Tax/Model/Sales/Pdf/Grandtotal.php
index 3431b0974ec7da91dd7a82f6fbd43a1ae7be987d..db157b573f84d5111097ec7961b70caa3a3d2597 100644
--- a/app/code/Magento/Tax/Model/Sales/Pdf/Grandtotal.php
+++ b/app/code/Magento/Tax/Model/Sales/Pdf/Grandtotal.php
@@ -15,14 +15,14 @@ class Grandtotal extends \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal
     /**
      * @param \Magento\Tax\Helper\Data $taxHelper
      * @param \Magento\Tax\Model\Calculation $taxCalculation
-     * @param \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory
+     * @param \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory $ordersFactory
      * @param \Magento\Tax\Model\Config $taxConfig
      * @param array $data
      */
     public function __construct(
         \Magento\Tax\Helper\Data $taxHelper,
         \Magento\Tax\Model\Calculation $taxCalculation,
-        \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory,
+        \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory $ordersFactory,
         \Magento\Tax\Model\Config $taxConfig,
         array $data = []
     ) {
diff --git a/app/code/Magento/Tax/Model/Sales/Pdf/Shipping.php b/app/code/Magento/Tax/Model/Sales/Pdf/Shipping.php
index 5530b195c57685b51367b548dc1e23644282dc9a..7f965b50f56bb77c3153034b79bb44dcde4d2492 100644
--- a/app/code/Magento/Tax/Model/Sales/Pdf/Shipping.php
+++ b/app/code/Magento/Tax/Model/Sales/Pdf/Shipping.php
@@ -15,14 +15,14 @@ class Shipping extends \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal
     /**
      * @param \Magento\Tax\Helper\Data $taxHelper
      * @param \Magento\Tax\Model\Calculation $taxCalculation
-     * @param \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory
+     * @param \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory $ordersFactory
      * @param \Magento\Tax\Model\Config $taxConfig
      * @param array $data
      */
     public function __construct(
         \Magento\Tax\Helper\Data $taxHelper,
         \Magento\Tax\Model\Calculation $taxCalculation,
-        \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory,
+        \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory $ordersFactory,
         \Magento\Tax\Model\Config $taxConfig,
         array $data = []
     ) {
diff --git a/app/code/Magento/Tax/Model/Sales/Pdf/Tax.php b/app/code/Magento/Tax/Model/Sales/Pdf/Tax.php
index 3cb862871a83c2a759147dd3d1c837b04733f096..9c55690e3f5c7bfac3538db71982d2ce4fa908bc 100644
--- a/app/code/Magento/Tax/Model/Sales/Pdf/Tax.php
+++ b/app/code/Magento/Tax/Model/Sales/Pdf/Tax.php
@@ -15,14 +15,14 @@ class Tax extends \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal
     /**
      * @param \Magento\Tax\Helper\Data $taxHelper
      * @param \Magento\Tax\Model\Calculation $taxCalculation
-     * @param \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory
+     * @param \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory $ordersFactory
      * @param \Magento\Tax\Model\Config $taxConfig
      * @param array $data
      */
     public function __construct(
         \Magento\Tax\Helper\Data $taxHelper,
         \Magento\Tax\Model\Calculation $taxCalculation,
-        \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory,
+        \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory $ordersFactory,
         \Magento\Tax\Model\Config $taxConfig,
         array $data = []
     ) {
diff --git a/app/code/Magento/Tax/Model/System/Config/Source/Tax/Region.php b/app/code/Magento/Tax/Model/System/Config/Source/Tax/Region.php
index a85a8e5e342a729ea7c2b0fa2c68341b4120011d..f0500e502b2b521b569dab21c93b7417a5f61c18 100644
--- a/app/code/Magento/Tax/Model/System/Config/Source/Tax/Region.php
+++ b/app/code/Magento/Tax/Model/System/Config/Source/Tax/Region.php
@@ -8,14 +8,14 @@ namespace Magento\Tax\Model\System\Config\Source\Tax;
 class Region implements \Magento\Framework\Option\ArrayInterface
 {
     /**
-     * @var \Magento\Directory\Model\Resource\Region\CollectionFactory
+     * @var \Magento\Directory\Model\ResourceModel\Region\CollectionFactory
      */
     protected $_regionsFactory;
 
     /**
-     * @param \Magento\Directory\Model\Resource\Region\CollectionFactory $regionsFactory
+     * @param \Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionsFactory
      */
-    public function __construct(\Magento\Directory\Model\Resource\Region\CollectionFactory $regionsFactory)
+    public function __construct(\Magento\Directory\Model\ResourceModel\Region\CollectionFactory $regionsFactory)
     {
         $this->_regionsFactory = $regionsFactory;
     }
@@ -29,7 +29,7 @@ class Region implements \Magento\Framework\Option\ArrayInterface
      */
     public function toOptionArray($noEmpty = false, $country = null)
     {
-        /** @var $region \Magento\Directory\Model\Resource\Region\Collection */
+        /** @var $region \Magento\Directory\Model\ResourceModel\Region\Collection */
         $regionCollection = $this->_regionsFactory->create();
         $options = $regionCollection->addCountryFilter($country)->toOptionArray();
 
diff --git a/app/code/Magento/Tax/Model/TaxClass/AbstractType.php b/app/code/Magento/Tax/Model/TaxClass/AbstractType.php
index d5f0191c65463727b17000bad0a0d00e54c67e2a..351c1452be338b1670f76a20581a6ef7565807d1 100644
--- a/app/code/Magento/Tax/Model/TaxClass/AbstractType.php
+++ b/app/code/Magento/Tax/Model/TaxClass/AbstractType.php
@@ -36,7 +36,7 @@ abstract class AbstractType extends \Magento\Framework\DataObject implements Typ
     /**
      * Get Collection of Tax Rules that are assigned to this tax class
      *
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getAssignedToRules()
     {
diff --git a/app/code/Magento/Tax/Model/TaxClass/Repository.php b/app/code/Magento/Tax/Model/TaxClass/Repository.php
index db2e8812f0ffd9d2a3496774587577c0dbb9a17b..7a47706037a19d82eeddad0f041cf90996b875ed 100644
--- a/app/code/Magento/Tax/Model/TaxClass/Repository.php
+++ b/app/code/Magento/Tax/Model/TaxClass/Repository.php
@@ -17,8 +17,8 @@ use Magento\Framework\Exception\LocalizedException as ModelException;
 use Magento\Tax\Api\TaxClassManagementInterface;
 use Magento\Tax\Model\ClassModel;
 use Magento\Tax\Model\ClassModelRegistry;
-use Magento\Tax\Model\Resource\TaxClass\Collection as TaxClassCollection;
-use Magento\Tax\Model\Resource\TaxClass\CollectionFactory as TaxClassCollectionFactory;
+use Magento\Tax\Model\ResourceModel\TaxClass\Collection as TaxClassCollection;
+use Magento\Tax\Model\ResourceModel\TaxClass\CollectionFactory as TaxClassCollectionFactory;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -57,7 +57,7 @@ class Repository implements \Magento\Tax\Api\TaxClassRepositoryInterface
     protected $filterBuilder;
 
     /**
-     * @var \Magento\Tax\Model\Resource\TaxClass
+     * @var \Magento\Tax\Model\ResourceModel\TaxClass
      */
     protected $taxClassResource;
 
@@ -72,7 +72,7 @@ class Repository implements \Magento\Tax\Api\TaxClassRepositoryInterface
      * @param TaxClassCollectionFactory $taxClassCollectionFactory
      * @param \Magento\Tax\Api\Data\TaxClassSearchResultsInterfaceFactory $searchResultsFactory
      * @param ClassModelRegistry $classModelRegistry
-     * @param \Magento\Tax\Model\Resource\TaxClass $taxClassResource
+     * @param \Magento\Tax\Model\ResourceModel\TaxClass $taxClassResource
      * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor
      */
     public function __construct(
@@ -81,7 +81,7 @@ class Repository implements \Magento\Tax\Api\TaxClassRepositoryInterface
         TaxClassCollectionFactory $taxClassCollectionFactory,
         \Magento\Tax\Api\Data\TaxClassSearchResultsInterfaceFactory $searchResultsFactory,
         ClassModelRegistry $classModelRegistry,
-        \Magento\Tax\Model\Resource\TaxClass $taxClassResource,
+        \Magento\Tax\Model\ResourceModel\TaxClass $taxClassResource,
         \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor
     ) {
         $this->searchCriteriaBuilder = $searchCriteriaBuilder;
diff --git a/app/code/Magento/Tax/Model/TaxClass/Source/Product.php b/app/code/Magento/Tax/Model/TaxClass/Source/Product.php
index c2f167bf0ee22c5f6afbb0d295b9e231dec75ab3..577d2f6368e21eef57f834b235c17c6eafacc6cd 100644
--- a/app/code/Magento/Tax/Model/TaxClass/Source/Product.php
+++ b/app/code/Magento/Tax/Model/TaxClass/Source/Product.php
@@ -31,22 +31,22 @@ class Product extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource
     protected $_filterBuilder;
 
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory
      */
     protected $_optionFactory;
 
     /**
      * Initialize dependencies.
      *
-     * @param \Magento\Tax\Model\Resource\TaxClass\CollectionFactory $classesFactory
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $optionFactory
+     * @param \Magento\Tax\Model\ResourceModel\TaxClass\CollectionFactory $classesFactory
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $optionFactory
      * @param \Magento\Tax\Api\TaxClassRepositoryInterface $taxClassRepository
      * @param \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
      * @param \Magento\Framework\Api\FilterBuilder $filterBuilder
      */
     public function __construct(
-        \Magento\Tax\Model\Resource\TaxClass\CollectionFactory $classesFactory,
-        \Magento\Eav\Model\Resource\Entity\Attribute\OptionFactory $optionFactory,
+        \Magento\Tax\Model\ResourceModel\TaxClass\CollectionFactory $classesFactory,
+        \Magento\Eav\Model\ResourceModel\Entity\Attribute\OptionFactory $optionFactory,
         \Magento\Tax\Api\TaxClassRepositoryInterface $taxClassRepository,
         \Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder,
         \Magento\Framework\Api\FilterBuilder $filterBuilder
@@ -138,7 +138,7 @@ class Product extends \Magento\Eav\Model\Entity\Attribute\Source\AbstractSource
      */
     public function getFlatUpdateSelect($store)
     {
-        /** @var $option \Magento\Eav\Model\Resource\Entity\Attribute\Option */
+        /** @var $option \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option */
         $option = $this->_optionFactory->create();
         return $option->getFlatUpdateSelect($this->getAttribute(), $store, false);
     }
diff --git a/app/code/Magento/Tax/Model/TaxClass/Type/TypeInterface.php b/app/code/Magento/Tax/Model/TaxClass/Type/TypeInterface.php
index 16449724c0acea14e78d4c8c8c954a6420e56ce9..61f55331d5f740602b62632dd9e9c7d5f1662b92 100644
--- a/app/code/Magento/Tax/Model/TaxClass/Type/TypeInterface.php
+++ b/app/code/Magento/Tax/Model/TaxClass/Type/TypeInterface.php
@@ -21,7 +21,7 @@ interface TypeInterface
     /**
      * Get Collection of Tax Rules that are assigned to this tax class
      *
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getAssignedToRules();
 
diff --git a/app/code/Magento/Tax/Model/TaxConfigProvider.php b/app/code/Magento/Tax/Model/TaxConfigProvider.php
index 8ce354850537f39125869c4f4baf5b01161c19ee..2bedc4e66fdacbc4ca499e5a848024ecf662eaa5 100644
--- a/app/code/Magento/Tax/Model/TaxConfigProvider.php
+++ b/app/code/Magento/Tax/Model/TaxConfigProvider.php
@@ -7,6 +7,8 @@ namespace Magento\Tax\Model;
 
 use Magento\Checkout\Model\ConfigProviderInterface;
 use Magento\Tax\Helper\Data as TaxHelper;
+use Magento\Framework\App\Config\ScopeConfigInterface;
+use Magento\Checkout\Model\Session as CheckoutSession;
 
 class TaxConfigProvider implements ConfigProviderInterface
 {
@@ -20,14 +22,32 @@ class TaxConfigProvider implements ConfigProviderInterface
      */
     protected $taxConfig;
 
+    /**
+     * @var ScopeConfigInterface
+     */
+    protected $scopeConfig;
+
+    /**
+     * @var CheckoutSession
+     */
+    protected $checkoutSession;
+
     /**
      * @param TaxHelper $taxHelper
      * @param Config $taxConfig
+     * @param CheckoutSession $checkoutSession
+     * @param ScopeConfigInterface $scopeConfig
      */
-    public function __construct(TaxHelper $taxHelper, Config $taxConfig)
-    {
+    public function __construct(
+        TaxHelper $taxHelper,
+        Config $taxConfig,
+        CheckoutSession $checkoutSession,
+        ScopeConfigInterface $scopeConfig
+    ) {
         $this->taxHelper = $taxHelper;
         $this->taxConfig = $taxConfig;
+        $this->checkoutSession = $checkoutSession;
+        $this->scopeConfig = $scopeConfig;
     }
 
     /**
@@ -44,6 +64,7 @@ class TaxConfigProvider implements ConfigProviderInterface
             'includeTaxInGrandTotal' => $this->isTaxDisplayedInGrandTotal(),
             'isFullTaxSummaryDisplayed' => $this->isFullTaxSummaryDisplayed(),
             'isZeroTaxDisplayed' => $this->taxConfig->displayCartZeroTax(),
+            'reloadOnBillingAddress' => $this->reloadOnBillingAddress(),
         ];
     }
 
@@ -134,4 +155,16 @@ class TaxConfigProvider implements ConfigProviderInterface
     {
         return $this->taxConfig->displayCartTaxWithGrandTotal();
     }
+
+    /**
+     * Reload totals(taxes) on billing address update
+     *
+     * @return bool
+     */
+    protected function reloadOnBillingAddress()
+    {
+        $quote = $this->checkoutSession->getQuote();
+        return 'billing' == $this->scopeConfig->getValue(Config::CONFIG_XML_PATH_BASED_ON)
+            || $quote->isVirtual();
+    }
 }
diff --git a/app/code/Magento/Tax/Model/TaxRuleRepository.php b/app/code/Magento/Tax/Model/TaxRuleRepository.php
index fed8cdb44ec6c9f134c1d20252096bc16c16e50f..e0138921474dd29c7bcc6d9e4c37bd3ff53bf0d8 100644
--- a/app/code/Magento/Tax/Model/TaxRuleRepository.php
+++ b/app/code/Magento/Tax/Model/TaxRuleRepository.php
@@ -17,9 +17,9 @@ use Magento\Tax\Api\TaxRuleRepositoryInterface;
 use Magento\Tax\Api\Data\TaxRuleSearchResultsInterfaceFactory;
 use Magento\Tax\Model\Calculation\RuleFactory;
 use Magento\Tax\Model\Calculation\TaxRuleRegistry;
-use Magento\Tax\Model\Resource\Calculation\Rule as Resource;
-use Magento\Tax\Model\Resource\Calculation\Rule\Collection;
-use Magento\Tax\Model\Resource\Calculation\Rule\CollectionFactory;
+use Magento\Tax\Model\ResourceModel\Calculation\Rule as ResourceRule;
+use Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection;
+use Magento\Tax\Model\ResourceModel\Calculation\Rule\CollectionFactory;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -47,7 +47,7 @@ class TaxRuleRepository implements TaxRuleRepositoryInterface
     protected $collectionFactory;
 
     /**
-     * @var Resource
+     * @var ResourceRule
      */
     protected $resource;
 
@@ -61,7 +61,7 @@ class TaxRuleRepository implements TaxRuleRepositoryInterface
      * @param TaxRuleSearchResultsInterfaceFactory $searchResultsFactory
      * @param RuleFactory $ruleFactory
      * @param CollectionFactory $collectionFactory
-     * @param Resource $resource
+     * @param ResourceRule $resource
      * @param \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor
      */
     public function __construct(
@@ -69,7 +69,7 @@ class TaxRuleRepository implements TaxRuleRepositoryInterface
         TaxRuleSearchResultsInterfaceFactory $searchResultsFactory,
         RuleFactory $ruleFactory,
         CollectionFactory $collectionFactory,
-        Resource $resource,
+        ResourceRule $resource,
         \Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface $joinProcessor
     ) {
         $this->taxRuleRegistry = $taxRuleRegistry;
diff --git a/app/code/Magento/Tax/Observer/AfterAddressSave.php b/app/code/Magento/Tax/Observer/AfterAddressSaveObserver.php
similarity index 97%
rename from app/code/Magento/Tax/Observer/AfterAddressSave.php
rename to app/code/Magento/Tax/Observer/AfterAddressSaveObserver.php
index 330b569499c22129850979407e7ad51aceab7129..3b8e57cdfea1d77ee6d24d7fc203c9534f89f5e2 100644
--- a/app/code/Magento/Tax/Observer/AfterAddressSave.php
+++ b/app/code/Magento/Tax/Observer/AfterAddressSaveObserver.php
@@ -12,7 +12,7 @@ use Magento\Framework\Module\Manager;
 use Magento\PageCache\Model\Config;
 use Magento\Tax\Helper\Data;
 
-class AfterAddressSave implements ObserverInterface
+class AfterAddressSaveObserver implements ObserverInterface
 {
     /**
      * @var Session
diff --git a/app/code/Magento/Tax/Observer/CustomerLoggedIn.php b/app/code/Magento/Tax/Observer/CustomerLoggedInObserver.php
similarity index 98%
rename from app/code/Magento/Tax/Observer/CustomerLoggedIn.php
rename to app/code/Magento/Tax/Observer/CustomerLoggedInObserver.php
index d41a8978667d4dfc8c84f10e1ba4fddd0215ffda..7bd1decb570047f6046af1dc62ea96d10e8c9b90 100644
--- a/app/code/Magento/Tax/Observer/CustomerLoggedIn.php
+++ b/app/code/Magento/Tax/Observer/CustomerLoggedInObserver.php
@@ -13,7 +13,7 @@ use Magento\Framework\Module\Manager;
 use Magento\PageCache\Model\Config;
 use Magento\Tax\Helper\Data;
 
-class CustomerLoggedIn implements ObserverInterface
+class CustomerLoggedInObserver implements ObserverInterface
 {
     /**
      * @var Session
diff --git a/app/code/Magento/Tax/Observer/UpdateProductOptions.php b/app/code/Magento/Tax/Observer/UpdateProductOptionsObserver.php
similarity index 97%
rename from app/code/Magento/Tax/Observer/UpdateProductOptions.php
rename to app/code/Magento/Tax/Observer/UpdateProductOptionsObserver.php
index e366d10006b6577a3f55012e16b8a3f8690e48ab..c01d6b34d7d973613ca85bef86c9bf79920957b4 100644
--- a/app/code/Magento/Tax/Observer/UpdateProductOptions.php
+++ b/app/code/Magento/Tax/Observer/UpdateProductOptionsObserver.php
@@ -8,7 +8,7 @@ namespace Magento\Tax\Observer;
 
 use Magento\Framework\Event\ObserverInterface;
 
-class UpdateProductOptions implements ObserverInterface
+class UpdateProductOptionsObserver implements ObserverInterface
 {
     /**
      * Tax data
diff --git a/app/code/Magento/Tax/Pricing/Adjustment.php b/app/code/Magento/Tax/Pricing/Adjustment.php
index 8efbe6ef2c5a620ad1e705b774f40aa5e6150b9c..d8a30fefbea4cd7ff8295437ccfd6c47dab30e7f 100644
--- a/app/code/Magento/Tax/Pricing/Adjustment.php
+++ b/app/code/Magento/Tax/Pricing/Adjustment.php
@@ -7,7 +7,7 @@
 namespace Magento\Tax\Pricing;
 
 use Magento\Framework\Pricing\Adjustment\AdjustmentInterface;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Tax\Helper\Data as TaxHelper;
 
 /**
diff --git a/app/code/Magento/Tax/Setup/InstallData.php b/app/code/Magento/Tax/Setup/InstallData.php
index 2395d0aa12139f1232c7e61a71c2a7345952c3c7..75f636abb3ee2fd40e7294499bc6543d6c1d25b8 100644
--- a/app/code/Magento/Tax/Setup/InstallData.php
+++ b/app/code/Magento/Tax/Setup/InstallData.php
@@ -56,7 +56,7 @@ class InstallData implements InstallDataInterface
                 'input' => 'select',
                 'class' => '',
                 'source' => 'Magento\Tax\Model\TaxClass\Source\Product',
-                'global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+                'global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
                 'visible' => true,
                 'required' => false,
                 'user_defined' => false,
diff --git a/app/code/Magento/Tax/Test/Unit/Controller/Adminhtml/Tax/IgnoreTaxNotificationTest.php b/app/code/Magento/Tax/Test/Unit/Controller/Adminhtml/Tax/IgnoreTaxNotificationTest.php
index 8714905efc56bc118efd516eb8346ec1e2045ad6..cb3b6df297260c27929ae31110a84d69ade6c41b 100644
--- a/app/code/Magento/Tax/Test/Unit/Controller/Adminhtml/Tax/IgnoreTaxNotificationTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Controller/Adminhtml/Tax/IgnoreTaxNotificationTest.php
@@ -46,7 +46,7 @@ class IgnoreTaxNotificationTest extends \PHPUnit_Framework_TestCase
             ->with(\Magento\Framework\Controller\ResultFactory::TYPE_REDIRECT)
             ->willReturn($resultRedirect);
 
-        $config = $this->getMockBuilder('\Magento\Config\Model\Resource\Config')
+        $config = $this->getMockBuilder('\Magento\Config\Model\ResourceModel\Config')
             ->disableOriginalConstructor()
             ->setMethods(['saveConfig'])
             ->getMock();
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateRepositoryTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateRepositoryTest.php
index 0a3c7d8f35ec427290b8df206d38caa221124ace..fe59d7f4a9006d0fe829d953df7b3f83a6f0642b 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateRepositoryTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateRepositoryTest.php
@@ -116,7 +116,7 @@ class RateRepositoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->rateResourceMock = $this->getMock(
-            'Magento\Tax\Model\Resource\Calculation\Rate',
+            'Magento\Tax\Model\ResourceModel\Calculation\Rate',
             [],
             [],
             '',
@@ -251,7 +251,7 @@ class RateRepositoryTest extends \PHPUnit_Framework_TestCase
         $objectManager = new ObjectManager($this);
         $items = [$rateMock];
         $collectionMock = $objectManager->getCollectionMock(
-            'Magento\Tax\Model\Resource\Calculation\Rate\Collection',
+            'Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection',
             $items
         );
         $collectionMock->expects($this->once())->method('joinRegionTable');
@@ -378,7 +378,7 @@ class RateRepositoryTest extends \PHPUnit_Framework_TestCase
         $rateMock = $this->getTaxRateMock([]);
         $items = [$rateMock];
         $collectionMock = $objectManager->getCollectionMock(
-            'Magento\Tax\Model\Resource\Calculation\Rate\Collection',
+            'Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection',
             $items
         );
         $collectionMock
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php
index 69eb3a51189fad67a956b555d955fd5a6b3403a1..e6ff4cbd6f6ca69fa11ce38000bdd6d99fdb145e 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Calculation/RateTest.php
@@ -24,7 +24,7 @@ class RateTest extends \PHPUnit_Framework_TestCase
     {
         $this->objectHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\Model\Resource\AbstractResource',
+            'Magento\Framework\Model\ResourceModel\AbstractResource',
             ['_construct', 'getConnection', 'getIdFieldName', 'beginTransaction',
                 'rollBack'],
             [],
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Config/TaxClassTest.php b/app/code/Magento/Tax/Test/Unit/Model/Config/TaxClassTest.php
index 034c20678fbd5a7d629f58946b241a4214ddd73b..633c043772069824f2379790ceb36646dd13206f 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Config/TaxClassTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Config/TaxClassTest.php
@@ -37,7 +37,7 @@ class TaxClassTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->will($this->returnValue($attributeMock));
 
-        $resourceMock = $this->getMockBuilder('\Magento\Framework\Model\Resource\Db\AbstractDb')
+        $resourceMock = $this->getMockBuilder('\Magento\Framework\Model\ResourceModel\Db\AbstractDb')
             ->disableOriginalConstructor()
             ->setMethods(['beginTransaction', '_construct', 'getIdFieldName', 'addCommitCallback', 'commit',
                           'save', '__wakeup', ])
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Resource/CalculationTest.php b/app/code/Magento/Tax/Test/Unit/Model/ResourceModel/CalculationTest.php
similarity index 90%
rename from app/code/Magento/Tax/Test/Unit/Model/Resource/CalculationTest.php
rename to app/code/Magento/Tax/Test/Unit/Model/ResourceModel/CalculationTest.php
index 170cd9883adbfcbf2b197657c79b7c833b862d24..d65704a3d0203293d530647cee7efd198a2e1355 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Resource/CalculationTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/ResourceModel/CalculationTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tax\Test\Unit\Model\Resource;
+namespace Magento\Tax\Test\Unit\Model\ResourceModel;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
@@ -19,7 +19,7 @@ class CalculationTest extends \PHPUnit_Framework_TestCase
     public function testCreateSearchPostCodeTemplates($postalCode, $exactPostalcode)
     {
         // create the mocks
-        $resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $storeManager = $this->getMock('Magento\Store\Model\StoreManagerInterface', [], [], '', false);
 
         $taxData = $this->getMock('Magento\Tax\Helper\Data', ['getPostCodeSubStringLength'], [], '', false);
@@ -30,7 +30,7 @@ class CalculationTest extends \PHPUnit_Framework_TestCase
 
         $objectManager = new ObjectManager($this);
         $calcMock = $objectManager->getObject(
-            'Magento\Tax\Model\Resource\Calculation',
+            'Magento\Tax\Model\ResourceModel\Calculation',
             [
                 'resource' => $resource,
                 'taxData' => $taxData,
@@ -39,7 +39,10 @@ class CalculationTest extends \PHPUnit_Framework_TestCase
         );
 
         // get access to the method
-        $method = new \ReflectionMethod('Magento\Tax\Model\Resource\Calculation', '_createSearchPostCodeTemplates');
+        $method = new \ReflectionMethod(
+            'Magento\Tax\Model\ResourceModel\Calculation',
+            '_createSearchPostCodeTemplates'
+        );
         $method->setAccessible(true);
 
         // test & verify
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Sales/Order/TaxManagementTest.php b/app/code/Magento/Tax/Test/Unit/Model/Sales/Order/TaxManagementTest.php
index 2b98948a299df1f2bb1776ce8418c208bc118ef9..cd7198e336ddc22d5b3e9dd2bd2ce9a184f698f5 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Sales/Order/TaxManagementTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Sales/Order/TaxManagementTest.php
@@ -71,14 +71,14 @@ class TaxManagementTest extends \PHPUnit_Framework_TestCase
         $this->orderMock = $this->getMock('Magento\Sales\Model\Order', [], [], '', false);
         $this->orderFactoryMock = $this->getMock('Magento\Sales\Model\OrderFactory', ['create'], [], '', false);
         $this->taxItemResourceMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Tax\Item',
+            'Magento\Sales\Model\ResourceModel\Order\Tax\Item',
             [],
             [],
             '',
             false
         );
         $this->taxItemFactoryMock = $this->getMock(
-            'Magento\Sales\Model\Resource\Order\Tax\ItemFactory',
+            'Magento\Sales\Model\ResourceModel\Order\Tax\ItemFactory',
             ['create'],
             [],
             '',
diff --git a/app/code/Magento/Tax/Test/Unit/Model/Sales/Total/Quote/TaxTest.php b/app/code/Magento/Tax/Test/Unit/Model/Sales/Total/Quote/TaxTest.php
index e2259e548666c09ce0bb11582006254dbf2a6871..b5c223f0a6287acf8ad920a7b35cc6391a2a95e7 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/Sales/Total/Quote/TaxTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/Sales/Total/Quote/TaxTest.php
@@ -237,11 +237,11 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->expects($this->any())
             ->method('getStore')
             ->will($this->returnValue($store));
-        $address = $this->getMockBuilder('\Magento\Quote\Model\Quote\Address')
+        $address = $this->getMockBuilder('Magento\Quote\Model\Quote\Address')
             ->disableOriginalConstructor()
             ->setMethods(['getAssociatedTaxables',
                           'getQuote', 'getBillingAddress', 'getRegionId',
-                          '__wakeup', ])
+                          '__wakeup', 'getCustomAttributesCodes'])
             ->getMock();
         $item
             ->expects($this->any())
@@ -259,6 +259,10 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->expects($this->any())
             ->method('getRegionId')
             ->will($this->returnValue($region));
+        $address
+            ->expects($this->any())
+            ->method('getCustomAttributesCodes')
+            ->willReturn([]);
         $quote
             ->expects($this->any())
             ->method('getBillingAddress')
@@ -515,10 +519,24 @@ class TaxTest extends \PHPUnit_Framework_TestCase
         $items = [$item];
         $quote = $this->getMock('Magento\Quote\Model\Quote', [], [], '', false);
 
-        $address = $this->getMockBuilder('\Magento\Quote\Model\Quote\Address')
+        $address = $this->getMockBuilder('Magento\Quote\Model\Quote\Address')
             ->disableOriginalConstructor()
-            ->setMethods(['getAssociatedTaxables', 'getQuote', 'getBillingAddress', 'getRegionId', '__wakeup'])
+            ->setMethods(
+                [
+                    'getAssociatedTaxables',
+                    'getQuote',
+                    'getBillingAddress',
+                    'getRegionId',
+                    'getCustomAttributesCodes',
+                    '__wakeup'
+                ]
+            )
             ->getMock();
+        $address
+            ->expects($this->any())
+            ->method('getCustomAttributesCodes')
+            ->willReturn([]);
+
         $quote
             ->expects($this->any())
             ->method('getBillingAddress')
@@ -600,10 +618,10 @@ class TaxTest extends \PHPUnit_Framework_TestCase
         $items = [];
 
         $address = $this->getMock(
-            '\Magento\Quote\Model\Quote\Address',
+            'Magento\Quote\Model\Quote\Address',
             [
                 'getQuote', 'getAllItems', 'getGrandTotal', '__wakeup',
-                'addTotal', 'getTaxAmount'
+                'addTotal', 'getTaxAmount', 'getCustomAttributesCodes'
             ],
             [],
             '',
@@ -630,6 +648,10 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->expects($this->any())
             ->method('getTaxAmount')
             ->will($this->returnValue(8));
+        $address
+            ->expects($this->any())
+            ->method('getCustomAttributesCodes')
+            ->willReturn([]);
 
         $addressData["cached_items_all"] = $items;
         foreach ($addressData as $key => $value) {
diff --git a/app/code/Magento/Tax/Test/Unit/Model/TaxClass/RepositoryTest.php b/app/code/Magento/Tax/Test/Unit/Model/TaxClass/RepositoryTest.php
index 1acb45c2c905ff0af913231431d82dc02e44dce4..2ad620119a744337dc2a920fb450b4a4e1043117 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/TaxClass/RepositoryTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/TaxClass/RepositoryTest.php
@@ -82,14 +82,14 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->taxClassCollectionFactory = $this->getMock(
-            '\Magento\Tax\Model\Resource\TaxClass\CollectionFactory',
+            '\Magento\Tax\Model\ResourceModel\TaxClass\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
 
-        $this->taxClassResourceMock = $this->getMock('\Magento\Tax\Model\Resource\TaxClass', [], [], '', false);
+        $this->taxClassResourceMock = $this->getMock('\Magento\Tax\Model\ResourceModel\TaxClass', [], [], '', false);
 
         $this->extensionAttributesJoinProcessorMock = $this->getMock(
             '\Magento\Framework\Api\ExtensionAttribute\JoinProcessor',
@@ -199,7 +199,7 @@ class RepositoryTest extends \PHPUnit_Framework_TestCase
         $searchCriteria = $this->getMock('\Magento\Framework\Api\SearchCriteriaInterface');
         $filterGroup = $this->getMock('\Magento\Framework\Api\Search\FilterGroup', [], [], '', false);
         $filter = $this->getMock('\Magento\Framework\Api\Filter', [], [], '', false);
-        $collection = $this->getMock('\Magento\Tax\Model\Resource\TaxClass\Collection', [], [], '', false);
+        $collection = $this->getMock('\Magento\Tax\Model\ResourceModel\TaxClass\Collection', [], [], '', false);
         $sortOrder = $this->getMock('\Magento\Framework\Api\SortOrder', [], [], '', false);
 
         $this->extensionAttributesJoinProcessorMock->expects($this->once())
diff --git a/app/code/Magento/Tax/Test/Unit/Model/TaxClass/Type/ProductTest.php b/app/code/Magento/Tax/Test/Unit/Model/TaxClass/Type/ProductTest.php
index 5278708145f37e1282b53084d7aedc46df8c9ed3..04a9a3b2a1e84ff19a71a89dc2335dc2d5d2f9ac 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/TaxClass/Type/ProductTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/TaxClass/Type/ProductTest.php
@@ -9,7 +9,8 @@ class ProductTest extends \PHPUnit_Framework_TestCase
 {
     public function testIsAssignedToObjects()
     {
-        $collectionMock = $this->getMockBuilder('Magento\Framework\Model\Resource\Db\Collection\AbstractCollection')
+        $collectionClassName = 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection';
+        $collectionMock = $this->getMockBuilder($collectionClassName)
             ->setMethods(['addAttributeToFilter', 'getSize'])->disableOriginalConstructor()->getMock();
         $collectionMock->expects($this->once())->method('addAttributeToFilter')
             ->with($this->equalTo('tax_class_id'), $this->equalTo(1))->will($this->returnSelf());
diff --git a/app/code/Magento/Tax/Test/Unit/Model/TaxConfigProviderTest.php b/app/code/Magento/Tax/Test/Unit/Model/TaxConfigProviderTest.php
index cad8010f39cf0056c67efb00f98d427cdbbc9d9a..934d2824b1b9b9866454a0c381d9f0e0d552d748 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/TaxConfigProviderTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/TaxConfigProviderTest.php
@@ -17,6 +17,21 @@ class TaxConfigProviderTest extends \PHPUnit_Framework_TestCase
      */
     protected $taxConfigMock;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $checkoutSessionMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $scopeConfigMock;
+
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $quoteMock;
+
     /**
      * @var \Magento\Tax\Model\TaxConfigProvider
      */
@@ -26,8 +41,22 @@ class TaxConfigProviderTest extends \PHPUnit_Framework_TestCase
     {
         $this->taxHelperMock = $this->getMock('Magento\Tax\Helper\Data', [], [], '', false);
         $this->taxConfigMock = $this->getMock('Magento\Tax\Model\Config', [], [], '', false);
-
-        $this->model = new \Magento\Tax\Model\TaxConfigProvider($this->taxHelperMock, $this->taxConfigMock);
+        $this->checkoutSessionMock = $this->getMock('Magento\Checkout\Model\Session', [], [], '', false);
+        $this->scopeConfigMock = $this->getMock(
+            'Magento\Framework\App\Config\ScopeConfigInterface',
+            [],
+            [],
+            '',
+            false
+        );
+        $this->quoteMock = $this->getMock('\Magento\Quote\Model\Quote', [], [], '', false);
+        $this->checkoutSessionMock->expects($this->any())->method('getQuote')->willReturn($this->quoteMock);
+        $this->model = new \Magento\Tax\Model\TaxConfigProvider(
+            $this->taxHelperMock,
+            $this->taxConfigMock,
+            $this->checkoutSessionMock,
+            $this->scopeConfigMock
+        );
     }
 
     /**
@@ -39,6 +68,8 @@ class TaxConfigProviderTest extends \PHPUnit_Framework_TestCase
      * @param int $cartPriceExclTax
      * @param int $cartSubTotalBoth
      * @param int $cartSubTotalExclTax
+     * @param string|null $calculationType
+     * @param bool $isQuoteVirtual
      */
     public function testGetConfig(
         $expectedResult,
@@ -47,7 +78,9 @@ class TaxConfigProviderTest extends \PHPUnit_Framework_TestCase
         $cartBothPrices,
         $cartPriceExclTax,
         $cartSubTotalBoth,
-        $cartSubTotalExclTax
+        $cartSubTotalExclTax,
+        $calculationType,
+        $isQuoteVirtual
     ) {
         $this->taxConfigMock->expects($this->any())->method('displayCartShippingBoth')
             ->will($this->returnValue($cartShippingBoth));
@@ -74,6 +107,11 @@ class TaxConfigProviderTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue(1));
         $this->taxConfigMock->expects(($this->any()))->method('displayCartZeroTax')
             ->will($this->returnValue(1));
+        $this->scopeConfigMock->expects($this->once())
+            ->method('getValue')
+            ->with(\Magento\Tax\Model\Config::CONFIG_XML_PATH_BASED_ON)
+            ->willReturn($calculationType);
+        $this->quoteMock->expects($this->any())->method('isVirtual')->willReturn($isQuoteVirtual);
         $this->assertEquals($expectedResult, $this->model->getConfig());
     }
 
@@ -93,14 +131,17 @@ class TaxConfigProviderTest extends \PHPUnit_Framework_TestCase
                     'reviewTotalsDisplayMode' => 'both',
                     'includeTaxInGrandTotal' => 1,
                     'isFullTaxSummaryDisplayed' => 1,
-                    'isZeroTaxDisplayed' => 1
+                    'isZeroTaxDisplayed' => 1,
+                    'reloadOnBillingAddress' => false,
                 ],
                 'cartShippingBoth' => 1,
                 'cartShippingExclTax' => 1,
                 'cartBothPrices' => 1,
                 'cartPriceExclTax' => 1,
                 'cartSubTotalBoth' => 1,
-                'cartSubTotalExclTax' => 1
+                'cartSubTotalExclTax' => 1,
+                'calculationType' => 'shipping',
+                'isQuoteVirtual' => false,
             ],
             [
                 'expectedResult' => [
@@ -111,14 +152,17 @@ class TaxConfigProviderTest extends \PHPUnit_Framework_TestCase
                     'reviewTotalsDisplayMode' => 'excluding',
                     'includeTaxInGrandTotal' => 1,
                     'isFullTaxSummaryDisplayed' => 1,
-                    'isZeroTaxDisplayed' => 1
+                    'isZeroTaxDisplayed' => 1,
+                    'reloadOnBillingAddress' => true,
                 ],
                 'cartShippingBoth' => 0,
                 'cartShippingExclTax' => 1,
                 'cartBothPrices' => 0,
                 'cartPriceExclTax' => 1,
                 'cartSubTotalBoth' => 0,
-                'cartSubTotalExclTax' => 1
+                'cartSubTotalExclTax' => 1,
+                'calculationType' => 'billing',
+                'isQuoteVirtual' => false,
             ],
             [
                 'expectedResult' => [
@@ -129,14 +173,17 @@ class TaxConfigProviderTest extends \PHPUnit_Framework_TestCase
                     'reviewTotalsDisplayMode' => 'including',
                     'includeTaxInGrandTotal' => 1,
                     'isFullTaxSummaryDisplayed' => 1,
-                    'isZeroTaxDisplayed' => 1
+                    'isZeroTaxDisplayed' => 1,
+                    'reloadOnBillingAddress' => true,
                 ],
                 'cartShippingBoth' => 0,
                 'cartShippingExclTax' => 0,
                 'cartBothPrices' => 0,
                 'cartPriceExclTax' => 0,
                 'cartSubTotalBoth' => 0,
-                'cartSubTotalExclTax' => 0
+                'cartSubTotalExclTax' => 0,
+                'calculationType' => 'shipping',
+                'isQuoteVirtual' => true,
             ],
             [
                 'expectedResult' => [
@@ -147,14 +194,17 @@ class TaxConfigProviderTest extends \PHPUnit_Framework_TestCase
                     'reviewTotalsDisplayMode' => 'including',
                     'includeTaxInGrandTotal' => 1,
                     'isFullTaxSummaryDisplayed' => 1,
-                    'isZeroTaxDisplayed' => 1
+                    'isZeroTaxDisplayed' => 1,
+                    'reloadOnBillingAddress' => true,
                 ],
                 'cartShippingBoth' => 0,
                 'cartShippingExclTax' => 0,
                 'cartBothPrices' => 0,
                 'cartPriceExclTax' => 0,
                 'cartSubTotalBoth' => 0,
-                'cartSubTotalExclTax' => 0
+                'cartSubTotalExclTax' => 0,
+                'calculationType' => 'billing',
+                'isQuoteVirtual' => true,
             ],
             [
                 'expectedResult' => [
@@ -165,14 +215,17 @@ class TaxConfigProviderTest extends \PHPUnit_Framework_TestCase
                     'reviewTotalsDisplayMode' => 'both',
                     'includeTaxInGrandTotal' => 1,
                     'isFullTaxSummaryDisplayed' => 1,
-                    'isZeroTaxDisplayed' => 1
+                    'isZeroTaxDisplayed' => 1,
+                    'reloadOnBillingAddress' => false,
                 ],
                 'cartShippingBoth' => 1,
                 'cartShippingExclTax' => 0,
                 'cartBothPrices' => 1,
                 'cartPriceExclTax' => 0,
                 'cartSubTotalBoth' => 1,
-                'cartSubTotalExclTax' => 0
+                'cartSubTotalExclTax' => 0,
+                'calculationType' => 'shipping',
+                'isQuoteVirtual' => false,
             ],
             [
                 'expectedResult' => [
@@ -183,14 +236,17 @@ class TaxConfigProviderTest extends \PHPUnit_Framework_TestCase
                     'reviewTotalsDisplayMode' => 'both',
                     'includeTaxInGrandTotal' => 1,
                     'isFullTaxSummaryDisplayed' => 1,
-                    'isZeroTaxDisplayed' => 1
+                    'isZeroTaxDisplayed' => 1,
+                    'reloadOnBillingAddress' => false,
                 ],
                 'cartShippingBoth' => 0,
                 'cartShippingExclTax' => 1,
                 'cartBothPrices' => 0,
                 'cartPriceExclTax' => 0,
                 'cartSubTotalBoth' => 1,
-                'cartSubTotalExclTax' => 0
+                'cartSubTotalExclTax' => 0,
+                'calculationType' => 'shipping',
+                'isQuoteVirtual' => false,
             ],
         ];
     }
diff --git a/app/code/Magento/Tax/Test/Unit/Model/TaxRuleRepositoryTest.php b/app/code/Magento/Tax/Test/Unit/Model/TaxRuleRepositoryTest.php
index 91d6309e8c599873b9f4b4a43765225dc68ff781..f96aa10fe171919405a213491a50388cb1df2876 100644
--- a/app/code/Magento/Tax/Test/Unit/Model/TaxRuleRepositoryTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Model/TaxRuleRepositoryTest.php
@@ -75,13 +75,13 @@ class TaxRuleRepositoryTest extends \PHPUnit_Framework_TestCase
         );
         $this->ruleFactory = $this->getMock('\Magento\Tax\Model\Calculation\RuleFactory', [], [], '', false);
         $this->collectionFactory = $this->getMock(
-            '\Magento\Tax\Model\Resource\Calculation\Rule\CollectionFactory',
+            '\Magento\Tax\Model\ResourceModel\Calculation\Rule\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
-        $this->resource = $this->getMock('\Magento\Tax\Model\Resource\Calculation\Rule', [], [], '', false);
+        $this->resource = $this->getMock('\Magento\Tax\Model\ResourceModel\Calculation\Rule', [], [], '', false);
         $this->extensionAttributesJoinProcessorMock = $this->getMock(
             '\Magento\Framework\Api\ExtensionAttribute\JoinProcessor',
             ['process'],
@@ -188,7 +188,8 @@ class TaxRuleRepositoryTest extends \PHPUnit_Framework_TestCase
         $pageSize = 4;
 
         $searchCriteriaMock = $this->getMock('\Magento\Framework\Api\SearchCriteria', [], [], '', false);
-        $collectionMock = $this->getMock('Magento\Tax\Model\Resource\Calculation\Rule\Collection', [], [], '', false);
+        $collectionMock =
+            $this->getMock('Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection', [], [], '', false);
         $filterGroupMock = $this->getMock('\Magento\Framework\Api\Search\FilterGroup', [], [], '', false);
         $filterMock = $this->getMock('\Magento\Framework\Api\Filter', [], [], '', false);
         $sortOrderMock = $this->getMock('\Magento\Framework\Api\SortOrder', [], [], '', false);
diff --git a/app/code/Magento/Tax/Test/Unit/Observer/AfterAddressSaveTest.php b/app/code/Magento/Tax/Test/Unit/Observer/AfterAddressSaveObserverTest.php
similarity index 95%
rename from app/code/Magento/Tax/Test/Unit/Observer/AfterAddressSaveTest.php
rename to app/code/Magento/Tax/Test/Unit/Observer/AfterAddressSaveObserverTest.php
index 60f0d86c356f7e4e06ddb7dc38eda7aae9f47241..b3eced9d517bf544df01a1bbe1e77c7aabb567e2 100644
--- a/app/code/Magento/Tax/Test/Unit/Observer/AfterAddressSaveTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Observer/AfterAddressSaveObserverTest.php
@@ -11,9 +11,8 @@ use Magento\Framework\Module\Manager;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use Magento\PageCache\Model\Config;
 use Magento\Tax\Helper\Data;
-use Magento\Tax\Observer\AfterAddressSave;
 
-class AfterAddressSaveTest extends \PHPUnit_Framework_TestCase
+class AfterAddressSaveObserverTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * @var Observer
@@ -82,7 +81,7 @@ class AfterAddressSaveTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->session = $this->objectManager->getObject(
-            'Magento\Tax\Observer\AfterAddressSave',
+            'Magento\Tax\Observer\AfterAddressSaveObserver',
             [
                 'customerSession' => $this->customerSessionMock,
                 'taxHelper' => $this->taxHelperMock,
diff --git a/app/code/Magento/Tax/Test/Unit/Observer/CustomerLoggedInTest.php b/app/code/Magento/Tax/Test/Unit/Observer/CustomerLoggedInObserverTest.php
similarity index 93%
rename from app/code/Magento/Tax/Test/Unit/Observer/CustomerLoggedInTest.php
rename to app/code/Magento/Tax/Test/Unit/Observer/CustomerLoggedInObserverTest.php
index 1678c340c6490d389377feb103805e34ef713fa3..f384cdbd343abfede2971c5540393fbbd1dc88ad 100644
--- a/app/code/Magento/Tax/Test/Unit/Observer/CustomerLoggedInTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Observer/CustomerLoggedInObserverTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Tax\Test\Unit\Observer;
 
-class CustomerLoggedInTest extends \PHPUnit_Framework_TestCase
+class CustomerLoggedInObserverTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * @var \Magento\Framework\Event\Observer
@@ -18,7 +18,7 @@ class CustomerLoggedInTest extends \PHPUnit_Framework_TestCase
     protected $customerSessionMock;
 
     /**
-     * @var \Magento\Customer\Model\Resource\GroupRepository
+     * @var \Magento\Customer\Model\ResourceModel\GroupRepository
      */
     protected $groupRepositoryMock;
 
@@ -42,7 +42,7 @@ class CustomerLoggedInTest extends \PHPUnit_Framework_TestCase
     protected $taxHelperMock;
 
     /**
-     * @var \Magento\Tax\Observer\CustomerLoggedIn
+     * @var \Magento\Tax\Observer\CustomerLoggedInObserver
      */
     protected $session;
 
@@ -57,7 +57,7 @@ class CustomerLoggedInTest extends \PHPUnit_Framework_TestCase
             ])
             ->getMock();
 
-        $this->groupRepositoryMock = $this->getMockBuilder('Magento\Customer\Model\Resource\GroupRepository')
+        $this->groupRepositoryMock = $this->getMockBuilder('Magento\Customer\Model\ResourceModel\GroupRepository')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -81,7 +81,7 @@ class CustomerLoggedInTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->session = $this->objectManager->getObject(
-            'Magento\Tax\Observer\CustomerLoggedIn',
+            'Magento\Tax\Observer\CustomerLoggedInObserver',
             [
                 'groupRepository' => $this->groupRepositoryMock,
                 'customerSession' => $this->customerSessionMock,
diff --git a/app/code/Magento/Tax/Test/Unit/Observer/UpdateProductOptionsTest.php b/app/code/Magento/Tax/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
similarity index 96%
rename from app/code/Magento/Tax/Test/Unit/Observer/UpdateProductOptionsTest.php
rename to app/code/Magento/Tax/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
index 387fc9fe6c16afb72eab0ef1953c1503672061c7..f93fb0ab057aa68cb955e47a34c462a2f451317e 100644
--- a/app/code/Magento/Tax/Test/Unit/Observer/UpdateProductOptionsTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Observer/UpdateProductOptionsObserverTest.php
@@ -8,7 +8,7 @@ namespace Magento\Tax\Test\Unit\Observer;
 
 use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
-class UpdateProductOptionsTest extends \PHPUnit_Framework_TestCase
+class UpdateProductOptionsObserverTest extends \PHPUnit_Framework_TestCase
 {
     /**
      * Tests the methods that rely on the ScopeConfigInterface object to provide their return values
@@ -66,7 +66,7 @@ class UpdateProductOptionsTest extends \PHPUnit_Framework_TestCase
 
          $objectManager = new ObjectManager($this);
          $taxObserverObject = $objectManager->getObject(
-             'Magento\Tax\Observer\UpdateProductOptions',
+             'Magento\Tax\Observer\UpdateProductOptionsObserver',
              [
                  'taxData' => $taxData,
                  'registry' => $registry,
diff --git a/app/code/Magento/Tax/Test/Unit/Pricing/AdjustmentTest.php b/app/code/Magento/Tax/Test/Unit/Pricing/AdjustmentTest.php
index cfd3ed06cc8dd6e42a9909ce6aa7b28824a71552..f3f26cb90ba6c01310300760a001babfa461b057 100644
--- a/app/code/Magento/Tax/Test/Unit/Pricing/AdjustmentTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Pricing/AdjustmentTest.php
@@ -8,7 +8,7 @@ namespace Magento\Tax\Test\Unit\Pricing;
 
 use \Magento\Tax\Pricing\Adjustment;
 
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 
 class AdjustmentTest extends \PHPUnit_Framework_TestCase
 {
@@ -100,7 +100,7 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase
      */
     public function testExtractAdjustment($isPriceIncludesTax, $amount, $price, $expectedResult)
     {
-        $object = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface');
+        $object = $this->getMockForAbstractClass('Magento\Framework\Pricing\SaleableInterface');
 
         $this->taxHelper->expects($this->any())
             ->method('priceIncludesTax')
@@ -132,7 +132,7 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase
      */
     public function testApplyAdjustment($amount, $price, $expectedResult)
     {
-        $object = $this->getMockBuilder('Magento\Framework\Pricing\Object\SaleableInterface')->getMock();
+        $object = $this->getMockBuilder('Magento\Framework\Pricing\SaleableInterface')->getMock();
 
         $this->catalogHelper->expects($this->any())
             ->method('getTaxPrice')
diff --git a/app/code/Magento/Tax/Test/Unit/Pricing/Render/AdjustmentTest.php b/app/code/Magento/Tax/Test/Unit/Pricing/Render/AdjustmentTest.php
index 197dc6759cc9d9620ab45319c63c23545d9f950a..694281579de581b8527ed09d373ab4c9c7f5f581 100644
--- a/app/code/Magento/Tax/Test/Unit/Pricing/Render/AdjustmentTest.php
+++ b/app/code/Magento/Tax/Test/Unit/Pricing/Render/AdjustmentTest.php
@@ -333,7 +333,7 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $product = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface');
+        $product = $this->getMockForAbstractClass('Magento\Framework\Pricing\SaleableInterface');
         $product->expects($this->once())
             ->method('getId');
 
diff --git a/app/code/Magento/Tax/composer.json b/app/code/Magento/Tax/composer.json
index 7645004662e006e63dd1382ec3b98d6e7068c900..72c9306f68cd2ca15381ba8c526b3d640f5fd4de 100644
--- a/app/code/Magento/Tax/composer.json
+++ b/app/code/Magento/Tax/composer.json
@@ -18,6 +18,9 @@
         "magento/module-quote": "1.0.0-beta",
         "magento/framework": "1.0.0-beta"
     },
+    "suggest": {
+        "magento/module-tax-sample-data": "Sample Data version:1.0.0-beta"
+    },
     "type": "magento2-module",
     "version": "1.0.0-beta",
     "license": [
diff --git a/app/code/Magento/Tax/etc/crontab.xml b/app/code/Magento/Tax/etc/crontab.xml
index e957b5e7ccbd53e5233371beaf35706afcd4042f..58a7dc30522fc917f2c0acb51c4f275f217b7f04 100644
--- a/app/code/Magento/Tax/etc/crontab.xml
+++ b/app/code/Magento/Tax/etc/crontab.xml
@@ -7,7 +7,8 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Cron:etc/crontab.xsd">
     <group id="default">
-        <job name="aggregate_sales_report_tax_data" instance="Magento\Tax\Observer\AggregateSalesReportTaxData" method="invoke">
+        <job name="aggregate_sales_report_tax_data" instance="Magento\Tax\Model\AggregateSalesReportTaxData"
+             method="invoke">
             <schedule>0 0 * * *</schedule>
         </job>
     </group>
diff --git a/app/code/Magento/Tax/etc/di.xml b/app/code/Magento/Tax/etc/di.xml
index a4e826128ef2d545b3039353ae84cb33e790ee4b..dd2854bbc29836c32e91219672ad0b6adcc73511 100644
--- a/app/code/Magento/Tax/etc/di.xml
+++ b/app/code/Magento/Tax/etc/di.xml
@@ -15,7 +15,7 @@
             <argument name="taxConfig" xsi:type="object">Magento\Tax\Model\Config\Proxy</argument>
         </arguments>
     </type>
-    <type name="Magento\Tax\Model\Resource\Calculation">
+    <type name="Magento\Tax\Model\ResourceModel\Calculation">
         <arguments>
             <argument name="taxData" xsi:type="object">Magento\Tax\Helper\Data\Proxy</argument>
         </arguments>
@@ -67,12 +67,12 @@
     <type name="Magento\Quote\Model\Cart\TotalsConverter">
         <plugin name="add_tax_details" type="Magento\Tax\Model\Quote\GrandTotalDetailsPlugin"/>
     </type>
-    <type name="Magento\Tax\Model\Resource\Report\Tax\Createdat">
+    <type name="Magento\Tax\Model\ResourceModel\Report\Tax\Createdat">
         <arguments>
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
     </type>
-    <type name="Magento\Tax\Model\Resource\Report\Tax\Updatedat">
+    <type name="Magento\Tax\Model\ResourceModel\Report\Tax\Updatedat">
         <arguments>
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
@@ -80,7 +80,7 @@
     <type name="Magento\Sales\Api\OrderRepositoryInterface">
         <plugin name="save_order_tax" type="Magento\Tax\Model\Plugin\OrderSave"/>
     </type>
-    <type name="Magento\Tax\Model\Resource\Sales\Order\Tax">
+    <type name="Magento\Tax\Model\ResourceModel\Sales\Order\Tax">
         <arguments>
             <argument name="connectionName" xsi:type="string">sales</argument>
         </arguments>
diff --git a/app/code/Magento/Tax/etc/events.xml b/app/code/Magento/Tax/etc/events.xml
index 8db5024ff15eded86c52b7ad08b8051b775d4e04..6d1b77d65b073c66df2c0741aa1e254bdf438beb 100644
--- a/app/code/Magento/Tax/etc/events.xml
+++ b/app/code/Magento/Tax/etc/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_product_view_config">
-        <observer name="tax" instance="\Magento\Tax\Observer\UpdateProductOptions" method="execute" />
+        <observer name="tax" instance="\Magento\Tax\Observer\UpdateProductOptionsObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Tax/etc/frontend/events.xml b/app/code/Magento/Tax/etc/frontend/events.xml
index d0e946198bb2c95d2f1f15aa8c9afc5f276348de..371084966a535458aa86370986de3f87086c3084 100644
--- a/app/code/Magento/Tax/etc/frontend/events.xml
+++ b/app/code/Magento/Tax/etc/frontend/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="customer_data_object_login">
-        <observer name="customer_tax_logged_in" instance="Magento\Tax\Observer\CustomerLoggedIn" method="execute" />
+        <observer name="customer_tax_logged_in" instance="Magento\Tax\Observer\CustomerLoggedInObserver" />
     </event>
     <event name="customer_address_save_after">
-        <observer name="customer_tax_after_address_save" instance="Magento\Tax\Observer\AfterAddressSave" method="execute" />
+        <observer name="customer_tax_after_address_save" instance="Magento\Tax\Observer\AfterAddressSaveObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
index c2fa7a5543d56ac9a40e955344b717c6cb5c2812..e04ddfeeefeb8028d1d6159558ef2340b8e80c1c 100644
--- a/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
+++ b/app/code/Magento/Tax/view/adminhtml/templates/rule/edit.phtml
@@ -11,25 +11,25 @@
 <script>
 require([
     "jquery",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "jquery/editableMultiselect/js/jquery.multiselect",
-    "mage/mage"
-], function($){
+    "mage/mage",
+    'Magento_Ui/js/modal/modal'
+], function($, alert){
 
-    $.widget("adminhtml.dialogRates", $.ui.dialog, {
+    $.widget("adminhtml.dialogRates", $.mage.modal, {
         options: {
             itemRate: {},
             itemRateDefault: {}
         },
         _create: function() {
-            $.ui.dialog.prototype._create.apply(this);
+            this._super();
             this._getFormData(this.options.itemRateDefault);
         },
-        open: function() {
-            var zipIsRange = this.uiDialog.find('#zip_is_range');
-            if (this._trigger('beforeOpen', null, this) === false) {
-                return;
-            }
+        openModal: function() {
+            var zipIsRange = this.modal.find('#zip_is_range');
+
             this._applyItem(this.options.itemRateDefault);
             if (this.options.itemRate && !$.isEmptyObject(this.options.itemRate)) {
                 this._applyItem(this.options.itemRate);
@@ -37,13 +37,14 @@ require([
             zipIsRange.attr('checked', zipIsRange.val() == 1);
             zipIsRange.trigger('change');
             updater.update();
-            $.ui.dialog.prototype.open.apply(this);
+            this._super();
         },
-        close: function() {
-            $.ui.dialog.prototype.close.apply(this);
+        closeModal: function() {
+            this._super();
         },
         _applyItem: function(rate) {
-            var dialogElement = this.uiDialog;
+            var dialogElement = this.modal;
+
             $.each(rate, function(key, value) {
                 if (!value) {
                     value = '';
@@ -55,7 +56,7 @@ require([
             this._getFormData(this.options.itemRate);
         },
         _getFormData: function(data) {
-            $.each(this.uiDialog.find(':input'), function() {
+            $.each(this.modal.find(':input'), function() {
                 if (this.name) {
                     data[this.name] = this.value
                 }
@@ -91,14 +92,20 @@ require([
 
                     } else {
                         if (result.error_message)
-                            alert(result.error_message);
+                            alert({
+                                content: result.error_message
+                            });
                         else
-                            alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>');
+                            alert({
+                                content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'
+                            });
                     }
                 },
                 error: function () {
                     $('body').trigger('processStop');
-                    alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>');
+                    alert({
+                        content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'
+                    });
                 },
                 dataType: "json"
             });
@@ -177,14 +184,20 @@ require([
                                     select.find('option').eq(index).remove();
                                 } else {
                                     if (result.error_message)
-                                        alert(result.error_message);
+                                        alert({
+                                            content: result.error_message
+                                        });
                                     else
-                                        alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>');
+                                        alert({
+                                            content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'
+                                        });
                                 }
                             },
                             error: function () {
                                 $('body').trigger('processStop');
-                                alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>');
+                                alert({
+                                    content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'
+                                });
                             }
                         };
                         $.ajax(ajaxOptions);
@@ -193,7 +206,7 @@ require([
                     .on('click.mselectAdd', '.mselect-button-add', function () {
                         taxRateForm
                                 .dialogRates({itemRate: {}})
-                                .dialogRates('open');
+                                .dialogRates('openModal');
                     })
                     .on('click.mselect-checked', '.mselect-list-item input', function (event) {
                         var el = $(this),
@@ -205,42 +218,20 @@ require([
 
             taxRateForm.dialogRates({
                 title: '<?php /* @escapeNotVerified */ echo __('Tax Rate'); ?>',
-                autoOpen: false,
+                type: 'slide',
                 id: '<?php /* @escapeNotVerified */ echo $block->getJsId() ?>',
-                minWidth: 560,
-                modal: true,
-                dialogClass: 'tax-rate-popup',
-                resizable: false,
-                width: '75%',
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function () {
-                    var topMargin;
-
-                    $(this).closest('.ui-dialog').addClass('ui-dialog-active');
-                    topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 80;
-                    $(this).closest('.ui-dialog').css({
-                        top: '1%',
-                        position: 'absolute',
-                        left: '10%'
-                    });
-                    $(this).closest('.ui-dialog').css('margin-top', topMargin);
-                    $(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
-                },
-                close: function() {
-                    $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
+                modalClass: 'tax-rate-popup',
+                closed: function () {
+                    taxRateFormElement.data('validation').clearError();
                 },
                 buttons: [{
                     text: '<?php /* @escapeNotVerified */ echo __('Save'); ?>',
-                    id: '<?php /* @escapeNotVerified */ echo $block->getJsId('apply-button') ?>',
                     'class': 'action-save action-primary',
                     click: function() {
-                        $(this).dialogRates('updateItemRate');
-                        var itemRate = $(this).dialogRates('option').itemRate,
+                        this.updateItemRate();
+                        var itemRate = this.option('itemRate'),
                             itemRateData = $.extend({}, itemRate);
+
                         if (itemRateData.itemElement) {
                             delete itemRateData.itemElement;
                         }
@@ -272,29 +263,27 @@ require([
                                         taxRateField.find('option[value=""]:last')
                                             .val(itemRate.tax_calculation_rate_id);
                                     }
-                                    taxRateForm.dialogRates("close");
+                                    taxRateForm.dialogRates('closeModal');
                                 } else {
                                     if (result.error_message)
-                                        alert(result.error_message);
+                                        alert({
+                                            content: result.error_message
+                                        });
                                     else
-                                        alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>');
+                                        alert({
+                                            content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'
+                                        });
                                 }
                             },
                             error: function () {
                                 $('body').trigger('processStop');
-                                alert('<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>');
+                                alert({
+                                    content: '<?php /* @escapeNotVerified */ echo __('An error occurred'); ?>'
+                                });
                             }
                         };
                         $.ajax(ajaxOptions);
                     }
-                }, {
-                    text: '<?php /* @escapeNotVerified */ echo __('Cancel'); ?>',
-                    id: '<?php /* @escapeNotVerified */ echo $block->getJsId('close-button') ?>',
-                    'class': 'action-close',
-                    click: function() {
-                        $(this).dialogRates("close");
-                        taxRateFormElement.data('validation').clearError();
-                    }
                 }]
             });
             $('.grid-loading-mask').hide();
diff --git a/app/code/Magento/Tax/view/frontend/web/js/view/checkout/summary/item/details/subtotal.js b/app/code/Magento/Tax/view/frontend/web/js/view/checkout/summary/item/details/subtotal.js
index f75c7733bab9a9aa72776d85af6dedf7d5442225..1bf9ec13be927bd20856e9af0be454acca2c27e8 100644
--- a/app/code/Magento/Tax/view/frontend/web/js/view/checkout/summary/item/details/subtotal.js
+++ b/app/code/Magento/Tax/view/frontend/web/js/view/checkout/summary/item/details/subtotal.js
@@ -9,23 +9,25 @@ define(
         'Magento_Checkout/js/view/summary/item/details/subtotal'
     ],
     function (subtotal) {
-        "use strict";
+        'use strict';
+
         var displayPriceMode = window.checkoutConfig.reviewItemPriceDisplayMode || 'including';
+
         return subtotal.extend({
             defaults: {
                 displayPriceMode: displayPriceMode,
                 template: 'Magento_Tax/checkout/summary/item/details/subtotal'
             },
-            isPriceInclTaxDisplayed: function() {
+            isPriceInclTaxDisplayed: function () {
                 return 'both' == displayPriceMode || 'including' == displayPriceMode;
             },
-            isPriceExclTaxDisplayed: function() {
+            isPriceExclTaxDisplayed: function () {
                 return 'both' == displayPriceMode || 'excluding' == displayPriceMode;
             },
-            getValueInclTax: function(quoteItem) {
+            getValueInclTax: function (quoteItem) {
                 return this.getFormattedPrice(quoteItem['row_total_incl_tax']);
             },
-            getValueExclTax: function(quoteItem) {
+            getValueExclTax: function (quoteItem) {
                 return this.getFormattedPrice(quoteItem['row_total']);
             }
 
diff --git a/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/item/details/subtotal.html b/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/item/details/subtotal.html
index 5d555b1b54f50c13ada9f31da8ffce63f85795a3..fd1969f15a9ae74a3b9ea04c6a8ee3a8fd397064 100644
--- a/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/item/details/subtotal.html
+++ b/app/code/Magento/Tax/view/frontend/web/template/checkout/summary/item/details/subtotal.html
@@ -6,7 +6,8 @@
 -->
 <div class="subtotal">
     <!-- ko if: isPriceInclTaxDisplayed() && !getRegion('row_incl_tax') -->
-    <span class="price-including-tax" data-bind ="text: getValueInclTax($parents[1]), attr:{'data-label': $t('Incl. Tax')}">
+    <span class="price-including-tax"
+          data-bind ="text: getValueInclTax($parents[1]), attr:{'data-label': $t('Incl. Tax')}">
     </span>
     <!-- /ko -->
 
@@ -19,7 +20,8 @@
     <!-- /ko -->
 
     <!-- ko if: isPriceExclTaxDisplayed() && !getRegion('row_excl_tax') -->
-    <span class="price-excluding-tax" data-bind ="text: getValueExclTax($parents[1]), attr:{'data-label': $t('Excl. Tax')}">
+    <span class="price-excluding-tax"
+          data-bind ="text: getValueExclTax($parents[1]), attr:{'data-label': $t('Excl. Tax')}">
     </span>
     <!-- /ko -->
     <!-- ko if: isPriceExclTaxDisplayed() && getRegion('row_excl_tax') -->
diff --git a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPost.php b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPost.php
index cc4a105cee643796f0659b505b36731161ab2b17..dc4e8987adc107d94a815e8765c3bf6aa58fe7d1 100644
--- a/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPost.php
+++ b/app/code/Magento/TaxImportExport/Controller/Adminhtml/Rate/ExportPost.php
@@ -65,7 +65,7 @@ class ExportPost extends \Magento\TaxImportExport\Controller\Adminhtml\Rate
         unset($title);
 
         $collection = $this->_objectManager->create(
-            'Magento\Tax\Model\Resource\Calculation\Rate\Collection'
+            'Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection'
         )->joinCountryTable()->joinRegionTable();
 
         while ($rate = $collection->fetchItem()) {
diff --git a/app/code/Magento/TaxImportExport/Model/Rate/CsvImportHandler.php b/app/code/Magento/TaxImportExport/Model/Rate/CsvImportHandler.php
index a6c7fc4410f21c0959583f1037c749ffba8f091b..5a6f14387d26b82c8ecb03d4adfc63b638b3a863 100644
--- a/app/code/Magento/TaxImportExport/Model/Rate/CsvImportHandler.php
+++ b/app/code/Magento/TaxImportExport/Model/Rate/CsvImportHandler.php
@@ -13,7 +13,7 @@ class CsvImportHandler
     /**
      * Collection of publicly available stores
      *
-     * @var \Magento\Store\Model\Resource\Store\Collection
+     * @var \Magento\Store\Model\ResourceModel\Store\Collection
      */
     protected $_publicStores;
 
@@ -22,7 +22,7 @@ class CsvImportHandler
      *
      * The instance is used to retrieve regions based on country code
      *
-     * @var \Magento\Directory\Model\Resource\Region\Collection
+     * @var \Magento\Directory\Model\ResourceModel\Region\Collection
      */
     protected $_regionCollection;
 
@@ -48,15 +48,15 @@ class CsvImportHandler
     protected $csvProcessor;
 
     /**
-     * @param \Magento\Store\Model\Resource\Store\Collection $storeCollection
-     * @param \Magento\Directory\Model\Resource\Region\Collection $regionCollection
+     * @param \Magento\Store\Model\ResourceModel\Store\Collection $storeCollection
+     * @param \Magento\Directory\Model\ResourceModel\Region\Collection $regionCollection
      * @param \Magento\Directory\Model\CountryFactory $countryFactory
      * @param \Magento\Tax\Model\Calculation\RateFactory $taxRateFactory
      * @param \Magento\Framework\File\Csv $csvProcessor
      */
     public function __construct(
-        \Magento\Store\Model\Resource\Store\Collection $storeCollection,
-        \Magento\Directory\Model\Resource\Region\Collection $regionCollection,
+        \Magento\Store\Model\ResourceModel\Store\Collection $storeCollection,
+        \Magento\Directory\Model\ResourceModel\Region\Collection $regionCollection,
         \Magento\Directory\Model\CountryFactory $countryFactory,
         \Magento\Tax\Model\Calculation\RateFactory $taxRateFactory,
         \Magento\Framework\File\Csv $csvProcessor
diff --git a/app/code/Magento/TaxImportExport/view/adminhtml/templates/importExport.phtml b/app/code/Magento/TaxImportExport/view/adminhtml/templates/importExport.phtml
index c2391cccaf92b3512ee650cf980c331cd3589312..f2a8583fbab150fdfb3c4eeafd58d43ba11859f2 100644
--- a/app/code/Magento/TaxImportExport/view/adminhtml/templates/importExport.phtml
+++ b/app/code/Magento/TaxImportExport/view/adminhtml/templates/importExport.phtml
@@ -11,14 +11,16 @@
     <?php if (!$block->getIsReadonly()): ?>
     <div class="import-tax-rates">
         <?php if ($block->getUseContainer()): ?>
-        <form id="import-form" action="<?php /* @escapeNotVerified */ echo $block->getUrl('tax/rate/importPost') ?>" method="post" enctype="multipart/form-data">
+        <form id="import-form" class="admin__fieldset" action="<?php /* @escapeNotVerified */ echo $block->getUrl('tax/rate/importPost') ?>" method="post" enctype="multipart/form-data">
         <?php endif; ?>
             <?php echo $block->getBlockHtml('formkey')?>
-            <fieldset class="fieldset">
-                <legend class="legend"><span><?php /* @escapeNotVerified */ echo __('Import Tax Rates') ?></span></legend>
-                <input type="file" name="import_rates_file" class="input-file required-entry"/>
-                <?php echo $block->getButtonHtml('Import Tax Rates', '', 'import-submit') ?>
-            </fieldset>
+            <div class="fieldset admin__field">
+                <label for="import_rates_file" class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Import Tax Rates') ?></span></label>
+                <div class="admin__field-control">
+                    <input type="file" id="import_rates_file" name="import_rates_file" class="input-file required-entry"/>
+                    <?php echo $block->getButtonHtml('Import Tax Rates', '', 'import-submit') ?>
+                </div>
+            </div>
         <?php if ($block->getUseContainer()): ?>
         </form>
         <?php endif; ?>
@@ -44,13 +46,15 @@ require(['jquery', "mage/mage", "loadingPopup"], function(jQuery){
     <?php endif; ?>
     <div class="export-tax-rates <?php if ($block->getIsReadonly()): ?>box-left<?php else: ?>box-right<?php endif; ?>">
         <?php if ($block->getUseContainer()): ?>
-        <form id="export_form" action="<?php /* @escapeNotVerified */ echo $block->getUrl('tax/rate/exportPost') ?>" method="post" enctype="multipart/form-data">
+        <form id="export_form" class="admin__fieldset" action="<?php /* @escapeNotVerified */ echo $block->getUrl('tax/rate/exportPost') ?>" method="post" enctype="multipart/form-data">
         <?php endif; ?>
             <?php echo $block->getBlockHtml('formkey')?>
-            <fieldset class="fieldset">
-                <legend class="legend"><span><?php /* @escapeNotVerified */ echo __('Export Tax Rates') ?></span></legend>
-                <?php echo $block->getButtonHtml('Export Tax Rates', "this.form.submit()") ?>
-            </fieldset>
+            <div class="fieldset admin__field">
+                <span class="admin__field-label"><span><?php /* @escapeNotVerified */ echo __('Export Tax Rates') ?></span></span>
+                <div class="admin__field-control">
+                    <?php echo $block->getButtonHtml('Export Tax Rates', "this.form.submit()") ?>
+                </div>
+            </div>
         <?php if ($block->getUseContainer()): ?>
         </form>
         <?php endif; ?>
diff --git a/app/code/Magento/Theme/Block/Html/Title.php b/app/code/Magento/Theme/Block/Html/Title.php
index 1863fa9468a85b86ee627c1b3133d78650f23bd6..a92c2a3a278002d4899c95acbaafd16d961a423b 100644
--- a/app/code/Magento/Theme/Block/Html/Title.php
+++ b/app/code/Magento/Theme/Block/Html/Title.php
@@ -37,6 +37,19 @@ class Title extends \Magento\Framework\View\Element\Template
         return $this->pageConfig->getTitle()->getShort();
     }
 
+    /**
+     * Provide own page content heading
+     *
+     * @return string
+     */
+    public function getPageHeading()
+    {
+        if (!empty($this->pageTitle)) {
+            return $this->pageTitle;
+        }
+        return $this->pageConfig->getTitle()->getShortHeading();
+    }
+
     /**
      * Set own page title
      *
diff --git a/app/code/Magento/Theme/Model/Config.php b/app/code/Magento/Theme/Model/Config.php
index 39332cc9a0b7b7705db033cb7996e0fd3c482e90..4c57805c5909966b84f6c3f34635798841830f0e 100644
--- a/app/code/Magento/Theme/Model/Config.php
+++ b/app/code/Magento/Theme/Model/Config.php
@@ -110,7 +110,7 @@ class Config
      *
      * @param string $scope
      * @param string $configPath
-     * @return \Magento\Config\Model\Resource\Config\Data\Collection
+     * @return \Magento\Config\Model\ResourceModel\Config\Data\Collection
      */
     protected function _getAssignedScopesCollection($scope, $configPath)
     {
diff --git a/app/code/Magento/Theme/Model/Config/Customization.php b/app/code/Magento/Theme/Model/Config/Customization.php
index a6907c20e665c2358e0e18889a60d7e64dd6171f..82925235a139ba87677a16ff363828bcf4a68f89 100644
--- a/app/code/Magento/Theme/Model/Config/Customization.php
+++ b/app/code/Magento/Theme/Model/Config/Customization.php
@@ -167,7 +167,7 @@ class Customization
      */
     protected function _prepareThemeCustomizations()
     {
-        /** @var \Magento\Theme\Model\Resource\Theme\Collection $themeCollection */
+        /** @var \Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection */
         $themeCollection = $this->themeProvider->getThemeCustomizations(\Magento\Framework\App\Area::AREA_FRONTEND);
 
         $assignedThemes = $this->getStoresByThemes();
diff --git a/app/code/Magento/Theme/Model/CopyService.php b/app/code/Magento/Theme/Model/CopyService.php
index d41efb4329dc31bbb3097a8842c57ec1125388ed..6c7ba217ad9197d0f50843abca52f1c205cc1e8f 100644
--- a/app/code/Magento/Theme/Model/CopyService.php
+++ b/app/code/Magento/Theme/Model/CopyService.php
@@ -122,12 +122,12 @@ class CopyService
     protected function _copyLayoutCustomization(ThemeInterface $source, ThemeInterface $target)
     {
         $update = $this->_updateFactory->create();
-        /** @var $targetUpdates \Magento\Widget\Model\Resource\Layout\Update\Collection */
+        /** @var $targetUpdates \Magento\Widget\Model\ResourceModel\Layout\Update\Collection */
         $targetUpdates = $update->getCollection();
         $targetUpdates->addThemeFilter($target->getId());
         $targetUpdates->delete();
 
-        /** @var $sourceCollection \Magento\Widget\Model\Resource\Layout\Link\Collection */
+        /** @var $sourceCollection \Magento\Widget\Model\ResourceModel\Layout\Link\Collection */
         $sourceCollection = $this->_link->getCollection();
         $sourceCollection->addThemeFilter($source->getId());
         /** @var $layoutLink \Magento\Widget\Model\Layout\Link */
diff --git a/app/code/Magento/Theme/Model/Design.php b/app/code/Magento/Theme/Model/Design.php
index 402d067d6cf35038d5776431e41f33821dd002f1..7a982eefe56f4483ed0673d4d8ae8587ba3b19e1 100644
--- a/app/code/Magento/Theme/Model/Design.php
+++ b/app/code/Magento/Theme/Model/Design.php
@@ -7,7 +7,7 @@ namespace Magento\Theme\Model;
 
 use Magento\Framework\App\DesignInterface;
 use Magento\Framework\Model\AbstractModel;
-use Magento\Framework\Model\Resource\AbstractResource;
+use Magento\Framework\Model\ResourceModel\AbstractResource;
 use Magento\Framework\DataObject\IdentityInterface;
 
 /**
@@ -85,7 +85,7 @@ class Design extends AbstractModel implements IdentityInterface, DesignInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Theme\Model\Resource\Design');
+        $this->_init('Magento\Theme\Model\ResourceModel\Design');
     }
 
     /**
diff --git a/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php b/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php
index bfe90ef91b6e484192ca76bf0f27a1c5881fc6d5..e2fe1ac8f19d780acc688ab42497d16535f6351f 100644
--- a/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php
+++ b/app/code/Magento/Theme/Model/Design/Backend/Exceptions.php
@@ -23,7 +23,7 @@ class Exceptions extends ArraySerialized
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\View\DesignInterface $design
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Exceptions extends ArraySerialized
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\View\DesignInterface $design,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Theme/Model/Design/Backend/Theme.php b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
index 9f7d2e326712f8d11c97e24aebac1625b8f88e78..ae2af06192c8b673198edebc41c945d84b988adf 100644
--- a/app/code/Magento/Theme/Model/Design/Backend/Theme.php
+++ b/app/code/Magento/Theme/Model/Design/Backend/Theme.php
@@ -23,7 +23,7 @@ class Theme extends Value
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\View\DesignInterface $design
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -32,7 +32,7 @@ class Theme extends Value
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\View\DesignInterface $design,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/app/code/Magento/Theme/Model/PageLayout/Config/Builder.php b/app/code/Magento/Theme/Model/PageLayout/Config/Builder.php
index a63656cadfe20cbe8c789c4406992bffdb7abb03..d20a041f7ae047a6d84f0044ac6f0afda3e0c52a 100644
--- a/app/code/Magento/Theme/Model/PageLayout/Config/Builder.php
+++ b/app/code/Magento/Theme/Model/PageLayout/Config/Builder.php
@@ -23,19 +23,19 @@ class Builder implements \Magento\Framework\View\Model\PageLayout\Config\Builder
     protected $fileCollector;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\Collection
+     * @var \Magento\Theme\Model\ResourceModel\Theme\Collection
      */
     protected $themeCollection;
 
     /**
      * @param \Magento\Framework\View\PageLayout\ConfigFactory $configFactory
      * @param \Magento\Framework\View\PageLayout\File\Collector\Aggregated $fileCollector
-     * @param \Magento\Theme\Model\Resource\Theme\Collection $themeCollection
+     * @param \Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection
      */
     public function __construct(
         \Magento\Framework\View\PageLayout\ConfigFactory $configFactory,
         \Magento\Framework\View\PageLayout\File\Collector\Aggregated $fileCollector,
-        \Magento\Theme\Model\Resource\Theme\Collection $themeCollection
+        \Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection
     ) {
         $this->configFactory = $configFactory;
         $this->fileCollector = $fileCollector;
diff --git a/app/code/Magento/Theme/Model/Resource/Design.php b/app/code/Magento/Theme/Model/ResourceModel/Design.php
similarity index 95%
rename from app/code/Magento/Theme/Model/Resource/Design.php
rename to app/code/Magento/Theme/Model/ResourceModel/Design.php
index 649b851076cb6eaf747dda959c410fef93ce22b8..2edb0163bae1bbe4563af38cc17b8b8af850c7e1 100644
--- a/app/code/Magento/Theme/Model/Resource/Design.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Design.php
@@ -3,9 +3,8 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-
 // @codingStandardsIgnoreFile
-namespace Magento\Theme\Model\Resource;
+namespace Magento\Theme\Model\ResourceModel;
 
 use Magento\Framework\Stdlib\DateTime;
 
@@ -14,7 +13,7 @@ use Magento\Framework\Stdlib\DateTime;
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Design extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Design extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var DateTime
@@ -22,12 +21,12 @@ class Design extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         DateTime $dateTime,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Theme/Model/Resource/Design/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Design/Collection.php
similarity index 83%
rename from app/code/Magento/Theme/Model/Resource/Design/Collection.php
rename to app/code/Magento/Theme/Model/ResourceModel/Design/Collection.php
index 34920e588d175510a7c233a4247ebd43fa30f374..bc79a10f113558adf4fb3b9d0319e0f74f94d4a9 100644
--- a/app/code/Magento/Theme/Model/Resource/Design/Collection.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Design/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Theme\Model\Resource\Design;
+namespace Magento\Theme\Model\ResourceModel\Design;
 
 /**
  * Core Design resource collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -22,7 +22,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -31,7 +31,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->dateTime = $dateTime;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
@@ -44,13 +44,13 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Theme\Model\Design', 'Magento\Theme\Model\Resource\Design');
+        $this->_init('Magento\Theme\Model\Design', 'Magento\Theme\Model\ResourceModel\Design');
     }
 
     /**
      * Join store data to collection
      *
-     * @return \Magento\Theme\Model\Resource\Design\Collection
+     * @return \Magento\Theme\Model\ResourceModel\Design\Collection
      */
     public function joinStore()
     {
@@ -80,7 +80,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * Add store filter to collection
      *
      * @param int|array $storeId
-     * @return \Magento\Theme\Model\Resource\Design\Collection
+     * @return \Magento\Theme\Model\ResourceModel\Design\Collection
      */
     public function addStoreFilter($storeId)
     {
diff --git a/app/code/Magento/Theme/Model/Resource/Theme.php b/app/code/Magento/Theme/Model/ResourceModel/Theme.php
similarity index 72%
rename from app/code/Magento/Theme/Model/Resource/Theme.php
rename to app/code/Magento/Theme/Model/ResourceModel/Theme.php
index c5f48d003365c7507109f9c360d3aea1fd95158b..e93820180a089974d73ea300c8177f8c6b513c40 100644
--- a/app/code/Magento/Theme/Model/Resource/Theme.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Theme.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Theme\Model\Resource;
+namespace Magento\Theme\Model\ResourceModel;
 
 /**
  * Theme resource model
  */
-class Theme extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Theme extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Theme/Model/Resource/Theme/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/Collection.php
similarity index 95%
rename from app/code/Magento/Theme/Model/Resource/Theme/Collection.php
rename to app/code/Magento/Theme/Model/ResourceModel/Theme/Collection.php
index 035c031732b0a93729319cbcd4970bd6ae28512f..6ca5a367cb790992bdff5994233ea79accb260c5 100644
--- a/app/code/Magento/Theme/Model/Resource/Theme/Collection.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Theme\Model\Resource\Theme;
+namespace Magento\Theme\Model\ResourceModel\Theme;
 
 /**
  * Theme collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection implements
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection implements
     \Magento\Framework\View\Design\Theme\Label\ListInterface,
     \Magento\Framework\View\Design\Theme\ListInterface
 {
@@ -24,7 +24,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Theme\Model\Theme', 'Magento\Theme\Model\Resource\Theme');
+        $this->_init('Magento\Theme\Model\Theme', 'Magento\Theme\Model\ResourceModel\Theme');
     }
 
     /**
@@ -180,7 +180,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     public function filterPhysicalThemes(
         $page = null,
-        $pageSize = \Magento\Theme\Model\Resource\Theme\Collection::DEFAULT_PAGE_SIZE
+        $pageSize = \Magento\Theme\Model\ResourceModel\Theme\Collection::DEFAULT_PAGE_SIZE
     ) {
         $this->addAreaFilter(
             \Magento\Framework\App\Area::AREA_FRONTEND
diff --git a/app/code/Magento/Theme/Model/Resource/Theme/Customization/Update.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/Customization/Update.php
similarity index 71%
rename from app/code/Magento/Theme/Model/Resource/Theme/Customization/Update.php
rename to app/code/Magento/Theme/Model/ResourceModel/Theme/Customization/Update.php
index b023dd7a4a474567ed6030030ef8093ca3c5e3af..a0aa877a368e2352f8efab96dc5fe477484e0a42 100644
--- a/app/code/Magento/Theme/Model/Resource/Theme/Customization/Update.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/Customization/Update.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Theme\Model\Resource\Theme\Customization;
+namespace Magento\Theme\Model\ResourceModel\Theme\Customization;
 
 /**
  * Theme customization link resource model
  */
-class Update extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Update extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Theme/Model/Resource/Theme/Data/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/Data/Collection.php
similarity index 69%
rename from app/code/Magento/Theme/Model/Resource/Theme/Data/Collection.php
rename to app/code/Magento/Theme/Model/ResourceModel/Theme/Data/Collection.php
index f8e95038d9dd1a3ab1d8b3164219f722332000b9..23b4d370e8190deb4ce3bbd126128bada89f8b33 100644
--- a/app/code/Magento/Theme/Model/Resource/Theme/Data/Collection.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/Data/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Theme\Model\Resource\Theme\Data;
+namespace Magento\Theme\Model\ResourceModel\Theme\Data;
 
 /**
  * Theme data collection
  */
-class Collection extends \Magento\Theme\Model\Resource\Theme\Collection implements
+class Collection extends \Magento\Theme\Model\ResourceModel\Theme\Collection implements
     \Magento\Framework\View\Design\Theme\Label\ListInterface,
     \Magento\Framework\View\Design\Theme\ListInterface
 {
@@ -17,6 +17,6 @@ class Collection extends \Magento\Theme\Model\Resource\Theme\Collection implemen
      */
     protected function _construct()
     {
-        $this->_init('Magento\Theme\Model\Theme\Data', 'Magento\Theme\Model\Resource\Theme');
+        $this->_init('Magento\Theme\Model\Theme\Data', 'Magento\Theme\Model\ResourceModel\Theme');
     }
 }
diff --git a/app/code/Magento/Theme/Model/Resource/Theme/File.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/File.php
similarity index 72%
rename from app/code/Magento/Theme/Model/Resource/Theme/File.php
rename to app/code/Magento/Theme/Model/ResourceModel/Theme/File.php
index 6d5767e8ca1194297cafa4682059329f215e73dc..0e5ebf11d2f87a6459fb667f1885dc436652fb0c 100644
--- a/app/code/Magento/Theme/Model/Resource/Theme/File.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/File.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Theme\Model\Resource\Theme;
+namespace Magento\Theme\Model\ResourceModel\Theme;
 
 /**
  * Theme files resource model
  */
-class File extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class File extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Resource initialization
diff --git a/app/code/Magento/Theme/Model/Resource/Theme/File/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/File/Collection.php
similarity index 87%
rename from app/code/Magento/Theme/Model/Resource/Theme/File/Collection.php
rename to app/code/Magento/Theme/Model/ResourceModel/Theme/File/Collection.php
index ce9908786885c24b31a4bc162fdc234d5a4943c1..ad78ceddba811641444891ec8850cbaf2866d2bf 100644
--- a/app/code/Magento/Theme/Model/Resource/Theme/File/Collection.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/File/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Theme\Model\Resource\Theme\File;
+namespace Magento\Theme\Model\ResourceModel\Theme\File;
 
 /**
  * Theme files collection
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection implements
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection implements
     \Magento\Framework\View\Design\Theme\File\CollectionInterface
 {
     /**
@@ -18,7 +18,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Theme\Model\Theme\File', 'Magento\Theme\Model\Resource\Theme\File');
+        $this->_init('Magento\Theme\Model\Theme\File', 'Magento\Theme\Model\ResourceModel\Theme\File');
     }
 
     /**
diff --git a/app/code/Magento/Theme/Model/Resource/Theme/Grid/Collection.php b/app/code/Magento/Theme/Model/ResourceModel/Theme/Grid/Collection.php
similarity index 57%
rename from app/code/Magento/Theme/Model/Resource/Theme/Grid/Collection.php
rename to app/code/Magento/Theme/Model/ResourceModel/Theme/Grid/Collection.php
index 1faa3b855be81948f697adb0edc14e1f27c3c87e..0265b1680aa53b21a2ed7ce8903432612e99414b 100644
--- a/app/code/Magento/Theme/Model/Resource/Theme/Grid/Collection.php
+++ b/app/code/Magento/Theme/Model/ResourceModel/Theme/Grid/Collection.php
@@ -3,21 +3,21 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Theme\Model\Resource\Theme\Grid;
+namespace Magento\Theme\Model\ResourceModel\Theme\Grid;
 
 /**
  * Theme grid collection
  */
-class Collection extends \Magento\Theme\Model\Resource\Theme\Collection
+class Collection extends \Magento\Theme\Model\ResourceModel\Theme\Collection
 {
     /**
      * Add area filter
      *
-     * @return \Magento\Theme\Model\Resource\Theme\Collection
+     * @return \Magento\Theme\Model\ResourceModel\Theme\Collection
      */
     protected function _initSelect()
     {
-        \Magento\Theme\Model\Resource\Theme\Collection::_initSelect();
+        \Magento\Theme\Model\ResourceModel\Theme\Collection::_initSelect();
         $this->filterVisibleThemes()->addAreaFilter(\Magento\Framework\App\Area::AREA_FRONTEND)->addParentTitle();
         return $this;
     }
diff --git a/app/code/Magento/Theme/Model/Theme.php b/app/code/Magento/Theme/Model/Theme.php
index 8cfee2298828e0bcf3730ab5c42e1cf2f8d70c98..121ab2d9ce11973d8356487b68b961176876acbb 100644
--- a/app/code/Magento/Theme/Model/Theme.php
+++ b/app/code/Magento/Theme/Model/Theme.php
@@ -6,6 +6,7 @@
 namespace Magento\Theme\Model;
 
 use Magento\Framework\View\Design\ThemeInterface;
+use Magento\Theme\Model\ResourceModel\Theme\Collection as ThemeCollection;
 
 /**
  * Theme model class
@@ -92,8 +93,8 @@ class Theme extends \Magento\Framework\Model\AbstractModel implements ThemeInter
      * @param \Magento\Framework\View\Design\Theme\ImageFactory $imageFactory
      * @param \Magento\Framework\View\Design\Theme\Validator $validator
      * @param \Magento\Framework\View\Design\Theme\CustomizationFactory $customizationFactory
-     * @param \Magento\Theme\Model\Resource\Theme $resource
-     * @param \Magento\Theme\Model\Resource\Theme\Collection $resourceCollection
+     * @param \Magento\Theme\Model\ResourceModel\Theme $resource
+     * @param \Magento\Theme\Model\ResourceModel\Theme\Collection $resourceCollection
      * @param array $data
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -106,8 +107,8 @@ class Theme extends \Magento\Framework\Model\AbstractModel implements ThemeInter
         \Magento\Framework\View\Design\Theme\ImageFactory $imageFactory,
         \Magento\Framework\View\Design\Theme\Validator $validator,
         \Magento\Framework\View\Design\Theme\CustomizationFactory $customizationFactory,
-        Resource\Theme $resource = null,
-        Resource\Theme\Collection $resourceCollection = null,
+        \Magento\Theme\Model\ResourceModel\Theme $resource = null,
+        ThemeCollection $resourceCollection = null,
         array $data = []
     ) {
         parent::__construct($context, $registry, $resource, $resourceCollection, $data);
@@ -126,7 +127,7 @@ class Theme extends \Magento\Framework\Model\AbstractModel implements ThemeInter
      */
     protected function _construct()
     {
-        $this->_init('Magento\Theme\Model\Resource\Theme');
+        $this->_init('Magento\Theme\Model\ResourceModel\Theme');
     }
 
     /**
diff --git a/app/code/Magento/Theme/Model/Theme/Domain/Physical.php b/app/code/Magento/Theme/Model/Theme/Domain/Physical.php
index 5dc321191990d6c45c5ea7069b042c8195337a62..b88cbabb70784c59aab6720a1b6497fd471ad66f 100644
--- a/app/code/Magento/Theme/Model/Theme/Domain/Physical.php
+++ b/app/code/Magento/Theme/Model/Theme/Domain/Physical.php
@@ -29,7 +29,7 @@ class Physical implements \Magento\Framework\View\Design\Theme\Domain\PhysicalIn
     protected $_themeCopyService;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\Collection
+     * @var \Magento\Theme\Model\ResourceModel\Theme\Collection
      */
     protected $_themeCollection;
 
@@ -37,13 +37,13 @@ class Physical implements \Magento\Framework\View\Design\Theme\Domain\PhysicalIn
      * @param \Magento\Framework\View\Design\ThemeInterface $theme
      * @param \Magento\Theme\Model\ThemeFactory $themeFactory
      * @param \Magento\Theme\Model\CopyService $themeCopyService
-     * @param \Magento\Theme\Model\Resource\Theme\Collection $themeCollection
+     * @param \Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection
      */
     public function __construct(
         \Magento\Framework\View\Design\ThemeInterface $theme,
         \Magento\Theme\Model\ThemeFactory $themeFactory,
         \Magento\Theme\Model\CopyService $themeCopyService,
-        \Magento\Theme\Model\Resource\Theme\Collection $themeCollection
+        \Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection
     ) {
         $this->_theme = $theme;
         $this->_themeFactory = $themeFactory;
diff --git a/app/code/Magento/Theme/Model/Theme/File.php b/app/code/Magento/Theme/Model/Theme/File.php
index 3da6a17b0dd2e0d59ed11872a595d446b0372135..e3b5d723cf1bb4700d743ca0fd512084544e128c 100644
--- a/app/code/Magento/Theme/Model/Theme/File.php
+++ b/app/code/Magento/Theme/Model/Theme/File.php
@@ -53,7 +53,7 @@ class File extends AbstractModel implements FileInterface
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\View\Design\Theme\FlyweightFactory $themeFactory
      * @param \Magento\Framework\View\Design\Theme\Customization\FileServiceFactory $fileServiceFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -62,7 +62,7 @@ class File extends AbstractModel implements FileInterface
         \Magento\Framework\Registry $registry,
         \Magento\Framework\View\Design\Theme\FlyweightFactory $themeFactory,
         \Magento\Framework\View\Design\Theme\Customization\FileServiceFactory $fileServiceFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -78,7 +78,7 @@ class File extends AbstractModel implements FileInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Theme\Model\Resource\Theme\File');
+        $this->_init('Magento\Theme\Model\ResourceModel\Theme\File');
     }
 
     /**
diff --git a/app/code/Magento/Theme/Model/Theme/FileProvider.php b/app/code/Magento/Theme/Model/Theme/FileProvider.php
index 50d4034c65f9d6056681ea87148bdf21b2b63123..949a5be21fd8da74b0d4c1323cb0337bb22dcf33 100644
--- a/app/code/Magento/Theme/Model/Theme/FileProvider.php
+++ b/app/code/Magento/Theme/Model/Theme/FileProvider.php
@@ -8,14 +8,14 @@ namespace Magento\Theme\Model\Theme;
 class FileProvider implements \Magento\Framework\View\Design\Theme\FileProviderInterface
 {
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\File\CollectionFactory
+     * @var \Magento\Theme\Model\ResourceModel\Theme\File\CollectionFactory
      */
     protected $fileFactory;
 
     /**
-     * @param \Magento\Theme\Model\Resource\Theme\File\CollectionFactory $fileFactory
+     * @param \Magento\Theme\Model\ResourceModel\Theme\File\CollectionFactory $fileFactory
      */
-    public function __construct(\Magento\Theme\Model\Resource\Theme\File\CollectionFactory $fileFactory)
+    public function __construct(\Magento\Theme\Model\ResourceModel\Theme\File\CollectionFactory $fileFactory)
     {
         $this->fileFactory = $fileFactory;
     }
diff --git a/app/code/Magento/Theme/Model/Theme/Registration.php b/app/code/Magento/Theme/Model/Theme/Registration.php
index 47dcc24c104c2ed03f2faedd9d9f8b8ead222a10..add61132ffafae4e6ee9f729f7eda6ebae725b03 100644
--- a/app/code/Magento/Theme/Model/Theme/Registration.php
+++ b/app/code/Magento/Theme/Model/Theme/Registration.php
@@ -15,7 +15,7 @@ use Magento\Framework\View\Design\ThemeInterface;
 class Registration
 {
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\Data\CollectionFactory
+     * @var \Magento\Theme\Model\ResourceModel\Theme\Data\CollectionFactory
      */
     protected $_collectionFactory;
 
@@ -49,11 +49,11 @@ class Registration
     /**
      * Initialize dependencies
      *
-     * @param \Magento\Theme\Model\Resource\Theme\Data\CollectionFactory $collectionFactory
+     * @param \Magento\Theme\Model\ResourceModel\Theme\Data\CollectionFactory $collectionFactory
      * @param \Magento\Theme\Model\Theme\Data\Collection $filesystemCollection
      */
     public function __construct(
-        \Magento\Theme\Model\Resource\Theme\Data\CollectionFactory $collectionFactory,
+        \Magento\Theme\Model\ResourceModel\Theme\Data\CollectionFactory $collectionFactory,
         \Magento\Theme\Model\Theme\Data\Collection $filesystemCollection
     ) {
         $this->_collectionFactory = $collectionFactory;
diff --git a/app/code/Magento/Theme/Model/Theme/Resolver.php b/app/code/Magento/Theme/Model/Theme/Resolver.php
index 7469e654bbfcb6464bb6332a6bc3088c036b1a8e..fb9b78eba83031edfb337862e9e71a3cf5d428bc 100644
--- a/app/code/Magento/Theme/Model/Theme/Resolver.php
+++ b/app/code/Magento/Theme/Model/Theme/Resolver.php
@@ -16,7 +16,7 @@ class Resolver implements \Magento\Framework\View\Design\Theme\ResolverInterface
     protected $design;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\CollectionFactory
+     * @var \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory
      */
     protected $themeFactory;
 
@@ -28,12 +28,12 @@ class Resolver implements \Magento\Framework\View\Design\Theme\ResolverInterface
     /**
      * @param \Magento\Framework\App\State $appState
      * @param \Magento\Framework\View\DesignInterface $design
-     * @param \Magento\Theme\Model\Resource\Theme\CollectionFactory $themeFactory
+     * @param \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory $themeFactory
      */
     public function __construct(
         \Magento\Framework\App\State $appState,
         \Magento\Framework\View\DesignInterface $design,
-        \Magento\Theme\Model\Resource\Theme\CollectionFactory $themeFactory
+        \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory $themeFactory
     ) {
         $this->design = $design;
         $this->themeFactory = $themeFactory;
@@ -52,7 +52,7 @@ class Resolver implements \Magento\Framework\View\Design\Theme\ResolverInterface
             return $this->design->getDesignTheme();
         }
 
-        /** @var \Magento\Theme\Model\Resource\Theme\Collection $themeCollection */
+        /** @var \Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection */
         $themeCollection = $this->themeFactory->create();
         $themeIdentifier = $this->design->getConfigurationDesignTheme($area);
         if (is_numeric($themeIdentifier)) {
diff --git a/app/code/Magento/Theme/Model/Theme/ThemeProvider.php b/app/code/Magento/Theme/Model/Theme/ThemeProvider.php
index a17280ce4a2c44509f7552d1b6306761910ef6b2..95949af6426ea09a5ebc1d9b488818b4f5bbd5e1 100644
--- a/app/code/Magento/Theme/Model/Theme/ThemeProvider.php
+++ b/app/code/Magento/Theme/Model/Theme/ThemeProvider.php
@@ -8,7 +8,7 @@ namespace Magento\Theme\Model\Theme;
 class ThemeProvider implements \Magento\Framework\View\Design\Theme\ThemeProviderInterface
 {
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\CollectionFactory
+     * @var \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory
      */
     protected $collectionFactory;
 
@@ -18,11 +18,11 @@ class ThemeProvider implements \Magento\Framework\View\Design\Theme\ThemeProvide
     protected $themeFactory;
 
     /**
-     * @param \Magento\Theme\Model\Resource\Theme\CollectionFactory $collectionFactory
+     * @param \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory $collectionFactory
      * @param \Magento\Theme\Model\ThemeFactory $themeFactory
      */
     public function __construct(
-        \Magento\Theme\Model\Resource\Theme\CollectionFactory $collectionFactory,
+        \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory $collectionFactory,
         \Magento\Theme\Model\ThemeFactory $themeFactory
     ) {
         $this->collectionFactory = $collectionFactory;
@@ -34,7 +34,7 @@ class ThemeProvider implements \Magento\Framework\View\Design\Theme\ThemeProvide
      */
     public function getThemeByFullPath($fullPath)
     {
-        /** @var $themeCollection \Magento\Theme\Model\Resource\Theme\Collection */
+        /** @var $themeCollection \Magento\Theme\Model\ResourceModel\Theme\Collection */
         $themeCollection = $this->collectionFactory->create();
         return $themeCollection->getThemeByFullPath($fullPath);
     }
@@ -46,7 +46,7 @@ class ThemeProvider implements \Magento\Framework\View\Design\Theme\ThemeProvide
         $area = \Magento\Framework\App\Area::AREA_FRONTEND,
         $type = \Magento\Framework\View\Design\ThemeInterface::TYPE_VIRTUAL
     ) {
-        /** @var $themeCollection \Magento\Theme\Model\Resource\Theme\Collection */
+        /** @var $themeCollection \Magento\Theme\Model\ResourceModel\Theme\Collection */
         $themeCollection = $this->collectionFactory->create();
         $themeCollection->addAreaFilter($area)->addTypeFilter($type);
         return $themeCollection;
diff --git a/app/code/Magento/Theme/Observer/CleanThemeRelatedContentObserver.php b/app/code/Magento/Theme/Observer/CleanThemeRelatedContentObserver.php
index 8015df0c95f33e07886855a418ba014014e0c191..3bdca09d1c0a1a49bf3090e110d550d97580e8bc 100644
--- a/app/code/Magento/Theme/Observer/CleanThemeRelatedContentObserver.php
+++ b/app/code/Magento/Theme/Observer/CleanThemeRelatedContentObserver.php
@@ -18,7 +18,7 @@ class CleanThemeRelatedContentObserver implements ObserverInterface
     protected $themeImageFactory;
 
     /**
-     * @var \Magento\Widget\Model\Resource\Layout\Update\Collection
+     * @var \Magento\Widget\Model\ResourceModel\Layout\Update\Collection
      */
     protected $updateCollection;
 
@@ -29,12 +29,12 @@ class CleanThemeRelatedContentObserver implements ObserverInterface
 
     /**
      * @param \Magento\Framework\View\Design\Theme\ImageFactory $themeImageFactory
-     * @param \Magento\Widget\Model\Resource\Layout\Update\Collection $updateCollection
+     * @param \Magento\Widget\Model\ResourceModel\Layout\Update\Collection $updateCollection
      * @param \Magento\Theme\Model\Config\Customization $themeConfig
      */
     public function __construct(
         \Magento\Framework\View\Design\Theme\ImageFactory $themeImageFactory,
-        \Magento\Widget\Model\Resource\Layout\Update\Collection $updateCollection,
+        \Magento\Widget\Model\ResourceModel\Layout\Update\Collection $updateCollection,
         \Magento\Theme\Model\Config\Customization $themeConfig
     ) {
         $this->themeImageFactory = $themeImageFactory;
diff --git a/app/code/Magento/Theme/Setup/InstallData.php b/app/code/Magento/Theme/Setup/InstallData.php
index f0854bea9c241f031034355be092f732ec37cd30..32503c78fc70f353c5f74a7aeddce6536fc05e37 100644
--- a/app/code/Magento/Theme/Setup/InstallData.php
+++ b/app/code/Magento/Theme/Setup/InstallData.php
@@ -18,7 +18,7 @@ class InstallData implements InstallDataInterface
     /**
      * Theme resource factory
      *
-     * @var \Magento\Theme\Model\Resource\Theme\CollectionFactory
+     * @var \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory
      */
     private $themeResourceFactory;
 
@@ -32,11 +32,11 @@ class InstallData implements InstallDataInterface
     /**
      * Init
      *
-     * @param \Magento\Theme\Model\Resource\Theme\CollectionFactory $themeResourceFactory
+     * @param \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory $themeResourceFactory
      * @param \Magento\Theme\Model\Theme\CollectionFactory $themeFactory
      */
     public function __construct(
-        \Magento\Theme\Model\Resource\Theme\CollectionFactory $themeResourceFactory,
+        \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory $themeResourceFactory,
         \Magento\Theme\Model\Theme\CollectionFactory $themeFactory
     ) {
         $this->themeResourceFactory = $themeResourceFactory;
@@ -94,7 +94,7 @@ class InstallData implements InstallDataInterface
     }
 
     /**
-     * @return \Magento\Theme\Model\Resource\Theme\Collection
+     * @return \Magento\Theme\Model\ResourceModel\Theme\Collection
      */
     public function createThemeResource()
     {
diff --git a/app/code/Magento/Theme/Test/Unit/Block/Html/TitleTest.php b/app/code/Magento/Theme/Test/Unit/Block/Html/TitleTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..074316ccab3a9dfa12cb4a6064b0d6e711e09de7
--- /dev/null
+++ b/app/code/Magento/Theme/Test/Unit/Block/Html/TitleTest.php
@@ -0,0 +1,113 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Theme\Test\Unit\Block\Html;
+
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
+
+class TitleTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var ObjectManagerHelper
+     */
+    protected $objectManagerHelper;
+
+    /**
+     * @var \Magento\Framework\View\Page\Config|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageConfigMock;
+
+    /**
+     * @var \Magento\Framework\View\Page\Title|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $pageTitleMock;
+
+    /**
+     * @var \Magento\Theme\Block\Html\Title
+     */
+    protected $htmlTitle;
+
+    /**
+     * @return void
+     */
+    protected function setUp()
+    {
+        $this->objectManagerHelper = new ObjectManagerHelper($this);
+        $this->pageConfigMock = $this->getMock('Magento\Framework\View\Page\Config', [], [], '', false);
+        $this->pageTitleMock = $this->getMock('Magento\Framework\View\Page\Title', [], [], '', false);
+
+        $context = $this->objectManagerHelper->getObject(
+            'Magento\Framework\View\Element\Template\Context',
+            ['pageConfig' => $this->pageConfigMock]
+        );
+
+        $this->htmlTitle = $this->objectManagerHelper->getObject(
+            'Magento\Theme\Block\Html\Title',
+            ['context' => $context]
+        );
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetPageTitleWithSetPageTitle()
+    {
+        $title = 'some title';
+
+        $this->htmlTitle->setPageTitle($title);
+        $this->pageConfigMock->expects($this->never())
+            ->method('getTitle');
+
+        $this->assertEquals($title, $this->htmlTitle->getPageTitle());
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetPageTitle()
+    {
+        $title = 'some title';
+
+        $this->pageTitleMock->expects($this->once())
+            ->method('getShort')
+            ->willReturn($title);
+        $this->pageConfigMock->expects($this->once())
+            ->method('getTitle')
+            ->willReturn($this->pageTitleMock);
+
+        $this->assertEquals($title, $this->htmlTitle->getPageTitle());
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetPageHeadingWithSetPageTitle()
+    {
+        $title = 'some title';
+
+        $this->htmlTitle->setPageTitle($title);
+        $this->pageConfigMock->expects($this->never())
+            ->method('getTitle');
+
+        $this->assertEquals($title, $this->htmlTitle->getPageHeading());
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetPageHeading()
+    {
+        $title = 'some title';
+
+        $this->pageTitleMock->expects($this->once())
+            ->method('getShortHeading')
+            ->willReturn($title);
+        $this->pageConfigMock->expects($this->once())
+            ->method('getTitle')
+            ->willReturn($this->pageTitleMock);
+
+        $this->assertEquals($title, $this->htmlTitle->getPageHeading());
+    }
+}
diff --git a/app/code/Magento/Theme/Test/Unit/Block/Html/TopmenuTest.php b/app/code/Magento/Theme/Test/Unit/Block/Html/TopmenuTest.php
index ab2afb8ef4ea906040c419e4e04522f28013c09d..d8b18edafa1232efddaccad35d35947af39cf8ed 100644
--- a/app/code/Magento/Theme/Test/Unit/Block/Html/TopmenuTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Block/Html/TopmenuTest.php
@@ -65,7 +65,7 @@ HTML;
 
         $tree = $this->getMock('Magento\Framework\Data\Tree', [], [], '', false);
 
-        $container = $this->getMock('Magento\Catalog\Model\Resource\Category\Tree', [], [], '', false);
+        $container = $this->getMock('Magento\Catalog\Model\ResourceModel\Category\Tree', [], [], '', false);
 
         $children = $this->getMock(
             'Magento\Framework\Data\Tree\Node\Collection',
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Config/CustomizationTest.php b/app/code/Magento/Theme/Test/Unit/Model/Config/CustomizationTest.php
index 2e7716a68ebcc4eac65df0ceb3297ef1b9c01db4..c7d3d621722c73f7f6dca890379f495528b0f438 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Config/CustomizationTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Config/CustomizationTest.php
@@ -24,7 +24,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     protected $designPackage;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\Collection
+     * @var \Magento\Theme\Model\ResourceModel\Theme\Collection
      */
     protected $themeCollection;
 
@@ -42,11 +42,11 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
     {
         $this->storeManager = $this->getMockBuilder('Magento\Store\Model\StoreManagerInterface')->getMock();
         $this->designPackage = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock();
-        $this->themeCollection = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\Collection')
+        $this->themeCollection = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
-        $collectionFactory = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\CollectionFactory')
+        $collectionFactory = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\CollectionFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
diff --git a/app/code/Magento/Theme/Test/Unit/Model/CopyServiceTest.php b/app/code/Magento/Theme/Test/Unit/Model/CopyServiceTest.php
index ac449f10946e47e1112a59ebf9d8e2ea08bd2876..16220a857ecf89f064c21a61813387afd0e220f7 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/CopyServiceTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/CopyServiceTest.php
@@ -174,7 +174,7 @@ class CopyServiceTest extends \PHPUnit_Framework_TestCase
             $this->returnValue($this->dirWriteMock)
         );
 
-        /* Init \Magento\Widget\Model\Resource\Layout\Update\Collection model  */
+        /* Init \Magento\Widget\Model\ResourceModel\Layout\Update\Collection model  */
         $this->updateFactory = $this->getMock(
             'Magento\Widget\Model\Layout\UpdateFactory',
             ['create'],
@@ -191,7 +191,7 @@ class CopyServiceTest extends \PHPUnit_Framework_TestCase
         );
         $this->updateFactory->expects($this->at(0))->method('create')->will($this->returnValue($this->update));
         $this->updateCollection = $this->getMock(
-            'Magento\Widget\Model\Resource\Layout\Update\Collection',
+            'Magento\Widget\Model\ResourceModel\Layout\Update\Collection',
             ['addThemeFilter', 'delete', 'getIterator'],
             [],
             '',
@@ -214,7 +214,7 @@ class CopyServiceTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->linkCollection = $this->getMock(
-            'Magento\Widget\Model\Resource\Layout\Link\Collection',
+            'Magento\Widget\Model\ResourceModel\Layout\Link\Collection',
             ['addThemeFilter', 'getIterator'],
             [],
             '',
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ExceptionsTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ExceptionsTest.php
index 7be9989397ebccabacdcdef5a566eac0bdc39680..47a9acad4ee79d277eba30c29be79a8030242dbe 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ExceptionsTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ExceptionsTest.php
@@ -36,12 +36,12 @@ class ExceptionsTest extends \PHPUnit_Framework_TestCase
     protected $design;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Design|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Design|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Design\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Design\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceCollection;
 
@@ -55,10 +55,10 @@ class ExceptionsTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->config = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')->getMock();
         $this->design = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock();
-        $this->resource = $this->getMockBuilder('Magento\Theme\Model\Resource\Design')
+        $this->resource = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Design')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->resourceCollection = $this->getMockBuilder('Magento\Theme\Model\Resource\Design\Collection')
+        $this->resourceCollection = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Design\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->context->expects($this->once())
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
index 301585fa173bcbb557657f753b02d046415bb92e..f6ac670502a89c420cd46b8df19b5a6242daeae7 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Design/Backend/ThemeTest.php
@@ -37,12 +37,12 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
     protected $design;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Design|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Design|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Design\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Design\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceCollection;
 
@@ -56,10 +56,10 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->config = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')->getMock();
         $this->design = $this->getMockBuilder('Magento\Framework\View\DesignInterface')->getMock();
-        $this->resource = $this->getMockBuilder('Magento\Theme\Model\Resource\Design')
+        $this->resource = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Design')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->resourceCollection = $this->getMockBuilder('Magento\Theme\Model\Resource\Design\Collection')
+        $this->resourceCollection = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Design\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->context->expects($this->once())
diff --git a/app/code/Magento/Theme/Test/Unit/Model/DesignTest.php b/app/code/Magento/Theme/Test/Unit/Model/DesignTest.php
index f83ba611f95cb8ed72440d7858b42f18f46d865b..ae92f434c3919c214e83d00dc35c7f9549f087cb 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/DesignTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/DesignTest.php
@@ -39,7 +39,7 @@ class DesignTest extends \PHPUnit_Framework_TestCase
     protected $dateTime;
 
     /**
-     * @var \Magento\Framework\Model\Resource\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\AbstractResource|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -58,10 +58,10 @@ class DesignTest extends \PHPUnit_Framework_TestCase
         $this->dateTime = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->resource = $this->getMockBuilder('Magento\Theme\Model\Resource\Design')
+        $this->resource = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Design')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->resourceCollection = $this->getMockBuilder('Magento\Theme\Model\Resource\Design\Collection')
+        $this->resourceCollection = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Design\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->cacheManager = $this->getMockBuilder('Magento\Framework\App\CacheInterface')->getMock();
diff --git a/app/code/Magento/Theme/Test/Unit/Model/PageLayout/Config/BuilderTest.php b/app/code/Magento/Theme/Test/Unit/Model/PageLayout/Config/BuilderTest.php
index 5d7df0ddef1b49bcff03747c1fbfafecfc904d5a..1010c6aa3b3140ac9daeeb5a8d72528e7f5b3585 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/PageLayout/Config/BuilderTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/PageLayout/Config/BuilderTest.php
@@ -27,7 +27,7 @@ class BuilderTest extends \PHPUnit_Framework_TestCase
     protected $fileCollector;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Theme\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $themeCollection;
 
@@ -47,7 +47,7 @@ class BuilderTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->themeCollection = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\Collection')
+        $this->themeCollection = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->themeCollection->expects($this->once())
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Theme/Domain/PhysicalTest.php b/app/code/Magento/Theme/Test/Unit/Model/Theme/Domain/PhysicalTest.php
index f20a513409c47ecec149efaf43c8b4b0b468849b..f26a50af1d435d673c14569e4dbb97d98ad5b85c 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Theme/Domain/PhysicalTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Theme/Domain/PhysicalTest.php
@@ -43,7 +43,7 @@ class PhysicalTest extends \PHPUnit_Framework_TestCase
         $themeFactory->expects($this->once())->method('create')->will($this->returnValue($virtualTheme));
 
         $themeCollection = $this->getMock(
-            'Magento\Theme\Model\Resource\Theme\Collection',
+            'Magento\Theme\Model\ResourceModel\Theme\Collection',
             ['addTypeFilter', 'addAreaFilter', 'addFilter', 'count'],
             [],
             '',
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Theme/FileProviderTest.php b/app/code/Magento/Theme/Test/Unit/Model/Theme/FileProviderTest.php
index 166a4c6781123bb812594b1f77ff68ad5cc4484a..e73afd5a0ebccd35a39efc636454c59bb2a4ae3d 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Theme/FileProviderTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Theme/FileProviderTest.php
@@ -15,24 +15,24 @@ class FileProviderTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\File\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Theme\File\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $file;
 
     protected function setUp()
     {
-        $fileFactory = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\File\CollectionFactory')
+        $fileFactory = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\File\CollectionFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
-        $this->file = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\File\Collection')
+        $this->file = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\File\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $fileFactory->expects($this->once())
             ->method('create')
             ->willReturn($this->file);
 
-        /** @var $fileFactory \Magento\Theme\Model\Resource\Theme\File\CollectionFactory */
+        /** @var $fileFactory \Magento\Theme\Model\ResourceModel\Theme\File\CollectionFactory */
         $this->model = new FileProvider($fileFactory);
     }
 
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Theme/FileTest.php b/app/code/Magento/Theme/Test/Unit/Model/Theme/FileTest.php
index c7ad8343df20c9a0912b78d69b66e247f1371340..eef1d5b7a47e18c75a8637dab9432192f817aaed 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Theme/FileTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Theme/FileTest.php
@@ -32,12 +32,12 @@ class FileTest extends \PHPUnit_Framework_TestCase
     protected $fileServiceFactory;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\File|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Theme\File|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\File\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Theme\File\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceCollection;
 
@@ -51,10 +51,10 @@ class FileTest extends \PHPUnit_Framework_TestCase
         $this->fileServiceFactory = $this->getMockBuilder(
             'Magento\Framework\View\Design\Theme\Customization\FileServiceFactory'
         )->disableOriginalConstructor()->getMock();
-        $this->resource = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\File')
+        $this->resource = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\File')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->resourceCollection = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\File\Collection')
+        $this->resourceCollection = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\File\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $context->expects($this->once())
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Theme/RegistrationTest.php b/app/code/Magento/Theme/Test/Unit/Model/Theme/RegistrationTest.php
index 8bf530f6a12b202efb9827e2589f1ddc918705c7..3111e1ef89f216ca8d1fd195876a3c328995b8c4 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Theme/RegistrationTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Theme/RegistrationTest.php
@@ -16,7 +16,7 @@ class RegistrationTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\Data\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Theme\Data\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collectionFactory;
 
@@ -27,7 +27,8 @@ class RegistrationTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->collectionFactory = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\Data\CollectionFactory')
+        $this->collectionFactory =
+            $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\Data\CollectionFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -75,7 +76,7 @@ class RegistrationTest extends \PHPUnit_Framework_TestCase
         $themeFromCollection = $this->getMockBuilder('Magento\Framework\View\Design\ThemeInterface')
             ->setMethods(['setType', 'save', 'getParentTheme', 'getType', 'getParentId', 'setParentId'])
             ->getMockForAbstractClass();
-        $collection = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\Data\Collection')
+        $collection = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\Data\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $customization = $this->getMockBuilder('Magento\Framework\View\Design\Theme\CustomizationInterface')
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Theme/ResolverTest.php b/app/code/Magento/Theme/Test/Unit/Model/Theme/ResolverTest.php
index 84400c9289301c9c114e1d26d9e766554bae9b08..ccdcad9af3b7d8fea2c32b7ed81b28289b74a134 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Theme/ResolverTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Theme/ResolverTest.php
@@ -18,7 +18,7 @@ class ResolverTest extends \PHPUnit_Framework_TestCase
     protected $designMock;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $themeCollectionFactoryMock;
 
@@ -28,7 +28,7 @@ class ResolverTest extends \PHPUnit_Framework_TestCase
     protected $appStateMock;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Theme\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $themeCollectionMock;
 
@@ -41,14 +41,14 @@ class ResolverTest extends \PHPUnit_Framework_TestCase
     {
         $this->designMock = $this->getMockForAbstractClass('Magento\Framework\View\DesignInterface');
         $this->themeCollectionFactoryMock = $this->getMock(
-            'Magento\Theme\Model\Resource\Theme\CollectionFactory',
+            'Magento\Theme\Model\ResourceModel\Theme\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
         $this->themeCollectionMock = $this->getMock(
-            'Magento\Theme\Model\Resource\Theme\Collection',
+            'Magento\Theme\Model\ResourceModel\Theme\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Theme/Test/Unit/Model/Theme/ThemeProviderTest.php b/app/code/Magento/Theme/Test/Unit/Model/Theme/ThemeProviderTest.php
index fbb5e71139ba7091c31e1b0122099d92199c551c..2dcfc849e0158beb56ca4e949c9db06b77cd0853 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/Theme/ThemeProviderTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/Theme/ThemeProviderTest.php
@@ -15,13 +15,13 @@ class ThemeProviderTest extends \PHPUnit_Framework_TestCase
     {
         $path = 'frontend/Magento/luma';
         $collectionFactory = $this->getMock(
-            'Magento\Theme\Model\Resource\Theme\CollectionFactory',
+            'Magento\Theme\Model\ResourceModel\Theme\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
-        $collectionMock = $this->getMock('Magento\Theme\Model\Resource\Theme\Collection', [], [], '', false);
+        $collectionMock = $this->getMock('Magento\Theme\Model\ResourceModel\Theme\Collection', [], [], '', false);
         $theme = $this->getMock('Magento\Framework\View\Design\ThemeInterface', [], [], '', false);
         $collectionMock->expects(
             $this->once()
@@ -43,7 +43,7 @@ class ThemeProviderTest extends \PHPUnit_Framework_TestCase
     {
         $themeId = 755;
         $collectionFactory = $this->getMock(
-            'Magento\Theme\Model\Resource\Theme\CollectionFactory',
+            'Magento\Theme\Model\ResourceModel\Theme\CollectionFactory',
             [],
             [],
             '',
@@ -60,7 +60,7 @@ class ThemeProviderTest extends \PHPUnit_Framework_TestCase
 
     public function testGetThemeCustomizations()
     {
-        $collectionFactory = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\CollectionFactory')
+        $collectionFactory = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\CollectionFactory')
             ->setMethods(['create'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -68,7 +68,7 @@ class ThemeProviderTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $collection = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\Collection')
+        $collection = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -84,7 +84,7 @@ class ThemeProviderTest extends \PHPUnit_Framework_TestCase
             ->with(ThemeInterface::TYPE_VIRTUAL)
             ->willReturnSelf();
 
-        /** @var \Magento\Theme\Model\Resource\Theme\CollectionFactory $collectionFactory */
+        /** @var \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory $collectionFactory */
         /** @var \Magento\Theme\Model\ThemeFactory $themeFactory */
         $themeProvider = new ThemeProvider($collectionFactory, $themeFactory);
         $this->assertInstanceOf(get_class($collection), $themeProvider->getThemeCustomizations());
diff --git a/app/code/Magento/Theme/Test/Unit/Model/ThemeTest.php b/app/code/Magento/Theme/Test/Unit/Model/ThemeTest.php
index ca1975604797e6171784fd8551fc2df033470a4d..de0361b5c9e89845476323bf980e75ccf5ce98d2 100644
--- a/app/code/Magento/Theme/Test/Unit/Model/ThemeTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Model/ThemeTest.php
@@ -31,7 +31,7 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
     protected $themeFactory;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Theme\Model\Resource\Theme\Collection
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Theme\Model\ResourceModel\Theme\Collection
      */
     protected $resourceCollection;
 
@@ -66,7 +66,7 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resourceCollection = $this->getMock(
-            'Magento\Theme\Model\Resource\Theme\Collection',
+            'Magento\Theme\Model\ResourceModel\Theme\Collection',
             [],
             [],
             '',
diff --git a/app/code/Magento/Theme/Test/Unit/Observer/CleanThemeRelatedContentObserverTest.php b/app/code/Magento/Theme/Test/Unit/Observer/CleanThemeRelatedContentObserverTest.php
index 8b1ac6b18a16c653ceb6303b6dc44a134975d41c..a5e0e79aad14dc6158855a6a83dc12ad7bf317bf 100644
--- a/app/code/Magento/Theme/Test/Unit/Observer/CleanThemeRelatedContentObserverTest.php
+++ b/app/code/Magento/Theme/Test/Unit/Observer/CleanThemeRelatedContentObserverTest.php
@@ -19,7 +19,7 @@ class CleanThemeRelatedContentObserverTest extends \PHPUnit_Framework_TestCase
     protected $themeImageFactory;
 
     /**
-     * @var \Magento\Widget\Model\Resource\Layout\Update\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Widget\Model\ResourceModel\Layout\Update\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $updateCollection;
 
@@ -39,7 +39,7 @@ class CleanThemeRelatedContentObserverTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $this->updateCollection = $this->getMockBuilder('Magento\Widget\Model\Resource\Layout\Update\Collection')
+        $this->updateCollection = $this->getMockBuilder('Magento\Widget\Model\ResourceModel\Layout\Update\Collection')
             ->setMethods(['addThemeFilter', 'delete'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Theme/composer.json b/app/code/Magento/Theme/composer.json
index ef001d016fb952d571db213a7f85d9f922a43cb0..ad1c0e03e882e02044e95c62038f06e06733586e 100644
--- a/app/code/Magento/Theme/composer.json
+++ b/app/code/Magento/Theme/composer.json
@@ -15,7 +15,8 @@
         "magento/module-require-js": "1.0.0-beta"
     },
     "suggest": {
-        "magento/module-translation": "1.0.0-beta"
+        "magento/module-translation": "1.0.0-beta",
+        "magento/module-theme-sample-data": "Sample Data version:1.0.0-beta"
     },
     "type": "magento2-module",
     "version": "1.0.0-beta",
diff --git a/app/code/Magento/Theme/etc/events.xml b/app/code/Magento/Theme/etc/events.xml
index 1d4fb79dcf8275006a9b011bd048a7fa1169b0eb..2f6155eeade189bad071d27a50cfa808f2244c1d 100644
--- a/app/code/Magento/Theme/etc/events.xml
+++ b/app/code/Magento/Theme/etc/events.xml
@@ -7,13 +7,13 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="theme_delete_before">
-        <observer name="clean_theme_related_content" instance="Magento\Theme\Observer\CleanThemeRelatedContentObserver" method="execute" />
+        <observer name="clean_theme_related_content" instance="Magento\Theme\Observer\CleanThemeRelatedContentObserver" />
     </event>
     <event name="theme_save_after">
-        <observer name="check_theme_is_assigned" instance="Magento\Theme\Observer\CheckThemeIsAssignedObserver" method="execute" />
+        <observer name="check_theme_is_assigned" instance="Magento\Theme\Observer\CheckThemeIsAssignedObserver" />
     </event>
     <event name="theme_registration_from_filesystem">
         <observer name="theme_registration_observer" instance="Magento\Theme\Observer\ThemeRegistrationObserver"
-                  method="execute" />
+                  />
     </event>
 </config>
diff --git a/app/code/Magento/Theme/etc/frontend/events.xml b/app/code/Magento/Theme/etc/frontend/events.xml
index 747cf783f4dbb53b9e8c3d9593a945c626b003f3..695fe4c94a525ff6147fbc8e6481a2bc31165762 100644
--- a/app/code/Magento/Theme/etc/frontend/events.xml
+++ b/app/code/Magento/Theme/etc/frontend/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="controller_action_layout_render_before">
-        <observer name="theme" instance="Magento\Theme\Observer\ApplyThemeCustomizationObserver" method="execute" />
+        <observer name="theme" instance="Magento\Theme\Observer\ApplyThemeCustomizationObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Theme/view/adminhtml/layout/adminhtml_system_design_theme_block.xml b/app/code/Magento/Theme/view/adminhtml/layout/adminhtml_system_design_theme_block.xml
index 667d0b881623fbb524fda78015ecc2a808b962f8..8d6114c4b3052961c1227041323b421ce3f53508 100644
--- a/app/code/Magento/Theme/view/adminhtml/layout/adminhtml_system_design_theme_block.xml
+++ b/app/code/Magento/Theme/view/adminhtml/layout/adminhtml_system_design_theme_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="theme.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">theme_grid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Theme\Model\Resource\Theme\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Theme\Model\ResourceModel\Theme\Grid\Collection</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
                     <argument name="use_ajax" xsi:type="string">1</argument>
                     <argument name="grid_url" xsi:type="url" path="*/*/grid">
diff --git a/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml b/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml
index 1d1a41632209d262c7e99da8cb001a9ffd718a3b..e2413267b89dd29112696096904445d17c5709d2 100644
--- a/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml
+++ b/app/code/Magento/Theme/view/adminhtml/templates/browser/content.phtml
@@ -13,17 +13,6 @@
 ?>
 <?php echo $block->getChildHtml('wysiwyg_files.js') ?>
 
-<div class="content-header skip-header" id="content_header">
-    <table>
-        <tr>
-            <td><h3 id="content_header_text"><?php /* @escapeNotVerified */ echo $block->getHeaderText() ?></h3></td>
-            <td class="form-buttons">
-                <?php echo $block->getButtonsHtml() ?>
-            </td>
-        </tr>
-    </table>
-</div>
-
-<div id="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_files.uploader') ?></div>
+<div id="contents-uploader" class="contents-uploader"><?php echo $block->getChildHtml('wysiwyg_files.uploader') ?></div>
 <div id="contents"></div>
 <div id="contents-newfolder" class="no-display"><?php echo $block->getChildHtml('wysiwyg_files.newfolder') ?></div>
diff --git a/app/code/Magento/Theme/view/adminhtml/templates/tabs/css.phtml b/app/code/Magento/Theme/view/adminhtml/templates/tabs/css.phtml
index 4fe1d1b1aec2550192f6dbdc1314e54b5620db06..192ca0fbcdba756148ef5980cc3fc22af3c25658 100644
--- a/app/code/Magento/Theme/view/adminhtml/templates/tabs/css.phtml
+++ b/app/code/Magento/Theme/view/adminhtml/templates/tabs/css.phtml
@@ -12,9 +12,10 @@
 <script>
 require([
     "jquery",
+    "Magento_Ui/js/modal/alert",
     "jquery/file-uploader",
     "mage/translate"
-], function($){
+], function($, alert){
 
     $( '#css_file_uploader' ).fileupload({
         dataType: 'json',
@@ -65,7 +66,9 @@ require([
          */
         fail: function(e, data) {
             $(this).val('');
-            alert($.mage.__("We don't recognize this file extension."));
+            alert({
+                content: $.mage.__("We don't recognize this file extension.")
+            });
         }
     });
 
diff --git a/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml b/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml
index 8c7e677ceeb2001019fc2ed1d6349f78419e0377..5ba996c844600d9e4151c43b1347c22d3686f669 100644
--- a/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml
+++ b/app/code/Magento/Theme/view/adminhtml/templates/tabs/js.phtml
@@ -10,11 +10,12 @@
 <script>
 require([
     "jquery",
-    'mage/template',
+    "mage/template",
+    "Magento_Ui/js/modal/alert",
     "jquery/file-uploader",
     "Magento_Theme/js/sortable",
     "mage/translate"
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
 
     $('#js_files_uploader').fileupload({
         dataType: 'json',
@@ -109,7 +110,9 @@ require([
             $(progressSelector).removeClass('upload-progress').addClass('upload-failure');
 
             $(this).val('');
-            alert($.mage.__("We don't recognize this file extension."));
+            alert({
+                content: $.mage.__("We don't recognize this file extension.")
+            });
         }
     });
 
diff --git a/app/code/Magento/Theme/view/base/requirejs-config.js b/app/code/Magento/Theme/view/base/requirejs-config.js
index e5504adda39b61a16fd166e91e159572528e41a5..f1f164431d417a681ac0e2424e6549beb2108f85 100644
--- a/app/code/Magento/Theme/view/base/requirejs-config.js
+++ b/app/code/Magento/Theme/view/base/requirejs-config.js
@@ -7,7 +7,9 @@ var config = {
     "waitSeconds": 0,
     "map": {
         "*": {
-            "mageUtils": "mage/utils/main"
+            "mageUtils": "mage/utils/main",
+            "ko": "knockoutjs/knockout",
+            "knockout": "knockoutjs/knockout"
         }
     },
     "shim": {
@@ -19,16 +21,12 @@ var config = {
         "mage/captcha": ["prototype"],
         "mage/common": ["jquery"],
         "mage/new-gallery": ["jquery"],
-        "mage/requirejs/plugin/id-normalizer": ["jquery"],
         "mage/webapi": ["jquery"],
         "jquery/ui": ["jquery"],
         "MutationObserver": ["es6-collections"],
         "tinymce": {
             "exports": "tinymce"
         },
-        "ko": {
-            "exports": "ko"
-        },
         "moment": {
             "exports": "moment"
         },
@@ -48,7 +46,6 @@ var config = {
         "jquery/jquery-storageapi": "jquery/jquery.storageapi.min",
         "text": "requirejs/text",
         "domReady": "requirejs/domReady",
-        "ko": "ko/ko",
         "tinymce": "tiny_mce/tiny_mce_src"
     },
     "deps": [
diff --git a/app/code/Magento/Theme/view/frontend/templates/html/title.phtml b/app/code/Magento/Theme/view/frontend/templates/html/title.phtml
index 1b9fb45d47c1dac2f4d6de80af76b6bcf66fdd47..f6941ca9ef234cce21d03f68ded26a04682c8722 100644
--- a/app/code/Magento/Theme/view/frontend/templates/html/title.phtml
+++ b/app/code/Magento/Theme/view/frontend/templates/html/title.phtml
@@ -11,9 +11,9 @@
  */
 $cssClass = $block->getCssClass() ? ' ' . $block->getCssClass() : '';
 $title = '';
-if (trim($block->getPageTitle())) {
+if (trim($block->getPageHeading())) {
     $title = '<span class="base" data-ui-id="page-title-wrapper" ' .  $block->getAddBaseAttribute() . '>'
-        . $block->escapeHtml($block->getPageTitle()) . '</span>';
+        . $block->escapeHtml($block->getPageHeading()) . '</span>';
 }
 ?>
 <?php if ($title): ?>
diff --git a/app/code/Magento/Translation/Model/Inline/Parser.php b/app/code/Magento/Translation/Model/Inline/Parser.php
index 60dabb7d2db10fa4580dbbc12d1630de7ee618b5..4985ada27320cc54593236913b0ddadace63691e 100644
--- a/app/code/Magento/Translation/Model/Inline/Parser.php
+++ b/app/code/Magento/Translation/Model/Inline/Parser.php
@@ -90,7 +90,7 @@ class Parser implements \Magento\Framework\Translate\Inline\ParserInterface
     ];
 
     /**
-     * @var \Magento\Translation\Model\Resource\StringFactory
+     * @var \Magento\Translation\Model\ResourceModel\StringFactory
      */
     protected $_resourceFactory;
 
@@ -123,14 +123,14 @@ class Parser implements \Magento\Framework\Translate\Inline\ParserInterface
      * Initialize base inline translation model
      *
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Translation\Model\Resource\StringUtilsFactory $resource
+     * @param \Magento\Translation\Model\ResourceModel\StringUtilsFactory $resource
      * @param \Zend_Filter_Interface $inputFilter
      * @param \Magento\Framework\App\State $appState
      * @param \Magento\Framework\App\Cache\TypeListInterface $appCache,
      * @param \Magento\Framework\Translate\InlineInterface $translateInline
      */
     public function __construct(
-        \Magento\Translation\Model\Resource\StringUtilsFactory $resource,
+        \Magento\Translation\Model\ResourceModel\StringUtilsFactory $resource,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Zend_Filter_Interface $inputFilter,
         \Magento\Framework\App\State $appState,
@@ -164,7 +164,7 @@ class Parser implements \Magento\Framework\Translate\Inline\ParserInterface
         /** @var $validStoreId int */
         $validStoreId = $this->_storeManager->getStore()->getId();
 
-        /** @var $resource \Magento\Translation\Model\Resource\StringUtils */
+        /** @var $resource \Magento\Translation\Model\ResourceModel\StringUtils */
         $resource = $this->_resourceFactory->create();
         foreach ($translateParams as $param) {
             if ($this->_appState->getAreaCode() == \Magento\Backend\App\Area\FrontNameResolver::AREA_CODE) {
diff --git a/app/code/Magento/Translation/Model/Resource/StringUtils.php b/app/code/Magento/Translation/Model/ResourceModel/StringUtils.php
similarity index 96%
rename from app/code/Magento/Translation/Model/Resource/StringUtils.php
rename to app/code/Magento/Translation/Model/ResourceModel/StringUtils.php
index 430f9842c4b75d369f50d9a007ef3a5e096ece39..c743e7c17a5a7a3d50e96dd2046b6deacc0bf1a7 100644
--- a/app/code/Magento/Translation/Model/Resource/StringUtils.php
+++ b/app/code/Magento/Translation/Model/ResourceModel/StringUtils.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Translation\Model\Resource;
+namespace Magento\Translation\Model\ResourceModel;
 
-class StringUtils extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class StringUtils extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Locale\ResolverInterface
@@ -23,14 +23,14 @@ class StringUtils extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $scope;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Locale\ResolverInterface $localeResolver
      * @param \Magento\Framework\App\ScopeResolverInterface $scopeResolver
      * @param string $connectionName
      * @param string|null $scope
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Locale\ResolverInterface $localeResolver,
         \Magento\Framework\App\ScopeResolverInterface $scopeResolver,
         $connectionName = null,
diff --git a/app/code/Magento/Translation/Model/Resource/Translate.php b/app/code/Magento/Translation/Model/ResourceModel/Translate.php
similarity index 91%
rename from app/code/Magento/Translation/Model/Resource/Translate.php
rename to app/code/Magento/Translation/Model/ResourceModel/Translate.php
index 7a4d2240f583305a1e44101adeb90d25913647de..6f545b96bd04315961ca4ff4dddc280f6024b427 100644
--- a/app/code/Magento/Translation/Model/Resource/Translate.php
+++ b/app/code/Magento/Translation/Model/ResourceModel/Translate.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Translation\Model\Resource;
+namespace Magento\Translation\Model\ResourceModel;
 
-class Translate extends \Magento\Framework\Model\Resource\Db\AbstractDb implements
+class Translate extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements
     \Magento\Framework\Translate\ResourceInterface
 {
     /**
@@ -19,13 +19,13 @@ class Translate extends \Magento\Framework\Model\Resource\Db\AbstractDb implemen
     protected $scope;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\App\ScopeResolverInterface $scopeResolver
      * @param string $connectionName
      * @param null|string $scope
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\App\ScopeResolverInterface $scopeResolver,
         $connectionName = null,
         $scope = null
diff --git a/app/code/Magento/Translation/Model/StringUtils.php b/app/code/Magento/Translation/Model/StringUtils.php
index 4e01aacdc1564fd3f9c10fb6cc78937fbc31501c..39333512cb8814762c57dadfba1ca1a49e5b7429 100644
--- a/app/code/Magento/Translation/Model/StringUtils.php
+++ b/app/code/Magento/Translation/Model/StringUtils.php
@@ -7,8 +7,8 @@
 /**
  * String translation model
  *
- * @method \Magento\Translation\Model\Resource\StringUtils _getResource()
- * @method \Magento\Translation\Model\Resource\StringUtils getResource()
+ * @method \Magento\Translation\Model\ResourceModel\StringUtils _getResource()
+ * @method \Magento\Translation\Model\ResourceModel\StringUtils getResource()
  * @method int getStoreId()
  * @method \Magento\Translation\Model\StringUtils setStoreId(int $value)
  * @method string getTranslate()
@@ -25,7 +25,7 @@ class StringUtils extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Translation\Model\Resource\StringUtils');
+        $this->_init('Magento\Translation\Model\ResourceModel\StringUtils');
     }
 
     /**
diff --git a/app/code/Magento/Translation/etc/adminhtml/di.xml b/app/code/Magento/Translation/etc/adminhtml/di.xml
index c5f664fd48c65cf3a2861b780db81f033f29719e..1383aac904e00190147f13b29152a4c5b51e5273 100644
--- a/app/code/Magento/Translation/etc/adminhtml/di.xml
+++ b/app/code/Magento/Translation/etc/adminhtml/di.xml
@@ -7,12 +7,12 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <preference for="Magento\Framework\Translate\Inline\ConfigInterface" type="Magento\Backend\Model\Translate\Inline\Config" />
-    <type name="Magento\Translation\Model\Resource\Translate">
+    <type name="Magento\Translation\Model\ResourceModel\Translate">
         <arguments>
             <argument name="scope" xsi:type="string">admin</argument>
         </arguments>
     </type>
-    <type name="Magento\Translation\Model\Resource\StringUtils">
+    <type name="Magento\Translation\Model\ResourceModel\StringUtils">
         <arguments>
             <argument name="scope" xsi:type="string">admin</argument>
         </arguments>
diff --git a/app/code/Magento/Translation/etc/di.xml b/app/code/Magento/Translation/etc/di.xml
index 6faaeb58a0336626d44a4e0062902b92ec5d1346..4f8ccfd64333bf850bda4fd9653131f23ddb5100 100644
--- a/app/code/Magento/Translation/etc/di.xml
+++ b/app/code/Magento/Translation/etc/di.xml
@@ -10,7 +10,7 @@
     <preference for="Magento\Framework\Translate\Inline\ConfigInterface" type="Magento\Translation\Model\Inline\Config" />
     <preference for="Magento\Framework\Translate\Inline\ProviderInterface" type="Magento\Framework\Translate\Inline\Provider" />
     <preference for="Magento\Framework\Translate\Inline\ParserInterface" type="Magento\Translation\Model\Inline\Parser" />
-    <preference for="Magento\Framework\Translate\ResourceInterface" type="Magento\Translation\Model\Resource\Translate" />
+    <preference for="Magento\Framework\Translate\ResourceInterface" type="Magento\Translation\Model\ResourceModel\Translate" />
     <preference for="Magento\Framework\Translate\Inline\StateInterface" type="Magento\Framework\Translate\Inline\State" />
     <preference for="Magento\Framework\Phrase\RendererInterface" type="Magento\Framework\Phrase\Renderer\Composite" />
     <preference for="Magento\Translation\Model\Js\DataProviderInterface" type="Magento\Translation\Model\Js\DataProvider"/>
diff --git a/app/code/Magento/Ui/Component/AbstractComponent.php b/app/code/Magento/Ui/Component/AbstractComponent.php
index 27ffd158016cb207e0943056847539813cacb7a8..f6b0d543c0469531d2976f74d6831e9a34739fe6 100644
--- a/app/code/Magento/Ui/Component/AbstractComponent.php
+++ b/app/code/Magento/Ui/Component/AbstractComponent.php
@@ -9,6 +9,7 @@ use Magento\Framework\DataObject;
 use Magento\Framework\View\Element\UiComponentInterface;
 use Magento\Framework\View\Element\UiComponent\ContextInterface;
 use Magento\Framework\View\Element\UiComponent\DataSourceInterface;
+use Magento\Framework\View\Element\UiComponent\ObserverInterface;
 
 /**
  * Abstract class AbstractComponent
@@ -52,6 +53,8 @@ abstract class AbstractComponent extends DataObject implements UiComponentInterf
     ) {
         $this->context = $context;
         $this->components = $components;
+        $this->initObservers($data);
+        $this->context->getProcessor()->register($this);
         $this->_data = array_replace_recursive($this->_data, $data);
     }
 
@@ -92,6 +95,7 @@ abstract class AbstractComponent extends DataObject implements UiComponentInterf
         if ($this->hasData('buttons')) {
             $this->getContext()->addButtons($this->getData('buttons'), $this);
         }
+        $this->getContext()->getProcessor()->notify($this->getComponentName());
     }
 
     /**
@@ -239,4 +243,25 @@ abstract class AbstractComponent extends DataObject implements UiComponentInterf
     {
         return [];
     }
+
+    /**
+     * Initiate observers
+     *
+     * @param array $data
+     * @return void
+     */
+    protected function initObservers(array & $data = [])
+    {
+        if (isset($data['observers']) && is_array($data['observers'])) {
+            foreach ($data['observers'] as $observerType => $observer) {
+                if (!is_object($observer)) {
+                    $observer = $this;
+                }
+                if ($observer instanceof ObserverInterface) {
+                    $this->getContext()->getProcessor()->attach($observerType, $observer);
+                }
+                unset($data['observers']);
+            }
+        }
+    }
 }
diff --git a/app/code/Magento/Ui/Component/Filters.php b/app/code/Magento/Ui/Component/Filters.php
index c250487fc91367abf1d81dbb39ca2b08a572160a..dadcdc2f09535bb7b8275eedea8f52f8dfc1b55f 100644
--- a/app/code/Magento/Ui/Component/Filters.php
+++ b/app/code/Magento/Ui/Component/Filters.php
@@ -5,13 +5,57 @@
  */
 namespace Magento\Ui\Component;
 
+use Magento\Framework\View\Element\UiComponent\ContextInterface;
+use Magento\Framework\View\Element\UiComponent\ObserverInterface;
+use Magento\Framework\View\Element\UiComponentFactory;
+use Magento\Framework\View\Element\UiComponentInterface;
+use Magento\Ui\Component\Listing\Columns\ColumnInterface;
+
 /**
  * Class Filters
  */
-class Filters extends AbstractComponent
+class Filters extends AbstractComponent implements ObserverInterface
 {
     const NAME = 'filters';
 
+    /**
+     * Filters created from columns
+     *
+     * @var UiComponentInterface[]
+     */
+    protected $columnFilters = [];
+
+    /**
+     * Maps filter declaration to type
+     *
+     * @var array
+     */
+    protected $filterMap = [
+        'text' => 'filterInput',
+        'textRange' => 'filterRange',
+        'select' => 'filterSelect',
+        'dateRange' => 'filterDate',
+    ];
+
+    /**
+     * @var UiComponentFactory
+     */
+    protected $uiComponentFactory;
+
+    /**
+     * @inheritDoc
+     */
+    public function __construct(
+        ContextInterface $context,
+        UiComponentFactory $uiComponentFactory,
+        array $components = [],
+        array $data = []
+    ) {
+        parent::__construct($context, $components, $data);
+        $this->uiComponentFactory = $uiComponentFactory;
+    }
+
+
     /**
      * Get component name
      *
@@ -21,4 +65,52 @@ class Filters extends AbstractComponent
     {
         return static::NAME;
     }
+
+    /**
+     * @inheritDoc
+     */
+    public function update(UiComponentInterface $component)
+    {
+        if ($component instanceof ColumnInterface) {
+            $filterType = $component->getData('config/filter');
+            if (!$filterType) {
+                return;
+            }
+
+            if (isset($this->filterMap[$filterType])) {
+                $filterComponent = $this->uiComponentFactory->create(
+                    $component->getName(),
+                    $this->filterMap[$filterType],
+                    ['context' => $this->getContext()]
+                );
+                $filterComponent->setData('config', $component->getConfiguration());
+                $filterComponent->prepare();
+                $this->addComponent($component->getName(), $filterComponent);
+            }
+        }
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function addComponent($name, UiComponentInterface $component)
+    {
+        $this->columnFilters[$name] = $component;
+        parent::addComponent($name, $component);
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getChildComponents()
+    {
+        $result = parent::getChildComponents();
+        foreach (array_keys($this->columnFilters) as $componentName) {
+            if ($this->getComponent($componentName)) {
+                unset($result[$componentName]);
+            }
+        }
+
+        return $result;
+    }
 }
diff --git a/app/code/Magento/Ui/Component/Filters/Type/Date.php b/app/code/Magento/Ui/Component/Filters/Type/Date.php
index f1689efa87af25bc441fc8a0669ebe0b903427df..98e782a4da1c201b8820f6596e189242b0752b1c 100644
--- a/app/code/Magento/Ui/Component/Filters/Type/Date.php
+++ b/app/code/Magento/Ui/Component/Filters/Type/Date.php
@@ -66,16 +66,40 @@ class Date extends AbstractFilter
         if (isset($this->filterData[$this->getName()])) {
             $value = $this->filterData[$this->getName()];
 
-            if (!empty($value)) {
-                $value = $this->wrappedComponent->convertDate($value);
+            if (empty($value)) {
+                return;
+            }
 
-                $filter = $this->filterBuilder->setConditionType('eq')
-                    ->setField($this->getName())
-                    ->setValue($value->format('Y-m-d H:i:s'))
-                    ->create();
+            if (is_array($value)) {
+                if (isset($value['from'])) {
+                    $this->applyFilterByType('gteq', $this->wrappedComponent->convertDate($value['from']));
+                }
 
-                $this->getContext()->getDataProvider()->addFilter($filter);
+                if (isset($value['to'])) {
+                    $this->applyFilterByType('lteq', $this->wrappedComponent->convertDate($value['to']));
+                }
+            } else {
+                $this->applyFilterByType('eq', $this->wrappedComponent->convertDate($value));
             }
         }
     }
+
+    /**
+     * Apply filter by its type
+     *
+     * @param string $type
+     * @param string $value
+     * @return void
+     */
+    protected function applyFilterByType($type, $value)
+    {
+        if (!empty($value)) {
+            $filter = $this->filterBuilder->setConditionType($type)
+                ->setField($this->getName())
+                ->setValue($value->format('Y-m-d H:i:s'))
+                ->create();
+
+            $this->getContext()->getDataProvider()->addFilter($filter);
+        }
+    }
 }
diff --git a/app/code/Magento/Ui/Component/Form/Element/MultiSelect.php b/app/code/Magento/Ui/Component/Form/Element/MultiSelect.php
new file mode 100644
index 0000000000000000000000000000000000000000..93fd7f600e0f3a95032164f880a0cc46ba3b437a
--- /dev/null
+++ b/app/code/Magento/Ui/Component/Form/Element/MultiSelect.php
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Ui\Component\Form\Element;
+
+class MultiSelect extends Select
+{
+    const NAME = 'multiselect';
+
+    const DEFAULT_SIZE = 6;
+
+    /**
+     * @inheritDoc
+     */
+    public function prepare()
+    {
+        $config['size'] = self::DEFAULT_SIZE;
+        $this->setData('config', array_replace_recursive((array)$this->getData('config'), $config));
+        parent::prepare();
+    }
+}
diff --git a/app/code/Magento/Ui/Component/Listing/Columns.php b/app/code/Magento/Ui/Component/Listing/Columns.php
index b0f3142b920a61fccbd123c708ad40d5ef4ef08f..29eaf63f6bafdbfb40de35a712e4a867ef8f3046 100644
--- a/app/code/Magento/Ui/Component/Listing/Columns.php
+++ b/app/code/Magento/Ui/Component/Listing/Columns.php
@@ -44,25 +44,7 @@ class Columns extends AbstractComponent
                 }
             }
         }
-        $this->buildUrlsForInlineEditing();
-        parent::prepare();
-    }
 
-    /**
-     * Build urls for inline editing
-     *
-     * @return void
-     */
-    protected function buildUrlsForInlineEditing()
-    {
-        $config = $this->getConfiguration();
-        if (isset($config['editorConfig']) && isset($config['editorConfig']['clientConfig'])) {
-            foreach ($config['editorConfig']['clientConfig'] as $key => &$value) {
-                if (in_array($key, ['saveUrl', 'validateUrl'])) {
-                    $value = $this->getContext()->getUrl($value);
-                }
-            }
-        }
-        $this->setData('config', $config);
+        parent::prepare();
     }
 }
diff --git a/app/code/Magento/Ui/Component/MassAction.php b/app/code/Magento/Ui/Component/MassAction.php
index 025c9987871949eb093500683b7bae36dd7f1361..4acb21e7cf97262160043084a7ed51d44983be76 100644
--- a/app/code/Magento/Ui/Component/MassAction.php
+++ b/app/code/Magento/Ui/Component/MassAction.php
@@ -23,7 +23,13 @@ class MassAction extends AbstractComponent
             $config['actions'][] = $actionComponent->getConfiguration();
         };
 
-        $this->setData('config', array_replace_recursive($config, $this->getConfiguration()));
+        $origConfig = $this->getConfiguration();
+        if ($origConfig !== $config) {
+            $config = array_replace_recursive($config, $origConfig);
+        }
+
+        $this->setData('config', $config);
+        $this->components = [];
 
         parent::prepare();
     }
diff --git a/app/code/Magento/Ui/DataProvider/AbstractDataProvider.php b/app/code/Magento/Ui/DataProvider/AbstractDataProvider.php
index 9ecc7a903f771fd63477ad683574263b00dd58fa..f37eddfa303bb754dee1baff52dc3cff8b7b4c38 100644
--- a/app/code/Magento/Ui/DataProvider/AbstractDataProvider.php
+++ b/app/code/Magento/Ui/DataProvider/AbstractDataProvider.php
@@ -6,7 +6,7 @@
 namespace Magento\Ui\DataProvider;
 
 use Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 abstract class AbstractDataProvider implements DataProviderInterface
 {
diff --git a/app/code/Magento/Ui/Model/Bookmark.php b/app/code/Magento/Ui/Model/Bookmark.php
index 632e381dc78fd9fead77404ce24dd557b36713c2..e284040702d3823922fa6920266ac04477b27643 100644
--- a/app/code/Magento/Ui/Model/Bookmark.php
+++ b/app/code/Magento/Ui/Model/Bookmark.php
@@ -12,8 +12,8 @@ use Magento\Framework\Model\AbstractExtensibleModel;
 use Magento\Framework\Model\Context;
 use Magento\Framework\Registry;
 use Magento\Ui\Api\Data\BookmarkInterface;
-use Magento\Ui\Model\Resource\Bookmark\Collection;
-use Magento\Ui\Model\Resource\Bookmark as ResourceBookmark;
+use Magento\Ui\Model\ResourceModel\Bookmark\Collection;
+use Magento\Ui\Model\ResourceModel\Bookmark as ResourceBookmark;
 
 /**
  * Domain class Bookmark
diff --git a/app/code/Magento/Ui/Model/Resource/Bookmark.php b/app/code/Magento/Ui/Model/ResourceModel/Bookmark.php
similarity index 83%
rename from app/code/Magento/Ui/Model/Resource/Bookmark.php
rename to app/code/Magento/Ui/Model/ResourceModel/Bookmark.php
index 79f0d0d39032dbfbf139547fe9c09935310344b7..7cc214fdf111422ab2750c30f6bb9086724cfade 100644
--- a/app/code/Magento/Ui/Model/Resource/Bookmark.php
+++ b/app/code/Magento/Ui/Model/ResourceModel/Bookmark.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Ui\Model\Resource;
+namespace Magento\Ui\Model\ResourceModel;
 
-use Magento\Framework\Model\Resource\Db\AbstractDb;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb;
 
 /**
  * Bookmark resource
@@ -18,12 +18,12 @@ class Bookmark extends AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Ui/Model/Resource/Bookmark/Collection.php b/app/code/Magento/Ui/Model/ResourceModel/Bookmark/Collection.php
similarity index 70%
rename from app/code/Magento/Ui/Model/Resource/Bookmark/Collection.php
rename to app/code/Magento/Ui/Model/ResourceModel/Bookmark/Collection.php
index 45d0ffb0cb1ca91b395b98b00e876774079938ea..354ab273b59a330cfdad25e03161dc102eac7e41 100644
--- a/app/code/Magento/Ui/Model/Resource/Bookmark/Collection.php
+++ b/app/code/Magento/Ui/Model/ResourceModel/Bookmark/Collection.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Ui\Model\Resource\Bookmark;
+namespace Magento\Ui\Model\ResourceModel\Bookmark;
 
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 /**
  * Bookmark Collection
@@ -19,6 +19,6 @@ class Collection extends AbstractCollection
      */
     protected function _construct()
     {
-        $this->_init('Magento\Ui\Model\Bookmark', 'Magento\Ui\Model\Resource\Bookmark');
+        $this->_init('Magento\Ui\Model\Bookmark', 'Magento\Ui\Model\ResourceModel\Bookmark');
     }
 }
diff --git a/app/code/Magento/Ui/Model/Resource/BookmarkRepository.php b/app/code/Magento/Ui/Model/ResourceModel/BookmarkRepository.php
similarity index 94%
rename from app/code/Magento/Ui/Model/Resource/BookmarkRepository.php
rename to app/code/Magento/Ui/Model/ResourceModel/BookmarkRepository.php
index ee85ccbdac15954692b18818b946ce43f8f7805f..6b095ae5915b28dd57cc26d155ab571bdf688859 100644
--- a/app/code/Magento/Ui/Model/Resource/BookmarkRepository.php
+++ b/app/code/Magento/Ui/Model/ResourceModel/BookmarkRepository.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Ui\Model\Resource;
+namespace Magento\Ui\Model\ResourceModel;
 
 use Magento\Framework\Api\SearchCriteriaInterface;
 use Magento\Framework\Api\SortOrder;
 use Magento\Ui\Api\BookmarkRepositoryInterface;
 use Magento\Framework\Api\Search\FilterGroup;
 use Magento\Ui\Api\Data\BookmarkInterface;
-use Magento\Ui\Model\Resource\Bookmark\Collection;
+use Magento\Ui\Model\ResourceModel\Bookmark\Collection;
 use Magento\Framework\Exception\CouldNotDeleteException;
 use Magento\Framework\Exception\CouldNotSaveException;
 use Magento\Framework\Exception\NoSuchEntityException;
@@ -28,7 +28,7 @@ class BookmarkRepository implements BookmarkRepositoryInterface
     protected $bookmarkFactory;
 
     /**
-     * @var \Magento\Ui\Model\Resource\Bookmark
+     * @var \Magento\Ui\Model\ResourceModel\Bookmark
      */
     protected $bookmarkResourceModel;
 
@@ -44,7 +44,7 @@ class BookmarkRepository implements BookmarkRepositoryInterface
      */
     public function __construct(
         \Magento\Ui\Api\Data\BookmarkInterfaceFactory $bookmarkFactory,
-        \Magento\Ui\Model\Resource\Bookmark $bookmarkResourceModel,
+        \Magento\Ui\Model\ResourceModel\Bookmark $bookmarkResourceModel,
         \Magento\Ui\Api\Data\BookmarkSearchResultsInterfaceFactory $searchResultsFactory
     ) {
 
@@ -99,7 +99,7 @@ class BookmarkRepository implements BookmarkRepositoryInterface
         $searchResults = $this->searchResultsFactory->create();
         $searchResults->setSearchCriteria($searchCriteria);
 
-        /** @var \Magento\Ui\Model\Resource\Bookmark\Collection $collection */
+        /** @var \Magento\Ui\Model\ResourceModel\Bookmark\Collection $collection */
         $collection = $this->bookmarkFactory->create()->getCollection();
         // Add filters from root filter group to the collection
         foreach ($searchCriteria->getFilterGroups() as $group) {
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Control/ActionTest.php b/app/code/Magento/Ui/Test/Unit/Component/Control/ActionTest.php
index be25a5957f10d22e90fc5f2b91be11910b60b342..6d02b1395bad9608ddcbb2b8032e9366d4a9af3b 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Control/ActionTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Control/ActionTest.php
@@ -28,9 +28,14 @@ class ActionTest extends \PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
+        $context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $context->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->objectManager = new ObjectManager($this);
-
-        $this->action = $this->objectManager->getObject('Magento\Ui\Component\Control\Action');
+        $this->action = $this->objectManager->getObject('Magento\Ui\Component\Control\Action', ['context' => $context]);
     }
 
     /**
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Control/LinkTest.php b/app/code/Magento/Ui/Test/Unit/Component/Control/LinkTest.php
index 1615690f8674f3668f502e6b45328c535286fe74..00cd56b56f84e66ea8055b2d51c64763d3dbfdb0 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Control/LinkTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Control/LinkTest.php
@@ -28,9 +28,15 @@ class LinkTest extends \PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
-        $this->objectManager = new ObjectManager($this);
+        $context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $context->expects($this->any())->method('getProcessor')->willReturn($processor);
 
-        $this->link = $this->objectManager->getObject('Magento\Ui\Component\Control\Link');
+        $this->objectManager = new ObjectManager($this);
+        $this->link = $this->objectManager->getObject('Magento\Ui\Component\Control\Link', ['context' => $context]);
     }
 
     /**
diff --git a/app/code/Magento/Ui/Test/Unit/Component/ExportButtonTest.php b/app/code/Magento/Ui/Test/Unit/Component/ExportButtonTest.php
index 0e65e804ce8583c7ab67147c31c46a575156edd7..dc6a1004b69fb79cfc77137f6b2cd63ca72d089b 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/ExportButtonTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/ExportButtonTest.php
@@ -29,6 +29,12 @@ class ExportButtonTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
+        $context = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
+            ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $context->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->objectManager = new ObjectManager($this);
 
         $this->urlBuilderMock = $this->getMockBuilder('Magento\Framework\UrlInterface')
@@ -37,7 +43,8 @@ class ExportButtonTest extends \PHPUnit_Framework_TestCase
         $this->model = $this->objectManager->getObject(
             'Magento\Ui\Component\ExportButton',
             [
-                'urlBuilder' => $this->urlBuilderMock
+                'urlBuilder' => $this->urlBuilderMock,
+                'context' => $context,
             ]
         );
     }
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateRangeTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateRangeTest.php
index 6a2a0b545678dc66181b408795e15be8bebbba4d..29262bc9e3f8679cbca8e3cfabfa71cd1dcf8da1 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateRangeTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateRangeTest.php
@@ -48,6 +48,10 @@ class DateRangeTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             ['create'],
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php
index 79af8056579f644d965f348b20302f9c8dd122b6..e921d1d52d19b885e960189277e835f3b0f584a8 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/DateTest.php
@@ -48,6 +48,10 @@ class DateTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             ['create'],
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/InputTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/InputTest.php
index a3736ad6bd5028bbfc4e2201253a6aaa4043a59c..e4b291134e6f9df9902cc55bf29876cf8efa3d02 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/InputTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/InputTest.php
@@ -48,6 +48,10 @@ class InputTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             ['create'],
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/RangeTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/RangeTest.php
index d28cb78ee21c9e8dd2535003786193975c1e9f45..8907f0c02aacbd47767e9760df915611a4654507 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/RangeTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/RangeTest.php
@@ -47,7 +47,10 @@ class RangeTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             [],
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/SelectTest.php b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/SelectTest.php
index 45b200fc58494f0964058447e5fe04cb97a5de94..469e8ef5696537a84d0216a9f18d0b2798de62eb 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/SelectTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Filters/Type/SelectTest.php
@@ -48,6 +48,10 @@ class SelectTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
         $this->uiComponentFactory = $this->getMock(
             'Magento\Framework\View\Element\UiComponentFactory',
             ['create'],
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Form/Field/MultilineTest.php b/app/code/Magento/Ui/Test/Unit/Component/Form/Field/MultilineTest.php
index c1e717c1525fed4c226a20a697b0e9ce5f488172..c724bc049fedb5959e8266b584a8b8aef9295bbb 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Form/Field/MultilineTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Form/Field/MultilineTest.php
@@ -47,6 +47,10 @@ class MultilineTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
             ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
 
         $this->multiline = new Multiline(
             $this->contextMock,
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Form/FieldTest.php b/app/code/Magento/Ui/Test/Unit/Component/Form/FieldTest.php
index 86a47115d31129abfedb6fe3ceafafc394879912..a5462493e45d7214aedad235ccd63568f43208c7 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Form/FieldTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Form/FieldTest.php
@@ -56,6 +56,10 @@ class FieldTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
             ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
 
         $this->field = new Field(
             $this->contextMock,
@@ -138,7 +142,7 @@ class FieldTest extends \PHPUnit_Framework_TestCase
         $wrappedComponentMock->expects($this->once())
             ->method('getChildComponents')
             ->willReturn($this->getComponentsMock());
-        $wrappedComponentMock->expects($this->exactly(2))
+        $wrappedComponentMock->expects($this->any())
             ->method('getComponentName')
             ->willReturn(self::COMPONENT_NAME);
         $wrappedComponentMock->expects($this->once())
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Listing/Columns/ColumnTest.php b/app/code/Magento/Ui/Test/Unit/Component/Listing/Columns/ColumnTest.php
index 98005246955763c90120fd66e06ff8f9eabb0a1a..c42ba043d2db78a7763dc845c5567121e1ba70fe 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Listing/Columns/ColumnTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Listing/Columns/ColumnTest.php
@@ -43,6 +43,10 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
             true,
             []
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
     }
 
     /**
@@ -78,7 +82,10 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
     public function testPrepareItems()
     {
         $testItems = ['item1','item2', 'item3'];
-        $column = $this->objectManager->getObject('Magento\Ui\Component\Listing\Columns\Column');
+        $column = $this->objectManager->getObject(
+            'Magento\Ui\Component\Listing\Columns\Column',
+            ['context' => $this->contextMock]
+        );
 
         $this->assertEquals($testItems, $column->prepareItems($testItems));
     }
diff --git a/app/code/Magento/Ui/Test/Unit/Component/Listing/ColumnsTest.php b/app/code/Magento/Ui/Test/Unit/Component/Listing/ColumnsTest.php
index fca1b2a4eded577e2f550170522318559b310a07..e381cc7a096643719291d4cc89647b7e963ecbb6 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/Listing/ColumnsTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/Listing/ColumnsTest.php
@@ -42,6 +42,10 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase
             true,
             []
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
     }
 
     /**
@@ -105,10 +109,6 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase
         $this->contextMock->expects($this->once())
             ->method('addComponentDefinition')
             ->with('columns', ['extends' => 'test_config_extends']);
-        $this->contextMock->expects($this->once())
-            ->method('getUrl')
-            ->with($saveUrl)
-            ->willReturn('http://localhost.com/admin/' . $saveUrl);
 
         $dataProviderMock->expects($this->once())
             ->method('getFieldMetaInfo')
@@ -152,7 +152,7 @@ class ColumnsTest extends \PHPUnit_Framework_TestCase
                 'test_config_data' => 'test_config_value',
                 'editorConfig' => [
                     'clientConfig' => [
-                        'saveUrl' => 'http://localhost.com/admin/' . $saveUrl,
+                        'saveUrl' => $saveUrl,
                     ]
                 ]
             ],
diff --git a/app/code/Magento/Ui/Test/Unit/Component/ListingTest.php b/app/code/Magento/Ui/Test/Unit/Component/ListingTest.php
index 9ee36c9ad4acbdda69373ad5fc92482f626af166..530e02138f1849db442f29650cd747d943cf2988 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/ListingTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/ListingTest.php
@@ -38,6 +38,10 @@ class ListingTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
     }
 
     /**
diff --git a/app/code/Magento/Ui/Test/Unit/Component/MassAction/Columns/ColumnTest.php b/app/code/Magento/Ui/Test/Unit/Component/MassAction/Columns/ColumnTest.php
index 43b9271d4e013ab291e2e0b0346298456ef6be12..2d35559c0c1ef08270ccf82134d305830d1fcfcc 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/MassAction/Columns/ColumnTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/MassAction/Columns/ColumnTest.php
@@ -45,6 +45,10 @@ class ColumnTest extends \PHPUnit_Framework_TestCase
             true,
             []
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
 
         $this->column = $this->objectManager->getObject(
             'Magento\Ui\Component\MassAction\Columns\Column',
diff --git a/app/code/Magento/Ui/Test/Unit/Component/MassActionTest.php b/app/code/Magento/Ui/Test/Unit/Component/MassActionTest.php
index a2d2401fed792d07c4c63f4a0ff62d58435e66ad..5f4174a99b580bbe0c88b8796d918ee02bc8e7e8 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/MassActionTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/MassActionTest.php
@@ -33,6 +33,10 @@ class MassActionTest extends \PHPUnit_Framework_TestCase
 
         $this->contextMock = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ContextInterface')
             ->getMockForAbstractClass();
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
     }
 
     /**
diff --git a/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php b/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php
index fd4c63c3b28870ad1a60068d66ee86eb52c6291a..3992644a9b6fdf0347247873224614993a206a27 100644
--- a/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Component/PagingTest.php
@@ -41,6 +41,10 @@ class PagingTest extends \PHPUnit_Framework_TestCase
             true,
             []
         );
+        $processor = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\Processor')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->contextMock->expects($this->any())->method('getProcessor')->willReturn($processor);
     }
 
     /**
diff --git a/app/code/Magento/Ui/Test/Unit/Model/Resource/BookmarkRepositoryTest.php b/app/code/Magento/Ui/Test/Unit/Model/ResourceModel/BookmarkRepositoryTest.php
similarity index 97%
rename from app/code/Magento/Ui/Test/Unit/Model/Resource/BookmarkRepositoryTest.php
rename to app/code/Magento/Ui/Test/Unit/Model/ResourceModel/BookmarkRepositoryTest.php
index 937a25b75acd4584b4dd69491bb2c46465805e3f..6d488ce7c626ecf30b6087a48e7007e68c21ef27 100644
--- a/app/code/Magento/Ui/Test/Unit/Model/Resource/BookmarkRepositoryTest.php
+++ b/app/code/Magento/Ui/Test/Unit/Model/ResourceModel/BookmarkRepositoryTest.php
@@ -4,10 +4,10 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Ui\Test\Unit\Model\Resource;
+namespace Magento\Ui\Test\Unit\Model\ResourceModel;
 
 use Magento\Framework\Api\SortOrder;
-use Magento\Ui\Model\Resource\BookmarkRepository;
+use Magento\Ui\Model\ResourceModel\BookmarkRepository;
 
 /**
  * Class BookmarkRepositoryTest
@@ -25,7 +25,7 @@ class BookmarkRepositoryTest extends \PHPUnit_Framework_TestCase
     protected $bookmarkMock;
 
     /**
-     * @var \Magento\Ui\Model\Resource\Bookmark|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Ui\Model\ResourceModel\Bookmark|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $bookmarkResourceMock;
 
@@ -50,7 +50,7 @@ class BookmarkRepositoryTest extends \PHPUnit_Framework_TestCase
         $bookmarkFactoryMock->expects($this->any())
             ->method('create')
             ->willReturn($this->bookmarkMock);
-        $this->bookmarkResourceMock = $this->getMockBuilder('Magento\Ui\Model\Resource\Bookmark')
+        $this->bookmarkResourceMock = $this->getMockBuilder('Magento\Ui\Model\ResourceModel\Bookmark')
             ->disableOriginalConstructor()
             ->setMethods(['load', 'save', 'delete'])
             ->getMock();
@@ -200,7 +200,7 @@ class BookmarkRepositoryTest extends \PHPUnit_Framework_TestCase
         $filterGroup->expects($this->once())
             ->method('getFilters')
             ->willReturn([$fieldAsc, $fieldDesc]);
-        $collection = $this->getMockBuilder('Magento\Ui\Model\Resource\Bookmark\Collection')
+        $collection = $this->getMockBuilder('Magento\Ui\Model\ResourceModel\Bookmark\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $collection->expects($this->once())
diff --git a/app/code/Magento/Ui/etc/di.xml b/app/code/Magento/Ui/etc/di.xml
index 255e77ba16bc5174524c194d462a05b708d9417c..1c59a83b3d54c09352ccf933d5214e51e4771dce 100644
--- a/app/code/Magento/Ui/etc/di.xml
+++ b/app/code/Magento/Ui/etc/di.xml
@@ -15,7 +15,7 @@
     <preference for="Magento\Framework\View\Element\UiComponent\LayoutInterface" type="Magento\Framework\View\Layout\Generic"/>
     <preference for="Magento\Authorization\Model\UserContextInterface" type="Magento\User\Model\Authorization\AdminSessionUserContext"/>
     <preference for="Magento\Ui\Api\Data\BookmarkSearchResultsInterface" type="Magento\Framework\Api\SearchResults" />
-    <preference for="Magento\Ui\Api\BookmarkRepositoryInterface" type="Magento\Ui\Model\Resource\BookmarkRepository"/>
+    <preference for="Magento\Ui\Api\BookmarkRepositoryInterface" type="Magento\Ui\Model\ResourceModel\BookmarkRepository"/>
     <preference for="Magento\Ui\Api\Data\BookmarkInterface" type="Magento\Ui\Model\Bookmark"/>
     <preference for="Magento\Ui\Api\BookmarkManagementInterface" type="Magento\Ui\Model\BookmarkManagement"/>
     <preference for="Magento\Framework\View\TemplateEngine\Xhtml\ResultInterface" type="Magento\Ui\TemplateEngine\Xhtml\Result"/>
diff --git a/app/code/Magento/Ui/view/base/requirejs-config.js b/app/code/Magento/Ui/view/base/requirejs-config.js
index b96c395b7c5582be713dd54b917241f72653db75..604ed1e59043efd150359f4a8381cb3a72488a63 100644
--- a/app/code/Magento/Ui/view/base/requirejs-config.js
+++ b/app/code/Magento/Ui/view/base/requirejs-config.js
@@ -9,10 +9,13 @@ var config = {
     },
     map: {
         '*': {
-            uiComponent: 'Magento_Ui/js/lib/component/main',
-            uiRegistry: 'Magento_Ui/js/lib/registry/registry',
-            uiLayout: 'Magento_Ui/js/core/renderer/layout',
-            uiClass: 'Magento_Ui/js/lib/class'
+            uiElement:      'Magento_Ui/js/lib/core/element/element',
+            uiCollection:   'Magento_Ui/js/lib/core/collection',
+            uiComponent:    'Magento_Ui/js/lib/core/collection',
+            uiClass:        'Magento_Ui/js/lib/core/class',
+            uiEvents:       'Magento_Ui/js/lib/core/events',
+            uiRegistry:     'Magento_Ui/js/lib/registry/registry',
+            uiLayout:       'Magento_Ui/js/core/renderer/layout'
         }
     }
 };
diff --git a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
index edb853da11302f136131afa172f139bcc815a43a..090c3a9e277a5a1766d28d2dd804c87f44d38311 100755
--- a/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
+++ b/app/code/Magento/Ui/view/base/ui_component/etc/definition.xml
@@ -12,7 +12,7 @@
             <item name="template" xsi:type="string">templates/listing/default</item>
             <item name="save_parameters_in_session" xsi:type="string">1</item>
             <item name="client_root" xsi:type="string">mui/index/render</item>
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">uiComponent</item>
             </item>
         </argument>
@@ -20,17 +20,22 @@
 
     <paging class="Magento\Ui\Component\Paging">
         <argument name="data" xsi:type="array">
-            <item name="template" xsi:type="string">templates/paging/default</item>
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/paging/paging</item>
+                <item name="displayArea" xsi:type="string">bottom</item>
             </item>
         </argument>
     </paging>
 
     <filters class="Magento\Ui\Component\Filters">
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/filters/filters</item>
+                <item name="displayArea" xsi:type="string">dataGridFilters</item>
+                <item name="dataScope" xsi:type="string">filters</item>
+            </item>
+            <item name="observers" xsi:type="array">
+                <item name="column" xsi:type="string">column</item>
             </item>
         </argument>
     </filters>
@@ -39,7 +44,6 @@
             <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/search/search</item>
                 <item name="displayArea" xsi:type="string">dataGridFilters</item>
-
             </item>
         </argument>
     </filterSearch>
@@ -52,8 +56,8 @@
     </filterSelect>
     <filterRange class="Magento\Ui\Component\Filters\Type\Range">
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
-                <item name="component" xsi:type="string">Magento_Ui/js/grid/filters/group</item>
+            <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/grid/filters/range</item>
             </item>
         </argument>
     </filterRange>
@@ -73,7 +77,7 @@
     </filterDate>
     <container class="Magento\Ui\Component\Container">
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">uiComponent</item>
             </item>
             <item name="template" xsi:type="string">templates/container/default</item>
@@ -81,22 +85,22 @@
     </container>
     <massaction class="Magento\Ui\Component\MassAction">
         <argument name="data" xsi:type="array">
-            <item name="template" xsi:type="string">templates/listingcontainer/massaction/default</item>
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/massactions</item>
+                <item name="displayArea" xsi:type="string">bottom</item>
             </item>
         </argument>
     </massaction>
     <actions class="Magento\Ui\Component\Control\Action">
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
             </item>
         </argument>
     </actions>
     <action class="Magento\Ui\Component\Action">
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">uiComponent</item>
             </item>
         </argument>
@@ -104,7 +108,7 @@
 
     <columns class="Magento\Ui\Component\Listing\Columns">
         <argument name="data" xsi:type="array">
-            <item name="js_config" xsi:type="array">
+            <item name="config" xsi:type="array">
                 <item name="component" xsi:type="string">Magento_Ui/js/grid/listing</item>
             </item>
         </argument>
@@ -112,9 +116,37 @@
     <column class="Magento\Ui\Component\Listing\Columns\Column">
         <argument name="data" xsi:type="array">
             <item name="state_prefix" xsi:type="string">columns</item>
+            <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/column</item>
+                <item name="dataType" xsi:type="string">text</item>
+            </item>
         </argument>
     </column>
+    <actionsColumn class="Magento\Ui\Component\Listing\Columns\Column">
+        <argument name="data" xsi:type="array">
+            <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/actions</item>
+                <item name="dataType" xsi:type="string">actions</item>
+                <item name="label" xsi:type="string" translate="true">Action</item>
+            </item>
+        </argument>
+    </actionsColumn>
+    <selectionsColumn class="Magento\Ui\Component\MassAction\Columns\Column">
+        <argument name="data" xsi:type="array">
+            <item name="state_prefix" xsi:type="string">columns</item>
+            <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/grid/columns/multiselect</item>
+            </item>
+        </argument>
+    </selectionsColumn>
 
+    <component class="Magento\Ui\Component\Container">
+        <argument name="data" xsi:type="array">
+            <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">uiComponent</item>
+            </item>
+        </argument>
+    </component>
 
     <form class="Magento\Ui\Component\Form">
         <argument name="data" xsi:type="array">
@@ -167,7 +199,7 @@
             </item>
         </argument>
     </select>
-    <multiselect class="Magento\Ui\Component\Form\Element\Select">
+    <multiselect class="Magento\Ui\Component\Form\Element\MultiSelect">
         <argument name="data" xsi:type="array">
             <item name="template" xsi:type="string">ui/form/element/multiselect</item>
             <item name="js_config" xsi:type="array">
@@ -177,6 +209,9 @@
                     <item name="elementTmpl" xsi:type="string">ui/form/element/multiselect</item>
                 </item>
             </item>
+            <item name="config" xsi:type="array">
+                <item name="size" xsi:type="string">6</item>
+            </item>
         </argument>
     </multiselect>
     <textarea class="Magento\Ui\Component\Form\Element\Textarea">
@@ -212,7 +247,7 @@
     <image class="Magento\Ui\Component\Form\Element\DataType\Media">
         <argument name="data" xsi:type="array">
             <item name="js_config" xsi:type="array">
-                <item name="component" xsi:type="string">Magento_Ui/js/form/element/abstract</item>
+                <item name="component" xsi:type="string">Magento_Ui/js/form/element/media</item>
                 <item name="config" xsi:type="array">
                     <item name="template" xsi:type="string">ui/form/field</item>
                     <item name="elementTmpl" xsi:type="string">ui/form/element/media</item>
@@ -220,6 +255,17 @@
             </item>
         </argument>
     </image>
+    <file class="Magento\Ui\Component\Form\Element\DataType\Media">
+        <argument name="data" xsi:type="array">
+            <item name="js_config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/form/element/media</item>
+                <item name="config" xsi:type="array">
+                    <item name="template" xsi:type="string">ui/form/field</item>
+                    <item name="elementTmpl" xsi:type="string">ui/form/element/media</item>
+                </item>
+            </item>
+        </argument>
+    </file>
     <date class="Magento\Ui\Component\Form\Element\DataType\Date">
         <argument name="data" xsi:type="array">
             <item name="js_config" xsi:type="array">
@@ -279,15 +325,20 @@
     <!-- bookmark -->
     <bookmark class="Magento\Ui\Component\Bookmark">
         <argument name="data" xsi:type="array">
+            <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/grid/controls/bookmarks/bookmarks</item>
+                <item name="displayArea" xsi:type="string">dataGridActions</item>
+                <item name="storageConfig" xsi:type="array">
+                    <item name="saveUrl" xsi:type="url" path="mui/bookmark/save"/>
+                    <item name="deleteUrl" xsi:type="url" path="mui/bookmark/delete"/>
+                </item>
+            </item>
         </argument>
     </bookmark>
     <exportButton class="Magento\Ui\Component\ExportButton">
         <argument name="data" xsi:type="array">
-            <item name="template" xsi:type="string">templates/export/button</item>
-            <item name="js_config" xsi:type="array">
-                <item name="component" xsi:type="string">Magento_Ui/js/grid/export</item>
-            </item>
             <item name="config" xsi:type="array">
+                <item name="component" xsi:type="string">Magento_Ui/js/grid/export</item>
                 <item name="displayArea" xsi:type="string">dataGridActions</item>
                 <item name="options" xsi:type="array">
                     <item name="cvs" xsi:type="array">
diff --git a/app/code/Magento/Ui/view/base/web/js/block-loader.js b/app/code/Magento/Ui/view/base/web/js/block-loader.js
index e3cb1b422bb31f070307e26f8f037cb3753f4e99..bc1d30db768d1b2a38c889a078fb058033e16a73 100644
--- a/app/code/Magento/Ui/view/base/web/js/block-loader.js
+++ b/app/code/Magento/Ui/view/base/web/js/block-loader.js
@@ -5,7 +5,7 @@
 define([
     'ko',
     'jquery',
-    'Magento_Ui/js/lib/loader',
+    'Magento_Ui/js/lib/ko/template/loader',
     'mage/template'
 ], function (ko, $, templateLoader, template) {
     'use strict';
diff --git a/app/code/Magento/Ui/view/base/web/js/core/app.js b/app/code/Magento/Ui/view/base/web/js/core/app.js
index 5c4593bd486a312ecc1233c2a4cc2940d2025817..b009aca28d21d930df9d33bd5b5d04ada6e10ed1 100644
--- a/app/code/Magento/Ui/view/base/web/js/core/app.js
+++ b/app/code/Magento/Ui/view/base/web/js/core/app.js
@@ -4,7 +4,8 @@
  */
 define([
     './renderer/types',
-    './renderer/layout'
+    './renderer/layout',
+    'Magento_Ui/js/lib/ko/initialize'
 ], function (types, layout) {
     'use strict';
 
diff --git a/app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js b/app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js
index 68509f43b5d1f5de1418380f4284bda3c34149f0..57082ee7922fc5d800568003888362b6aff90677 100644
--- a/app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js
+++ b/app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js
@@ -140,7 +140,7 @@ define([
                 return false;
             }
 
-            if (node.disabled === true) {
+            if (node.componentDisabled === true) {
                 return false;
             }
 
diff --git a/app/code/Magento/Ui/view/base/web/js/form/client.js b/app/code/Magento/Ui/view/base/web/js/form/client.js
index 6c6bdbfcf30067a496a874c1fd1eb24e4d4eec05..6deaa92dfb5e9a2b7ef8c64648153b60df2f2077 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/client.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/client.js
@@ -6,7 +6,7 @@ define([
     'jquery',
     'underscore',
     'mageUtils',
-    'Magento_Ui/js/lib/class'
+    'uiClass'
 ], function ($, _, utils, Class) {
     'use strict';
 
@@ -15,7 +15,7 @@ define([
 
         data = utils.serialize(data);
 
-        data.form_key = FORM_KEY;
+        data.form_key = window.FORM_KEY;
 
         if (!url) {
             save.resolve();
@@ -52,15 +52,6 @@ define([
     }
 
     return Class.extend({
-        /**
-         * Initializes DataProvider instance.
-         * @param {Object} settings - Settings to initialize object with.
-         */
-        initialize: function (config) {
-            _.extend(this, config);
-
-            return this;
-        },
 
         /**
          * Assembles data and submits it using 'utils.submit' method
@@ -79,8 +70,6 @@ define([
 
             options = options || {};
 
-            data.form_key = FORM_KEY;
-
             if (!options.redirect) {
                 url += 'back/edit';
             }
@@ -88,7 +77,7 @@ define([
             utils.submit({
                 url: url,
                 data: data
-            });
+            }, options.attributes);
 
             return this;
         }
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/collection.js b/app/code/Magento/Ui/view/base/web/js/form/components/collection.js
index bf10209d9d97cd0b08da0742c85a19f22bc8b1d5..b9c812af84d67cc253f7336808adddd342a2b30e 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/collection.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/collection.js
@@ -7,8 +7,9 @@ define([
     'mageUtils',
     'uiRegistry',
     'uiComponent',
-    'Magento_Ui/js/core/renderer/layout'
-], function (_, utils, registry, Component, layout) {
+    'uiLayout',
+    'Magento_Ui/js/modal/confirm'
+], function (_, utils, registry, Component, layout, confirm) {
     'use strict';
 
     var childTemplate = {
@@ -67,6 +68,7 @@ define([
 
             return this;
         },
+
         /**
          * Creates new item of collection, based on incoming 'index'.
          * If not passed creates one with 'new_' prefix.
@@ -152,11 +154,16 @@ define([
          *      it requires function to invoke.
          */
         removeAddress: function (elem) {
-            var confirmed = confirm(this.removeMessage);
-
-            if (confirmed) {
-                this._removeAddress(elem);
-            }
+            var self = this;
+
+            confirm({
+                content: this.removeMessage,
+                actions: {
+                    confirm: function () {
+                        self._removeAddress(elem)
+                    }
+                }
+            });
         },
 
         /**
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js b/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
index 4f7c38f4adbf958ea6689c344be3f04d079d0ff8..91cee0068ca97df41e1d0629633ad6015784b6a9 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
@@ -54,7 +54,7 @@ define([
          *
          * @return {Object} - reference to instance
          */
-        initProperties: function () {
+        initConfig: function () {
             this._super();
 
             this.displayed = [];
@@ -69,12 +69,11 @@ define([
          * @return {Object} - reference to instance
          */
         initObservable: function () {
-            this._super();
-
-            this.observe({
-                'noPreview': true,
-                'indexed': {}
-            });
+            this._super()
+                .observe({
+                    noPreview: true,
+                    indexed: {}
+                });
 
             return this;
         },
@@ -109,6 +108,27 @@ define([
             return this;
         },
 
+        /**
+         * Destroys current instance along with all of its' children.
+         * Overrides base method to clear data when this method is called.
+         */
+        destroy: function () {
+            this._super();
+            this._clearData();
+        },
+
+        /**
+         * Clears all data associated with component.
+         * @private
+         *
+         * @returns {Item} Chainable.
+         */
+        _clearData: function () {
+            this.source.remove(this.dataScope);
+
+            return this;
+        },
+
         /**
          * Formats incoming previews array via parsePreview function.
          *
@@ -157,7 +177,7 @@ define([
             items = items.map(function (index) {
                 var elem = elems[index];
 
-                preview = elem && elem.visible() ? elem.delegate('getPreview') : '';
+                preview = elem && elem.visible() ? elem.getPreview() : '';
 
                 preview = Array.isArray(preview) ?
                     _.compact(preview).join(', ') :
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/group.js b/app/code/Magento/Ui/view/base/web/js/form/components/group.js
index daf56e7e564a719823b153883f8a74bc508f24fb..468dff2ec6678aa1a13f520fcaab3e8ca248228c 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/group.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/group.js
@@ -4,11 +4,11 @@
  */
 define([
     'underscore',
-    'uiComponent'
-], function (_, Component) {
+    'uiCollection'
+], function (_, Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             visible: true,
             label: '',
@@ -88,6 +88,15 @@ define([
          */
         isMultiple: function () {
             return this.elems.getLength() > 1;
+        },
+
+        /**
+         * Returns an array of child components previews.
+         *
+         * @returns {Array}
+         */
+        getPreview: function () {
+            return this.elems.map('getPreview');
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/form/components/tab.js b/app/code/Magento/Ui/view/base/web/js/form/components/tab.js
index 61560892e3e9ddd8dc3885644eb3d874a50ea9fb..bd9537f747e23709a257beac0da9faf4941ae212 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/components/tab.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/components/tab.js
@@ -3,11 +3,11 @@
  * See COPYING.txt for license details.
  */
 define([
-    'uiComponent'
-], function (Component) {
+    'uiCollection'
+], function (Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             uniqueProp:     'active',
             active:         false,
@@ -35,14 +35,6 @@ define([
             return this;
         },
 
-        onUniqueUpdate: function (name) {
-            var active = name === this.name;
-
-            this._super();
-
-            this.trigger('active', active);
-        },
-
         /**
          * Sets active property to true, then invokes pushParams method.
          */
@@ -51,6 +43,8 @@ define([
             this.wasActivated(true);
 
             this.setUnique();
+
+            return true;
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js b/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
index b9efcbef9442138bdda049fcd33dd35024f8a642..4795afde0002490438afa082fe3e0d59b0a61e35 100755
--- a/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
@@ -6,25 +6,25 @@
 define([
     'underscore',
     'mageUtils',
-    'uiComponent',
+    'uiElement',
     'Magento_Ui/js/lib/validation/validator'
-], function (_, utils, Component, validator) {
+], function (_, utils, Element, validator) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             visible: true,
             preview: '',
             focused: false,
             required: false,
             disabled: false,
-            tmpPath: 'ui/form/element/',
             tooltipTpl: 'ui/form/element/helper/tooltip',
             'input_type': 'input',
             placeholder: '',
             description: '',
             label: '',
             error: '',
+            warn: '',
             notice: '',
             customScope: '',
             additionalClasses: {},
@@ -64,7 +64,7 @@ define([
 
             this._super();
 
-            this.observe('error disabled focused preview visible value')
+            this.observe('error disabled focused preview visible value warn')
                 .observe({
                     'required': !!rules['required-entry']
                 });
@@ -77,15 +77,20 @@ define([
          *
          * @returns {Abstract} Chainable.
          */
-        initProperties: function () {
-            var uid = utils.uniqueid();
+        initConfig: function () {
+            var uid = utils.uniqueid(),
+                name,
+                scope;
 
             this._super();
 
+            scope   = this.dataScope,
+            name    = scope.split('.').slice(1);
+
             _.extend(this, {
-                'uid': uid,
-                'noticeId': 'notice-' + uid,
-                'inputName': utils.serializeName(this.dataScope)
+                uid: uid,
+                noticeId: 'notice-' + uid,
+                inputName: utils.serializeName(name.join('.'))
             });
 
             return this;
@@ -126,6 +131,7 @@ define([
             _.extend(this.additionalClasses, {
                 required: this.required,
                 _error: this.error,
+                _warn: this.warn,
                 _disabled: this.disabled
             });
 
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/date.js b/app/code/Magento/Ui/view/base/web/js/form/element/date.js
index c9ee948d681470da296ae16a1ebe6ff213017928..d4dc131c7a29a030dbd404e30d5a4c5ca7711e13 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/date.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/date.js
@@ -20,10 +20,12 @@ define([
          *
          * @returns {Object} Chainable.
          */
-        initProperties: function () {
+        initConfig: function () {
+            this._super();
+
             this.dateFormat = utils.normalizeDate(this.dateFormat);
 
-            return this._super();
+            return this;
         },
 
         /**
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js b/app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js
deleted file mode 100644
index 99b14e19582ee7c32ae6113b313c89aa24e8d578..0000000000000000000000000000000000000000
--- a/app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js
+++ /dev/null
@@ -1,13 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-define([
-    'uiComponent'
-], function (Component) {
-    'use strict';
-
-    return Component.extend({
-    });
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/media.js b/app/code/Magento/Ui/view/base/web/js/form/element/media.js
new file mode 100644
index 0000000000000000000000000000000000000000..31b610c481bc17c31024a0e8640f05964204c7f7
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/media.js
@@ -0,0 +1,48 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'mageUtils',
+    './abstract'
+], function (utils, Abstract) {
+    'use strict';
+
+    return Abstract.extend({
+        defaults: {
+            links: {
+                value: ''
+            }
+        },
+
+        /**
+         * Initializes file component.
+         *
+         * @returns {Media} Chainable.
+         */
+        initialize: function () {
+            this._super()
+                .initFormId();
+
+            return this;
+        },
+
+        /**
+         * Defines form ID with which file input will be associated.
+         *
+         * @returns {Media} Chainable.
+         */
+        initFormId: function () {
+            var namespace;
+
+            if (this.formId) {
+                return this;
+            }
+
+            namespace   = this.name.split('.');
+            this.formId = namespace[0];
+
+            return this;
+        }
+    });
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js b/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js
index 624d2df5c7e79eaf3b3add5fd049051010a4b4e1..6c5de791d1e87337876b2919c7b1c6180729ff1a 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js
@@ -16,12 +16,11 @@ define([
         },
 
         /**
-         * Calls 'getInitialValue' of parent and if the result of it is not empty
-         * string, returs it, else returnes caption or first found option's value
+         * Splits incoming string value.
          *
-         * @returns {Array|String}
+         * @returns {Array}
          */
-        getInitialValue: function () {
+        normalizeData: function () {
             var value = this._super();
 
             return _.isString(value) ? value.split(',') : value;
@@ -29,6 +28,7 @@ define([
 
         /**
          * Defines if value has changed
+         *
          * @returns {Boolean}
          */
         hasChanged: function () {
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/select.js b/app/code/Magento/Ui/view/base/web/js/form/element/select.js
index 1298d5fd2b4d12d1fd22a3744b1b40e30f4c5643..061844da9b05a357a325bd50195fca0d140d7ad7 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/select.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/select.js
@@ -7,7 +7,7 @@ define([
     'mageUtils',
     'uiRegistry',
     './abstract',
-    'Magento_Ui/js/core/renderer/layout'
+    'uiLayout'
 ], function (_, utils, registry, Abstract, layout) {
     'use strict';
 
@@ -31,14 +31,14 @@ define([
      * @param  {Array} nodes
      * @return {Object}
      */
-    function parseOptions(nodes) {
+    function parseOptions(nodes, captionValue) {
         var caption,
             value;
 
         nodes = _.map(nodes, function (node) {
             value = node.value;
 
-            if (value === null || value === '') {
+            if (value === null || value === captionValue) {
                 if (_.isUndefined(caption)) {
                     caption = node.label;
                 }
@@ -131,7 +131,9 @@ define([
          * @returns {Object} Chainable.
          */
         initConfig: function (config) {
-            var result = parseOptions(config.options);
+            var options = config.options,
+                captionValue = config.captionValue || '',
+                result = parseOptions(options, captionValue);
 
             if (config.caption) {
                 delete result.caption;
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/textarea.js b/app/code/Magento/Ui/view/base/web/js/form/element/textarea.js
index b5d263cc344d080936252d8881bcd963fd9a06ab..2731725ae2de939d83016d2be506473169dc0a79 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/textarea.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/textarea.js
@@ -10,9 +10,9 @@ define([
 
     return Abstract.extend({
         defaults: {
-            cols:       15,
-            rows:       2,
-            template:   'ui/form/element/textarea'
+            cols: 15,
+            rows: 2,
+            template: 'ui/form/element/textarea'
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js b/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
index 638f78341d61d774a342ca07ce0aad752bb02b82..5547e3ad9dba80b8a4573e5ea08c6fc2107e710a 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
@@ -5,12 +5,10 @@
 
 define([
     'underscore',
-    'ko',
     './abstract',
     'Magento_Ui/js/lib/key-codes',
-    'mage/translate',
-    'uiLayout'
-], function (_, ko, Abstract, keyCodes, $t, layout) {
+    'mage/translate'
+], function (_, Abstract, keyCodes, $t) {
     'use strict';
 
     /**
@@ -52,20 +50,10 @@ define([
                 defaultPlaceholder: $t('Select...'),
                 lotPlaceholders: $t('Selected')
             },
-            optionsConfig: {
-                name: '${ $.name }_options',
-                component: 'Magento_Ui/js/form/element/helpers/options'
-            },
             hoverElIndex: null,
             listens: {
                 listVisible: 'cleanHoveredElement',
                 filterInputValue: 'filterOptionsList'
-            },
-            imports: {
-                options: '${ $.optionsConfig.name }:options'
-            },
-            modules: {
-                optionsProvider: '${ $.optionsConfig.name }'
             }
         },
 
@@ -134,18 +122,6 @@ define([
             return this;
         },
 
-        /**
-         * Initializes optionsProvider
-         *
-         * @returns {Object} Chainable.
-         */
-        initOptions: function () {
-            this.optionsConfig.options = this.options();
-            layout([this.optionsConfig]);
-
-            return this;
-        },
-
         /**
          * Handler outerClick event. Closed options list
          */
@@ -490,16 +466,11 @@ define([
          * @returns {String}
          */
         getPreview: function () {
-            var i = 0,
-                selected = this.getSelected(),
-                length = selected.length,
-                result = [];
-
-            for (i; i < length; i++) {
-                result.push(selected[i].label);
-            }
+            var selected = this.getSelected();
 
-            return result.join(', ');
+            return selected.map(function (option) {
+                return option.label;
+            }).join(', ');
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/form/form.js b/app/code/Magento/Ui/view/base/web/js/form/form.js
index 2a192c20c2463e29397750f0ade0e147ac0d80bd..25e193877c1804c4610d94b253b881bd1a8d5105 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/form.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/form.js
@@ -4,10 +4,10 @@
  */
 define([
     'underscore',
-    'uiComponent',
+    'uiCollection',
     'Magento_Ui/js/lib/spinner',
     './adapter'
-], function (_, Component, loader, adapter) {
+], function (_, Collection, loader, adapter) {
     'use strict';
 
     function collectData(selector) {
@@ -23,7 +23,7 @@ define([
         return result;
     }
 
-    return Component.extend({
+    return Collection.extend({
         initialize: function () {
             this._super()
                 .initAdapter()
@@ -42,7 +42,7 @@ define([
             return this;
         },
 
-        initProperties: function () {
+        initConfig: function () {
             this._super();
 
             this.selector = '[data-form-part=' + this.namespace + ']';
@@ -76,7 +76,10 @@ define([
             });
 
             source.save({
-                redirect: redirect
+                redirect: redirect,
+                attributes: {
+                    id: this.namespace
+                }
             });
         },
 
diff --git a/app/code/Magento/Ui/view/base/web/js/form/provider.js b/app/code/Magento/Ui/view/base/web/js/form/provider.js
index 8b182d2b8f2383266f101921d4e8668478c2934b..d992c8e1678bb423cfde5b2675dde6d97f655bf1 100644
--- a/app/code/Magento/Ui/view/base/web/js/form/provider.js
+++ b/app/code/Magento/Ui/view/base/web/js/form/provider.js
@@ -4,12 +4,26 @@
  */
 define([
     'underscore',
-    'uiComponent',
+    'uiElement',
     './client'
-], function (_, Component, Client) {
+], function (_, Element, Client) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
+        defaults: {
+            clientConfig: {
+                urls: {
+                    save: '${ $.submit_url }',
+                    beforeSave: '${ $.validate_url }'
+                }
+            }
+        },
+
+        /**
+         * Initializes provider component.
+         *
+         * @returns {Provider} Chainable.
+         */
         initialize: function () {
             this._super()
                 .initClient();
@@ -17,17 +31,23 @@ define([
             return this;
         },
 
+        /**
+         * Initializes client component.
+         *
+         * @returns {Provider} Chainable.
+         */
         initClient: function () {
-            this.client = new Client({
-                urls: {
-                    beforeSave: this.validate_url,
-                    save: this.submit_url
-                }
-            });
+            this.client = new Client(this.clientConfig);
 
             return this;
         },
 
+        /**
+         * Saves currently available data.
+         *
+         * @param {Object} [options] - Addtitional request options.
+         * @returns {Provider} Chainable.
+         */
         save: function (options) {
             var data = this.get('data');
 
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js
index 091cd9ee2ea570a238e72a1a27cb9eb36d579322..e1bbb011db85044800729329c92a7810d42a11e3 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js
@@ -15,12 +15,17 @@ define([
     return Column.extend({
         defaults: {
             bodyTmpl: 'ui/grid/cells/actions',
+            sortable: false,
+            draggable: false,
             actions: [],
             rows: [],
+            rowsProvider: '${ $.parentName }',
+            fieldClass: {
+                'data-grid-actions-cell': true
+            },
             templates: {
                 actions: {}
             },
-            rowsProvider: '${ $.parentName }',
             imports: {
                 rows: '${ $.rowsProvider }:rows'
             },
@@ -36,7 +41,7 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe('actions');
+                .track('actions');
 
             return this;
         },
@@ -50,7 +55,7 @@ define([
          * @returns {Array|Object}
          */
         getAction: function (rowIndex, actionIndex) {
-            var rowActions = this.actions()[rowIndex];
+            var rowActions = this.actions[rowIndex];
 
             return rowActions && actionIndex ?
                 rowActions[actionIndex] :
@@ -93,10 +98,7 @@ define([
          * @returns {ActionsColumn} Chainable.
          */
         updateActions: function () {
-            var rows = this.rows,
-                actions = rows.map(this._formatActions, this);
-
-            this.actions(actions);
+            this.actions = this.rows.map(this._formatActions, this);
 
             return this;
         },
@@ -156,6 +158,34 @@ define([
             return this;
         },
 
+        /**
+         * Creates handler for the provided action if it's required.
+         *
+         * @param {Object} action - Action object.
+         * @returns {Function|Undefined}
+         */
+        getActionHandler: function (action) {
+            var index = action.index,
+                rowIndex = action.rowIndex;
+
+            if (this.isHandlerRequired(index, rowIndex)) {
+                return this.applyAction.bind(this, index, rowIndex);
+            }
+        },
+
+        /**
+         * Checks if specified action requires a handler function.
+         *
+         * @param {String} actionIndex - Actions' identifier.
+         * @param {Number} rowIndex - Index of a row.
+         * @returns {Boolean}
+         */
+        isHandlerRequired: function (actionIndex, rowIndex) {
+            var action = this.getAction(rowIndex, actionIndex);
+
+            return _.isObject(action.callback) || action.confirm || !action.href;
+        },
+
         /**
          * Creates action callback based on its' data. If action doesn't spicify
          * a callback function than the default one will be used.
@@ -244,16 +274,13 @@ define([
         },
 
         /**
-         * Checks if specified action requires a handler function.
+         * Overrides base method, because this component
+         * can't have global field action.
          *
-         * @param {String} actionIndex - Actions' identifier.
-         * @param {Number} rowIndex - Index of a row.
-         * @returns {Boolean}
+         * @returns {Boolean} False.
          */
-        isHandlerRequired: function (actionIndex, rowIndex) {
-            var action = this.getAction(rowIndex, actionIndex);
-
-            return _.isObject(action.callback) || action.confirm || !action.href;
+        hasFieldAction: function () {
+            return false;
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
index 06ee7dea8c3f30da8b76d9d8408ea8c2e3526e23..0d113fdbae53f4ad2b7a84cc8ef2b22bc6bfb391 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
@@ -6,25 +6,27 @@ define([
     'underscore',
     'uiRegistry',
     'mageUtils',
-    'uiComponent'
-], function (_, registry, utils, Component) {
+    'uiElement'
+], function (_, registry, utils, Element) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             headerTmpl: 'ui/grid/columns/text',
             bodyTmpl: 'ui/grid/cells/text',
             disableAction: false,
+            controlVisibility: true,
             sortable: true,
             sorting: false,
             visible: true,
             draggable: true,
+            fieldClass: {},
             ignoreTmpls: {
                 fieldAction: true
             },
-            links: {
-                visible: '${ $.storageConfig.path }.visible',
-                sorting: '${ $.storageConfig.path }.sorting'
+            statefull: {
+                visible: true,
+                sorting: true
             },
             imports: {
                 exportSorting: 'sorting'
@@ -37,6 +39,18 @@ define([
             }
         },
 
+        /**
+         * Initializes column component.
+         *
+         * @returns {Column} Chainable.
+         */
+        initialize: function () {
+            this._super()
+                .initFieldClass();
+
+            return this;
+        },
+
         /**
          * Initializes observable properties.
          *
@@ -44,7 +58,27 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe('visible dragging dragover sorting disableAction');
+                .track([
+                    'visible',
+                    'sorting',
+                    'disableAction'
+                ])
+                .observe([
+                    'dragging'
+                ]);
+
+            return this;
+        },
+
+        /**
+         * Extends list of field classes.
+         *
+         * @returns {Column} Chainable.
+         */
+        initFieldClass: function () {
+            _.extend(this.fieldClass, {
+                _dragging: this.dragging
+            });
 
             return this;
         },
@@ -54,7 +88,7 @@ define([
          *
          * @param {String} state - Defines what state should be used: saved or default.
          * @param {String} [property] - Defines what columns' property should be applied.
-         *      If not specfied, then all columns stored properties will be used.
+         *      If not specified, then all columns stored properties will be used.
          * @returns {Column} Chainable.
          */
         applyState: function (state, property) {
@@ -64,7 +98,7 @@ define([
                 namespace += '.' + property;
             }
 
-            this.storage('applyState', state, namespace);
+            this.storage('applyStateOf', state, namespace);
 
             return this;
         },
@@ -78,47 +112,78 @@ define([
          * @returns {Column} Chainable.
          */
         sort: function (enable) {
-            var direction = false;
-
             if (!this.sortable) {
                 return this;
             }
 
-            if (enable !== false) {
-                direction = this.toggleDirection();
-            }
+            enable !== false ?
+                this.toggleSorting() :
+                this.sorting = false;
 
-            this.sorting(direction);
+            return this;
+        },
+
+        /**
+         * Sets descending columns' sorting.
+         *
+         * @returns {Column} Chainable.
+         */
+        sortDescending: function () {
+            if (this.sortable) {
+                this.sorting = 'desc';
+            }
 
             return this;
         },
 
         /**
-         * Exports sorting data to the dataProvider if
-         * sorting of a column is enabled.
+         * Sets ascending columns' sorting.
          *
-         * @param {(String|Boolean)} sorting - Columns' sorting state.
+         * @returns {Column} Chainable.
          */
-        exportSorting: function (sorting) {
-            if (!sorting) {
-                return;
+        sortAscending: function () {
+            if (this.sortable) {
+                this.sorting = 'asc';
             }
 
-            this.source('set', 'params.sorting', {
-                field: this.index,
-                direction: sorting
-            });
+            return this;
         },
 
         /**
          * Toggles sorting direction.
          *
-         * @returns {String} New direction.
+         * @returns {Column} Chainable.
+         */
+        toggleSorting: function () {
+            this.sorting === 'asc' ?
+                this.sortDescending() :
+                this.sortAscending();
+
+            return this;
+        },
+
+        /**
+         * Checks if column is sorted.
+         *
+         * @returns {Boolean}
+         */
+        isSorted: function () {
+            return !!this.sorting;
+        },
+
+        /**
+         * Exports sorting data to the dataProvider if
+         * sorting of a column is enabled.
          */
-        toggleDirection: function () {
-            return this.sorting() === 'asc' ?
-                'desc' :
-                'asc';
+        exportSorting: function () {
+            if (!this.sorting) {
+                return;
+            }
+
+            this.source('set', 'params.sorting', {
+                field: this.index,
+                direction: this.sorting
+            });
         },
 
         /**
@@ -151,7 +216,7 @@ define([
             var action = this.fieldAction,
                 callback;
 
-            if (!this.hasFieldAction() || this.disableAction()) {
+            if (!this.hasFieldAction() || this.disableAction) {
                 return this;
             }
 
@@ -169,12 +234,24 @@ define([
             return this;
         },
 
+        /**
+         * Returns field action handler if it was specified.
+         *
+         * @param {Object} record - Record object with which action is associated.
+         * @returns {Function|Undefined}
+         */
+        getFieldHandler: function (record) {
+            if (this.hasFieldAction()) {
+                return this.applyFieldAction.bind(this, record._rowIndex);
+            }
+        },
+
         /**
          * Creates action callback based on its' data.
          *
          * @param {Object} action - Actions' object.
          * @returns {Function|Boolean} Callback function or false
-         *      value if it was imposible create a callback.
+         *      value if it was impossible create a callback.
          */
         _getFieldCallback: function (action) {
             var args     = action.params || [],
@@ -198,11 +275,20 @@ define([
         /**
          * Ment to preprocess data associated with a current columns' field.
          *
-         * @param {*} data - Data to be preprocessed.
+         * @param {Object} record - Data to be preprocessed.
          * @returns {String}
          */
-        getLabel: function (data) {
-            return data;
+        getLabel: function (record) {
+            return record[this.index];
+        },
+
+        /**
+         * Returns list of classes that should be applied to a field.
+         *
+         * @returns {Object}
+         */
+        getFieldClass: function () {
+            return this.fieldClass;
         },
 
         /**
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js
index 90ace7d79af6ad4eb96d1c0bceb5140ccdc7afe1..19ac459e2dc476338683cc0cd350f7ee34927f28 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/date.js
@@ -15,24 +15,25 @@ define([
         },
 
         /**
-         * Initializes components' static properties.
+         * Overrides base method to normalize date format.
          *
          * @returns {DateColumn} Chainable.
          */
-        initProperties: function () {
+        initConfig: function () {
+            this._super();
+
             this.dateFormat = utils.normalizeDate(this.dateFormat);
 
-            return this._super();
+            return this;
         },
 
         /**
          * Formats incoming date based on the 'dateFormat' property.
          *
-         * @param {String} date - Date to be formatted.
          * @returns {String} Formatted date.
          */
-        getLabel: function (date) {
-            date = moment(date);
+        getLabel: function () {
+            var date = moment(this._super());
 
             date = date.isValid() ?
                 date.format(this.dateFormat) :
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
index b48f1c9ed8a35adc457b2f03b0190a2cb4d7c3d2..80ab7e814ae5cfcad6b2a15cd3646ea08cdad69c 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
@@ -13,14 +13,19 @@ define([
         defaults: {
             headerTmpl: 'ui/grid/columns/multiselect',
             bodyTmpl: 'ui/grid/cells/multiselect',
+            controlVisibility: false,
             sortable: false,
+            draggable: false,
             menuVisible: false,
             excludeMode: false,
             allSelected: false,
             indetermine: false,
-            selected: [],
             disabled: [],
+            selected: [],
             excluded: [],
+            fieldClass: {
+                'data-grid-checkbox-cell': true
+            },
             actions: [{
                 value: 'selectAll',
                 label: $t('Select All')
@@ -195,10 +200,9 @@ define([
          * @returns {Multiselect} Chainable.
          */
         selectPage: function () {
-            var selected = _.difference(
-                _.union(this.selected(), this.getIds()),
-                this.disabled()
-            );
+            var selected = _.union(this.selected(), this.getIds());
+
+            selected = _.difference(selected, this.disabled());
 
             this.selected(selected);
 
@@ -436,6 +440,16 @@ define([
             return this;
         },
 
+        /**
+         * Overrides base method, because this component
+         * can't have global field action.
+         *
+         * @returns {Boolean} False.
+         */
+        hasFieldAction: function () {
+            return false;
+        },
+
         /**
          * Callback method to handle changes of selected items.
          *
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/onoff.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/onoff.js
new file mode 100755
index 0000000000000000000000000000000000000000..407544fd2ccdc6d29b6324b6f91a08cfacc70bbb
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/onoff.js
@@ -0,0 +1,139 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'underscore',
+    'mage/translate',
+    './multiselect',
+    'uiRegistry'
+], function (_, $t, Column, registry) {
+    'use strict';
+
+    return Column.extend({
+        defaults: {
+            headerTmpl: 'ui/grid/columns/onoff',
+            bodyTmpl: 'ui/grid/cells/onoff',
+            fieldClass: {
+                'admin__scope-old': true,
+                'data-grid-onoff-cell': true,
+                'data-grid-checkbox-cell': false
+            },
+            imports: {
+                selectedData: '${ $.provider }:data.selectedData'
+            },
+            listens: {
+                '${ $.provider }:reloaded': 'setDefaultSelections'
+            }
+        },
+
+        /**
+         * @param {Integer} id
+         * @returns {*}
+         */
+        getLabel: function (id) {
+            return this.selected.indexOf(id) !== -1 ? $t('On') : $t('Off');
+        },
+
+        /**
+         * Initializes components' static properties.
+         *
+         * @returns {Column} Chainable.
+         */
+        initProperties: function () {
+            this.actions = [{
+                value: 'selectPage',
+                label: $t('Select all on this page')
+            }, {
+                value: 'deselectPage',
+                label: $t('Deselect all on this page')
+            }];
+
+            return this._super();
+        },
+
+        /**
+         * Sets the ids for preselected elements
+         * @returns void
+         */
+        setDefaultSelections: function () {
+            var positionCacheValid = registry.get('position_cache_valid'),
+                key,
+                i;
+
+            registry.set('position_cache_valid', true);
+
+            if (this.selected().length === this.selectedData.length || positionCacheValid) {
+                return;
+            }
+            // Check selected data
+            for (key in this.selectedData) {
+                if (this.selectedData.hasOwnProperty(key) && this.selected().indexOf(key) === -1) {
+                    this.selected.push(key);
+                }
+            }
+            // Uncheck unselected data
+            for (i = 0; i < this.selected().length; i++) {
+                key = this.selected()[i];
+                this.selectedData.hasOwnProperty(key) || this.selected.splice(this.selected().indexOf(key), 1);
+            }
+        },
+
+        /**
+         * Show/hide action in the massaction menu
+         * @param {Integer} actionId
+         * @returns {Boolean}
+         */
+        isActionRelevant: function (actionId) {
+            var relevant = true;
+
+            switch (actionId) {
+                case 'selectPage':
+                    relevant = !this.isPageSelected(true);
+                    break;
+
+                case 'deselectPage':
+                    relevant =  this.isPageSelected();
+                    break;
+            }
+
+            return relevant;
+        },
+
+        /**
+         * Updates values of the 'allSelected'
+         * and 'indetermine' properties.
+         *
+         * @returns {Multiselect} Chainable.
+         */
+        updateState: function () {
+            var totalRecords    = this.totalRecords(),
+                selected        = this.selected().length,
+                excluded        = this.excluded().length,
+                totalSelected   = this.totalSelected(),
+                allSelected;
+
+            // When filters are enabled then totalRecords is unknown
+            if (this.getFiltering()) {
+                if (this.getFiltering().search !== '') {
+                    totalRecords = -1;
+                }
+            }
+
+            allSelected = totalRecords && totalSelected === totalRecords;
+
+            if (this.excludeMode()) {
+                if (excluded === totalRecords) {
+                    this.deselectAll();
+                }
+            } else if (totalRecords && selected === totalRecords) {
+                this.selectAll();
+            }
+
+            this.allSelected(allSelected);
+            this.indetermine(totalSelected && !allSelected);
+
+            return this;
+        }
+    });
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js
index f55a2efdd6311ec0078830eb1a50d37dc82bb3a5..afa8831e5105b4d2041ca04cc082fc776ac25409 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/select.js
@@ -3,32 +3,41 @@
  * See COPYING.txt for license details.
  */
 define([
+    'underscore',
     './column'
-], function (Column) {
+], function (_, Column) {
     'use strict';
 
     return Column.extend({
+
+        /*eslint-disable eqeqeq*/
         /**
          * Retrieves label associated with a provided value.
          *
-         * @param {Array} values - Values of the option.
          * @returns {String}
          */
-        getLabel: function (values) {
+        getLabel: function () {
             var options = this.options || [],
-                labels = [];
+                values = this._super(),
+                label = [];
+
+            if (!Array.isArray(values)) {
+                values = [values];
+            }
 
-            values = values || [];
+            values = values.map(function (value) {
+                return value + '';
+            });
 
-            /*eslint-disable eqeqeq*/
             options.forEach(function (item) {
-                if(values.indexOf(item.value) > -1) {
-                    labels.push(item.label);
+                if (_.contains(values, item.value + '')) {
+                    label.push(item.label);
                 }
             });
-            /*eslint-enable eqeqeq*/
 
-            return labels.join(', ');
+            return label.join(', ');
         }
+
+        /*eslint-enable eqeqeq*/
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js b/app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js
index 11455b30680706bf4d2ef578da5d45aa301fdbff..ef46cfc712452990de66364fd540322157ec662e 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js
@@ -13,7 +13,10 @@ define([
 
     return Column.extend({
         defaults: {
-            bodyTmpl: 'ui/grid/cells/thumbnail'
+            bodyTmpl: 'ui/grid/cells/thumbnail',
+            fieldClass: {
+                'data-grid-thumbnail-cell': true
+            }
         },
         getSrc: function (row) {
             return row[this.index + '_src']
@@ -44,6 +47,11 @@ define([
                 innerScroll: true,
                 modalClass: '_image-box',
                 buttons: []}).trigger('openModal');
+        },
+        getFieldHandler: function (row) {
+            if (this.isPreviewAvailable()) {
+                return this.preview.bind(this, row);
+            }
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
index 8bd34bb57f6a29a6413a6405275506ca6fee1db8..02ab2b1ec167fccdf4003a4832f6c3cf8176aadf 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
@@ -5,9 +5,10 @@
 define([
     'underscore',
     'mageUtils',
+    'mage/translate',
     'uiLayout',
-    'uiComponent'
-], function (_, utils, layout, Component) {
+    'uiCollection'
+], function (_, utils, $t, layout, Collection) {
     'use strict';
 
     /**
@@ -26,27 +27,14 @@ define([
         return path.join('.');
     }
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             template: 'ui/grid/controls/bookmarks/bookmarks',
+            viewTmpl: 'ui/grid/controls/bookmarks/view',
+            newViewLabel: $t('New View'),
             defaultIndex: 'default',
             activeIndex: 'default',
             hasChanges: false,
-            templates: {
-                view: {
-                    parent: '${ $.$data.name }',
-                    name: '${ $.$data.index }',
-                    label: '${ $.$data.label }',
-                    provider: '${ $.$data.provider }',
-                    component: 'Magento_Ui/js/grid/controls/bookmarks/view'
-                },
-                newView: {
-                    label: 'New View',
-                    index: '_${ Date.now() }',
-                    editing: true,
-                    isNew: true
-                }
-            },
             storageConfig: {
                 provider: '${ $.storageConfig.name }',
                 name: '${ $.name }_storage',
@@ -54,14 +42,14 @@ define([
             },
             views: {
                 default: {
-                    label: 'Default View',
+                    label: $t('Default View'),
                     index: 'default',
                     editable: false
                 }
             },
             listens: {
                 activeIndex: 'onActiveIndexChange',
-                activeView: 'checkChanges',
+                activeView: 'checkState',
                 current: 'onStateChange'
             }
         },
@@ -72,9 +60,9 @@ define([
          * @returns {Bookmarks} Chainable.
          */
         initialize: function () {
-            utils.limit(this, 'saveSate', 2000);
-            utils.limit(this, '_defaultPolyfill', 1000);
-            utils.limit(this, 'checkChanges', 50);
+            utils.limit(this, 'checkState', 5);
+            utils.limit(this, 'saveState', 2000);
+            utils.limit(this, '_defaultPolyfill', 3000);
 
             this._super()
                 .restore()
@@ -91,7 +79,16 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe('activeView hasChanges');
+                .track([
+                    'hasChanges',
+                    'editing',
+                    'activeView',
+                    'customVisible',
+                    'customLabel'
+                ])
+                .track({
+                    viewsArray: []
+                });
 
             return this;
         },
@@ -108,209 +105,436 @@ define([
         },
 
         /**
-         * Called when another element was added to the current component.
+         * Creates instances of a previously saved views.
          *
-         * @param {Object} elem - Instance of an element that was added.
          * @returns {Bookmarks} Chainable.
          */
-        initElement: function (elem) {
-            var index = elem.index;
+        initViews: function () {
+            _.each(this.views, function (config) {
+                this.addView(config);
+            }, this);
+
+            this.activeView = this.getActiveView();
+
+            return this;
+        },
+
+        /**
+         * Creates complete configuration for a view.
+         *
+         * @param {Object} [config] - Additional configuration object.
+         * @returns {Object}
+         */
+        buildView: function (config) {
+            var view = {
+                label: this.newViewLabel,
+                index: '_' + Date.now(),
+                editable: true
+            };
+
+            utils.extend(view, config || {});
+
+            view.data   = view.data || utils.copy(this.current);
+            view.value  = view.label;
+
+            this.observe.call(view, true, 'label value');
+
+            return view;
+        },
+
+        /**
+         * Creates instance of a view with a provided configuration.
+         *
+         * @param {Object} [config] - View configuration.
+         * @param {Boolean} [saveView=false] - Whether to save created view automatically or not.
+         * @param {Boolean} [applyView=false] - Whether to apply created view automatically or not.
+         * @returns {View} Created view.
+         */
+        addView: function (config, saveView, applyView) {
+            var view    = this.buildView(config),
+                index   = view.index;
 
-            if (index === this.defaultIndex) {
-                this.defaultView = elem;
+            this.views[index] = view;
+
+            if (saveView) {
+                this.saveView(index);
             }
 
-            if (index === this.activeIndex) {
-                this.activeView(elem);
+            if (applyView) {
+                this.applyView(index);
             }
 
-            elem.on({
-                editing: this.onEditingChange.bind(this, elem)
-            });
+            this.updateArray();
 
-            return this._super();
+            return view;
         },
 
         /**
-         * Creates instances of a previously saved views.
+         * Removes specified view.
          *
+         * @param {String} index - Index of a view to be removed.
          * @returns {Bookmarks} Chainable.
          */
-        initViews: function () {
-            var views = this.views,
-                active = _.findWhere(views, {index: this.activeIndex});
+        removeView: function (index) {
+            var viewPath = this.getViewPath(index);
 
-            if (!active) {
-                this.activeIndex = this.defaultIndex;
+            if (this.isViewActive(index)) {
+                this.applyView(this.defaultIndex);
             }
 
-            _.each(views, this.createView, this);
+            this.endEdit(index)
+                .remove(viewPath)
+                .removeStored(viewPath)
+                .updateArray();
 
             return this;
         },
 
         /**
-         * Creates view with a provided data.
+         * Saves data of a specified view.
          *
-         * @param {Object} item - Data object that will be passed to a view instance.
+         * @param {String} index - Index of a view to be saved.
          * @returns {Bookmarks} Chainable.
          */
-        createView: function (item) {
-            var data = _.extend({}, this, item),
-                child = utils.template(this.templates.view, data);
+        saveView: function (index) {
+            var viewPath = this.getViewPath(index);
 
-            _.extend(child, item);
+            this.updateViewLabel(index)
+                .endEdit(index)
+                .store(viewPath)
+                .checkState();
 
-            if (this.activeIndex === item.index) {
-                child.active = true;
-            }
+            return this;
+        },
 
-            layout([child]);
+        /**
+         * Sets specified view as active
+         * and applies its' state.
+         *
+         * @param {String} index - Index of a view to be applied.
+         * @returns {Bookmarks} Chainable.
+         */
+        applyView: function (index) {
+            this.applyStateOf(index)
+                .set('activeIndex', index);
 
             return this;
         },
 
         /**
-         * Creates new view instance.
+         * Updates data of a specified view if it's
+         * currently active and saves its' data.
          *
+         * @param {String} index - Index of a view.
          * @returns {Bookmarks} Chainable.
          */
-        createNewView: function () {
-            var view = this.templates.newView;
+        updateAndSave: function (index) {
+            if (this.isViewActive(index)) {
+                this.updateActiveView(index);
+            }
+
+            this.saveView(index);
+
+            return this;
+        },
+
+        /**
+         * Returns instance of a specified view.
+         *
+         * @param {String} index - Index of a view to be retrieved.
+         * @returns {View}
+         */
+        getView: function (index) {
+            return this.views[index];
+        },
 
-            view.data = this.current;
+        /**
+         * Returns instance of an active view.
+         *
+         * @returns {View}
+         */
+        getActiveView: function () {
+            return this.views[this.activeIndex];
+        },
 
-            this.createView(view);
+        /**
+         * Checks if specified view is active.
+         *
+         * @param {String} index - Index of a view to be checked.
+         * @returns {Boolean}
+         */
+        isViewActive: function (index) {
+            return this.activeView === this.getView(index);
+        },
+
+        /**
+         * Sets current state as a data of an active view.
+         *
+         * @returns {Bookmarks} Chainable.
+         */
+        updateActiveView: function () {
+            this.setViewData(this.activeIndex, this.current);
 
             return this;
         },
 
         /**
-         * Deletes specfied view.
+         * Replaces label a view with a provided one.
+         * If new label is not specified, then views'
+         * 'value' property will be taken.
          *
-         * @param {View} view - View to be deleted.
+         * @param {String} index - Index of a view.
+         * @param {String} [label=view.value] - New labels' value.
          * @returns {Bookmarks} Chainable.
          */
-        removeView: function (view) {
-            if (view.active()) {
-                this.applyView(this.defaultIndex);
-            }
+        updateViewLabel: function (index, label) {
+            var view    = this.getView(index),
+                current = view.label;
 
-            if (!view.isNew) {
-                this.removeStored('views.' + view.index);
-            }
+            label = (label || view.value).trim() || current;
+            label = this.uniqueLabel(label, current);
 
-            view.destroy();
+            view.label = view.value = label;
 
             return this;
         },
 
         /**
-         * Saves data of a specified view.
+         * Retrieves data of a specified view.
          *
-         * @param {View} view - View to be saved.
-         * @returns {Bookmarks} Chainable.
+         * @param {String} index - Index of a view whose data should be retrieved.
+         * @param {String} [property] - If not specified then whole views' data will be retrieved.
+         * @returns {Object} Views' data.
          */
-        saveView: function (view) {
-            if (view.isNew || view.active()) {
-                view.setData(this.current);
+        getViewData: function (index, property) {
+            var view = this.getView(index),
+                data = view.data;
 
-                this.hasChanges(false);
+            if (property) {
+                data = utils.nested(data, property);
             }
 
-            this.store('views.' + view.index, view.exportView());
+            return utils.copy(data);
+        },
 
-            if (view.isNew) {
-                view.isNew = false;
+        /**
+         * Sets data to the specified view.
+         *
+         * @param {String} index - Index of a view whose data will be replaced.
+         * @param {Object} data - New view data.
+         * @returns {Bookmarks} Chainable.
+         */
+        setViewData: function (index, data) {
+            var path = this.getViewPath(index) + '.data';
 
-                view.active(true);
-            }
+            this.set(path, utils.copy(data));
 
             return this;
         },
 
         /**
-         * Activates specified view and applies its' data.
+         * Starts editing of a specified view.
          *
-         * @param {(View|String)} view - View to be applied.
+         * @param {String} index - Index of a view.
          * @returns {Bookmarks} Chainable.
          */
-        applyView: function (view) {
-            if (typeof view === 'string') {
-                view = this.elems.findWhere({
-                    index: view
-                });
+        editView: function (index) {
+            this.editing = index;
+
+            return this;
+        },
+
+        /**
+         * Ends editing of specified view
+         * and restores its' label.
+         *
+         * @param {String} index - Index of a view.
+         * @returns {Bookmarks} Chainable.
+         */
+        endEdit: function (index) {
+            var view;
+
+            if (!this.isEditing(index)) {
+                return this;
             }
 
-            view.active(true);
+            index   = index || this.editing;
+            view    = this.getView(index);
 
-            this.activeView(view);
-            this.applyState('saved');
+            view.value = view.label;
+
+            this.editing = false;
 
             return this;
         },
 
         /**
-         * Applies specified views' data on a current data object.
+         * Checks if specified view is in editing state.
          *
-         * @param {String} state - Defines what state shultd be used: default or saved.
-         * @param {String} [path] - Path to the property whose value
-         *      will be inserted to a current data object.
-         * @returns {Bookmarks} Chainable.
+         * @param {String} index - Index of a view to be checked.
+         * @returns {Bollean}
          */
-        applyState: function (state, path) {
-            var view,
-                value;
+        isEditing: function (index) {
+            return this.editing === index;
+        },
 
-            view = state === 'default' ?
-                this.defaultView :
-                this.activeView();
+        /**
+         * Generates label unique among present views, based
+         * on the incoming label pattern.
+         *
+         * @param {String} [label=this.newViewLabel] - Label pattern.
+         * @param {String} [exclude]
+         * @returns {String}
+         */
+        uniqueLabel: function (label, exclude) {
+            var labels      = _.pluck(this.views, 'label'),
+                hasParenth  = _.last(label) === ')',
+                index       = 2,
+                result,
+                suffix;
 
-            path  = removeStateNs(path);
-            value = view.getData(path);
+            labels = _.without(labels, exclude);
+            result = label = label || this.newViewLabel;
 
-            if (!_.isUndefined(value)) {
-                path = path ? 'current.' + path : 'current';
+            for (index = 2; _.contains(labels, result); index++) {
+                suffix = '(' + index + ')';
 
-                this.set(path, value);
+                if (!hasParenth) {
+                    suffix = ' ' + suffix;
+                }
+
+                result = label + suffix;
             }
 
+            return result;
+        },
+
+        /**
+         * Applies state of a specified view, without
+         * making it active.
+         *
+         * @param {String} [state=this.activeIndex]
+         * @param {String} [property]
+         * @returns {Bookmarks} Chainable.
+         */
+        applyStateOf: function (state, property) {
+            var index    = state || this.activeIndex,
+                dataPath = removeStateNs(property),
+                viewData = this.getViewData(index, dataPath);
+
+            dataPath = dataPath ?
+                'current.' + dataPath :
+                'current';
+
+            this.set(dataPath, viewData);
+
             return this;
         },
 
         /**
-         * Saves current data state.
+         * Saves current state.
          *
          * @returns {Bookmarks} Chainable.
          */
-        saveSate: function () {
+        saveState: function () {
             this.store('current');
 
             return this;
         },
 
         /**
-         * Defines whether current state is different
-         * from a saved state of an active view.
+         * Applies state of an active view.
+         *
+         * @returns {Bookmarks} Chainable.
+         */
+        resetState: function () {
+            this.applyStateOf(this.activeIndex);
+
+            return this;
+        },
+
+        /**
+         * Checks if current state is different
+         * from the state of an active view.
          *
          * @returns {Bookmarks} Chainable.
          */
-        checkChanges: function () {
-            var view = this.activeView(),
-                diff = utils.compare(view.getData(), this.current);
+        checkState: function () {
+            var viewData = this.getViewData(this.activeIndex),
+                diff     = utils.compare(viewData, this.current);
 
-            this.hasChanges(!diff.equal);
+            this.hasChanges = !diff.equal;
 
             return this;
         },
 
         /**
-         * Resets current state to a saved state of an active view.
+         * Returns path to the view instance,
+         * based on a provided index.
+         *
+         * @param {String} index - Index of a view.
+         * @returns {String}
+         */
+        getViewPath: function (index) {
+            return 'views.' + index;
+        },
+
+        /**
+         * Updates the array of views.
+         *
+         * @returns {Bookmarks} Chainable
+         */
+        updateArray: function () {
+            this.viewsArray = _.values(this.views);
+
+            return this;
+        },
+
+        /**
+         * Shows custom view field and creates unique label for it.
+         *
+         * @returns {Bookmarks} Chainable.
+         */
+        showCustom: function () {
+            this.customLabel    = this.uniqueLabel();
+            this.customVisible  = true;
+
+            return this;
+        },
+
+        /**
+         * Hides custom view field.
          *
          * @returns {Bookmarks} Chainable.
          */
-        discardChanges: function () {
-            this.applyState('saved');
+        hideCustom: function () {
+            this.customVisible = false;
+
+            return this;
+        },
+
+        /**
+         * Checks if custom view field is visible.
+         *
+         * @returns {Boolean}
+         */
+        isCustomVisible: function () {
+            return this.customVisible;
+        },
+
+        /**
+         * Creates new view instance with a label specified
+         * in a custom view field.
+         *
+         * @returns {Bookmarks} Chainable.
+         */
+        applyCustom: function () {
+            var label = this.customLabel.trim();
+
+            this.hideCustom()
+                .addView({
+                    label: this.uniqueLabel(label)
+                }, true, true);
 
             return this;
         },
@@ -324,54 +548,37 @@ define([
          * @returns {Bookmarks} Chainbale.
          */
         _defaultPolyfill: function () {
-            var view = this.defaultView,
-                data = view.data;
-
-            if (!_.size(data.items)) {
-                data.items = utils.copy(this.current);
+            var data = this.getViewData(this.defaultIndex);
 
-                this.store('views.' + view.index, view.exportView());
+            if (!_.size(data)) {
+                this.setViewData(this.defaultIndex, this.current)
+                    .saveView(this.defaultIndex);
             }
 
             this.defaultDefined = true;
 
-            this.checkChanges();
-
             return this;
         },
 
         /**
          * Listener of the activeIndex property.
-         *
-         * @param {String} index - Index of the active view.
          */
-        onActiveIndexChange: function (index) {
-            this.store('activeIndex')
-                .applyView(index);
+        onActiveIndexChange: function () {
+            this.activeView = this.getActiveView();
+
+            this.store('activeIndex');
         },
 
         /**
-         * Listens changes of a current data object.
+         * Listener of the activeIndex property.
          */
         onStateChange: function () {
-            this.saveSate();
-
-            if (this.activeView()) {
-                this.checkChanges();
-            }
+            this.checkState();
+            this.saveState();
 
             if (!this.defaultDefined) {
                 this._defaultPolyfill();
             }
-        },
-
-        /**
-         * Lsitens changes of the views' 'editing' property.
-         */
-        onEditingChange: function (view, isEditing) {
-            if (!isEditing && view.isNew) {
-                this.removeView(view);
-            }
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
index ac0656ec5a4636d838f293fbd76f9c3e736de5ae..48d3e7fa73dac505e4da849a61f1b99d0ff1cc79 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
@@ -5,8 +5,8 @@
 define([
     'jquery',
     'mageUtils',
-    'Magento_Ui/js/lib/storage',
-    'Magento_Ui/js/lib/class'
+    'Magento_Ui/js/lib/core/storage',
+    'uiClass'
 ], function ($, utils, storage, Class) {
     'use strict';
 
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js
deleted file mode 100644
index afd5d4276de442947da6755cf208f191268226d3..0000000000000000000000000000000000000000
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js
+++ /dev/null
@@ -1,161 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'uiComponent',
-    'mageUtils'
-], function (Component, utils) {
-    'use strict';
-
-    return Component.extend({
-        defaults: {
-            template: 'ui/grid/controls/bookmarks/view',
-            value: '${ $.isNew ? "" : $.label }',
-            active: false,
-            editable: true,
-            editing: false,
-            isNew: false,
-            statesProvider: '${ $.parentName }',
-            exports: {
-                active: 'onActivate'
-            },
-            listens: {
-                'editing value': 'syncLabel',
-                '${ $.statesProvider }:activeIndex': 'onActiveChange'
-            },
-            modules: {
-                states: '${ $.statesProvider }'
-            }
-        },
-
-        /**
-         * Initializes view component.
-         *
-         * @returns {View} Chainable.
-         */
-        initialize: function () {
-            this._super();
-
-            this.data = {
-                label: this.label(),
-                items: this.data || {}
-            };
-
-            return this;
-        },
-
-        /**
-         * Creates observable properties.
-         *
-         * @returns {View} Chainable.
-         */
-        initObservable: function () {
-            this._super()
-                .observe('active label value editing');
-
-            return this;
-        },
-
-        /**
-         * Retrieves copied views' data.
-         *
-         * @param {String} [path] - Path to the specific property.
-         * @returns {*}
-         */
-        getData: function (path) {
-            var data = this.data.items;
-
-            if (path) {
-                data = utils.nested(data, path);
-            }
-
-            return utils.copy(data);
-        },
-
-        /**
-         * Replaces current data with a provided one.
-         *
-         * @param {Object} data - New data object.
-         * @returns {View} Chainable.
-         */
-        setData: function (data) {
-            if (this.editable) {
-                this.set('data.items', utils.copy(data));
-            }
-
-            return this;
-        },
-
-        /**
-         * Sets new label.
-         *
-         * @returns {View} Chainable.
-         */
-        syncLabel: function () {
-            var label = this.value();
-
-            label = label.trim() || this.data.label;
-
-            this.label(label);
-            this.value(label);
-
-            this.data.label = label;
-
-            return this;
-        },
-
-        /**
-         * Sets 'editing' flag to true.
-         *
-         * @returns {View} Chainable.
-         */
-        startEdit: function () {
-            this.editing(true);
-
-            return this;
-        },
-
-        /**
-         * Sets 'editing' flag to false.
-         *
-         * @returns {View} Chainable.
-         */
-        endEdit: function () {
-            this.editing(false);
-
-            return this;
-        },
-
-        /**
-         * Returns views' data including 'label' and 'index' properties.
-         *
-         * @returns {Object}
-         */
-        exportView: function () {
-            return {
-                index: this.index,
-                label: this.label(),
-                data: this.data.items
-            };
-        },
-
-        /**
-         * Listener of the 'active' property.
-         */
-        onActivate: function (active) {
-            if (active) {
-                this.states('set', 'activeIndex', this.index);
-            }
-        },
-
-        /**
-         * Listener of the collections' active index value.
-         */
-        onActiveChange: function (index) {
-            if (index !== this.index) {
-                this.active(false);
-            }
-        }
-    });
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js b/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js
index 4673bedd251f7a8b3ac778b40985bff8ed7a5eb0..9965231c535ef211cf963f71155b9a2fc83a3af0 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js
@@ -6,21 +6,18 @@ define([
     'underscore',
     'mageUtils',
     'mage/translate',
-    'uiComponent'
-], function (_, utils, $t, Component) {
+    'uiCollection'
+], function (_, utils, $t, Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             template: 'ui/grid/controls/columns',
             minVisible: 1,
             maxVisible: 30,
             viewportSize: 18,
-            columnsData: {
-                container: 'elems'
-            },
             imports: {
-                addColumns: '${ $.columnsData.provider }:${ $.columnsData.container }'
+                addColumns: '${ $.columnsData.provider }:elems'
             },
             templates: {
                 headerMsg: $t('${ $.visible } out of ${ $.total } visible')
@@ -44,7 +41,7 @@ define([
          * @returns {Columns} Chainable.
          */
         cancel: function () {
-            this.elems.each('applyState', 'saved', 'visible');
+            this.elems.each('applyState', '', 'visible');
 
             return this;
         },
@@ -86,7 +83,7 @@ define([
         isDisabled: function (elem) {
             var visible = this.countVisible();
 
-            return elem.visible() ?
+            return elem.visible ?
                     visible === this.minVisible :
                     visible === this.maxVisible;
         },
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/dnd.js b/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
index fbcffc466f1d01583e1b470799550a8afa78e7fe..0f10358bb7db1eeb987bcacde0b7d72bdf8198a2 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/dnd.js
@@ -212,15 +212,19 @@ define([
                 return this;
             }
 
+            if (!ko.es5.isTracked(model, 'dragover')) {
+                model.track('dragover');
+            }
+
             this.columns.push(column);
 
             $(column).bindings({
                 css: {
                     '_dragover-left': ko.computed(function () {
-                        return model.dragover() === 'right';
+                        return model.dragover === 'right';
                     }),
                     '_dragover-right': ko.computed(function () {
-                        return model.dragover() === 'left';
+                        return model.dragover === 'left';
                     })
                 }
             });
@@ -468,7 +472,7 @@ define([
                 'left' :
                 'right';
 
-            getModel(dropArea.target).dragover(direction);
+            getModel(dropArea.target).dragover = direction;
         },
 
         /**
@@ -477,7 +481,7 @@ define([
          * @param {Object} dropArea
          */
         dragleave: function (dropArea) {
-            getModel(dropArea.target).dragover(false);
+            getModel(dropArea.target).dragover = false;
         },
 
         /**
@@ -511,7 +515,7 @@ define([
                 dragModel = getModel(dragArea.target);
 
             getModel(this.table).insertChild(dragModel, dropModel);
-            dropModel.dragover(false);
+            dropModel.dragover = false;
         },
 
         /**
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js
index 9fd4e7e6795eea1f7fe8e4060d7de9c1fdd00cfe..9c259144b843816b20fd65f3c97937b466105171 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js
@@ -2,7 +2,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
- 
+
 define([
     'underscore',
     'mageUtils',
@@ -50,7 +50,7 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe({
+                .track({
                     hasData: false
                 });
 
@@ -121,7 +121,7 @@ define([
             var fields  = _.keys(this.getData()),
                 hasData = !!fields.length;
 
-            this.hasData(hasData);
+            this.hasData = hasData;
 
             if (!this.active()) {
                 fields = [];
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/client.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/client.js
index c5bcbeee459083799d6cf29f8b668132080c6370..6651a605f05a382298e96370efe2e4f9807d662b 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/client.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/client.js
@@ -2,7 +2,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
- 
+
 define([
     'jquery',
     'underscore',
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js
index 9bd9d5318fef5db2c341e98c18abd6ad7bf211bc..64fa58ac17ce138bcdce42e7b5fffb0cc4efb41e 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js
@@ -25,11 +25,13 @@ define([
                 '<!-- /ko -->',
             rowTmpl:
                 '<!-- ko with: _editor -->' +
-                    '<!-- ko scope: formRecordName($index(), true) -->' +
-                        '<!-- ko template: rowTmpl --><!-- /ko -->' +
-                    '<!-- /ko -->' +
-                    '<!-- ko if: isActive($index(), true) && isSingleEditing() -->' +
-                        '<!-- ko template: rowButtonsTmpl --><!-- /ko -->' +
+                    '<!-- ko if: isActive($row()._rowIndex, true) -->' +
+                        '<!-- ko with: getRecord($row()._rowIndex, true) -->' +
+                            '<!-- ko template: rowTmpl --><!-- /ko -->' +
+                        '<!-- /ko -->' +
+                        '<!-- ko if: isSingleEditing -->' +
+                            '<!-- ko template: rowButtonsTmpl --><!-- /ko -->' +
+                        '<!-- /ko -->' +
                     '<!-- /ko -->' +
                '<!-- /ko -->'
         },
@@ -112,14 +114,18 @@ define([
          * @returns {View} Chainable.
          */
         initRow: function (row) {
+            var $editingRow;
+
             $(row).extendCtx({
                     _editor: this.model
                 }).bindings(this.rowBindings);
 
-            $(this.rowTmpl)
+            $editingRow = $(this.rowTmpl)
                 .insertBefore(row)
                 .applyBindings(row);
 
+            ko.utils.domNodeDisposal.addDisposeCallback(row, this.removeEditingRow.bind(this, $editingRow));
+
             return this;
         },
 
@@ -134,7 +140,10 @@ define([
 
             return {
                 visible: ko.computed(function () {
-                    return !model.isActive(ctx.$index(), true);
+                    var record = ctx.$row(),
+                        index = record && record._rowIndex;
+
+                    return !model.isActive(index, true);
                 })
             };
         },
@@ -154,6 +163,15 @@ define([
                     })
                 }
             };
+        },
+
+        /**
+         * Removes specified array of nodes.
+         *
+         * @param {ArrayLike} row
+         */
+        removeEditingRow: function (row) {
+            _.toArray(row).forEach(ko.removeNode);
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js
index 5bfde4f5705513ebf8c30a27ff5a88e245b1ecff..38c36ae137bd0516a3fd10fca983e1a5bd2ef66b 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js
@@ -8,17 +8,16 @@ define([
     'mageUtils',
     'uiLayout',
     'mage/translate',
-    'uiComponent'
-], function (_, utils, layout, $t, Component) {
+    'uiCollection'
+], function (_, utils, layout, $t, Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             rowButtonsTmpl: 'ui/grid/editing/row-buttons',
             headerButtonsTmpl: 'ui/grid/editing/header-buttons',
             successMsg: $t('You have successfully saved your edits.'),
             errorsCount: 0,
-            canSave: true,
             isMultiEditing: false,
             isSingleEditing: false,
             rowsData: [],
@@ -91,14 +90,14 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe([
-                    'canSave',
+                .track([
                     'errorsCount',
                     'isMultiEditing',
                     'isSingleEditing'
                 ])
                 .observe({
-                    active: [],
+                    canSave: true,
+                    activeRecords: [],
                     messages: []
                 });
 
@@ -253,7 +252,7 @@ define([
          * @returns {Editor} Chainable.
          */
         hide: function () {
-            this.active.each('active', false);
+            this.activeRecords.each('active', false);
 
             return this;
         },
@@ -304,7 +303,7 @@ define([
          * @returns {Array} An array of records and theirs validation results.
          */
         validate: function () {
-            return this.active.map(function (record) {
+            return this.activeRecords.map(function (record) {
                 return {
                     target: record,
                     valid: record.isValid()
@@ -327,7 +326,7 @@ define([
          * @returns {Object} Collection of records data.
          */
         getData: function () {
-            var data = this.active.map('getData');
+            var data = this.activeRecords.map('getData');
 
             return _.indexBy(data, this.indexField);
         },
@@ -340,7 +339,7 @@ define([
          * @returns {Editor} Chainable.
          */
         setData: function (data, partial) {
-            this.active.each('setData', data, partial);
+            this.activeRecords.each('setData', data, partial);
 
             return this;
         },
@@ -457,7 +456,7 @@ define([
         isActive: function (id, isIndex) {
             var record = this.getRecord(id, isIndex);
 
-            return record && record.active();
+            return _.contains(this.activeRecords(), record);
         },
 
         /**
@@ -466,7 +465,7 @@ define([
          * @returns {Boolean}
          */
         hasActive: function () {
-            return !!this.active().length;
+            return !!this.activeRecords().length;
         },
 
         /**
@@ -475,7 +474,7 @@ define([
          * @returns {Number}
          */
         countActive: function () {
-            return this.active().length;
+            return this.activeRecords().length;
         },
 
         /**
@@ -486,11 +485,11 @@ define([
         countErrors: function () {
             var errorsCount = 0;
 
-            this.active.each(function (record) {
-                errorsCount += record.errorsCount();
+            this.activeRecords.each(function (record) {
+                errorsCount += record.errorsCount;
             });
 
-            this.errorsCount(errorsCount);
+            this.errorsCount = errorsCount;
 
             return errorsCount;
         },
@@ -516,10 +515,10 @@ define([
 
             columns.each('disableAction', !!activeCount);
 
-            this.isMultiEditing(activeCount > 1);
-            this.isSingleEditing(activeCount === 1);
+            this.isMultiEditing = activeCount > 1;
+            this.isSingleEditing = activeCount === 1;
 
-            this.active(active);
+            this.activeRecords(active);
 
             return this;
         },
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js b/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
index a6ba6aca19bb2d537f497622883a724cc1a9854a..15baff272c94cf5849a123493af00c4f6b33b0bf 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
@@ -7,11 +7,11 @@ define([
     'underscore',
     'mageUtils',
     'uiLayout',
-    'uiComponent'
-], function (_, utils, layout, Component) {
+    'uiCollection'
+], function (_, utils, layout, Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             active: true,
             hasChanges: false,
@@ -79,7 +79,8 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe('active fields errorsCount hasChanges');
+                .track('errorsCount hasChanges')
+                .observe('active fields');
 
             return this;
         },
@@ -119,19 +120,18 @@ define([
             var fields = this.templates.fields,
                 field  = column.editor;
 
-            if (typeof field === 'object' && field.editorType) {
+            if (_.isObject(field) && field.editorType) {
                 field = utils.extend({}, fields[field.editorType], field);
-            } else if (typeof field == 'string') {
+            } else if (_.isString(field)) {
                 field = fields[field];
             }
 
             field = utils.extend({}, fields.base, field);
-            field = utils.template(field, {
+
+            return utils.template(field, {
                 record: this,
                 column: column
             }, true, true);
-
-            return field;
         },
 
         /**
@@ -142,7 +142,7 @@ define([
          */
         createFields: function (columns) {
             columns.forEach(function (column) {
-                if (column.editor && !this.getField(column.index)) {
+                if (column.editor && !this.hasChild(column.index)) {
                     this.initField(column);
                 }
             }, this);
@@ -150,18 +150,6 @@ define([
             return this;
         },
 
-        /**
-         * Returns instance of a field found by provided identifier.
-         *
-         * @param {String} index - Identifier of a field inside record.
-         * @returns {Object}
-         */
-        getField: function (index) {
-            return this.elems.findWhere({
-                index: index
-            });
-        },
-
         /**
          * Returns instance of a column found by provided index.
          *
@@ -169,7 +157,7 @@ define([
          * @returns {Column}
          */
         getColumn: function (index) {
-            return this.columns().getColumn(index);
+            return this.columns().getChild(index);
         },
 
         /**
@@ -292,7 +280,7 @@ define([
         countErrors: function () {
             var errorsCount = this.elems.filter('error').length;
 
-            this.errorsCount(errorsCount);
+            this.errorsCount = errorsCount;
 
             return errorsCount;
         },
@@ -320,7 +308,7 @@ define([
             var fields;
 
             fields = this.columns().elems.map(function (column) {
-                return this.getField(column.index) || column;
+                return this.getChild(column.index) || column;
             }, this);
 
             this.fields(fields);
@@ -336,7 +324,7 @@ define([
         updateState: function () {
             var diff = this.checkChanges();
 
-            this.hasChanges(!diff.equal);
+            this.hasChanges = !diff.equal;
 
             return this;
         },
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/export.js b/app/code/Magento/Ui/view/base/web/js/grid/export.js
index 032f5fcc36717432c9a8c0f08a41d7f9c42f5d13..cbc99b0319e818307e78c1d0bc5095f8c2de535f 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/export.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/export.js
@@ -5,12 +5,11 @@
 define([
     'jquery',
     'underscore',
-    'uiComponent'
-], function ($, _, Component) {
+    'uiElement'
+], function ($, _, Element) {
     'use strict';
 
-    return Component.extend({
-
+    return Element.extend({
         defaults: {
             template: 'ui/grid/exportButton',
             checked: '',
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js
index a31b1fd2d50ad971f39ad8f4644d7bdb361cd095..e7617aadf955b5854f33505e4adecb83814c67cf 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js
@@ -3,11 +3,12 @@
  * See COPYING.txt for license details.
  */
 define([
-    'uiComponent'
-], function (Component) {
+    'underscore',
+    'uiCollection'
+], function (_, Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             template: 'ui/grid/filters/chips',
             stickyTmpl: 'ui/grid/sticky/chips'
@@ -18,9 +19,9 @@ define([
          *
          * @returns {Boolean}
          */
-        hasData: function () {
+        hasPreviews: function () {
             return this.elems().some(function (elem) {
-                return !!elem.previews().length;
+                return !!elem.previews.length;
             });
         },
 
@@ -30,7 +31,7 @@ define([
          * @returns {Chips} Chainable.
          */
         clear: function () {
-            this.elems.each('clear');
+            _.invoke(this.elems(), 'clear');
 
             return this;
         }
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
index e90dfd5984189c933635261bcfbf9d17da9dcbe8..d58e7895654517d1a749da6ee09b34eef4bca708 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
@@ -6,8 +6,8 @@ define([
     'underscore',
     'mageUtils',
     'uiLayout',
-    'uiComponent'
-], function (_, utils, layout, Component) {
+    'uiCollection'
+], function (_, utils, layout, Collection) {
     'use strict';
 
     /**
@@ -34,32 +34,69 @@ define([
         return utils.mapRecursive(data, utils.removeEmptyValues.bind(utils));
     }
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             template: 'ui/grid/filters/filters',
             stickyTmpl: 'ui/grid/sticky/filters',
+            _processed: [],
             applied: {
                 placeholder: true
             },
             filters: {
                 placeholder: true
             },
+            templates: {
+                filters: {
+                    base: {
+                        parent: '${ $.$data.filters.name }',
+                        name: '${ $.$data.column.index }',
+                        provider: '${ $.$data.filters.name }',
+                        dataScope: '${ $.$data.column.index }',
+                        label: '${ $.$data.column.label }',
+                        imports: {
+                            visible: '${ $.$data.column.name }:visible'
+                        }
+                    },
+                    text: {
+                        component: 'Magento_Ui/js/form/element/abstract',
+                        template: 'ui/grid/filters/elements/input'
+                    },
+                    select: {
+                        component: 'Magento_Ui/js/form/element/select',
+                        template: 'ui/grid/filters/elements/select',
+                        options: '${ JSON.stringify($.$data.column.options) }',
+                        caption: ' '
+                    },
+                    dateRange: {
+                        component: 'Magento_Ui/js/grid/filters/range',
+                        rangeType: 'date'
+                    },
+                    textRange: {
+                        component: 'Magento_Ui/js/grid/filters/range',
+                        rangeType: 'text'
+                    }
+                }
+            },
             chipsConfig: {
                 name: '${ $.name }_chips',
                 provider: '${ $.chipsConfig.name }',
                 component: 'Magento_Ui/js/grid/filters/chips'
             },
             listens: {
-                active: 'extractPreviews',
-                applied: 'cancel extractActive'
+                active: 'updatePreviews',
+                applied: 'cancel updateActive'
             },
-            links: {
-                applied: '${ $.storageConfig.path }'
+            statefull: {
+                applied: true
             },
             exports: {
                 applied: '${ $.provider }:params.filters'
             },
+            imports: {
+                'onColumnsUpdate': '${ $.columnsProvider }:elems'
+            },
             modules: {
+                columns: '${ $.columnsProvider }',
                 chips: '${ $.chipsConfig.provider }'
             }
         },
@@ -70,10 +107,11 @@ define([
          * @returns {Filters} Chainable.
          */
         initialize: function () {
+            _.bindAll(this, 'updateActive');
+
             this._super()
                 .initChips()
-                .cancel()
-                .extractActive();
+                .cancel();
 
             return this;
         },
@@ -85,7 +123,7 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe({
+                .track({
                     active: [],
                     previews: []
                 });
@@ -107,13 +145,16 @@ define([
         },
 
         /**
-         * Called when another element was added to current component.
+         * Called when another element was added to filters collection.
          *
          * @returns {Filters} Chainable.
          */
-        initElement: function () {
-            this._super()
-                .extractActive();
+        initElement: function (elem) {
+            this._super();
+
+            elem.on('elems', this.updateActive);
+
+            this.updateActive();
 
             return this;
         },
@@ -121,15 +162,14 @@ define([
         /**
          * Clears filters data.
          *
-         * @param {Object} [filter] - If provided, then only specified filter will be cleared.
-         *      Otherwise, clears all data.
-         *
+         * @param {Object} [filter] - If provided, then only specified
+         *      filter will be cleared. Otherwise, clears all data.
          * @returns {Filters} Chainable.
          */
         clear: function (filter) {
             filter ?
                 filter.clear() :
-                this.active.each('clear');
+                _.invoke(this.active, 'clear');
 
             this.apply();
 
@@ -158,6 +198,95 @@ define([
             return this;
         },
 
+        /**
+         * Sets provided data to filter components (without applying it).
+         *
+         * @param {Object} data - Filters data.
+         * @param {Boolean} [partial=false] - Flag that defines whether
+         *      to completely replace current filters data or to extend it.
+         * @returns {Filters} Chainable.
+         */
+        setData: function (data, partial) {
+            var filters = partial ? this.filters : {};
+
+            data = utils.extend({}, filters, data);
+
+            this.set('filters', data);
+
+            return this;
+        },
+
+        /**
+         * Creates instance of a filter associated with the provided column.
+         *
+         * @param {Column} column - Column component for which to create a filter.
+         * @returns {Filters} Chainable.
+         */
+        addFilter: function (column) {
+            var index       = column.index,
+                processed   = this._processed,
+                filter;
+
+            if (!column.filter || _.contains(processed, index)) {
+                return this;
+            }
+
+            filter = this.buildFilter(column);
+
+            processed.push(index);
+
+            layout([filter]);
+
+            return this;
+        },
+
+        /**
+         * Creates filter component configuration associated with the provided column.
+         *
+         * @param {Column} column - Column component whith a basic filter declaration.
+         * @returns {Object} Filters' configuration.
+         */
+        buildFilter: function (column) {
+            var filters = this.templates.filters,
+                filter  = column.filter,
+                type    = filters[filter.filterType];
+
+            if (_.isObject(filter) && type) {
+                filter = utils.extend({}, type, filter);
+            } else if (_.isString(filter)) {
+                filter = filters[filter];
+            }
+
+            filter = utils.extend({}, filters.base, filter);
+
+            return utils.template(filter, {
+                filters: this,
+                column: column
+            }, true, true);
+        },
+
+        /**
+         * Returns an array of range filters.
+         *
+         * @returns {Array}
+         */
+        getRanges: function () {
+            return this.elems.filter(function (filter) {
+                return filter.isRange;
+            });
+        },
+
+        /**
+         * Returns an array of non-range filters.
+         *
+         * @returns {Array}
+         */
+        getPlain: function () {
+            return this.elems.filter(function (filter) {
+                return !filter.isRange;
+            });
+        },
+
         /**
          * Tells wether specified filter should be visible.
          *
@@ -175,7 +304,7 @@ define([
          * @returns {Boolean}
          */
         isFilterActive: function (filter) {
-            return this.active.contains(filter);
+            return _.contains(this.active, filter);
         },
 
         /**
@@ -193,24 +322,46 @@ define([
          *
          * @returns {Filters} Chainable.
          */
-        extractActive: function () {
-            this.active(this.elems.filter('hasData'));
+        updateActive: function () {
+            var applied = _.keys(this.applied);
+
+            this.active = this.elems.filter(function (elem) {
+                return _.contains(applied, elem.index);
+            });
 
             return this;
         },
 
+        /**
+         * Returns number of applied filters.
+         *
+         * @returns {Number}
+         */
+        countActive: function () {
+            return this.active.length;
+        },
+
         /**
          * Extract previews of a specified filters.
          *
          * @param {Array} filters - Filters to be processed.
          * @returns {Filters} Chainable.
          */
-        extractPreviews: function (filters) {
+        updatePreviews: function (filters) {
             var previews = filters.map(extractPreview);
 
-            this.previews(_.compact(previews));
+            this.previews = _.compact(previews);
 
             return this;
+        },
+
+        /**
+         * Listener of the columns provider children array changes.
+         *
+         * @param {Array} columns - Current columns list.
+         */
+        onColumnsUpdate: function (columns) {
+            columns.forEach(this.addFilter, this);
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/group.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/group.js
deleted file mode 100644
index 405436d7353c4179110c65b1329bc030b48c6a70..0000000000000000000000000000000000000000
--- a/app/code/Magento/Ui/view/base/web/js/grid/filters/group.js
+++ /dev/null
@@ -1,37 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'underscore',
-    'Magento_Ui/js/form/components/group'
-], function (_, Group) {
-    'use strict';
-
-    return Group.extend({
-        defaults: {
-            template: 'ui/grid/filters/elements/group',
-            isGroup: true
-        },
-
-        reset: function () {
-            this.elems.each('reset');
-
-            return this;
-        },
-
-        clear: function () {
-            this.elems.each('clear');
-
-            return this;
-        },
-
-        hasData: function () {
-            return this.elems.some('hasData');
-        },
-
-        getPreview: function () {
-            return this.elems.map('getPreview');
-        }
-    });
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js b/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js
new file mode 100644
index 0000000000000000000000000000000000000000..361d2db07139b0bae306671ceb0fe57f4067e0f5
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/grid/filters/range.js
@@ -0,0 +1,109 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'underscore',
+    'uiLayout',
+    'mageUtils',
+    'Magento_Ui/js/form/components/group'
+], function (_, layout, utils, Group) {
+    'use strict';
+
+    return Group.extend({
+        defaults: {
+            template: 'ui/grid/filters/elements/group',
+            isRange: true,
+            templates: {
+                base: {
+                    parent: '${ $.$data.group.name }',
+                    provider: '${ $.$data.group.provider }'
+                },
+                date: {
+                    component: 'Magento_Ui/js/form/element/date',
+                    template: 'ui/grid/filters/elements/date',
+                    dateFormat: 'MM/dd/YYYY'
+                },
+                text: {
+                    component: 'Magento_Ui/js/form/element/abstract',
+                    template: 'ui/grid/filters/elements/input'
+                },
+                ranges: {
+                    from: {
+                        label: 'from',
+                        dataScope: 'from'
+                    },
+                    to: {
+                        label: 'to',
+                        dataScope: 'to'
+                    }
+                }
+            }
+        },
+
+        /**
+         * Initializes range component.
+         *
+         * @returns {Range} Chainable.
+         */
+        initialize: function () {
+            this._super()
+                .initChildren();
+
+            return this;
+        },
+
+        /**
+         * Creates instances of child components.
+         *
+         * @returns {Range} Chainable.
+         */
+        initChildren: function () {
+            var children = this.buildChildren();
+
+            layout(children);
+
+            return this;
+        },
+
+        /**
+         * Creates configuration for the child components.
+         *
+         * @returns {Object}
+         */
+        buildChildren: function () {
+            var templates   = this.templates,
+                typeTmpl    = templates[this.rangeType],
+                tmpl        = utils.extend({}, templates.base, typeTmpl),
+                children    = {};
+
+            _.each(templates.ranges, function (range, key) {
+                children[key] = utils.extend({}, tmpl, range);
+            });
+
+            return utils.template(children, {
+                group: this
+            }, true, true);
+        },
+
+        /**
+         * Clears childrens data.
+         *
+         * @returns {Range} Chainable.
+         */
+        clear: function () {
+            this.elems.each('clear');
+
+            return this;
+        },
+
+        /**
+         * Checks if some children has data.
+         *
+         * @returns {Boolean}
+         */
+        hasData: function () {
+            return this.elems.some('hasData');
+        }
+    });
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/listing.js b/app/code/Magento/Ui/view/base/web/js/grid/listing.js
index 7ec985fcf76a53dc540a4cd020b5a339b8e9065e..5b68524bc698452e7afb5bb947c8b35e8ee8a48d 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/listing.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/listing.js
@@ -4,21 +4,19 @@
  */
 
 define([
+    'ko',
     'underscore',
     'Magento_Ui/js/lib/spinner',
     'uiLayout',
-    'uiComponent'
-], function (_, loader, layout, Component) {
+    'uiCollection'
+], function (ko, _, loader, layout, Collection) {
     'use strict';
 
-    return Component.extend({
+    return Collection.extend({
         defaults: {
             template: 'ui/grid/listing',
             stickyTmpl: 'ui/grid/sticky/listing',
             positions: false,
-            storageConfig: {
-                positions: '${ $.storageConfig.path }.positions'
-            },
             dndConfig: {
                 name: '${ $.name }_dnd',
                 component: 'Magento_Ui/js/grid/dnd',
@@ -36,18 +34,13 @@ define([
                 name: '${ $.name }_resize',
                 columnsProvider: '${ $.name }',
                 component: 'Magento_Ui/js/grid/resize',
-                provider: '${ $.provider }',
-                classResize: 'shadow-div',
-                divsAttrParams: {
-                    'data-cl-elem': 'shadow-div'
-                },
-                enabled: true
+                enabled: false
             },
             imports: {
                 rows: '${ $.provider }:data.items'
             },
             listens: {
-                elems: 'setPositions',
+                elems: 'updatePositions updateVisible',
                 '${ $.provider }:reload': 'showLoader',
                 '${ $.provider }:reloaded': 'hideLoader'
             },
@@ -63,19 +56,12 @@ define([
          * @returns {Listing} Chainable.
          */
         initialize: function () {
-            this._super();
-
-            if (this.resizeConfig.enabled) {
-                this.initResize();
-            }
-
-            if (this.dndConfig.enabled) {
-                this.initDnd();
-            }
+            _.bindAll(this, 'updateVisible');
 
-            if (this.editorConfig.enabled) {
-                this.initEditor();
-            }
+            this._super()
+                .initDnd()
+                .initEditor()
+                .initResize();
 
             return this;
         },
@@ -87,8 +73,9 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe({
-                    rows: []
+                .track({
+                    rows: [],
+                    visibleColumns: []
                 });
 
             return this;
@@ -100,18 +87,22 @@ define([
          * @returns {Listing} Chainable.
          */
         initDnd: function () {
-            layout([this.dndConfig]);
+            if (this.dndConfig.enabled) {
+                layout([this.dndConfig]);
+            }
 
             return this;
         },
 
         /**
-         * Creates resize widget instance.
+         * Inititalizes resize component.
          *
          * @returns {Listing} Chainable.
          */
         initResize: function () {
-            layout([this.resizeConfig]);
+            if (this.resizeConfig.enabled) {
+                layout([this.resizeConfig]);
+            }
 
             return this;
         },
@@ -122,7 +113,9 @@ define([
          * @returns {Listing} Chainable.
          */
         initEditor: function () {
-            layout([this.editorConfig]);
+            if (this.editorConfig.enabled) {
+                layout([this.editorConfig]);
+            }
 
             return this;
         },
@@ -132,7 +125,7 @@ define([
          *
          * @returns {Listing} Chainable.
          */
-        initElement: function () {
+        initElement: function (element) {
             var currentCount = this.elems().length,
                 totalCount = this.initChildCount;
 
@@ -140,6 +133,8 @@ define([
                 this.initPositions();
             }
 
+            element.on('visible', this.updateVisible);
+
             return this._super();
         },
 
@@ -149,14 +144,9 @@ define([
          * @returns {Listing} Chainable.
          */
         initPositions: function () {
-            var link = {
-                positions: this.storageConfig.positions
-            };
-
             this.on('positions', this.applyPositions.bind(this));
 
-            this.setLinks(link, 'imports')
-                .setLinks(link, 'exports');
+            this.setStatefull('positions');
 
             return this;
         },
@@ -166,7 +156,7 @@ define([
          *
          * @returns {Listing} Chainable.
          */
-        setPositions: function () {
+        updatePositions: function () {
             var positions = {};
 
             this.elems.each(function (elem, index) {
@@ -201,38 +191,34 @@ define([
         },
 
         /**
-         * Returns instance of a column found by provided identifier.
+         * Returns reference to 'visibleColumns' array.
          *
-         * @param {String} index - Columns' identifier.
-         * @returns {Column}
+         * @returns {Array}
          */
-        getColumn: function (index) {
-            return this.elems.findWhere({
-                index: index
-            });
-        },
+        getVisible: function () {
+            var observable = ko.getObservable(this, 'visibleColumns');
 
-        /**
-         * Hides loader.
-         */
-        hideLoader: function () {
-            loader.get(this.name).hide();
+            return observable || this.visibleColumns;
         },
 
         /**
-         * Shows loader.
+         * Returns total number of displayed columns in grid.
+         *
+         * @returns {Number}
          */
-        showLoader: function () {
-            loader.get(this.name).show();
+        countVisible: function () {
+            return this.visibleColumns.length;
         },
 
         /**
-         * Returns total number of displayed columns in grid.
+         * Updates array of visible columns.
          *
-         * @returns {Number}
+         * @returns {Listing} Chainable.
          */
-        countVisible: function () {
-            return this.elems.filter('visible').length;
+        updateVisible: function () {
+            this.visibleColumns = this.elems.filter('visible');
+
+            return this;
         },
 
         /**
@@ -241,7 +227,21 @@ define([
          * @returns {Boolean}
          */
         hasData: function () {
-            return !!this.rows().length;
+            return !!this.rows.length;
+        },
+
+        /**
+         * Hides loader.
+         */
+        hideLoader: function () {
+            loader.get(this.name).hide();
+        },
+
+        /**
+         * Shows loader.
+         */
+        showLoader: function () {
+            loader.get(this.name).show();
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/massactions.js b/app/code/Magento/Ui/view/base/web/js/grid/massactions.js
index 2e9a39b2bddd261c83c889ff1f31de99836b9544..e2273b9a1f316b22e727d639eef394e1536d47bd 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/massactions.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/massactions.js
@@ -18,7 +18,6 @@ define([
         defaults: {
             template: 'ui/grid/actions',
             stickyTmpl: 'ui/grid/sticky/actions',
-            componentType: 'massaction',
             selectProvider: '',
             actions: [],
             noItemsMsg: $t('You haven\'t selected any items!'),
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js b/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
index 3f8c6cd8a658c3d9f660897434d1ca026033247a..5605f8faf92417905549d02dff1ae239bad17202 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
@@ -8,18 +8,17 @@ define([
     'underscore',
     'mageUtils',
     'uiLayout',
-    'uiComponent'
-], function (ko, _, utils, layout, Component) {
+    'uiElement'
+], function (ko, _, utils, layout, Element) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             template: 'ui/grid/paging/paging',
             totalTmpl: 'ui/grid/paging-total',
             pageSize: 20,
             current: 1,
             selectProvider: '',
-            componentType: 'paging',
 
             sizesConfig: {
                 component: 'Magento_Ui/js/grid/paging/sizes',
@@ -38,13 +37,13 @@ define([
 
             exports: {
                 pageSize: '${ $.provider }:params.paging.pageSize',
-                current: '${ $.provider }:params.paging.current',
-                pages: '${ $.provider }:data.pages'
+                current: '${ $.provider }:params.paging.current'
             },
 
             listens: {
                 'pages': 'onPagesChange',
-                'pageSize totalRecords': 'countPages',
+                'pageSize': 'onPageSizeChange',
+                'totalRecords': 'updateCounter',
                 '${ $.provider }:params.filters': 'goFirst'
             },
 
@@ -61,7 +60,7 @@ define([
         initialize: function () {
             this._super()
                 .initSizes()
-                .countPages();
+                .updateCounter();
 
             return this;
         },
@@ -73,17 +72,16 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe([
+                .track([
                     'totalSelected',
                     'totalRecords',
                     'pageSize',
-                    'current',
                     'pages',
-                    'options'
+                    'current'
                 ]);
 
             this._current = ko.pureComputed({
-                read: this.current,
+                read: ko.getObservable(this, 'current'),
 
                 /**
                  * Validates page change according to user's input.
@@ -91,10 +89,8 @@ define([
                  * Calls reload method then.
                  */
                 write: function (value) {
-                    value = this.normalize(value);
-
-                    this.current(value);
-                    this._current.notifySubscribers(value);
+                    this.setPage(value)
+                        ._current.notifySubscribers(this.current);
                 },
 
                 owner: this
@@ -121,7 +117,7 @@ define([
          * @returns {Paging} Chainable.
          */
         setPage: function (value) {
-            this.current(this.normalize(value));
+            this.current = this.normalize(value);
 
             return this;
         },
@@ -132,7 +128,7 @@ define([
          * @returns {Paging} Chainable.
          */
         next: function () {
-            this.setPage(this.current() + 1);
+            this.setPage(this.current + 1);
 
             return this;
         },
@@ -143,7 +139,7 @@ define([
          * @returns {Paging} Chainable.
          */
         prev: function () {
-            this.setPage(this.current() - 1);
+            this.setPage(this.current - 1);
 
             return this;
         },
@@ -154,7 +150,7 @@ define([
          * @returns {Paging} Chainable.
          */
         goFirst: function () {
-            this.current(1);
+            this.current = 1;
 
             return this;
         },
@@ -165,7 +161,7 @@ define([
          * @returns {Paging} Chainable.
          */
         goLast: function () {
-            this.current(this.pages());
+            this.current = this.pages;
 
             return this;
         },
@@ -176,7 +172,7 @@ define([
          * @returns {Boolean}
          */
         isFirst: function () {
-            return this.current() === 1;
+            return this.current === 1;
         },
 
         /**
@@ -185,7 +181,41 @@ define([
          * @returns {Boolean}
          */
         isLast: function () {
-            return this.current() === this.pages();
+            return this.current === this.pages;
+        },
+
+        /**
+         * Updates number of pages.
+         */
+        updateCounter: function () {
+            this.pages = Math.ceil(this.totalRecords / this.pageSize) || 1;
+
+            return this;
+        },
+
+        /**
+         * Calculates new page cursor based on the
+         * previous and current page size values.
+         *
+         * @returns {Number} Updated cursor value.
+         */
+        updateCursor: function () {
+            var cursor  = this.current - 1,
+                size    = this.pageSize,
+                oldSize = this.previousSize,
+                delta   = cursor * (oldSize  - size) / size;
+
+            delta = size > oldSize ?
+                Math.ceil(delta) :
+                Math.floor(delta);
+
+            cursor += delta + 1;
+
+            this.previousSize = size;
+
+            this.setPage(cursor);
+
+            return this;
         },
 
         /**
@@ -196,37 +226,28 @@ define([
          * @returns {Number}
          */
         normalize: function (value) {
-            var total = this.pages();
-
             value = +value;
 
             if (isNaN(value)) {
                 return 1;
             }
 
-            return utils.inRange(Math.round(value), 1, total);
+            return utils.inRange(Math.round(value), 1, this.pages);
         },
 
         /**
-         * Calculates number of pages.
+         * Handles changes of the page size.
          */
-        countPages: function () {
-            var pages = Math.ceil(this.totalRecords() / this.pageSize());
-
-            this.pages(pages || 1);
+        onPageSizeChange: function () {
+            this.updateCounter()
+                .updateCursor();
         },
 
         /**
-         * Listens changes of the 'pages' property.
-         * Might change current page if its' value
-         * is greater than total amount of pages.
-         *
-         * @param {Number} pages - Total amount of pages.
+         * Handles changes of the pages amount.
          */
-        onPagesChange: function (pages) {
-            var current = this.current;
-
-            current(utils.inRange(current(), 1, pages));
+        onPagesChange: function () {
+            this.updateCursor();
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js b/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
index 62908da372266e90bba65a6f5c8dd368d42129c9..0354dd4517e8f220efb5ae9c86b4d221f7a7c616 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
@@ -6,18 +6,16 @@ define([
     'ko',
     'underscore',
     'mageUtils',
-    'uiComponent'
-], function (ko, _, utils, Component) {
+    'uiElement'
+], function (ko, _, utils, Element) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             template: 'ui/grid/paging/sizes',
             value: 20,
             minSize: 1,
             maxSize: 999,
-            customVisible: false,
-            customValue: '',
             options: {
                 '20': {
                     value: 20,
@@ -40,10 +38,9 @@ define([
                     label: 200
                 }
             },
-            optionsArray: [],
-            links: {
-                options: '${ $.storageConfig.path }.options',
-                value: '${ $.storageConfig.path }.value'
+            statefull: {
+                options: true,
+                value: true
             },
             listens: {
                 value: 'onValueChange',
@@ -70,16 +67,18 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe([
-                    'optionsArray',
-                    'editing',
+                .track([
                     'value',
+                    'editing',
                     'customVisible',
                     'customValue'
-                ]);
+                ])
+                .track({
+                    optionsArray: []
+                });
 
             this._value = ko.pureComputed({
-                read: this.value,
+                read: ko.getObservable(this, 'value'),
 
                 /**
                  * Validates input field prior to updating 'value' property.
@@ -87,7 +86,7 @@ define([
                 write: function (value) {
                     value = this.normalize(value);
 
-                    this.value(value);
+                    this.value = value;
                     this._value.notifySubscribers(value);
                 },
 
@@ -104,7 +103,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         edit: function (value) {
-            this.editing(value);
+            this.editing = value;
 
             return this;
         },
@@ -115,7 +114,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         discardEditing: function () {
-            var value = this.editing();
+            var value = this.editing;
 
             if (value) {
                 this.updateSize(value, value);
@@ -142,7 +141,7 @@ define([
          * @returns {Number}
          */
         getFirst: function () {
-            return this.optionsArray()[0].value;
+            return this.optionsArray[0].value;
         },
 
         /**
@@ -162,7 +161,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         setSize: function (value) {
-            this.value(value);
+            this.value = value;
 
             return this;
         },
@@ -283,7 +282,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         showCustom: function () {
-            this.customVisible(true);
+            this.customVisible = true;
 
             return this;
         },
@@ -294,7 +293,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         hideCustom: function () {
-            this.customVisible(false);
+            this.customVisible = false;
 
             return this;
         },
@@ -305,7 +304,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         clearCustom: function () {
-            this.customValue('');
+            this.customValue = '';
 
             return this;
         },
@@ -316,7 +315,7 @@ define([
          * @returns {Sizes} Chainable.
          */
         applyCustom: function () {
-            var value = this.customValue();
+            var value = this.customValue;
 
             value = this.normalize(value);
 
@@ -333,7 +332,7 @@ define([
          * @returns {Boolean}
          */
         isCustomVisible: function () {
-            return this.customVisible();
+            return this.customVisible;
         },
 
         /**
@@ -361,9 +360,7 @@ define([
         updateArray: function () {
             var array = _.values(this.options);
 
-            array = _.sortBy(array, 'value');
-
-            this.optionsArray(array);
+            this.optionsArray = _.sortBy(array, 'value');
 
             return this;
         },
@@ -375,7 +372,7 @@ define([
          * @returns {Boolean}
          */
         isEditing: function (value) {
-            return this.editing() === value;
+            return this.editing === value;
         },
 
         /**
@@ -385,7 +382,7 @@ define([
          * @returns {Boolean}
          */
         isSelected: function (value) {
-            return this.value() === value;
+            return this.value === value;
         },
 
         /**
@@ -400,8 +397,9 @@ define([
          * Listener of the 'options' object changes.
          */
         onSizesChange: function () {
-            this.editing(false)
-                .updateArray();
+            this.editing = false;
+
+            this.updateArray();
         }
     });
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/provider.js b/app/code/Magento/Ui/view/base/web/js/grid/provider.js
index f665319bdc1671181c4b84efaa02211bdd7ae343..9232347df8337c34a52bde3e76597c6c9f9c830e 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/provider.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/provider.js
@@ -7,13 +7,13 @@ define([
     'jquery',
     'underscore',
     'mageUtils',
-    'uiComponent',
+    'uiElement',
     'Magento_Ui/js/modal/alert',
     'mage/translate'
-], function ($, _, utils, Component, alert, $t) {
+], function ($, _, utils, Element, alert, $t) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             listens: {
                 params: 'reload'
@@ -26,7 +26,7 @@ define([
          * @returns {Provider} Chainable.
          */
         initialize: function () {
-            utils.limit(this, 'reload', 200);
+            utils.limit(this, 'reload', 300);
             _.bindAll(this, 'onReload');
 
             return this._super();
@@ -40,7 +40,7 @@ define([
         initConfig: function () {
             this._super();
 
-            _.extend(this.data, {
+            this.setData({
                 items: [],
                 totalRecords: 0
             });
@@ -48,20 +48,39 @@ define([
             return this;
         },
 
+        /**
+         *
+         * @param {Object} data
+         * @returns {Provider} Chainable.
+         */
+        setData: function (data) {
+            data = this.processData(data);
+
+            this.set('data', data);
+
+            return this;
+        },
+
         /**
          * Reloads data with current parameters.
          */
         reload: function () {
             this.trigger('reload');
 
-            $.ajax({
-                url: this.update_url,
+            if (this.request && this.request.readyState !== 4) {
+                this.request.abort();
+            }
+
+            this.request = $.ajax({
+                url: this['update_url'],
                 method: 'GET',
                 data: this.get('params'),
                 dataType: 'json'
-            })
-            .error(this.onError)
-            .done(this.onReload);
+            });
+
+            this.request
+                .done(this.onReload)
+                .error(this.onError);
         },
 
         /**
@@ -83,7 +102,11 @@ define([
         /**
          * Handles reload error.
          */
-        onError: function () {
+        onError: function (xhr) {
+            if (xhr.statusText === 'abort') {
+                return;
+            }
+
             alert({
                 content: $t('Something went wrong.')
             });
@@ -95,9 +118,7 @@ define([
          * @param {Object} data - Retrieved data object.
          */
         onReload: function (data) {
-            data = this.processData(data);
-
-            this.set('data', data)
+            this.setData(data)
                 .trigger('reloaded');
         }
     });
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/resize.js b/app/code/Magento/Ui/view/base/web/js/grid/resize.js
index cef9cb707cf7d064cea50b21c89142009fb0c087..7f2b6cb26a0f4bca83c31f1a2fcb928941933ef5 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/resize.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/resize.js
@@ -10,11 +10,11 @@ define([
     'mageUtils',
     'uiRegistry',
     'Magento_Ui/js/lib/ko/extender/bound-nodes',
-    'uiComponent'
-], function ($, ko, _, utils, registry, boundedNodes, Component) {
+    'uiElement'
+], function ($, ko, _, utils, registry, boundedNodes, Element) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             rootSelector: '${ $.columnsProvider }:.admin__data-grid-wrap',
             tableSelector: '${ $.rootSelector } -> table.data-grid',
@@ -37,6 +37,7 @@ define([
             visibleClass: '_resize-visible',
             cellContentElement: 'div.data-grid-cell-content',
             minColumnWidth: 40,
+            layoutFixedPolyfillIterator: 0,
             windowResize: false,
             resizable: false,
             resizeConfig: {
@@ -92,6 +93,12 @@ define([
                 $(window).resize(this.checkAfterResize);
             }
 
+            //TODO - Must be deleted when Firefox fixed problem with table-layout: fixed
+            //ticket to Firefox: https://bugs.webkit.org/show_bug.cgi?id=90068
+            if (navigator.userAgent.search(/Firefox/) > -1) {
+                this._layoutFixedPolyfill();
+            }
+
             $(table).addClass(this.fixedLayoutClass);
 
             return this;
@@ -224,21 +231,27 @@ define([
             this.refreshLastColumn(column);
             this.preprocessingWidth();
 
-            //TODO - Must be deleted when Firefox fixed problem with table-layout: fixed
-            //ticket to Firefox: https://bugs.webkit.org/show_bug.cgi?id=90068
-            if (navigator.userAgent.search(/Firefox/) > -1) {
-                setTimeout(function () {
-                    $(table).css('table-layout', 'auto');
-                    setTimeout(function () {
-                        $(table).css('table-layout', 'fixed');
-                    }, 500);
-                }, 500);
-            }
-
             model.on('visible', this.refreshLastColumn.bind(this, column));
             model.on('visible', this.preprocessingWidth.bind(this));
         },
 
+        /**
+         * Hack for mozilla firefox
+         */
+        _layoutFixedPolyfill: function () {
+            var self = this;
+
+            setTimeout(function () {
+                if (self.layoutFixedPolyfillIterator < 20) {
+                    $(window).resize();
+                    self.layoutFixedPolyfillIterator++;
+                    self._layoutFixedPolyfill();
+                } else {
+                    return false;
+                }
+            }, 500);
+        },
+
         /**
          * Check element is resizable or not
          * and append resizable element to DOM
@@ -531,7 +544,7 @@ define([
                 nextElemData = this.hasColumn(nextElemModel, false, true);
 
             if (nextElemData) {
-                if (nextElemModel.visible()) {
+                if (nextElemModel.visible) {
                     return nextElemData;
                 }
 
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/search/search.js b/app/code/Magento/Ui/view/base/web/js/grid/search/search.js
index 71e0570311aea9a9b4144a51340504846d7acd38..88c6bf6e4490d1d2a025b0579f0093e666bbfcfa 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/search/search.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/search/search.js
@@ -7,16 +7,19 @@ define([
     'uiLayout',
     'mage/translate',
     'mageUtils',
-    'uiComponent'
-], function (_, layout, $t, utils, Component) {
+    'uiElement'
+], function (_, layout, $t, utils, Element) {
     'use strict';
 
-    return Component.extend({
+    return Element.extend({
         defaults: {
             template: 'ui/grid/search/search',
             placeholder: $t('Search by keyword'),
             label: $t('Keyword'),
             value: '',
+            statefull: {
+                value: true
+            },
             imports: {
                 inputValue: 'value',
                 updatePreview: 'value'
@@ -24,9 +27,6 @@ define([
             exports: {
                 value: '${ $.provider }:params.search'
             },
-            links: {
-                value: '${ $.storageConfig.path }'
-            },
             modules: {
                 chips: '${ $.chipsProvider }'
             }
@@ -51,11 +51,8 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe([
-                    'inputValue',
-                    'value'
-                ])
-                .observe({
+                .track('inputValue value')
+                .track({
                     previews: []
                 });
 
@@ -79,7 +76,7 @@ define([
          * @returns {Search} Chainable.
          */
         clear: function () {
-            this.value('');
+            this.value = '';
 
             return this;
         },
@@ -90,7 +87,7 @@ define([
          * @returns {Search} Chainable.
          */
         cancel: function () {
-            this.inputValue(this.value());
+            this.inputValue = this.value;
 
             return this;
         },
@@ -103,10 +100,9 @@ define([
          * @returns {Search} Chainable.
          */
         apply: function (value) {
-            value = value || this.inputValue();
+            value = value || this.inputValue;
 
-            this.value(value);
-            this.inputValue(value);
+            this.value = this.inputValue = value;
 
             return this;
         },
@@ -119,15 +115,15 @@ define([
         updatePreview: function () {
             var preview = [];
 
-            if (this.value()) {
+            if (this.value) {
                 preview.push({
                     elem: this,
                     label: this.label,
-                    preview: this.value()
+                    preview: this.value
                 });
             }
 
-            this.previews(preview);
+            this.previews = preview;
 
             return this;
         }
diff --git a/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js b/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
index e779851a9315625ebe3b60f5c09c8769098139d1..8daa9999633ac16af713551813a11e9128ecb522 100644
--- a/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
+++ b/app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
@@ -58,6 +58,7 @@ define([
                 'initListingNode',
                 'initToolbarNode',
                 'initContainerNode',
+                'initColumns',
                 'initStickyListingNode',
                 'initStickyToolbarNode',
                 'initLeftDataGridCap',
@@ -89,7 +90,7 @@ define([
          */
         initObservable: function () {
             this._super()
-                .observe(['visible']);
+                .track('visible');
 
             return this;
         },
@@ -104,7 +105,7 @@ define([
                 return;
             }
             this.listingNode = $(node);
-            this.columns = this.listingNode.find(this.columnSelector);
+            $.async(this.columnSelector, node, this.initColumns);
         },
 
         /**
@@ -155,6 +156,14 @@ define([
                 this.initRightDataGridCap);
         },
 
+        /**
+         * Init columns (each time when amount of columns is changed)
+         *
+         */
+        initColumns: function () {
+            this.columns = this.listingNode.find(this.columnSelector);
+        },
+
         /**
          * Init left DataGridCap
          *
@@ -237,7 +246,7 @@ define([
                 this.checkPos();
             }
 
-            if (this.visible()) {
+            if (this.visible) {
                 this.checkTableElemsWidth();
 
                 if (this.flags.originalWidthChanged) {
@@ -364,13 +373,22 @@ define([
             return this.otherStickyElsSize;
         },
 
+        /**
+         * Get original bulk row height, if is visible
+         *
+         * @returns {Number}.
+         */
+        getBulkRowHeight: function () {
+            return this.listingNode.find(this.bulkRowSelector).filter(':visible').height();
+        },
+
         /**
          * Get top Y coord of the sticky header
          *
          * @returns {Number}.
          */
         getListingTopYCoord: function () {
-            var bulkRowHeight = (this.listingNode.find(this.bulkRowSelector) || {}).height();
+            var bulkRowHeight = this.getBulkRowHeight();
 
             return this.listingNode.find('tbody').offset().top -
                 this.containerNode.height() -
@@ -387,8 +405,8 @@ define([
             var stickyTopCondition = this.getListingTopYCoord() - this.getOtherStickyElementsSize(),
                 stickyBottomCondition = this.listingNode.offset().top +
                     this.listingNode.height() -
-                    $(window).scrollTop() -
-                    (this.listingNode.find(this.bulkRowSelector) || {}).height() -
+                    $(window).scrollTop() +
+                    this.getBulkRowHeight() -
                     this.getOtherStickyElementsSize();
 
             return stickyTopCondition < 0 && stickyBottomCondition > 0;
@@ -449,9 +467,12 @@ define([
          */
         resizeBulk: function () {
             var bulk = this.containerNode.find(this.bulkRowHeaderSelector)[0];
-            if (bulk){
+
+            if (bulk) {
                 $(bulk).innerWidth(this.getListingWidth());
             }
+
+            return this;
         },
 
         /**
@@ -542,7 +563,7 @@ define([
          * @returns {Object} Chainable.
          */
         toggleContainerVisibility: function () {
-            this.visible(!this.visible());
+            this.visible = !this.visible;
 
             return this;
         },
@@ -553,7 +574,7 @@ define([
          * @returns {Boolean} whether the visibility of the sticky header was toggled.
          */
         checkPos: function () {
-            var isSticky = this.visible(),
+            var isSticky = this.visible,
                 mustBeSticky = this.getMustBeSticky(),
                 needChange = isSticky !== mustBeSticky;
 
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/core.js b/app/code/Magento/Ui/view/base/web/js/lib/component/core.js
deleted file mode 100644
index 65eca7b967d7a31cb7ad750cd213ee051ad0898c..0000000000000000000000000000000000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/core.js
+++ /dev/null
@@ -1,184 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'underscore',
-    'uiRegistry',
-    'Magento_Ui/js/lib/storage'
-], function (_, registry) {
-    'use strict';
-
-    return {
-        defaults: {
-            template: 'ui/collection',
-            registerNodes: true,
-            ignoreTmpls: {
-                childDefaults: true
-            },
-            storageConfig: {
-                provider: 'localStorage',
-                namespace: '${ $.name }',
-                path: '${ $.storageConfig.provider }:${ $.storageConfig.namespace }'
-            },
-            modules: {
-                storage: '${ $.storageConfig.provider }'
-            },
-            componentType: 'container'
-        },
-
-        /**
-         * Initializes component.
-         *
-         * @returns {Component} Chainable.
-         */
-        initialize: function () {
-            this._super()
-                .initProperties()
-                .initObservable()
-                .initModules()
-                .initUnique()
-                .setListeners(this.listens)
-                .initLinks();
-
-            return this;
-        },
-
-        /**
-         * Defines various properties.
-         *
-         * @returns {Component} Chainable.
-         */
-        initProperties: function () {
-            _.extend(this, {
-                source: registry.get(this.provider),
-                containers: [],
-                _elems: []
-            });
-
-            return this;
-        },
-
-        /**
-         * Initializes observable properties.
-         *
-         * @returns {Component} Chainable.
-         */
-        initObservable: function () {
-            this.observe({
-                elems: []
-            });
-
-            return this;
-        },
-
-        /**
-         * Initializes links between properties.
-         *
-         * @returns {Component} Chainbale.
-         */
-        initLinks: function () {
-            this.setLinks(this.links, 'imports')
-                .setLinks(this.links, 'exports');
-
-            _.each({
-                exports: this.exports,
-                imports: this.imports
-            }, this.setLinks, this);
-
-            return this;
-        },
-
-        /**
-         * Parses 'modules' object and creates
-         * async wrappers on specified components.
-         *
-         * @returns {Component} Chainable.
-         */
-        initModules: function () {
-            var modules = this.modules || {};
-
-            _.each(modules, function (component, property) {
-                this[property] = registry.async(component);
-            }, this);
-
-            return this;
-        },
-
-        /**
-         * Initializes listeners of the unique property.
-         *
-         * @returns {Component} Chainable.
-         */
-        initUnique: function () {
-            var update = this.onUniqueUpdate.bind(this),
-                uniqueNs = this.uniqueNs;
-
-            this.hasUnique = this.uniqueProp && uniqueNs;
-
-            if (this.hasUnique) {
-                this.source.on(uniqueNs, update, this.name);
-            }
-
-            return this;
-        },
-
-        /**
-         * Called when current element was injected to another component.
-         *
-         * @param {Object} parent - Instance of a 'parent' component.
-         * @returns {Component} Chainable.
-         */
-        initContainer: function (parent) {
-            this.containers.push(parent);
-
-            return this;
-        },
-
-        /**
-         * Called when another element was added to current component.
-         *
-         * @param {Object} elem - Instance of an element that was added.
-         * @returns {Component} Chainable.
-         */
-        initElement: function (elem) {
-            elem.initContainer(this);
-
-            return this;
-        },
-
-        /**
-         * Returns path to components' template.
-         * @returns {String}
-         */
-        getTemplate: function () {
-            return this.template;
-        },
-
-        /**
-         * Updates property specified in uniqueNs
-         * if components' unique property is set to 'true'.
-         *
-         * @returns {Component} Chainable.
-         */
-        setUnique: function () {
-            var property = this.uniqueProp;
-
-            if (this[property]()) {
-                this.source.set(this.uniqueNs, this.name);
-            }
-
-            return this;
-        },
-
-        /**
-         * Callback which fires when property under uniqueNs has changed.
-         */
-        onUniqueUpdate: function (name) {
-            var active = name === this.name,
-                property = this.uniqueProp;
-
-            this[property](active);
-        }
-    };
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/main.js b/app/code/Magento/Ui/view/base/web/js/lib/component/main.js
deleted file mode 100644
index a48220b0194dc4e8c41e1ed7af3e0a3c16f38cbc..0000000000000000000000000000000000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/main.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'mageUtils',
-    './core',
-    './links',
-    './manip',
-    './traversal',
-    './provider',
-    'uiClass',
-    'Magento_Ui/js/lib/ko/initialize'
-], function (utils, core, links, manip, traversal, provider, Class) {
-    'use strict';
-
-    var extenders;
-
-    extenders = utils.extend({}, core, links, manip, traversal, provider);
-
-    return Class.extend(extenders);
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js b/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js
deleted file mode 100644
index 8bc3f881796a8d50ce31e9a59e44ff0f80fbb49c..0000000000000000000000000000000000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/manip.js
+++ /dev/null
@@ -1,197 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'ko',
-    'underscore',
-    'mageUtils',
-    'uiRegistry'
-], function (ko, _, utils, registry) {
-    'use strict';
-
-    /**
-     * Removes non plain object items from the specfied array.
-     *
-     * @param {Array} container - Array whose value should be filtered.
-     * @returns {Array}
-     */
-    function compact(container) {
-        return container.filter(utils.isObject);
-    }
-
-    return {
-        /**
-         * Retrieves requested region.
-         * Creates region if it was not created yet
-         *
-         * @returns {ObservableArray}.
-         */
-        getRegion: function (name) {
-            var regions = this.regions = this.regions || {};
-
-            if (!regions[name]) {
-                regions[name] = ko.observable([]);
-            }
-
-            return regions[name];
-        },
-
-        /**
-         * Replaces specified regions' data with a provided one.
-         * Creates region if it was not created yet.
-         *
-         * @param {Array} items - New regions' data.
-         * @param {String} name - Name of the region.
-         * @returns {Component} Chainable.
-         */
-        updateRegion: function (items, name) {
-            var region = this.getRegion(name);
-
-            region(items);
-
-            return this;
-        },
-
-        /**
-         * Requests specified components to insert
-         * them into 'elems' array starting from provided position.
-         *
-         * @param {(String|Array)} elems - Name of the component to insert.
-         * @param {Number} [position=-1] - Position at which to insert elements.
-         * @returns {Component} Chainable.
-         */
-        insertChild: function (elems, position) {
-            var container   = this._elems,
-                insert      = this._insert.bind(this),
-                update;
-
-            if (!Array.isArray(elems)) {
-                elems = [elems];
-            }
-
-            elems.map(function (item) {
-                return item.elem ?
-                    utils.insert(item.elem, container, item.position) :
-                    utils.insert(item, container, position);
-            }).forEach(function (item) {
-                if (item === true) {
-                    update = true;
-                } else if (_.isString(item)) {
-                    registry.get(item, insert);
-                } else if (utils.isObject(item)) {
-                    insert(item);
-                }
-            });
-
-            if (update) {
-                this._update();
-            }
-
-            return this;
-        },
-
-        /**
-         * Removes specified element from the 'elems' array.
-         *
-         * @param {Object} elem - Element to be removed.
-         * @returns {Component} Chainable.
-         */
-        removeChild: function (elem) {
-            utils.remove(this._elems, elem);
-            this._update();
-
-            return this;
-        },
-
-        /**
-         * Destroys current instance along with all of its' children.
-         */
-        destroy: function () {
-            this._dropHandlers()
-                ._clearData()
-                ._clearRefs();
-        },
-
-        /**
-         * Removes events listeners.
-         * @private
-         *
-         * @returns {Component} Chainable.
-         */
-        _dropHandlers: function () {
-            this.off();
-
-            this.source.off(this.name);
-
-            return this;
-        },
-
-        /**
-         * Clears all data associated with component.
-         * @private
-         *
-         * @returns {Component} Chainable.
-         */
-        _clearData: function () {
-            this.source.remove(this.dataScope);
-            this.source.remove('params.' + this.name);
-
-            return this;
-        },
-
-        /**
-         * Removes all references to current instance and
-         * calls 'destroy' method on all of its' children.
-         * @private
-         *
-         * @returns {Component} Chainable.
-         */
-        _clearRefs: function () {
-            registry.remove(this.name);
-
-            this.containers.forEach(function (parent) {
-                parent.removeChild(this);
-            }, this);
-
-            this.elems.each('destroy');
-
-            return this;
-        },
-
-        /**
-         * Inserts provided component into 'elems' array at a specified position.
-         * @private
-         *
-         * @param {Object} elem - Element to insert.
-         */
-        _insert: function (elem) {
-            var index = this._elems.indexOf(elem.name);
-
-            if (~index) {
-                this._elems[index] = elem;
-            }
-
-            this._update()
-                .initElement(elem);
-        },
-
-        /**
-         * Synchronizes multiple elements arrays with a core '_elems' container.
-         * Performs elemets grouping by theirs 'displayArea' property.
-         * @private
-         *
-         * @returns {Component} Chainable.
-         */
-        _update: function () {
-            var _elems = compact(this._elems),
-                grouped = _.groupBy(_elems, 'displayArea');
-
-            _.each(grouped, this.updateRegion, this);
-
-            this.elems(_elems);
-
-            return this;
-        }
-    };
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/provider.js b/app/code/Magento/Ui/view/base/web/js/lib/component/provider.js
deleted file mode 100644
index c6c1c195186c775c19594040d632be143665fe89..0000000000000000000000000000000000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/provider.js
+++ /dev/null
@@ -1,193 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'ko',
-    'underscore',
-    'mageUtils'
-], function (ko, _, utils) {
-    'use strict';
-
-     /**
-     * Wrapper for ko.observable and ko.observableArray.
-     * Assignes one or another ko property to obj[key]
-     *
-     * @param {Object} obj - object to store property to
-     * @param {String} key - key
-     * @param {*} value - initial value of observable
-     */
-    function observe(obj, key, value) {
-        var method = Array.isArray(value) ? 'observableArray' : 'observable';
-
-        if (_.isFunction(obj[key]) && !ko.isObservable(obj[key])) {
-            return;
-        }
-
-        if (ko.isObservable(obj[key])) {
-            if (ko.isObservable(value)) {
-                value = value();
-            }
-
-            obj[key](value);
-
-            return;
-        }
-
-        obj[key] = ko[method](value);
-    }
-
-    return {
-        /**
-         * Returns value of the nested property.
-         *
-         * @param {String} path - Path to the property.
-         * @returns {*} Value of the property.
-         */
-        get: function (path) {
-            return utils.nested(this, path);
-        },
-
-        /**
-         * Sets provided value as a value of the specified nested property.
-         * Triggers changes notifications, if value has mutated.
-         *
-         * @param {String} path - Path to property.
-         * @param {*} value - New value of the property.
-         * @returns {Component} Chainable.
-         */
-        set: function (path, value) {
-            var data = utils.nested(this, path),
-                diffs;
-
-            if (!_.isFunction(data)) {
-                diffs = utils.compare(data, value, path);
-
-                utils.nested(this, path, value);
-
-                this._notify(diffs);
-            } else {
-                utils.nested(this, path, value);
-            }
-
-            return this;
-        },
-
-        /**
-         * Removes nested property from the object.
-         *
-         * @param {String} path - Path to the property.
-         * @returns {Component} Chainable.
-         */
-        remove: function (path) {
-            var data,
-                diffs;
-
-            if (!path) {
-                return this;
-            }
-
-            data = utils.nested(this, path);
-
-            if (!_.isUndefined(data) && !_.isFunction(data)) {
-                diffs = utils.compare(data, undefined, path);
-
-                utils.nestedRemove(this, path);
-
-                this._notify(diffs);
-            }
-
-            return this;
-        },
-
-        /**
-         * If 2 params passed, path is considered as key.
-         * Else, path is considered as object.
-         * Assignes props to this based on incoming params
-         *
-         * @param {(Object|String)} path
-         * @returns {Component} Chainable.
-         */
-        observe: function (path) {
-            var type = typeof path;
-
-            if (type === 'string') {
-                path = path.split(' ');
-            }
-
-            if (Array.isArray(path)) {
-                path.forEach(function (key) {
-                    observe(this, key, this[key]);
-                }, this);
-            } else if (type === 'object') {
-                _.each(path, function (value, key) {
-                    observe(this, key, value);
-                }, this);
-            }
-
-            return this;
-        },
-
-        /**
-         *
-         */
-        _notify: function (diffs) {
-            diffs.changes.forEach(function (change) {
-                this.trigger(change.path, change.value, change);
-            }, this);
-
-            _.each(diffs.containers, function (changes, name) {
-                var value = utils.nested(this, name);
-
-                this.trigger(name, value, changes);
-            }, this);
-        },
-
-        /**
-         *
-         */
-        restore: function () {
-            var ns = this.storageConfig.namespace,
-                storage = this.storage();
-
-            if (storage) {
-                utils.extend(this, storage.get(ns));
-            }
-
-            return this;
-        },
-
-        /**
-         * Stores value of the specified property in components' storage module.
-         *
-         * @param {String} property
-         * @param {*} [data=this[property]]
-         * @returns {Component} Chainable.
-         */
-        store: function (property, data) {
-            var ns = this.storageConfig.namespace,
-                path = utils.fullPath(ns, property);
-
-            data = data || this.get(property);
-
-            this.storage('set', path, data);
-
-            return this;
-        },
-
-        /**
-         * Removes stored property.
-         *
-         * @param {String} property - Property to be removed from storage.
-         * @returns {Component} Chainable.
-         */
-        removeStored: function (property) {
-            var ns = this.storageConfig.namespace,
-                path = utils.fullPath(ns, property);
-
-            this.storage('remove', path);
-
-            return this;
-        }
-    };
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js b/app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js
deleted file mode 100644
index cb17ce3e2de78d0120d14ef3078e23109080e088..0000000000000000000000000000000000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'underscore',
-    'Magento_Ui/js/lib/events'
-], function (_, EventsBus) {
-    'use strict';
-
-    return _.extend({}, EventsBus, {
-        /**
-         * Tries to call specified method of a current component,
-         * otherwise delegates attempt to its' children.
-         *
-         * @param {String} target - Name of the method.
-         * @param [...] Arguments that will be passed to method.
-         * @returns {*} Result of the method calls.
-         */
-        delegate: function (target) {
-            var args = _.toArray(arguments);
-
-            target = this[target];
-
-            if (_.isFunction(target)) {
-                return target.apply(this, args.slice(1));
-            }
-
-            return this._delegate(args);
-        },
-
-        /**
-         * Calls 'delegate' method of all of it's children components.
-         * @private
-         *
-         * @param {Array} args - An array of arguments to pass to the next delegation call.
-         * @returns {Array} An array of delegation resutls.
-         */
-        _delegate: function (args) {
-            var result;
-
-            result = this.elems.map(function (elem) {
-                return elem.delegate.apply(elem, args);
-            });
-
-            return _.flatten(result);
-        },
-
-        /**
-         * Overrides 'EventsBus.trigger' method to implement events bubbling.
-         *
-         * @param {String} name - Name of the event.
-         * @param [...] Any number of arguments that should be to the events' handler.
-         * @returns {Boolean} False if event bubbling was canceled.
-         */
-        bubble: function () {
-            var args = _.toArray(arguments),
-                bubble = this.trigger.apply(this, args),
-                result;
-
-            if (!bubble) {
-                return false;
-            }
-
-            this.containers.forEach(function (parent) {
-                result = parent.bubble.apply(parent, args);
-
-                if (result === false) {
-                    bubble = false;
-                }
-            });
-
-            return !!bubble;
-        }
-    });
-});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/class.js b/app/code/Magento/Ui/view/base/web/js/lib/core/class.js
similarity index 87%
rename from app/code/Magento/Ui/view/base/web/js/lib/class.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/class.js
index 12b70b4a45cb1fcc881ca0c1d5a5945b19e0442f..4aab2423cd593909d962b9316d8fea5747d4ec27 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/class.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/class.js
@@ -20,7 +20,7 @@ define([
      * @returns {*} Value of the property or false.
      */
     function getOwn(obj, prop) {
-        return obj.hasOwnProperty(prop) && obj[prop];
+        return _.isObject(obj) && obj.hasOwnProperty(prop) && obj[prop];
     }
 
     /**
@@ -34,13 +34,14 @@ define([
         var constr = consturctor;
 
         if (!constr) {
+
             /**
              * Default constructor function.
              */
             constr = function () {
                 var obj = this;
 
-                if (!obj || !Object.getPrototypeOf(obj) === constr.prototype) {
+                if (!_.isObject(obj) || Object.getPrototypeOf(obj) !== constr.prototype) {
                     obj = Object.create(constr.prototype);
                 }
 
@@ -57,6 +58,7 @@ define([
     }
 
     Class = createConstructor({
+
         /**
          * Entry point to the initialization of consturctors' instance.
          *
@@ -112,10 +114,10 @@ define([
                 parentProto = parent.prototype,
                 childProto  = Object.create(parentProto),
                 child       = createConstructor(childProto, getOwn(extender, 'constructor')),
-                defaults    = extender.defaults || {};
+                defaults;
 
-            defaults = defaults || {};
             extender = extender || {};
+            defaults = extender.defaults;
 
             delete extender.defaults;
 
@@ -123,10 +125,16 @@ define([
                 childProto[name] = wrapper.wrapSuper(parentProto[name], method);
             });
 
+            child.defaults = utils.extend({}, parent.defaults || {});
+
+            if (defaults) {
+                utils.extend(child.defaults, defaults);
+                extender.defaults = defaults;
+            }
+
             return _.extend(child, {
                 __super__:  parentProto,
-                extend:     parent.extend,
-                defaults:   utils.extend({}, parent.defaults, defaults)
+                extend:     parent.extend
             });
 
         }
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
new file mode 100644
index 0000000000000000000000000000000000000000..5cac8edb895d7b81447342aeac5f7a19a8225b30
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/collection.js
@@ -0,0 +1,289 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'underscore',
+    'mageUtils',
+    'uiRegistry',
+    'uiElement'
+], function (_, utils, registry, Element) {
+    'use strict';
+
+    /**
+     * Removes non plain object items from the specfied array.
+     *
+     * @param {Array} container - Array whose value should be filtered.
+     * @returns {Array}
+     */
+    function compact(container) {
+        return container.filter(utils.isObject);
+    }
+
+    return Element.extend({
+        defaults: {
+            template: 'ui/collection',
+            _elems: [],
+            ignoreTmpls: {
+                childDefaults: true
+            }
+        },
+
+        /**
+         * Initializes observable properties.
+         *
+         * @returns {Model} Chainable.
+         */
+        initObservable: function () {
+            this._super()
+                .observe({
+                    elems: []
+                });
+
+            return this;
+        },
+
+        /**
+         * Called when another element was added to current component.
+         *
+         * @param {Object} elem - Instance of an element that was added.
+         * @returns {Collection} Chainable.
+         */
+        initElement: function (elem) {
+            elem.initContainer(this);
+
+            return this;
+        },
+
+        /**
+         * Returns instance of a child found by provided index.
+         *
+         * @param {String} index - Index of a child.
+         * @returns {Object}
+         */
+        getChild: function (index) {
+            return _.findWhere(this.elems(), {
+                index: index
+            });
+        },
+
+        /**
+         * Requests specified components to insert
+         * them into 'elems' array starting from provided position.
+         *
+         * @param {(String|Array)} elems - Name of the component to insert.
+         * @param {Number} [position=-1] - Position at which to insert elements.
+         * @returns {Collection} Chainable.
+         */
+        insertChild: function (elems, position) {
+            var container   = this._elems,
+                insert      = this._insert.bind(this),
+                update;
+
+            if (!Array.isArray(elems)) {
+                elems = [elems];
+            }
+
+            elems.map(function (item) {
+                return item.elem ?
+                    utils.insert(item.elem, container, item.position) :
+                    utils.insert(item, container, position);
+            }).forEach(function (item) {
+                if (item === true) {
+                    update = true;
+                } else if (_.isString(item)) {
+                    registry.get(item, insert);
+                } else if (utils.isObject(item)) {
+                    insert(item);
+                }
+            });
+
+            if (update) {
+                this._updateCollection();
+            }
+
+            return this;
+        },
+
+        /**
+         * Removes specified child from collection.
+         *
+         * @param {(Object|String)} elem - Child or index of a child to be removed.
+         * @returns {Collection} Chainable.
+         */
+        removeChild: function (elem) {
+            if (_.isString(elem)) {
+                elem = this.getChild(elem);
+            }
+
+            if (elem) {
+                utils.remove(this._elems, elem);
+                this._updateCollection();
+            }
+
+            return this;
+        },
+
+        /**
+         * Checks if specified child exists in collection.
+         *
+         * @param {Sring} index - Index of a child.
+         * @returns {Boolean}
+         */
+        hasChild: function (index) {
+            return !!this.getChild(index);
+        },
+
+        /**
+         * Creates 'async' wrapper for the specified child
+         * using uiRegistry 'async' method and caches it
+         * in a '_requested' components  object.
+         *
+         * @param {String} index - Index of a child.
+         * @returns {Function} Async module wrapper.
+         */
+        requestChild: function (index) {
+            var name = this.formChildName(index);
+
+            return this.requestModule(name);
+        },
+
+        /**
+         * Creates complete child name based on a provided index.
+         *
+         * @param {String} index - Index of a child.
+         * @returns {String}
+         */
+        formChildName: function (index) {
+            return this.name + '.' + index;
+        },
+
+        /**
+         * Retrieves requested region.
+         * Creates region if it was not created yet
+         *
+         * @returns {ObservableArray}
+         */
+        getRegion: function (name) {
+            var regions = this.regions = this.regions || {};
+
+            if (!regions[name]) {
+                regions[name] = [];
+
+                this.observe.call(regions, name);
+            }
+
+            return regions[name];
+        },
+
+        /**
+         * Replaces specified regions' data with a provided one.
+         * Creates region if it was not created yet.
+         *
+         * @param {Array} items - New regions' data.
+         * @param {String} name - Name of the region.
+         * @returns {Collection} Chainable.
+         */
+        updateRegion: function (items, name) {
+            this.getRegion(name)(items);
+
+            return this;
+        },
+
+        /**
+         * Destroys collection along with its' elements.
+         */
+        destroy: function () {
+            this._super();
+
+            this.elems.each('destroy');
+        },
+
+        /**
+         * Inserts provided component into 'elems' array at a specified position.
+         * @private
+         *
+         * @param {Object} elem - Element to insert.
+         */
+        _insert: function (elem) {
+            var index = this._elems.indexOf(elem.name);
+
+            if (~index) {
+                this._elems[index] = elem;
+            }
+
+            this._updateCollection()
+                .initElement(elem);
+        },
+
+        /**
+         * Synchronizes multiple elements arrays with a core '_elems' container.
+         * Performs elemets grouping by theirs 'displayArea' property.
+         * @private
+         *
+         * @returns {Collection} Chainable.
+         */
+        _updateCollection: function () {
+            var _elems = compact(this._elems),
+                grouped;
+
+            grouped = _elems.filter(function (elem) {
+                return elem.displayArea && _.isString(elem.displayArea);
+            });
+            grouped = _.groupBy(grouped, 'displayArea');
+
+            _.each(grouped, this.updateRegion, this);
+
+            this.elems(_elems);
+
+            return this;
+        },
+
+        /**
+         * Tries to call specified method of a current component,
+         * otherwise delegates attempt to its' children.
+         *
+         * @param {String} target - Name of the method.
+         * @param {...*} parameters - Arguments that will be passed to method.
+         * @returns {*} Result of the method calls.
+         */
+        delegate: function (target) {
+            var args = _.toArray(arguments);
+
+            target = this[target];
+
+            if (_.isFunction(target)) {
+                return target.apply(this, args.slice(1));
+            }
+
+            return this._delegate(args);
+        },
+
+        /**
+         * Calls 'delegate' method of all of it's children components.
+         * @private
+         *
+         * @param {Array} args - An array of arguments to pass to the next delegation call.
+         * @returns {Array} An array of delegation resutls.
+         */
+        _delegate: function (args) {
+            var result;
+
+            result = this.elems.map(function (elem) {
+                var target;
+
+                if (!_.isFunction(elem.delegate)) {
+                    target = elem[args[0]];
+
+                    if (_.isFunction(target)) {
+                        return target.apply(elem, args.slice(1));
+                    }
+                } else {
+                    return elem.delegate.apply(elem, args);
+                }
+            });
+
+            return _.flatten(result);
+        }
+    });
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
new file mode 100644
index 0000000000000000000000000000000000000000..4e83320b6b39224cf2d919e1e88520e665400cf0
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/element/element.js
@@ -0,0 +1,573 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'ko',
+    'underscore',
+    'mageUtils',
+    'uiRegistry',
+    'uiEvents',
+    'uiClass',
+    './links',
+    '../storage'
+], function (ko, _, utils, registry, Events, Class, links) {
+    'use strict';
+
+    var Element;
+
+    /**
+     * Creates observable property using knockouts'
+     * 'observableArray' or 'observable' methods,
+     * depending on a type of 'value' parameter.
+     *
+     * @param {Object} obj - Object to whom property belongs.
+     * @param {String} key - Key of the property.
+     * @param {*} value - Initial value.
+     */
+    function observable(obj, key, value) {
+        var method = Array.isArray(value) ? 'observableArray' : 'observable';
+
+        if (_.isFunction(obj[key]) && !ko.isObservable(obj[key])) {
+            return;
+        }
+
+        if (ko.isObservable(value)) {
+            value = value();
+        }
+
+        ko.isObservable(obj[key]) ?
+            obj[key](value) :
+            obj[key] = ko[method](value);
+    }
+
+    /**
+     * Creates observable propery using 'track' method.
+     *
+     * @param {Object} obj - Object to whom property belongs.
+     * @param {String} key - Key of the property.
+     * @param {*} value - Initial value.
+     */
+    function accessor(obj, key, value) {
+        if (_.isFunction(obj[key]) || ko.isObservable(obj[key])) {
+            return;
+        }
+
+        obj[key] = value;
+
+        if (!ko.es5.isTracked(obj, key)) {
+            ko.track(obj, [key]);
+        }
+    }
+
+    Element = _.extend({
+        defaults: {
+            template: '',
+            containers: [],
+            _requesetd: {},
+            registerNodes: true,
+            storageConfig: {
+                provider: 'localStorage',
+                namespace: '${ $.name }',
+                path: '${ $.storageConfig.provider }:${ $.storageConfig.namespace }'
+            },
+            maps: {
+                imports: {},
+                exports: {}
+            },
+            modules: {
+                storage: '${ $.storageConfig.provider }'
+            }
+        },
+
+        /**
+         * Initializes model instance.
+         *
+         * @returns {Element} Chainable.
+         */
+        initialize: function () {
+            this._super()
+                .initObservable()
+                .initModules()
+                .initStatefull()
+                .initLinks()
+                .initUnique();
+
+            return this;
+        },
+
+        /**
+         * Initializes observable properties.
+         *
+         * @returns {Element} Chainable.
+         */
+        initObservable: function () {
+            return this;
+        },
+
+        /**
+         * Parses 'modules' object and creates
+         * async wrappers for specified components.
+         *
+         * @returns {Element} Chainable.
+         */
+        initModules: function () {
+            var modules = this.modules || {};
+
+            _.each(modules, function (name, property) {
+                this[property] = this.requestModule(name);
+            }, this);
+
+            if (!_.isFunction(this.source)) {
+                this.source = registry.get(this.provider);
+            }
+
+            return this;
+        },
+
+        /**
+         * Called when current element was injected to another component.
+         *
+         * @param {Object} parent - Instance of a 'parent' component.
+         * @returns {Collection} Chainable.
+         */
+        initContainer: function (parent) {
+            this.containers.push(parent);
+
+            return this;
+        },
+
+        /**
+         * Initializes statefull properties
+         * based on the keys of 'statefull' object.
+         *
+         * @returns {Element} Chainable.
+         */
+        initStatefull: function () {
+            var statefull = this.statefull || {};
+
+            _.each(statefull, function (path, key) {
+                if (!path) {
+                    return;
+                }
+
+                this.setStatefull(key, path);
+            }, this);
+
+            return this;
+        },
+
+        /**
+         * Initializes links between properties.
+         *
+         * @returns {Element} Chainbale.
+         */
+        initLinks: function () {
+            this.setListeners(this.listens)
+                .setLinks(this.links, 'imports')
+                .setLinks(this.links, 'exports');
+
+            _.each({
+                exports: this.exports,
+                imports: this.imports
+            }, this.setLinks, this);
+
+            return this;
+        },
+
+        /**
+         * Initializes listeners of the unique property.
+         *
+         * @returns {Element} Chainable.
+         */
+        initUnique: function () {
+            var update = this.onUniqueUpdate.bind(this),
+                uniqueNs = this.uniqueNs;
+
+            this.hasUnique = this.uniqueProp && uniqueNs;
+
+            if (this.hasUnique) {
+                this.source.on(uniqueNs, update, this.name);
+            }
+
+            return this;
+        },
+
+        /**
+         * Makes specified property to be stored automatically.
+         *
+         * @param {String} key - Name of the property
+         *      that will be stored.
+         * @param {String} [path=key] - Path to the property in storage.
+         * @returns {Element} Chainable.
+         */
+        setStatefull: function (key, path) {
+            var link = {};
+
+            path        = !_.isString(path) || !path ? key : path;
+            link[key]   = this.storageConfig.path + '.' + path;
+
+            this.setLinks(link, 'imports')
+                .setLinks(link, 'exports');
+
+            return this;
+        },
+
+        /**
+         * Updates property specified in uniqueNs
+         * if elements' unique property is set to 'true'.
+         *
+         * @returns {Element} Chainable.
+         */
+        setUnique: function () {
+            var property = this.uniqueProp;
+
+            if (this[property]()) {
+                this.source.set(this.uniqueNs, this.name);
+            }
+
+            return this;
+        },
+
+        /**
+         * Creates 'async' wrapper for the specified component
+         * using uiRegistry 'async' method and caches it
+         * in a '_requested' components  object.
+         *
+         * @param {String} name - Name of requested component.
+         * @returns {Function} Async module wrapper.
+         */
+        requestModule: function (name) {
+            var requested = this._requesetd;
+
+            if (!requested[name]) {
+                requested[name] = registry.async(name);
+            }
+
+            return requested[name];
+        },
+
+        /**
+         * Returns path to elements' template.
+         *
+         * @returns {String}
+         */
+        getTemplate: function () {
+            return this.template;
+        },
+
+        /**
+         * Checks if template was specified for an element.
+         *
+         * @returns {Boolean}
+         */
+        hasTemplate: function () {
+            return !!this.template;
+        },
+
+        /**
+         * Returns value of the nested property.
+         *
+         * @param {String} path - Path to the property.
+         * @returns {*} Value of the property.
+         */
+        get: function (path) {
+            return utils.nested(this, path);
+        },
+
+        /**
+         * Sets provided value as a value of the specified nested property.
+         * Triggers changes notifications, if value has mutated.
+         *
+         * @param {String} path - Path to property.
+         * @param {*} value - New value of the property.
+         * @returns {Element} Chainable.
+         */
+        set: function (path, value) {
+            var data = this.get(path),
+                diffs;
+
+            diffs = !_.isFunction(data) && !this.isTracked(path) ?
+                utils.compare(data, value, path) :
+                false;
+
+            utils.nested(this, path, value);
+
+            if (diffs) {
+                this._notifyChanges(diffs);
+            }
+
+            return this;
+        },
+
+        /**
+         * Removes nested property from the object.
+         *
+         * @param {String} path - Path to the property.
+         * @returns {Element} Chainable.
+         */
+        remove: function (path) {
+            var data = utils.nested(this, path),
+                diffs;
+
+            if (_.isUndefined(data) || _.isFunction(data)) {
+                return this;
+            }
+
+            diffs = utils.compare(data, undefined, path);
+
+            utils.nestedRemove(this, path);
+
+            this._notifyChanges(diffs);
+
+            return this;
+        },
+
+        /**
+         * Creates observable properties for the current object.
+         *
+         * If 'useTrack' flag is set to 'true' then each property will be
+         * created with a ES5 get/set accessor descriptors, instead of
+         * making them an observable functions.
+         * See 'knockout-es5' library for more information.
+         *
+         * @param {Boolean} [useAccessors=false] - Whether to create an
+         *      observable function or to use property accesessors.
+         * @param {(Object|String|Array)} properties - List of observable properties.
+         * @returns {Element} Chainable.
+         *
+         * @example Sample declaration and equivalent knockout methods.
+         *      this.key = 'value';
+         *      this.array = ['value'];
+         *
+         *      this.observe(['key', 'array']);
+         *      =>
+         *          this.key = ko.observable('value');
+         *          this.array = ko.observableArray(['value']);
+         *
+         * @example Another syntaxes of the previous example.
+         *      this.observe({
+         *          key: 'value',
+         *          array: ['value']
+         *      });
+         */
+        observe: function (useAccessors, properties) {
+            var model = this,
+                trackMethod;
+
+            if (typeof useAccessors !== 'boolean') {
+                properties   = useAccessors;
+                useAccessors = false;
+            }
+
+            trackMethod = useAccessors ? accessor : observable;
+
+            if (_.isString(properties)) {
+                properties = properties.split(' ');
+            }
+
+            if (Array.isArray(properties)) {
+                properties.forEach(function (key) {
+                    trackMethod(model, key, model[key]);
+                });
+            } else if (typeof properties === 'object') {
+                _.each(properties, function (value, key) {
+                    trackMethod(model, key, value);
+                });
+            }
+
+            return this;
+        },
+
+        /**
+         * Delegates call to 'observe' method but
+         * with a predefined 'useAccessors' flag.
+         *
+         * @param {(String|Array|Object)} properties - List of observable properties.
+         * @returns {Element} Chainable.
+         */
+        track: function (properties) {
+            this.observe(true, properties);
+
+            return this;
+        },
+
+        /**
+         * Checks if specified property is tracked.
+         *
+         * @param {String} property - Property to be checked.
+         * @returns {Boolean}
+         */
+        isTracked: function (property) {
+            return ko.es5.isTracked(this, property);
+        },
+
+        /**
+         * Invokes subscribers for the provided changes.
+         *
+         * @param {Object} diffs - Object with changes descriptions.
+         * @returns {Element} Chainable.
+         */
+        _notifyChanges: function (diffs) {
+            diffs.changes.forEach(function (change) {
+                this.trigger(change.path, change.value, change);
+            }, this);
+
+            _.each(diffs.containers, function (changes, name) {
+                var value = utils.nested(this, name);
+
+                this.trigger(name, value, changes);
+            }, this);
+
+            return this;
+        },
+
+        /**
+         * Extracts all stored data and sets it to element.
+         *
+         * @returns {Element} Chainable.
+         */
+        restore: function () {
+            var ns = this.storageConfig.namespace,
+                storage = this.storage();
+
+            if (storage) {
+                utils.extend(this, storage.get(ns));
+            }
+
+            return this;
+        },
+
+        /**
+         * Stores value of the specified property in components' storage module.
+         *
+         * @param {String} property
+         * @param {*} [data=this[property]]
+         * @returns {Element} Chainable.
+         */
+        store: function (property, data) {
+            var ns = this.storageConfig.namespace,
+                path = utils.fullPath(ns, property);
+
+            if (arguments.length < 2) {
+                data = this.get(property);
+            }
+
+            this.storage('set', path, data);
+
+            return this;
+        },
+
+        /**
+         * Extracts specified property from storage.
+         *
+         * @param {String} [property] - Name of the property
+         *      to be extracted. If not specified then all of the
+         *      stored will be returned.
+         * @returns {*}
+         */
+        getStored: function (property) {
+            var ns = this.storageConfig.namespace,
+                path = utils.fullPath(ns, property),
+                storage = this.storage(),
+                data;
+
+            if (storage) {
+                data = storage.get(path);
+            }
+
+            return data;
+        },
+
+        /**
+         * Removes stored property.
+         *
+         * @param {String} property - Property to be removed from storage.
+         * @returns {Element} Chainable.
+         */
+        removeStored: function (property) {
+            var ns = this.storageConfig.namespace,
+                path = utils.fullPath(ns, property);
+
+            this.storage('remove', path);
+
+            return this;
+        },
+
+        /**
+         * Destroys current instance along with all of its' children.
+         */
+        destroy: function () {
+            this._dropHandlers()
+                ._clearRefs();
+        },
+
+        /**
+         * Removes events listeners.
+         * @private
+         *
+         * @returns {Element} Chainable.
+         */
+        _dropHandlers: function () {
+            this.off();
+            this.source.off(this.name);
+
+            return this;
+        },
+
+        /**
+         * Removes all references to current instance and
+         * calls 'destroy' method on all of its' children.
+         * @private
+         *
+         * @returns {Element} Chainable.
+         */
+        _clearRefs: function () {
+            registry.remove(this.name);
+
+            this.containers.forEach(function (parent) {
+                parent.removeChild(this);
+            }, this);
+
+            return this;
+        },
+
+        /**
+         * Overrides 'EventsBus.trigger' method to implement events bubbling.
+         *
+         * @param {...*} parameters - Any number of arguments that should be passed to the events' handler.
+         * @returns {Boolean} False if event bubbling was canceled.
+         */
+        bubble: function () {
+            var args = _.toArray(arguments),
+                bubble = this.trigger.apply(this, args),
+                result;
+
+            if (!bubble) {
+                return false;
+            }
+
+            this.containers.forEach(function (parent) {
+                result = parent.bubble.apply(parent, args);
+
+                if (result === false) {
+                    bubble = false;
+                }
+            });
+
+            return !!bubble;
+        },
+
+        /**
+         * Callback which fires when property under uniqueNs has changed.
+         */
+        onUniqueUpdate: function (name) {
+            var active = name === this.name,
+                property = this.uniqueProp;
+
+            this[property](active);
+        }
+    }, Events, links);
+
+    return Class.extend(Element);
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/component/links.js b/app/code/Magento/Ui/view/base/web/js/lib/core/element/links.js
similarity index 97%
rename from app/code/Magento/Ui/view/base/web/js/lib/component/links.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/element/links.js
index 83e963dfcb2fce31ce493d626aea78758c054a63..c769be3775f46ddba47d5d9110974fc2bd5782da 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/component/links.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/element/links.js
@@ -163,13 +163,6 @@ define([
     }
 
     return {
-        defaults: {
-            maps: {
-                exports: {},
-                imports: {}
-            }
-        },
-
         setListeners: function (listeners) {
             var owner = this,
                 data;
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/events.js b/app/code/Magento/Ui/view/base/web/js/lib/core/events.js
similarity index 89%
rename from app/code/Magento/Ui/view/base/web/js/lib/events.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/events.js
index 5ef76cfa2ce998d3a7742b92ae59e2271998d61e..f5e086575527132319f2a8b5c0375f6f3ded0f4e 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/events.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/events.js
@@ -38,11 +38,16 @@ define([
      * @param {String} name - Name of the event.
      */
     function addHandler(obj, ns, callback, name) {
-        var events = getEvents(obj),
+        var events      = getEvents(obj),
+            observable,
             data;
 
-        if (ko.isObservable(obj[name])) {
-            obj[name].subscribe(callback);
+        observable = !ko.isObservable(obj[name]) ?
+            ko.getObservable(obj, name) :
+            obj[name];
+
+        if (observable) {
+            observable.subscribe(callback);
 
             return;
         }
@@ -86,6 +91,7 @@ define([
     }
 
     return {
+
         /**
          * Calls callback when name event is triggered.
          * @param  {String}   events
@@ -134,9 +140,10 @@ define([
         },
 
         /**
-         * Triggers event and executes all attached callbacks
-         * @param  {String} name
-         * @return {Object} reference to this
+         * Triggers event and executes all attached callbacks.
+         *
+         * @param {String} name - Name of the event to be triggered.
+         * @returns {Boolean}
          */
         trigger: function (name) {
             var handlers,
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/storage.js b/app/code/Magento/Ui/view/base/web/js/lib/core/storage.js
similarity index 89%
rename from app/code/Magento/Ui/view/base/web/js/lib/storage.js
rename to app/code/Magento/Ui/view/base/web/js/lib/core/storage.js
index a41bad442f11e4f417d1c0360458c76c1026d63a..62f87dcd432d2ddec9b8ba11b01442cc8a5e92d5 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/storage.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/core/storage.js
@@ -6,19 +6,30 @@ define([
     'underscore',
     'uiRegistry',
     'mageUtils',
-    'Magento_Ui/js/lib/events'
+    'uiEvents'
 ], function (_, registry, utils, EventsBus) {
     'use strict';
 
     var root = 'appData',
         storage;
 
+    /**
+     * Extracts and parses data stored in localStorage by the
+     * key specified in 'root' varaible.
+     *
+     * @returns {Object}
+     */
     function getRoot() {
         var data = localStorage.getItem(root);
 
         return !_.isNull(data) ? JSON.parse(data) : {};
     }
 
+    /**
+     * Writes provided data to the localStorage.
+     *
+     * @param {*} data - Data to be stored.
+     */
     function setRoot(data) {
         localStorage.setItem(root, JSON.stringify(data));
     }
@@ -28,6 +39,7 @@ define([
      * as a single nested structure.
      */
     storage = _.extend({
+
         /**
          * Retrieves value of the specified property.
          *
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js
index 2297f2d5cf1764d0198b791ec6011f3b2debf2b8..67a48c89a92a57de35bb95876bb9c8656a651c93 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js
@@ -8,6 +8,7 @@ define([
     'use strict';
 
     ko.bindingHandlers.afterRender = {
+
         /**
          * Binding init callback.
          */
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/autoselect.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/autoselect.js
new file mode 100644
index 0000000000000000000000000000000000000000..5a6207b4c5a113d9a857729924b6aecec4669f80
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/autoselect.js
@@ -0,0 +1,34 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'ko',
+    'jquery'
+], function (ko, $) {
+    'use strict';
+
+    /**
+     * 'Focus' event handler.
+     *
+     * @param {EventObject} e
+     */
+    function onFocus(e) {
+        e.target.select();
+    }
+
+    ko.bindingHandlers.autoselect = {
+
+        /**
+         * Adds event handler which automatically
+         * selects inputs' element text when field gets focused.
+         */
+        init: function (element, valueAccessor) {
+            var enabled = ko.unwrap(valueAccessor());
+
+            if (enabled !== false) {
+                $(element).on('focus', onFocus);
+            }
+        }
+    };
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js
deleted file mode 100644
index 8d3b6bbfbd02cf34ca83ad544b905a8dd225e989..0000000000000000000000000000000000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-define([
-    'ko',
-    'underscore'
-], function(ko, _) {
-    'use strict';
-
-    ko.bindingHandlers['class'] = {
-        /**
-         * @param {HTMLElement} element - Element, that binding is applied to
-         * @param {Function} valueAccessor - Function that returns value, passed to binding
-         */
-        update: function (element, valueAccessor) {
-            var currentValue = ko.utils.unwrapObservable(valueAccessor()),
-                prevValue = element['__ko__previousClassValue__'],
-
-                /**
-                 * Helper for setting classes11
-                 * @param {Array|Object|String} singleValueOrArrayOrObject
-                 * @param {Boolean} shouldHaveClass
-                 */
-                addOrRemoveClasses = function addOrRemoveClassesFn (singleValueOrArrayOrObject, shouldHaveClass) {
-                    if (_.isArray(singleValueOrArrayOrObject)) {
-                        ko.utils.arrayForEach(singleValueOrArrayOrObject, function (cssClass) {
-                            var value = ko.utils.unwrapObservable(cssClass);
-                            ko.utils.toggleDomNodeCssClass(element, value, shouldHaveClass);
-                        });
-                    } else if (_.isObject(singleValueOrArrayOrObject)) {
-                        _.each(singleValueOrArrayOrObject, function(classname, condition) {
-                            if(ko.utils.unwrapObservable(condition)) {
-                                ko.utils.toggleDomNodeCssClass(element, classname, shouldHaveClass);
-                            }
-                        })
-
-                    } else if (singleValueOrArrayOrObject) {
-                        ko.utils.toggleDomNodeCssClass(element, singleValueOrArrayOrObject, shouldHaveClass);
-                    }
-                };
-
-            // Remove old value(s) (preserves any existing CSS classes)
-            addOrRemoveClasses(prevValue, false);
-
-            // Set new value(s)
-            addOrRemoveClasses(currentValue, true);
-
-            // Store a copy of the current value
-            element['__ko__previousClassValue__'] = currentValue.concat();
-        }
-    };
-});
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js
index b95709baf311418d8a362f9a7ad86f1f40c389fb..dbecd15e8843dc8ef6c18abcd3599ebdac7b7830 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js
@@ -4,11 +4,14 @@
  */
 
 define([
-    'ko'
-], function (ko) {
+    'ko',
+    'mageUtils'
+    ], function (ko, utils) {
     'use strict';
 
     var captionPlaceholder = {},
+        optgroupTmpl = '<optgroup label="${ $.label }"></optgroup>',
+        nbspRe = /&nbsp;/g,
         optionsText,
         optionsValue,
         optionTitle;
@@ -190,19 +193,22 @@ define([
                     itemUpdate = true;
                 }
 
-                if (arrayEntry === captionPlaceholder) {// empty value, label === caption
+                if (arrayEntry === captionPlaceholder) { // empty value, label === caption
                     option = element.ownerDocument.createElement('option');
                     ko.utils.setTextContent(option, allBindings.get('optionsCaption'));
                     ko.selectExtensions.writeValue(option, undefined);
                 } else if (typeof arrayEntry[optionsValue] === 'undefined') { // empty value === optgroup
-                    option = element.ownerDocument.createElement('optgroup');
-                    option.setAttribute('label', arrayEntry[optionsText]);
-                    option.setAttribute('title', arrayEntry[optionsText + 'title']);
+                    option = utils.template(optgroupTmpl, {
+                        label: arrayEntry[optionsText],
+                        title: arrayEntry[optionsText + 'title']
+                    });
+                    option = ko.utils.parseHtmlFragment(option)[0];
+
                 } else {
                     option = element.ownerDocument.createElement('option');
-                    option.setAttribute('title', arrayEntry[optionsText + 'title']);
+                    option.setAttribute('data-title', arrayEntry[optionsText + 'title']);
                     ko.selectExtensions.writeValue(option, arrayEntry[optionsValue]);
-                    ko.utils.setTextContent(option, arrayEntry[optionsText].replace(/^\s+/g, ''));
+                    ko.utils.setTextContent(option, arrayEntry[optionsText]);
                 }
 
                 return [option];
@@ -226,6 +232,15 @@ define([
                 }
             }
 
+            /**
+             *
+             * @param {*} string, times
+             * @returns {Array}
+             */
+            function strPad(string, times) {
+                return  (new Array(times + 1)).join(string);
+            }
+
             /**
              *
              * @param {*} options
@@ -245,20 +260,23 @@ define([
                         }
                     }
                 }
+
                 ko.utils.arrayForEach(options, function (option) {
-                    var label, title, value, obj = {};
+                    var value = applyToObject(option, optionsValue, option),
+                        label = applyToObject(option, optionsText, value) || '',
+                        title = applyToObject(option, optionsText, value) || '',
+                        obj = {};
 
-                    value = applyToObject(option, optionsValue, option);
-                    label = applyToObject(option, optionsText, value);
                     obj[optionTitle] = applyToObject(option, optionsText + 'title', value);
 
+                    label = label.replace(nbspRe, '').trim();
+
                     if (Array.isArray(value)) {
-                        obj[optionsText] = label;
-                        obj[optionsValue] = undefined;
+                        obj[optionsText] = strPad('&nbsp;', nestedOptionsLevel * 4) + label;
                         res.push(obj);
                         res = res.concat(formatOptions(value));
                     } else {
-                        obj[optionsText] = label;
+                        obj[optionsText] = strPad('  ', nestedOptionsLevel * 2) + label;
                         obj[optionsValue] = value;
                         res.push(obj);
                     }
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js
index 2f9d78541d7ccb5ff2e7391fdec38e3e807e3abd..aae69f9fe18f5256b37f59709a1eece0fe6c5233 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js
@@ -1,13 +1,11 @@
 /**
- * @category    storage
- * @package     test
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
 /** Creates scope binding and registers in to ko.bindingHandlers object */
 define([
     'ko',
-    'Magento_Ui/js/lib/registry/registry',
+    'uiRegistry',
     'jquery',
     'mage/translate'
 ], function (ko, registry, $) {
@@ -15,30 +13,6 @@ define([
 
     var i18n = $.mage.__;
 
-    /**
-     * Fetches components from registry and stores them to context object, then passes it to callback function.
-     * @param {Object} components - map, representing components to be attached to the new context.
-     * @param {Function} callback - Function to be called when components are fetched.
-     */
-    function getMultiple(components, callback) {
-        var key,
-            paths = [],
-            context = {};
-
-        for (key in components) {
-            paths.push(components[key]);
-        }
-
-        registry.get(paths, function () {
-
-            for (key in components) {
-                context[key] = registry.get(components[key]);
-            }
-
-            callback(context);
-        });
-    }
-
     /**
      * Creates child context with passed component param as $data. Extends context with $t helper.
      * Applies bindings to descendant nodes.
@@ -58,8 +32,6 @@ define([
         ko.applyBindingsToDescendants(component, el);
     }
 
-    ko.virtualElements.allowedBindings.scope = true;
-
     ko.bindingHandlers.scope = {
 
         /**
@@ -85,13 +57,13 @@ define([
             var component = valueAccessor(),
                 apply = applyComponents.bind(this, el, bindingContext);
 
-            if (typeof component === 'object') {
-                getMultiple(component, apply);
-            } else if (typeof component === 'string') {
+            if (typeof component === 'string') {
                 registry.get(component, apply);
             } else if (typeof component === 'function') {
                 component(apply);
             }
         }
     };
+
+    ko.virtualElements.allowedBindings.scope = true;
 });
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js
new file mode 100644
index 0000000000000000000000000000000000000000..b766fcfa870c6fcd21bf6c40df23d16ebfe2e266
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/staticChecked.js
@@ -0,0 +1,103 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define([
+    'ko'
+], function (ko) {
+    'use strict';
+
+    ko.bindingHandlers.staticChecked = {
+        'after': ['value', 'attr'],
+
+        /**
+         * Implements same functionality as a standard 'checked' binding,
+         * but with a difference that it wont' change values array if
+         * value of DOM element changes.
+         */
+        init: function (element, valueAccessor, allBindings) {
+            var isCheckbox = element.type === 'checkbox',
+                isRadio = element.type === 'radio',
+                isValueArray,
+                oldElemValue,
+                useCheckedValue,
+                checkedValue,
+                updateModel,
+                updateView;
+
+            if (!isCheckbox && !isRadio) {
+                return;
+            }
+
+            checkedValue = ko.pureComputed(function () {
+                if (allBindings.has('checkedValue')) {
+                    return ko.utils.unwrapObservable(allBindings.get('checkedValue'));
+                } else if (allBindings.has('value')) {
+                    return ko.utils.unwrapObservable(allBindings.get('value'));
+                }
+
+                return element.value;
+            });
+
+            isValueArray = isCheckbox && ko.utils.unwrapObservable(valueAccessor()) instanceof Array;
+            oldElemValue = isValueArray ? checkedValue() : undefined;
+            useCheckedValue = isRadio || isValueArray;
+
+            /**
+             * Updates values array if it's necessary.
+             */
+            updateModel = function () {
+                var isChecked = element.checked,
+                    elemValue = useCheckedValue ? checkedValue() : isChecked,
+                    modelValue;
+
+                if (ko.computedContext.isInitial()) {
+                    return;
+                }
+
+                if (isRadio && !isChecked) {
+                    return;
+                }
+
+                modelValue = ko.dependencyDetection.ignore(valueAccessor);
+
+                if (isValueArray) {
+                    if (oldElemValue !== elemValue) {
+                        oldElemValue = elemValue;
+                    } else {
+                        ko.utils.addOrRemoveItem(modelValue, elemValue, isChecked);
+                    }
+                } else {
+                    ko.expressionRewriting.writeValueToProperty(modelValue, allBindings, 'checked', elemValue, true);
+                }
+            };
+
+            /**
+             * Updates checkbox state.
+             */
+            updateView = function () {
+                var modelValue = ko.utils.unwrapObservable(valueAccessor());
+
+                if (isValueArray) {
+                    element.checked = ko.utils.arrayIndexOf(modelValue, checkedValue()) >= 0;
+                } else if (isCheckbox) {
+                    element.checked = modelValue;
+                } else {
+                    element.checked = checkedValue() === modelValue;
+                }
+            };
+
+            ko.computed(updateModel, null, {
+                disposeWhenNodeIsRemoved: element
+            });
+
+            ko.utils.registerEventHandler(element, 'click', updateModel);
+
+            ko.computed(updateView, null, {
+                disposeWhenNodeIsRemoved: element
+            });
+        }
+    };
+
+    ko.expressionRewriting.twoWayBindings.staticChecked = true;
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js
deleted file mode 100644
index 7269d7774a3809c36686dab6d5e36736954ec88d..0000000000000000000000000000000000000000
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/** Creates stopPropagation binding and registers in to ko.bindingHandlers object */
-define(['ko'], function (ko) {
-    'use strict';
-
-    ko.bindingHandlers.stopPropagation = {
-
-        /**
-         * Stops propagation on element
-         * @param  {HTMLElement} element - element to apply binding to
-         */
-        init: function (element) {
-          ko.utils.registerEventHandler(element, 'click', function (event) {
-              event.cancelBubble = true;
-              if (event.stopPropagation) {
-                 event.stopPropagation(); 
-              }
-          });
-        }
-    };
-});
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js
index ed7b85b6f4127614e57466375267d404d4d43f06..62a13e52add7a587a9aad83fb0f8397296ea0e35 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js
@@ -7,7 +7,7 @@ define([
     'ko',
     'underscore',
     'mage/utils/wrapper',
-    'Magento_Ui/js/lib/events',
+    'uiEvents',
     'es6-collections'
 ], function (ko, _, wrapper, Events) {
     'use strict';
@@ -84,6 +84,7 @@ define([
     }
 
     wrapper.extend(ko, {
+
         /**
          * Extends kncokouts' 'applyBindings'
          * to track nodes associated with model.
@@ -132,6 +133,7 @@ define([
     });
 
     return {
+
         /**
          * Returns root nodes associated with a model. If callback is provided,
          * will iterate through all of the present nodes triggering callback
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js
index 2b0f3d1fc5dcadfc5f630efaea6a0bf5c4379dae..7a4dbb25680830eb990a436f89627f54e0400ca1 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js
@@ -7,9 +7,12 @@
 define([
     'ko',
     './template/engine',
+    'knockoutjs/knockout-repeat',
+    'knockoutjs/knockout-fast-foreach',
+    'knockoutjs/knockout-es5',
     './bind/scope',
+    './bind/staticChecked',
     './bind/datepicker',
-    './bind/stop_propagation',
     './bind/outer_click',
     './bind/keyboard',
     './bind/optgroup',
@@ -18,9 +21,9 @@ define([
     './bind/after-render',
     './bind/i18n',
     './bind/collapsible',
+    './bind/autoselect',
     './extender/observable_array',
-    './extender/bound-nodes',
-    './extender/observable_array'
+    './extender/bound-nodes'
 ], function (ko, templateEngine) {
     'use strict';
 
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js
index 213d0ea8a7f0c6b1b3f87bc178b4b52a7d500751..ad56e701e37388c10d19eafba892a0dbc7b004ad 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js
@@ -5,11 +5,18 @@
 define([
     'ko',
     './observable_source',
-    '../../renderer/renderer'
+    './renderer'
 ], function (ko, Source, Renderer) {
     'use strict';
 
-    var sources = {};
+    var RemoteTemplateEngine,
+        NativeTemplateEngine = ko.nativeTemplateEngine,
+        sources = {};
+
+    /**
+     * Remote template engine class. Is used to be able to load remote templates via knockout template binding.
+     */
+    RemoteTemplateEngine = function () {};
 
     /**
      * Creates unique template identifier based on template name and it's extenders (optional)
@@ -20,12 +27,6 @@ define([
         return templateName;
     }
 
-    /**
-     * Remote template engine class. Is used to be able to load remote templates via knockout template binding.
-     */
-    var RemoteTemplateEngine = function () {};
-    var NativeTemplateEngine = ko.nativeTemplateEngine;
-
     RemoteTemplateEngine.prototype = new NativeTemplateEngine;
     RemoteTemplateEngine.prototype.constructor = RemoteTemplateEngine;
 
@@ -34,7 +35,7 @@ define([
      * Caches template after it's unique name and renders in once.
      * If template name is not typeof string, delegates work to knockout.templateSources.anonymousTemplate.
      * @param  {*} template
-     * @return {TemplateSource} - object with methods 'nodes' and 'data'.
+     * @returns {TemplateSource} Object with methods 'nodes' and 'data'.
      */
     RemoteTemplateEngine.prototype.makeTemplateSource = function (template) {
         var source,
@@ -54,11 +55,13 @@ define([
             }
 
             return source;
-        } else if ((template.nodeType == 1) || (template.nodeType == 8)) {
-            return new ko.templateSources.anonymousTemplate(template);
-        } else {
-            throw new Error("Unknown template type: " + template);
+        } else if (template.nodeType === 1 || template.nodeType === 8) {
+            source = new ko.templateSources.anonymousTemplate(template);
+
+            return source;
         }
+
+        throw new Error('Unknown template type: ' + template);
     };
 
     /**
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/loader.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/loader.js
similarity index 99%
rename from app/code/Magento/Ui/view/base/web/js/lib/loader.js
rename to app/code/Magento/Ui/view/base/web/js/lib/ko/template/loader.js
index 03d97b399d7130727a01ff43eb4264dfa3b82d72..da06db381245c02e5c2dd70902898d9dd1b0bbee 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/loader.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/loader.js
@@ -46,6 +46,7 @@ define([
     }
 
     return {
+
         /**
          * Loops over arguments and loads template for each.
          * @return {Deferred} - promise of templates to be loaded
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js
index d97291dcf15c5686af8f2d0fa0efb74edd503984..251163992ba056cb2d287e8f67ae96b5b750a577 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js
@@ -5,16 +5,20 @@
 /**
  * Is being used by knockout template engine to store template to.
  */
-define(['ko', 'Magento_Ui/js/lib/class'], function(ko, Class) {
+define([
+    'ko',
+    'uiClass'
+], function (ko, Class) {
     'use strict';
 
     return Class.extend({
 
         /**
          * Initializes templateName, _data, nodes properties.
+         *
          * @param  {template} template - identifier of template
          */
-        initialize: function(template) {
+        initialize: function (template) {
             this.templateName = template;
             this._data = {};
             this.nodes = ko.observable([]);
@@ -27,7 +31,7 @@ define(['ko', 'Magento_Ui/js/lib/class'], function(ko, Class) {
          * @param  {*} value
          * @return {*} - if 1 arg provided, returnes _data[key] property
          */
-        data: function(key, value) {
+        data: function (key, value) {
             if (arguments.length === 1) {
                 return this._data[key];
             }
@@ -35,4 +39,4 @@ define(['ko', 'Magento_Ui/js/lib/class'], function(ko, Class) {
             this._data[key] = value;
         }
     });
-});
\ No newline at end of file
+});
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/renderer.js
similarity index 92%
rename from app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js
rename to app/code/Magento/Ui/view/base/web/js/lib/ko/template/renderer.js
index 9da1291111f07e421eb1f41ca8b1ee6aa67bf1bb..55bf63998479fea2c220a9d0ad92102c7a447fdc 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/ko/template/renderer.js
@@ -3,17 +3,20 @@
  * See COPYING.txt for license details.
  */
 define([
-    '../loader',
+    './loader',
     'jquery',
     'underscore'
 ], function (loader, $, _) {
     'use strict';
 
     return {
+
         /**
          * Renders template and it's extenders using this._parse function.
-         * Loads all extenders then merges them and wraps into div[data-template-extend="parent"] where parent is target template.
+         * Loads all extenders then merges them and wraps into
+         * div[data-template-extend="parent"] where parent is target template.
          * If no extenders provider, simply loads target template and passes execution to _parse.
+         *
          * @param {String} template - string, representing path to core template and it's extenders.
          * @returns {Deferred} - Promise of template to be rendered. Is being resolved with array of HTML elements.
          */
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js b/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js
index 09c398ef01a896962342ad95fc39f8178f01007d..69fcebf547ef5fa076440a736fece570373fc629 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/registry/events.js
@@ -9,10 +9,13 @@ define([
 ], function (_, utils) {
     'use strict';
 
+    /**
+     * @constructor
+     */
     function Events(storage) {
         this.id = 0,
 
-        this.requests   = new Map()
+        this.requests   = new Map();
         this.map        = {};
         this.storage    = storage;
 
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js b/app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js
index e31839400d0d171b332e76ecb0f1f5ba906167e4..eb01b49615c7427738985af0982bf9175094800c 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js
@@ -10,6 +10,19 @@ define([
 ], function (utils, _, Storage, Events) {
     'use strict';
 
+    /**
+     * Wrapper function used for convinient access to elements.
+     * See 'async' method for examples of usage and comparison
+     * with a regular 'get' method.
+     *
+     * @param {String} name - Key of the requested element.
+     * @param {Registry} registry - Instance of a registry
+     *      where to search for the element.
+     * @param {(Function|String)} [method] - Optional callback function
+     *      or a name of the elements' method which
+     *      will be invoked when element is registered.
+     * @returns {*}
+     */
     function async(name, registry, method) {
         var args = _.toArray(arguments).slice(3);
 
@@ -24,6 +37,9 @@ define([
         }
     }
 
+    /**
+     * @constructor
+     */
     function Registry() {
         this.storage = new Storage();
         this.events = new Events(this.storage);
@@ -35,15 +51,12 @@ define([
         /**
          * Retrieves data from registry.
          *
-         * @param {(String|Array)} elems -
-         *      An array of elements' names or a string of names divided by spaces.
-         * @param {Function} [callback] -
-         *      Callback function that will be triggered
-         *      when all of the elements are registered.
-         * @returns {Array|*|Undefined}
-         *      Returns either an array of elements
-         *      or an element itself if only is requested.
-         *      If callback function is specified then returns 'undefined'.
+         * @param {(String|Array)} elems - An array of elements' names or
+         *      a string of names divided by spaces.
+         * @param {Function} [callback] - Callback function that will be invoked
+         *      when all of the requested elements are registered.
+         * @returns {Array|*|Undefined} An array of elements
+         *      or an element itself if only one was requested.
          */
         get: function (elems, callback) {
             var records;
@@ -61,12 +74,12 @@ define([
             }
         },
 
-       /**
+        /**
          * Sets data to registry.
          *
          * @param {String} elem - Elements' name.
          * @param {*} value - Value that will be assigned to the element.
-         * @returns {registry} Chainable.
+         * @returns {Registry} Chainable.
          */
         set: function (elem, value) {
             this.storage.set(elem, value);
@@ -77,9 +90,10 @@ define([
 
         /**
          * Removes specified elements from a storage.
-         * @param {(String|Array)} elems -
-         *      An array of elements' names or a string of names divided by spaces.
-         * @returns {registry} Chainable.
+         *
+         * @param {(String|Array)} elems - An array of elements' names or
+         *      a string of names divided by spaces.
+         * @returns {Registry} Chainable.
          */
         remove: function (elems) {
             elems = utils.stringToArray(elems);
@@ -89,11 +103,11 @@ define([
             return this;
         },
 
-       /**
+        /**
          * Checks whether specified elements has been registered.
          *
-         * @param {(String|Array)} elems -
-         *      An array of elements' names or a string of names divided by spaces.
+         * @param {(String|Array)} elems - An array of elements' names or
+         *      a string of names divided by spaces.
          * @returns {Boolean}
          */
         has: function (elems) {
@@ -102,10 +116,40 @@ define([
             return this.storage.has(elems);
         },
 
+        /**
+         * Creates a function wrapper for the specified element,
+         * to provide more convinient access.
+         *
+         * @param {String} name - Name of the element.
+         * @returns {Function}
+         *
+         * @example Comparison with a 'get' method on requesting elements.
+         *      var module = registry.async('name');
+         *
+         *      module();
+         *      => registry.get('name');
+         *
+         * @example Requesting an element with a callback.
+         *      module(function (component) {});
+         *
+         *      => registry.get('name', function (component) {});
+         *
+         * @example Requesting an element and invoking its' method.
+         *      module('trigger', true);
+         *
+         *      => registry.get('name', function (component) {
+         *          component.trigger(true);
+         *      });
+         */
         async: function (name) {
             return async.bind(null, name, this);
         },
 
+        /**
+         * Creates new instance of a Registry.
+         *
+         * @returns {Registry} New instance.
+         */
         create: function () {
             return new Registry;
         }
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js b/app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js
index ae3063cb07c2035df1189b86912792636bd35874..5012eba16a5e9927064346e08f0307750157cbfb 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js
@@ -7,6 +7,9 @@ define([
 ], function () {
     'use strict';
 
+    /**
+     * @constructor
+     */
     function Storage() {
         this.data = new Map();
     }
diff --git a/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js b/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js
index 1b5743cd9d29aea5d12841306cd3dc0c1fd4ee6f..7986b18780600f7a3c705572d29149b54ab50be6 100644
--- a/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js
+++ b/app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js
@@ -126,7 +126,6 @@ define([
      */
     function setRootListener(data, component) {
         boundedNodes.get(component, function (root) {
-            var ctx = data.ctx || '*'
             if (!$(root).is(data.ctx || '*')) {
                 return;
             }
@@ -223,7 +222,7 @@ define([
         /**
          * Sets removal listener of the specified nodes.
          *
-         * @param {{HTMLElement|Array|ArrayLike}} nodes - Nodes whose removal to track.
+         * @param {(HTMLElement|Array|ArrayLike)} nodes - Nodes whose removal to track.
          * @param {Function} fn - Callback that will be invoked when node is removed.
          */
         remove: function (nodes, fn) {
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/alert.js b/app/code/Magento/Ui/view/base/web/js/modal/alert.js
index 33be3c8041dea6c2f0586124bc3f1e8120020cef..f422083aab9b27af1969866da18182716a241ad1 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/alert.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/alert.js
@@ -2,6 +2,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+
 define([
     'jquery',
     'underscore',
@@ -16,19 +17,31 @@ define([
             modalClass: 'confirm',
             title: $.mage.__('Attention'),
             actions: {
+
+                /**
+                 * Callback always - called on all actions.
+                 */
                 always: function () {}
             },
             buttons: [{
                 text: $.mage.__('OK'),
-                class: 'action-secondary',
+                class: 'action-primary action-accept',
+
+                /**
+                 * Click handler.
+                 */
                 click: function () {
                     this.closeModal(true);
                 }
             }]
         },
+
+        /**
+         * Close modal window.
+         */
         closeModal: function () {
             this.options.actions.always();
-            this.element.bind('confirmclosed', _.bind(this._remove, this));
+            this.element.bind('alertclosed', _.bind(this._remove, this));
 
             return this._super();
         }
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
index 7bad2023b649b18edeaf710780d8cf0e73a5f6b9..098cb8669741e15eedb8fb0df607a0658cec98f8 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/confirm.js
@@ -2,6 +2,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
+
 define([
     'jquery',
     'underscore',
@@ -16,36 +17,72 @@ define([
             modalClass: 'confirm',
             title: '',
             actions: {
-                always: function(){},
-                confirm: function(){},
-                cancel: function(){}
+
+                /**
+                 * Callback always - called on all actions.
+                 */
+                always: function () {},
+
+                /**
+                 * Callback confirm.
+                 */
+                confirm: function () {},
+
+                /**
+                 * Callback cancel.
+                 */
+                cancel: function () {}
             },
             buttons: [{
                 text: $.mage.__('Cancel'),
-                class: 'action-tertiary',
-                click: function(){
+                class: 'action-secondary action-dismiss',
+
+                /**
+                 * Click handler.
+                 */
+                click: function () {
                     this.closeModal();
                 }
             }, {
                 text: $.mage.__('OK'),
-                class: 'action-secondary',
-                click: function() {
+                class: 'action-primary action-accept',
+
+                /**
+                 * Click handler.
+                 */
+                click: function () {
                     this.closeModal(true);
                 }
             }]
         },
-        _create: function() {
+
+        /**
+         * Create widget.
+         */
+        _create: function () {
             this._super();
             this.modal.find(this.options.modalCloseBtn).off().on('click',  _.bind(this.closeModal, this, false));
             this.openModal();
         },
-        _remove: function() {
+
+        /**
+         * Remove modal window.
+         */
+        _remove: function () {
             this.modal.remove();
         },
-        openModal: function() {
+
+        /**
+         * Open modal window.
+         */
+        openModal: function () {
             return this._super();
         },
-        closeModal: function(result) {
+
+        /**
+         * Close modal window.
+         */
+        closeModal: function (result) {
             result = result || false;
 
             if (result) {
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/modal.js b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
index 84074ebf9800e689fd6a900afe986c8242664ac9..e99f818068534b4578bdebc4b4f3ef2dc36becc3 100644
--- a/app/code/Magento/Ui/view/base/web/js/modal/modal.js
+++ b/app/code/Magento/Ui/view/base/web/js/modal/modal.js
@@ -10,9 +10,10 @@ define([
     'text!ui/template/modal/modal-popup.html',
     'text!ui/template/modal/modal-slide.html',
     'text!ui/template/modal/modal-custom.html',
+    'Magento_Ui/js/lib/key-codes',
     'jquery/ui',
     'mage/translate'
-], function ($, _, template, popupTpl, slideTpl, customTpl) {
+], function ($, _, template, popupTpl, slideTpl, customTpl, keyCodes) {
     'use strict';
 
     /**
@@ -44,6 +45,9 @@ define([
             type: 'popup',
             title: '',
             modalClass: '',
+            focus: '[data-role="closeBtn"]',
+            autoOpen: false,
+            clickableOverlay: true,
             popupTpl: popupTpl,
             slideTpl: slideTpl,
             customTpl: customTpl,
@@ -56,6 +60,9 @@ define([
             modalCloseBtn: '[data-role="closeBtn"]',
             modalContent: '[data-role="content"]',
             modalAction: '[data-role="action"]',
+            focusableScope: '[data-role="focusable-scope"]',
+            focusableStart: '[data-role="focusable-start"]',
+            focusableEnd: '[data-role="focusable-end"]',
             appendTo: 'body',
             wrapperClass: 'modals-wrapper',
             overlayClass: 'modals-overlay',
@@ -66,6 +73,7 @@ define([
             buttons: [{
                 text: $.mage.__('Ok'),
                 class: '',
+                attr: {},
 
                 /**
                  * Default action on button click
@@ -75,16 +83,45 @@ define([
                 }
             }]
         },
+        keyEventHandlers: {
+
+            /**
+             * Tab key press handler,
+             * set focus to elements
+             */
+            tabKey: function () {
+                if (document.activeElement === this.modal[0]) {
+                    this._setFocus('start');
+                }
+            },
+
+            /**
+             * Escape key press handler,
+             * close modal window
+             */
+            escapeKey: function () {
+                if (this.options.isOpen && this.modal.find(document.activeElement).length ||
+                    this.options.isOpen && this.modal[0] === document.activeElement) {
+                    this.closeModal();
+                }
+            }
+        },
 
         /**
          * Creates modal widget.
          */
         _create: function () {
+            _.bindAll(
+                this,
+                'keyEventSwitcher',
+                '_tabSwitcher',
+                'closeModal'
+            );
+
             this.options.transitionEvent = transitionEvent;
             this._createWrapper();
             this._renderModal();
             this._createButtons();
-
             $(this.options.trigger).on('click', _.bind(this.toggleModal, this));
             this._on(this.modal.find(this.options.modalCloseBtn), {
                 'click': this.closeModal
@@ -93,6 +130,7 @@ define([
                 'openModal': this.openModal,
                 'closeModal': this.closeModal
             });
+            this.options.autoOpen ? this.openModal() : false;
         },
 
         /**
@@ -123,6 +161,18 @@ define([
             return elems.filter('.' + this.options.modalVisibleClass).length;
         },
 
+        /**
+         * Listener key events.
+         * Call handler function if it exists
+         */
+        keyEventSwitcher: function (event) {
+            var key = keyCodes[event.keyCode];
+
+            if (this.keyEventHandlers.hasOwnProperty(key)) {
+                this.keyEventHandlers[key].apply(this, arguments);
+            }
+        },
+
         /**
          * Toggle modal.
          * * @return {Element} - current element.
@@ -141,9 +191,12 @@ define([
          */
         openModal: function () {
             this.options.isOpen = true;
+            this.focussedElement = document.activeElement;
             this._createOverlay();
             this._setActive();
+            this._setKeyListener();
             this.modal.one(this.options.transitionEvent, _.bind(this._trigger, this, 'opened'));
+            this.modal.one(this.options.transitionEvent, _.bind(this._setFocus, this, 'end', 'opened'));
             this.modal.addClass(this.options.modalVisibleClass);
 
             if (!this.options.transitionEvent) {
@@ -153,6 +206,68 @@ define([
             return this.element;
         },
 
+        /**
+         * Set focus to element.
+         * @param {String} position - can be "start" and "end"
+         *      positions.
+         *      If position is "end" - sets focus to first
+         *      focusable element in modal window scope.
+         *      If position is "start" - sets focus to last
+         *      focusable element in modal window scope
+         *
+         *  @param {String} type - can be "opened" or false
+         *      If type is "opened" - looks to "this.options.focus"
+         *      property and sets focus
+         */
+        _setFocus: function (position, type) {
+            var focusableElements,
+                infelicity;
+
+            if (type === 'opened' && this.options.focus) {
+                this.modal.find($(this.options.focus)).focus();
+            } else if (type === 'opened' && !this.options.focus) {
+                this.modal.find(this.options.focusableScope).focus();
+            } else if (position === 'end') {
+                this.modal.find(this.options.modalCloseBtn).focus();
+            } else if (position === 'start') {
+                infelicity = 2; //Constant for find last focusable element
+                focusableElements = this.modal.find(':focusable');
+                focusableElements.eq(focusableElements.length - infelicity).focus();
+            }
+        },
+
+        /**
+         * Set events listener when modal is opened.
+         */
+        _setKeyListener: function () {
+            this.modal.find(this.options.focusableStart).bind('focusin', this._tabSwitcher);
+            this.modal.find(this.options.focusableEnd).bind('focusin', this._tabSwitcher);
+            this.modal.bind('keydown', this.keyEventSwitcher);
+        },
+
+        /**
+         * Remove events listener when modal is closed.
+         */
+        _removeKeyListener: function () {
+            this.modal.find(this.options.focusableStart).unbind('focusin', this._tabSwitcher);
+            this.modal.find(this.options.focusableEnd).unbind('focusin', this._tabSwitcher);
+            this.modal.unbind('keydown', this.keyEventSwitcher);
+        },
+
+        /**
+         * Switcher for focus event.
+         * @param {Object} e - event
+         */
+        _tabSwitcher: function (e) {
+            var target = $(e.target);
+
+            if (target.is(this.options.focusableStart)) {
+                this._setFocus('start');
+            } else if (target.is(this.options.focusableEnd)) {
+                this._setFocus('end');
+            }
+        },
+
         /**
          * Close modal.
          * * @return {Element} - current element.
@@ -160,6 +275,7 @@ define([
         closeModal: function () {
             var that = this;
 
+            this._removeKeyListener();
             this.options.isOpen = false;
             this.modal.one(this.options.transitionEvent, function () {
                 that._close();
@@ -179,6 +295,7 @@ define([
         _close: function () {
             var trigger = _.bind(this._trigger, this, 'closed', this.modal);
 
+            $(this.focussedElement).focus();
             this._destroyOverlay();
             this._unsetActive();
             _.defer(trigger, this);
@@ -246,6 +363,9 @@ define([
             _.each(this.options.buttons, function (btn, key) {
                 var button = that.buttons[key];
 
+                if (btn.attr) {
+                    $(button).attr(btn.attr);
+                }
                 $(button).on('click', _.bind(btn.click, that));
             });
         },
@@ -254,8 +374,7 @@ define([
          * Creates overlay, append it to wrapper, set previous click event on overlay.
          */
         _createOverlay: function () {
-            var that = this,
-                events;
+            var events;
 
             this.overlay = $('.' + this.options.overlayClass);
 
@@ -266,13 +385,8 @@ define([
                     .appendTo(this.modalWrapper);
             }
             events = $._data(this.overlay.get(0), 'events');
-
-            if (events) {
-                this.prevOverlayHandler = events.click[0].handler;
-            }
-            this.overlay.unbind().on('click', function () {
-                that.closeModal();
-            });
+            events ? this.prevOverlayHandler = events.click[0].handler : false;
+            this.options.clickableOverlay ? this.overlay.unbind().on('click', this.closeModal) : false;
         },
 
         /**
diff --git a/app/code/Magento/Ui/view/base/web/js/modal/prompt.js b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
new file mode 100644
index 0000000000000000000000000000000000000000..0866050dcafc5f571fb3a8049036cda5345faf9e
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/js/modal/prompt.js
@@ -0,0 +1,120 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'jquery',
+    'underscore',
+    'jquery/ui',
+    'Magento_Ui/js/modal/modal',
+    'mage/translate'
+], function ($, _) {
+    'use strict';
+
+    $.widget('mage.prompt', $.mage.modal, {
+        options: {
+            modalClass: 'prompt',
+            promptField: '[data-role="promptField"]',
+            value: '',
+            actions: {
+
+                /**
+                 * Callback always - called on all actions.
+                 */
+                always: function () {},
+
+                /**
+                 * Callback confirm.
+                 */
+                confirm: function () {},
+
+                /**
+                 * Callback cancel.
+                 */
+                cancel: function () {}
+            },
+            buttons: [{
+                text: $.mage.__('Cancel'),
+                class: 'action-secondary action-dismiss',
+
+                /**
+                 * Click handler.
+                 */
+                click: function () {
+                    this.closeModal();
+                }
+            }, {
+                text: $.mage.__('OK'),
+                class: 'action-primary action-accept',
+
+                /**
+                 * Click handler.
+                 */
+                click: function () {
+                    this.closeModal(true);
+                }
+            }]
+        },
+
+        /**
+         * Create widget.
+         */
+        _create: function () {
+            this.options.focus = this.options.promptField;
+            this._super();
+            this.modal.find(this.options.modalContent).append(
+                '<div class="prompt-message">' +
+                    '<input data-role="promptField" id="prompt-field" class="admin__control-text" type="text"/>' +
+                '</div>'
+            );
+            this.modal.find(this.options.modalCloseBtn).off().on('click',  _.bind(this.closeModal, this, false));
+            this.openModal();
+        },
+
+        /**
+         * Compile template and append to wrapper.
+         */
+        _renderModal: function () {
+            this._super();
+            this.element.wrap('<label for="prompt-field"></label>');
+        },
+
+        /**
+         * Remove widget
+         */
+        _remove: function () {
+            this.modal.remove();
+        },
+
+        /**
+         * Open modal window
+         */
+        openModal: function () {
+            this._super();
+            this.modal.find(this.options.promptField).val(this.options.value);
+        },
+
+        /**
+         * Close modal window
+         */
+        closeModal: function (result) {
+            var value;
+
+            if (result) {
+                value = this.modal.find(this.options.promptField).val();
+                this.options.actions.confirm(value);
+            } else {
+                this.options.actions.cancel();
+            }
+            this.options.actions.always();
+            this.element.bind('promptclosed', _.bind(this._remove, this));
+
+            return this._super();
+        }
+    });
+
+    return function (config) {
+        return $('<div></div>').html(config.content).prompt(config);
+    };
+});
diff --git a/app/code/Magento/Ui/view/base/web/templates/collection.html b/app/code/Magento/Ui/view/base/web/templates/collection.html
index ac5ce2ca9de45d64dfd2f850e5598ed0aa9bc617..a5e802420e3882aed300a992b82a01e740296dbe 100644
--- a/app/code/Magento/Ui/view/base/web/templates/collection.html
+++ b/app/code/Magento/Ui/view/base/web/templates/collection.html
@@ -5,5 +5,7 @@
  */
 -->
 <!-- ko foreach: { data: elems, as: 'element' } -->
-    <!-- ko template: element.getTemplate() --><!-- /ko -->
+    <!-- ko if: hasTemplate() -->
+        <!-- ko template: getTemplate() --><!-- /ko -->
+    <!-- /ko -->
 <!-- /ko -->
diff --git a/app/code/Magento/Ui/view/base/web/templates/form/element/checkbox.html b/app/code/Magento/Ui/view/base/web/templates/form/element/checkbox.html
index 01dca8a5b9318157f562333f27546e07f3d0e081..1d00fae66ae2ab08fefef861146d0658cdc405df 100644
--- a/app/code/Magento/Ui/view/base/web/templates/form/element/checkbox.html
+++ b/app/code/Magento/Ui/view/base/web/templates/form/element/checkbox.html
@@ -7,8 +7,7 @@
 <div class="admin__field admin__field-option">
     <input type="checkbox" class="admin__control-checkbox" data-bind="checked: value, attr: { id: uid, disabled: disabled, name: inputName }, hasFocus: focused">
 
-    <label class="admin__field-label" data-bind="checked: value, attr: { for: uid }">
-        <span data-bind="text: description || label"></span>
+    <label class="admin__field-label" data-bind="text: description || label, attr: { for: uid }">
     </label>
 
     <!-- ko if: notice -->
diff --git a/app/code/Magento/Ui/view/base/web/templates/form/element/media.html b/app/code/Magento/Ui/view/base/web/templates/form/element/media.html
index 64c9f82070dd23b382f04b1f1af237ce376365f7..627d6689262fd1e5cba45c023193e59cd3f306a9 100644
--- a/app/code/Magento/Ui/view/base/web/templates/form/element/media.html
+++ b/app/code/Magento/Ui/view/base/web/templates/form/element/media.html
@@ -12,6 +12,7 @@
         placeholder: placeholder,
         'aria-describedby': noticeId,
         id: uid,
-        disabled: disabled
+        disabled: disabled,
+        form: formId
     }"
 />
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/actions.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/actions.html
index 22105aed42f6d0eb382162432c3317431a32cbeb..653696ed6fd0cf085345fd8b8f2bdd5c42536e91 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/actions.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/actions.html
@@ -4,50 +4,49 @@
  * See COPYING.txt for license details.
  */
 -->
+<!-- ko if: $col.isSingle($row()._rowIndex) -->
+<a
+    class="action-menu-item"
+    data-bind="
+        repeat: {
+            foreach: $col.getVisibleActions($row()._rowIndex),
+            item: '$action'
+        }"
+    data-repeat-bind="
+        attr: {
+            href: $action().href
+        },
+        click: $col.getActionHandler($action()),
+        text: $action().label"
+    ></a>
+<!-- /ko -->
 
-<td data-bind="visible: visible" class="data-grid-actions-cell">
-    <!-- ko if: isSingle(row._rowIndex) -->
-        <!-- ko foreach: getVisibleActions(row._rowIndex) -->
-    <a
-        class="action-menu-item"
+<!-- ko if: $col.isMultiple($row()._rowIndex) -->
+<div
+    class="action-select-wrap"
+    data-bind="collapsible">
+    <button class="action-select" data-bind="toggleCollapsible">
+        <span data-bind="i18n: 'Select'"></span>
+    </button>
+    <ul
+        class="action-menu"
         data-bind="
-            attr: {
-                href: $data.href
-            },
-            click: $parent.isHandlerRequired(index, rowIndex) ?
-                $parent.applyAction.bind($parent, index, rowIndex) :
-                false,
-            text: $data.label"></a>
-        <!-- /ko -->
-    <!-- /ko -->
-
-    <!-- ko if: isMultiple(row._rowIndex) -->
-    <div
-        class="action-select-wrap"
-        data-bind="collapsible">
-        <button class="action-select" data-bind="toggleCollapsible">
-            <span data-bind="i18n: 'Select'"></span>
-        </button>
-        <ul
-            class="action-menu"
-            data-bind="css: {
-            '_active': $collapsible.opened
-            },
-            foreach: getVisibleActions(row._rowIndex)"
-            >
-            <li>
-                <a
-                    class="action-menu-item"
-                    data-bind="
-                        attr: {
-                            href: $data.href
-                        },
-                        click: $parent.isHandlerRequired(index, rowIndex) ?
-                            $parent.applyAction.bind($parent, index, rowIndex) :
-                            false,
-                        text: $data.label"></a>
-            </li>
-        </ul>
-    </div>
-    <!-- /ko -->
-</td>
+            css: {'_active': $collapsible.opened}">
+        <li
+            data-bind="
+                repeat: {
+                    foreach: $col.getVisibleActions($row()._rowIndex),
+                    item: '$action'
+                }">
+            <a
+                class="action-menu-item"
+                data-bind="
+                    attr: {
+                        href: $action().href
+                    },
+                    click: $col.getActionHandler($action()),
+                    text: $action().label"></a>
+        </li>
+    </ul>
+</div>
+<!-- /ko -->
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/html.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/html.html
index 9d5226a5e3c792fc466dbfd28f7f29e846c5606e..5e48189716a9322c1cfbc16de8f7076442a3e8db 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/html.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/html.html
@@ -4,16 +4,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<td
-    data-bind="
-        visible: visible,
-        css: { _dragging: dragging },
-        click: hasFieldAction() ?
-            applyFieldAction.bind($data, row._rowIndex) :
-            false"
-    data-action="grid-row-edit">
-    <div
-            data-bind="html: getLabel(row[field.index])"
-            class="data-grid-cell-content">
-    </div>
-</td>
+<div
+    class="data-grid-cell-content"
+    data-bind="html: $col.getLabel($row())">
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/multiselect.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/multiselect.html
index 242c651f006d16896d55dcb52d0d8332bab9eb71..f0964a155e1e89fd453d748f0af3d20ef6bbec50 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/multiselect.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/multiselect.html
@@ -4,20 +4,16 @@
  * See COPYING.txt for license details.
  */
 -->
-
-<td class="data-grid-checkbox-cell" data-bind="visible: visible">
-    <label class="data-grid-checkbox-cell-inner">
-        <input
-            class="admin__control-checkbox"
-            type="checkbox"
-            data-action="select-row"
-            data-bind="
-                disable: disabled.indexOf(row[indexField]) != -1,
-                checked: selected,
-                value: row[indexField],
-                attr: {
-                    id: 'check' + row[indexField]
-                }">
-        <label data-bind="attr: {for: 'check' + row[indexField]}"></label>
-    </label>
-</td>
+<label class="data-grid-checkbox-cell-inner">
+    <input
+        class="admin__control-checkbox"
+        type="checkbox"
+        data-action="select-row"
+        data-bind="
+            staticChecked: $col.selected,
+            checkedValue: $row()[$col.indexField],
+            attr: {
+                id: 'check' + $row()[$col.indexField]
+            }">
+    <label data-bind="attr: {for: 'check' + $row()[$col.indexField]}"></label>
+</label>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/onoff.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/onoff.html
new file mode 100644
index 0000000000000000000000000000000000000000..9a23d227e583a5f35db1d2ea2a28592fced7c248
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/onoff.html
@@ -0,0 +1,24 @@
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<div class="switcher">
+    <input
+            class="admin__control-onoff"
+            type="checkbox"
+            data-bind="
+                staticChecked: $col.selected,
+                value: $row()[$col.indexField],
+                attr: {
+                    id: 'check' + $row()[$col.indexField]
+                }">
+    <label
+        class="switcher-label"
+        data-bind="
+            attr: {
+                for: 'check' + $row()[$col.indexField]
+            },
+            text: $col.getLabel($row()[$col.indexField])"></label>
+</div>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/text.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/text.html
index 3544f503de6d9189933c9f0ef603da5841b935f3..bdd0d673514637cfb7b655d42eb510cad2247489 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/text.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/text.html
@@ -4,17 +4,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<td
-    data-bind="
-        visible: visible,
-        css: { _dragging: dragging },
-        click: hasFieldAction() ?
-            applyFieldAction.bind($data, row._rowIndex) :
-            false"
-    data-action="grid-row-edit">
-    <div
-        data-bind="
-            text: getLabel(row[field.index])"
-            class="data-grid-cell-content">
-    </div>
-</td>
+<div
+    class="data-grid-cell-content"
+    data-bind="text: $col.getLabel($row())">
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/cells/thumbnail.html b/app/code/Magento/Ui/view/base/web/templates/grid/cells/thumbnail.html
index d8ce11138decf4e3cd5eca47b75dde55192690f8..e45dd5eabc3a73dc91c8fef473101cd2ccad2dc6 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/cells/thumbnail.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/cells/thumbnail.html
@@ -4,12 +4,11 @@
  * See COPYING.txt for license details.
  */
 -->
-<td class="data-grid-thumbnail-cell"
-    data-bind="visible: visible, click: isPreviewAvailable() ? preview.bind($data, row, $parentContext.$index()) : false"
-    data-action="grid-row-edit">
-    <img src="" class="admin__control-thumbnail" data-bind="
-    attr: {
-        src: getSrc(row),
-        alt: getAlt(row)
-    }"/>
-</td>
+<img
+    class="admin__control-thumbnail"
+    data-bind="
+        attr: {
+            src: $col.getSrc($row()),
+            alt: $col.getAlt($row())
+        }
+    "/>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/columns/multiselect.html b/app/code/Magento/Ui/view/base/web/templates/grid/columns/multiselect.html
index 4606d8e27b9a19e5236f6b7f28d66076805b43d1..8caad7bfc0980c68c19d38ac421ed2fe21fc70c6 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/columns/multiselect.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/columns/multiselect.html
@@ -5,7 +5,7 @@
  */
 -->
 
-<th class="data-grid-multicheck-cell" data-bind="visible: visible">
+<th class="data-grid-multicheck-cell">
     <div
         class="action-multicheck-wrap"
         data-bind="css: {'_disabled': !totalRecords()},
@@ -36,4 +36,4 @@
             </li>
         </ul>
     </div>
-</th>
+</th>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/columns/onoff.html b/app/code/Magento/Ui/view/base/web/templates/grid/columns/onoff.html
new file mode 100644
index 0000000000000000000000000000000000000000..5e68fc3a77bb5b317db04d737af43644e9f7bd73
--- /dev/null
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/columns/onoff.html
@@ -0,0 +1,42 @@
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+
+<th class="data-grid-multicheck-cell">
+    <label data-bind="i18n: 'Assign'"></label>
+    <div
+            class="action-multicheck-wrap"
+            style="width: 3.3rem"
+            data-bind="css: {'_disabled': !totalRecords()}, collapsible">
+        <input
+                id="mass-select-checkbox"
+                class="admin__control-checkbox"
+                type="checkbox"
+                data-bind="checked: allSelected(),
+                       event: { change: toggleSelectAll },
+                       css: { '_indeterminate': indetermine },
+                       enable: totalRecords">
+        <label for="mass-select-checkbox" class="data-grid-onoff-label">
+            <span data-bind="i18n: 'Select all'"></span>
+        </label>
+        <button
+                class="action-multicheck-toggle"
+                data-toggle="dropdown"
+                data-bind="css: { '_active': $collapsible.opened },
+                       enable: totalRecords
+                       toggleCollapsible">
+            <span data-bind="i18n: 'Options'"></span>
+        </button>
+        <ul
+                class="action-menu"
+                data-bind="closeCollapsible, foreach: actions">
+            <li data-bind="click: $parent[value].bind($parent),
+                           visible: $parent.isActionRelevant(value)">
+                <span class="action-menu-item" data-bind="text: label"></span>
+            </li>
+        </ul>
+    </div>
+</th>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/columns/text.html b/app/code/Magento/Ui/view/base/web/templates/grid/columns/text.html
index dfd36be3f731022266fcccb9fe6cceefaa7c4872..318cb9d09427ed332185bb4c2ec1e9dcb9931d07 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/columns/text.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/columns/text.html
@@ -10,13 +10,12 @@
         css: {
             '_sortable': sortable,
             '_draggable': draggable,
-            '_ascend': sorting() === 'asc',
-            '_descend': sorting() === 'desc'
+            '_ascend': sorting === 'asc',
+            '_descend': sorting === 'desc'
         },
-        click: sort,
-        visible: visible">
+        click: sort">
     <span
         class="data-grid-cell-content"
         data-bind="text: label">
     </span>
-</th>
+</th>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/bookmarks.html b/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/bookmarks.html
index 850f3c2fce793487392414a8ff1f95bc45f5daa5..8dcb904750dff5aa75fd5988244387ffda390049 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/bookmarks.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/bookmarks.html
@@ -15,15 +15,63 @@
         data-bind="toggleCollapsible"
         data-toggle="dropdown"
         aria-haspopup="true">
-        <span class="admin__action-dropdown-text"
-                data-bind="i18n: activeView() ? activeView().label() : 'Default View' "></span>
+        <span
+            class="admin__action-dropdown-text"
+            data-bind="text: activeView.label"></span>
     </button>
     <ul class="admin__action-dropdown-menu">
-        <!-- ko foreach: elems -->
-            <!-- ko template: getTemplate() --><!-- /ko -->
-        <!-- /ko -->
-        <li data-bind="visible: hasChanges" class="action-dropdown-menu-action action-dropdown-menu-item-last">
-            <a href="" data-bind="click: createNewView, i18n: 'Save Current View'"></a>
+        <li 
+            data-bind="repeat: {
+                foreach: viewsArray,
+                item: '$view'
+            }"
+            data-repeat-bind="
+                css: {
+                    _edit: isEditing($view().index)
+                },
+                outerClick: endEdit.bind($data, $view().index),
+                template: viewTmpl
+            ">
+        </li>
+        <li data-bind="
+                visible: hasChanges,
+                outerClick: hideCustom.bind($data),
+                css: {
+                        _edit: customVisible,
+                        'action-dropdown-menu-action action-dropdown-menu-item-last': !customVisible
+                    }
+                ">
+            <a href=""
+                data-bind="
+                    visible: !customVisible,
+                    click: showCustom,
+                    i18n: 'Save View As...'
+                "></a>
+            <div class="action-dropdown-menu-item-edit" data-bind="visible: customVisible">
+                <input
+                    class="admin__control-text"
+                    data-bind="
+                        value: customLabel,
+                        autoselect,
+                        hasFocus: isCustomVisible(),
+                        keyboard: {
+                            13: applyCustom.bind($data),
+                            27: hideCustom.bind($data)
+                        }"
+                    type="text">
+                <div class="action-dropdown-menu-item-actions">
+                   <button
+                        class="action-submit"
+                        data-bind="
+                            attr: {
+                                title: $t('Save all changes')
+                            },
+                            click: applyCustom"
+                        type="button">
+                        <span data-bind="i18n: 'Submit'"></span>
+                    </button>
+                </div>
+            </div>
         </li>
     </ul>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/view.html b/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/view.html
index 707fad8eabbe87f3fc4120fd49e9b2afb6ce4b26..6aa2fc9556298a7529388be5addb4a7cb0f73f2f 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/view.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/controls/bookmarks/view.html
@@ -4,52 +4,70 @@
  * See COPYING.txt for license details.
  */
 -->
-<li
-    data-bind="css: {_edit: editing}, outerClick: endEdit.bind($data)">
-    <!-- ko if: editable -->
-    <div class="action-dropdown-menu-item-edit">
-        <input
-            class="admin__control-text"
+<!-- ko if: $view().editable -->
+<div
+    class="action-dropdown-menu-item-edit">
+    <input
+        class="admin__control-text"
+        data-bind="
+            value: $view().value,
+            hasFocus: isEditing($view().index),
+            autoselect,
+            attr: {
+                placeholder: $view().label
+            },
+            keyboard: {
+                13: updateAndSave.bind($data, $view().index),
+                27: endEdit.bind($data, $view().index)
+            }"
+        type="text">
+    <button
+        class="action-submit"
+        data-bind="
+            attr: {
+                title: $t('Save all changes')
+            },
+            click: updateAndSave.bind($data, $view().index)"
+        type="button">
+        <span data-bind="i18n: 'Submit'"></span>
+    </button>
+    <div class="action-dropdown-menu-item-actions">
+        <button
             data-bind="
-                value: value,
-                hasFocus: editing(),
                 attr: {
-                    placeholder: label
+                    title: $t('Delete bookmark')
                 },
-                keyboard: {
-                    13: function(){ $collapsible.close(); $parent.saveView($data) }
-                }"
-            type="text">
+                click: removeView.bind($data, $view().index)"
+            class="action-delete"
+            type="button">
+            <span data-bind="i18n: 'Delete'"></span>
+        </button>
+    </div>
+</div>
+<!-- /ko -->
+
+<div class="action-dropdown-menu-item">
+    <a
+        class="action-dropdown-menu-link"
+        href=""
+        data-bind="
+            text: $view().label,
+            click: applyView.bind($data, $view().index),
+            closeCollapsible">
+    </a>
+
+    <!-- ko if: $view().editable -->
+    <div class="action-dropdown-menu-item-actions">
         <button
-            class="action-submit"
-            data-bind="click: $parent.saveView.bind($parent, $data), closeCollapsible, attr: {title: $t('Save all changes')}"
+            class="action-edit"
+            data-bind="
+                attr: {
+                    title: $t('Edit bookmark')
+                },
+                click: editView.bind($data, $view().index)"
             type="button">
-            <span data-bind="i18n: 'Submit'"></span>
+            <span data-bind="i18n: 'Edit'"></span>
         </button>
-        <div class="action-dropdown-menu-item-actions">
-            <button
-                data-bind="click: $parent.removeView.bind($parent, $data), closeCollapsible, attr: {title: $t('Delete bookmark')}"
-                class="action-delete"
-                type="button">
-                <span data-bind="i18n: 'Delete'"></span>
-            </button>
-        </div>
     </div>
     <!-- /ko -->
-    <div class="action-dropdown-menu-item">
-        <a
-            class="action-dropdown-menu-link"
-            href=""
-            data-bind="text: label, click: function(){ active(true); }, closeCollapsible"></a>
-        <!-- ko if: editable -->
-        <div class="action-dropdown-menu-item-actions">
-            <button
-                class="action-edit"
-                data-bind="click: startEdit, attr: {title: $t('Edit bookmark')}"
-                type="button">
-                <span data-bind="i18n: 'Edit'"></span>
-            </button>
-        </div>
-        <!-- /ko -->
-    </div>
-</li> 
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/controls/columns.html b/app/code/Magento/Ui/view/base/web/templates/grid/controls/columns.html
index e2dcc3d816376756169ad5896c5e14de65475fe8..2eff0b403073eaf2e367e26dbb0c65f34fac66b3 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/controls/columns.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/controls/columns.html
@@ -19,21 +19,21 @@
         <div class="admin__action-dropdown-menu-header">
             <span data-bind="text: getHeaderMessage()"></span>
         </div>
-        <div class="admin__action-dropdown-menu-content" data-bind="foreach: elems">
-            <div class="admin__field-option">
+        <div class="admin__action-dropdown-menu-content">
+            <div class="admin__field-option" data-bind="repeat: {foreach: elems, item: '$col'}">
                 <input
                     class="admin__control-checkbox"
                     type="checkbox"
                     data-bind="
                         attr: {
-                                id: ++ko.bindingHandlers['uniqueName'].currentIndex + '_uid'
+                            id: ++ko.bindingHandlers['uniqueName'].currentIndex + '_uid'
                         },
-                        disable: $parent.isDisabled($data),
-                        checked: visible"/>
+                        disable: isDisabled($col()),
+                        checked: $col().visible"/>
                 <label
                     class="admin__field-label"
                     data-bind="
-                        text: label,
+                        text: $col().label,
                         attr: {
                             for: ko.bindingHandlers['uniqueName'].currentIndex + '_uid'
                         }"></label>
@@ -52,4 +52,4 @@
             </div>
         </div>
     </div>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/bulk.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/bulk.html
index fe3d785f3d29a4cece894b3df02ece7467f7a6b1..951e0af5cd12d82ad8b053947c324ae105a065fc 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/bulk.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/bulk.html
@@ -8,15 +8,18 @@
     class="data-grid-bulk-edit-panel data-grid-editable-row"
     data-bind="
         visible: active,
-        foreach: fields"
+        foreach: {
+            data: fields,
+            as: '$col'
+        }"
         data-role="data-grid-bulk-row">
+    <!-- ko if: $parent.getColumn(index).visible -->
     <td
         data-bind="
-            visible: $parent.getColumn(index).visible,
             css: {
-                'data-grid-actions-cell': $parent.isActionsColumn($data)
+                'data-grid-actions-cell': $parent.isActionsColumn($col)
             }">
-        <!-- ko if: $parent.isActionsColumn($data) -->
+        <!-- ko if: $parent.isActionsColumn($col) -->
             <!-- ko with: $parent -->
                 <button
                     class="action-default"
@@ -24,7 +27,7 @@
                     data-bind="
                         click: apply,
                         attr: {
-                            disabled: !hasData()
+                            disabled: !hasData
                         }">
                     <span data-bind="i18n: 'Apply'"></span>
                 </button>
@@ -43,4 +46,5 @@
             <!-- ko template: getTemplate() --><!-- /ko -->
         <!-- /ko -->
     </td>
+    <!-- /ko -->
 </tr>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/field.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/field.html
index 77cc47351c89f72d68d7ba428a7c7f7a816ab7ab..a01514ff19136807fe40066d8a3fc6fc6c7f3d3d 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/field.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/field.html
@@ -5,16 +5,14 @@
  */
 -->
 
-<td data-bind="visible: $parent.getColumn(index).visible">
-    <div
-        class="admin__field-control"
-        data-bind="css: {
-            _error: error(),
-            _focus: focused()
-        }">
-        <!-- ko template: getTemplate() --><!-- /ko -->
-        <label
-            class="admin__field-error"
-            data-bind="attr: { for: uid }, text: error, visible: error() && focused()"></label>
-    </div>
-</td>
+<div
+    class="admin__field-control"
+    data-bind="css: {
+        _error: error(),
+        _focus: focused()
+    }">
+    <!-- ko template: getTemplate() --><!-- /ko -->
+    <label
+        class="admin__field-error"
+        data-bind="attr: { for: uid }, text: error, visible: error() && focused()"></label>
+</div>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/header-buttons.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/header-buttons.html
index 834ef42fdbfc620ed0378b594e1077cf3f04ef78..cb41d2538e8afd9e398c73226e6a4586bb4abb78 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/header-buttons.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/header-buttons.html
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 -->
-<div class="data-grid-info-panel" data-bind="visible: isMultiEditing() || (hasActive() && (hasMessages() || hasErrors() ))">
+<div class="data-grid-info-panel" data-bind="visible: isMultiEditing || (hasActive() && (hasMessages() || hasErrors() ))">
     <div class="messages" data-bind="visible: hasMessages() || hasErrors()">
         <div class="message message-warning" data-bind="visible: hasErrors()">
             <strong>There are <!-- ko text: countErrors() --><!-- /ko --> meesages requires your attention.</strong>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html b/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html
index 892eaf35872389aaef796659e7fdb59ca863f2f4..ad64b2a630e93bcecd1767fa751a30a6cd4dfa18 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/editing/row.html
@@ -8,21 +8,28 @@
     data-part="body.row"
     class="data-grid-editable-row"
     data-bind="
-        visible: active,
-        '_odd-row': !!($index() % 2),
+        '_odd-row': !!($row()._rowIndex % 2),
         foreach: {
             data: fields,
-            as: 'field'
+            as: '$col'
         }">
+    <!-- ko if: $parent.getColumn(index).visible -->
+
     <!-- ko if: $parent.isActionsColumn($data) -->
     <td class="data-grid-actions-cell">
-        <span class="data-grid-row-changed" data-bind="css: { _changed: $parent.hasChanges() }">
+        <span class="data-grid-row-changed" data-bind="css: {_changed: $parent.hasChanges}">
             <span class="data-grid-row-changed-tooltip" data-bind="i18n: 'Record contains unsaved changes.'"></span>
         </span>
     </td>
     <!-- /ko -->
-
     <!-- ko ifnot: $parent.isActionsColumn($data) -->
-        <!-- ko template: $data.isEditor ? $parent.fieldTmpl : getBody() --><!-- /ko -->
+        <!-- ko if: $col.isEditor -->
+        <td data-bind="template: $parent.fieldTmpl"></td>
+        <!-- /ko -->
+        <!-- ko ifnot: $col.isEditor -->
+        <td data-bind="template: $col.getBody(), css: $col.getFieldClass()"></td>
+        <!-- /ko -->
+    <!-- /ko -->
+
     <!-- /ko -->
 </tr>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html b/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html
index 84df5efc7227f9e2fde80a844b39c8017d177dea..b77069084f4793a8753418c1c8003da549878ecf 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/exportButton.html
@@ -23,8 +23,8 @@
                 class="admin__control-radio"
                 data-bind="
                     attr: {
-                        id: 'export-field-' + value + $index(),
-                        name: 'export'
+                        id: ++ko.bindingHandlers['uniqueName'].currentIndex + '_uid',
+                        name: $parent.name
                     },
                     checkedValue: value,
                     checked: $parent.checked"
@@ -34,7 +34,7 @@
                 data-bind="
                     text: label,
                     attr: {
-                        for:  'export-field-' + value + $index()
+                        for:  ko.bindingHandlers['uniqueName'].currentIndex + '_uid'
                     }"></label>
         </div>
         <!-- /ko -->
@@ -52,4 +52,4 @@
             </button>
         </div>
     </div>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/filters/chips.html b/app/code/Magento/Ui/view/base/web/templates/grid/filters/chips.html
index e396c223d8a92a5486335ffb6367c95f087322e6..11ef2a9dda524b42bb476e9318908ad74e7883f3 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/filters/chips.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/filters/chips.html
@@ -6,7 +6,9 @@
 -->
 <div
     class="admin__data-grid-filters-current"
-    data-bind="css: {_show: hasData()}">
+    data-bind="css: {
+        _show: hasPreviews()
+    }">
     <div class="admin__current-filters-title-wrap">
         <span
             class="admin__current-filters-title"
@@ -50,7 +52,7 @@
                 i18n: 'Clear all',
                 click: clear,
                 attr: {
-                    'data-action': hasData() ? 'grid-filter-reset' : ''
+                    'data-action': hasPreviews() ? 'grid-filter-reset' : ''
                 }"
             ></button>
     </div>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html b/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html
index c3ae31d52b181ec49fa5ca785cb018cb4824275a..06ca73a0cfba582847e08ca67c87ad31ce3b435b 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/filters/filters.html
@@ -37,18 +37,11 @@
         <legend class="admin__filters-legend">
             <span data-bind="i18n: 'Advanced filter'"></span>
         </legend>
-        <!-- ko foreach: elems -->
-            <!-- ko if: $data.isGroup -->
-            <fieldset class="admin__form-field" data-bind="visible: $parent.isFilterVisible($data)">
-                <!-- ko template: getTemplate() --><!-- /ko -->
-            </fieldset>
-            <!-- /ko -->
-
-            <!-- ko ifnot: $data.isGroup -->
-            <div class="admin__form-field" data-bind="visible: $parent.isFilterVisible($data)">
-                <!-- ko template: getTemplate() --><!-- /ko -->
-            </div>
-            <!-- /ko -->
+        <!-- ko foreach: getRanges() -->
+            <fieldset class="admin__form-field" data-bind="visible: $parent.isFilterVisible($data), template: getTemplate()"></fieldset>
+        <!-- /ko -->
+        <!-- ko foreach: getPlain() -->
+            <div class="admin__form-field" data-bind="visible: $parent.isFilterVisible($data), template: getTemplate()"></div>
         <!-- /ko -->
     </fieldset>
 
@@ -70,4 +63,4 @@
             </button>
         </div>
     </div>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/listing.html b/app/code/Magento/Ui/view/base/web/templates/grid/listing.html
index 1a1428162c153627ca8d67ac3dad8199101a33c7..68595ee87849926fe6096cbfc6c75ec04864d709 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/listing.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/listing.html
@@ -6,26 +6,28 @@
 -->
 <div class="admin__data-grid-wrap" data-role="grid-wrapper">
     <table class="data-grid" data-role="grid">
-        <thead>
-            <tr data-bind="foreach: elems">
-                <!-- ko template: getHeader() --><!-- /ko -->
+       <thead>
+            <tr data-bind="fastForEach: {data: getVisible(), as: '$col'}">
+                <!-- ko template: $col.getHeader() --><!-- /ko -->
             </tr>
         </thead>
         <tbody>
-            <!-- ko foreach: { data: rows, as: 'row' } -->
-                <tr class="data-row"
-                    data-role="row"
-                    data-bind="
-                        css: {
-                            '_odd-row': !!($index() % 2)
-                        },
-                        foreach: {
-                            data: $parent.elems,
-                            as: 'field'
-                        }
-                        ">
-                    <!-- ko template: getBody() --><!-- /ko -->
-                </tr>
+            <!-- ko repeat: {foreach: rows, item: '$row'} -->
+            <tr class="data-row"
+                data-bind="
+                    css: {
+                        '_odd-row': !!($index % 2)
+                    }
+                ">
+                <!-- ko fastForEach: {data: getVisible(), as: '$col'} -->
+                <td data-bind="
+                        css: $col.getFieldClass(),
+                        click: $col.getFieldHandler($row()),
+                        template: $col.getBody()
+                    ">
+                </td>
+                <!-- /ko -->
+            </tr>
             <!-- /ko -->
 
             <!-- ko ifnot: hasData() -->
@@ -36,4 +38,4 @@
             <!-- /ko -->
         </tbody>
     </table>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/paging-total.html b/app/code/Magento/Ui/view/base/web/templates/grid/paging-total.html
index 0c79131bc2f8e4c994858b5e5d157641d571c5fd..bd2e821dbec25a4d3707d541bcda6041f2eeede2 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/paging-total.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/paging-total.html
@@ -6,8 +6,8 @@
 -->
 
 <div class="admin__control-support-text">
-    <span data-bind="i18n: totalRecords"></span> records found
+    <span data-bind="text: totalRecords"></span> records found
     <!-- ko if: totalSelected -->
-    (<span data-bind="i18n: totalSelected"></span> selected)
+    (<span data-bind="text: totalSelected"></span> selected)
     <!-- /ko -->
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/paging/paging.html b/app/code/Magento/Ui/view/base/web/templates/grid/paging/paging.html
index 1961cfff11a3d7be640aace14992455fbb0981f8..10f1ff7fd63c37514439b61220c6118acd6181a9 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/paging/paging.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/paging/paging.html
@@ -13,9 +13,14 @@
         <button
             class="action-previous"
             type="button"
-            data-bind="css: { disabled: isFirst() },
-                   click: prev">
-            <span>Previous page</span>
+            data-bind="
+                attr: {
+                    title: $t('Previous Page')
+                },
+                css: {
+                    disabled: isFirst()
+                },
+                click: prev">
         </button>
         <input
             id="pageCurrent"
@@ -27,9 +32,14 @@
         </label>
         <button
             class="action-next"
-            data-bind="css: { disabled: isLast() },
-                       click: next">
-            <span>Next page</span>
+            data-bind="
+                attr: {
+                    title: $t('Next Page')
+                },
+                css: {
+                    disabled: isLast()
+                },
+                click: next">
         </button>
     </div>
-</div>
+</div>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/paging/sizes.html b/app/code/Magento/Ui/view/base/web/templates/grid/paging/sizes.html
index dcc9692793e40d2508b061fdf1a33a5f98c1bc6c..87f093270a5047aaa19807698d197bfc1d820f7c 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/paging/sizes.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/paging/sizes.html
@@ -23,47 +23,58 @@
         aria-haspopup="true">
         <span data-bind="i18n: 'Select'"></span>
     </button>
-    <div class="selectmenu-items" data-bind="css: {_active: $collapsible.opened},
-        outerClick: discardAll.bind($data)"
-         data-role="toolbar-collapsible-menu">
+    <div
+        class="selectmenu-items"
+        data-role="toolbar-collapsible-menu"
+        data-bind="
+            css: {_active: $collapsible.opened},
+            outerClick: discardAll.bind($data)">
         <ul>
-            <!-- ko foreach: optionsArray -->
-            <li data-bind="css: { _edit: $parent.isEditing(value)}">
-                <!-- ko if: $data.editable -->
+            <li
+                data-bind="
+                    repeat: {
+                        foreach: optionsArray,
+                        item: '$size'
+                    }"
+                data-repeat-bind="
+                    css: {
+                        _edit: isEditing($size().value)
+                    }">
+                <!-- ko if: $size().editable -->
                 <div
                     class="selectmenu-item-edit"
-                    data-bind="keyboard: {13: $parent.updateSize.bind($parent, value, false)}">
+                    data-bind="keyboard: {13: updateSize.bind($data, $size().value, false)}">
                     <input
                         class="admin__control-text"
                         type="text"
-                        data-bind="value: _value, hasFocus: $parent.isEditing(value)"/>
+                        data-bind="value: $size()._value, hasFocus: isEditing($size().value)"/>
                     <button
                         class="action-save"
-                        data-bind="click: $parent.updateSize.bind($parent, value, false)"
+                        data-bind="click: updateSize.bind($data, $size().value, false)"
                         type="button">
                         <span data-bind="i18n: 'Save'"></span>
                     </button>
                     <button
                         class="action-delete"
-                        data-bind="click: $parent.removeSize.bind($parent, value, false)"
+                        data-bind="click: removeSize.bind($data, $size().value, false)"
                         type="button">
                         <span data-bind="i18n: 'Delete'"></span>
                     </button>
                 </div>
                 <!-- /ko -->
+
                 <div class="selectmenu-item">
                     <button
                         type="button"
                         class="selectmenu-item-action"
-                        data-bind="text: label, click: $parent.setSize.bind($parent, value)"></button>
-                    <!-- ko if: $data.editable -->
+                        data-bind="text: $size().label, click: setSize.bind($data, $size().value)"></button>
+                    
+                    <!-- ko if: $size().editable -->
                     <button
                         class="action-edit"
                         data-bind="
                             click: function () {
-                                $parent
-                                    .discardCustom()
-                                    .edit(value);
+                                discardCustom().edit($size().value);
                             }"
                         type="button">
                         <span data-bind="i18n: 'Edit'"></span>
@@ -71,7 +82,6 @@
                     <!-- /ko -->
                 </div>
             </li>
-            <!-- /ko -->
 
             <li data-bind="css: { _edit: isCustomVisible() }">
                 <div class="selectmenu-item">
@@ -102,4 +112,4 @@
         </ul>
     </div>
 </div>
-<label class="admin__control-support-text" data-bind="i18n: 'per page', attr: { for: index }"></label>
+<label class="admin__control-support-text" data-bind="i18n: 'per page', attr: { for: index }"></label>
\ No newline at end of file
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/chips.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/chips.html
index e396c223d8a92a5486335ffb6367c95f087322e6..178e93097966e92b313cb236e6106d34f9bcd134 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/chips.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/chips.html
@@ -6,7 +6,7 @@
 -->
 <div
     class="admin__data-grid-filters-current"
-    data-bind="css: {_show: hasData()}">
+    data-bind="css: {_show: hasPreviews()}">
     <div class="admin__current-filters-title-wrap">
         <span
             class="admin__current-filters-title"
@@ -50,7 +50,7 @@
                 i18n: 'Clear all',
                 click: clear,
                 attr: {
-                    'data-action': hasData() ? 'grid-filter-reset' : ''
+                    'data-action': hasPreviews() ? 'grid-filter-reset' : ''
                 }"
             ></button>
     </div>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/filters.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/filters.html
index 9a7e06d5699a531809b9527972df744197a6feab..25c27cfb3ca14b832afc2072b0d9c1691a91f34f 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/filters.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/filters.html
@@ -17,6 +17,6 @@
                  attr: {disabled: !hasVisible()}">
             <span data-bind="i18n: 'Filters'"></span>
         </button>
-        <span class="filters-active" data-bind="text: $data.active().length || ''"></span> <!-- Added the amount of selected filters -->
+        <span class="filters-active" data-bind="text: countActive() || ''"></span> <!-- Added the amount of selected filters -->
     </div>
 </div>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html
index fc0c43a4b43315304418d1e1ecbdc602236c06c9..880b52f4dcdbacfb654ecbb09c326e210f335372 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/listing.html
@@ -7,7 +7,7 @@
 <div class="admin__data-grid-wrap" data-role="sticky-el-root">
     <table class="data-grid">
         <thead>
-            <tr data-bind="foreach: elems">
+            <tr data-bind="foreach: {data: visibleColumns, as: '$col'}">
                 <!-- ko template: getHeader() --><!-- /ko -->
             </tr>
         </thead>
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/toolbar.html b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/toolbar.html
index 156873520509f2e1c3cc25168f761102344d448d..140a524228935c731d53b250095251f92eb250c9 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/sticky/toolbar.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/sticky/toolbar.html
@@ -4,38 +4,25 @@
  * See COPYING.txt for license details.
  */
 -->
-
 <div class="admin__data-grid-header" data-role="sticky-el-root">
     <div class="admin__data-grid-header-row">
-        <!-- ko foreach: getRegion('bottom') -->
-            <!-- ko if: $data.componentType === 'massaction' -->
-                    <!-- ko template: getTemplate() --><!-- /ko -->
-            <!-- /ko -->
+        <!-- ko scope: requestChild('listing_massaction') -->
+            <!-- ko template: getTemplate() --><!-- /ko -->
         <!-- /ko -->
-        <!-- ko foreach: getRegion('bottom') -->
-            <!-- ko if: $data.componentType === 'paging' -->
-                <!-- ko template: totalTmpl --><!-- /ko -->
-            <!-- /ko -->
+        <!-- ko scope: requestChild('listing_paging') -->
+            <!-- ko template: totalTmpl --><!-- /ko -->
         <!-- /ko -->
         <!-- ko foreach: getRegion('dataGridFilters') -->
             <!-- ko template: $data.stickyTmpl || getTemplate() --><!-- /ko -->
         <!-- /ko -->
-        <div class="admin__data-grid-actions-wrap">
-            <!-- ko foreach: getRegion('dataGridActions') -->
-                <!-- ko template: getTemplate() --><!-- /ko -->
-            <!-- /ko -->
+        <div class="admin__data-grid-actions-wrap" data-bind="foreach: getRegion('dataGridActions')">
+            <!-- ko template: getTemplate() --><!-- /ko -->
         </div>
-        <!-- ko foreach: getRegion('bottom') -->
-            <!-- ko if: $data.componentType === 'paging' -->
-                <!-- ko template: getTemplate() --><!-- /ko -->
-            <!-- /ko -->
+        <!-- ko scope: requestChild('listing_paging') -->
+            <!-- ko template: getTemplate() --><!-- /ko -->
         <!-- /ko -->
     </div>
 </div>
-<!-- ko foreach: getRegion('dataGridFilters') -->
-    <!-- ko if: $data.index === 'listing_filters' -->
-        <!-- ko scope: chips -->
-            <!-- ko template: $data.stickyTmpl || getTemplate() -->
-        <!-- /ko -->
-    <!-- /ko -->
+<!-- ko scope: requestChild('listing_filters_chips') -->
+    <!-- ko template: $data.stickyTmpl || getTemplate() -->
 <!-- /ko -->
diff --git a/app/code/Magento/Ui/view/base/web/templates/grid/toolbar.html b/app/code/Magento/Ui/view/base/web/templates/grid/toolbar.html
index 36482b1d973bae48f5d946dff86c27f6c0bc724e..529b32d7d7a7b43ed1c7c6ce82f72f81210afef4 100644
--- a/app/code/Magento/Ui/view/base/web/templates/grid/toolbar.html
+++ b/app/code/Magento/Ui/view/base/web/templates/grid/toolbar.html
@@ -5,41 +5,26 @@
  */
 -->
 
-<div class="admin__data-grid-header"
-        data-role="data-grid-toolbar">
+<div class="admin__data-grid-header" data-role="data-grid-toolbar">
     <div class="admin__data-grid-header-row">
-        <div class="admin__data-grid-actions-wrap">
-            <!-- ko foreach: getRegion('dataGridActions') -->
+        <div class="admin__data-grid-actions-wrap" data-bind="foreach: getRegion('dataGridActions')">
             <!-- ko template: getTemplate() --><!-- /ko -->
-            <!-- /ko -->
         </div>
         <!-- ko foreach: getRegion('dataGridFilters') -->
-        <!-- ko template: getTemplate() --><!-- /ko -->
+            <!-- ko template: getTemplate() --><!-- /ko -->
         <!-- /ko -->
     </div>
     <div class="admin__data-grid-header-row row row-gutter">
-        <div class="col-xs-2">
-            <!-- ko foreach: getRegion('bottom') -->
-                <!-- ko if: $data.componentType === 'massaction' -->
-                    <!-- ko template: getTemplate() --><!-- /ko -->
-                <!-- /ko -->
-            <!-- /ko -->
+        <div class="col-xs-2" data-bind="scope: requestChild('listing_massaction')">
+            <!-- ko template: getTemplate() --><!-- /ko -->
         </div>
         <div class="col-xs-10">
             <div class="row">
-                <div class="col-xs-3">
-                    <!-- ko foreach: getRegion('bottom') -->
-                        <!-- ko if: $data.componentType === 'paging' -->
-                            <!-- ko template: totalTmpl --><!-- /ko -->
-                        <!-- /ko -->
-                    <!-- /ko -->
+                <div class="col-xs-3" data-bind="scope: requestChild('listing_paging')">
+                    <!-- ko template: totalTmpl --><!-- /ko -->
                 </div>
-                <div class="col-xs-9">
-                    <!-- ko foreach: getRegion('bottom') -->
-                        <!-- ko if: $data.componentType === 'paging' -->
-                            <!-- ko template: getTemplate() --><!-- /ko -->
-                        <!-- /ko -->
-                    <!-- /ko -->
+                <div class="col-xs-9" data-bind="scope: requestChild('listing_paging')">
+                    <!-- ko template: getTemplate() --><!-- /ko -->
                 </div>
             </div>
         </div>
diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html
index 990630aa02b9c1ee71088b56bd345ed33e4d3a6e..0a45aa20a02e275baf8433894568b86b7ff2a87f 100644
--- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html
+++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-custom.html
@@ -9,8 +9,11 @@
        <% if(data.responsive){ %><%= data.responsiveClass %><% } %>
        <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>"
     data-role="modal"
-    data-type="<%= data.type %>">
-    <div class="modal-inner-wrap">
+    data-type="<%= data.type %>"
+    tabindex="0">
+    <div data-role="focusable-start" tabindex="0"></div>
+    <div class="modal-inner-wrap"
+         data-role="focusable-scope">
         <header class="modal-header">
             <% if(data.title){ %>
             <h1 class="modal-title"
@@ -35,4 +38,5 @@
         </footer>
         <% } %>
     </div>
+    <div data-role="focusable-end" tabindex="0"></div>
 </aside>
diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html
index 43ac20b2aeb1e26bce6330232755be77e5c4605c..22aad07f4ea2983750a7957ce1e5f74357fce4be 100644
--- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html
+++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-popup.html
@@ -10,8 +10,11 @@
            <% if(data.responsive){ %><%= data.responsiveClass %><% } %>
            <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>"
     data-role="modal"
-    data-type="<%= data.type %>">
-    <div class="modal-inner-wrap">
+    data-type="<%= data.type %>"
+    tabindex="0">
+    <div data-role="focusable-start" tabindex="0"></div>
+    <div class="modal-inner-wrap"
+         data-role="focusable-scope">
         <header class="modal-header">
             <% if(data.title){ %>
             <h1 class="modal-title"
@@ -38,4 +41,5 @@
         </footer>
         <% } %>
     </div>
+    <div data-role="focusable-end" tabindex="0"></div>
 </aside>
diff --git a/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html b/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html
index abffa4573962a7acc129a0f3f0a96c2765240731..8b828035939a0dc928e6cec6a61a31e665599275 100644
--- a/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html
+++ b/app/code/Magento/Ui/view/base/web/templates/modal/modal-slide.html
@@ -9,8 +9,11 @@
     class="modal-<%= data.type %> <%= data.modalClass %>
            <% if(data.innerScroll){ %><%= data.innerScrollClass %><% } %>"
     data-role="modal"
-    data-type="<%= data.type %>">
-    <div class="modal-inner-wrap">
+    data-type="<%= data.type %>"
+    tabindex="0">
+    <div data-role="focusable-start" tabindex="0"></div>
+    <div class="modal-inner-wrap"
+         data-role="focusable-scope">
         <header class="modal-header">
             <% if(data.title){ %>
             <h1 class="modal-title"
@@ -40,4 +43,5 @@
         </header>
         <div class="modal-content" data-role="content"></div>
     </div>
+    <div data-role="focusable-end" tabindex="0"></div>
 </aside>
diff --git a/app/code/Magento/Ui/view/frontend/web/templates/form/field.html b/app/code/Magento/Ui/view/frontend/web/templates/form/field.html
index 2c1d851abd6b1d601b0d1a7dff1b1644270bc2ab..0181bfce28af586119d3ea70f7afaea514ce0518 100644
--- a/app/code/Magento/Ui/view/frontend/web/templates/form/field.html
+++ b/app/code/Magento/Ui/view/frontend/web/templates/form/field.html
@@ -42,6 +42,10 @@
         <!-- ko if: element.error() -->
             <div class="mage-error" data-bind="attr: { for: element.uid }, text: element.error" generated="true"></div>
         <!-- /ko -->
+
+        <!-- ko if: element.warn() -->
+            <div class="message warning" generated="true"><span data-bind="text: element.warn"></span></div>
+        <!-- /ko -->
     </div>
 </div>
 <!-- /ko -->
\ No newline at end of file
diff --git a/app/code/Magento/Ups/view/adminhtml/templates/system/shipping/carrier_config.phtml b/app/code/Magento/Ups/view/adminhtml/templates/system/shipping/carrier_config.phtml
index ec52625364c6991569073e55f5e9b9098759ad78..c3ca415c7c2869ffad51232487b894c7599a2f9f 100644
--- a/app/code/Magento/Ups/view/adminhtml/templates/system/shipping/carrier_config.phtml
+++ b/app/code/Magento/Ups/view/adminhtml/templates/system/shipping/carrier_config.phtml
@@ -84,13 +84,13 @@ require(["prototype"], function(){
                 'carriers_ups_mode_xml'];
             this.onlyUpsElements = ['carriers_ups_gateway_url'];
 
-            this.storedOriginShipment = '<?php /* @escapeNotVerified */ echo $storedOriginShipment ?>';
-            this.storedFreeShipment = '<?php /* @escapeNotVerified */ echo $storedFreeShipment ?>';
-            this.storedUpsType = '<?php /* @escapeNotVerified */ echo $storedUpsType ?>';
+            this.storedOriginShipment = '<?php /* @noEscape */ echo $storedOriginShipment ?>';
+            this.storedFreeShipment = '<?php /* @noEscape */ echo $storedFreeShipment ?>';
+            this.storedUpsType = '<?php /* @noEscape */ echo $storedUpsType ?>';
             <?php /** @var $jsonHelper \Magento\Framework\Json\Helper\Data */ $jsonHelper = $this->helper('Magento\Framework\Json\Helper\Data'); ?>
-            this.storedAllowedMethods = <?php /* @escapeNotVerified */ echo $jsonHelper->jsonEncode($storedAllowedMethods) ?>;
-            this.originShipmentObj = <?php /* @escapeNotVerified */ echo $jsonHelper->jsonEncode($orShipArr) ?>;
-            this.originShipmentObj['default'] = <?php /* @escapeNotVerified */ echo $jsonHelper->jsonEncode($defShipArr) ?>;
+            this.storedAllowedMethods = <?php /* @noEscape */ echo $jsonHelper->jsonEncode($storedAllowedMethods) ?>;
+            this.originShipmentObj = <?php /* @noEscape */ echo $jsonHelper->jsonEncode($orShipArr) ?>;
+            this.originShipmentObj['default'] = <?php /* @noEscape */ echo $jsonHelper->jsonEncode($defShipArr) ?>;
 
             this.setFormValues();
             Event.observe($(this.carriersUpsTypeId), 'change', this.setFormValues.bind(this));
diff --git a/app/code/Magento/UrlRewrite/Block/Catalog/Category/Tree.php b/app/code/Magento/UrlRewrite/Block/Catalog/Category/Tree.php
index f126981204d0f5ef2f39ddf11d4fb902d14ef105..460feae8bcaab5b2a852983f919fe1dd0944c777 100644
--- a/app/code/Magento/UrlRewrite/Block/Catalog/Category/Tree.php
+++ b/app/code/Magento/UrlRewrite/Block/Catalog/Category/Tree.php
@@ -57,7 +57,7 @@ class Tree extends \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory
 
     /**
      * @param \Magento\Backend\Block\Widget\Context $context
-     * @param \Magento\Catalog\Model\Resource\Category\Tree $categoryTree
+     * @param \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTree
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Catalog\Model\ProductFactory $productFactory
@@ -68,7 +68,7 @@ class Tree extends \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory
      */
     public function __construct(
         \Magento\Backend\Block\Widget\Context $context,
-        \Magento\Catalog\Model\Resource\Category\Tree $categoryTree,
+        \Magento\Catalog\Model\ResourceModel\Category\Tree $categoryTree,
         \Magento\Framework\Registry $registry,
         \Magento\Catalog\Model\CategoryFactory $categoryFactory,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
@@ -131,7 +131,7 @@ class Tree extends \Magento\Catalog\Block\Adminhtml\Category\AbstractCategory
     /**
      * Get categories collection
      *
-     * @return \Magento\Catalog\Model\Resource\Category\Collection
+     * @return \Magento\Catalog\Model\ResourceModel\Category\Collection
      */
     public function getCategoryCollection()
     {
diff --git a/app/code/Magento/UrlRewrite/Model/Resource/UrlRewrite.php b/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewrite.php
similarity index 91%
rename from app/code/Magento/UrlRewrite/Model/Resource/UrlRewrite.php
rename to app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewrite.php
index e804df265ec6a7e6f7b77aaa3a4fde3d2ba28675..1ad4464084510c956d4607d6d13967ee858bc042 100644
--- a/app/code/Magento/UrlRewrite/Model/Resource/UrlRewrite.php
+++ b/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewrite.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\UrlRewrite\Model\Resource;
+namespace Magento\UrlRewrite\Model\ResourceModel;
 
-class UrlRewrite extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class UrlRewrite extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/UrlRewrite/Model/Resource/UrlRewriteCollection.php b/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewriteCollection.php
similarity index 87%
rename from app/code/Magento/UrlRewrite/Model/Resource/UrlRewriteCollection.php
rename to app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewriteCollection.php
index bf6f81f51d25581486fa11e2c8996277444211d6..3f3c85e71a415b54d947f95575da60df885eda5a 100644
--- a/app/code/Magento/UrlRewrite/Model/Resource/UrlRewriteCollection.php
+++ b/app/code/Magento/UrlRewrite/Model/ResourceModel/UrlRewriteCollection.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\UrlRewrite\Model\Resource;
+namespace Magento\UrlRewrite\Model\ResourceModel;
 
-class UrlRewriteCollection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class UrlRewriteCollection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store Manager Model
@@ -23,7 +23,7 @@ class UrlRewriteCollection extends \Magento\Framework\Model\Resource\Db\Collecti
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
@@ -32,7 +32,7 @@ class UrlRewriteCollection extends \Magento\Framework\Model\Resource\Db\Collecti
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
         $this->storeManager = $storeManager;
@@ -45,7 +45,7 @@ class UrlRewriteCollection extends \Magento\Framework\Model\Resource\Db\Collecti
      */
     protected function _construct()
     {
-        $this->_init('Magento\UrlRewrite\Model\UrlRewrite', 'Magento\UrlRewrite\Model\Resource\UrlRewrite');
+        $this->_init('Magento\UrlRewrite\Model\UrlRewrite', 'Magento\UrlRewrite\Model\ResourceModel\UrlRewrite');
     }
 
     /**
diff --git a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php
index a26c1e9dda21f898d2bcc68f5593bb7f6c5257d7..870d8f9ff68a1d0d640ff442dbc3dc19848c066d 100644
--- a/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php
+++ b/app/code/Magento/UrlRewrite/Model/Storage/DbStorage.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\UrlRewrite\Model\Storage;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
 use Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory;
 use Magento\Framework\Api\DataObjectHelper;
@@ -35,12 +35,12 @@ class DbStorage extends AbstractStorage
     /**
      * @param \Magento\UrlRewrite\Service\V1\Data\UrlRewriteFactory $urlRewriteFactory
      * @param DataObjectHelper $dataObjectHelper
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
     public function __construct(
         UrlRewriteFactory $urlRewriteFactory,
         DataObjectHelper $dataObjectHelper,
-        Resource $resource
+        ResourceConnection $resource
     ) {
         $this->connection = $resource->getConnection();
         $this->resource = $resource;
diff --git a/app/code/Magento/UrlRewrite/Model/UrlRewrite.php b/app/code/Magento/UrlRewrite/Model/UrlRewrite.php
index 8c1b7955776d9716fa20fd75f8f568e32c9f6822..a76d0549b65275852ca45299e6acd203724ad4a1 100644
--- a/app/code/Magento/UrlRewrite/Model/UrlRewrite.php
+++ b/app/code/Magento/UrlRewrite/Model/UrlRewrite.php
@@ -30,8 +30,8 @@ class UrlRewrite extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\UrlRewrite\Model\Resource\UrlRewrite');
-        $this->_collectionName = 'Magento\UrlRewrite\Model\Resource\UrlRewriteCollection';
+        $this->_init('Magento\UrlRewrite\Model\ResourceModel\UrlRewrite');
+        $this->_collectionName = 'Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollection';
     }
 
     /**
diff --git a/app/code/Magento/UrlRewrite/Test/Unit/Model/Resource/UrlRewriteCollectionTest.php b/app/code/Magento/UrlRewrite/Test/Unit/Model/ResourceModel/UrlRewriteCollectionTest.php
similarity index 89%
rename from app/code/Magento/UrlRewrite/Test/Unit/Model/Resource/UrlRewriteCollectionTest.php
rename to app/code/Magento/UrlRewrite/Test/Unit/Model/ResourceModel/UrlRewriteCollectionTest.php
index d37d24e882ba13482f714d0e8fefc9cb8850d8cd..7d708717917037b9ce9aea530e8e5d29207dc4e0 100644
--- a/app/code/Magento/UrlRewrite/Test/Unit/Model/Resource/UrlRewriteCollectionTest.php
+++ b/app/code/Magento/UrlRewrite/Test/Unit/Model/ResourceModel/UrlRewriteCollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\UrlRewrite\Test\Unit\Model\Resource;
+namespace Magento\UrlRewrite\Test\Unit\Model\ResourceModel;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
@@ -15,7 +15,7 @@ class UrlRewriteCollectionTest extends \PHPUnit_Framework_TestCase
     protected $storeManager;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -35,7 +35,7 @@ class UrlRewriteCollectionTest extends \PHPUnit_Framework_TestCase
     protected $connection;
 
     /**
-     * @var \Magento\UrlRewrite\Model\Resource\UrlRewriteCollection
+     * @var \Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollection
      */
     protected $collection;
 
@@ -51,7 +51,7 @@ class UrlRewriteCollectionTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->resource = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -81,7 +81,7 @@ class UrlRewriteCollectionTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('test_main_table'));
 
         $this->collection = (new ObjectManager($this))->getObject(
-            'Magento\UrlRewrite\Model\Resource\UrlRewriteCollection',
+            'Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollection',
             [
                 'storeManager' => $this->storeManager,
                 'resource' => $this->resource,
@@ -94,7 +94,7 @@ class UrlRewriteCollectionTest extends \PHPUnit_Framework_TestCase
      * @param bool $withAdmin
      * @param array $condition
      * @dataProvider dataProviderForTestAddStoreIfStoreIsArray
-     * @covers \Magento\UrlRewrite\Model\Resource\UrlRewriteCollection
+     * @covers \Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollection
      */
     public function testAddStoreFilterIfStoreIsArray($storeId, $withAdmin, $condition)
     {
@@ -121,7 +121,7 @@ class UrlRewriteCollectionTest extends \PHPUnit_Framework_TestCase
      * @param bool $withAdmin
      * @param array $condition
      * @dataProvider dataProviderForTestAddStoreFilterIfStoreIsInt
-     * @covers \Magento\UrlRewrite\Model\Resource\UrlRewriteCollection
+     * @covers \Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollection
      */
     public function testAddStoreFilterIfStoreIsInt($storeId, $withAdmin, $condition)
     {
diff --git a/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php b/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php
index b5afc6f6636ba16b34f37ff2efa1adc49c0ed535..28a31ad84cca7e005b7be62c5b9f1949a98d997e 100644
--- a/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php
+++ b/app/code/Magento/UrlRewrite/Test/Unit/Model/Storage/DbStorageTest.php
@@ -10,7 +10,7 @@ namespace Magento\UrlRewrite\Test\Unit\Model\Storage;
 
 use \Magento\UrlRewrite\Model\Storage\DbStorage;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
 
@@ -37,7 +37,7 @@ class DbStorageTest extends \PHPUnit_Framework_TestCase
     protected $select;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -56,7 +56,7 @@ class DbStorageTest extends \PHPUnit_Framework_TestCase
         $this->connectionMock = $this->getMock('Magento\Framework\DB\Adapter\AdapterInterface');
         $this->select = $this->getMock('Magento\Framework\DB\Select', ['from', 'where', 'deleteFromSelect'], [], '',
             false);
-        $this->resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
 
         $this->resource->expects($this->any())
             ->method('getConnection')
diff --git a/app/code/Magento/UrlRewrite/view/adminhtml/layout/adminhtml_url_rewrite_index.xml b/app/code/Magento/UrlRewrite/view/adminhtml/layout/adminhtml_url_rewrite_index.xml
index 994a3eb20215a2e20c72e9c008020761ef64106b..6cb41193402bb1f6242d2c85551cb8a5f3723447 100644
--- a/app/code/Magento/UrlRewrite/view/adminhtml/layout/adminhtml_url_rewrite_index.xml
+++ b/app/code/Magento/UrlRewrite/view/adminhtml/layout/adminhtml_url_rewrite_index.xml
@@ -12,7 +12,7 @@
                 <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.block.url_rewrite.grid" as="grid">
                     <arguments>
                         <argument name="id" xsi:type="string">urlrewriteGrid</argument>
-                        <argument name="dataSource" xsi:type="object">Magento\UrlRewrite\Model\Resource\UrlRewriteCollection</argument>
+                        <argument name="dataSource" xsi:type="object">Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollection</argument>
                         <argument name="default_sort" xsi:type="string">url_rewrite_id</argument>
                     </arguments>
                     <block class="Magento\Backend\Block\Widget\Grid\ColumnSet" as="grid.columnSet" name="adminhtml.url_rewrite.grid.columnSet">
diff --git a/app/code/Magento/User/Block/Role/Grid/User.php b/app/code/Magento/User/Block/Role/Grid/User.php
index 6e957ba860e69195c0320c93e9d20b368e902b57..3da315d907542692fde41518a8b2b2a512363ad3 100644
--- a/app/code/Magento/User/Block/Role/Grid/User.php
+++ b/app/code/Magento/User/Block/Role/Grid/User.php
@@ -32,7 +32,7 @@ class User extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_jsonEncoder;
 
     /**
-     * @var \Magento\User\Model\Resource\Role\User\CollectionFactory
+     * @var \Magento\User\Model\ResourceModel\Role\User\CollectionFactory
      */
     protected $_userRolesFactory;
 
@@ -42,7 +42,7 @@ class User extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Framework\Registry $coreRegistry
      * @param \Magento\Authorization\Model\RoleFactory $roleFactory
-     * @param \Magento\User\Model\Resource\Role\User\CollectionFactory $userRolesFactory
+     * @param \Magento\User\Model\ResourceModel\Role\User\CollectionFactory $userRolesFactory
      * @param array $data
      */
     public function __construct(
@@ -51,7 +51,7 @@ class User extends \Magento\Backend\Block\Widget\Grid\Extended
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
         \Magento\Framework\Registry $coreRegistry,
         \Magento\Authorization\Model\RoleFactory $roleFactory,
-        \Magento\User\Model\Resource\Role\User\CollectionFactory $userRolesFactory,
+        \Magento\User\Model\ResourceModel\Role\User\CollectionFactory $userRolesFactory,
         array $data = []
     ) {
         parent::__construct($context, $backendHelper, $data);
diff --git a/app/code/Magento/User/Block/Role/Tab/Edit.php b/app/code/Magento/User/Block/Role/Tab/Edit.php
index e78fb534fe2999092ffb4c44a1a554988f07bea3..a28072881486905c88124145a81ffd4c1347d1c5 100644
--- a/app/code/Magento/User/Block/Role/Tab/Edit.php
+++ b/app/code/Magento/User/Block/Role/Tab/Edit.php
@@ -28,7 +28,7 @@ class Edit extends \Magento\Backend\Block\Widget\Form implements \Magento\Backen
     /**
      * Rules collection factory
      *
-     * @var \Magento\Authorization\Model\Resource\Rules\CollectionFactory
+     * @var \Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory
      */
     protected $_rulesCollectionFactory;
 
@@ -42,7 +42,7 @@ class Edit extends \Magento\Backend\Block\Widget\Form implements \Magento\Backen
     /**
      * Acl resource provider
      *
-     * @var \Magento\Framework\Acl\Resource\ProviderInterface
+     * @var \Magento\Framework\Acl\AclResource\ProviderInterface
      */
     protected $_aclResourceProvider;
 
@@ -52,18 +52,18 @@ class Edit extends \Magento\Backend\Block\Widget\Form implements \Magento\Backen
     /**
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Framework\Acl\RootResource $rootResource
-     * @param \Magento\Authorization\Model\Resource\Rules\CollectionFactory $rulesCollectionFactory
+     * @param \Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory $rulesCollectionFactory
      * @param \Magento\Authorization\Model\Acl\AclRetriever $aclRetriever
-     * @param \Magento\Framework\Acl\Resource\ProviderInterface $aclResourceProvider
+     * @param \Magento\Framework\Acl\AclResource\ProviderInterface $aclResourceProvider
      * @param \Magento\Integration\Helper\Data $integrationData
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Framework\Acl\RootResource $rootResource,
-        \Magento\Authorization\Model\Resource\Rules\CollectionFactory $rulesCollectionFactory,
+        \Magento\Authorization\Model\ResourceModel\Rules\CollectionFactory $rulesCollectionFactory,
         \Magento\Authorization\Model\Acl\AclRetriever $aclRetriever,
-        \Magento\Framework\Acl\Resource\ProviderInterface $aclResourceProvider,
+        \Magento\Framework\Acl\AclResource\ProviderInterface $aclResourceProvider,
         \Magento\Integration\Helper\Data $integrationData,
         array $data = []
     ) {
diff --git a/app/code/Magento/User/Block/Role/Tab/Users.php b/app/code/Magento/User/Block/Role/Tab/Users.php
index 2ddc4917ea2e86262be2a0081d61fa2f42c7a981..aa9402c4f122ec80c471c54d9f5f91a2611061b0 100644
--- a/app/code/Magento/User/Block/Role/Tab/Users.php
+++ b/app/code/Magento/User/Block/Role/Tab/Users.php
@@ -15,7 +15,7 @@ class Users extends \Magento\Backend\Block\Widget\Tabs
     /**
      * User model factory
      *
-     * @var \Magento\User\Model\Resource\User\CollectionFactory
+     * @var \Magento\User\Model\ResourceModel\User\CollectionFactory
      */
     protected $_userCollectionFactory;
 
@@ -23,14 +23,14 @@ class Users extends \Magento\Backend\Block\Widget\Tabs
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
      * @param \Magento\Backend\Model\Auth\Session $authSession
-     * @param \Magento\User\Model\Resource\User\CollectionFactory $userCollectionFactory
+     * @param \Magento\User\Model\ResourceModel\User\CollectionFactory $userCollectionFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
         \Magento\Backend\Model\Auth\Session $authSession,
-        \Magento\User\Model\Resource\User\CollectionFactory $userCollectionFactory,
+        \Magento\User\Model\ResourceModel\User\CollectionFactory $userCollectionFactory,
         array $data = []
     ) {
         // _userCollectionFactory is used in parent::__construct
@@ -48,7 +48,7 @@ class Users extends \Magento\Backend\Block\Widget\Tabs
         parent::_construct();
 
         $roleId = $this->getRequest()->getParam('rid', false);
-        /** @var \Magento\User\Model\Resource\User\Collection $users */
+        /** @var \Magento\User\Model\ResourceModel\User\Collection $users */
         $users = $this->_userCollectionFactory->create()->load();
         $this->setTemplate('role/users.phtml')->assign('users', $users->getItems())->assign('roleId', $roleId);
     }
diff --git a/app/code/Magento/User/Block/User.php b/app/code/Magento/User/Block/User.php
index 65802065e5b956da242220610e42283e9f97d13d..1215f5c12563175c731ba22a9642778f555be86a 100644
--- a/app/code/Magento/User/Block/User.php
+++ b/app/code/Magento/User/Block/User.php
@@ -13,18 +13,18 @@ namespace Magento\User\Block;
 class User extends \Magento\Backend\Block\Widget\Grid\Container
 {
     /**
-     * @var \Magento\User\Model\Resource\User
+     * @var \Magento\User\Model\ResourceModel\User
      */
     protected $_resourceModel;
 
     /**
      * @param \Magento\Backend\Block\Widget\Context $context
-     * @param \Magento\User\Model\Resource\User $resourceModel
+     * @param \Magento\User\Model\ResourceModel\User $resourceModel
      * @param array $data
      */
     public function __construct(
         \Magento\Backend\Block\Widget\Context $context,
-        \Magento\User\Model\Resource\User $resourceModel,
+        \Magento\User\Model\ResourceModel\User $resourceModel,
         array $data = []
     ) {
         parent::__construct($context, $data);
diff --git a/app/code/Magento/User/Block/User/Edit/Tab/Roles.php b/app/code/Magento/User/Block/User/Edit/Tab/Roles.php
index d4a3e2e4f8389b849ff9500832302f42badc6a0a..1051e6356488c794a94d9ec3eb68fddb0942ecfc 100644
--- a/app/code/Magento/User/Block/User/Edit/Tab/Roles.php
+++ b/app/code/Magento/User/Block/User/Edit/Tab/Roles.php
@@ -17,7 +17,7 @@ class Roles extends \Magento\Backend\Block\Widget\Grid\Extended
     protected $_coreRegistry = null;
 
     /**
-     * @var \Magento\Authorization\Model\Resource\Role\CollectionFactory
+     * @var \Magento\Authorization\Model\ResourceModel\Role\CollectionFactory
      */
     protected $_userRolesFactory;
 
@@ -30,7 +30,7 @@ class Roles extends \Magento\Backend\Block\Widget\Grid\Extended
      * @param \Magento\Backend\Block\Template\Context $context
      * @param \Magento\Backend\Helper\Data $backendHelper
      * @param \Magento\Framework\Json\EncoderInterface $jsonEncoder
-     * @param \Magento\Authorization\Model\Resource\Role\CollectionFactory $userRolesFactory
+     * @param \Magento\Authorization\Model\ResourceModel\Role\CollectionFactory $userRolesFactory
      * @param \Magento\Framework\Registry $coreRegistry
      * @param array $data
      */
@@ -38,7 +38,7 @@ class Roles extends \Magento\Backend\Block\Widget\Grid\Extended
         \Magento\Backend\Block\Template\Context $context,
         \Magento\Backend\Helper\Data $backendHelper,
         \Magento\Framework\Json\EncoderInterface $jsonEncoder,
-        \Magento\Authorization\Model\Resource\Role\CollectionFactory $userRolesFactory,
+        \Magento\Authorization\Model\ResourceModel\Role\CollectionFactory $userRolesFactory,
         \Magento\Framework\Registry $coreRegistry,
         array $data = []
     ) {
diff --git a/app/code/Magento/User/Console/UnlockAdminAccountCommand.php b/app/code/Magento/User/Console/UnlockAdminAccountCommand.php
index 30c3a599565963b7304f14a882767067dd34cb9d..371d607acfc00e78435e922c68deafa26f924cdb 100644
--- a/app/code/Magento/User/Console/UnlockAdminAccountCommand.php
+++ b/app/code/Magento/User/Console/UnlockAdminAccountCommand.php
@@ -9,7 +9,7 @@ use Symfony\Component\Console\Command\Command;
 use Symfony\Component\Console\Input\InputArgument;
 use Symfony\Component\Console\Input\InputInterface;
 use Symfony\Component\Console\Output\OutputInterface;
-use Magento\User\Model\Resource\User as AdminUser;
+use Magento\User\Model\ResourceModel\User as AdminUser;
 
 /**
  * Command for unlocking an account.
diff --git a/app/code/Magento/User/Controller/Adminhtml/Auth/Forgotpassword.php b/app/code/Magento/User/Controller/Adminhtml/Auth/Forgotpassword.php
index a97e46e7f7a102d9c1dbd1d17eeafb1ade94009c..ca30b16916e6590e2d7f14e647904a0be54b7810 100644
--- a/app/code/Magento/User/Controller/Adminhtml/Auth/Forgotpassword.php
+++ b/app/code/Magento/User/Controller/Adminhtml/Auth/Forgotpassword.php
@@ -21,8 +21,8 @@ class Forgotpassword extends \Magento\User\Controller\Adminhtml\Auth
         if (!empty($email) && !empty($params)) {
             // Validate received data to be an email address
             if (\Zend_Validate::is($email, 'EmailAddress')) {
-                $collection = $this->_objectManager->get('Magento\User\Model\Resource\User\Collection');
-                /** @var $collection \Magento\User\Model\Resource\User\Collection */
+                $collection = $this->_objectManager->get('Magento\User\Model\ResourceModel\User\Collection');
+                /** @var $collection \Magento\User\Model\ResourceModel\User\Collection */
                 $collection->addFieldToFilter('email', $email);
                 $collection->load(false);
 
diff --git a/app/code/Magento/User/Controller/Adminhtml/Locks/MassUnlock.php b/app/code/Magento/User/Controller/Adminhtml/Locks/MassUnlock.php
index b87e13d7781ae2e1d0cbb1b761037cff11ae90ab..bf515568539639fd8ecc99a38524e9679d310328 100644
--- a/app/code/Magento/User/Controller/Adminhtml/Locks/MassUnlock.php
+++ b/app/code/Magento/User/Controller/Adminhtml/Locks/MassUnlock.php
@@ -25,7 +25,7 @@ class MassUnlock extends \Magento\User\Controller\Adminhtml\Locks
             $userIds = $this->getRequest()->getPost('unlock');
             if ($userIds && is_array($userIds)) {
                 $affectedUsers = $this->_objectManager
-                    ->get('Magento\User\Model\Resource\User')
+                    ->get('Magento\User\Model\ResourceModel\User')
                     ->unlock($userIds);
                 $this->getMessageManager()->addSuccess(__('Unlocked %1 user(s).', $affectedUsers));
             }
diff --git a/app/code/Magento/User/Model/Plugin/AuthorizationRole.php b/app/code/Magento/User/Model/Plugin/AuthorizationRole.php
index ae5935f822d9ca904fa971c1501fe0b918865643..5219d0634e494ad012476bc16eab090935295912 100644
--- a/app/code/Magento/User/Model/Plugin/AuthorizationRole.php
+++ b/app/code/Magento/User/Model/Plugin/AuthorizationRole.php
@@ -13,15 +13,15 @@ use Magento\Authorization\Model\Role;
  */
 class AuthorizationRole
 {
-    /** @var \Magento\User\Model\Resource\User */
+    /** @var \Magento\User\Model\ResourceModel\User */
     protected $userResourceModel;
 
     /**
      * Initialize dependencies
      *
-     * @param \Magento\User\Model\Resource\User $userResourceModel
+     * @param \Magento\User\Model\ResourceModel\User $userResourceModel
      */
-    public function __construct(\Magento\User\Model\Resource\User $userResourceModel)
+    public function __construct(\Magento\User\Model\ResourceModel\User $userResourceModel)
     {
         $this->userResourceModel = $userResourceModel;
     }
diff --git a/app/code/Magento/User/Model/Resource/Role/User/Collection.php b/app/code/Magento/User/Model/ResourceModel/Role/User/Collection.php
similarity index 77%
rename from app/code/Magento/User/Model/Resource/Role/User/Collection.php
rename to app/code/Magento/User/Model/ResourceModel/Role/User/Collection.php
index 6942b63093a57a3c450b2ee80ff0da5d6762e4f8..908b36c4f9d9dd607eef7d350a01fe85385d64e2 100644
--- a/app/code/Magento/User/Model/Resource/Role/User/Collection.php
+++ b/app/code/Magento/User/Model/ResourceModel/Role/User/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\User\Model\Resource\Role\User;
+namespace Magento\User\Model\ResourceModel\Role\User;
 
 /**
  * Admin role users collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource model
@@ -19,7 +19,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\User\Model\User', 'Magento\User\Model\Resource\User');
+        $this->_init('Magento\User\Model\User', 'Magento\User\Model\ResourceModel\User');
     }
 
     /**
diff --git a/app/code/Magento/User/Model/Resource/User.php b/app/code/Magento/User/Model/ResourceModel/User.php
similarity index 98%
rename from app/code/Magento/User/Model/Resource/User.php
rename to app/code/Magento/User/Model/ResourceModel/User.php
index dc2f9c55f35ec5bcec961f881d6ed42c1129424e..cf6e858505150bed5f824bfc19b726ed83870fdb 100644
--- a/app/code/Magento/User/Model/Resource/User.php
+++ b/app/code/Magento/User/Model/ResourceModel/User.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\User\Model\Resource;
+namespace Magento\User\Model\ResourceModel;
 
 use Magento\Authorization\Model\Acl\Role\Group as RoleGroup;
 use Magento\Authorization\Model\Acl\Role\User as RoleUser;
@@ -15,7 +15,7 @@ use Magento\User\Model\User as ModelUser;
  * ACL user resource
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class User extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class User extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Acl\CacheInterface
@@ -44,14 +44,14 @@ class User extends \Magento\Framework\Model\Resource\Db\AbstractDb
     /**
      * Construct
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Acl\CacheInterface $aclCache
      * @param \Magento\Authorization\Model\RoleFactory $roleFactory
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Acl\CacheInterface $aclCache,
         \Magento\Authorization\Model\RoleFactory $roleFactory,
         \Magento\Framework\Stdlib\DateTime $dateTime,
diff --git a/app/code/Magento/User/Model/Resource/User/Collection.php b/app/code/Magento/User/Model/ResourceModel/User/Collection.php
similarity index 69%
rename from app/code/Magento/User/Model/Resource/User/Collection.php
rename to app/code/Magento/User/Model/ResourceModel/User/Collection.php
index 5be3e5c1ecea5360f088ce7b54517796d46e9801..e79fec07cd049b676e717f3e5485ab70a53e50b0 100644
--- a/app/code/Magento/User/Model/Resource/User/Collection.php
+++ b/app/code/Magento/User/Model/ResourceModel/User/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\User\Model\Resource\User;
+namespace Magento\User\Model\ResourceModel\User;
 
 /**
  * Admin user collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Define resource model
@@ -19,6 +19,6 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\User\Model\User', 'Magento\User\Model\Resource\User');
+        $this->_init('Magento\User\Model\User', 'Magento\User\Model\ResourceModel\User');
     }
 }
diff --git a/app/code/Magento/User/Model/Resource/User/Locked/Collection.php b/app/code/Magento/User/Model/ResourceModel/User/Locked/Collection.php
similarity index 67%
rename from app/code/Magento/User/Model/Resource/User/Locked/Collection.php
rename to app/code/Magento/User/Model/ResourceModel/User/Locked/Collection.php
index 04a4f032c7109001a1f97d68b058ac7742b48e54..0c13210105687118a970c87c2c6ce9c37863ba47 100644
--- a/app/code/Magento/User/Model/Resource/User/Locked/Collection.php
+++ b/app/code/Magento/User/Model/ResourceModel/User/Locked/Collection.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\User\Model\Resource\User\Locked;
+namespace Magento\User\Model\ResourceModel\User\Locked;
 
 /**
  * Admin user collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\User\Model\Resource\User\Collection
+class Collection extends \Magento\User\Model\ResourceModel\User\Collection
 {
     /**
      * Collection Init Select
      *
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @return $this
      */
     protected function _initSelect()
diff --git a/app/code/Magento/User/Model/User.php b/app/code/Magento/User/Model/User.php
index 117e9425be7d2e84ad4bfcab9db377208c681ceb..1333f17ea5b8672358f596fb38bc0476f907a726 100644
--- a/app/code/Magento/User/Model/User.php
+++ b/app/code/Magento/User/Model/User.php
@@ -15,8 +15,8 @@ use Magento\User\Api\Data\UserInterface;
 /**
  * Admin user model
  *
- * @method \Magento\User\Model\Resource\User _getResource()
- * @method \Magento\User\Model\Resource\User getResource()
+ * @method \Magento\User\Model\ResourceModel\User _getResource()
+ * @method \Magento\User\Model\ResourceModel\User getResource()
  * @method string getLogdate()
  * @method \Magento\User\Model\User setLogdate(string $value)
  * @method int getLognum()
@@ -124,7 +124,7 @@ class User extends AbstractModel implements StorageInterface, UserInterface
      * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param UserValidationRules $validationRules
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
@@ -142,7 +142,7 @@ class User extends AbstractModel implements StorageInterface, UserInterface
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         UserValidationRules $validationRules,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -165,7 +165,7 @@ class User extends AbstractModel implements StorageInterface, UserInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\User\Model\Resource\User');
+        $this->_init('Magento\User\Model\ResourceModel\User');
     }
 
     /**
diff --git a/app/code/Magento/User/Model/Backend/Observer/AuthObserver.php b/app/code/Magento/User/Observer/Backend/AuthObserver.php
similarity index 78%
rename from app/code/Magento/User/Model/Backend/Observer/AuthObserver.php
rename to app/code/Magento/User/Observer/Backend/AuthObserver.php
index f682202a22320a8cc80a2c673f9d3bf8be867c1c..ac50a13d6f74d494ad051ad48e35afdae61367a3 100644
--- a/app/code/Magento/User/Model/Backend/Observer/AuthObserver.php
+++ b/app/code/Magento/User/Observer/Backend/AuthObserver.php
@@ -4,84 +4,92 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\User\Model\Backend\Observer;
+namespace Magento\User\Observer\Backend;
 
+use Magento\Backend\Model\Auth\Session;
+use Magento\Backend\Model\UrlInterface;
+use Magento\Framework\Encryption\EncryptorInterface;
 use Magento\Framework\Event\Observer as EventObserver;
 use Magento\Framework\Exception\State\UserLockedException;
-use Magento\Framework\Encryption\Encryptor;
+use Magento\Framework\Message\ManagerInterface;
+use Magento\User\Model\Backend\Config\ObserverConfig;
+use Magento\User\Model\ResourceModel\User as ResourceUser;
 use Magento\User\Model\User;
+use Magento\Framework\Event\ObserverInterface;
+use Magento\User\Model\UserFactory;
 
 /**
  * User backend observer model for authentication
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class AuthObserver
+class AuthObserver implements ObserverInterface
 {
     /**
      * Backend configuration interface
      *
-     * @var \Magento\User\Model\Backend\Config\ObserverConfig
+     * @var ObserverConfig
      */
     protected $observerConfig;
 
     /**
      * Admin user resource model
      *
-     * @var \Magento\User\Model\Resource\User
+     * @var ResourceUser
      */
     protected $userResource;
 
     /**
      * Backend url interface
      *
-     * @var \Magento\Backend\Model\UrlInterface
+     * @var UrlInterface
      */
     protected $url;
 
     /**
      * Backend authorization session
      *
-     * @var \Magento\Backend\Model\Auth\Session
+     * @var Session
      */
     protected $authSession;
 
     /**
      * Factory class for user model
      *
-     * @var \Magento\User\Model\UserFactory
+     * @var UserFactory
      */
     protected $userFactory;
 
     /**
      * Encryption model
      *
-     * @var \Magento\Framework\Encryption\EncryptorInterface
+     * @var EncryptorInterface
      */
     protected $encryptor;
 
     /**
      * Message manager interface
      *
-     * @var \Magento\Framework\Message\ManagerInterface
+     * @var ManagerInterface
      */
     protected $messageManager;
 
     /**
-     * @param \Magento\User\Model\Backend\Config\ObserverConfig $observerConfig
-     * @param \Magento\User\Model\Resource\User $userResource
-     * @param \Magento\Backend\Model\UrlInterface $url
-     * @param \Magento\Backend\Model\Auth\Session $authSession
-     * @param \Magento\User\Model\UserFactory $userFactory
-     * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
-     * @param \Magento\Framework\Message\ManagerInterface $messageManager
+     * @param ObserverConfig $observerConfig
+     * @param ResourceUser $userResource
+     * @param UrlInterface $url
+     * @param Session $authSession
+     * @param UserFactory $userFactory
+     * @param EncryptorInterface $encryptor
+     * @param ManagerInterface $messageManager
      */
     public function __construct(
-        \Magento\User\Model\Backend\Config\ObserverConfig $observerConfig,
-        \Magento\User\Model\Resource\User $userResource,
-        \Magento\Backend\Model\UrlInterface $url,
-        \Magento\Backend\Model\Auth\Session $authSession,
-        \Magento\User\Model\UserFactory $userFactory,
-        \Magento\Framework\Encryption\EncryptorInterface $encryptor,
-        \Magento\Framework\Message\ManagerInterface $messageManager
+        ObserverConfig $observerConfig,
+        ResourceUser $userResource,
+        UrlInterface $url,
+        Session $authSession,
+        UserFactory $userFactory,
+        EncryptorInterface $encryptor,
+        ManagerInterface $messageManager
     ) {
         $this->observerConfig = $observerConfig;
         $this->userResource = $userResource;
@@ -99,7 +107,7 @@ class AuthObserver
      * @return void
      * @throws \Magento\Framework\Exception\LocalizedException
      */
-    public function adminAuthenticate($observer)
+    public function execute(EventObserver $observer)
     {
         $password = $observer->getEvent()->getPassword();
         /** @var User $user */
diff --git a/app/code/Magento/User/Observer/Backend/CheckAdminPasswordChangeObserver.php b/app/code/Magento/User/Observer/Backend/CheckAdminPasswordChangeObserver.php
new file mode 100644
index 0000000000000000000000000000000000000000..3bf06a441e248c7f0cfd6f676f95322e02bbe76a
--- /dev/null
+++ b/app/code/Magento/User/Observer/Backend/CheckAdminPasswordChangeObserver.php
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\User\Observer\Backend;
+
+use Magento\Framework\Event\Observer as EventObserver;
+use Magento\Framework\Event\ObserverInterface;
+
+/**
+ * User backend observer model for passwords
+ */
+class CheckAdminPasswordChangeObserver implements ObserverInterface
+{
+    /**
+     * Admin user resource model
+     *
+     * @var \Magento\User\Model\ResourceModel\User
+     */
+    protected $userResource;
+
+    /**
+     * Encryption model
+     *
+     * @var \Magento\Framework\Encryption\EncryptorInterface
+     */
+    protected $encryptor;
+
+    /**
+     * @param \Magento\User\Model\ResourceModel\User $userResource
+     * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
+     */
+    public function __construct(
+        \Magento\User\Model\ResourceModel\User $userResource,
+        \Magento\Framework\Encryption\EncryptorInterface $encryptor
+    ) {
+        $this->userResource = $userResource;
+        $this->encryptor = $encryptor;
+    }
+
+    /**
+     * Harden admin password change.
+     *
+     * New password must be minimum 7 chars length and include alphanumeric characters
+     * The password is compared to at least last 4 previous passwords to prevent setting them again
+     *
+     * @param EventObserver $observer
+     * @return void
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function execute(EventObserver $observer)
+    {
+        /* @var $user \Magento\User\Model\User */
+        $user = $observer->getEvent()->getObject();
+
+        if ($user->getNewPassword()) {
+            $password = $user->getNewPassword();
+        } else {
+            $password = $user->getPassword();
+        }
+
+        if ($password && !$user->getForceNewPassword() && $user->getId()) {
+            if ($this->encryptor->isValidHash($password, $user->getOrigData('password'))) {
+                throw new \Magento\Framework\Exception\LocalizedException(
+                    __('Sorry, but this password has already been used. Please create another.')
+                );
+            }
+
+            // check whether password was used before
+            $passwordHash = $this->encryptor->getHash($password, false);
+            foreach ($this->userResource->getOldPasswords($user) as $oldPasswordHash) {
+                if ($passwordHash === $oldPasswordHash) {
+                    throw new \Magento\Framework\Exception\LocalizedException(
+                        __('Sorry, but this password has already been used. Please create another.')
+                    );
+                }
+            }
+        }
+    }
+}
diff --git a/app/code/Magento/User/Model/Backend/Observer/PasswordObserver.php b/app/code/Magento/User/Observer/Backend/ForceAdminPasswordChangeObserver.php
similarity index 56%
rename from app/code/Magento/User/Model/Backend/Observer/PasswordObserver.php
rename to app/code/Magento/User/Observer/Backend/ForceAdminPasswordChangeObserver.php
index 93c54fd5df9a7461770265c6cfbf562e55739e94..5293b69e43cca85da24b42f3af9e8ce4bd023d52 100644
--- a/app/code/Magento/User/Model/Backend/Observer/PasswordObserver.php
+++ b/app/code/Magento/User/Observer/Backend/ForceAdminPasswordChangeObserver.php
@@ -4,14 +4,15 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\User\Model\Backend\Observer;
+namespace Magento\User\Observer\Backend;
 
 use Magento\Framework\Event\Observer as EventObserver;
+use Magento\Framework\Event\ObserverInterface;
 
 /**
  * User backend observer model for passwords
  */
-class PasswordObserver
+class ForceAdminPasswordChangeObserver implements ObserverInterface
 {
     /**
      * Backend configuration interface
@@ -27,13 +28,6 @@ class PasswordObserver
      */
     protected $authorization;
 
-    /**
-     * Admin user resource model
-     *
-     * @var \Magento\User\Model\Resource\User
-     */
-    protected $userResource;
-
     /**
      * Backend url interface
      *
@@ -55,13 +49,6 @@ class PasswordObserver
      */
     protected $authSession;
 
-    /**
-     * Encryption model
-     *
-     * @var \Magento\Framework\Encryption\EncryptorInterface
-     */
-    protected $encryptor;
-
     /**
      * Action flag
      *
@@ -79,107 +66,37 @@ class PasswordObserver
     /**
      * @param \Magento\Framework\AuthorizationInterface $authorization
      * @param \Magento\User\Model\Backend\Config\ObserverConfig $observerConfig
-     * @param \Magento\User\Model\Resource\User $userResource
      * @param \Magento\Backend\Model\UrlInterface $url
      * @param \Magento\Backend\Model\Session $session
      * @param \Magento\Backend\Model\Auth\Session $authSession
-     * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
      * @param \Magento\Framework\App\ActionFlag $actionFlag
      * @param \Magento\Framework\Message\ManagerInterface $messageManager
      */
     public function __construct(
         \Magento\Framework\AuthorizationInterface $authorization,
         \Magento\User\Model\Backend\Config\ObserverConfig $observerConfig,
-        \Magento\User\Model\Resource\User $userResource,
         \Magento\Backend\Model\UrlInterface $url,
         \Magento\Backend\Model\Session $session,
         \Magento\Backend\Model\Auth\Session $authSession,
-        \Magento\Framework\Encryption\EncryptorInterface $encryptor,
         \Magento\Framework\App\ActionFlag $actionFlag,
         \Magento\Framework\Message\ManagerInterface $messageManager
     ) {
         $this->authorization = $authorization;
         $this->observerConfig = $observerConfig;
-        $this->userResource = $userResource;
         $this->url = $url;
         $this->session = $session;
         $this->authSession = $authSession;
-        $this->encryptor = $encryptor;
         $this->actionFlag = $actionFlag;
         $this->messageManager = $messageManager;
     }
 
-    /**
-     * Harden admin password change.
-     *
-     * New password must be minimum 7 chars length and include alphanumeric characters
-     * The password is compared to at least last 4 previous passwords to prevent setting them again
-     *
-     * @param EventObserver $observer
-     * @return void
-     * @throws \Magento\Framework\Exception\LocalizedException
-     */
-    public function checkAdminPasswordChange($observer)
-    {
-        /* @var $user \Magento\User\Model\User */
-        $user = $observer->getEvent()->getObject();
-
-        if ($user->getNewPassword()) {
-            $password = $user->getNewPassword();
-        } else {
-            $password = $user->getPassword();
-        }
-
-        if ($password && !$user->getForceNewPassword() && $user->getId()) {
-            if ($this->encryptor->isValidHash($password, $user->getOrigData('password'))) {
-                throw new \Magento\Framework\Exception\LocalizedException(
-                    __('Sorry, but this password has already been used. Please create another.')
-                );
-            }
-
-            // check whether password was used before
-            $resource = $this->userResource;
-            $passwordHash = $this->encryptor->getHash($password, false);
-            foreach ($resource->getOldPasswords($user) as $oldPasswordHash) {
-                if ($passwordHash === $oldPasswordHash) {
-                    throw new \Magento\Framework\Exception\LocalizedException(
-                        __('Sorry, but this password has already been used. Please create another.')
-                    );
-                }
-            }
-        }
-    }
-
-    /**
-     * Save new admin password
-     *
-     * @param EventObserver $observer
-     * @return void
-     */
-    public function trackAdminNewPassword($observer)
-    {
-        /* @var $user \Magento\User\Model\User */
-        $user = $observer->getEvent()->getObject();
-        if ($user->getId()) {
-            $password = $user->getNewPassword();
-            $passwordLifetime = $this->observerConfig->getAdminPasswordLifetime();
-            if ($passwordLifetime && $password && !$user->getForceNewPassword()) {
-                $resource = $this->userResource;
-                $passwordHash = $this->encryptor->getHash($password, false);
-                $resource->trackPassword($user, $passwordHash, $passwordLifetime);
-                $this->messageManager->getMessages()->deleteMessageByIdentifier('magento_user_password_expired');
-                $this->authSession->unsPciAdminUserIsPasswordExpired();
-            }
-        }
-    }
-
     /**
      * Force admin to change password
      *
      * @param EventObserver $observer
      * @return void
      */
-    public function forceAdminPasswordChange($observer)
+    public function execute(EventObserver $observer)
     {
         if (!$this->observerConfig->isPasswordChangeForced()) {
             return;
diff --git a/app/code/Magento/User/Observer/Backend/TrackAdminNewPasswordObserver.php b/app/code/Magento/User/Observer/Backend/TrackAdminNewPasswordObserver.php
new file mode 100644
index 0000000000000000000000000000000000000000..790d78301f058805b12dcb779619fe1e8dfb4a51
--- /dev/null
+++ b/app/code/Magento/User/Observer/Backend/TrackAdminNewPasswordObserver.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\User\Observer\Backend;
+
+use Magento\Framework\Event\Observer as EventObserver;
+use Magento\Framework\Event\ObserverInterface;
+
+/**
+ * User backend observer model for passwords
+ */
+class TrackAdminNewPasswordObserver implements ObserverInterface
+{
+    /**
+     * Backend configuration interface
+     *
+     * @var \Magento\User\Model\Backend\Config\ObserverConfig
+     */
+    protected $observerConfig;
+
+    /**
+     * Admin user resource model
+     *
+     * @var \Magento\User\Model\ResourceModel\User
+     */
+    protected $userResource;
+
+    /**
+     * Backend authorization session
+     *
+     * @var \Magento\Backend\Model\Auth\Session
+     */
+    protected $authSession;
+
+    /**
+     * Encryption model
+     *
+     * @var \Magento\Framework\Encryption\EncryptorInterface
+     */
+    protected $encryptor;
+
+    /**
+     * Message manager interface
+     *
+     * @var \Magento\Framework\Message\ManagerInterface
+     */
+    protected $messageManager;
+
+    /**
+     * @param \Magento\User\Model\Backend\Config\ObserverConfig $observerConfig
+     * @param \Magento\User\Model\ResourceModel\User $userResource
+     * @param \Magento\Backend\Model\Auth\Session $authSession
+     * @param \Magento\Framework\Encryption\EncryptorInterface $encryptor
+     * @param \Magento\Framework\Message\ManagerInterface $messageManager
+     */
+    public function __construct(
+        \Magento\User\Model\Backend\Config\ObserverConfig $observerConfig,
+        \Magento\User\Model\ResourceModel\User $userResource,
+        \Magento\Backend\Model\Auth\Session $authSession,
+        \Magento\Framework\Encryption\EncryptorInterface $encryptor,
+        \Magento\Framework\Message\ManagerInterface $messageManager
+    ) {
+        $this->observerConfig = $observerConfig;
+        $this->userResource = $userResource;
+        $this->authSession = $authSession;
+        $this->encryptor = $encryptor;
+        $this->messageManager = $messageManager;
+    }
+
+    /**
+     * Save new admin password
+     *
+     * @param EventObserver $observer
+     * @return void
+     */
+    public function execute(EventObserver $observer)
+    {
+        /* @var $user \Magento\User\Model\User */
+        $user = $observer->getEvent()->getObject();
+        if ($user->getId()) {
+            $password = $user->getNewPassword();
+            $passwordLifetime = $this->observerConfig->getAdminPasswordLifetime();
+            if ($passwordLifetime && $password && !$user->getForceNewPassword()) {
+                $passwordHash = $this->encryptor->getHash($password, false);
+                $this->userResource->trackPassword($user, $passwordHash, $passwordLifetime);
+                $this->messageManager->getMessages()->deleteMessageByIdentifier('magento_user_password_expired');
+                $this->authSession->unsPciAdminUserIsPasswordExpired();
+            }
+        }
+    }
+}
diff --git a/app/code/Magento/User/Test/Unit/Model/Backend/Observer/PasswordObserverTest.php b/app/code/Magento/User/Test/Unit/Model/Backend/Observer/PasswordObserverTest.php
deleted file mode 100644
index 331d74ac086d392fac09a4a78a4b3bd30f56ca23..0000000000000000000000000000000000000000
--- a/app/code/Magento/User/Test/Unit/Model/Backend/Observer/PasswordObserverTest.php
+++ /dev/null
@@ -1,308 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-namespace Magento\User\Test\Unit\Model\Backend\Observer;
-
-/**
- * Test class for Magento\User\Model\Backend\Observer\PasswordObserver
- * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
- */
-class PasswordObserverTest extends \PHPUnit_Framework_TestCase
-{
-    /** @var \Magento\Framework\AuthorizationInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $authMock;
-
-    /** @var \Magento\User\Model\Backend\Config\ObserverConfig */
-    protected $observerConfig;
-
-    /** @var \Magento\Backend\App\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $configInterfaceMock;
-
-    /** @var \Magento\User\Model\Resource\User|\PHPUnit_Framework_MockObject_MockObject */
-    protected $userMock;
-
-    /** @var \Magento\Backend\Model\UrlInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $urlInterfaceMock;
-
-    /** @var \Magento\Backend\Model\Session|\PHPUnit_Framework_MockObject_MockObject */
-    protected $sessionMock;
-
-    /** @var \Magento\Backend\Model\Auth\Session|\PHPUnit_Framework_MockObject_MockObject */
-    protected $authSessionMock;
-
-    /** @var \Magento\Framework\Encryption\EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $encryptorMock;
-
-    /** @var \Magento\Framework\App\ActionFlag|\PHPUnit_Framework_MockObject_MockObject */
-    protected $actionFlagMock;
-
-    /** @var \Magento\Framework\Message\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $managerInterfaceMock;
-
-    /** @var \Magento\Framework\Message\MessageInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $messageInterfaceMock;
-
-    /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
-    protected $eventManagerMock;
-
-    /** @var \Magento\User\Model\Backend\Observer\PasswordObserver */
-    protected $model;
-
-    public function setUp()
-    {
-        $this->authMock = $this->getMockBuilder('Magento\Framework\AuthorizationInterface')
-            ->disableOriginalConstructor()
-            ->setMethods(['isAllowed'])
-            ->getMock();
-
-        $this->configInterfaceMock = $this->getMockBuilder('Magento\Backend\App\ConfigInterface')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        $this->userMock = $this->getMockBuilder('Magento\User\Model\Resource\User')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        $this->urlInterfaceMock = $this->getMockBuilder('Magento\Backend\Model\UrlInterface')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        $this->sessionMock = $this->getMockBuilder('Magento\Backend\Model\Session')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        $this->authSessionMock = $this->getMockBuilder('Magento\Backend\Model\Auth\Session')
-            ->disableOriginalConstructor()
-            ->setMethods(
-                [
-                    'setPciAdminUserIsPasswordExpired',
-                    'unsPciAdminUserIsPasswordExpired',
-                    'getPciAdminUserIsPasswordExpired',
-                    'isLoggedIn',
-                    'clearStorage'
-                ]
-            )->getMock();
-
-        $this->encryptorMock = $this->getMockBuilder('\Magento\Framework\Encryption\EncryptorInterface')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        $this->actionFlagMock = $this->getMockBuilder('Magento\Framework\App\ActionFlag')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        $this->managerInterfaceMock = $this->getMockBuilder('Magento\Framework\Message\ManagerInterface')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        $this->messageInterfaceMock = $this->getMockBuilder('Magento\Framework\Message\MessageInterface')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        $this->eventManagerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMockForAbstractClass();
-
-        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-
-        $this->observerConfig = $helper->getObject(
-            'Magento\User\Model\Backend\Config\ObserverConfig',
-            [
-                'backendConfig' => $this->configInterfaceMock
-            ]
-        );
-
-        $this->model = $helper->getObject(
-            'Magento\User\Model\Backend\Observer\PasswordObserver',
-            [
-                'observerConfig' => $this->observerConfig,
-                'authorization' => $this->authMock,
-                'userResource' => $this->userMock,
-                'url' => $this->urlInterfaceMock,
-                'session' => $this->sessionMock,
-                'authSession' => $this->authSessionMock,
-                'actionFlag' => $this->actionFlagMock,
-                'encryptor' => $this->encryptorMock,
-                'messageManager' => $this->managerInterfaceMock,
-                'messageInterface' => $this->messageInterfaceMock,
-                'eventManager' => $this->eventManagerMock
-            ]
-        );
-    }
-
-    public function testCheckAdminPasswordChange()
-    {
-        $newPW = "mYn3wpassw0rd";
-        $uid = 123;
-        /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
-        $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */
-        $eventMock = $this->getMockBuilder('Magento\Framework\Event')
-            ->disableOriginalConstructor()
-            ->setMethods(['getObject'])
-            ->getMock();
-
-        /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */
-        $userMock = $this->getMockBuilder('Magento\User\Model\User')
-            ->disableOriginalConstructor()
-            ->setMethods(['getId', 'getNewPassword', 'getForceNewPassword'])
-            ->getMock();
-
-        $eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock);
-        $eventMock->expects($this->once())->method('getObject')->willReturn($userMock);
-        $userMock->expects($this->atLeastOnce())->method('getNewPassword')->willReturn($newPW);
-        $userMock->expects($this->once())->method('getForceNewPassword')->willReturn(false);
-        $userMock->expects($this->once())->method('getId')->willReturn($uid);
-        $this->encryptorMock->expects($this->once())->method('isValidHash')->willReturn(false);
-        $this->encryptorMock->expects($this->once())->method('getHash')->willReturn(md5($newPW));
-        $this->userMock->method('getOldPasswords')->willReturn([md5('pw1'), md5('pw2')]);
-
-        $this->model->checkAdminPasswordChange($eventObserverMock);
-    }
-
-    public function testCheckAdminPasswordChangeThrowsLocalizedExp()
-    {
-        $newPW = "mYn3wpassw0rd";
-        $uid = 123;
-        /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
-        $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */
-        $eventMock = $this->getMockBuilder('Magento\Framework\Event')
-            ->disableOriginalConstructor()
-            ->setMethods(['getObject'])
-            ->getMock();
-
-        /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */
-        $userMock = $this->getMockBuilder('Magento\User\Model\User')
-            ->disableOriginalConstructor()
-            ->setMethods(['getId', 'getNewPassword', 'getForceNewPassword'])
-            ->getMock();
-
-        $eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock);
-        $eventMock->expects($this->once())->method('getObject')->willReturn($userMock);
-        $userMock->expects($this->atLeastOnce())->method('getNewPassword')->willReturn($newPW);
-        $userMock->expects($this->once())->method('getForceNewPassword')->willReturn(false);
-        $userMock->expects($this->once())->method('getId')->willReturn($uid);
-        $this->encryptorMock->expects($this->once())->method('isValidHash')->willReturn(true);
-        $this->userMock->method('getOldPasswords')->willReturn([md5('pw1'), md5('pw2')]);
-
-        try {
-            $this->model->checkAdminPasswordChange($eventObserverMock);
-        } catch (\Magento\Framework\Exception\LocalizedException $expected) {
-            return;
-        }
-        $this->fail('An expected exception has not been raised.');
-    }
-
-    public function testTrackAdminPassword()
-    {
-        $newPW = "mYn3wpassw0rd";
-        $oldPW = "notsecure";
-        $uid = 123;
-        /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
-        $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */
-        $eventMock = $this->getMockBuilder('Magento\Framework\Event')
-            ->disableOriginalConstructor()
-            ->setMethods(['getObject'])
-            ->getMock();
-
-        /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */
-        $userMock = $this->getMockBuilder('Magento\User\Model\User')
-            ->disableOriginalConstructor()
-            ->setMethods(['getId', 'getNewPassword', 'getForceNewPassword'])
-            ->getMock();
-
-        $eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock);
-        $eventMock->expects($this->once())->method('getObject')->willReturn($userMock);
-        $userMock->expects($this->once())->method('getId')->willReturn($uid);
-        $userMock->expects($this->once())->method('getNewPassword')->willReturn($newPW);
-        $this->configInterfaceMock
-            ->expects($this->atLeastOnce())
-            ->method('getValue')
-            ->willReturn(1);
-        $userMock->expects($this->once())->method('getForceNewPassword')->willReturn(false);
-        $this->encryptorMock->expects($this->once())->method('getHash')->willReturn(md5($oldPW));
-
-        /** @var \Magento\Framework\Message\Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
-        $collectionMock = $this->getMockBuilder('Magento\Framework\Message\Collection')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-        $this->managerInterfaceMock
-            ->expects($this->once())
-            ->method('getMessages')
-            ->willReturn($collectionMock);
-        $this->authSessionMock->expects($this->once())->method('unsPciAdminUserIsPasswordExpired')->willReturn(null);
-
-        $this->model->trackAdminNewPassword($eventObserverMock);
-    }
-
-    public function testForceAdminPasswordChange()
-    {
-        /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
-        $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
-            ->disableOriginalConstructor()
-            ->setMethods([])
-            ->getMock();
-
-        /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */
-        $eventMock = $this->getMockBuilder('Magento\Framework\Event')
-            ->disableOriginalConstructor()
-            ->setMethods(['getControllerAction', 'getRequest'])
-            ->getMock();
-
-        $this->configInterfaceMock
-            ->expects($this->atLeastOnce())
-            ->method('getValue')
-            ->willReturn(1);
-        $this->authSessionMock->expects($this->once())->method('isLoggedIn')->willReturn(true);
-        $eventObserverMock->expects($this->atLeastOnce())->method('getEvent')->willReturn($eventMock);
-        /** @var \Magento\Framework\App\Action\Action $controllerMock */
-        $controllerMock = $this->getMockBuilder('Magento\Framework\App\Action\AbstractAction')
-            ->disableOriginalConstructor()
-            ->setMethods(['getRedirect', 'getRequest'])
-            ->getMockForAbstractClass();
-        /** @var \Magento\Framework\App\RequestInterface $requestMock */
-        $requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface')
-            ->disableOriginalConstructor()
-            ->setMethods(['getFullActionName', 'setDispatched'])
-            ->getMockForAbstractClass();
-        $eventMock->expects($this->once())->method('getControllerAction')->willReturn($controllerMock);
-        $eventMock->expects($this->once())->method('getRequest')->willReturn($requestMock);
-        $this->authSessionMock->expects($this->once())->method('getPciAdminUserIsPasswordExpired')->willReturn(true);
-        $requestMock->expects($this->once())->method('getFullActionName')->willReturn('not_in_array');
-
-        $this->authSessionMock->expects($this->once())->method('clearStorage');
-        $this->sessionMock->expects($this->once())->method('clearStorage');
-        $this->managerInterfaceMock->expects($this->once())->method('addErrorMessage');
-        $controllerMock->expects($this->once())->method('getRequest')->willReturn($requestMock);
-        $requestMock->expects($this->once())->method('setDispatched')->willReturn(false);
-
-        $this->model->forceAdminPasswordChange($eventObserverMock);
-    }
-}
diff --git a/app/code/Magento/User/Test/Unit/Model/Plugin/AuthorizationRoleTest.php b/app/code/Magento/User/Test/Unit/Model/Plugin/AuthorizationRoleTest.php
index 8a486e4a745b71b15c01e178e7f6887396a85f10..9103036cdb5eb7658e59c66e397fc894ebe32bc0 100644
--- a/app/code/Magento/User/Test/Unit/Model/Plugin/AuthorizationRoleTest.php
+++ b/app/code/Magento/User/Test/Unit/Model/Plugin/AuthorizationRoleTest.php
@@ -14,7 +14,7 @@ class AuthorizationRoleTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\User\Model\Plugin\AuthorizationRole */
     protected $model;
 
-    /** @var \Magento\User\Model\Resource\User|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\User\Model\ResourceModel\User|\PHPUnit_Framework_MockObject_MockObject */
     protected $userResourceModelMock;
 
     /** @var \Magento\Authorization\Model\Role|\PHPUnit_Framework_MockObject_MockObject */
@@ -25,7 +25,7 @@ class AuthorizationRoleTest extends \PHPUnit_Framework_TestCase
      */
     protected function setUp()
     {
-        $this->userResourceModelMock = $this->getMockBuilder('Magento\User\Model\Resource\User')
+        $this->userResourceModelMock = $this->getMockBuilder('Magento\User\Model\ResourceModel\User')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
diff --git a/app/code/Magento/User/Test/Unit/Model/Resource/UserTest.php b/app/code/Magento/User/Test/Unit/Model/ResourceModel/UserTest.php
similarity index 95%
rename from app/code/Magento/User/Test/Unit/Model/Resource/UserTest.php
rename to app/code/Magento/User/Test/Unit/Model/ResourceModel/UserTest.php
index 961cc40d5f3304599b2610c780d2d2774424af3b..c1e054e744327bc04099f00475d219f55d819558 100644
--- a/app/code/Magento/User/Test/Unit/Model/Resource/UserTest.php
+++ b/app/code/Magento/User/Test/Unit/Model/ResourceModel/UserTest.php
@@ -4,14 +4,14 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\User\Test\Unit\Model\Resource;
+namespace Magento\User\Test\Unit\Model\ResourceModel;
 
 /**
- * Test class for \Magento\User\Model\Resource\User testing
+ * Test class for \Magento\User\Model\ResourceModel\User testing
  */
 class UserTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\User\Model\Resource\User */
+    /** @var \Magento\User\Model\ResourceModel\User */
     protected $model;
 
     /** @var \Magento\User\Model\User|\PHPUnit_framework_MockObject_MockObject */
@@ -20,7 +20,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\Acl\CacheInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $aclCacheMock;
 
-    /** @var \Magento\Framework\Model\Resource\Db\Context|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject */
     protected $contextMock;
 
     /** @var \Magento\Authorization\Model\RoleFactory|\PHPUnit_Framework_MockObject_MockObject */
@@ -29,7 +29,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\Stdlib\DateTime|\PHPUnit_Framework_MockObject_MockObject */
     protected $dateTimeMock;
 
-    /** @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject */
     protected $resourceMock;
 
     /** @var \Magento\Framework\DB\Adapter\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject */
@@ -48,7 +48,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
             ->setMethods([])
             ->getMock();
 
-        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resourceMock = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
@@ -86,7 +86,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
 
         $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         $this->model = $helper->getObject(
-            'Magento\User\Model\Resource\User',
+            'Magento\User\Model\ResourceModel\User',
             [
                 'resource' => $this->resourceMock,
                 'aclCache' => $this->aclCacheMock,
@@ -112,7 +112,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
         $this->resourceMock->expects($this->once())->method('getConnection')->willReturn($this->dbAdapterMock);
         $this->dbAdapterMock->expects($this->once())->method('update');
 
-        $this->assertInstanceOf('Magento\User\Model\Resource\User', $this->model->recordLogin($this->userMock));
+        $this->assertInstanceOf('Magento\User\Model\ResourceModel\User', $this->model->recordLogin($this->userMock));
     }
 
     public function testLoadByUsername()
@@ -215,7 +215,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
     {
         $this->resourceMock->expects($this->never())->method('getConnection');
         $this->assertInstanceOf(
-            'Magento\User\Model\Resource\User',
+            'Magento\User\Model\ResourceModel\User',
             $this->model->saveExtra($this->userMock, [1, 2, 3])
         );
     }
@@ -227,7 +227,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
         $this->resourceMock->expects($this->once())->method('getConnection')->willReturn($this->dbAdapterMock);
         $this->dbAdapterMock->expects($this->once())->method('update');
         $this->assertInstanceOf(
-            'Magento\User\Model\Resource\User',
+            'Magento\User\Model\ResourceModel\User',
             $this->model->saveExtra($this->userMock, [1, 2, 3])
         );
     }
@@ -326,7 +326,10 @@ class UserTest extends \PHPUnit_Framework_TestCase
         $methodUserMock->expects($this->atleastOnce())->method('getRoleId')->willReturn($roleId);
         $this->dbAdapterMock->expects($this->once())->method('delete');
 
-        $this->assertInstanceOf('\Magento\User\Model\Resource\User', $this->model->deleteFromRole($methodUserMock));
+        $this->assertInstanceOf(
+            '\Magento\User\Model\ResourceModel\User',
+            $this->model->deleteFromRole($methodUserMock)
+        );
     }
 
     public function testRoleUserExists()
@@ -387,7 +390,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
     public function testInitUniqueFields()
     {
         $this->assertInstanceOf(
-            '\Magento\User\Model\Resource\User',
+            '\Magento\User\Model\ResourceModel\User',
             $this->invokeMethod($this->model, '_initUniqueFields', [])
         );
     }
@@ -397,7 +400,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
         $this->userMock->expects($this->once())->method('isObjectNew')->willReturn(true);
 
         $this->assertInstanceOf(
-            '\Magento\User\Model\Resource\User',
+            '\Magento\User\Model\ResourceModel\User',
             $this->invokeMethod($this->model, '_beforeSave', [$this->userMock])
         );
     }
@@ -418,7 +421,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
         $this->dbAdapterMock->expects($this->once())->method('describeTable')->willReturn([1, 2, 3]);
 
         $this->assertInstanceOf(
-            '\Magento\User\Model\Resource\User',
+            '\Magento\User\Model\ResourceModel\User',
             $this->invokeMethod($this->model, '_afterSave', [$methodUserMock])
         );
     }
diff --git a/app/code/Magento/User/Test/Unit/Model/UserTest.php b/app/code/Magento/User/Test/Unit/Model/UserTest.php
index 1f37bd9a155245a37b5a4c73ed99694ef90e53c7..1842ebd8d3a56db3969baf89060b3205dd1bae5f 100644
--- a/app/code/Magento/User/Test/Unit/Model/UserTest.php
+++ b/app/code/Magento/User/Test/Unit/Model/UserTest.php
@@ -27,7 +27,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject */
     protected $contextMock;
 
-    /** @var \Magento\User\Model\Resource\User|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var \Magento\User\Model\ResourceModel\User|\PHPUnit_Framework_MockObject_MockObject */
     protected $resourceMock;
 
     /** @var \Magento\Framework\Data\Collection\AbstractDb|\PHPUnit_Framework_MockObject_MockObject */
@@ -76,7 +76,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
             []
         )->getMock();
         $this->resourceMock = $this->getMockBuilder(
-            'Magento\User\Model\Resource\User'
+            'Magento\User\Model\ResourceModel\User'
         )->disableOriginalConstructor()->setMethods(
             []
         )->getMock();
diff --git a/app/code/Magento/User/Test/Unit/Model/Backend/Observer/AuthObserverTest.php b/app/code/Magento/User/Test/Unit/Observer/Backend/AuthObserverTest.php
similarity index 77%
rename from app/code/Magento/User/Test/Unit/Model/Backend/Observer/AuthObserverTest.php
rename to app/code/Magento/User/Test/Unit/Observer/Backend/AuthObserverTest.php
index 97be558ef833b228d674bb4ac05525406398a376..2ead73d964d71368db27777d9a1fe075a526e71b 100644
--- a/app/code/Magento/User/Test/Unit/Model/Backend/Observer/AuthObserverTest.php
+++ b/app/code/Magento/User/Test/Unit/Observer/Backend/AuthObserverTest.php
@@ -4,47 +4,63 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\User\Test\Unit\Model\Backend\Observer;
-
+namespace Magento\User\Test\Unit\Observer\Backend;
+
+use Magento\Backend\App\ConfigInterface;
+use Magento\Backend\Model\Auth\Session;
+use Magento\Backend\Model\UrlInterface;
+use Magento\Framework\Encryption\EncryptorInterface;
+use Magento\Framework\Event;
+use Magento\Framework\Event\ManagerInterface as EventManagerInterface;
+use Magento\Framework\Event\Observer;
 use Magento\Framework\Exception\State\UserLockedException;
+use Magento\Framework\Message\Collection;
+use Magento\Framework\Message\ManagerInterface;
+use Magento\Framework\Message\MessageInterface;
+use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
+use Magento\User\Model\Backend\Config\ObserverConfig;
+use Magento\User\Model\ResourceModel\User;
+use Magento\User\Model\User as ModelUser;
+use Magento\User\Model\UserFactory;
+use Magento\User\Observer\Backend\AuthObserver;
 
 /**
- * Test class for Magento\User\Model\Backend\Observer\AuthObserver
+ * Test class for Magento\User\Observer\Backend\AuthObserver
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
 class AuthObserverTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\User\Model\Backend\Config\ObserverConfig */
+    /** @var ObserverConfig */
     protected $observerConfig;
 
-    /** @var \Magento\Backend\App\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var ConfigInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $configInterfaceMock;
 
-    /** @var \Magento\User\Model\Resource\User|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var User|\PHPUnit_Framework_MockObject_MockObject */
     protected $userMock;
 
-    /** @var \Magento\Backend\Model\UrlInterface|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var UrlInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $urlInterfaceMock;
 
-    /** @var \Magento\Backend\Model\Auth\Session|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var Session|\PHPUnit_Framework_MockObject_MockObject */
     protected $authSessionMock;
 
-    /** @var \Magento\User\Model\UserFactory|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var UserFactory|\PHPUnit_Framework_MockObject_MockObject */
     protected $userFactoryMock;
 
-    /** @var \Magento\Framework\Encryption\EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $encryptorMock;
 
-    /** @var \Magento\Framework\Message\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $managerInterfaceMock;
 
-    /** @var \Magento\Framework\Message\MessageInterface|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var MessageInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $messageInterfaceMock;
 
-    /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    /** @var EventManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $eventManagerMock;
 
-    /** @var \Magento\User\Model\Backend\Observer\AuthObserver */
+    /** @var AuthObserver */
     protected $model;
 
     public function setUp()
@@ -54,7 +70,7 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase
             ->setMethods([])
             ->getMock();
 
-        $this->userMock = $this->getMockBuilder('Magento\User\Model\Resource\User')
+        $this->userMock = $this->getMockBuilder('Magento\User\Model\ResourceModel\User')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
@@ -101,7 +117,7 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase
             ->setMethods([])
             ->getMockForAbstractClass();
 
-        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $helper = new ObjectManager($this);
 
         $this->observerConfig = $helper->getObject(
             'Magento\User\Model\Backend\Config\ObserverConfig',
@@ -111,7 +127,7 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->model = $helper->getObject(
-            'Magento\User\Model\Backend\Observer\AuthObserver',
+            'Magento\User\Observer\Backend\AuthObserver',
             [
                 'observerConfig' => $this->observerConfig,
                 'userResource' => $this->userMock,
@@ -136,19 +152,19 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase
             'expires' => 1,
         ];
 
-        /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
+        /** @var Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
         $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
 
-        /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */
+        /** @var Event|\PHPUnit_Framework_MockObject_MockObject */
         $eventMock = $this->getMockBuilder('Magento\Framework\Event')
             ->disableOriginalConstructor()
             ->setMethods(['getPassword', 'getUser', 'getResult'])
             ->getMock();
 
-        /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */
+        /** @var ModelUser|\PHPUnit_Framework_MockObject_MockObject $userMock */
         $userMock = $this->getMockBuilder('Magento\User\Model\User')
             ->disableOriginalConstructor()
             ->setMethods(['getId', 'getLockExpires', 'getPassword', 'save'])
@@ -167,7 +183,7 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase
             ->method('getValue')
             ->willReturn(1);
 
-        /** @var \Magento\Framework\Message\Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
+        /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
         $collectionMock = $this->getMockBuilder('Magento\Framework\Message\Collection')
             ->disableOriginalConstructor()
             ->setMethods([])
@@ -182,7 +198,7 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase
         $this->authSessionMock->expects($this->once())->method('setPciAdminUserIsPasswordExpired');
         $this->encryptorMock->expects($this->once())->method('validateHashVersion')->willReturn(false);
 
-        $this->model->adminAuthenticate($eventObserverMock);
+        $this->model->execute($eventObserverMock);
     }
 
     public function testAdminAuthenticateThrowsException()
@@ -191,19 +207,19 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase
         $authResult = true;
         $lockExpires = '3015-07-08 11:14:15.638276';
 
-        /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
+        /** @var Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
         $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
 
-        /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */
+        /** @var Event|\PHPUnit_Framework_MockObject_MockObject */
         $eventMock = $this->getMockBuilder('Magento\Framework\Event')
             ->disableOriginalConstructor()
             ->setMethods(['getPassword', 'getUser', 'getResult'])
             ->getMock();
 
-        /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */
+        /** @var ModelUser|\PHPUnit_Framework_MockObject_MockObject $userMock */
         $userMock = $this->getMockBuilder('Magento\User\Model\User')
             ->disableOriginalConstructor()
             ->setMethods(['getId', 'getLockExpires', 'getPassword'])
@@ -216,7 +232,7 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase
         $userMock->expects($this->once())->method('getLockExpires')->willReturn($lockExpires);
 
         try {
-            $this->model->adminAuthenticate($eventObserverMock);
+            $this->model->execute($eventObserverMock);
         } catch (UserLockedException $expected) {
             return;
         }
@@ -231,19 +247,19 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase
         $firstFailure = '1965-07-08 11:14:15.638276';
         $numOfFailures = 5;
 
-        /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
+        /** @var Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
         $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
             ->disableOriginalConstructor()
             ->setMethods([])
             ->getMock();
 
-        /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */
+        /** @var Event|\PHPUnit_Framework_MockObject_MockObject */
         $eventMock = $this->getMockBuilder('Magento\Framework\Event')
             ->disableOriginalConstructor()
             ->setMethods(['getPassword', 'getUser', 'getResult'])
             ->getMock();
 
-        /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */
+        /** @var ModelUser|\PHPUnit_Framework_MockObject_MockObject $userMock */
         $userMock = $this->getMockBuilder('Magento\User\Model\User')
             ->disableOriginalConstructor()
             ->setMethods(['getId', 'getFailuresNum', 'getFirstFailure'])
@@ -262,6 +278,6 @@ class AuthObserverTest extends \PHPUnit_Framework_TestCase
         $userMock->expects($this->once())->method('getFirstFailure')->willReturn($firstFailure);
         $this->userMock->expects($this->once())->method('updateFailure');
 
-        $this->model->adminAuthenticate($eventObserverMock);
+        $this->model->execute($eventObserverMock);
     }
 }
diff --git a/app/code/Magento/User/Test/Unit/Observer/Backend/CheckAdminPasswordChangeObserverTest.php b/app/code/Magento/User/Test/Unit/Observer/Backend/CheckAdminPasswordChangeObserverTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..a4b9b37edbfa869409635d9bdc8627851c82a8f5
--- /dev/null
+++ b/app/code/Magento/User/Test/Unit/Observer/Backend/CheckAdminPasswordChangeObserverTest.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\User\Test\Unit\Observer\Backend;
+
+/**
+ * Test class for \Magento\User\Observer\Backend\CheckAdminPasswordChangeObserver
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
+class CheckAdminPasswordChangeObserverTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var \Magento\User\Model\ResourceModel\User|\PHPUnit_Framework_MockObject_MockObject */
+    protected $userMock;
+
+    /** @var \Magento\Framework\Encryption\EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $encryptorMock;
+
+    /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $eventManagerMock;
+
+    /** @var \Magento\User\Observer\Backend\CheckAdminPasswordChangeObserver */
+    protected $model;
+
+    public function setUp()
+    {
+        $this->userMock = $this->getMockBuilder('Magento\User\Model\ResourceModel\User')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        $this->encryptorMock = $this->getMockBuilder('\Magento\Framework\Encryption\EncryptorInterface')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        $this->eventManagerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMockForAbstractClass();
+
+        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+
+        $this->model = $helper->getObject(
+            '\Magento\User\Observer\Backend\CheckAdminPasswordChangeObserver',
+            [
+                'userResource' => $this->userMock,
+                'encryptor' => $this->encryptorMock,
+            ]
+        );
+    }
+
+    public function testCheckAdminPasswordChange()
+    {
+        $newPW = "mYn3wpassw0rd";
+        $uid = 123;
+        /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
+        $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */
+        $eventMock = $this->getMockBuilder('Magento\Framework\Event')
+            ->disableOriginalConstructor()
+            ->setMethods(['getObject'])
+            ->getMock();
+
+        /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */
+        $userMock = $this->getMockBuilder('Magento\User\Model\User')
+            ->disableOriginalConstructor()
+            ->setMethods(['getId', 'getNewPassword', 'getForceNewPassword'])
+            ->getMock();
+
+        $eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock);
+        $eventMock->expects($this->once())->method('getObject')->willReturn($userMock);
+        $userMock->expects($this->atLeastOnce())->method('getNewPassword')->willReturn($newPW);
+        $userMock->expects($this->once())->method('getForceNewPassword')->willReturn(false);
+        $userMock->expects($this->once())->method('getId')->willReturn($uid);
+        $this->encryptorMock->expects($this->once())->method('isValidHash')->willReturn(false);
+        $this->encryptorMock->expects($this->once())->method('getHash')->willReturn(md5($newPW));
+        $this->userMock->method('getOldPasswords')->willReturn([md5('pw1'), md5('pw2')]);
+
+        $this->model->execute($eventObserverMock);
+    }
+
+    public function testCheckAdminPasswordChangeThrowsLocalizedExp()
+    {
+        $newPW = "mYn3wpassw0rd";
+        $uid = 123;
+        /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
+        $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */
+        $eventMock = $this->getMockBuilder('Magento\Framework\Event')
+            ->disableOriginalConstructor()
+            ->setMethods(['getObject'])
+            ->getMock();
+
+        /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */
+        $userMock = $this->getMockBuilder('Magento\User\Model\User')
+            ->disableOriginalConstructor()
+            ->setMethods(['getId', 'getNewPassword', 'getForceNewPassword'])
+            ->getMock();
+
+        $eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock);
+        $eventMock->expects($this->once())->method('getObject')->willReturn($userMock);
+        $userMock->expects($this->atLeastOnce())->method('getNewPassword')->willReturn($newPW);
+        $userMock->expects($this->once())->method('getForceNewPassword')->willReturn(false);
+        $userMock->expects($this->once())->method('getId')->willReturn($uid);
+        $this->encryptorMock->expects($this->once())->method('isValidHash')->willReturn(true);
+        $this->userMock->method('getOldPasswords')->willReturn([md5('pw1'), md5('pw2')]);
+
+        try {
+            $this->model->execute($eventObserverMock);
+        } catch (\Magento\Framework\Exception\LocalizedException $expected) {
+            return;
+        }
+        $this->fail('An expected exception has not been raised.');
+    }
+}
diff --git a/app/code/Magento/User/Test/Unit/Observer/Backend/ForceAdminPasswordChangeObserverTest.php b/app/code/Magento/User/Test/Unit/Observer/Backend/ForceAdminPasswordChangeObserverTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ec609e504751da7cf9ba7ecc75e54503374f17c2
--- /dev/null
+++ b/app/code/Magento/User/Test/Unit/Observer/Backend/ForceAdminPasswordChangeObserverTest.php
@@ -0,0 +1,160 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\User\Test\Unit\Observer\Backend;
+
+/**
+ * Test class for Magento\User\Observer\Backend\ForceAdminPasswordChangeObserver
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
+class ForceAdminPasswordChangeObserverTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var \Magento\Framework\AuthorizationInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $authMock;
+
+    /** @var \Magento\User\Model\Backend\Config\ObserverConfig */
+    protected $observerConfig;
+
+    /** @var \Magento\Backend\App\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $configInterfaceMock;
+
+    /** @var \Magento\Backend\Model\UrlInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $urlInterfaceMock;
+
+    /** @var \Magento\Backend\Model\Session|\PHPUnit_Framework_MockObject_MockObject */
+    protected $sessionMock;
+
+    /** @var \Magento\Backend\Model\Auth\Session|\PHPUnit_Framework_MockObject_MockObject */
+    protected $authSessionMock;
+
+    /** @var \Magento\Framework\App\ActionFlag|\PHPUnit_Framework_MockObject_MockObject */
+    protected $actionFlagMock;
+
+    /** @var \Magento\Framework\Message\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $managerInterfaceMock;
+
+    /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $eventManagerMock;
+
+    /** @var \Magento\User\Observer\Backend\ForceAdminPasswordChangeObserver */
+    protected $model;
+
+    public function setUp()
+    {
+        $this->authMock = $this->getMockBuilder('Magento\Framework\AuthorizationInterface')
+            ->disableOriginalConstructor()
+            ->setMethods(['isAllowed'])
+            ->getMock();
+
+        $this->configInterfaceMock = $this->getMockBuilder('Magento\Backend\App\ConfigInterface')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        $this->urlInterfaceMock = $this->getMockBuilder('Magento\Backend\Model\UrlInterface')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        $this->sessionMock = $this->getMockBuilder('Magento\Backend\Model\Session')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        $this->authSessionMock = $this->getMockBuilder('Magento\Backend\Model\Auth\Session')
+            ->disableOriginalConstructor()
+            ->setMethods(
+                [
+                    'setPciAdminUserIsPasswordExpired',
+                    'unsPciAdminUserIsPasswordExpired',
+                    'getPciAdminUserIsPasswordExpired',
+                    'isLoggedIn',
+                    'clearStorage'
+                ]
+            )->getMock();
+
+        $this->actionFlagMock = $this->getMockBuilder('Magento\Framework\App\ActionFlag')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        $this->managerInterfaceMock = $this->getMockBuilder('Magento\Framework\Message\ManagerInterface')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        $this->eventManagerMock = $this->getMockBuilder('Magento\Framework\Event\ManagerInterface')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMockForAbstractClass();
+
+        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+
+        $this->observerConfig = $helper->getObject(
+            'Magento\User\Model\Backend\Config\ObserverConfig',
+            [
+                'backendConfig' => $this->configInterfaceMock
+            ]
+        );
+
+        $this->model = $helper->getObject(
+            'Magento\User\Observer\Backend\ForceAdminPasswordChangeObserver',
+            [
+                'observerConfig' => $this->observerConfig,
+                'authorization' => $this->authMock,
+                'url' => $this->urlInterfaceMock,
+                'session' => $this->sessionMock,
+                'authSession' => $this->authSessionMock,
+                'actionFlag' => $this->actionFlagMock,
+                'messageManager' => $this->managerInterfaceMock,
+            ]
+        );
+    }
+
+    public function testForceAdminPasswordChange()
+    {
+        /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
+        $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */
+        $eventMock = $this->getMockBuilder('Magento\Framework\Event')
+            ->disableOriginalConstructor()
+            ->setMethods(['getControllerAction', 'getRequest'])
+            ->getMock();
+
+        $this->configInterfaceMock
+            ->expects($this->atLeastOnce())
+            ->method('getValue')
+            ->willReturn(1);
+        $this->authSessionMock->expects($this->once())->method('isLoggedIn')->willReturn(true);
+        $eventObserverMock->expects($this->atLeastOnce())->method('getEvent')->willReturn($eventMock);
+        /** @var \Magento\Framework\App\Action\Action $controllerMock */
+        $controllerMock = $this->getMockBuilder('Magento\Framework\App\Action\AbstractAction')
+            ->disableOriginalConstructor()
+            ->setMethods(['getRedirect', 'getRequest'])
+            ->getMockForAbstractClass();
+        /** @var \Magento\Framework\App\RequestInterface $requestMock */
+        $requestMock = $this->getMockBuilder('Magento\Framework\App\RequestInterface')
+            ->disableOriginalConstructor()
+            ->setMethods(['getFullActionName', 'setDispatched'])
+            ->getMockForAbstractClass();
+        $eventMock->expects($this->once())->method('getControllerAction')->willReturn($controllerMock);
+        $eventMock->expects($this->once())->method('getRequest')->willReturn($requestMock);
+        $this->authSessionMock->expects($this->once())->method('getPciAdminUserIsPasswordExpired')->willReturn(true);
+        $requestMock->expects($this->once())->method('getFullActionName')->willReturn('not_in_array');
+
+        $this->authSessionMock->expects($this->once())->method('clearStorage');
+        $this->sessionMock->expects($this->once())->method('clearStorage');
+        $this->managerInterfaceMock->expects($this->once())->method('addErrorMessage');
+        $controllerMock->expects($this->once())->method('getRequest')->willReturn($requestMock);
+        $requestMock->expects($this->once())->method('setDispatched')->willReturn(false);
+
+        $this->model->execute($eventObserverMock);
+    }
+}
diff --git a/app/code/Magento/User/Test/Unit/Observer/Backend/TrackAdminNewPasswordObserverTest.php b/app/code/Magento/User/Test/Unit/Observer/Backend/TrackAdminNewPasswordObserverTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..eb1b930771dd3b3da85301725f3def49fdda5412
--- /dev/null
+++ b/app/code/Magento/User/Test/Unit/Observer/Backend/TrackAdminNewPasswordObserverTest.php
@@ -0,0 +1,138 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\User\Test\Unit\Observer\Backend;
+
+/**
+ * Test class for Magento\User\Observer\Backend\TrackAdminNewPasswordObserver
+ * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
+ */
+class TrackAdminNewPasswordObserverTest extends \PHPUnit_Framework_TestCase
+{
+    /** @var \Magento\User\Model\Backend\Config\ObserverConfig */
+    protected $observerConfig;
+
+    /** @var \Magento\Backend\App\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $configInterfaceMock;
+
+    /** @var \Magento\User\Model\ResourceModel\User|\PHPUnit_Framework_MockObject_MockObject */
+    protected $userMock;
+
+    /** @var \Magento\Backend\Model\Auth\Session|\PHPUnit_Framework_MockObject_MockObject */
+    protected $authSessionMock;
+
+    /** @var \Magento\Framework\Encryption\EncryptorInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $encryptorMock;
+
+    /** @var \Magento\Framework\Message\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
+    protected $managerInterfaceMock;
+
+    /** @var \Magento\User\Observer\Backend\TrackAdminNewPasswordObserver */
+    protected $model;
+
+    public function setUp()
+    {
+        $this->configInterfaceMock = $this->getMockBuilder('Magento\Backend\App\ConfigInterface')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        $this->userMock = $this->getMockBuilder('Magento\User\Model\ResourceModel\User')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        $this->authSessionMock = $this->getMockBuilder('Magento\Backend\Model\Auth\Session')
+            ->disableOriginalConstructor()
+            ->setMethods(
+                [
+                    'setPciAdminUserIsPasswordExpired',
+                    'unsPciAdminUserIsPasswordExpired',
+                    'getPciAdminUserIsPasswordExpired',
+                    'isLoggedIn',
+                    'clearStorage'
+                ]
+            )->getMock();
+
+        $this->encryptorMock = $this->getMockBuilder('\Magento\Framework\Encryption\EncryptorInterface')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        $this->managerInterfaceMock = $this->getMockBuilder('Magento\Framework\Message\ManagerInterface')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+
+        $this->observerConfig = $helper->getObject(
+            'Magento\User\Model\Backend\Config\ObserverConfig',
+            [
+                'backendConfig' => $this->configInterfaceMock
+            ]
+        );
+
+        $this->model = $helper->getObject(
+            'Magento\User\Observer\Backend\TrackAdminNewPasswordObserver',
+            [
+                'observerConfig' => $this->observerConfig,
+                'userResource' => $this->userMock,
+                'authSession' => $this->authSessionMock,
+                'encryptor' => $this->encryptorMock,
+                'messageManager' => $this->managerInterfaceMock,
+            ]
+        );
+    }
+
+    public function testTrackAdminPassword()
+    {
+        $newPW = "mYn3wpassw0rd";
+        $oldPW = "notsecure";
+        $uid = 123;
+        /** @var \Magento\Framework\Event\Observer|\PHPUnit_Framework_MockObject_MockObject $eventObserverMock */
+        $eventObserverMock = $this->getMockBuilder('Magento\Framework\Event\Observer')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+
+        /** @var \Magento\Framework\Event|\PHPUnit_Framework_MockObject_MockObject */
+        $eventMock = $this->getMockBuilder('Magento\Framework\Event')
+            ->disableOriginalConstructor()
+            ->setMethods(['getObject'])
+            ->getMock();
+
+        /** @var \Magento\User\Model\User|\PHPUnit_Framework_MockObject_MockObject $userMock */
+        $userMock = $this->getMockBuilder('Magento\User\Model\User')
+            ->disableOriginalConstructor()
+            ->setMethods(['getId', 'getNewPassword', 'getForceNewPassword'])
+            ->getMock();
+
+        $eventObserverMock->expects($this->once())->method('getEvent')->willReturn($eventMock);
+        $eventMock->expects($this->once())->method('getObject')->willReturn($userMock);
+        $userMock->expects($this->once())->method('getId')->willReturn($uid);
+        $userMock->expects($this->once())->method('getNewPassword')->willReturn($newPW);
+        $this->configInterfaceMock
+            ->expects($this->atLeastOnce())
+            ->method('getValue')
+            ->willReturn(1);
+        $userMock->expects($this->once())->method('getForceNewPassword')->willReturn(false);
+        $this->encryptorMock->expects($this->once())->method('getHash')->willReturn(md5($oldPW));
+
+        /** @var \Magento\Framework\Message\Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
+        $collectionMock = $this->getMockBuilder('Magento\Framework\Message\Collection')
+            ->disableOriginalConstructor()
+            ->setMethods([])
+            ->getMock();
+        $this->managerInterfaceMock
+            ->expects($this->once())
+            ->method('getMessages')
+            ->willReturn($collectionMock);
+        $this->authSessionMock->expects($this->once())->method('unsPciAdminUserIsPasswordExpired')->willReturn(null);
+
+        $this->model->execute($eventObserverMock);
+    }
+}
diff --git a/app/code/Magento/User/etc/adminhtml/di.xml b/app/code/Magento/User/etc/adminhtml/di.xml
index 339eeb86be6118ed655bdb44084fee3aa254ad7b..4c974d78fbea5fd5c11167f4acc02c7d869c6ed7 100755
--- a/app/code/Magento/User/etc/adminhtml/di.xml
+++ b/app/code/Magento/User/etc/adminhtml/di.xml
@@ -7,7 +7,7 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <preference for="Magento\Backend\Model\Auth\Credential\StorageInterface" type="Magento\User\Model\User" />
-    <type name="Magento\User\Model\Backend\Observer\AuthObserver">
+    <type name="Magento\User\Observer\Backend\AuthObserver">
         <arguments>
             <argument name="authorization" xsi:type="object">Magento\Framework\Authorization</argument>
         </arguments>
diff --git a/app/code/Magento/User/etc/adminhtml/events.xml b/app/code/Magento/User/etc/adminhtml/events.xml
index fe4042e64a2a80f5533d53263bb2983b42d1d636..1bcdab99c766788a551a8120887bb73ff35fc417 100755
--- a/app/code/Magento/User/etc/adminhtml/events.xml
+++ b/app/code/Magento/User/etc/adminhtml/events.xml
@@ -7,15 +7,15 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="admin_user_authenticate_after">
-        <observer name="magento_user" instance="Magento\User\Model\Backend\Observer\AuthObserver" method="adminAuthenticate" />
+        <observer name="magento_user" instance="Magento\User\Observer\Backend\AuthObserver" />
     </event>
     <event name="controller_action_predispatch">
-        <observer name="magento_user" instance="Magento\User\Model\Backend\Observer\PasswordObserver" method="forceAdminPasswordChange" />
+        <observer name="magento_user" instance="Magento\User\Observer\Backend\ForceAdminPasswordChangeObserver" />
     </event>
     <event name="admin_user_save_before">
-        <observer name="magento_user" instance="Magento\User\Model\Backend\Observer\PasswordObserver" method="checkAdminPasswordChange" />
+        <observer name="magento_user" instance="Magento\User\Observer\Backend\CheckAdminPasswordChangeObserver" />
     </event>
     <event name="admin_user_save_after">
-        <observer name="magento_user" instance="Magento\User\Model\Backend\Observer\PasswordObserver" method="trackAdminNewPassword" />
+        <observer name="magento_user" instance="Magento\User\Observer\Backend\TrackAdminNewPasswordObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/User/etc/di.xml b/app/code/Magento/User/etc/di.xml
index 7faba5d4025cc1b96d732858514ff709c3f8e87f..1b7301b0b1646c65dc31ace2c633e728eb3b2aac 100644
--- a/app/code/Magento/User/etc/di.xml
+++ b/app/code/Magento/User/etc/di.xml
@@ -6,7 +6,7 @@
  */
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
-    <type name="Magento\User\Model\Resource\User">
+    <type name="Magento\User\Model\ResourceModel\User">
         <arguments>
             <argument name="aclCache" xsi:type="object">Magento\Framework\Acl\Cache\Proxy</argument>
         </arguments>
diff --git a/app/code/Magento/User/view/adminhtml/layout/adminhtml_locks_block.xml b/app/code/Magento/User/view/adminhtml/layout/adminhtml_locks_block.xml
index abfc5273167801f155c99e00493579cea77eb488..f0e6a671957158f69f55dbb18f03b24f62d2cb8f 100644
--- a/app/code/Magento/User/view/adminhtml/layout/adminhtml_locks_block.xml
+++ b/app/code/Magento/User/view/adminhtml/layout/adminhtml_locks_block.xml
@@ -12,7 +12,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.block.locks.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">lockedAdminsGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\User\Model\Resource\User\Locked\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\User\Model\ResourceModel\User\Locked\Collection</argument>
                     <argument name="default_sort" xsi:type="string">user_id</argument>
                     <argument name="use_ajax" xsi:type="string">1</argument>
                     <argument name="grid_url" xsi:type="url" path="*/*/grid">
diff --git a/app/code/Magento/User/view/adminhtml/layout/adminhtml_user_grid_block.xml b/app/code/Magento/User/view/adminhtml/layout/adminhtml_user_grid_block.xml
index 3a88a2aa8ebc914871fc9f4aae220fcbc6acfe35..9b3a99b010736af132de042616ff75674d4708e6 100644
--- a/app/code/Magento/User/view/adminhtml/layout/adminhtml_user_grid_block.xml
+++ b/app/code/Magento/User/view/adminhtml/layout/adminhtml_user_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.user.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">permissionsUserGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\User\Model\Resource\User\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\User\Model\ResourceModel\User\Collection</argument>
                     <argument name="use_ajax" xsi:type="string">1</argument>
                     <argument name="default_sort" xsi:type="string">username</argument>
                     <argument name="default_dir" xsi:type="string">asc</argument>
diff --git a/app/code/Magento/User/view/adminhtml/layout/adminhtml_user_role_grid_block.xml b/app/code/Magento/User/view/adminhtml/layout/adminhtml_user_role_grid_block.xml
index 18b13dc49cd33d4b85f1038fb791d1f0d87b3b6a..8be903d62d4fdfc163e0ff542947de37e8456ecc 100644
--- a/app/code/Magento/User/view/adminhtml/layout/adminhtml_user_role_grid_block.xml
+++ b/app/code/Magento/User/view/adminhtml/layout/adminhtml_user_role_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.role.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">roleGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Authorization\Model\Resource\Role\Grid\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Authorization\Model\ResourceModel\Role\Grid\Collection</argument>
                     <argument name="save_parameters_in_session" xsi:type="string">1</argument>
                     <argument name="default_sort" xsi:type="string">role_id</argument>
                     <argument name="default_dir" xsi:type="string">asc</argument>
diff --git a/app/code/Magento/User/view/adminhtml/web/app-config.js b/app/code/Magento/User/view/adminhtml/web/app-config.js
index 25bc4e7b6ca8902b794662884a09d6c755b14882..378afec02a6223d1eabc80c7e76dc5a7521e7774 100644
--- a/app/code/Magento/User/view/adminhtml/web/app-config.js
+++ b/app/code/Magento/User/view/adminhtml/web/app-config.js
@@ -11,7 +11,6 @@ require.config({
         "mage/adminhtml/backup": ["prototype"],
         "mage/captcha": ["prototype"],
         "mage/common": ["jquery"],
-        "mage/requirejs/plugin/id-normalizer": ["jquery"],
         "mage/webapi": ["jquery"],
         "ko": { exports: "ko" },
         "moment": { exports: "moment" }
diff --git a/app/code/Magento/Usps/Model/Carrier.php b/app/code/Magento/Usps/Model/Carrier.php
index 3a4c5ee77f6ae641d7fced32f859d82672f8e824..ef722b58a9850ccdb4874ebcbc53f10a20f70914 100644
--- a/app/code/Magento/Usps/Model/Carrier.php
+++ b/app/code/Magento/Usps/Model/Carrier.php
@@ -103,7 +103,7 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
     protected $_carrierHelper;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_productCollectionFactory;
 
@@ -129,7 +129,7 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
      * @param \Magento\Directory\Helper\Data $directoryData
      * @param \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
      * @param \Magento\Shipping\Helper\Carrier $carrierHelper
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
      * @param \Magento\Framework\HTTP\ZendClientFactory $httpClientFactory
      * @param array $data
      *
@@ -152,7 +152,7 @@ class Carrier extends AbstractCarrierOnline implements \Magento\Shipping\Model\C
         \Magento\Directory\Helper\Data $directoryData,
         \Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry,
         CarrierHelper $carrierHelper,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
         \Magento\Framework\HTTP\ZendClientFactory $httpClientFactory,
         array $data = []
     ) {
diff --git a/app/code/Magento/Variable/Model/Resource/Variable.php b/app/code/Magento/Variable/Model/ResourceModel/Variable.php
similarity index 95%
rename from app/code/Magento/Variable/Model/Resource/Variable.php
rename to app/code/Magento/Variable/Model/ResourceModel/Variable.php
index 5b5aedde1bdcdf80b326d89dadae8adf4e0ca7d8..3d84fa084956f00c7ee0e02dff18d41adf9eb5f4 100644
--- a/app/code/Magento/Variable/Model/Resource/Variable.php
+++ b/app/code/Magento/Variable/Model/ResourceModel/Variable.php
@@ -6,14 +6,14 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Variable\Model\Resource;
+namespace Magento\Variable\Model\ResourceModel;
 
 /**
  * Custom variable resource model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Variable extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Variable extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Constructor
@@ -116,7 +116,7 @@ class Variable extends \Magento\Framework\Model\Resource\Db\AbstractDb
      *
      * @param \Magento\Framework\DB\Select $select
      * @param integer $storeId
-     * @return \Magento\Variable\Model\Resource\Variable
+     * @return \Magento\Variable\Model\ResourceModel\Variable
      */
     protected function _addValueToSelect(
         \Magento\Framework\DB\Select $select,
diff --git a/app/code/Magento/Variable/Model/Resource/Variable/Collection.php b/app/code/Magento/Variable/Model/ResourceModel/Variable/Collection.php
similarity index 88%
rename from app/code/Magento/Variable/Model/Resource/Variable/Collection.php
rename to app/code/Magento/Variable/Model/ResourceModel/Variable/Collection.php
index 673df22d9addf1dece498f4fbae513a1ec7cdfc3..2e289ee427032f7a861e3fe5f59290a58ad217a9 100644
--- a/app/code/Magento/Variable/Model/Resource/Variable/Collection.php
+++ b/app/code/Magento/Variable/Model/ResourceModel/Variable/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Variable\Model\Resource\Variable;
+namespace Magento\Variable\Model\ResourceModel\Variable;
 
 /**
  * Custom variable collection
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Store Id
@@ -27,7 +27,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\Variable\Model\Variable', 'Magento\Variable\Model\Resource\Variable');
+        $this->_init('Magento\Variable\Model\Variable', 'Magento\Variable\Model\ResourceModel\Variable');
     }
 
     /**
diff --git a/app/code/Magento/Variable/Model/Variable.php b/app/code/Magento/Variable/Model/Variable.php
index 0a22c3fefaa1236fd9b516e3a370e94758d27d3b..54c40bed022f90cee246b3ecbe71a5afa5b6aefb 100644
--- a/app/code/Magento/Variable/Model/Variable.php
+++ b/app/code/Magento/Variable/Model/Variable.php
@@ -8,8 +8,8 @@ namespace Magento\Variable\Model;
 /**
  * Custom variable model
  *
- * @method \Magento\Variable\Model\Resource\Variable _getResource()
- * @method \Magento\Variable\Model\Resource\Variable getResource()
+ * @method \Magento\Variable\Model\ResourceModel\Variable _getResource()
+ * @method \Magento\Variable\Model\ResourceModel\Variable getResource()
  * @method string getCode()
  * @method \Magento\Variable\Model\Variable setCode(string $value)
  * @method string getName()
@@ -37,7 +37,7 @@ class Variable extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Escaper $escaper
-     * @param \Magento\Variable\Model\Resource\Variable $resource
+     * @param \Magento\Variable\Model\ResourceModel\Variable $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -45,7 +45,7 @@ class Variable extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Escaper $escaper,
-        \Magento\Variable\Model\Resource\Variable $resource,
+        \Magento\Variable\Model\ResourceModel\Variable $resource,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -61,7 +61,7 @@ class Variable extends \Magento\Framework\Model\AbstractModel
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\Variable\Model\Resource\Variable');
+        $this->_init('Magento\Variable\Model\ResourceModel\Variable');
     }
 
     /**
@@ -148,7 +148,7 @@ class Variable extends \Magento\Framework\Model\AbstractModel
      */
     public function getVariablesOptionArray($withGroup = false)
     {
-        /* @var $collection \Magento\Variable\Model\Resource\Variable\Collection */
+        /* @var $collection \Magento\Variable\Model\ResourceModel\Variable\Collection */
         $collection = $this->getCollection();
         $variables = [];
         foreach ($collection->toOptionArray() as $variable) {
diff --git a/app/code/Magento/Variable/Test/Unit/Model/VariableTest.php b/app/code/Magento/Variable/Test/Unit/Model/VariableTest.php
index 2bdaba7c8a06e023cdb62a2d62ebda4fc8f4b0a3..c162a20e71dc47532ab1f1c431425b1f737ed079 100644
--- a/app/code/Magento/Variable/Test/Unit/Model/VariableTest.php
+++ b/app/code/Magento/Variable/Test/Unit/Model/VariableTest.php
@@ -30,7 +30,7 @@ class VariableTest extends \PHPUnit_Framework_TestCase
         $this->escaperMock = $this->getMockBuilder('Magento\Framework\Escaper')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->resourceMock = $this->getMockBuilder('Magento\Variable\Model\Resource\Variable')
+        $this->resourceMock = $this->getMockBuilder('Magento\Variable\Model\ResourceModel\Variable')
             ->disableOriginalConstructor()
             ->getMock();
         $this->model = $this->objectManager->getObject(
@@ -109,7 +109,7 @@ class VariableTest extends \PHPUnit_Framework_TestCase
             ['value' => '{{customVar code=VAL}}', 'label' => __('%1', 'LBL')]
         ];
 
-        $collectionMock = $this->getMockBuilder('\Magento\Variable\Model\Resource\Variable\Collection')
+        $collectionMock = $this->getMockBuilder('\Magento\Variable\Model\ResourceModel\Variable\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $collectionMock->expects($this->any())
@@ -139,7 +139,7 @@ class VariableTest extends \PHPUnit_Framework_TestCase
             ]
         ];
 
-        $collectionMock = $this->getMockBuilder('\Magento\Variable\Model\Resource\Variable\Collection')
+        $collectionMock = $this->getMockBuilder('\Magento\Variable\Model\ResourceModel\Variable\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $collectionMock->expects($this->any())
diff --git a/app/code/Magento/Variable/view/adminhtml/layout/adminhtml_system_variable_grid_block.xml b/app/code/Magento/Variable/view/adminhtml/layout/adminhtml_system_variable_grid_block.xml
index 4140dd0eaf95d81c801f26edd501e6a16c133027..eaad78e11849faff563898bcdf718c1a703bc459 100644
--- a/app/code/Magento/Variable/view/adminhtml/layout/adminhtml_system_variable_grid_block.xml
+++ b/app/code/Magento/Variable/view/adminhtml/layout/adminhtml_system_variable_grid_block.xml
@@ -11,7 +11,7 @@
             <block class="Magento\Backend\Block\Widget\Grid" name="adminhtml.system.variable.grid" as="grid">
                 <arguments>
                     <argument name="id" xsi:type="string">customVariablesGrid</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Variable\Model\Resource\Variable\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Variable\Model\ResourceModel\Variable\Collection</argument>
                     <argument name="default_sort" xsi:type="string">variable_id</argument>
                     <argument name="default_dir" xsi:type="string">ASC</argument>
                 </arguments>
diff --git a/app/code/Magento/Variable/view/adminhtml/web/variables.js b/app/code/Magento/Variable/view/adminhtml/web/variables.js
index 2b71f6bc50c7c4aff622bc881b35818f5bad2f77..20292ecdf3c6d93fa5be3f0e8c74546b63a62dd6 100644
--- a/app/code/Magento/Variable/view/adminhtml/web/variables.js
+++ b/app/code/Magento/Variable/view/adminhtml/web/variables.js
@@ -3,10 +3,12 @@
  * See COPYING.txt for license details.
  */
 define([
-    "jquery",
-    "jquery/ui",
-    "prototype"
-], function(jQuery){
+    'jquery',
+    'mage/translate',
+    'Magento_Ui/js/modal/modal',
+    'jquery/ui',
+    'prototype',
+], function(jQuery, $t){
 
 window.Variables = {
     textareaElementId: null,
@@ -50,43 +52,23 @@ window.Variables = {
             this.openDialogWindow(this.variablesContent);
         }
     },
-    openDialogWindow: function(variablesContent) {
+    openDialogWindow: function (variablesContent) {
         var windowId = this.dialogWindowId;
-        jQuery('body').append('<div id="' + windowId + '">'+ Variables.variablesContent +'</div>');
-        jQuery('#' + windowId).dialog({
-            autoOpen:   false,
-            title:      "Insert Variable...",
-            modal:      true,
-            resizable:  false,
-            minWidth:   500,
-            width:      '75%',
-            position: {
-                my: 'left top',
-                at: 'center top',
-                of: 'body'
-            },
-            open: function () {
-                jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 30;
-                jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
-            },
-            close: function(event, ui) {
-                jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                jQuery(this).dialog('destroy');
-                jQuery('#' + windowId).remove();
+        jQuery('<div id="' + windowId + '">' + Variables.variablesContent + '</div>').modal({
+            title: $t('Insert Variable...'),
+            type: 'slide',
+            buttons: [],
+            closed: function (e, modal) {
+                modal.modal.remove();
             }
         });
 
-        jQuery('#' + windowId).dialog('open');
+        jQuery('#' + windowId).modal('openModal');
 
         variablesContent.evalScripts.bind(variablesContent).defer();
     },
-    closeDialogWindow: function(window) {
-        var windowId = this.dialogWindowId;
-        if(jQuery('#' + windowId).length){
-            jQuery('#' + windowId).dialog('close');
-        }
+    closeDialogWindow: function() {
+        jQuery('#' + this.dialogWindowId).modal('closeModal');
     },
     prepareVariableRow: function(varValue, varLabel) {
         var value = (varValue).replace(/"/g, '&quot;').replace(/'/g, '\\&#39;');
@@ -95,7 +77,7 @@ window.Variables = {
     },
     insertVariable: function(value) {
         var windowId = this.dialogWindowId;
-        jQuery('#' + windowId).dialog('close');
+        jQuery('#' + windowId).modal('closeModal');
         var textareaElm = $(this.textareaElementId);
         if (textareaElm) {
             var scrollPos = textareaElm.scrollTop;
diff --git a/app/code/Magento/Webapi/Model/WebapiRoleLocator.php b/app/code/Magento/Webapi/Model/WebapiRoleLocator.php
index ae5a2374d4c4ce6946404cd8d0496ca49d28ed46..9c30809339cf38579658d2beb75a0f6a6b3b8cf1 100644
--- a/app/code/Magento/Webapi/Model/WebapiRoleLocator.php
+++ b/app/code/Magento/Webapi/Model/WebapiRoleLocator.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Webapi\Model;
 
-use Magento\Authorization\Model\Resource\Role\CollectionFactory as RoleCollectionFactory;
+use Magento\Authorization\Model\ResourceModel\Role\CollectionFactory as RoleCollectionFactory;
 use Magento\Authorization\Model\Role;
 use Magento\Authorization\Model\UserContextInterface;
 use Magento\Framework\Authorization\RoleLocatorInterface;
diff --git a/app/code/Magento/Webapi/Test/Unit/Model/WebapiRoleLocatorTest.php b/app/code/Magento/Webapi/Test/Unit/Model/WebapiRoleLocatorTest.php
index 9b5d29e2486ad4002ef74e2dc6129cdbc906d816..7523893c3af69b217ed8a353160f37440a2752b7 100644
--- a/app/code/Magento/Webapi/Test/Unit/Model/WebapiRoleLocatorTest.php
+++ b/app/code/Magento/Webapi/Test/Unit/Model/WebapiRoleLocatorTest.php
@@ -6,8 +6,8 @@
 
 namespace Magento\Webapi\Test\Unit\Model;
 
-use Magento\Authorization\Model\Resource\Role\Collection as RoleCollection;
-use Magento\Authorization\Model\Resource\Role\CollectionFactory as RoleCollectionFactory;
+use Magento\Authorization\Model\ResourceModel\Role\Collection as RoleCollection;
+use Magento\Authorization\Model\ResourceModel\Role\CollectionFactory as RoleCollectionFactory;
 use Magento\Authorization\Model\Role;
 use Magento\Authorization\Model\UserContextInterface;
 
@@ -62,10 +62,10 @@ class WebapiRoleLocatorTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($userType));
 
         $this->roleCollectionFactory = $this->getMockBuilder(
-            'Magento\Authorization\Model\Resource\Role\CollectionFactory'
+            'Magento\Authorization\Model\ResourceModel\Role\CollectionFactory'
         )->disableOriginalConstructor()->setMethods(['create'])->getMock();
 
-        $this->roleCollection = $this->getMockBuilder('Magento\Authorization\Model\Resource\Role\Collection')
+        $this->roleCollection = $this->getMockBuilder('Magento\Authorization\Model\ResourceModel\Role\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['setUserFilter', 'getFirstItem'])
             ->getMock();
diff --git a/app/code/Magento/Weee/Model/Attribute/Backend/Weee/Tax.php b/app/code/Magento/Weee/Model/Attribute/Backend/Weee/Tax.php
index 76f63af61d1f9a290320b661c4e8e55d56e02352..409787319d574359d5ff47e745944ed2ca2a4255 100644
--- a/app/code/Magento/Weee/Model/Attribute/Backend/Weee/Tax.php
+++ b/app/code/Magento/Weee/Model/Attribute/Backend/Weee/Tax.php
@@ -10,7 +10,7 @@ use Magento\Framework\Exception\LocalizedException;
 class Tax extends \Magento\Catalog\Model\Product\Attribute\Backend\Price
 {
     /**
-     * @var \Magento\Weee\Model\Resource\Attribute\Backend\Weee\Tax
+     * @var \Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee\Tax
      */
     protected $_attributeTax;
 
@@ -31,7 +31,7 @@ class Tax extends \Magento\Catalog\Model\Product\Attribute\Backend\Price
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
      * @param \Magento\Framework\Locale\FormatInterface $localeFormat
      * @param \Magento\Directory\Helper\Data $directoryHelper
-     * @param \Magento\Weee\Model\Resource\Attribute\Backend\Weee\Tax $attributeTax
+     * @param \Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee\Tax $attributeTax
      */
     public function __construct(
         \Magento\Directory\Model\CurrencyFactory $currencyFactory,
@@ -40,7 +40,7 @@ class Tax extends \Magento\Catalog\Model\Product\Attribute\Backend\Price
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
         \Magento\Framework\Locale\FormatInterface $localeFormat,
         \Magento\Directory\Helper\Data $directoryHelper,
-        \Magento\Weee\Model\Resource\Attribute\Backend\Weee\Tax $attributeTax
+        \Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee\Tax $attributeTax
     ) {
         $this->_directoryHelper = $directoryHelper;
         $this->_storeManager = $storeManager;
diff --git a/app/code/Magento/Weee/Model/Resource/Attribute/Backend/Weee/Tax.php b/app/code/Magento/Weee/Model/ResourceModel/Attribute/Backend/Weee/Tax.php
similarity index 91%
rename from app/code/Magento/Weee/Model/Resource/Attribute/Backend/Weee/Tax.php
rename to app/code/Magento/Weee/Model/ResourceModel/Attribute/Backend/Weee/Tax.php
index 6e0b8775183ed2da83ad27408c4afcfefd7a802c..845876589913c9c5ec8e79131c57953ffae44734 100644
--- a/app/code/Magento/Weee/Model/Resource/Attribute/Backend/Weee/Tax.php
+++ b/app/code/Magento/Weee/Model/ResourceModel/Attribute/Backend/Weee/Tax.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Weee\Model\Resource\Attribute\Backend\Weee;
+namespace Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee;
 
 /**
  * Catalog product WEEE tax backend attribute model
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-class Tax extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Tax extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Store\Model\StoreManagerInterface
@@ -18,12 +18,12 @@ class Tax extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $_storeManager;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Weee/Model/Resource/Tax.php b/app/code/Magento/Weee/Model/ResourceModel/Tax.php
similarity index 93%
rename from app/code/Magento/Weee/Model/Resource/Tax.php
rename to app/code/Magento/Weee/Model/ResourceModel/Tax.php
index a99e44de7e1d4a59fa1e64ccbd8e2b53f5ff5c84..7f16ce3044db7957eec08572e8aeef94480afe73 100644
--- a/app/code/Magento/Weee/Model/Resource/Tax.php
+++ b/app/code/Magento/Weee/Model/ResourceModel/Tax.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Weee\Model\Resource;
+namespace Magento\Weee\Model\ResourceModel;
 
 use Magento\Catalog\Model\Product;
 use Magento\Catalog\Model\Product\Condition\ConditionInterface;
@@ -11,7 +11,7 @@ use Magento\Catalog\Model\Product\Condition\ConditionInterface;
 /**
  * Wee tax resource model
  */
-class Tax extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Tax extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -19,12 +19,12 @@ class Tax extends \Magento\Framework\Model\Resource\Db\AbstractDb
     protected $dateTime;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Weee/Model/Sales/Pdf/Weee.php b/app/code/Magento/Weee/Model/Sales/Pdf/Weee.php
index 47bcfe5fc16d154e65bca3593bc973f5ef3648c3..26b12372fbc96bf400e5b73e5922c1374588f30b 100644
--- a/app/code/Magento/Weee/Model/Sales/Pdf/Weee.php
+++ b/app/code/Magento/Weee/Model/Sales/Pdf/Weee.php
@@ -15,14 +15,14 @@ class Weee extends \Magento\Sales\Model\Order\Pdf\Total\DefaultTotal
     /**
      * @param \Magento\Tax\Helper\Data $taxHelper
      * @param \Magento\Tax\Model\Calculation $taxCalculation
-     * @param \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory
+     * @param \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory $ordersFactory
      * @param \Magento\Weee\Helper\Data $_weeeData
      * @param array $data
      */
     public function __construct(
         \Magento\Tax\Helper\Data $taxHelper,
         \Magento\Tax\Model\Calculation $taxCalculation,
-        \Magento\Tax\Model\Resource\Sales\Order\Tax\CollectionFactory $ordersFactory,
+        \Magento\Tax\Model\ResourceModel\Sales\Order\Tax\CollectionFactory $ordersFactory,
         \Magento\Weee\Helper\Data $_weeeData,
         array $data = []
     ) {
diff --git a/app/code/Magento/Weee/Model/Tax.php b/app/code/Magento/Weee/Model/Tax.php
index 8d51045a88eab1befe4fe749fb67ecd9727376b2..8550915d5a21d2c56d86c019e04c3361418e1ac0 100644
--- a/app/code/Magento/Weee/Model/Tax.php
+++ b/app/code/Magento/Weee/Model/Tax.php
@@ -94,7 +94,7 @@ class Tax extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Customer\Model\Session $customerSession
      * @param AccountManagementInterface $accountManagement
      * @param \Magento\Tax\Helper\Data $taxData
-     * @param Resource\Tax $resource
+     * @param \Magento\Weee\Model\ResourceModel\Tax $resource
      * @param Config $weeeConfig
      * @param PriceCurrencyInterface $priceCurrency
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
@@ -110,7 +110,7 @@ class Tax extends \Magento\Framework\Model\AbstractModel
         \Magento\Customer\Model\Session $customerSession,
         AccountManagementInterface $accountManagement,
         \Magento\Tax\Helper\Data $taxData,
-        \Magento\Weee\Model\Resource\Tax $resource,
+        \Magento\Weee\Model\ResourceModel\Tax $resource,
         \Magento\Weee\Model\Config $weeeConfig,
         PriceCurrencyInterface $priceCurrency,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
@@ -134,7 +134,7 @@ class Tax extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Weee\Model\Resource\Tax');
+        $this->_init('Magento\Weee\Model\ResourceModel\Tax');
     }
 
     /**
diff --git a/app/code/Magento/Weee/Pricing/Adjustment.php b/app/code/Magento/Weee/Pricing/Adjustment.php
index 5beb149957fe51c3ee34d27af49d5159f28d591e..3bd5eb40e7e74b69775c54f6599324d661b8c7f0 100644
--- a/app/code/Magento/Weee/Pricing/Adjustment.php
+++ b/app/code/Magento/Weee/Pricing/Adjustment.php
@@ -8,7 +8,7 @@ namespace Magento\Weee\Pricing;
 
 use Magento\Catalog\Pricing\Price\CustomOptionPriceInterface;
 use Magento\Framework\Pricing\Adjustment\AdjustmentInterface;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\PriceCurrencyInterface;
 use Magento\Tax\Pricing\Adjustment as TaxAdjustment;
 use Magento\Weee\Helper\Data as WeeeHelper;
diff --git a/app/code/Magento/Weee/Test/Unit/Model/Attribute/Backend/Weee/TaxTest.php b/app/code/Magento/Weee/Test/Unit/Model/Attribute/Backend/Weee/TaxTest.php
index 982ab25d288565668c73243dcff2165ceeb821ad..ca0fd3dfaeb685619c068843d71b5f323285159d 100644
--- a/app/code/Magento/Weee/Test/Unit/Model/Attribute/Backend/Weee/TaxTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Model/Attribute/Backend/Weee/TaxTest.php
@@ -85,7 +85,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase
     {
         $data = [['website_id' => 1, 'value' => 1]];
 
-        $attributeTaxMock = $this->getMockBuilder('Magento\Weee\Model\Resource\Attribute\Backend\Weee\Tax')
+        $attributeTaxMock = $this->getMockBuilder('Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee\Tax')
             ->setMethods(['loadProductData'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -143,7 +143,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->method('getData')
             ->will($this->returnValue($currentData));
 
-        $attributeTaxMock = $this->getMockBuilder('Magento\Weee\Model\Resource\Attribute\Backend\Weee\Tax')
+        $attributeTaxMock = $this->getMockBuilder('Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee\Tax')
             ->setMethods(['deleteProductData', 'insertProductData'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -202,7 +202,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase
 
     public function testAfterDelete()
     {
-        $attributeTaxMock = $this->getMockBuilder('Magento\Weee\Model\Resource\Attribute\Backend\Weee\Tax')
+        $attributeTaxMock = $this->getMockBuilder('Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee\Tax')
             ->setMethods(['deleteProductData'])
             ->disableOriginalConstructor()
             ->getMock();
@@ -223,7 +223,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase
 
     public function testGetTable()
     {
-        $attributeTaxMock = $this->getMockBuilder('Magento\Weee\Model\Resource\Attribute\Backend\Weee\Tax')
+        $attributeTaxMock = $this->getMockBuilder('Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee\Tax')
             ->setMethods(['getTable'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/app/code/Magento/Weee/Test/Unit/Model/Resource/Attribute/Backend/Weee/TaxTest.php b/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/Attribute/Backend/Weee/TaxTest.php
similarity index 84%
rename from app/code/Magento/Weee/Test/Unit/Model/Resource/Attribute/Backend/Weee/TaxTest.php
rename to app/code/Magento/Weee/Test/Unit/Model/ResourceModel/Attribute/Backend/Weee/TaxTest.php
index ce197c520781a0be71e1f3a42a87a13c95203611..bd5504115a85e8d5cd05e9451165b21de244f6e8 100644
--- a/app/code/Magento/Weee/Test/Unit/Model/Resource/Attribute/Backend/Weee/TaxTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/Attribute/Backend/Weee/TaxTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Weee\Test\Unit\Model\Resource\Attribute\Backend\Weee;
+namespace Magento\Weee\Test\Unit\Model\ResourceModel\Attribute\Backend\Weee;
 
 class TaxTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Weee\Model\Resource\Attribute\Backend\Weee\Tax
+     * @var \Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee\Tax
      */
     protected $model;
 
@@ -32,7 +32,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase
         $this->storeManagerMock = $this->getMock('\Magento\Store\Model\StoreManagerInterface');
         $this->connectionMock = $this->getMock('\Magento\Framework\DB\Adapter\AdapterInterface');
 
-        $this->resourceMock = $this->getMock('\Magento\Framework\App\Resource', [], [], '', false);
+        $this->resourceMock = $this->getMock('\Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resourceMock->expects($this->once())
             ->method('getConnection')
             ->willReturn($this->connectionMock);
@@ -41,10 +41,10 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->method('getTableName')
             ->willReturn('table_name');
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
 
-        $this->model = new \Magento\Weee\Model\Resource\Attribute\Backend\Weee\Tax(
+        $this->model = new \Magento\Weee\Model\ResourceModel\Attribute\Backend\Weee\Tax(
             $contextMock,
             $this->storeManagerMock
         );
diff --git a/app/code/Magento/Weee/Test/Unit/Model/Resource/TaxTest.php b/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/TaxTest.php
similarity index 93%
rename from app/code/Magento/Weee/Test/Unit/Model/Resource/TaxTest.php
rename to app/code/Magento/Weee/Test/Unit/Model/ResourceModel/TaxTest.php
index 014b2c2ef4b8b76139ec907fb7599673952cbefc..5c1a01ee81ddcf1e270af315f2c82b1b64facbc3 100644
--- a/app/code/Magento/Weee/Test/Unit/Model/Resource/TaxTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Model/ResourceModel/TaxTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Weee\Test\Unit\Model\Resource;
+namespace Magento\Weee\Test\Unit\Model\ResourceModel;
 
 class TaxTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Weee\Model\Resource\Tax
+     * @var \Magento\Weee\Model\ResourceModel\Tax
      */
     protected $model;
 
@@ -45,7 +45,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->willReturn($this->selectMock);
 
-        $this->resourceMock = $this->getMock('\Magento\Framework\App\Resource', [], [], '', false);
+        $this->resourceMock = $this->getMock('\Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->resourceMock->expects($this->any())
             ->method('getConnection')
             ->willReturn($this->connectionMock);
@@ -55,11 +55,11 @@ class TaxTest extends \PHPUnit_Framework_TestCase
             ->method('getTableName')
             ->willReturn('table_name');
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->any())->method('getResources')->willReturn($this->resourceMock);
 
         $this->model = $this->objectManager->getObject(
-            'Magento\Weee\Model\Resource\Tax',
+            'Magento\Weee\Model\ResourceModel\Tax',
             [
                 'context' => $contextMock,
             ]
diff --git a/app/code/Magento/Weee/Test/Unit/Model/TaxTest.php b/app/code/Magento/Weee/Test/Unit/Model/TaxTest.php
index 55c1171a515fcad4eb350a975e046ae0f5be1a8f..b0ccb5e1890e940d897499aa1a8a703e89bdacdf 100644
--- a/app/code/Magento/Weee/Test/Unit/Model/TaxTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Model/TaxTest.php
@@ -128,7 +128,7 @@ class TaxTest extends \PHPUnit_Framework_TestCase
         $className = '\Magento\Tax\Helper\Data';
         $this->taxData = $this->getMock($className, [], [], '', false);
 
-        $className = '\Magento\Weee\Model\Resource\Tax';
+        $className = '\Magento\Weee\Model\ResourceModel\Tax';
         $this->resource = $this->getMock($className, [], [], '', false);
 
         $className = '\Magento\Weee\Model\Config';
diff --git a/app/code/Magento/Weee/Test/Unit/Model/Total/Quote/WeeeTest.php b/app/code/Magento/Weee/Test/Unit/Model/Total/Quote/WeeeTest.php
index 522b1cba2093ecb2bf8c0f15859f986ac5251247..5bbb2b6b1158a036e18d657d7ac4dccbf0fda8f8 100644
--- a/app/code/Magento/Weee/Test/Unit/Model/Total/Quote/WeeeTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Model/Total/Quote/WeeeTest.php
@@ -177,6 +177,7 @@ class WeeeTest extends \PHPUnit_Framework_TestCase
                 '__wakeup',
                 'getAllItems',
                 'getQuote',
+                'getCustomAttributesCodes'
             ],
             [],
             '',
@@ -192,6 +193,7 @@ class WeeeTest extends \PHPUnit_Framework_TestCase
 
         $addressMock->expects($this->any())->method('getAllItems')->will($this->returnValue($items));
         $addressMock->expects($this->any())->method('getQuote')->will($this->returnValue($quoteMock));
+        $addressMock->expects($this->any())->method('getCustomAttributesCodes')->willReturn([]);
 
         return $addressMock;
     }
diff --git a/app/code/Magento/Weee/Test/Unit/Pricing/AdjustmentTest.php b/app/code/Magento/Weee/Test/Unit/Pricing/AdjustmentTest.php
index 8a433e0ff024e0b7b729adf298a4704d09b628ae..e01273afd94a65b0a0abc480d5ab6561d2a4d0ee 100644
--- a/app/code/Magento/Weee/Test/Unit/Pricing/AdjustmentTest.php
+++ b/app/code/Magento/Weee/Test/Unit/Pricing/AdjustmentTest.php
@@ -10,7 +10,7 @@ namespace Magento\Weee\Test\Unit\Pricing;
 
 use \Magento\Weee\Pricing\Adjustment;
 
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Weee\Helper\Data as WeeeHelper;
 
 class AdjustmentTest extends \PHPUnit_Framework_TestCase
@@ -94,7 +94,7 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase
      */
     public function testExtractAdjustment($amount, $expectedResult)
     {
-        $saleableItem = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface');
+        $saleableItem = $this->getMockForAbstractClass('Magento\Framework\Pricing\SaleableInterface');
 
         $this->weeeHelper->expects($this->any())
             ->method('getAmount')
@@ -123,7 +123,7 @@ class AdjustmentTest extends \PHPUnit_Framework_TestCase
      */
     public function testApplyAdjustment($amount, $amountOld, $expectedResult)
     {
-        $object = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface');
+        $object = $this->getMockForAbstractClass('Magento\Framework\Pricing\SaleableInterface');
 
         $this->weeeHelper->expects($this->any())
             ->method('getAmount')
diff --git a/app/code/Magento/Weee/etc/adminhtml/events.xml b/app/code/Magento/Weee/etc/adminhtml/events.xml
index abc20a96a75915690203bf6dbde5f46a7ee620d6..934f41d64798ca0ad6cef2b0def42191e91afa0f 100644
--- a/app/code/Magento/Weee/etc/adminhtml/events.xml
+++ b/app/code/Magento/Weee/etc/adminhtml/events.xml
@@ -7,15 +7,15 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="adminhtml_catalog_product_edit_prepare_form">
-        <observer name="weee" instance="Magento\Weee\Observer\SetWeeeRendererInFormObserver" method="execute" />
+        <observer name="weee" instance="Magento\Weee\Observer\SetWeeeRendererInFormObserver" />
     </event>
     <event name="adminhtml_catalog_product_form_prepare_excluded_field_list">
-        <observer name="weee" instance="Magento\Weee\Observer\UpdateExcludedFieldListObserver" method="execute" />
+        <observer name="weee" instance="Magento\Weee\Observer\UpdateExcludedFieldListObserver" />
     </event>
     <event name="adminhtml_product_attribute_types">
-        <observer name="weee" instance="Magento\Weee\Observer\AddWeeeTaxAttributeTypeObserver" method="execute" />
+        <observer name="weee" instance="Magento\Weee\Observer\AddWeeeTaxAttributeTypeObserver" />
     </event>
     <event name="adminhtml_catalog_product_edit_element_types">
-        <observer name="weee" instance="Magento\Weee\Observer\UpdateElementTypesObserver" method="execute" />
+        <observer name="weee" instance="Magento\Weee\Observer\UpdateElementTypesObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Weee/etc/events.xml b/app/code/Magento/Weee/etc/events.xml
index 8fb0c3e6226f31121cbaed6ea458b8dfab59431c..09533bc957bedd01384984a10f8b143751a795aa 100644
--- a/app/code/Magento/Weee/etc/events.xml
+++ b/app/code/Magento/Weee/etc/events.xml
@@ -7,12 +7,12 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="catalog_entity_attribute_save_before">
-        <observer name="weee" instance="Magento\Weee\Observer\AssignBackendModelToAttributeObserver" method="execute" />
+        <observer name="weee" instance="Magento\Weee\Observer\AssignBackendModelToAttributeObserver" />
     </event>
     <event name="catalog_product_option_price_configuration_after">
-        <observer name="weee" instance="Magento\Weee\Observer\GetPriceConfigurationObserver" method="execute"/>
+        <observer name="weee" instance="Magento\Weee\Observer\GetPriceConfigurationObserver"/>
     </event>
     <event name="catalog_product_view_config">
-        <observer name="weee" instance="Magento\Weee\Observer\UpdateProductOptionsObserver" method="execute" />
+        <observer name="weee" instance="Magento\Weee\Observer\UpdateProductOptionsObserver" />
     </event>
 </config>
diff --git a/app/code/Magento/Weee/etc/frontend/events.xml b/app/code/Magento/Weee/etc/frontend/events.xml
index 535266b2e23829da958b895b49e868907737d48d..bac8ef8144f5b33dfc4efef4d1dcb753b03fffd2 100644
--- a/app/code/Magento/Weee/etc/frontend/events.xml
+++ b/app/code/Magento/Weee/etc/frontend/events.xml
@@ -8,9 +8,9 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="customer_data_object_login">
-        <observer name="customer_weee_logged_in" instance="Magento\Weee\Observer\CustomerLoggedIn" method="execute" />
+        <observer name="customer_weee_logged_in" instance="Magento\Weee\Observer\CustomerLoggedIn" />
     </event>
     <event name="customer_address_save_after">
-        <observer name="customer_weee_after_address_save" instance="Magento\Weee\Observer\AfterAddressSave" method="execute" />
+        <observer name="customer_weee_after_address_save" instance="Magento\Weee\Observer\AfterAddressSave" />
     </event>
 </config>
diff --git a/app/code/Magento/Weee/etc/webapi_rest/events.xml b/app/code/Magento/Weee/etc/webapi_rest/events.xml
index 6e8e13ba37ad070807fe9a7a07e95dd1bcc8256e..6e3ef686537bb35f645010c460bd1b65d58086f4 100644
--- a/app/code/Magento/Weee/etc/webapi_rest/events.xml
+++ b/app/code/Magento/Weee/etc/webapi_rest/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="items_additional_data">
-        <observer name="processTaxData" instance="Magento\Weee\Observer\Total\Webapi\ItemObserver" method="execute" />
+        <observer name="processTaxData" instance="Magento\Weee\Observer\Total\Webapi\ItemObserver" />
     </event>
 </config>
\ No newline at end of file
diff --git a/app/code/Magento/Weee/etc/webapi_soap/events.xml b/app/code/Magento/Weee/etc/webapi_soap/events.xml
index 6e8e13ba37ad070807fe9a7a07e95dd1bcc8256e..6e3ef686537bb35f645010c460bd1b65d58086f4 100644
--- a/app/code/Magento/Weee/etc/webapi_soap/events.xml
+++ b/app/code/Magento/Weee/etc/webapi_soap/events.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="items_additional_data">
-        <observer name="processTaxData" instance="Magento\Weee\Observer\Total\Webapi\ItemObserver" method="execute" />
+        <observer name="processTaxData" instance="Magento\Weee\Observer\Total\Webapi\ItemObserver" />
     </event>
 </config>
\ No newline at end of file
diff --git a/app/code/Magento/Weee/view/frontend/web/template/checkout/summary/item/price/row_incl_tax.html b/app/code/Magento/Weee/view/frontend/web/template/checkout/summary/item/price/row_incl_tax.html
index c66a2061bf611228340de443e23a4c904cba77fc..5440f141bcb14415c74c16b242263ec1224a3c22 100644
--- a/app/code/Magento/Weee/view/frontend/web/template/checkout/summary/item/price/row_incl_tax.html
+++ b/app/code/Magento/Weee/view/frontend/web/template/checkout/summary/item/price/row_incl_tax.html
@@ -9,29 +9,33 @@
         <span class="price" data-bind="text: getFormattedPrice(getRowDisplayPriceInclTax($parents[2]))"></span>
     </span>
 <!-- /ko -->
+
 <!-- ko ifnot: (isDisplayPriceWithWeeeDetails($parents[2])) -->
-<span class="cart-price"><span class="price" data-bind="text: getFormattedPrice(getRowDisplayPriceInclTax($parents[2]))"></span></span>
+    <span class="cart-price">
+        <span class="price" data-bind="text: getFormattedPrice(getRowDisplayPriceInclTax($parents[2]))"></span>
+    </span>
 <!-- /ko -->
 
 <!--ko if:  (getWeeeTaxApplied($parents[2]).length > 0)-->
-<!-- ko ifnot:  (isDisplayPriceWithWeeeDetails($parents[2])) -->
-<span class="cart-tax-info" data-bind ="attr: {'id': 'subtotal-item-tax-details' + $parents[2].item_id}" style="display: none;"></span>
-<!-- /ko -->
-<!-- ko if:  (isDisplayPriceWithWeeeDetails($parents[2])) -->
-<span class="cart-tax-info" data-bind ="attr: {'id': 'subtotal-item-tax-details' + $parents[2].item_id}" style="display: none;">
+    <!-- ko ifnot:  (isDisplayPriceWithWeeeDetails($parents[2])) -->
+        <span class="cart-tax-info" data-bind ="attr: {'id': 'subtotal-item-tax-details' + $parents[2].item_id}" style="display: none;"></span>
+    <!-- /ko -->
+
+    <!-- ko if:  (isDisplayPriceWithWeeeDetails($parents[2])) -->
+    <span class="cart-tax-info" data-bind ="attr: {'id': 'subtotal-item-tax-details' + $parents[2].item_id}" style="display: none;">
          <!-- ko foreach: getWeeeTaxApplied($parents[2]) -->
             <span class="weee" data-bind="attr:{'data-label':title}">
                 <span class="price" data-bind="text: $parent.getFormattedPrice(row_amount_incl_tax)"></span>
             </span>
          <!-- /ko -->
-        </span>
-<!-- /ko -->
+    </span>
+    <!-- /ko -->
 
-<!-- ko if: isDisplayFinalPrice($parents[2]) -->
-<span class="cart-tax-total" data-bind="mageInit: {taxToggle: {itemTaxId : '#subtotal-item-tax-details'+$parents[2].item_id}}">
-            <span class="weee" data-bind="attr: {'data-label':$t('Total incl. tax')}">
-                <span class="price" data-bind="text: getFormattedPrice(getFinalRowDisplayPriceInclTax($parents[2]))"></span>
-            </span>
+    <!-- ko if: isDisplayFinalPrice($parents[2]) -->
+    <span class="cart-tax-total" data-bind="mageInit: {taxToggle: {itemTaxId : '#subtotal-item-tax-details'+$parents[2].item_id}}">
+        <span class="weee" data-bind="attr: {'data-label':$t('Total incl. tax')}">
+            <span class="price" data-bind="text: getFormattedPrice(getFinalRowDisplayPriceInclTax($parents[2]))"></span>
         </span>
-<!-- /ko -->
+    </span>
+    <!-- /ko -->
 <!-- /ko -->
diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget.php b/app/code/Magento/Widget/Block/Adminhtml/Widget.php
index cd9e5b51a8a7797c2473d4cc673e759612b5e22f..02616f558f096393121efe59774d631a86fb8779 100644
--- a/app/code/Magento/Widget/Block/Adminhtml/Widget.php
+++ b/app/code/Magento/Widget/Block/Adminhtml/Widget.php
@@ -29,7 +29,7 @@ class Widget extends \Magento\Backend\Block\Widget\Form\Container
 
         $this->removeButton('reset');
         $this->removeButton('back');
-        $this->buttonList->update('save', 'label', __('Insert Frontend App'));
+        $this->buttonList->update('save', 'label', __('Insert Widget'));
         $this->buttonList->update('save', 'class', 'action-primary add-widget');
         $this->buttonList->update('save', 'id', 'insert_button');
         $this->buttonList->update('save', 'onclick', 'wWidget.insertWidget()');
diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget/Form.php b/app/code/Magento/Widget/Block/Adminhtml/Widget/Form.php
index df16e1a46a5074278f96ebba407d70d660d5aaee..1cc0ff6ca5ea6f7f5c4ba08035757bb94918ed44 100644
--- a/app/code/Magento/Widget/Block/Adminhtml/Widget/Form.php
+++ b/app/code/Magento/Widget/Block/Adminhtml/Widget/Form.php
@@ -46,14 +46,14 @@ class Form extends \Magento\Backend\Block\Widget\Form\Generic
         /** @var \Magento\Framework\Data\Form $form */
         $form = $this->_formFactory->create();
 
-        $fieldset = $form->addFieldset('base_fieldset', ['legend' => __('Frontend App')]);
+        $fieldset = $form->addFieldset('base_fieldset', ['legend' => __('Widget')]);
 
         $fieldset->addField(
             'select_widget_type',
             'select',
             [
-                'label' => __('Frontend App Type'),
-                'title' => __('Frontend App Type'),
+                'label' => __('Widget Type'),
+                'title' => __('Widget Type'),
                 'name' => 'widget_type',
                 'required' => true,
                 'onchange' => "wWidget.validateField()",
diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance.php b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance.php
index 1883abb4a176836af219393d22121463c2995852..7358db67d7c537e477992c7b6ac0187bacf877ef 100644
--- a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance.php
+++ b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance.php
@@ -24,6 +24,6 @@ class Instance extends \Magento\Backend\Block\Widget\Grid\Container
         $this->_controller = 'adminhtml_widget_instance';
         $this->_headerText = __('Manage Widget Instances');
         parent::_construct();
-        $this->buttonList->update('add', 'label', __('Add Frontend App'));
+        $this->buttonList->update('add', 'label', __('Add Widget'));
     }
 }
diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/Container.php b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/Container.php
index 2a56d336ef8ab1fd7614e15d54eef3c796f0438f..d0b6e6e338c1a1f31ea3f969a3809c95690d4394 100644
--- a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/Container.php
+++ b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/Container.php
@@ -30,20 +30,20 @@ class Container extends \Magento\Framework\View\Element\Html\Select
     protected $_layoutProcessorFactory;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\CollectionFactory
+     * @var \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory
      */
     protected $_themesFactory;
 
     /**
      * @param \Magento\Framework\View\Element\Context $context
      * @param \Magento\Framework\View\Layout\ProcessorFactory $layoutProcessorFactory
-     * @param \Magento\Theme\Model\Resource\Theme\CollectionFactory $themesFactory
+     * @param \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory $themesFactory
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Context $context,
         \Magento\Framework\View\Layout\ProcessorFactory $layoutProcessorFactory,
-        \Magento\Theme\Model\Resource\Theme\CollectionFactory $themesFactory,
+        \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory $themesFactory,
         array $data = []
     ) {
         $this->_layoutProcessorFactory = $layoutProcessorFactory;
@@ -114,7 +114,7 @@ class Container extends \Magento\Framework\View\Element\Html\Select
      */
     protected function _getThemeInstance($themeId)
     {
-        /** @var \Magento\Theme\Model\Resource\Theme\Collection $themeCollection */
+        /** @var \Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection */
         $themeCollection = $this->_themesFactory->create();
         return $themeCollection->getItemById($themeId);
     }
diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/DesignAbstraction.php b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/DesignAbstraction.php
index 62e01e5cf2d3b81ab55760cf090f4f3604167e76..5e7237b87dea8b05df2e727018f52afe14320317 100644
--- a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/DesignAbstraction.php
+++ b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/DesignAbstraction.php
@@ -19,7 +19,7 @@ class DesignAbstraction extends \Magento\Framework\View\Element\Html\Select
     protected $_layoutProcessorFactory;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\CollectionFactory
+     * @var \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory
      */
     protected $_themesFactory;
 
@@ -31,14 +31,14 @@ class DesignAbstraction extends \Magento\Framework\View\Element\Html\Select
     /**
      * @param \Magento\Framework\View\Element\Context $context
      * @param \Magento\Framework\View\Layout\ProcessorFactory $layoutProcessorFactory
-     * @param \Magento\Theme\Model\Resource\Theme\CollectionFactory $themesFactory
+     * @param \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory $themesFactory
      * @param \Magento\Framework\App\State $appState
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\View\Element\Context $context,
         \Magento\Framework\View\Layout\ProcessorFactory $layoutProcessorFactory,
-        \Magento\Theme\Model\Resource\Theme\CollectionFactory $themesFactory,
+        \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory $themesFactory,
         \Magento\Framework\App\State $appState,
         array $data = []
     ) {
@@ -75,7 +75,7 @@ class DesignAbstraction extends \Magento\Framework\View\Element\Html\Select
      */
     protected function _getThemeInstance($themeId)
     {
-        /** @var \Magento\Theme\Model\Resource\Theme\Collection $themeCollection */
+        /** @var \Magento\Theme\Model\ResourceModel\Theme\Collection $themeCollection */
         $themeCollection = $this->_themesFactory->create();
         return $themeCollection->getItemById($themeId);
     }
diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Main.php b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Main.php
index f154ee4386ca1df6926ad93657d4ca46bf4d625e..9b9f78ca2c20d9c9d9e1f959124c122585f349d3 100644
--- a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Main.php
+++ b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Main.php
@@ -162,8 +162,8 @@ class Main extends \Magento\Backend\Block\Widget\Form\Generic implements \Magent
             'text',
             [
                 'name' => 'title',
-                'label' => __('Frontend App Title'),
-                'title' => __('Frontend App Title'),
+                'label' => __('Widget Title'),
+                'title' => __('Widget Title'),
                 'class' => '',
                 'required' => true
             ]
diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Properties.php b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Properties.php
index 5712fc02c88a4d1dbd02ef08ac704362fa7bcfb4..80b91ea45099867148cda1f17ed80cb423d79db9 100644
--- a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Properties.php
+++ b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tab/Properties.php
@@ -33,7 +33,7 @@ class Properties extends \Magento\Widget\Block\Adminhtml\Widget\Options implemen
      */
     public function getTabLabel()
     {
-        return __('Frontend App Options');
+        return __('Widget Options');
     }
 
     /**
@@ -43,7 +43,7 @@ class Properties extends \Magento\Widget\Block\Adminhtml\Widget\Options implemen
      */
     public function getTabTitle()
     {
-        return __('Frontend App Options');
+        return __('Widget Options');
     }
 
     /**
diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tabs.php b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tabs.php
index 4dbc2dc0535fa05415d6f17ca40873d2716bef27..2b3bb15c477826c85f7c13511565a9f5295c8883 100644
--- a/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tabs.php
+++ b/app/code/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Tabs.php
@@ -23,6 +23,6 @@ class Tabs extends \Magento\Backend\Block\Widget\Tabs
         parent::_construct();
         $this->setId('widget_instace_tabs');
         $this->setDestElementId('edit_form');
-        $this->setTitle(__('Frontend App'));
+        $this->setTitle(__('Widget'));
     }
 }
diff --git a/app/code/Magento/Widget/Block/Adminhtml/Widget/Options.php b/app/code/Magento/Widget/Block/Adminhtml/Widget/Options.php
index ee8b79d2f21e5890d46fce7310067ae92d1fa4c0..d0fa287681e1936d6a0879a484493785a0918b95 100644
--- a/app/code/Magento/Widget/Block/Adminhtml/Widget/Options.php
+++ b/app/code/Magento/Widget/Block/Adminhtml/Widget/Options.php
@@ -95,7 +95,7 @@ class Options extends \Magento\Backend\Block\Widget\Form\Generic
         $this->setMainFieldsetHtmlId($mainFieldsetHtmlId);
         $fieldset = $this->getForm()->addFieldset(
             $mainFieldsetHtmlId,
-            ['legend' => __('Frontend App Options'), 'class' => 'fieldset-wide']
+            ['legend' => __('Widget Options'), 'class' => 'fieldset-wide']
         );
         $this->setData('main_fieldset', $fieldset);
 
@@ -116,7 +116,7 @@ class Options extends \Magento\Backend\Block\Widget\Form\Generic
     {
         // get configuration node and translation helper
         if (!$this->getWidgetType()) {
-            throw new \Magento\Framework\Exception\LocalizedException(__('Please specify a Frontend App Type.'));
+            throw new \Magento\Framework\Exception\LocalizedException(__('Please specify a Widget Type.'));
         }
         $config = $this->_widget->getConfigAsObject($this->getWidgetType());
         if (!$config->getParameters()) {
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Edit.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Edit.php
index 3db931cdf75865582b07e7224c573069dc46079c..978680baa01c24c481043aa1aa458315160bd723 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Edit.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Edit.php
@@ -23,9 +23,9 @@ class Edit extends \Magento\Widget\Controller\Adminhtml\Widget\Instance
 
         $this->_initAction();
         $this->_view->getPage()->getConfig()->getTitle()->prepend(
-            $widgetInstance->getId() ? $widgetInstance->getTitle() : __('New Frontend App Instance')
+            $widgetInstance->getId() ? $widgetInstance->getTitle() : __('New Widget')
         );
-        $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Frontend Apps'));
+        $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Widgets'));
         $this->_view->renderLayout();
     }
 }
diff --git a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Index.php b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Index.php
index dbe936809cf7bc0aafc6db9c04a688f51023163d..704730f02c5afeb5c171d28a11d13445da771151 100644
--- a/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Index.php
+++ b/app/code/Magento/Widget/Controller/Adminhtml/Widget/Instance/Index.php
@@ -16,7 +16,7 @@ class Index extends \Magento\Widget\Controller\Adminhtml\Widget\Instance
     public function execute()
     {
         $this->_initAction();
-        $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Frontend Apps'));
+        $this->_view->getPage()->getConfig()->getTitle()->prepend(__('Widgets'));
         $this->_view->renderLayout();
     }
 }
diff --git a/app/code/Magento/Widget/Model/Layout/Link.php b/app/code/Magento/Widget/Model/Layout/Link.php
index 7c93d913fa0a6a7afd42a5a787f569c29e997f2f..bb49872b8e2cdfbdf891444ae713717506234d8a 100644
--- a/app/code/Magento/Widget/Model/Layout/Link.php
+++ b/app/code/Magento/Widget/Model/Layout/Link.php
@@ -24,6 +24,6 @@ class Link extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Widget\Model\Resource\Layout\Link');
+        $this->_init('Magento\Widget\Model\ResourceModel\Layout\Link');
     }
 }
diff --git a/app/code/Magento/Widget/Model/Layout/Update.php b/app/code/Magento/Widget/Model/Layout/Update.php
index 4e65a10c16dcd7c9005b593e109d44560c3eacb7..09c322dc7d0d30af4452e50c481c147c0aaeb095 100644
--- a/app/code/Magento/Widget/Model/Layout/Update.php
+++ b/app/code/Magento/Widget/Model/Layout/Update.php
@@ -18,7 +18,7 @@ namespace Magento\Widget\Model\Layout;
  * @method \Magento\Widget\Model\Layout\Update setStoreId() setStoreId(int $storeId)
  * @method \Magento\Widget\Model\Layout\Update setThemeId() setThemeId(int $themeId)
  * @method \Magento\Widget\Model\Layout\Update setUpdatedAt() setUpdatedAt(string $updateDateTime)
- * @method \Magento\Widget\Model\Resource\Layout\Update\Collection getCollection()
+ * @method \Magento\Widget\Model\ResourceModel\Layout\Update\Collection getCollection()
  */
 class Update extends \Magento\Framework\Model\AbstractModel
 {
@@ -31,7 +31,7 @@ class Update extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -39,7 +39,7 @@ class Update extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Stdlib\DateTime $dateTime,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -54,7 +54,7 @@ class Update extends \Magento\Framework\Model\AbstractModel
      */
     protected function _construct()
     {
-        $this->_init('Magento\Widget\Model\Resource\Layout\Update');
+        $this->_init('Magento\Widget\Model\ResourceModel\Layout\Update');
     }
 
     /**
diff --git a/app/code/Magento/Widget/Model/Resource/Layout/Link.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Link.php
similarity index 71%
rename from app/code/Magento/Widget/Model/Resource/Layout/Link.php
rename to app/code/Magento/Widget/Model/ResourceModel/Layout/Link.php
index c8bd107d58d0f2281d26c37c6f70c8beb592ac5b..1485f11b3af89bb6a5b08c1152a5211d284495e1 100644
--- a/app/code/Magento/Widget/Model/Resource/Layout/Link.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Link.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Widget\Model\Resource\Layout;
+namespace Magento\Widget\Model\ResourceModel\Layout;
 
 /**
  * Layout Link resource model
  */
-class Link extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Link extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Widget/Model/Resource/Layout/Link/Collection.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Link/Collection.php
similarity index 90%
rename from app/code/Magento/Widget/Model/Resource/Layout/Link/Collection.php
rename to app/code/Magento/Widget/Model/ResourceModel/Layout/Link/Collection.php
index 1c5fb7e783b3111cba49d1bf077d55a9e8d59d19..91398f395d5384e9bfb45e32a6ced36806bc66fc 100644
--- a/app/code/Magento/Widget/Model/Resource/Layout/Link/Collection.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Link/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Widget\Model\Resource\Layout\Link;
+namespace Magento\Widget\Model\ResourceModel\Layout\Link;
 
 /**
  * Layout update collection model
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -21,7 +21,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @param \Magento\Framework\Data\Collection\EntityFactory $entityFactory
      */
     public function __construct(
@@ -31,7 +31,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->dateTime = $dateTime;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
@@ -45,7 +45,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\Widget\Model\Layout\Link', 'Magento\Widget\Model\Resource\Layout\Link');
+        $this->_init('Magento\Widget\Model\Layout\Link', 'Magento\Widget\Model\ResourceModel\Layout\Link');
     }
 
     /**
diff --git a/app/code/Magento/Widget/Model/Resource/Layout/Plugin.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Plugin.php
similarity index 63%
rename from app/code/Magento/Widget/Model/Resource/Layout/Plugin.php
rename to app/code/Magento/Widget/Model/ResourceModel/Layout/Plugin.php
index 64595658c41464646f614be827f0a55f8e2ee7e2..4a0f656da4465c0992e54aa00af55506b67f53ba 100644
--- a/app/code/Magento/Widget/Model/Resource/Layout/Plugin.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Plugin.php
@@ -3,35 +3,25 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Widget\Model\Resource\Layout;
+namespace Magento\Widget\Model\ResourceModel\Layout;
 
 /**
  * Class Plugin
  *
- * @package Magento\Widget\Model\Resource\Layout
+ * @package Magento\Widget\Model\ResourceModel\Layout
  */
 class Plugin
 {
     /**
-     * @var \Magento\Widget\Model\Resource\Layout\Update
+     * @var \Magento\Widget\Model\ResourceModel\Layout\Update
      */
     private $update;
 
     /**
-     * @var \Magento\Framework\View\Design\ThemeInterface
-     */
-    private $theme;
-
-    /**
-     * @var \Magento\Framework\App\ScopeInterface
-     */
-    private $store;
-
-    /**
-     * @param \Magento\Widget\Model\Resource\Layout\Update $update
+     * @param \Magento\Widget\Model\ResourceModel\Layout\Update $update
      */
     public function __construct(
-        \Magento\Widget\Model\Resource\Layout\Update $update
+        \Magento\Widget\Model\ResourceModel\Layout\Update $update
     ) {
         $this->update = $update;
     }
@@ -52,4 +42,4 @@ class Plugin
     ) {
         return $this->update->fetchUpdatesByHandle($handle, $subject->getTheme(), $subject->getScope());
     }
-} 
\ No newline at end of file
+}
diff --git a/app/code/Magento/Widget/Model/Resource/Layout/Update.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Update.php
similarity index 93%
rename from app/code/Magento/Widget/Model/Resource/Layout/Update.php
rename to app/code/Magento/Widget/Model/ResourceModel/Layout/Update.php
index c5df63424b3d931e7a66979b53136c65029e2b9e..11e3f414ca553394a983801ac69afe740d542563 100644
--- a/app/code/Magento/Widget/Model/Resource/Layout/Update.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Update.php
@@ -6,12 +6,12 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Widget\Model\Resource\Layout;
+namespace Magento\Widget\Model\ResourceModel\Layout;
 
 /**
  * Layout update resource model
  */
-class Update extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Update extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var \Magento\Framework\Cache\FrontendInterface
@@ -19,12 +19,12 @@ class Update extends \Magento\Framework\Model\Resource\Db\AbstractDb
     private $_cache;
 
     /**
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param \Magento\Framework\Cache\FrontendInterface $cache
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         \Magento\Framework\Cache\FrontendInterface $cache,
         $connectionName = null
     ) {
diff --git a/app/code/Magento/Widget/Model/Resource/Layout/Update/Collection.php b/app/code/Magento/Widget/Model/ResourceModel/Layout/Update/Collection.php
similarity index 92%
rename from app/code/Magento/Widget/Model/Resource/Layout/Update/Collection.php
rename to app/code/Magento/Widget/Model/ResourceModel/Layout/Update/Collection.php
index 26d1e576058f9a3646690648f633eb44eccdb9a4..f90e32416a5e5139d71dadc0a5b37b555aa96c56 100644
--- a/app/code/Magento/Widget/Model/Resource/Layout/Update/Collection.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Layout/Update/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Widget\Model\Resource\Layout\Update;
+namespace Magento\Widget\Model\ResourceModel\Layout\Update;
 
 /**
  * Layout update collection model
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var \Magento\Framework\Stdlib\DateTime
@@ -36,7 +36,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\Stdlib\DateTime $dateTime
      * @param mixed $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
@@ -45,7 +45,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\Stdlib\DateTime $dateTime,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->dateTime = $dateTime;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $eventManager, $connection, $resource);
@@ -59,7 +59,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\Widget\Model\Layout\Update', 'Magento\Widget\Model\Resource\Layout\Update');
+        $this->_init('Magento\Widget\Model\Layout\Update', 'Magento\Widget\Model\ResourceModel\Layout\Update');
     }
 
     /**
diff --git a/app/code/Magento/Widget/Model/Resource/Widget.php b/app/code/Magento/Widget/Model/ResourceModel/Widget.php
similarity index 90%
rename from app/code/Magento/Widget/Model/Resource/Widget.php
rename to app/code/Magento/Widget/Model/ResourceModel/Widget.php
index e4b6bf1566969a55b0f37f02f12d4fbbfc79a2e3..f6e376e91cbdcca04c00b0efa5c4f4719b56b5e0 100644
--- a/app/code/Magento/Widget/Model/Resource/Widget.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Widget.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Widget\Model\Resource;
+namespace Magento\Widget\Model\ResourceModel;
 
-class Widget extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Widget extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Widget/Model/Resource/Widget/Instance.php b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance.php
similarity index 98%
rename from app/code/Magento/Widget/Model/Resource/Widget/Instance.php
rename to app/code/Magento/Widget/Model/ResourceModel/Widget/Instance.php
index 1128ec31f197fe8f11141d1fb541a4c9664325f9..6277ad2e528d5a3a4b05373384352cad20110f45 100644
--- a/app/code/Magento/Widget/Model/Resource/Widget/Instance.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance.php
@@ -9,11 +9,11 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Widget\Model\Resource\Widget;
+namespace Magento\Widget\Model\ResourceModel\Widget;
 
 use Magento\Framework\Model\AbstractModel;
 
-class Instance extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Instance extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/app/code/Magento/Widget/Model/Resource/Widget/Instance/Collection.php b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Collection.php
similarity index 85%
rename from app/code/Magento/Widget/Model/Resource/Widget/Instance/Collection.php
rename to app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Collection.php
index 5f3f0ebe24cdf47440e04a8a7c45b03874400cbe..4ed2b8ba087bea10a639959e72f6f48c1c104c60 100644
--- a/app/code/Magento/Widget/Model/Resource/Widget/Instance/Collection.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Widget\Model\Resource\Widget\Instance;
+namespace Magento\Widget\Model\ResourceModel\Widget\Instance;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Fields map for corellation names & real selected fields
@@ -28,7 +28,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\Widget\Model\Widget\Instance', 'Magento\Widget\Model\Resource\Widget\Instance');
+        $this->_init('Magento\Widget\Model\Widget\Instance', 'Magento\Widget\Model\ResourceModel\Widget\Instance');
     }
 
     /**
diff --git a/app/code/Magento/Widget/Model/Resource/Widget/Instance/Options/ThemeId.php b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Options/ThemeId.php
similarity index 69%
rename from app/code/Magento/Widget/Model/Resource/Widget/Instance/Options/ThemeId.php
rename to app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Options/ThemeId.php
index 7f06fb9414ac182490e5c2025235b36bbc0f2b80..2fe33f8e54b104fac5eaf165585a63240fc3f637 100644
--- a/app/code/Magento/Widget/Model/Resource/Widget/Instance/Options/ThemeId.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Options/ThemeId.php
@@ -8,7 +8,7 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Widget\Model\Resource\Widget\Instance\Options;
+namespace Magento\Widget\Model\ResourceModel\Widget\Instance\Options;
 
 class ThemeId implements \Magento\Framework\Option\ArrayInterface
 {
@@ -18,9 +18,9 @@ class ThemeId implements \Magento\Framework\Option\ArrayInterface
     protected $_resourceModel;
 
     /**
-     * @param \Magento\Theme\Model\Resource\Theme\Collection $widgetResourceModel
+     * @param \Magento\Theme\Model\ResourceModel\Theme\Collection $widgetResourceModel
      */
-    public function __construct(\Magento\Theme\Model\Resource\Theme\Collection $widgetResourceModel)
+    public function __construct(\Magento\Theme\Model\ResourceModel\Theme\Collection $widgetResourceModel)
     {
         $this->_resourceModel = $widgetResourceModel;
     }
diff --git a/app/code/Magento/Widget/Model/Resource/Widget/Instance/Options/Types.php b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Options/Types.php
similarity index 93%
rename from app/code/Magento/Widget/Model/Resource/Widget/Instance/Options/Types.php
rename to app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Options/Types.php
index 8231cfed2875567087b78ba1c3a5ab7a0490cd71..5c7976ae628b34131ba972bba9a88fb52b127417 100644
--- a/app/code/Magento/Widget/Model/Resource/Widget/Instance/Options/Types.php
+++ b/app/code/Magento/Widget/Model/ResourceModel/Widget/Instance/Options/Types.php
@@ -8,7 +8,7 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Widget\Model\Resource\Widget\Instance\Options;
+namespace Magento\Widget\Model\ResourceModel\Widget\Instance\Options;
 
 class Types implements \Magento\Framework\Option\ArrayInterface
 {
diff --git a/app/code/Magento/Widget/Model/Template/Filter.php b/app/code/Magento/Widget/Model/Template/Filter.php
index ea49425318740cf2266a43aeed4f0eb9c6904a00..97a63c167fcbb8a2a5b6b8fdb4363bbb905b6658 100644
--- a/app/code/Magento/Widget/Model/Template/Filter.php
+++ b/app/code/Magento/Widget/Model/Template/Filter.php
@@ -12,7 +12,7 @@ namespace Magento\Widget\Model\Template;
 class Filter extends \Magento\Cms\Model\Template\Filter
 {
     /**
-     * @var \Magento\Widget\Model\Resource\Widget
+     * @var \Magento\Widget\Model\ResourceModel\Widget
      */
     protected $_widgetResource;
 
@@ -35,7 +35,7 @@ class Filter extends \Magento\Cms\Model\Template\Filter
      * @param \Magento\Framework\UrlInterface $urlModel
      * @param \Pelago\Emogrifier $emogrifier
      * @param \Magento\Email\Model\Source\Variables $configVariables
-     * @param \Magento\Widget\Model\Resource\Widget $widgetResource
+     * @param \Magento\Widget\Model\ResourceModel\Widget $widgetResource
      * @param \Magento\Widget\Model\Widget $widget
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
      */
@@ -53,7 +53,7 @@ class Filter extends \Magento\Cms\Model\Template\Filter
         \Magento\Framework\UrlInterface $urlModel,
         \Pelago\Emogrifier $emogrifier,
         \Magento\Email\Model\Source\Variables $configVariables,
-        \Magento\Widget\Model\Resource\Widget $widgetResource,
+        \Magento\Widget\Model\ResourceModel\Widget $widgetResource,
         \Magento\Widget\Model\Widget $widget
     ) {
         $this->_widgetResource = $widgetResource;
diff --git a/app/code/Magento/Widget/Model/Widget/Instance.php b/app/code/Magento/Widget/Model/Widget/Instance.php
index bc619ce9996912efb6c2ea15494b455026f8d731..7bccc0812d1e7ff79a573e31600a46fd9a269430 100644
--- a/app/code/Magento/Widget/Model/Widget/Instance.php
+++ b/app/code/Magento/Widget/Model/Widget/Instance.php
@@ -120,7 +120,7 @@ class Instance extends \Magento\Framework\Model\AbstractModel
      * @param \Magento\Framework\Math\Random $mathRandom
      * @param \Magento\Framework\Filesystem $filesystem
      * @param \Magento\Widget\Helper\Conditions $conditionsHelper
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $relatedCacheTypes
      * @param array $data
@@ -139,7 +139,7 @@ class Instance extends \Magento\Framework\Model\AbstractModel
         \Magento\Framework\Math\Random $mathRandom,
         \Magento\Framework\Filesystem $filesystem,
         \Magento\Widget\Helper\Conditions $conditionsHelper,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $relatedCacheTypes = [],
         array $data = []
@@ -166,7 +166,7 @@ class Instance extends \Magento\Framework\Model\AbstractModel
     protected function _construct()
     {
         parent::_construct();
-        $this->_init('Magento\Widget\Model\Resource\Widget\Instance');
+        $this->_init('Magento\Widget\Model\ResourceModel\Widget\Instance');
         $this->_layoutHandles = [
             'anchor_categories' => self::ANCHOR_CATEGORY_LAYOUT_HANDLE,
             'notanchor_categories' => self::NOTANCHOR_CATEGORY_LAYOUT_HANDLE,
diff --git a/app/code/Magento/Widget/Test/Unit/Block/Adminhtml/Widget/Catalog/Category/ChooserTest.php b/app/code/Magento/Widget/Test/Unit/Block/Adminhtml/Widget/Catalog/Category/ChooserTest.php
index 6f0f005c25fafaa4782affb7b87af27cc4765cbf..98a628c430acc719e0d1336f9e72819c6e3db510 100644
--- a/app/code/Magento/Widget/Test/Unit/Block/Adminhtml/Widget/Catalog/Category/ChooserTest.php
+++ b/app/code/Magento/Widget/Test/Unit/Block/Adminhtml/Widget/Catalog/Category/ChooserTest.php
@@ -9,7 +9,7 @@ namespace Magento\Widget\Test\Unit\Block\Adminhtml\Widget\Catalog\Category;
 class ChooserTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collection;
 
@@ -24,7 +24,7 @@ class ChooserTest extends \PHPUnit_Framework_TestCase
     protected $rootNode;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Category\Tree|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Category\Tree|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $categoryTree;
 
@@ -60,7 +60,13 @@ class ChooserTest extends \PHPUnit_Framework_TestCase
 
     public function setUp()
     {
-        $this->collection = $this->getMock('Magento\Catalog\Model\Resource\Category\Collection', [], [], '', false);
+        $this->collection = $this->getMock(
+            'Magento\Catalog\Model\ResourceModel\Category\Collection',
+            [],
+            [],
+            '',
+            false
+        );
 
         $this->childNode = $this->getMock(
             'Magento\Framework\Data\Tree\Node',
@@ -76,7 +82,7 @@ class ChooserTest extends \PHPUnit_Framework_TestCase
             '',
             false
         );
-        $this->categoryTree = $this->getMock('Magento\Catalog\Model\Resource\Category\Tree', [], [], '', false);
+        $this->categoryTree = $this->getMock('Magento\Catalog\Model\ResourceModel\Category\Tree', [], [], '', false);
         $this->store = $this->getMock('Magento\Store\Model\Store', [], [], '', false);
         $this->storeManager = $this->getMock('Magento\Store\Model\StoreManagerInterface', [], [], '', false);
         $this->request = $this->getMock('Magento\Framework\App\RequestInterface', [], [], '', false);
diff --git a/app/code/Magento/Widget/Test/Unit/Block/Adminhtml/Widget/Instance/Edit/Chooser/AbstractContainerTest.php b/app/code/Magento/Widget/Test/Unit/Block/Adminhtml/Widget/Instance/Edit/Chooser/AbstractContainerTest.php
index 1553a9654b41a57e8da202335de598f9df99bd7c..27f1c4e805ef8b680f3a81fd59b46c618f212b07 100644
--- a/app/code/Magento/Widget/Test/Unit/Block/Adminhtml/Widget/Instance/Edit/Chooser/AbstractContainerTest.php
+++ b/app/code/Magento/Widget/Test/Unit/Block/Adminhtml/Widget/Instance/Edit/Chooser/AbstractContainerTest.php
@@ -25,12 +25,12 @@ abstract class AbstractContainerTest extends \PHPUnit_Framework_TestCase
     protected $contextMock;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Theme\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $themeCollectionMock;
 
     /**
-     * @var \Magento\Theme\Model\Resource\Theme\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Theme\Model\ResourceModel\Theme\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $themeCollectionFactoryMock;
 
@@ -76,13 +76,13 @@ abstract class AbstractContainerTest extends \PHPUnit_Framework_TestCase
             ->getMock();
 
         $this->themeCollectionFactoryMock = $this->getMock(
-            'Magento\Theme\Model\Resource\Theme\CollectionFactory',
+            'Magento\Theme\Model\ResourceModel\Theme\CollectionFactory',
             ['create'],
             [],
             '',
             false
         );
-        $this->themeCollectionMock = $this->getMockBuilder('Magento\Theme\Model\Resource\Theme\Collection')
+        $this->themeCollectionMock = $this->getMockBuilder('Magento\Theme\Model\ResourceModel\Theme\Collection')
             ->disableOriginalConstructor()
             ->setMethods(['getItemById'])
             ->getMock();
diff --git a/app/code/Magento/Widget/Test/Unit/Model/Layout/UpdateTest.php b/app/code/Magento/Widget/Test/Unit/Model/Layout/UpdateTest.php
index f89e950a28429e2693e4428a000b000e9430a3af..79cd6d41f4256452bbff5696ed173a890542997a 100644
--- a/app/code/Magento/Widget/Test/Unit/Model/Layout/UpdateTest.php
+++ b/app/code/Magento/Widget/Test/Unit/Model/Layout/UpdateTest.php
@@ -15,7 +15,7 @@ class UpdateTest extends \PHPUnit_Framework_TestCase
     public function testBeforeSave()
     {
         $resourceModel = $this->getMock(
-            'Magento\Widget\Model\Resource\Layout\Update',
+            'Magento\Widget\Model\ResourceModel\Layout\Update',
             [
                 '__wakeup',
                 'formatDate',
diff --git a/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/AbstractTestCase.php b/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/AbstractTestCase.php
similarity index 93%
rename from app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/AbstractTestCase.php
rename to app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/AbstractTestCase.php
index b3a93fe2c6f1dbdd37800dd12014e0446d1c9ede..3b83e0676da71eef376aae2bd218ddf6f18296f4 100644
--- a/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/AbstractTestCase.php
+++ b/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/AbstractTestCase.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Widget\Test\Unit\Model\Resource\Layout;
+namespace Magento\Widget\Test\Unit\Model\ResourceModel\Layout;
 
 abstract class AbstractTestCase extends \PHPUnit_Framework_TestCase
 {
@@ -18,7 +18,7 @@ abstract class AbstractTestCase extends \PHPUnit_Framework_TestCase
     const TEST_DAYS_BEFORE = 3;
 
     /**
-     * @var \Magento\Widget\Model\Resource\Layout\Update\Collection
+     * @var \Magento\Widget\Model\ResourceModel\Layout\Update\Collection
      */
     protected $_collection;
 
@@ -60,7 +60,7 @@ abstract class AbstractTestCase extends \PHPUnit_Framework_TestCase
         $connection->expects($this->any())->method('quoteIdentifier')->will($this->returnArgument(0));
 
         $resource = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
@@ -77,7 +77,7 @@ abstract class AbstractTestCase extends \PHPUnit_Framework_TestCase
     /**
      * @abstract
      * @param \Magento\Framework\DB\Select $select
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     abstract protected function _getCollection(\Magento\Framework\DB\Select $select);
 
diff --git a/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Link/CollectionTest.php b/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/Link/CollectionTest.php
similarity index 89%
rename from app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Link/CollectionTest.php
rename to app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/Link/CollectionTest.php
index daffcea09cc77d5cf95205a9ab6466b8dc19dd1f..b850014ef6865a561ad0a06acb85a1f8af2c40db 100644
--- a/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Link/CollectionTest.php
+++ b/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/Link/CollectionTest.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Widget\Test\Unit\Model\Resource\Layout\Link;
+namespace Magento\Widget\Test\Unit\Model\ResourceModel\Layout\Link;
 
-class CollectionTest extends \Magento\Widget\Test\Unit\Model\Resource\Layout\AbstractTestCase
+class CollectionTest extends \Magento\Widget\Test\Unit\Model\ResourceModel\Layout\AbstractTestCase
 {
     /**
      * Name of test table
@@ -21,13 +21,13 @@ class CollectionTest extends \Magento\Widget\Test\Unit\Model\Resource\Layout\Abs
 
     /**
      * @param \Magento\Framework\DB\Select $select
-     * @return \Magento\Widget\Model\Resource\Layout\Link\Collection
+     * @return \Magento\Widget\Model\ResourceModel\Layout\Link\Collection
      */
     protected function _getCollection(\Magento\Framework\DB\Select $select)
     {
         $eventManager = $this->getMock('Magento\Framework\Event\ManagerInterface', [], [], '', false);
 
-        return new \Magento\Widget\Model\Resource\Layout\Link\Collection(
+        return new \Magento\Widget\Model\ResourceModel\Layout\Link\Collection(
             $this->getMock('Magento\Framework\Data\Collection\EntityFactory', [], [], '', false),
             $this->getMock('Psr\Log\LoggerInterface'),
             $this->getMockForAbstractClass('Magento\Framework\Data\Collection\Db\FetchStrategyInterface'),
@@ -77,7 +77,7 @@ class CollectionTest extends \Magento\Widget\Test\Unit\Model\Resource\Layout\Abs
     }
 
     /**
-     * @covers \Magento\Widget\Model\Resource\Layout\Link\Collection::_joinWithUpdate
+     * @covers \Magento\Widget\Model\ResourceModel\Layout\Link\Collection::_joinWithUpdate
      */
     public function testJoinWithUpdate()
     {
diff --git a/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Update/CollectionTest.php b/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/Update/CollectionTest.php
similarity index 90%
rename from app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Update/CollectionTest.php
rename to app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/Update/CollectionTest.php
index 5b232012be45e9ecf42f6d0dd10a78161a2a2671..8170d45a9df98e9ebdd55179e4be28a6b11cff36 100644
--- a/app/code/Magento/Widget/Test/Unit/Model/Resource/Layout/Update/CollectionTest.php
+++ b/app/code/Magento/Widget/Test/Unit/Model/ResourceModel/Layout/Update/CollectionTest.php
@@ -3,21 +3,21 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Widget\Test\Unit\Model\Resource\Layout\Update;
+namespace Magento\Widget\Test\Unit\Model\ResourceModel\Layout\Update;
 
-class CollectionTest extends \Magento\Widget\Test\Unit\Model\Resource\Layout\AbstractTestCase
+class CollectionTest extends \Magento\Widget\Test\Unit\Model\ResourceModel\Layout\AbstractTestCase
 {
     /**
      * Retrieve layout update collection instance
      *
      * @param \Magento\Framework\DB\Select $select
-     * @return \Magento\Widget\Model\Resource\Layout\Update\Collection
+     * @return \Magento\Widget\Model\ResourceModel\Layout\Update\Collection
      */
     protected function _getCollection(\Magento\Framework\DB\Select $select)
     {
         $eventManager = $this->getMock('Magento\Framework\Event\ManagerInterface', [], [], '', false);
 
-        return new \Magento\Widget\Model\Resource\Layout\Update\Collection(
+        return new \Magento\Widget\Model\ResourceModel\Layout\Update\Collection(
             $this->getMock('Magento\Framework\Data\Collection\EntityFactory', [], [], '', false),
             $this->getMock('Psr\Log\LoggerInterface'),
             $this->getMockForAbstractClass('Magento\Framework\Data\Collection\Db\FetchStrategyInterface'),
@@ -49,7 +49,7 @@ class CollectionTest extends \Magento\Widget\Test\Unit\Model\Resource\Layout\Abs
     }
 
     /**
-     * @covers \Magento\Widget\Model\Resource\Layout\Update\Collection::_joinWithLink
+     * @covers \Magento\Widget\Model\ResourceModel\Layout\Update\Collection::_joinWithLink
      */
     public function testJoinWithLink()
     {
diff --git a/app/code/Magento/Widget/Test/Unit/Model/Template/FilterTest.php b/app/code/Magento/Widget/Test/Unit/Model/Template/FilterTest.php
index 77921c4b21964a038c1ccbb7481de557a199b3bc..dbf3cb9fbe2eb9b409d9fc524d28860ccad7d714 100644
--- a/app/code/Magento/Widget/Test/Unit/Model/Template/FilterTest.php
+++ b/app/code/Magento/Widget/Test/Unit/Model/Template/FilterTest.php
@@ -31,7 +31,7 @@ class FilterTest extends \PHPUnit_Framework_TestCase
     protected $storeManagerMock;
 
     /**
-     * @var \Magento\Widget\Model\Resource\Widget|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Widget\Model\ResourceModel\Widget|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $widgetResourceMock;
 
@@ -53,7 +53,7 @@ class FilterTest extends \PHPUnit_Framework_TestCase
         $this->objectManagerHelper = new ObjectManagerHelper($this);
         $this->storeMock = $this->getMock('Magento\Store\Model\Store', [], [], '', false);
         $this->storeManagerMock = $this->getMock('Magento\Store\Model\StoreManagerInterface');
-        $this->widgetResourceMock = $this->getMock('Magento\Widget\Model\Resource\Widget', [], [], '', false);
+        $this->widgetResourceMock = $this->getMock('Magento\Widget\Model\ResourceModel\Widget', [], [], '', false);
         $this->widgetMock = $this->getMock('Magento\Widget\Model\Widget', [], [], '', false);
         $this->layoutMock = $this->getMock('Magento\Framework\View\LayoutInterface');
 
diff --git a/app/code/Magento/Widget/composer.json b/app/code/Magento/Widget/composer.json
index e828ca94217d89fc7d8743ece591a194f8300e94..0a34d5195946802f528ea9fa6ac4a9a080f2d3f0 100644
--- a/app/code/Magento/Widget/composer.json
+++ b/app/code/Magento/Widget/composer.json
@@ -12,6 +12,9 @@
         "magento/framework": "1.0.0-beta",
         "magento/module-variable": "1.0.0-beta"
     },
+    "suggest": {
+        "magento/module-widget-sample-data": "Sample Data version:1.0.0-beta"
+    },
     "type": "magento2-module",
     "version": "1.0.0-beta",
     "license": [
diff --git a/app/code/Magento/Widget/etc/acl.xml b/app/code/Magento/Widget/etc/acl.xml
index b87c71763fabb63e6d23f4a8d35e1c7397190f35..7e28df60dba3a2112bdbdfb295c5885455ee60fc 100644
--- a/app/code/Magento/Widget/etc/acl.xml
+++ b/app/code/Magento/Widget/etc/acl.xml
@@ -11,7 +11,7 @@
             <resource id="Magento_Backend::admin">
                 <resource id="Magento_Backend::content">
                     <resource id="Magento_Backend::content_elements">
-                        <resource id="Magento_Widget::widget_instance" title="Frontend Apps" sortOrder="50" />
+                        <resource id="Magento_Widget::widget_instance" title="Widgets" sortOrder="50" />
                     </resource>
                 </resource>
             </resource>
diff --git a/app/code/Magento/Widget/etc/adminhtml/menu.xml b/app/code/Magento/Widget/etc/adminhtml/menu.xml
index 0b19d0ceab9d9526e368d23cd71c3d08870c9332..b280759071fdcd7b97e5e1d0c4a1bc2d15b06d88 100644
--- a/app/code/Magento/Widget/etc/adminhtml/menu.xml
+++ b/app/code/Magento/Widget/etc/adminhtml/menu.xml
@@ -7,6 +7,6 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
     <menu>
-        <add id="Magento_Widget::cms_widget_instance" title="Frontend Apps" module="Magento_Widget" sortOrder="50" parent="Magento_Backend::content_elements" action="adminhtml/widget_instance" resource="Magento_Widget::widget_instance"/>
+        <add id="Magento_Widget::cms_widget_instance" title="Widgets" module="Magento_Widget" sortOrder="50" parent="Magento_Backend::content_elements" action="adminhtml/widget_instance" resource="Magento_Widget::widget_instance"/>
     </menu>
 </config>
diff --git a/app/code/Magento/Widget/etc/di.xml b/app/code/Magento/Widget/etc/di.xml
index 8bec6e99044f0359118bc1193f6125d407a85095..b2f8682185355449fd1e5a4e9cdbe6314bd0ec8f 100644
--- a/app/code/Magento/Widget/etc/di.xml
+++ b/app/code/Magento/Widget/etc/di.xml
@@ -19,7 +19,7 @@
             <argument name="cacheId" xsi:type="string">widget_config</argument>
         </arguments>
     </type>
-    <type name="Magento\Widget\Model\Resource\Layout\Update">
+    <type name="Magento\Widget\Model\ResourceModel\Layout\Update">
         <arguments>
             <argument name="cache" xsi:type="object">Magento\Framework\App\Cache\Type\Layout</argument>
         </arguments>
@@ -32,6 +32,6 @@
     </type>
     <type name="Magento\Framework\View\Model\Layout\Merge">
         <plugin name="widget-layout-update-plugin"
-                type="Magento\Widget\Model\Resource\Layout\Plugin" sortOrder="10"/>
+                type="Magento\Widget\Model\ResourceModel\Layout\Plugin" sortOrder="10"/>
     </type>
 </config>
diff --git a/app/code/Magento/Widget/i18n/de_DE.csv b/app/code/Magento/Widget/i18n/de_DE.csv
index 15390c510392c2b2270ae1a998bf471d85b9cffe..e736e4f6ba068be1cbcdbadd0cc240a83b6be6df 100644
--- a/app/code/Magento/Widget/i18n/de_DE.csv
+++ b/app/code/Magento/Widget/i18n/de_DE.csv
@@ -47,9 +47,9 @@ Widget,Widget
 "Widget Options",Widget-Optionen
 "Widget Instance",Widget-Instanz
 "Please specify a Widget Type.","Please specify a Widget Type."
-"Frontend Apps","Frontend Apps"
+"Widgets","Widgets"
 "Please specify a correct widget.","Please specify a correct widget."
-"New Frontend App Instance","New Frontend App Instance"
+"New Widget","New Widget"
 "The widget instance has been saved.","Die Widget-Instanz wurde gespeichert."
 "The widget instance has been deleted.","Die Widget-Instanz wurde gelöscht."
 description,description
diff --git a/app/code/Magento/Widget/i18n/en_US.csv b/app/code/Magento/Widget/i18n/en_US.csv
index 4223b3f8eb6827737d3223b3bbc01de4ffdcaa7f..307d9e67a3a4c1d152a80d34dea5fb04268faaa3 100644
--- a/app/code/Magento/Widget/i18n/en_US.csv
+++ b/app/code/Magento/Widget/i18n/en_US.csv
@@ -47,9 +47,9 @@ Widget,Widget
 "Widget Options","Widget Options"
 "Widget Instance","Widget Instance"
 "Please specify a Widget Type.","Please specify a Widget Type."
-"Frontend Apps","Frontend Apps"
+"Widgets","Widgets"
 "Please specify a correct widget.","Please specify a correct widget."
-"New Frontend App Instance","New Frontend App Instance"
+"New Widget","New Widget"
 "The widget instance has been saved.","The widget instance has been saved."
 "The widget instance has been deleted.","The widget instance has been deleted."
 description,description
diff --git a/app/code/Magento/Widget/i18n/es_ES.csv b/app/code/Magento/Widget/i18n/es_ES.csv
index 4cc5e9f5faf76a1d181a234080e46c9611fdbec6..04c5035a17026c0e8d39750a7367daa0b25d4dc6 100644
--- a/app/code/Magento/Widget/i18n/es_ES.csv
+++ b/app/code/Magento/Widget/i18n/es_ES.csv
@@ -47,9 +47,9 @@ Widget,Aplicación
 "Widget Options","Opciones de aplicación"
 "Widget Instance","Instancia de aplicación"
 "Please specify a Widget Type.","Please specify a Widget Type."
-"Frontend Apps","Frontend Apps"
+"Widgets","Widgets"
 "Please specify a correct widget.","Please specify a correct widget."
-"New Frontend App Instance","New Frontend App Instance"
+"New Widget","New Widget"
 "The widget instance has been saved.","Se guardó la instancia de aplicación."
 "The widget instance has been deleted.","Se eliminó la instancia de aplicación."
 description,description
diff --git a/app/code/Magento/Widget/i18n/fr_FR.csv b/app/code/Magento/Widget/i18n/fr_FR.csv
index 3fe4f8141884e2126d6e4dbc1164b4441ce97caa..e2fd8ac8bcffd96919ed4a1e6d8a5db72872bb49 100644
--- a/app/code/Magento/Widget/i18n/fr_FR.csv
+++ b/app/code/Magento/Widget/i18n/fr_FR.csv
@@ -47,9 +47,9 @@ Widget,Widget
 "Widget Options","Options des widgets"
 "Widget Instance",Widget
 "Please specify a Widget Type.","Please specify a Widget Type."
-"Frontend Apps","Frontend Apps"
+"Widgets","Widgets"
 "Please specify a correct widget.","Please specify a correct widget."
-"New Frontend App Instance","New Frontend App Instance"
+"New Widget","New Widget"
 "The widget instance has been saved.","Ce widget a été sauvegardé."
 "The widget instance has been deleted.","Ce widget a été supprimé."
 description,description
diff --git a/app/code/Magento/Widget/i18n/nl_NL.csv b/app/code/Magento/Widget/i18n/nl_NL.csv
index 950ec4c0df5edbe095102d17a36bd63f03309bd0..5011af0fe5c2ef7a230ca3c868010cf5994aabda 100644
--- a/app/code/Magento/Widget/i18n/nl_NL.csv
+++ b/app/code/Magento/Widget/i18n/nl_NL.csv
@@ -47,9 +47,9 @@ Widget,Widget
 "Widget Options","Widget opties"
 "Widget Instance","Widget instantie"
 "Please specify a Widget Type.","Please specify a Widget Type."
-"Frontend Apps","Frontend Apps"
+"Widgets","Widgets"
 "Please specify a correct widget.","Please specify a correct widget."
-"New Frontend App Instance","New Frontend App Instance"
+"New Widget","New Widget"
 "The widget instance has been saved.","De widget instantie is opgeslagen."
 "The widget instance has been deleted.","De widget instantie is verwijderd."
 description,description
diff --git a/app/code/Magento/Widget/i18n/pt_BR.csv b/app/code/Magento/Widget/i18n/pt_BR.csv
index 1e2eef700c5c47c657f673756c556cac4c2c3e60..99b30655049cd9cea1d217c947b9575e5bc7ed33 100644
--- a/app/code/Magento/Widget/i18n/pt_BR.csv
+++ b/app/code/Magento/Widget/i18n/pt_BR.csv
@@ -47,9 +47,9 @@ Widget,Widget
 "Widget Options","Widget Opções"
 "Widget Instance","Widget Exemplo"
 "Please specify a Widget Type.","Please specify a Widget Type."
-"Frontend Apps","Frontend Apps"
+"Widgets","Widgets"
 "Please specify a correct widget.","Please specify a correct widget."
-"New Frontend App Instance","New Frontend App Instance"
+"New Widget","New Widget"
 "The widget instance has been saved.","O exemplo de widget foi salvo."
 "The widget instance has been deleted.","O exemplo de widget foi deletado."
 description,description
diff --git a/app/code/Magento/Widget/i18n/zh_Hans_CN.csv b/app/code/Magento/Widget/i18n/zh_Hans_CN.csv
index e72d535776af7640ea88546019eb662a3ea64da6..4827ad3c0b62c836abe00ff4c76a6bc19c57c371 100644
--- a/app/code/Magento/Widget/i18n/zh_Hans_CN.csv
+++ b/app/code/Magento/Widget/i18n/zh_Hans_CN.csv
@@ -47,9 +47,9 @@ Widget,小工具
 "Widget Options",小工具选项
 "Widget Instance",小工具实例
 "Please specify a Widget Type.","Please specify a Widget Type."
-"Frontend Apps","Frontend Apps"
+"Widgets","Widgets"
 "Please specify a correct widget.","Please specify a correct widget."
-"New Frontend App Instance","New Frontend App Instance"
+"New Widget","New Widget"
 "The widget instance has been saved.",该小工具实例已被保存。
 "The widget instance has been deleted.",该小工具实例已被删除。
 description,description
diff --git a/app/code/Magento/Widget/view/adminhtml/layout/adminhtml_widget_instance_block.xml b/app/code/Magento/Widget/view/adminhtml/layout/adminhtml_widget_instance_block.xml
index 39375288e695d9103e08a7bc166ca3840392017e..938a07c5b3f4c1633cf7f07df1109f366bdf6add 100644
--- a/app/code/Magento/Widget/view/adminhtml/layout/adminhtml_widget_instance_block.xml
+++ b/app/code/Magento/Widget/view/adminhtml/layout/adminhtml_widget_instance_block.xml
@@ -13,7 +13,7 @@
                     <argument name="id" xsi:type="string">widgetInstanceGrid</argument>
                     <argument name="default_sort" xsi:type="string">instance_id</argument>
                     <argument name="default_dir" xsi:type="string">ASC</argument>
-                    <argument name="dataSource" xsi:type="object">Magento\Widget\Model\Resource\Widget\Instance\Collection</argument>
+                    <argument name="dataSource" xsi:type="object">Magento\Widget\Model\ResourceModel\Widget\Instance\Collection</argument>
                 </arguments>
                 <block class="Magento\Backend\Block\Widget\Grid\ColumnSet" name="adminhtml.widget.instance.grid.columnSet" as="grid.columnSet">
                     <arguments>
@@ -27,7 +27,7 @@
                     </arguments>
                     <block class="Magento\Backend\Block\Widget\Grid\Column" as="instance_id">
                         <arguments>
-                            <argument name="header" xsi:type="string" translate="true">Frontend App ID</argument>
+                            <argument name="header" xsi:type="string" translate="true">Widget ID</argument>
                             <argument name="index" xsi:type="string">instance_id</argument>
                             <argument name="column_css_class" xsi:type="string">col-id</argument>
                             <argument name="header_css_class" xsi:type="string">col-id</argument>
@@ -35,7 +35,7 @@
                     </block>
                     <block class="Magento\Backend\Block\Widget\Grid\Column" as="title">
                         <arguments>
-                            <argument name="header" xsi:type="string" translate="true">Frontend App</argument>
+                            <argument name="header" xsi:type="string" translate="true">Widget</argument>
                             <argument name="index" xsi:type="string">title</argument>
                         </arguments>
                     </block>
@@ -44,7 +44,7 @@
                             <argument name="header" xsi:type="string" translate="true">Type</argument>
                             <argument name="index" xsi:type="string">instance_type</argument>
                             <argument name="type" xsi:type="string">options</argument>
-                            <argument name="options" xsi:type="options" model="Magento\Widget\Model\Resource\Widget\Instance\Options\Types"/>
+                            <argument name="options" xsi:type="options" model="Magento\Widget\Model\ResourceModel\Widget\Instance\Options\Types"/>
                         </arguments>
                     </block>
                     <block class="Magento\Backend\Block\Widget\Grid\Column" as="theme_id">
@@ -52,7 +52,7 @@
                             <argument name="header" xsi:type="string" translate="true">Design Theme</argument>
                             <argument name="index" xsi:type="string">theme_id</argument>
                             <argument name="type" xsi:type="string">options</argument>
-                            <argument name="options" xsi:type="options" model="Magento\Widget\Model\Resource\Widget\Instance\Options\ThemeId"/>
+                            <argument name="options" xsi:type="options" model="Magento\Widget\Model\ResourceModel\Widget\Instance\Options\ThemeId"/>
                             <argument name="with_empty" xsi:type="string">1</argument>
                         </arguments>
                     </block>
diff --git a/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml b/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml
index bcdf62afc6bf8abd99a6519309af87bd9c109801..94a3eb7145be0c27125f3adfbddd11b998bade3e 100644
--- a/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml
+++ b/app/code/Magento/Widget/view/adminhtml/templates/instance/edit/layout.phtml
@@ -22,9 +22,10 @@
 require([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     "prototype",
     "extjs/ext-tree-checkbox"
-], function (jQuery, mageTemplate) {
+], function (jQuery, mageTemplate, alert) {
 
 //<![CDATA[
 
@@ -376,7 +377,9 @@ var WidgetInstance = {
                                 chooser.show();
                             }
                         } catch (e) {
-                            alert('Error occurs during loading chooser.');
+                            alert({
+                                content: 'Error occurs during loading chooser.'
+                            });
                         }
                     }
                 });
@@ -469,7 +472,9 @@ var WidgetInstance = {
                                 }
                             }
                         } catch (e) {
-                            alert('Error occurs during loading chooser.');
+                            alert({
+                                content: 'Error occurs during loading chooser.'
+                            });
                         }
                     }
                 });
diff --git a/app/code/Magento/Wishlist/Block/AbstractBlock.php b/app/code/Magento/Wishlist/Block/AbstractBlock.php
index 1d211f5c4593875983149ac8c914bd1a69c890ce..93571ad489c07fa6e9574ef71c56adb23b4d8eb1 100644
--- a/app/code/Magento/Wishlist/Block/AbstractBlock.php
+++ b/app/code/Magento/Wishlist/Block/AbstractBlock.php
@@ -14,7 +14,7 @@ abstract class AbstractBlock extends \Magento\Catalog\Block\Product\AbstractProd
     /**
      * Wishlist Product Items Collection
      *
-     * @var \Magento\Wishlist\Model\Resource\Item\Collection
+     * @var \Magento\Wishlist\Model\ResourceModel\Item\Collection
      */
     protected $_collection;
 
@@ -70,7 +70,7 @@ abstract class AbstractBlock extends \Magento\Catalog\Block\Product\AbstractProd
     /**
      * Prepare additional conditions to collection
      *
-     * @param \Magento\Wishlist\Model\Resource\Item\Collection $collection
+     * @param \Magento\Wishlist\Model\ResourceModel\Item\Collection $collection
      * @return \Magento\Wishlist\Block\Customer\Wishlist
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
@@ -82,7 +82,7 @@ abstract class AbstractBlock extends \Magento\Catalog\Block\Product\AbstractProd
     /**
      * Create wishlist item collection
      *
-     * @return \Magento\Wishlist\Model\Resource\Item\Collection
+     * @return \Magento\Wishlist\Model\ResourceModel\Item\Collection
      */
     protected function _createWishlistItemCollection()
     {
@@ -92,7 +92,7 @@ abstract class AbstractBlock extends \Magento\Catalog\Block\Product\AbstractProd
     /**
      * Retrieve Wishlist Product Items collection
      *
-     * @return \Magento\Wishlist\Model\Resource\Item\Collection
+     * @return \Magento\Wishlist\Model\ResourceModel\Item\Collection
      */
     public function getWishlistItems()
     {
diff --git a/app/code/Magento/Wishlist/Block/Customer/Wishlist.php b/app/code/Magento/Wishlist/Block/Customer/Wishlist.php
index 9dba10c236f9f3c77d883c3c556a5d14786fc6c2..d3af457785b5dea4fc61cb3e9fbf78e9f92d3a2d 100644
--- a/app/code/Magento/Wishlist/Block/Customer/Wishlist.php
+++ b/app/code/Magento/Wishlist/Block/Customer/Wishlist.php
@@ -62,7 +62,7 @@ class Wishlist extends \Magento\Wishlist\Block\AbstractBlock
     /**
      * Add wishlist conditions to collection
      *
-     * @param  \Magento\Wishlist\Model\Resource\Item\Collection $collection
+     * @param  \Magento\Wishlist\Model\ResourceModel\Item\Collection $collection
      * @return $this
      */
     protected function _prepareCollection($collection)
diff --git a/app/code/Magento/Wishlist/Controller/Index/Cart.php b/app/code/Magento/Wishlist/Controller/Index/Cart.php
index 89d070df012bada857faab47710b331c64bf2499..8075c8e6b6ea86ed68622412637f51b6645d946c 100644
--- a/app/code/Magento/Wishlist/Controller/Index/Cart.php
+++ b/app/code/Magento/Wishlist/Controller/Index/Cart.php
@@ -148,7 +148,7 @@ class Cart extends Action\Action implements IndexInterface
         );
 
         try {
-            /** @var \Magento\Wishlist\Model\Resource\Item\Option\Collection $options */
+            /** @var \Magento\Wishlist\Model\ResourceModel\Item\Option\Collection $options */
             $options = $this->optionFactory->create()->getCollection()->addItemFilter([$itemId]);
             $item->setOptions($options->getOptionsByItem($itemId));
 
diff --git a/app/code/Magento/Wishlist/Controller/Shared/Cart.php b/app/code/Magento/Wishlist/Controller/Shared/Cart.php
index 0c88c19d89342ad520bbb1b89dbf661def669ab9..b3ed5a3b33093ef5f7d1ba041a0782fd1bf3fa81 100644
--- a/app/code/Magento/Wishlist/Controller/Shared/Cart.php
+++ b/app/code/Magento/Wishlist/Controller/Shared/Cart.php
@@ -15,7 +15,7 @@ use Magento\Framework\Exception\LocalizedException;
 use Magento\Wishlist\Model\Item;
 use Magento\Wishlist\Model\Item\OptionFactory;
 use Magento\Wishlist\Model\ItemFactory;
-use Magento\Wishlist\Model\Resource\Item\Option\Collection as OptionCollection;
+use Magento\Wishlist\Model\ResourceModel\Item\Option\Collection as OptionCollection;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
diff --git a/app/code/Magento/Wishlist/Helper/Data.php b/app/code/Magento/Wishlist/Helper/Data.php
index b5c271b48ee5d8409737ea93f2819a56863d9338..387337d4e5b39c2111ffb42196c9f078cbbfc7f8 100644
--- a/app/code/Magento/Wishlist/Helper/Data.php
+++ b/app/code/Magento/Wishlist/Helper/Data.php
@@ -43,14 +43,14 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     /**
      * Wishlist Product Items Collection
      *
-     * @var \Magento\Wishlist\Model\Resource\Item\Collection
+     * @var \Magento\Wishlist\Model\ResourceModel\Item\Collection
      */
     protected $_productCollection;
 
     /**
      * Wishlist Items Collection
      *
-     * @var \Magento\Wishlist\Model\Resource\Item\Collection
+     * @var \Magento\Wishlist\Model\ResourceModel\Item\Collection
      */
     protected $_wishlistItemCollection;
 
@@ -223,7 +223,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     /**
      * Create wishlist item collection
      *
-     * @return \Magento\Wishlist\Model\Resource\Item\Collection
+     * @return \Magento\Wishlist\Model\ResourceModel\Item\Collection
      */
     protected function _createWishlistItemCollection()
     {
@@ -233,7 +233,7 @@ class Data extends \Magento\Framework\App\Helper\AbstractHelper
     /**
      * Retrieve wishlist items collection
      *
-     * @return \Magento\Wishlist\Model\Resource\Item\Collection
+     * @return \Magento\Wishlist\Model\ResourceModel\Item\Collection
      */
     public function getWishlistItemCollection()
     {
diff --git a/app/code/Magento/Wishlist/Model/Item.php b/app/code/Magento/Wishlist/Model/Item.php
index 08900ab7d1f838c3cc26fc6a12412dc3f702a8b5..f3748d8691d8f79b623990a59e3154c76d770fb2 100644
--- a/app/code/Magento/Wishlist/Model/Item.php
+++ b/app/code/Magento/Wishlist/Model/Item.php
@@ -14,13 +14,13 @@ use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\Framework\Model\AbstractModel;
 use Magento\Wishlist\Model\Item\Option;
 use Magento\Wishlist\Model\Item\OptionFactory;
-use Magento\Wishlist\Model\Resource\Item\Option\CollectionFactory;
+use Magento\Wishlist\Model\ResourceModel\Item\Option\CollectionFactory;
 use Magento\Catalog\Model\Product\Exception as ProductException;
 
 /**
  * Wishlist item model
  *
- * @method \Magento\Wishlist\Model\Resource\Item getResource()
+ * @method \Magento\Wishlist\Model\ResourceModel\Item getResource()
  * @method int getWishlistId()
  * @method \Magento\Wishlist\Model\Item setWishlistId(int $value)
  * @method int getProductId()
@@ -96,7 +96,7 @@ class Item extends AbstractModel implements ItemInterface
     protected $_date;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Url
+     * @var \Magento\Catalog\Model\ResourceModel\Url
      */
     protected $_catalogUrl;
 
@@ -125,12 +125,12 @@ class Item extends AbstractModel implements ItemInterface
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Store\Model\StoreManagerInterface $storeManager
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
-     * @param \Magento\Catalog\Model\Resource\Url $catalogUrl
+     * @param \Magento\Catalog\Model\ResourceModel\Url $catalogUrl
      * @param OptionFactory $wishlistOptFactory
      * @param CollectionFactory $wishlOptionCollectionFactory
      * @param \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig
      * @param ProductRepositoryInterface $productRepository
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -140,12 +140,12 @@ class Item extends AbstractModel implements ItemInterface
         \Magento\Framework\Registry $registry,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
-        \Magento\Catalog\Model\Resource\Url $catalogUrl,
+        \Magento\Catalog\Model\ResourceModel\Url $catalogUrl,
         OptionFactory $wishlistOptFactory,
         CollectionFactory $wishlOptionCollectionFactory,
         \Magento\Catalog\Model\ProductTypes\ConfigInterface $productTypeConfig,
         ProductRepositoryInterface $productRepository,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -166,7 +166,7 @@ class Item extends AbstractModel implements ItemInterface
      */
     protected function _construct()
     {
-        $this->_init('Magento\Wishlist\Model\Resource\Item');
+        $this->_init('Magento\Wishlist\Model\ResourceModel\Item');
     }
 
     /**
@@ -184,7 +184,7 @@ class Item extends AbstractModel implements ItemInterface
     /**
      * Retrieve resource instance wrapper
      *
-     * @return \Magento\Wishlist\Model\Resource\Item
+     * @return \Magento\Wishlist\Model\ResourceModel\Item
      */
     protected function _getResource()
     {
diff --git a/app/code/Magento/Wishlist/Model/Item/Option.php b/app/code/Magento/Wishlist/Model/Item/Option.php
index a0f869f6ecee1f364b82f1223dfb29378078b073..2dd9cd159efb69f2a49a885851ca5b1221fd5b3d 100644
--- a/app/code/Magento/Wishlist/Model/Item/Option.php
+++ b/app/code/Magento/Wishlist/Model/Item/Option.php
@@ -31,7 +31,7 @@ class Option extends \Magento\Framework\Model\AbstractModel implements
      */
     protected function _construct()
     {
-        $this->_init('Magento\Wishlist\Model\Resource\Item\Option');
+        $this->_init('Magento\Wishlist\Model\ResourceModel\Item\Option');
     }
 
     /**
diff --git a/app/code/Magento/Wishlist/Model/Resource/Item.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item.php
similarity index 93%
rename from app/code/Magento/Wishlist/Model/Resource/Item.php
rename to app/code/Magento/Wishlist/Model/ResourceModel/Item.php
index a44ca254f3ad2c088bfb4cccdbead03a5bf3fcaa..84f679726d2f3c7f990ef3d83ac5131ffa1a1b6f 100644
--- a/app/code/Magento/Wishlist/Model/Resource/Item.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Wishlist\Model\Resource;
+namespace Magento\Wishlist\Model\ResourceModel;
 
-class Item extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
diff --git a/app/code/Magento/Wishlist/Model/Resource/Item/Collection.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection.php
similarity index 91%
rename from app/code/Magento/Wishlist/Model/Resource/Item/Collection.php
rename to app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection.php
index a6f4ef4d4f539d3ce8b2b660f31dd675c71503ec..bbee472a8bd57b7d00723325c617bb27e33663a9 100644
--- a/app/code/Magento/Wishlist/Model/Resource/Item/Collection.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection.php
@@ -3,14 +3,14 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Wishlist\Model\Resource\Item;
+namespace Magento\Wishlist\Model\ResourceModel\Item;
 
 /**
  * Wishlist item collection
  * @SuppressWarnings(PHPMD.TooManyFields)
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Product Visibility Filter to product collection flag
@@ -103,22 +103,22 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected $_productVisibility;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_coreResource;
 
     /**
-     * @var \Magento\Wishlist\Model\Resource\Item\Option\CollectionFactory
+     * @var \Magento\Wishlist\Model\ResourceModel\Item\Option\CollectionFactory
      */
     protected $_optionCollectionFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\CollectionFactory
+     * @var \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory
      */
     protected $_productCollectionFactory;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\ConfigFactory
+     * @var \Magento\Catalog\Model\ResourceModel\ConfigFactory
      */
     protected $_catalogConfFactory;
 
@@ -143,12 +143,12 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Wishlist\Model\Config $wishlistConfig
      * @param \Magento\Catalog\Model\Product\Visibility $productVisibility
-     * @param \Magento\Framework\App\Resource $coreResource
-     * @param \Magento\Wishlist\Model\Resource\Item\Option\CollectionFactory $optionCollectionFactory
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
-     * @param \Magento\Catalog\Model\Resource\ConfigFactory $catalogConfFactory
+     * @param \Magento\Framework\App\ResourceConnection $coreResource
+     * @param \Magento\Wishlist\Model\ResourceModel\Item\Option\CollectionFactory $optionCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\ConfigFactory $catalogConfFactory
      * @param \Magento\Catalog\Model\Entity\AttributeFactory $catalogAttrFactory
-     * @param \Magento\Wishlist\Model\Resource\Item $resource
+     * @param \Magento\Wishlist\Model\ResourceModel\Item $resource
      * @param \Magento\Framework\App\State $appState
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
      *
@@ -165,12 +165,12 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Wishlist\Model\Config $wishlistConfig,
         \Magento\Catalog\Model\Product\Visibility $productVisibility,
-        \Magento\Framework\App\Resource $coreResource,
-        \Magento\Wishlist\Model\Resource\Item\Option\CollectionFactory $optionCollectionFactory,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory,
-        \Magento\Catalog\Model\Resource\ConfigFactory $catalogConfFactory,
+        \Magento\Framework\App\ResourceConnection $coreResource,
+        \Magento\Wishlist\Model\ResourceModel\Item\Option\CollectionFactory $optionCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\ConfigFactory $catalogConfFactory,
         \Magento\Catalog\Model\Entity\AttributeFactory $catalogAttrFactory,
-        \Magento\Wishlist\Model\Resource\Item $resource,
+        \Magento\Wishlist\Model\ResourceModel\Item $resource,
         \Magento\Framework\App\State $appState,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
     ) {
@@ -196,7 +196,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     public function _construct()
     {
-        $this->_init('Magento\Wishlist\Model\Item', 'Magento\Wishlist\Model\Resource\Item');
+        $this->_init('Magento\Wishlist\Model\Item', 'Magento\Wishlist\Model\ResourceModel\Item');
         $this->addFilterToMap('store_id', 'main_table.store_id');
     }
 
@@ -229,7 +229,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
     protected function _assignOptions()
     {
         $itemIds = array_keys($this->_items);
-        /* @var $optionCollection \Magento\Wishlist\Model\Resource\Item\Option\Collection */
+        /* @var $optionCollection \Magento\Wishlist\Model\ResourceModel\Item\Option\Collection */
         $optionCollection = $this->_optionCollectionFactory->create();
         $optionCollection->addItemFilter($itemIds);
 
@@ -257,7 +257,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
         $productIds = [];
 
         $this->_productIds = array_merge($this->_productIds, array_keys($productIds));
-        /** @var \Magento\Catalog\Model\Resource\Product\Collection $productCollection */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */
         $productCollection = $this->_productCollectionFactory->create();
 
         if ($this->_productVisible) {
diff --git a/app/code/Magento/Wishlist/Model/Resource/Item/Collection/Grid.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection/Grid.php
similarity index 83%
rename from app/code/Magento/Wishlist/Model/Resource/Item/Collection/Grid.php
rename to app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection/Grid.php
index 1ae818a6e4cd8c0b308f7f7dadaf8ef44ea168b9..b6ed38636be21ec7a7d8bf6c8c4aa1e2ce7c3ca8 100644
--- a/app/code/Magento/Wishlist/Model/Resource/Item/Collection/Grid.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Collection/Grid.php
@@ -7,14 +7,14 @@
 /**
  * Wishlist item collection grouped by customer id
  */
-namespace Magento\Wishlist\Model\Resource\Item\Collection;
+namespace Magento\Wishlist\Model\ResourceModel\Item\Collection;
 
 use Magento\Customer\Controller\RegistryConstants as RegistryConstants;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  */
-class Grid extends \Magento\Wishlist\Model\Resource\Item\Collection
+class Grid extends \Magento\Wishlist\Model\ResourceModel\Item\Collection
 {
     /**
      * @var \Magento\Framework\Registry
@@ -32,12 +32,12 @@ class Grid extends \Magento\Wishlist\Model\Resource\Item\Collection
      * @param \Magento\Framework\Stdlib\DateTime\DateTime $date
      * @param \Magento\Wishlist\Model\Config $wishlistConfig
      * @param \Magento\Catalog\Model\Product\Visibility $productVisibility
-     * @param \Magento\Framework\App\Resource $coreResource
-     * @param \Magento\Wishlist\Model\Resource\Item\Option\CollectionFactory $optionCollectionFactory
-     * @param \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory
-     * @param \Magento\Catalog\Model\Resource\ConfigFactory $catalogConfFactory
+     * @param \Magento\Framework\App\ResourceConnection $coreResource
+     * @param \Magento\Wishlist\Model\ResourceModel\Item\Option\CollectionFactory $optionCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
+     * @param \Magento\Catalog\Model\ResourceModel\ConfigFactory $catalogConfFactory
      * @param \Magento\Catalog\Model\Entity\AttributeFactory $catalogAttrFactory
-     * @param \Magento\Wishlist\Model\Resource\Item $resource
+     * @param \Magento\Wishlist\Model\ResourceModel\Item $resource
      * @param \Magento\Framework\App\State $appState
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
@@ -55,12 +55,12 @@ class Grid extends \Magento\Wishlist\Model\Resource\Item\Collection
         \Magento\Framework\Stdlib\DateTime\DateTime $date,
         \Magento\Wishlist\Model\Config $wishlistConfig,
         \Magento\Catalog\Model\Product\Visibility $productVisibility,
-        \Magento\Framework\App\Resource $coreResource,
-        \Magento\Wishlist\Model\Resource\Item\Option\CollectionFactory $optionCollectionFactory,
-        \Magento\Catalog\Model\Resource\Product\CollectionFactory $productCollectionFactory,
-        \Magento\Catalog\Model\Resource\ConfigFactory $catalogConfFactory,
+        \Magento\Framework\App\ResourceConnection $coreResource,
+        \Magento\Wishlist\Model\ResourceModel\Item\Option\CollectionFactory $optionCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
+        \Magento\Catalog\Model\ResourceModel\ConfigFactory $catalogConfFactory,
         \Magento\Catalog\Model\Entity\AttributeFactory $catalogAttrFactory,
-        \Magento\Wishlist\Model\Resource\Item $resource,
+        \Magento\Wishlist\Model\ResourceModel\Item $resource,
         \Magento\Framework\App\State $appState,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null
diff --git a/app/code/Magento/Wishlist/Model/Resource/Item/Option.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option.php
similarity index 74%
rename from app/code/Magento/Wishlist/Model/Resource/Item/Option.php
rename to app/code/Magento/Wishlist/Model/ResourceModel/Item/Option.php
index d50f3aaf368786665a0a2a5b49534439bd7b2c6e..6660d7eb35306e1d4b1bf9f35dafd39a3b20271f 100644
--- a/app/code/Magento/Wishlist/Model/Resource/Item/Option.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Wishlist\Model\Resource\Item;
+namespace Magento\Wishlist\Model\ResourceModel\Item;
 
-class Option extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Option extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @return void
diff --git a/app/code/Magento/Wishlist/Model/Resource/Item/Option/Collection.php b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option/Collection.php
similarity index 94%
rename from app/code/Magento/Wishlist/Model/Resource/Item/Option/Collection.php
rename to app/code/Magento/Wishlist/Model/ResourceModel/Item/Option/Collection.php
index fad1fdc1322bda4c3506ed039a74f6f59c02fb3d..d6a8343f2cbc4a93929d2d5a8c1599a27055f65d 100644
--- a/app/code/Magento/Wishlist/Model/Resource/Item/Option/Collection.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Item/Option/Collection.php
@@ -9,12 +9,12 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Wishlist\Model\Resource\Item\Option;
+namespace Magento\Wishlist\Model\ResourceModel\Item\Option;
 
 use Magento\Catalog\Model\Product;
 use Magento\Wishlist\Model\Item;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Array of option ids grouped by item id
@@ -37,7 +37,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Wishlist\Model\Item\Option', 'Magento\Wishlist\Model\Resource\Item\Option');
+        $this->_init('Magento\Wishlist\Model\Item\Option', 'Magento\Wishlist\Model\ResourceModel\Item\Option');
     }
 
     /**
diff --git a/app/code/Magento/Wishlist/Model/Resource/Wishlist.php b/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist.php
similarity index 93%
rename from app/code/Magento/Wishlist/Model/Resource/Wishlist.php
rename to app/code/Magento/Wishlist/Model/ResourceModel/Wishlist.php
index 18a533178beea64eb4296e171664c0bf903c820d..936f362d451588bda8a829ab2083eef556cdb0f3 100644
--- a/app/code/Magento/Wishlist/Model/Resource/Wishlist.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Wishlist\Model\Resource;
+namespace Magento\Wishlist\Model\ResourceModel;
 
-class Wishlist extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Wishlist extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Store wishlist items count
diff --git a/app/code/Magento/Wishlist/Model/Resource/Wishlist/Collection.php b/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist/Collection.php
similarity index 82%
rename from app/code/Magento/Wishlist/Model/Resource/Wishlist/Collection.php
rename to app/code/Magento/Wishlist/Model/ResourceModel/Wishlist/Collection.php
index cced04744dd79c7c7c6b7ff6324238f2c9acbfe7..61b1feb5b4773bfabb0c7154200c582315c74a98 100644
--- a/app/code/Magento/Wishlist/Model/Resource/Wishlist/Collection.php
+++ b/app/code/Magento/Wishlist/Model/ResourceModel/Wishlist/Collection.php
@@ -9,9 +9,9 @@
  *
  * @author      Magento Core Team <core@magentocommerce.com>
  */
-namespace Magento\Wishlist\Model\Resource\Wishlist;
+namespace Magento\Wishlist\Model\ResourceModel\Wishlist;
 
-class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * Initialize resource
@@ -20,7 +20,7 @@ class Collection extends \Magento\Framework\Model\Resource\Db\Collection\Abstrac
      */
     protected function _construct()
     {
-        $this->_init('Magento\Wishlist\Model\Wishlist', 'Magento\Wishlist\Model\Resource\Wishlist');
+        $this->_init('Magento\Wishlist\Model\Wishlist', 'Magento\Wishlist\Model\ResourceModel\Wishlist');
     }
 
     /**
diff --git a/app/code/Magento/Wishlist/Model/Wishlist.php b/app/code/Magento/Wishlist/Model/Wishlist.php
index 2ba3b7220a9fcfc724d3e123607c8a4603d13985..a620db0d8d986d6f6d3a6b4c5e7842ff116c8447 100644
--- a/app/code/Magento/Wishlist/Model/Wishlist.php
+++ b/app/code/Magento/Wishlist/Model/Wishlist.php
@@ -7,15 +7,15 @@ namespace Magento\Wishlist\Model;
 
 use Magento\Catalog\Api\ProductRepositoryInterface;
 use Magento\Framework\Exception\NoSuchEntityException;
-use Magento\Wishlist\Model\Resource\Item\CollectionFactory;
-use Magento\Wishlist\Model\Resource\Wishlist as ResourceWishlist;
-use Magento\Wishlist\Model\Resource\Wishlist\Collection;
+use Magento\Wishlist\Model\ResourceModel\Item\CollectionFactory;
+use Magento\Wishlist\Model\ResourceModel\Wishlist as ResourceWishlist;
+use Magento\Wishlist\Model\ResourceModel\Wishlist\Collection;
 
 /**
  * Wishlist model
  *
- * @method \Magento\Wishlist\Model\Resource\Wishlist _getResource()
- * @method \Magento\Wishlist\Model\Resource\Wishlist getResource()
+ * @method \Magento\Wishlist\Model\ResourceModel\Wishlist _getResource()
+ * @method \Magento\Wishlist\Model\ResourceModel\Wishlist getResource()
  * @method int getShared()
  * @method \Magento\Wishlist\Model\Wishlist setShared(int $value)
  * @method string getSharingCode()
@@ -41,7 +41,7 @@ class Wishlist extends \Magento\Framework\Model\AbstractModel implements \Magent
     /**
      * Wishlist item collection
      *
-     * @var \Magento\Wishlist\Model\Resource\Item\Collection
+     * @var \Magento\Wishlist\Model\ResourceModel\Item\Collection
      */
     protected $_itemCollection;
 
@@ -317,7 +317,7 @@ class Wishlist extends \Magento\Framework\Model\AbstractModel implements \Magent
     /**
      * Retrieve wishlist item collection
      *
-     * @return \Magento\Wishlist\Model\Resource\Item\Collection
+     * @return \Magento\Wishlist\Model\ResourceModel\Item\Collection
      */
     public function getItemCollection()
     {
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/CartTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/CartTest.php
index d660839c021c94311f66351fe32c257d1deec3b6..cdd8ea3b33372cc72b3aa98a65eb8090eaf3b718 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Index/CartTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Index/CartTest.php
@@ -428,7 +428,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($optionMock);
 
-        $optionsMock = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\Option\Collection')
+        $optionsMock = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\Option\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $optionMock->expects($this->once())
@@ -637,7 +637,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($optionMock);
 
-        $optionsMock = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\Option\Collection')
+        $optionsMock = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\Option\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $optionMock->expects($this->once())
@@ -798,7 +798,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->method('create')
             ->willReturn($optionMock);
 
-        $optionsMock = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\Option\Collection')
+        $optionsMock = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\Option\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $optionMock->expects($this->once())
diff --git a/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/CartTest.php b/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/CartTest.php
index 30e49daae4318534d0ff3eabf07816851fe7370c..c42e48ba37b6da6d7933dcd0c96a4e23cb78c4c5 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/CartTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Controller/Shared/CartTest.php
@@ -22,7 +22,7 @@ use Magento\Wishlist\Model\Item;
 use Magento\Wishlist\Model\Item\Option;
 use Magento\Wishlist\Model\Item\OptionFactory;
 use Magento\Wishlist\Model\ItemFactory;
-use Magento\Wishlist\Model\Resource\Item\Option\Collection as OptionCollection;
+use Magento\Wishlist\Model\ResourceModel\Item\Option\Collection as OptionCollection;
 
 /**
  * @SuppressWarnings(PHPMD.TooManyFields)
@@ -133,7 +133,7 @@ class CartTest extends \PHPUnit_Framework_TestCase
             ->setMethods(['getHasError'])
             ->getMock();
 
-        $this->optionCollection = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\Option\Collection')
+        $this->optionCollection = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\Option\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Wishlist/Test/Unit/CustomerData/WishlistTest.php b/app/code/Magento/Wishlist/Test/Unit/CustomerData/WishlistTest.php
index 15731269c6346c3364262332fb9fbf26d55b3169..24368820dc4df78f31f2bb407631a4a7caadd564 100644
--- a/app/code/Magento/Wishlist/Test/Unit/CustomerData/WishlistTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/CustomerData/WishlistTest.php
@@ -16,7 +16,7 @@ use Magento\Wishlist\CustomerData\Wishlist;
 use Magento\Wishlist\CustomerData\Wishlist as WishlistModel;
 use Magento\Wishlist\Helper\Data;
 use Magento\Wishlist\Model\Item;
-use Magento\Wishlist\Model\Resource\Item\Collection;
+use Magento\Wishlist\Model\ResourceModel\Item\Collection;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -113,7 +113,7 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
             ->method('loadLayout');
 
         /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $itemCollectionMock */
-        $itemCollectionMock = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\Collection')
+        $itemCollectionMock = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -290,7 +290,7 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
             ->method('loadLayout');
 
         /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $itemCollectionMock */
-        $itemCollectionMock = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\Collection')
+        $itemCollectionMock = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Wishlist/Test/Unit/Model/ItemCarrierTest.php b/app/code/Magento/Wishlist/Test/Unit/Model/ItemCarrierTest.php
index 8a068a6f877773c2da767f8a3d092094105722fb..222641d1c6ecf0651a304b527abd04fc0bd89f83 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Model/ItemCarrierTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Model/ItemCarrierTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Wishlist\Test\Unit\Model;
 
-use Magento\Wishlist\Model\Resource\Item\Collection;
+use Magento\Wishlist\Model\ResourceModel\Item\Collection;
 
 /**
  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
@@ -146,7 +146,7 @@ class ItemCarrierTest extends \PHPUnit_Framework_TestCase
             ->willReturn($wishlistId);
 
         /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
-        $collectionMock = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -319,7 +319,7 @@ class ItemCarrierTest extends \PHPUnit_Framework_TestCase
             ->willReturn($isOwner);
 
         /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
-        $collectionMock = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -516,7 +516,7 @@ class ItemCarrierTest extends \PHPUnit_Framework_TestCase
             ->willReturn($wishlistId);
 
         /** @var Collection|\PHPUnit_Framework_MockObject_MockObject $collectionMock */
-        $collectionMock = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\Collection')
+        $collectionMock = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Wishlist/Test/Unit/Model/ItemTest.php b/app/code/Magento/Wishlist/Test/Unit/Model/ItemTest.php
index f60558e70774c08948b9a894d4fe36dafbbf8512..bb301fc688eaea4e1f17d1100463d941f2ae1d35 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Model/ItemTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Model/ItemTest.php
@@ -19,7 +19,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
     protected $registry;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Url|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Catalog\Model\ResourceModel\Url|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $catalogUrl;
 
@@ -29,12 +29,12 @@ class ItemTest extends \PHPUnit_Framework_TestCase
     protected $productTypeConfig;
 
     /**
-     * @var \Magento\Wishlist\Model\Resource\Item|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Wishlist\Model\ResourceModel\Item|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
     /**
-     * @var \Magento\Wishlist\Model\Resource\Item\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Wishlist\Model\ResourceModel\Item\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collection;
 
@@ -54,7 +54,7 @@ class ItemTest extends \PHPUnit_Framework_TestCase
     protected $optionFactory;
 
     /**
-     * @var \Magento\Wishlist\Model\Resource\Item\Option\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Wishlist\Model\ResourceModel\Item\Option\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $itemOptFactory;
 
@@ -81,24 +81,25 @@ class ItemTest extends \PHPUnit_Framework_TestCase
         $this->date = $this->getMockBuilder('Magento\Framework\Stdlib\DateTime\DateTime')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->catalogUrl = $this->getMockBuilder('Magento\Catalog\Model\Resource\Url')
+        $this->catalogUrl = $this->getMockBuilder('Magento\Catalog\Model\ResourceModel\Url')
             ->disableOriginalConstructor()
             ->getMock();
         $this->optionFactory = $this->getMockBuilder('Magento\Wishlist\Model\Item\OptionFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $this->itemOptFactory = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\Option\CollectionFactory')
+        $this->itemOptFactory =
+            $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\Option\CollectionFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
         $this->productTypeConfig = $this->getMockBuilder('Magento\Catalog\Model\ProductTypes\ConfigInterface')
             ->getMock();
         $this->productRepository = $this->getMock('Magento\Catalog\Api\ProductRepositoryInterface');
-        $this->resource = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item')
+        $this->resource = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->collection = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\Collection')
+        $this->collection = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Wishlist/Test/Unit/Model/Resource/Item/CollectionTest.php b/app/code/Magento/Wishlist/Test/Unit/Model/ResourceModel/Item/CollectionTest.php
similarity index 94%
rename from app/code/Magento/Wishlist/Test/Unit/Model/Resource/Item/CollectionTest.php
rename to app/code/Magento/Wishlist/Test/Unit/Model/ResourceModel/Item/CollectionTest.php
index 76cde6900652050bdccd14e4d72a214189452efc..908fbde3a8f452f1da6947a7e95dd9df330a9325 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Model/Resource/Item/CollectionTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Model/ResourceModel/Item/CollectionTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Wishlist\Test\Unit\Model\Resource\Item;
+namespace Magento\Wishlist\Test\Unit\Model\ResourceModel\Item;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -53,7 +53,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('\'TestProductName\''));
 
         $resource = $this->getMock(
-            'Magento\Wishlist\Model\Resource\Item',
+            'Magento\Wishlist\Model\ResourceModel\Item',
             ['getConnection', 'getMainTable', 'getTableName', 'getTable'],
             [],
             '',
@@ -78,7 +78,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue('testMainTableName'));
 
         $catalogConfFactory = $this->getMock(
-            'Magento\Catalog\Model\Resource\ConfigFactory',
+            'Magento\Catalog\Model\ResourceModel\ConfigFactory',
             ['create'],
             [],
             '',
@@ -86,7 +86,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
         );
 
         $catalogConf = $this->getMock(
-            'Magento\Catalog\Model\Resource\Config',
+            'Magento\Catalog\Model\ResourceModel\Config',
             ['getEntityTypeId'],
             [],
             '',
@@ -162,7 +162,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($store));
 
         $this->collection = $this->objectManager->getObject(
-            'Magento\Wishlist\Model\Resource\Item\Collection',
+            'Magento\Wishlist\Model\ResourceModel\Item\Collection',
             [
                 'resource' => $resource,
                 'catalogConfFactory' => $catalogConfFactory,
diff --git a/app/code/Magento/Wishlist/Test/Unit/Model/WishlistTest.php b/app/code/Magento/Wishlist/Test/Unit/Model/WishlistTest.php
index 1c0f04044cc528c51590e34fa737ed1b7edbfa9f..ff4aff55d5425e5a38e018f139eb2ccbd69ff2b3 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Model/WishlistTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Model/WishlistTest.php
@@ -28,12 +28,12 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
     protected $helper;
 
     /**
-     * @var \Magento\Wishlist\Model\Resource\Wishlist|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Wishlist\Model\ResourceModel\Wishlist|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
     /**
-     * @var \Magento\Wishlist\Model\Resource\Wishlist\Collection|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Wishlist\Model\ResourceModel\Wishlist\Collection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $collection;
 
@@ -53,7 +53,7 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
     protected $itemFactory;
 
     /**
-     * @var \Magento\Wishlist\Model\Resource\Item\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Wishlist\Model\ResourceModel\Item\CollectionFactory|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $itemsFactory;
 
@@ -104,10 +104,10 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
         $this->helper = $this->getMockBuilder('Magento\Wishlist\Helper\Data')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->resource = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Wishlist')
+        $this->resource = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Wishlist')
             ->disableOriginalConstructor()
             ->getMock();
-        $this->collection = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Wishlist\Collection')
+        $this->collection = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Wishlist\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->storeManager = $this->getMockBuilder('Magento\Store\Model\StoreManagerInterface')
@@ -119,7 +119,7 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
-        $this->itemsFactory = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\CollectionFactory')
+        $this->itemsFactory = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\CollectionFactory')
             ->disableOriginalConstructor()
             ->setMethods(['create'])
             ->getMock();
@@ -239,7 +239,7 @@ class WishlistTest extends \PHPUnit_Framework_TestCase
             ->method('getProduct')
             ->will($this->returnValue($product));
 
-        $items = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Item\Collection')
+        $items = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Item\Collection')
             ->disableOriginalConstructor()
             ->getMock();
 
diff --git a/app/code/Magento/Wishlist/Test/Unit/Observer/AddToCartTest.php b/app/code/Magento/Wishlist/Test/Unit/Observer/AddToCartTest.php
index 2c0117e209ab4933f3ec307981477afa4fbaf008..1fac584a06eec682d459f09f1eeacf6429346b70 100644
--- a/app/code/Magento/Wishlist/Test/Unit/Observer/AddToCartTest.php
+++ b/app/code/Magento/Wishlist/Test/Unit/Observer/AddToCartTest.php
@@ -108,7 +108,7 @@ class AddToCartTest extends \PHPUnit_Framework_TestCase
         $response = $this->getMockBuilder('Magento\Framework\App\ResponseInterface')
             ->setMethods(['setRedirect'])
             ->getMockForAbstractClass();
-        $wishlists = $this->getMockBuilder('Magento\Wishlist\Model\Resource\Wishlist\Collection')
+        $wishlists = $this->getMockBuilder('Magento\Wishlist\Model\ResourceModel\Wishlist\Collection')
             ->disableOriginalConstructor()
             ->getMock();
         $loadedWishlist = $this->getMockBuilder('Magento\Wishlist\Model\Wishlist\Item')
diff --git a/app/code/Magento/Wishlist/composer.json b/app/code/Magento/Wishlist/composer.json
index 0531ad4cc0b0b980d732566666438e89ec7d56c6..1fa74f94a85710bd0c3f1cafce2685eeb5cfd087 100644
--- a/app/code/Magento/Wishlist/composer.json
+++ b/app/code/Magento/Wishlist/composer.json
@@ -20,7 +20,8 @@
         "magento/module-configurable-product": "1.0.0-beta",
         "magento/module-downloadable": "1.0.0-beta",
         "magento/module-bundle": "1.0.0-beta",
-        "magento/module-cookie": "1.0.0-beta"
+        "magento/module-cookie": "1.0.0-beta",
+        "magento/module-wishlist-sample-data": "Sample Data version:1.0.0-beta"
     },
     "type": "magento2-module",
     "version": "1.0.0-beta",
diff --git a/app/code/Magento/Wishlist/etc/di.xml b/app/code/Magento/Wishlist/etc/di.xml
index c4932716e617e61732533cbe18a5a6e8b06d2752..04301d39ec09367a5dd6dd82301121e09d39e6e2 100644
--- a/app/code/Magento/Wishlist/etc/di.xml
+++ b/app/code/Magento/Wishlist/etc/di.xml
@@ -8,9 +8,9 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
     <preference for="\Magento\Wishlist\Model\AuthenticationStateInterface" type="\Magento\Wishlist\Model\AuthenticationState" />
     <preference for="\Magento\Wishlist\Controller\WishlistProviderInterface" type="\Magento\Wishlist\Controller\WishlistProvider" />
-    <type name="Magento\Wishlist\Model\Resource\Item\Collection\Grid">
+    <type name="Magento\Wishlist\Model\ResourceModel\Item\Collection\Grid">
         <arguments>
-            <argument name="resource" xsi:type="object">Magento\Wishlist\Model\Resource\Item</argument>
+            <argument name="resource" xsi:type="object">Magento\Wishlist\Model\ResourceModel\Item</argument>
         </arguments>
     </type>
     <type name="Magento\Wishlist\Helper\Data">
diff --git a/app/code/Magento/Wishlist/etc/events.xml b/app/code/Magento/Wishlist/etc/events.xml
index 0746916d8b5212a1107495dd49d84b254a078b78..90890d1239abfd7e8a310b4dbc8612dba11122eb 100644
--- a/app/code/Magento/Wishlist/etc/events.xml
+++ b/app/code/Magento/Wishlist/etc/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="checkout_cart_update_items_before">
-        <observer name="wishlist" instance="Magento\Wishlist\Observer\CartUpdateBefore" method="execute" />
+        <observer name="wishlist" instance="Magento\Wishlist\Observer\CartUpdateBefore" />
     </event>
     <event name="checkout_cart_add_product_complete">
-        <observer name="wishlist" instance="Magento\Wishlist\Observer\AddToCart" method="execute" />
+        <observer name="wishlist" instance="Magento\Wishlist\Observer\AddToCart" />
     </event>
 </config>
diff --git a/app/code/Magento/Wishlist/etc/frontend/events.xml b/app/code/Magento/Wishlist/etc/frontend/events.xml
index ec0728b0d199f7e703b270628b2d0faf84c2987f..ee256bb7e9bd8451011f7f2a6b9ac40074625d0a 100644
--- a/app/code/Magento/Wishlist/etc/frontend/events.xml
+++ b/app/code/Magento/Wishlist/etc/frontend/events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="customer_login">
-        <observer name="wishlist" instance="Magento\Wishlist\Observer\CustomerLogin" method="execute" />
+        <observer name="wishlist" instance="Magento\Wishlist\Observer\CustomerLogin" />
     </event>
     <event name="customer_logout">
-        <observer name="wishlist" instance="Magento\Wishlist\Observer\CustomerLogout" method="execute" />
+        <observer name="wishlist" instance="Magento\Wishlist\Observer\CustomerLogout" />
     </event>
 </config>
diff --git a/app/code/Magento/Wishlist/view/adminhtml/layout/customer_index_wishlist.xml b/app/code/Magento/Wishlist/view/adminhtml/layout/customer_index_wishlist.xml
index 12fd177cc24a06a822b6f81bce518adf014f3cb2..ed8325193339b1c4d8b8f5be41a014d584f17a31 100644
--- a/app/code/Magento/Wishlist/view/adminhtml/layout/customer_index_wishlist.xml
+++ b/app/code/Magento/Wishlist/view/adminhtml/layout/customer_index_wishlist.xml
@@ -9,7 +9,7 @@
     <container name="root">
         <block class="Magento\Backend\Block\Widget\Grid" name="customer.wishlist.edit.tab">
             <arguments>
-                <argument name="dataSource" xsi:type="object">Magento\Wishlist\Model\Resource\Item\Collection\Grid</argument>
+                <argument name="dataSource" xsi:type="object">Magento\Wishlist\Model\ResourceModel\Item\Collection\Grid</argument>
                 <argument name="id" xsi:type="string">wishlistGrid</argument>
                 <argument name="use_ajax" xsi:type="string">true</argument>
                 <argument name="default_sort" xsi:type="string">added_at</argument>
diff --git a/app/code/Magento/Wishlist/view/adminhtml/templates/customer/edit/tab/wishlist.phtml b/app/code/Magento/Wishlist/view/adminhtml/templates/customer/edit/tab/wishlist.phtml
index ff2714c07c92ad5a0607ecda388e5cb17f6b770c..0262fe571fd4a6094a5ee9c007f1831f97dde78c 100644
--- a/app/code/Magento/Wishlist/view/adminhtml/templates/customer/edit/tab/wishlist.phtml
+++ b/app/code/Magento/Wishlist/view/adminhtml/templates/customer/edit/tab/wishlist.phtml
@@ -11,30 +11,31 @@
  */
 ?>
 <script>
-require([
-    "prototype",
-    "Magento_Catalog/catalog/product/composite/configure"
-], function(){
+    require([
+            "Magento_Ui/js/modal/confirm",
+            "prototype",
+            "Magento_Catalog/catalog/product/composite/configure"
+        ], function(confirm){
 
 //<!--
-wishlistControl = {
-    reload: function (urlParams) {
-        if (!urlParams) {
-            urlParams = '';
-        }
-        var url = <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.url + '?ajax=true' + urlParams;
-        new Ajax.Updater(
-            <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.containerId,
-            url,
-            {
-                parameters: {form_key: FORM_KEY},
-                onComplete: <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.initGrid.bind(<?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>),
-                evalScripts:true
-            }
-        );
-    },
+            wishlistControl = {
+                reload: function (urlParams) {
+                    if (!urlParams) {
+                        urlParams = '';
+                    }
+                    var url = <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.url + '?ajax=true' + urlParams;
+                    new Ajax.Updater(
+                        <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.containerId,
+                        url,
+                        {
+                            parameters: {form_key: FORM_KEY},
+                            onComplete: <?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>.initGrid.bind(<?php /* @escapeNotVerified */ echo $block->getJsObjectName() ?>),
+                        evalScripts:true
+                }
+            );
+        },
 
-    configureItem: function (itemId) {
+        configureItem: function (itemId) {
         productConfigure.setOnLoadIFrameCallback('wishlist', this.cbOnLoadIframe.bind(this));
         productConfigure.showItemConfiguration('wishlist', itemId);
         return false;
@@ -48,22 +49,27 @@ wishlistControl = {
     },
 
     removeItem: function (itemId) {
-        if(!confirm('<?php /* @escapeNotVerified */ echo __('Are you sure you want to remove this item?') ?>')) {
-            return false;
-        }
-        this.reload('&delete=' + itemId);
-        return false;
-    }
-}
+        var self = this;
 
-productConfigure.addListType(
-    'wishlist',
-    {
-        urlFetch: '<?php /* @escapeNotVerified */ echo $block->getUrl('customer/wishlist_product_composite_wishlist/configure') ?>',
-        urlConfirm: '<?php /* @escapeNotVerified */ echo $block->getUrl('customer/wishlist_product_composite_wishlist/update') ?>'
+        confirm({
+            content: '<?php /* @escapeNotVerified */ echo __('Are you sure you want to remove this item?') ?>',
+            actions: {
+                confirm: function () {
+                    self.reload('&delete=' + itemId);
+                }
+            }
+        });
+    }
     }
-);
-//-->
 
-});
+    productConfigure.addListType(
+        'wishlist',
+        {
+            urlFetch: '<?php /* @escapeNotVerified */ echo $block->getUrl('customer/wishlist_product_composite_wishlist/configure') ?>',
+            urlConfirm: '<?php /* @escapeNotVerified */ echo $block->getUrl('customer/wishlist_product_composite_wishlist/update') ?>'
+        }
+    );
+    //-->
+
+    });
 </script>
diff --git a/app/code/Magento/Wishlist/view/frontend/web/wishlist.js b/app/code/Magento/Wishlist/view/frontend/web/wishlist.js
index bb697c1fa5259c12f20b4ac550b0d49f4f83ec85..a831603f9d1b4f8cc26ea81ccc841d8dd8a76746 100644
--- a/app/code/Magento/Wishlist/view/frontend/web/wishlist.js
+++ b/app/code/Magento/Wishlist/view/frontend/web/wishlist.js
@@ -7,10 +7,12 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
     'jquery/ui',
     'mage/validation/validation',
+
     'mage/dataPost'
-], function ($, mageTemplate) {
+], function ($, mageTemplate, alert) {
     'use strict';
 
     $.widget('mage.wishlist', {
@@ -152,7 +154,9 @@ define([
                     if ($(form).find('input:checkbox:checked').length) {
                         form.submit();
                     } else {
-                        alert(this.options.checkBoxValidationMessage);
+                        alert({
+                            content: this.options.checkBoxValidationMessage
+                        });
                     }
                 }, this)
             });
diff --git a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_steps-wizard.less b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_steps-wizard.less
index f09454d5862d66eebae899491dd4c32879e7d5c4..4cd621361e3b64df0cef4771ebf137359bbd9f6c 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_steps-wizard.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/components/_steps-wizard.less
@@ -72,8 +72,4 @@
             margin: @indent__base 0;
         }
     }
-
-    .admin__data-grid-pager-wrap {
-        float: right;
-    }
 }
diff --git a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/steps/_bulk-images.less b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/steps/_bulk-images.less
index 60203c2aa302166eadb59587d569f3d9aa397e10..d1f298df84ee6e03b39046c82e39d25475b8cba3 100644
--- a/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/steps/_bulk-images.less
+++ b/app/design/adminhtml/Magento/backend/Magento_ConfigurableProduct/web/css/source/module/steps/_bulk-images.less
@@ -361,16 +361,6 @@
     top: 5px;
 }
 
-.image-pointer {
-    background: url(../Magento_Backend/images/gallery-image-panel-corner.png) no-repeat;
-    height: 15px;
-    left: 50%;
-    margin-left: -14px;
-    position: absolute;
-    top: -11px;
-    width: 28px;
-}
-
 .image-panel-controls,
 .image-panel-preview {
     float: left;
@@ -431,28 +421,6 @@
     width: 100%;
 }
 
-.image-panel {
-    .action-close {
-        padding: 0;
-        position: absolute;
-        right: 29px;
-        top: 17px;
-        .lib-icon-font(
-        @_icon-font-content: @icon-close-mage__content,
-        @_icon-font: @icons-admin__font-name,
-        @_icon-font-size: 2rem,
-        @_icon-font-color: @color-brownie-vanilla,
-        @_icon-font-color-hover: @color-brownie-vanilla
-        );
-        span {
-            &:extend(.abs-visually-hidden all);
-        }
-        &:active {
-            padding: 0;
-        }
-    }
-}
-
 //
 //  Custom Multiselect
 //  _____________________________________________
diff --git a/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
new file mode 100644
index 0000000000000000000000000000000000000000..7f4e8a590acf9c902b378a441875ac8994a5af14
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/Magento_ProductVideo/web/css/source/_module.less
@@ -0,0 +1,236 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+.image.video-placeholder {
+    display: inline-block;
+    position: relative;
+    text-decoration: none;
+    &:before {
+        background: url(../Magento_ProductVideo/images/gallery-sprite.png) no-repeat left bottom;
+        content: '';
+        height: 49px;
+        left: 50%;
+        margin-left: -24px;
+        opacity: 0.7;
+        position: absolute;
+        top: 18px;
+        width: 49px;
+        z-index: 1;
+    }
+    .image-placeholder-text {
+        font-weight: 400;
+    }
+}
+
+//re-arrange checkboxes fields in slideout video panel (base, small image etc)
+.admin__field {
+    &.field-video_image,
+    &.field-video_small_image,
+    &.field-video_thumbnail,
+    &.field-video_swatch_image,
+    &.field-new_video_disabled {
+        .admin__field-control {
+            #mix-grid .column(3, @field-grid__columns);
+            float: left;
+            margin-left: 80px;
+            position: relative;
+            input {
+                float: right;
+            }
+        }
+        .admin__field-label {
+            left: 0;
+            margin-left: 35%;
+            padding-left: 45px;
+            position: absolute;
+            width: 250px;
+            &:before {
+                content: none;
+            }
+            span {
+                float: left;
+            }
+        }
+    }
+    &.field-new_video_disabled {
+        margin-top: 32px;
+    }
+    &.field.field-new_video_screenshot {
+        margin-bottom: 5px;
+    }
+    &.field.field-new_video_screenshot_preview {
+        margin-bottom: 50px;
+    }
+    &.field-roleLabel {
+        height: 0;
+        .admin__field-control {
+            #mix-grid .column(3, @field-grid__columns);
+            float: left;
+            margin-left: 80px;
+            position: relative;
+            .control-value {
+                color: @color-black;
+                font-family: 'Open Sans', @font-family__sans-serif;
+                font-size: @font-size__s + 0.2;
+                font-weight: @font-weight__semibold;
+                float: right;
+                position: relative;
+                right: 50px;
+                top: 21px;
+            }
+        }
+    }
+}
+
+.admin__scope-old {
+    .fieldset .admin__field {
+        &.field-video_image,
+        &.field-video_small_image,
+        &.field-video_thumbnail,
+        &.field-video_swatch_image {
+            margin-bottom: 20px;
+        }
+    }
+    .gallery .image .action-make-base,
+    .images .image .action-make-base {
+        .lib-button(
+            @_button-background: transparent,
+            @_button-border: none,
+            @_button-background-hover: transparent,
+            @_button-border-hover: none,
+            @_button-background-active: transparent,
+            @_button-border-active: none,
+            @_button-font-content: '\e63b',
+            @_button-icon-use: true,
+            @_button-icon-font: 'Admin Icons',
+            @_button-icon-font-text-hide: true,
+            @_button-icon-font-size: @font-size__xl,
+            @_button-icon-font-color: @color-gray62,
+            @_button-icon-font-color-hover: @color-gray52,
+            @_button-icon-font-color-active: @color-gray52,
+            @_button-margin: 0
+        );
+        bottom: 9px;
+        left: auto;
+        position: absolute;
+        right: 9px;
+        width: 0 !important;
+        &:before {
+            left: 16px;
+            position: absolute;
+            top: -2px;
+        }
+    }
+    .base-image .image-label {
+        display: block;
+    }
+}
+
+.preview_hidden_image_input_button {
+    display: none;
+}
+
+.video-item {
+    position: relative;
+    &:after {
+        background: url(../Magento_ProductVideo/images/gallery-sprite.png) bottom left;
+        bottom: 0;
+        content: '';
+        height: 40px;
+        left: 0;
+        margin: auto;
+        position: absolute;
+        right: 0;
+        top: 10px;
+        width: 49px;
+        z-index: 3;
+    }
+}
+
+//style slideout panel add video
+.mage-new-video-dialog {
+    form.admin__scope-old {
+        float: left;
+        width: 65%;
+    }
+    .video-player-sidebar {
+        width: 34.99999%;
+        float: left;
+    }
+    .video-player-container {
+        width: 100%;
+        height: 20vw;
+        margin-bottom: 30px;
+        border: 1px solid #e3e3e3;
+        position: relative;
+        &:after {
+            content: '';
+            position: absolute;
+            top: 0;
+            left: 0;
+            right: 0;
+            bottom: 0;
+            margin: auto;
+            width: 93px;
+            height: 60px;
+            background: url(../Magento_ProductVideo/images/camera.png) no-repeat center;
+            z-index: 1;
+        }
+    }
+    .video-information {
+        margin-bottom: 7px;
+        display: none;
+        &:after {
+            content: "";
+            visibility: hidden;
+            display: block;
+            height: 0;
+            clear: both;
+        }
+        label {
+            font-family: 'Open Sans', @font-family__sans-serif;
+            font-size: @font-size__s + 0.2;
+            font-weight: @font-weight__semibold;
+            display: block;
+            width: 25%;
+            float: left;
+            text-align: right;
+        }
+        span {
+            font-family: 'Open Sans', @font-family__sans-serif;
+            font-size: @font-size__s + 0.2;
+            font-weight: @font-weight__light;
+            display: block;
+            width: 74.9999%;
+            float: left;
+            padding-left: 20px;
+        }
+    }
+    .product-video {
+        width: 100%;
+        z-index: 20;
+        height: 100%;
+        position: relative;
+    }
+}
+
+.image.video-placeholder > button[data-role="add-video-button"],
+.image.video-placeholder > button {
+    background: transparent;
+    border: 0;
+    height: 100%;
+    position: relative;
+    width: 100%;
+    z-index: 10;
+}
+
+.add-video-button-container {
+    float: right;
+    margin-bottom: 10px;
+}
+
+.image.base-image:hover .image-label {
+    display: none;
+}
diff --git a/app/design/adminhtml/Magento/backend/Magento_Tax/web/css/source/_module.less b/app/design/adminhtml/Magento/backend/Magento_Tax/web/css/source/_module.less
index da6de0923e8d2b21689e683e1ecc4099c6d636fc..cbea840b44ecd69d6dfb00aff290d0e17857be1d 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Tax/web/css/source/_module.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Tax/web/css/source/_module.less
@@ -7,3 +7,7 @@
     -webkit-appearance: none;
     &:extend(.action-default, button all);
 }
+
+.import-export-tax-rates {
+    padding-top: @indent__base;
+}
diff --git a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/_data-grid.less b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/_data-grid.less
index 50d58b39e6e259760e09a629c5f1b73dac11c1cc..3b4404bc0da1e9336efa2b62783dfb7c48e1bfa0 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/_data-grid.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/_data-grid.less
@@ -313,6 +313,11 @@ body._in-resize {
         text-align: center;
         vertical-align: middle;
     }
+    .data-grid-onoff-label {
+        > span {
+            .lib-visually-hidden();
+        }
+    }
     .data-grid-actions-cell {
         padding-left: @data-grid-cell__padding-horizontal * 2;
         padding-right: @data-grid-cell__padding-horizontal * 2;
diff --git a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/data-grid/data-grid-header/_data-grid-pager.less b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/data-grid/data-grid-header/_data-grid-pager.less
index a30087cb5a6972ca99f7636d3a4fe26e9ee59219..ec5761b7b2a0c70151d46df186d13f1aeb89ad97 100644
--- a/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/data-grid/data-grid-header/_data-grid-pager.less
+++ b/app/design/adminhtml/Magento/backend/Magento_Ui/web/css/source/module/data-grid/data-grid-header/_data-grid-pager.less
@@ -17,6 +17,7 @@
 
 .admin__data-grid-pager-wrap {
     text-align: right;
+    float: right;
 }
 
 .admin__data-grid-pager {
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/_navigation-bar.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/_navigation-bar.less
index e5749d613096c500134078b17f75d4e8500eadea..b0032568136d083c90d044560d9a55d2b0b919ee 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/_navigation-bar.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/_navigation-bar.less
@@ -40,11 +40,12 @@
 //  ---------------------------------------------
 
 .nav {
+    .extend__clearer();
     background-color: @nav__background-color;
     border-bottom: 1px solid @nav__border-color;
     border-top: 1px solid @nav__border-color;
-    .extend__clearer();
     display: none;
+    margin-bottom: @nav-bar__indent-top;
     padding: @nav-bar-dot__size @nav__indent-right 0 0;
 }
 
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/tooltips/_tooltips.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/tooltips/_tooltips.less
index 17e40244032bf28677b7821880ea2e4dddbc8c16..f364351ed02cc8299666470f95aec39f9df9fa43 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/tooltips/_tooltips.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/components/tooltips/_tooltips.less
@@ -54,6 +54,9 @@
         margin-left: -(@tooltip-arrow__size / 2);
         padding: 0 @tooltip-arrow__size;
     }
+    p:last-child {
+        margin-bottom: 0;
+    }
 }
 
 //  Wrapper for the tooltip content
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_buttons.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_buttons.less
index c3891562847a89a4bbaad15d987e6c9bc99b4565..3d18910a59ed8c139b8bdb629147f5ef647bd96f 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_buttons.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_buttons.less
@@ -103,6 +103,7 @@
     background-color: @btn-prime__background-color;
     color: @btn-prime__color;
     text-shadow: 1px 1px 0 rgba(0, 0, 0, .25);
+    &:focus,
     &:hover {
         .lib-background-gradient(
         @_background-gradient: true,
@@ -112,8 +113,7 @@
         );
         color: @btn-prime__color;
     }
-    &:active,
-    &:focus {
+    &:active {
         .lib-background-gradient(
         @_background-gradient: true,
         @_background-gradient-direction: horizontal,
@@ -158,7 +158,6 @@
         .ie9 & {
             background-color: @btn-secondary__disabled__background-color;
         }
-        &:hover,
         &:active {
             .ie9 & {
                 background-color: @btn-secondary__disabled__background-color;
@@ -200,6 +199,7 @@
             left: 100%;
             margin-left: -@triangle__base__size + .1;
         }
+        &:focus,
         &:hover {
             &:after {
                 border-left-color: @btn__base__hover__background-color;
@@ -224,6 +224,7 @@
                     border-color: transparent transparent transparent @btn__base__disabled__background-color;
                 }
             }
+            &:focus,
             &:hover,
             &:active {
                 &:after {
@@ -239,6 +240,7 @@
         &:after {
             border-color: transparent transparent transparent @btn-prime__background-color;
         }
+        &:focus,
         &:hover {
             &:after {
                 border-left-color: @btn-prime__color-gradient-end;
@@ -288,6 +290,7 @@
             margin-right: -@triangle__base__size + .1;
             right: 100%;
         }
+        &:focus,
         &:hover {
             &:after {
                 border-right-color: @btn__base__hover__background-color;
@@ -326,6 +329,7 @@
         &:after {
             border-color: transparent @btn-prime__background-color transparent transparent;
         }
+        &:focus,
         &:hover {
             &:after {
                 border-right-color: @btn-prime__color-gradient-start;
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_structures.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_structures.less
index 5a63e7806784d3771b82f2015251acfa10ea8e56..0dd2a8ed52b499dd13aecea805d51ff779efd5dc 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_structures.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_structures.less
@@ -3,6 +3,9 @@
 //  * See COPYING.txt for license details.
 //  */
 
+body:not([class]) {
+    min-width: 0;
+}
 .container {
     display: block;
     margin: 0 auto 4rem;
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_variables.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_variables.less
index 7f63e9a9933dbcc5a6a54458ae48180930e29105..7b9cc9eb8d254bfdb09933f829aa413d3381e616 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_variables.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/lib/_variables.less
@@ -156,7 +156,7 @@
 //  ---------------------------------------------
 
 @container__width: 100rem;
-@container__indent: 2rem;
+@container__indent: 0;
 
 @content__indent: @indent__l;
 
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less
index 542d96aedebca95ddfa5a3478fdf0330d663bfc0..cde931e2c71e1a17e0212f5012b16dc77c9ad40a 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/pages/_readiness-check.less
@@ -10,7 +10,7 @@
 //  Sizes
 
 @readiness-check-side__width: 22rem;
-@readiness-check-content__indent: 7.5rem;
+@readiness-check-content__indent: 5.7rem;
 
 //
 //  Common
@@ -18,6 +18,12 @@
 
 .readiness-check-item {
     margin-bottom: 4rem;
+    min-height: 2.5rem;
+    .spinner {
+        font-size: 2.5rem;
+        float: left;
+        margin: -.4rem 0 0 1.7rem;
+    }
 }
 
 .readiness-check-title {
@@ -49,7 +55,7 @@
 
 .readiness-check-icon {
     float: left;
-    margin-left: 2rem;
+    margin-left: 1.7rem;
     margin-top: .7rem;
 }
 
diff --git a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less
index 963c6b01b9f3bde479da1ab0390991a729aab6d4..c2bbaf8f432b9a66faca168a78d9cf5c36f3da39 100644
--- a/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less
+++ b/app/design/adminhtml/Magento/backend/web/app/setup/styles/less/setup.less
@@ -98,7 +98,6 @@
 //  Updater pages
 @import '../../../updater/styles/less/pages/_common.less';
 @import '../../../updater/styles/less/pages/_home.less';
-@import '../../../updater/styles/less/pages/_readiness-check.less';
 @import '../../../updater/styles/less/pages/_component-manager.less';
 @import '../../../updater/styles/less/pages/_login.less';
 
diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_header.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_header.less
index 5e833831229c13621655e342925fd0545fc49ed8..090995768c03edd9064417fbdec0aabc3d92f4dc 100644
--- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_header.less
+++ b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/components/_header.less
@@ -29,6 +29,9 @@
         left: @page-header__indent-horizontal;
         position: absolute;
         right: @page-header__indent-horizontal;
+        .container & {
+            content: normal;
+        }
     }
     .message {
         margin-bottom: 1.8rem;
@@ -40,8 +43,16 @@
     .admin__action-dropdown {
         transition: none;
     }
+    .container & {
+        margin-bottom: 0;
+    }
 }
 
 .page-title-wrapper {
     margin-top: 1.1rem;
+    .container & {
+        background: url('@{path-to-pub}images/logo.svg') no-repeat 0 0;
+        min-height: 41px;
+        padding: 4px 0 0 45px;
+    }
 }
\ No newline at end of file
diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_component-manager.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_component-manager.less
index e80fc6c541be224f41ca2886ca44f24ecc675e6e..6beeebace63639364c4d53c9bdf80cd3daf3ded7 100644
--- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_component-manager.less
+++ b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_component-manager.less
@@ -25,7 +25,7 @@
     border: 1px solid @component-manager-wrap__border-color;
     margin: 0 0 @indent__xl;
     .componenet-manager-account {
-        .font-size(14);
+        .lib-font-size(14);
         float: right;
         padding: .6rem 0 0;
         .sign-in-out {
@@ -60,7 +60,7 @@
         margin: 0 0 1.5rem;
     }
     .item-number {
-        .font-size(60);
+        .lib-font-size(60);
         line-height: .8;
         margin: 0 0 1.5rem;
     }
@@ -70,7 +70,7 @@
     .item-install {
         margin: 0 0 @indent__base;
         .btn {
-            .button-as-link(
+            .lib-button-as-link(
             @_link-color: @link__color,
             @_link-color-hover: @link__hover__color,
             @_line-height: @line-height__base,
@@ -78,7 +78,7 @@
             @_margin: 0,
             @_padding: 0
             );
-            .font-size(14);
+            .lib-font-size(14);
             font-weight: @font-weight__regular;
             &.disabled {
                 text-decoration: none;
diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_login.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_login.less
index 0249652400a8599a010d7e83176136f679f52852..8c41798f4110d082e592f85a009f676f2136153f 100644
--- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_login.less
+++ b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_login.less
@@ -12,7 +12,7 @@
     padding: 0 10% @indent__xl;
 
     .legend {
-        .font-size(26);
+        .lib-font-size(26);
         color: @color-phoenix;
         float: left;
         font-weight: @font-weight__light;
@@ -25,7 +25,7 @@
         }
     }
     .login-header {
-        .font-size(34);
+        .lib-font-size(34);
         font-weight: @font-weight__light;
         margin: 0 0 @indent__base;
         span {
diff --git a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_readiness-check.less b/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_readiness-check.less
deleted file mode 100644
index 2b6356f5f41a9c74b9227870dca54a48004baf67..0000000000000000000000000000000000000000
--- a/app/design/adminhtml/Magento/backend/web/app/updater/styles/less/pages/_readiness-check.less
+++ /dev/null
@@ -1,23 +0,0 @@
-// /**
-//  * Copyright © 2015 Magento. All rights reserved.
-//  * See COPYING.txt for license details.
-//  */
-
-//
-//  Upgrade -> Pages -> Readiness Check
-//  _____________________________________________
-
-.readiness-check-item {
-    padding-top: .3rem;
-}
-
-.readiness-check-icon {
-    margin-left: 2.4rem;
-    margin-top: -0.1rem;
-    &.icon-success {
-        font-size: 2rem;
-    }
-    &.icon-failed {
-        font-size: 1.6rem;
-    }
-}
\ No newline at end of file
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_components.less b/app/design/adminhtml/Magento/backend/web/css/source/_components.less
index a9ee8f523cc024a0cf14676317158fd8175d58a2..b376a1a2bd201c0c7281bc9cd8c01f4ccf392114 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_components.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_components.less
@@ -13,3 +13,4 @@
 @import 'components/_popups.less';
 @import 'components/_modals.less';
 @import 'components/_modals_extend.less';
+@import 'components/_file-insertion.less';
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_extends.less b/app/design/adminhtml/Magento/backend/web/css/source/_extends.less
index 84563621bf9f59594e9c28f4c26f81c88182f530..e5bad53622adf6f3f1b65534bd08647fdc6f8366 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_extends.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_extends.less
@@ -107,7 +107,7 @@
     @icon-gripper__content,
     @_icon-font: @icons-admin__font-name,
     @_icon-font-size: 1.8rem,
-    @_icon-font-color: @image-gallery-icons__color,
-    @_icon-font-color-hover: @image-gallery-icons__hover__color
+    @_icon-font-color: @color-gray62,
+    @_icon-font-color-hover: @color-gray52
     );
 }
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/_forms.less b/app/design/adminhtml/Magento/backend/web/css/source/_forms.less
index 2e18751ca49556d148c3c8eb2689908a5956ebec..8e1e484f69ac804738d756db855b4a2f09ab7295 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/_forms.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/_forms.less
@@ -7,3 +7,4 @@
 @import 'forms/_controls.less';
 @import 'forms/_fields.less';
 @import 'forms/_temp.less';
+@import 'forms/_form-wysiwyg.less';
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
new file mode 100644
index 0000000000000000000000000000000000000000..cdc66d477555dc532e9f3d9d264c6df18ad0a131
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_file-insertion.less
@@ -0,0 +1,49 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Block 'Insert File'
+//  _________________________________________
+
+.contents-uploader {
+    margin: 0 0 @indent__base;
+    .fileinput-button {
+        cursor: pointer;
+        display: inline-block;
+        float: none;
+        vertical-align: middle;
+        span {
+            display: none;
+        }
+        input {
+            -moz-transforms: none;
+            border: none;
+            opacity: 1;
+            position: static;
+        }
+    }
+}
+
+.file-row {
+    border: 1px solid @color-gray68;
+    margin: @indent__xs 0;
+    padding: 2px;
+}
+
+.filecnt {
+    border: 1px solid @color-gray68;
+    cursor: pointer;
+    display: inline-block;
+    margin: 0 @indent__xs 15px 0;
+    overflow: hidden;
+    padding: 3px;
+    width: 100px;
+    &.selected {
+        border-color: @color-blue-dodger;
+    }
+    p {
+        text-align: center;
+    }
+}
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
index 0ea7e84b1447fd2084d24fe1bf1259959f6ca77c..babbdf33f37c48d257f8b9ab055cc49154831065 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_modals_extend.less
@@ -21,6 +21,13 @@
 @modal-action-close__font-size: 2rem;
 @modal-action-close__active__font-size: 1.8rem;
 @modal-action-close__hover__color: darken(@color-brownie-vanilla, 10%);
+@modal-popup-footer-button__margin: 2rem;
+@modal-popup-footer-button__padding: 1.4rem;
+@modal-popup-footer-button__font-size: 1.5rem;
+@modal-popup-footer-button__color: @color-brownie;
+@modal-popup-colored__background: @color-lazy-sun;
+@modal-popup-colorless__background: @color-white;
+@modal-prompt-message__padding: 2rem;
 
 //
 
@@ -31,6 +38,7 @@
         position: absolute;
         right: 0;
         top: 0;
+        z-index: 1;
         &:active {
             transform: none;
             &:before {
@@ -49,10 +57,74 @@
 }
 
 .modal-popup {
+    &.prompt {
+        .prompt-message {
+            padding: @modal-prompt-message__padding 0;
+            input {
+                width: 100%;
+            }
+        }
+    }
+    &.confirm,
+    &.prompt {
+        .modal-inner-wrap {
+            .message {
+                background: @modal-popup-colorless__background;
+            }
+        }
+    }
+    &.modal-system-messages {
+        .modal-inner-wrap {
+            background: @modal-popup-colored__background;
+        }
+    }
+    &._image-box {
+        .modal-inner-wrap {
+            margin: 5rem auto;
+            max-width: @modal-popup-image-box__max-width;
+            position: static;
+        }
+        .thumbnail-preview {
+            padding-bottom: @indent__l;
+            text-align: center;
+            .thumbnail-preview-image-block {
+                border: 1px solid @modal-popup-image-box__border-color;
+                margin: 0 auto @indent__base;
+                max-width: @modal-popup-image-box-preview__max-width;
+                padding: @indent__base;
+            }
+            .thumbnail-preview-image {
+                max-height: @modal-popup-image-box-preview-image__max-height;
+            }
+        }
+    }
+
     .modal-title {
         font-size: @modal-popup-title__font-size;
         margin-right: @modal-popup-title__font-size + @modal-popup__padding + 1rem;
     }
+
+    .action-close {
+        padding: @modal-popup__padding @modal-popup__padding;
+        &:active{
+            padding-top: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 3;
+            padding-right: @modal-popup__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 3;
+        }
+    }
+
+    .modal-footer {
+        text-align: right;
+        padding-top: @modal-slide__padding;
+
+        .action-primary {
+            &:extend(.abs-action-secondary all);
+            &:extend(.abs-action-l all);
+        }
+        .action-secondary {
+            &:extend(.abs-action-tertiary all);
+            &:extend(.abs-action-l all);
+        }
+    }
     .action-close {
         padding: @modal-popup__padding;
         &:active,
@@ -69,16 +141,63 @@
         font-size: @modal-slide-title__font-size;
         margin-right: @modal-slide-title__font-size + @modal-slide__padding + 1rem;
     }
+
     .action-close {
         padding: @modal-slide-header__padding-vertical @modal-slide__padding;
         &:active {
-            padding-right: @modal-slide__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
             padding-top: @modal-slide-header__padding-vertical + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
+            padding-right: @modal-slide__padding + (@modal-action-close__font-size - @modal-action-close__active__font-size) / 2;
         }
     }
     .page-main-actions {
-        margin-bottom: @modal-slide-header__padding-vertical - @page-main-actions__padding;
         margin-top: @modal-slide-header__padding-vertical;
+        margin-bottom: @modal-slide-header__padding-vertical - @page-main-actions__padding;
+    }
+
+    .magento_message {
+        padding: 0 @popup__padding__horizontal @popup__padding__vertical;
+        position: relative;
+    }
+
+    .main-col,
+    .magento_message {
+        .insert-title-inner {
+            &:extend(.abs-clearfix all);
+            border-bottom: 1px solid @color-gray68;
+            margin: 0 0 @indent__base;
+            padding-bottom: @indent__xs;
+        }
+        .insert-actions {
+            float: right;
+        }
+        .title {
+            font-size: @font-size__l;
+            padding-top: @indent__xs;
+        }
+    }
+
+    .main-col,
+    .side-col {
+        float: left;
+        padding-bottom: 0;
+        &:after {
+            display: none;
+        }
+    }
+
+    .side-col {
+        width: 20%;
+    }
+
+    .main-col {
+        padding-right: 0;
+        width: 80%;
+    }
+
+    .content-footer {
+        .form-buttons {
+            float: right;
+        }
     }
 }
 
@@ -86,4 +205,4 @@
     font-weight: @font-weight__regular;
     margin-bottom: 0;
     min-height: 1em;
-}
+}
\ No newline at end of file
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less b/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
index 6586433b784236fba11f88d78df23519b19a5ca3..520b26a148b743f5a05985e148f70d34ef844299 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/components/_popups.less
@@ -389,15 +389,24 @@
 //  Attribute Popup
 //  _____________________________________________
 
-.attribute-popup-actions {
-    background: @color-white;
-    border-top: 1px solid @color-gray68;
-    bottom: 0;
-    left: 0;
-    padding: @popup__padding;
-    position: fixed;
-    right: 0;
-    top: auto !important;
+.catalog-product-attribute-edit {
+    .page-wrapper {
+        width: 100%;
+        .page-content {
+            padding-left: 0;
+        }
+    }
+}
+
+.attribute-popup-actions { // ToDo UI: remove or refactor after New attribute popup refactored to sliding panel
+    &:extend(.abs-clearfix all);
+    background: @page-main-actions__background-color;
+    border-bottom: 1px solid @page-main-actions__border-color;
+    border-top: 1px solid @page-main-actions__border-color;
+    padding: @page-main-actions__padding;
+    &.page-actions {
+        float: none;
+    }
     &.fixed { // ToDo UI: remove or refactor after New attribute popup refactored to sliding panel
         background: @color-white !important;
         border-bottom: 0 !important;
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less
index ce0fee6a7723095b7771f13efd95ee082b0fd83e..a8e768b98e179ba058229cfce41a88755b8f36a9 100644
--- a/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less
+++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/_controls.less
@@ -176,6 +176,15 @@ option:empty {
     }
 }
 
+//
+//  Service text or control. Can be used to add text or "Use Default Value" checkbox
+//  ---------------------------------------------
+
+.admin__control-service {
+    float: left;
+    margin: .8rem 0 0 3rem;
+}
+
 //
 //  Textarea
 //  ---------------------------------------------
diff --git a/app/design/adminhtml/Magento/backend/web/css/source/forms/_form-wysiwyg.less b/app/design/adminhtml/Magento/backend/web/css/source/forms/_form-wysiwyg.less
new file mode 100644
index 0000000000000000000000000000000000000000..8ce2fedb6619f3f25d73bd6a55752266ee5a2eda
--- /dev/null
+++ b/app/design/adminhtml/Magento/backend/web/css/source/forms/_form-wysiwyg.less
@@ -0,0 +1,20 @@
+// /**
+//  * Copyright © 2015 Magento. All rights reserved.
+//  * See COPYING.txt for license details.
+//  */
+
+//
+//  Wysiwyg form control styles
+//  ---------------------------------------------
+
+.admin__control-wysiwig {
+    .buttons-set {
+        margin: 0 0 15px;
+        button {
+            margin-right: 4px;
+        }
+    }
+    textarea{
+        width: 100%;
+    }
+}
diff --git a/app/design/adminhtml/Magento/backend/web/css/styles-old.less b/app/design/adminhtml/Magento/backend/web/css/styles-old.less
index ef80afdf770123768fbecfc5f6a5f8afed5eaaa7..7390b3177b8360a5f41fd5cdfe839e1cbf56fa1c 100644
--- a/app/design/adminhtml/Magento/backend/web/css/styles-old.less
+++ b/app/design/adminhtml/Magento/backend/web/css/styles-old.less
@@ -4928,7 +4928,7 @@
     }
 }
 
-//  Content -> Frontend Apps
+//  Content -> Widgets
 .adminhtml-widget-instance-index {
     .admin__scope-old {
         .col-title {
@@ -5309,6 +5309,19 @@
     }
 }
 
+//
+//  Temporary override @todo ui - remove after refactoring of 3-rd party tree styles
+//  _____________________________________________
+
+.ext-strict {
+    .x-small-editor {
+        .x-form-text.x-form-field.folder  {
+            height: auto !important;
+        }
+    }
+
+}
+
 // ==|== print styles =======================================================
 //   Print styles.
 //   Inlined to avoid required HTTP connection: h5bp.com/r
diff --git a/app/design/adminhtml/Magento/backend/web/js/theme.js b/app/design/adminhtml/Magento/backend/web/js/theme.js
index 9d1524c4e2352bcdf793859851d0ed0b63c4e3db..5fdaa4c582430c25e0c085121e00ce6ed8e3580a 100644
--- a/app/design/adminhtml/Magento/backend/web/js/theme.js
+++ b/app/design/adminhtml/Magento/backend/web/js/theme.js
@@ -126,12 +126,13 @@ define('globalNavigationScroll', [
     menuItems.on('click', function (e) {
 
         var submenu = $(this).children(subMenuClass),
-            delta;
+            delta,
+            logo = $('.logo')[0].offsetHeight;
 
         submenuHeight = submenu.height();
 
-        if (submenuHeight > menuHeight && menuHeight > winHeight) {
-            menu.height(submenuHeight - $('.logo')[0].offsetHeight);
+        if (submenuHeight > menuHeight && menuHeight + logo > winHeight) {
+            menu.height(submenuHeight - logo);
             delta = -menu.position().top;
             window.scrollTo(0, 0);
             positionMenu();
diff --git a/app/design/frontend/Magento/blank/Magento_Bundle/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Bundle/web/css/source/_module.less
index cbc2b02bcb7c749a5a4ec1be568ef462101dd212..7c9df9f91ee0ee6bbb578319ca3ece792436df9b 100644
--- a/app/design/frontend/Magento/blank/Magento_Bundle/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_Bundle/web/css/source/_module.less
@@ -107,8 +107,11 @@
         p.required {
             .lib-css(color, @form-field-label-asterisk__color);
         }
-    }
 
+        .product-options-bottom {
+            clear: left;
+        }
+    }
 }
 
 //
diff --git a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payments.less b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payments.less
index b729bbffaba3761b6dbea3132bff7664e9cd8894..741516ae64dd30e2e11067ebc2a3c7d574ba95a9 100644
--- a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payments.less
+++ b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_payments.less
@@ -144,6 +144,11 @@
                 padding-left: @indent__l;
             }
         }
+        .payments {
+            .legend {
+                &:extend(.abs-visually-hidden all);
+            }
+        }
     }
 }
 
diff --git a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_shipping-policy.less b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_shipping-policy.less
index bff0cfef59fcd8e5db0f41628535efde7ad267ec..fb0bdd912ba8f460591873f9fdd4a396257cf408 100644
--- a/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_shipping-policy.less
+++ b/app/design/frontend/Magento/blank/Magento_Checkout/web/css/source/module/checkout/_shipping-policy.less
@@ -30,6 +30,9 @@
                 &:before {
                    display: none;
                 }
+                span {
+                    &:extend(.abs-visually-hidden-reset all);
+                }
             }
 
             .field-tooltip-content {
diff --git a/app/design/frontend/Magento/blank/Magento_Msrp/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_Msrp/web/css/source/_module.less
index ff6f64201faa67b4711e0618dcd8e79f9d8f7418..235e1d265df52bfa1eedaa9afd5a33f12bf6ba6e 100644
--- a/app/design/frontend/Magento/blank/Magento_Msrp/web/css/source/_module.less
+++ b/app/design/frontend/Magento/blank/Magento_Msrp/web/css/source/_module.less
@@ -4,63 +4,72 @@
 //  */
 
 //
-//    Common
-//--------------------------------------
+//  Common
+//  _____________________________________________
 
 & when (@media-common = true) {
 
-.map-popup-wrapper {
-    &.popup {
-        .action {
-            &.close {
-                .lib-css(top, @popup-button-close__position-top);
+    .map-popup-wrapper {
+        &.popup {
+            .action {
+                &.close {
+                    .lib-css(top, @popup-button-close__position-top);
+                }
             }
         }
     }
-}
 
-.map-popup {
-    .lib-popup(
-        @_popup-margin-top: @indent__s,
-        @_popup-margin-left: false,
-        @_popup-content-margin: @indent__s 0 0,
-        @_popup-position-bottom: false,
-        @_popup-position-right: false,
-        @_popup-position: absolute
-    );
-    .map-info-price {
-        &:extend(.abs-add-clearfix all);
-        margin-bottom: 15px;
-        .price-box {
-            margin: 0 0 @indent__base;
-            .label {
-                &:after {
-                    content: ": ";
+    .map-popup {
+        .lib-popup(
+            @_popup-margin-top: @indent__s,
+            @_popup-margin-left: false,
+            @_popup-content-margin: @indent__s 0 0,
+            @_popup-position-bottom: false,
+            @_popup-position-right: false,
+            @_popup-position: absolute
+        );
+        .map-info-price {
+            &:extend(.abs-add-clearfix all);
+            margin-bottom: 15px;
+            .price-box {
+                margin: 0 0 @indent__base;
+                .label {
+                    &:after {
+                        content: ": ";
+                    }
                 }
             }
         }
     }
-}
 
-.map-old-price,
-.product-info-price .map-show-info {
-    &:not(:last-child) {
-        margin-right: @indent__s;
+    .map-old-price,
+    .product-info-price .map-show-info {
+        &:not(:last-child) {
+            margin-right: @indent__s;
+        }
     }
-}
 
-.map-old-price {
-    text-decoration: none;
-    .price-wrapper {
-        text-decoration: line-through;
+    .map-old-price {
+        text-decoration: none;
+        .price-wrapper {
+            text-decoration: line-through;
+        }
     }
-}
 
+    .map-form-addtocart {
+        display: inline-block;
+        text-align: center;
+        img {
+            display: block;
+            margin: 0 auto;
+        }
+    }
 }
 
 //
-//    Mobile
-//--------------------------------------
+//  Mobile
+//  _____________________________________________
+
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
     .map-popup {
         max-width: 100%; 
diff --git a/app/design/frontend/Magento/blank/Magento_Paypal/web/css/source/module/_paypal-button.less b/app/design/frontend/Magento/blank/Magento_Paypal/web/css/source/module/_paypal-button.less
index ba3db31893de49db9c13a2e62f0b41bf9e238a8d..6495ce310cb75545715ef51c58c886e7d9c48757 100644
--- a/app/design/frontend/Magento/blank/Magento_Paypal/web/css/source/module/_paypal-button.less
+++ b/app/design/frontend/Magento/blank/Magento_Paypal/web/css/source/module/_paypal-button.less
@@ -15,7 +15,7 @@
             &:before {
                 content: '- ' attr(data-label) ' -';
                 display: block;
-                margin: 0 @indent__xs @indent__s;
+                margin: @indent__xs @indent__xs @indent__s;
                 text-transform: uppercase;
             }
         }
diff --git a/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
new file mode 100644
index 0000000000000000000000000000000000000000..d51b978a97e0f74dad2a83121c0b331830e6a051
--- /dev/null
+++ b/app/design/frontend/Magento/blank/Magento_ProductVideo/web/css/source/_module.less
@@ -0,0 +1,70 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+.fotorama-video-container {
+    &:after {
+        background: url(../Magento_ProductVideo/img/gallery-sprite.png) bottom right;
+        bottom: 0;
+        content: '';
+        height: 100px;
+        left: 0;
+        margin: auto;
+        position: absolute;
+        right: 0;
+        top: 12px;
+        width: 100px;
+    }
+    .magnify-lens {
+        display: none !important;
+    }
+    &.video-unplayed {
+        &:hover {
+            img {
+                opacity: 0.6;
+            }
+            &:after {
+                transform: scale(1.25);
+            }
+        }
+    }
+}
+
+.video-thumb-icon:after {
+    background: url(../Magento_ProductVideo/img/gallery-sprite.png) bottom left;
+    bottom: 0;
+    content: '';
+    height: 40px;
+    left: 0;
+    margin: auto;
+    position: absolute;
+    right: 0;
+    top: 10px;
+    width: 49px;
+}
+
+.product-video {
+    height: 85%;
+    margin-top: 15%;
+    position: absolute;
+    top: 0;
+    width: 100%;
+    iframe {
+        height: 100%;
+        left: 0;
+        position: absolute;
+        top: 0;
+        width: 100%;
+        z-index: 9999;
+    }
+}
+
+.fotorama__arr.hidden-video {
+    z-index: -1;
+}
+
+.fotorama__video-close {
+    bottom: 89%;
+    top: auto;
+}
diff --git a/app/design/frontend/Magento/blank/etc/view.xml b/app/design/frontend/Magento/blank/etc/view.xml
index 6020a6ad025f5519fc84d2a112f08a6e75ffbadc..bdb30144699031fe72d05d500f822ea471a6924c 100644
--- a/app/design/frontend/Magento/blank/etc/view.xml
+++ b/app/design/frontend/Magento/blank/etc/view.xml
@@ -181,20 +181,65 @@
     </media>
     <vars module="Magento_Catalog">
 
-        <!-- New gallery and magnifier theme settings -->
-        <var name="gallery:nav">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
-        <var name="gallery:loop">true</var> <!-- Gallery navigation loop (true/false) -->
-        <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
-        <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
-        <var name="gallery:showCaption">false</var> <!-- Display alt text as image title (true/false) -->
+        <!-- Gallery and magnifier theme settings. Start -->
+        <var name="gallery">
+            <var name="nav">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
+            <var name="loop">true</var> <!-- Gallery navigation loop (true/false) -->
+            <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
+            <var name="arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
+            <var name="caption">false</var> <!-- Display alt text as image title (true/false) -->
+            <var name="allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
+            <var name="navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
+            <var name="navarrows">true</var> <!-- Turn on/off on the thumbs navigation sides (true/false) -->
+            <var name="navtype">slides</var> <!-- Sliding type of thumbnails (slides/thumbs) -->
+            <var name="transition">
+                <var name="effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+                <var name="duration">500</var> <!-- Sets transition duration in ms -->
+            </var>
+            <var name="fullscreen">
+                <var name="nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
+                <var name="loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
+                <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
+                <var name="arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
+                <var name="caption">false</var> <!-- Display alt text as image title (true/false) -->
+                <var name="navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
+                <var name="thumbwidth">150</var> <!-- Width of thumbnails in fullscreen -->
+                <var name="thumbheight">150</var> <!-- Height of thumbnails in fullscreen -->
+                <var name="navigation_carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
+                <var name="transition">
+                    <var name="effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+                    <var name="duration">500</var> <!-- Sets transition duration in ms -->
+                    <var name="carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
+                </var>
+            </var>
+        </var>
 
-        <var name="magnifier:top"></var> <!-- Top position of magnifier -->
-        <var name="magnifier:left"></var> <!-- Left position of magnifier -->
-        <var name="magnifier:width"></var> <!-- Width of magnifier block -->
-        <var name="magnifier:height"></var> <!-- Height of magnifier block -->
-        <var name="magnifier:eventType">hover</var> <!-- Action that atcivates zoom (hover/click) -->
-        <var name="magnifier:enabled">true</var> <!-- Turn on/off magnifier (true/false) -->
-        <!-- end -->
+        <var name="magnifier">
+            <var name="fullscreenzoom">5</var>  <!-- Zoom for fullscreen (integer)-->
+            <var name="top"></var> <!-- Top position of magnifier -->
+            <var name="left"></var> <!-- Left position of magnifier -->
+            <var name="width"></var> <!-- Width of magnifier block -->
+            <var name="height"></var> <!-- Height of magnifier block -->
+            <var name="eventType">hover</var> <!-- Action that atcivates zoom (hover/click) -->
+            <var name="enabled">true</var> <!-- Turn on/off magnifier (true/false) -->
+        </var>
+
+        <var name="breakpoints">
+            <var name="mobile">
+                <var name="conditions">
+                    <var name="max-width">767px</var>
+                </var>
+                <var name="options">
+                    <var name="options">
+                        <var name="navigation">dots</var>
+                    </var>
+                    <var name="magnifierOpts">
+                        <var name="enabled">false</var>
+                    </var>
+                </var>
+            </var>
+        </var>
+        <!-- end. Gallery and magnifier theme settings -->
 
         <var name="product_small_image_sidebar_size">100</var>  <!-- Override for small product image -->
         <var name="product_base_image_size">275</var>           <!-- Override for base product image -->
diff --git a/app/design/frontend/Magento/blank/web/css/source/_extends.less b/app/design/frontend/Magento/blank/web/css/source/_extends.less
index 18efceb195d360bde076a5829a775a302399ed8e..acdda0c0c8bdfd0c4a2438895143da5b473a06e3 100644
--- a/app/design/frontend/Magento/blank/web/css/source/_extends.less
+++ b/app/design/frontend/Magento/blank/web/css/source/_extends.less
@@ -447,6 +447,14 @@
     }
 }
 
+//
+//  Visually hidden reset
+//  ---------------------------------------------
+
+.abs-visually-hidden-reset {
+    .lib-visually-hidden-reset();
+}
+
 //
 //  Clearfix
 //  ---------------------------------------------
diff --git a/app/design/frontend/Magento/blank/web/css/source/_forms.less b/app/design/frontend/Magento/blank/web/css/source/_forms.less
index 554cdcd789e298556ace18e87086c0c19ca5bad4..898f2fbd38eac6ec3345e183df054399782ccf15 100644
--- a/app/design/frontend/Magento/blank/web/css/source/_forms.less
+++ b/app/design/frontend/Magento/blank/web/css/source/_forms.less
@@ -70,6 +70,11 @@ fieldset.field {
             white-space: nowrap;
         }
     }
+    .message {
+        &.warning {
+            margin-top: @indent__s;
+        }
+    }
 }
 
 div.mage-error[generated] {
diff --git a/app/design/frontend/Magento/blank/web/css/styles-l.less b/app/design/frontend/Magento/blank/web/css/styles-l.less
index c95e1c41e47adbe81784d9426680cb0718084e2f..2463d263a58c1b6a0450936ddc190da34c1fb8d3 100644
--- a/app/design/frontend/Magento/blank/web/css/styles-l.less
+++ b/app/design/frontend/Magento/blank/web/css/styles-l.less
@@ -22,7 +22,6 @@
 
 //@magento_import 'source/_module.less'; // Theme modules
 //@magento_import 'source/_widgets.less'; // Theme widgets
-//@magento_import 'source/_extend.less'; // Extend for minor customisation
 
 //
 //  Media queries collector
@@ -38,3 +37,9 @@
 //  ---------------------------------------------
 
 @import 'source/_theme.less';
+
+//
+//  Extend for minor customisation
+//  ---------------------------------------------
+
+//@magento_import 'source/_extend.less';
diff --git a/app/design/frontend/Magento/blank/web/css/styles-m.less b/app/design/frontend/Magento/blank/web/css/styles-m.less
index dc69a28471e952e442bc874a062c2245de883e1a..fe2783067e26159773f76dc3499bb1fe2761e3fa 100644
--- a/app/design/frontend/Magento/blank/web/css/styles-m.less
+++ b/app/design/frontend/Magento/blank/web/css/styles-m.less
@@ -23,7 +23,6 @@
 
 //@magento_import 'source/_module.less'; // Theme modules
 //@magento_import 'source/_widgets.less'; // Theme widgets
-//@magento_import 'source/_extend.less'; // Extend for minor customisation
 
 //
 //  Media queries collector
@@ -38,3 +37,9 @@
 //  ---------------------------------------------
 
 @import 'source/_theme.less';
+
+//
+//  Extend for minor customisation
+//  ---------------------------------------------
+
+//@magento_import 'source/_extend.less';
diff --git a/app/design/frontend/Magento/luma/Magento_Bundle/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Bundle/web/css/source/_module.less
index 1d595ccb3fe48229cf67a0053761c1718c82ac21..f475f122740510d5714a34d3189fda47a5e25bef 100644
--- a/app/design/frontend/Magento/luma/Magento_Bundle/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Bundle/web/css/source/_module.less
@@ -48,7 +48,6 @@
             .fieldset-bundle-options {
                 .field.choice {
                     .price-notice {
-                        float: left;
                         &:extend(.abs-adjustment-incl-excl-tax all);
                     }
                 }
@@ -58,15 +57,15 @@
                     float: left;
                 }
                 .label {
+                    &:extend(.abs-add-clearfix all);
                     display: block;
                     margin-left: 24px;
                 }
-                .product-name {
-                    display: block;
-                }
-                .label {
-                    &:extend(.abs-add-clearfix all);
+
+                .price-notice {
+                    &:extend(.abs-adjustment-incl-excl-tax all);
                 }
+                
                 .price-excluding-tax {
                     display: inline-block;
                 }
@@ -162,6 +161,12 @@
         .price {
             font-weight: @font-weight__semibold;
         }
+        .product-options-bottom {
+            border-top: 1px solid @border-color__base;
+            clear: left;
+            margin: 0 0 @indent__xl;
+            padding-top: @indent__base;
+        }
     }
 }
 
diff --git a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payments.less b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payments.less
index 20fecb56addf7701c83570720e300ab64182fef0..c0f1168e6ef0f0a2513ed747ed59cebf21d85fe4 100644
--- a/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payments.less
+++ b/app/design/frontend/Magento/luma/Magento_Checkout/web/css/source/module/checkout/_payments.less
@@ -144,6 +144,11 @@
                 padding-left: @indent__l;
             }
         }
+        .payments {
+            .legend {
+                &:extend(.abs-visually-hidden all);
+            }
+        }
     }
 }
 
diff --git a/app/design/frontend/Magento/luma/Magento_Customer/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Customer/web/css/source/_module.less
index 90711d92b53c250347d99fef33d2317ae35c3c1e..f1110280ba1ea3dbae3e4babcb8e3c7bb1d4f536 100644
--- a/app/design/frontend/Magento/luma/Magento_Customer/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Customer/web/css/source/_module.less
@@ -13,195 +13,200 @@
 
 & when (@media-common = true) {
 
-.login-container {
-    .block {
-        &-new-customer {
-            .actions-toolbar {
-                margin-top: 25px;
+    .login-container {
+        .block {
+            &-new-customer {
+                .actions-toolbar {
+                    margin-top: 25px;
+                }
+            }
+            .block-title {
+                &:extend(.abs-login-block-title all);
+                .lib-font-size(18);
             }
         }
-        .block-title {
-            &:extend(.abs-login-block-title all);
-            .lib-font-size(18);
-        }
-    }
-    .fieldset {
-        .lib-form-hasrequired(bottom);
-        &:after {
-            margin-top: 35px;
+        .fieldset {
+            .lib-form-hasrequired(bottom);
+            &:after {
+                margin-top: 35px;
+            }
         }
     }
-}
 
-.block-addresses-list {
-    .items.addresses {
-        > .item {
-            margin-bottom: @indent__base;
-            &:last-child {
-                margin-bottom: 0;
+    .block-addresses-list {
+        .items.addresses {
+            > .item {
+                margin-bottom: @indent__base;
+                &:last-child {
+                    margin-bottom: 0;
+                }
             }
-        }
-        .item.actions {
-            margin-top: @indent__xs;
-            .action {
-                &:extend(.abs-account-actions all);
+            .item.actions {
+                margin-top: @indent__xs;
+                .action {
+                    &:extend(.abs-account-actions all);
+                }
             }
         }
+        address {
+            &:extend(.abs-account-block-line-height all);
+        }
     }
-    address {
-        &:extend(.abs-account-block-line-height all);
-    }
-}
 
-.form-address-edit {
-    #region_id {
-        display: none;
-    }
-    .actions-toolbar .action.primary {
-        &:extend(.abs-button-l all);
+    .form-address-edit {
+        #region_id {
+            display: none;
+        }
+        .actions-toolbar .action.primary {
+            &:extend(.abs-button-l all);
+        }
     }
-}
 
-.form-edit-account {
-    .fieldset.password {
-        display: none;
+    .form-edit-account {
+        .fieldset.password {
+            display: none;
+        }
     }
-}
 
-.form-create-account {
-    .fieldset-fullname {
-        .fields {
-            .field {
-                float: none;
+    .form-create-account {
+        .fieldset-fullname {
+            .fields {
+                .field {
+                    float: none;
+                }
             }
         }
     }
-}
 
-.box-billing-address,
-.box-shipping-address,
-.box-information,
-.box-newsletter {
-    .box-content {
-        &:extend(.abs-account-block-line-height all);
+    .box-billing-address,
+    .box-shipping-address,
+    .box-information,
+    .box-newsletter {
+        .box-content {
+            &:extend(.abs-account-block-line-height all);
+        }
     }
-}
 
-//  My account
-.account {
-    .page-title-wrapper {
-        .page-title {
-            display: inline-block;
+    //  My account
+    .account {
+        .page-title-wrapper {
+            .page-title {
+                display: inline-block;
+            }
         }
-    }
-    .messages {
-        margin-bottom: @indent__base;
-    }
-    .column.main {
-        margin-bottom: @indent__l;
-        h2 {
-            margin-top: 0;
+        .messages {
+            margin-bottom: @indent__base;
         }
-        .block:not(.widget) {
-            &:extend(.abs-account-blocks all);
+        .column.main {
+            margin-bottom: @indent__l;
+            h2 {
+                margin-top: 0;
+            }
+            .block:not(.widget) {
+                &:extend(.abs-account-blocks all);
+            }
+        }
+        .sidebar-additional {
+            margin-top: @indent__xl;
         }
-    }
-    .sidebar-additional {
-        margin-top: @indent__xl;
-    }
 
-    .table-wrapper {
-        .lib-css(margin-bottom, @indent__base);
-        border-bottom: 1px solid @account-table-border-bottom-color;
-        &:last-child {
-            margin-bottom: 0;
+        .table-wrapper {
+            .lib-css(margin-bottom, @indent__base);
+            border-bottom: 1px solid @account-table-border-bottom-color;
+            &:last-child {
+                margin-bottom: 0;
+            }
+        }
+        .legend {
+            &:extend(.abs-account-title all);
         }
     }
-    .legend {
-        &:extend(.abs-account-title all);
-    }
-}
 
-.account,
-[class^="sales-guest-"],
-.sales-guest-view {
-    .column.main {
-        .order-details-items {
-            .table-wrapper {
-                .data.table {
-                    &:extend(.abs-table-striped all);
+    .account,
+    [class^="sales-guest-"],
+    .sales-guest-view {
+        .column.main {
+            .order-details-items {
+                .table-wrapper {
+                    .data.table {
+                        &:extend(.abs-table-striped all);
+                    }
                 }
             }
         }
-    }
-    .data.table {
-        .col.actions {
-            .action {
-                &:extend(.abs-account-actions all);
-                &.delete {
-                    .lib-css(color, @account-table-action-delete);
+        .data.table {
+            .col.actions {
+                .action {
+                    &:extend(.abs-account-actions all);
+                    &.delete {
+                        .lib-css(color, @account-table-action-delete);
+                    }
                 }
             }
         }
     }
-}
 
-//  Checkout address (create shipping address)
-.field.street {
-    .field.additional {
-        .label {
-            &:extend(.abs-visually-hidden all);
+    //  Checkout address (create shipping address)
+    .field.street {
+        .field.additional {
+            .label {
+                &:extend(.abs-visually-hidden all);
+            }
         }
     }
-}
 
-//
-//  Blocks & Widgets
-//  ---------------------------------------------
+    //
+    //  Blocks & Widgets
+    //  ---------------------------------------------
 
-.block {
-    &:extend(.abs-margin-for-blocks-and-widgets all);
-    .column.main & {
-        &:last-child {
-            margin-bottom: 0;
+    .block {
+        &:extend(.abs-margin-for-blocks-and-widgets all);
+        .column.main & {
+            &:last-child {
+                margin-bottom: 0;
+            }
         }
-    }
-    .title {
-        strong {
-            .lib-heading(h4);
-            .column.main & {
+        .title {
+            strong {
+                .lib-heading(h4);
+                .column.main & {
+                }
             }
+            margin-bottom: @indent__s;
         }
-        margin-bottom: @indent__s;
-    }
-    p:last-child {
-        margin: 0;
-    }
-    .box-actions {
-        margin-top: @indent__xs;
-        .action {
-            &:extend(.abs-account-actions all);
+        p {
+            &:last-child {
+                margin: 0;
+            }
+        }
+        .box-actions {
+            margin-top: @indent__xs;
+            .action {
+                &:extend(.abs-account-actions all);
+            }
         }
     }
-}
 
-.control.captcha-image {
-    .lib-css(margin-top, @indent__s);
-    .captcha-img {
-        vertical-align: middle;
+    .control.captcha-image {
+        .lib-css(margin-top, @indent__s);
+        .captcha-img {
+            vertical-align: middle;
+        }
     }
-}
 
-.account {
-    .data.table-return-items {
-        .qty {
-            .input-text {
-                &:extend(.abs-input-qty all);
+    .account {
+        .data.table-return-items {
+            .qty {
+                .input-text {
+                    &:extend(.abs-input-qty all);
+                }
             }
         }
     }
-}
 
+    .order-products-toolbar {
+        position: relative;
+    }
 }
 
 //
diff --git a/app/design/frontend/Magento/luma/Magento_Msrp/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Msrp/web/css/source/_module.less
index bdc3e39e97515cad14f114cfb37b667dd38be8db..492944cd19445028bea7c1e111be570b129d8d9b 100644
--- a/app/design/frontend/Magento/luma/Magento_Msrp/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Msrp/web/css/source/_module.less
@@ -4,87 +4,96 @@
 //  */
 
 //
-//    Common
-//--------------------------------------
+//  Common
+//  _____________________________________________
 
 & when (@media-common = true) {
 
-.map-popup-wrapper {
-    &.popup {
-        .action {
-            &.close {
-                .lib-css(top, @popup-button-close__position-top);
+    .map-popup-wrapper {
+        &.popup {
+            .action {
+                &.close {
+                    .lib-css(top, @popup-button-close__position-top);
+                }
             }
         }
     }
-}
 
-.map-popup {
-    .lib-popup(
-        @_popup-margin-top: @indent__s,
-        @_popup-margin-left: false,
-        @_popup-content-margin: false,
-        @_popup-position-bottom: false,
-        @_popup-position-right: false,
-        @_popup-position: absolute
-    );
-    .map-info-price {
-        &:extend(.abs-add-clearfix all);
-        margin: 0 0 @indent__base;
-        .price-box {
+    .map-popup {
+        .lib-popup(
+            @_popup-margin-top: @indent__s,
+            @_popup-margin-left: false,
+            @_popup-content-margin: false,
+            @_popup-position-bottom: false,
+            @_popup-position-right: false,
+            @_popup-position: absolute
+        );
+        .map-info-price {
+            &:extend(.abs-add-clearfix all);
             margin: 0 0 @indent__base;
-            .label {
-                &:after {
-                    content: ": ";
+            .price-box {
+                margin: 0 0 @indent__base;
+                .label {
+                    &:after {
+                        content: ": ";
+                    }
                 }
             }
         }
-    }
-    .action {
-        &.primary {
-            margin-right: @indent__s;
+        .action {
+            &.primary {
+                margin-right: @indent__s;
+            }
+        }
+        .map-msrp {
+            margin-bottom: @indent__s;
+        }
+        .actual-price {
+            margin: 3px 0 15px;
+        }
+        .popup-header {
+            display: none;
         }
     }
-    .map-msrp {
-        margin-bottom: @indent__s;
-    }
-    .actual-price {
-        margin: 3px 0 15px;
-    }
-    .popup-header {
-        display: none;
-    }
-}
 
-.map-old-price {
-    text-decoration: none;
-    .price-wrapper {
-        text-decoration: line-through;
+    .map-old-price {
+        text-decoration: none;
+        .price-wrapper {
+            text-decoration: line-through;
+        }
     }
-}
 
-.map-old-price,
-.product-item .map-old-price,
-.product-info-price .map-show-info {
-    &:not(:last-child) {
-        margin-right: @indent__s;
+    .map-old-price,
+    .product-item .map-old-price,
+    .product-info-price .map-show-info {
+        &:not(:last-child) {
+            margin-right: @indent__s;
+        }
     }
-}
 
-.product-options-bottom .price-box,
-.product-info-price .price-box {
-    .old-price {
-        .price-container > span {
-            display: inline;
+    .product-options-bottom .price-box,
+    .product-info-price .price-box {
+        .old-price {
+            .price-container > span {
+                display: inline;
+            }
         }
     }
-}
 
+    .map-form-addtocart {
+        display: inline-block;
+        text-align: center;
+        img {
+            display: block;
+            margin: 0 auto;
+        }
+    }
 }
 
 //
-//    Mobile
-//--------------------------------------
+//  Mobile
+//  _____________________________________________
+
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__m) {
     .map-popup {
         max-width: 100%; 
diff --git a/app/design/frontend/Magento/luma/Magento_Paypal/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Paypal/web/css/source/_module.less
deleted file mode 100644
index 2331b8b74f921add0ab83458b95700a7c55261e4..0000000000000000000000000000000000000000
--- a/app/design/frontend/Magento/luma/Magento_Paypal/web/css/source/_module.less
+++ /dev/null
@@ -1,180 +0,0 @@
-// /**
-//  * Copyright © 2015 Magento. All rights reserved.
-//  * See COPYING.txt for license details.
-//  */
-
-//
-//    Common
-//--------------------------------------
-
-& when (@media-common = true) {
-
-//
-//    PayPal checkout button
-//--------------------------------------
-
-.paypal {
-    display: inline-block;
-    vertical-align: top;
-    .block-minicart &,
-    .cart-summary & {
-        display: block;
-    }
-    img {
-        display: block;
-        margin: @indent__xs auto 0;
-    }
-    .opc & {
-        vertical-align: middle;
-    }
-    &.acceptance {
-        display: block;
-        margin: 0 0 @indent__base;
-    }
-}
-
-//
-//    Account
-//--------------------------------------
-.table-wrapper.billing-agreements {
-    margin-bottom: @indent__xl;
-}
-
-//
-//    PayPal Review Order page
-//--------------------------------------
-.paypal-review {
-    .block {
-        &:extend(.abs-account-blocks all);
-        .actions-toolbar {
-            .action.primary {
-                &:extend(.abs-revert-secondary-color all);
-            }
-        }
-    }
-
-    .actions-toolbar {
-        margin-top: @indent__s;
-    }
-
-    .paypal-review-title {
-        padding: 0 0 @indent__s;
-        > strong {
-            .lib-font-size(24);
-            font-weight: @font-weight__light;
-        }
-        .action {
-            display: inline-block;
-            margin: 12px 0 0 @indent__l;
-        }
-    }
-
-    .table-paypal-review-items {
-        .col {
-            &.price,
-            &.subtotal {
-                &:extend(.abs-incl-excl-tax all);
-            }
-            &.name {
-                padding-top: 16px;
-            }
-            &.qty {
-                text-align: center;
-            }
-        }
-
-        .cart-tax-total {
-            &:extend(.abs-tax-total all);
-            &-expanded {
-                &:extend(.abs-tax-total-expanded all);
-            }
-        }
-    }
-
-    .item-options {
-        dt {
-            display: inline-block;
-            &:after {
-                content: ": ";
-            }
-        }
-        dd {
-            margin: 0;
-        }
-    }
-}
-
-}
-
-//
-//    Mobile
-//--------------------------------------
-.media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
-    .account {
-        .table-billing-agreements,
-        .table-billing-agreements-related {
-            .col.actions {
-                &:extend(.abs-col-no-prefix all);
-            }
-        }
-    }
-    .form-new-agreement {
-        select {
-            width: auto;
-        }
-    }
-    .table-paypal-review-items {
-        .col.subtotal {
-            text-align: left;
-        }
-        .product-item-name {
-            display: inline-block;
-        }
-    }
-}
-
-//
-//    Desktop
-//--------------------------------------
-.media-width(@extremum, @break) when (@extremum = 'min') and (@break = @screen__m) {
-    .paypal-review {
-        .paypal-review-title {
-            border-bottom: @border-width__base solid @border-color__base;
-        }
-        .block-content {
-            &:extend(.abs-add-clearfix-desktop all);
-            .box-order-shipping-address,
-            .box-order-shipping-method,
-            .box-order-shipping-method + .box-order-billing-address {
-                box-sizing: border-box;
-                float: left;
-                width: 33%;
-            }
-            .box-order-shipping-address {
-                padding: 0 5%;
-                width: 34%;
-            }
-        }
-        .column.main & {
-            .actions-toolbar {
-                &:extend(.abs-reset-left-margin-desktop all);
-            }
-        }
-        .table-paypal-review-items {
-            .col {
-                &.price,
-                &.qty {
-                    text-align: center;
-                }
-                &.item {
-                    width: 60%;
-                }
-            }
-        }
-        .col.subtotal,
-        .mark,
-        .amount {
-            text-align: right;
-        }
-    }
-}
diff --git a/app/design/frontend/Magento/luma/Magento_Paypal/web/css/source/module/_paypal-button.less b/app/design/frontend/Magento/luma/Magento_Paypal/web/css/source/module/_paypal-button.less
index 25ced863e9170b5365c4b319adcb52bd65edbc56..315843c76c99b335d2b1cf1ecd964581124930b3 100644
--- a/app/design/frontend/Magento/luma/Magento_Paypal/web/css/source/module/_paypal-button.less
+++ b/app/design/frontend/Magento/luma/Magento_Paypal/web/css/source/module/_paypal-button.less
@@ -28,6 +28,15 @@
             display: block;
             margin: 0 0 @indent__base;
         }
+        .map-form-addtocart & {
+            display: block;
+            margin: @indent__s auto @indent__xs;
+        }
+        .cart-summary & {
+            + .paypal {
+                margin-top: @indent__m;
+            }
+        }
     }
 
     .paypal-button-widget {
diff --git a/app/design/frontend/Magento/luma/Magento_Paypal/web/css/source/module/_review.less b/app/design/frontend/Magento/luma/Magento_Paypal/web/css/source/module/_review.less
index 92efcc788ac80cca460ea0b705678196238f5a5b..509648a9f92bf55def9afab4f2a7adb22dbf7167 100644
--- a/app/design/frontend/Magento/luma/Magento_Paypal/web/css/source/module/_review.less
+++ b/app/design/frontend/Magento/luma/Magento_Paypal/web/css/source/module/_review.less
@@ -88,16 +88,14 @@
 
 .media-width(@extremum, @break) when (@extremum = 'max') and (@break = @screen__s) {
     .table-paypal-review-items {
-        tfoot {
-            > tr {
-                &:first-child {
-                    th,
-                    td {
-                        border: 0;
-                    }
-                }
+        .col {
+            &.subtotal {
+                text-align: left;
             }
         }
+        .product-item-name {
+            display: inline-block;
+        }
     }
 }
 
@@ -133,6 +131,18 @@
             }
         }
 
+        .table-paypal-review-items {
+            .col {
+                &.price,
+                &.qty {
+                    text-align: center;
+                }
+                &.item {
+                    width: 60%;
+                }
+            }
+        }
+
         .col.subtotal,
         .mark,
         .amount {
diff --git a/app/design/frontend/Magento/luma/Magento_Review/web/css/source/_module.less b/app/design/frontend/Magento/luma/Magento_Review/web/css/source/_module.less
index 7149c5d38d888063b20dc16a0c6f9a79e72093ec..2dea6077b721a9aa25370e06f812e89bb4b469db 100644
--- a/app/design/frontend/Magento/luma/Magento_Review/web/css/source/_module.less
+++ b/app/design/frontend/Magento/luma/Magento_Review/web/css/source/_module.less
@@ -38,40 +38,6 @@
     }
 }
 
-//
-//    Reviews list and form
-//--------------------------------------
-
-.catalog-product-view.ajax-loading {
-    height: 100%;
-    overflow: hidden;
-    &:after {
-        content: "";
-        position:fixed;
-        height: 100%;
-        display: block;
-        width: 100%;
-        z-index: 998;
-        background: rgba(255,255,255,.4);
-    }
-    &:before {
-        content: "";
-        position:fixed;
-        top: 0;
-        left: 0;
-        bottom: 0;
-        right: 0;
-        margin:auto;
-        display: block;
-        @loading__size: 74px;
-        width: @loading__size;
-        height: @loading__size;
-        border-radius: @loading__size/2;
-        z-index: 999;
-        background: rgba(255, 255, 255, .7) url('../images/loader-1.gif') no-repeat 50% 50%;
-    }
-}
-
 //
 //    Review product page
 //--------------------------------------
diff --git a/app/design/frontend/Magento/luma/etc/view.xml b/app/design/frontend/Magento/luma/etc/view.xml
index 60da26b47742434de38f549d7626c556a26211e0..974c4c9fe5a8064263a06996ba0e9ea7c27ebaef 100644
--- a/app/design/frontend/Magento/luma/etc/view.xml
+++ b/app/design/frontend/Magento/luma/etc/view.xml
@@ -78,20 +78,20 @@
             </image>
             <image id="product_page_image_large" type="image"/>
             <image id="product_page_image_medium" type="image">
-                <width>560</width>
-                <height>700</height>
+                <width>700</width>
+                <height>560</height>
             </image>
             <image id="product_page_image_small" type="thumbnail">
                 <width>88</width>
                 <height>110</height>
             </image>
             <image id="product_page_main_image" type="image">
-                <width>560</width>
-                <height>700</height>
+                <width>700</width>
+                <height>560</height>
             </image>
             <image id="product_page_main_image_default" type="image">
-                <width>560</width>
-                <height>700</height>
+                <width>700</width>
+                <height>560</height>
             </image>
             <image id="product_page_more_views" type="thumbnail">
                 <width>88</width>
@@ -185,20 +185,65 @@
     </media>
     <vars module="Magento_Catalog">
 
-        <!-- New gallery and magnifier theme settings -->
-        <var name="gallery:nav">dots</var> <!-- Gallery navigation style (false/thumbs/dots) -->
-        <var name="gallery:loop">false</var> <!-- Gallery navigation loop (true/false) -->
-        <var name="gallery:keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
-        <var name="gallery:arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
-        <var name="gallery:showCaption">true</var> <!-- Display alt text as image title (true/false) -->
+        <!-- Gallery and magnifier theme settings. Start -->
+        <var name="gallery">
+            <var name="nav">thumbs</var> <!-- Gallery navigation style (false/thumbs/dots) -->
+            <var name="loop">true</var> <!-- Gallery navigation loop (true/false) -->
+            <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false) -->
+            <var name="arrows">true</var> <!-- Turn on/off arrows on the sides preview (true/false) -->
+            <var name="caption">false</var> <!-- Display alt text as image title (true/false) -->
+            <var name="allowfullscreen">true</var> <!-- Turn on/off fullscreen (true/false) -->
+            <var name="navdir">horizontal</var> <!-- Sliding direction of thumbnails (horizontal/vertical) -->
+            <var name="navarrows">true</var> <!-- Turn on/off on the thumbs navigation sides (true/false) -->
+            <var name="navtype">slides</var> <!-- Sliding type of thumbnails (slides/thumbs) -->
+            <var name="transition">
+                <var name="effect">slide</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+                <var name="duration">500</var> <!-- Sets transition duration in ms -->
+            </var>
+            <var name="fullscreen">
+                <var name="nav">thumbs</var> <!-- Fullscreen navigation style (false/thumbs/dots) -->
+                <var name="loop">true</var> <!-- Fullscreen navigation loop (true/false/null) -->
+                <var name="keyboard">true</var> <!-- Turn on/off keyboard arrows navigation (true/false/null) -->
+                <var name="arrows">false</var> <!-- Turn on/off arrows on the sides preview (true/false/null) -->
+                <var name="caption">false</var> <!-- Display alt text as image title (true/false) -->
+                <var name="navdir">horizontal</var> <!--Sliding direction of thumbnails in full screen(horizontal/vertical)  -->
+                <var name="thumbwidth">150</var> <!-- Width of thumbnails in fullscreen -->
+                <var name="thumbheight">150</var> <!-- Height of thumbnails in fullscreen -->
+                <var name="navigation_carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
+                <var name="transition">
+                    <var name="effect">dissolve</var> <!-- Sets transition effect for slides changing (slide/crossfade/dissolve) -->
+                    <var name="duration">500</var> <!-- Sets transition duration in ms -->
+                    <var name="carousel">true</var> <!-- Display navigation thumbs as carousel (true/false) -->
+                </var>
+            </var>
+        </var>
 
-        <var name="magnifier:top"></var> <!-- Top position of magnifier -->
-        <var name="magnifier:left"></var> <!-- Right position of magnifier -->
-        <var name="magnifier:width"></var> <!-- Width of magnifier block -->
-        <var name="magnifier:height"></var> <!-- Height of magnifier block -->
-        <var name="magnifier:eventType">click</var> <!-- Action that atcivates zoom (hover/click) -->
-        <var name="magnifier:enabled">true</var> <!-- Turn on/off magnifier (true/false) -->
-        <!-- end -->
+        <var name="magnifier">
+            <var name="fullscreenzoom">5</var>  <!-- Zoom for fullscreen (integer)-->
+            <var name="top"></var> <!-- Top position of magnifier -->
+            <var name="left"></var> <!-- Left position of magnifier -->
+            <var name="width"></var> <!-- Width of magnifier block -->
+            <var name="height"></var> <!-- Height of magnifier block -->
+            <var name="eventType">hover</var> <!-- Action that atcivates zoom (hover/click) -->
+            <var name="enabled">true</var> <!-- Turn on/off magnifier (true/false) -->
+        </var>
+
+        <var name="breakpoints">
+            <var name="mobile">
+                <var name="conditions">
+                    <var name="max-width">767px</var>
+                </var>
+                <var name="options">
+                    <var name="options">
+                        <var name="nav">dots</var>
+                    </var>
+                    <var name="magnifierOpts">
+                        <var name="enabled">false</var>
+                    </var>
+                </var>
+            </var>
+        </var>
+        <!-- end. Gallery and magnifier theme settings -->
 
         <var name="product_small_image_sidebar_size">100</var>  <!-- Override for small product image -->
         <var name="product_base_image_size">275</var>           <!-- Override for base product image -->
diff --git a/app/design/frontend/Magento/luma/web/css/source/_extends.less b/app/design/frontend/Magento/luma/web/css/source/_extends.less
index fb6ae3b3008db553a4f22240d4250de86807ef31..c72a66b87cb2ea02cc059a318fba550e70c95a2b 100644
--- a/app/design/frontend/Magento/luma/web/css/source/_extends.less
+++ b/app/design/frontend/Magento/luma/web/css/source/_extends.less
@@ -465,6 +465,14 @@
     }
 }
 
+//
+//  Visually hidden reset
+//  ---------------------------------------------
+
+.abs-visually-hidden-reset {
+    .lib-visually-hidden-reset();
+}
+
 //
 //  Clearfix
 //  ---------------------------------------------
diff --git a/app/design/frontend/Magento/luma/web/css/source/_forms.less b/app/design/frontend/Magento/luma/web/css/source/_forms.less
index 38bd00687eb8bc42194a16221a41cfb321178c4e..8d14cd805812c17f05a059807f763b5724f52796 100644
--- a/app/design/frontend/Magento/luma/web/css/source/_forms.less
+++ b/app/design/frontend/Magento/luma/web/css/source/_forms.less
@@ -59,11 +59,18 @@ fieldset.field {
     border: 0;
     padding: 0;
 }
-.field.date {
-    .time-picker {
-        white-space: nowrap;
-        margin-top: @indent__s;
-        display: inline-block;
+.field {
+    &.date {
+        .time-picker {
+            white-space: nowrap;
+            margin-top: @indent__s;
+            display: inline-block;
+        }
+    }
+    .message {
+        &.warning {
+            margin-top: @indent__s;
+        }
     }
 }
 
diff --git a/app/etc/NonComposerComponentRegistration.php b/app/etc/NonComposerComponentRegistration.php
index c5cf9fb8ce413be42d328feb169509e3c12417fa..38b050385b365feba8edded305ee0139eefe7b4f 100755
--- a/app/etc/NonComposerComponentRegistration.php
+++ b/app/etc/NonComposerComponentRegistration.php
@@ -4,6 +4,7 @@
  * See COPYING.txt for license details.
  */
 
+$pathList[] = dirname(__DIR__) . '/code/*/*/cli_commands.php';
 $pathList[] = dirname(__DIR__) . '/code/*/*/registration.php';
 $pathList[] = dirname(__DIR__) . '/design/*/*/*/registration.php';
 $pathList[] = dirname(__DIR__) . '/i18n/*/*/registration.php';
diff --git a/app/etc/di.xml b/app/etc/di.xml
index 9c107cf5cee12770a1388a2179a14baa3a91c119..598bc2c341ed351b1cb1ebd20feee0d742330b33 100755
--- a/app/etc/di.xml
+++ b/app/etc/di.xml
@@ -60,7 +60,7 @@
     <preference for="Magento\Framework\View\Layout\ProcessorInterface" type="Magento\Framework\View\Model\Layout\Merge" />
     <preference for="Magento\Framework\View\Url\ConfigInterface" type="Magento\Framework\View\Url\Config" />
     <preference for="Magento\Framework\App\Route\ConfigInterface" type="Magento\Framework\App\Route\Config" />
-    <preference for="Magento\Framework\App\Resource\ConfigInterface" type="Magento\Framework\App\Resource\Config\Proxy" />
+    <preference for="Magento\Framework\App\ResourceConnection\ConfigInterface" type="Magento\Framework\App\ResourceConnection\Config\Proxy" />
     <preference for="Magento\Framework\Oauth\OauthInterface" type="Magento\Framework\Oauth\Oauth"/>
     <preference for="Magento\Framework\View\Design\Theme\Domain\PhysicalInterface" type="Magento\Theme\Model\Theme\Domain\Physical" />
     <preference for="Magento\Framework\View\Design\Theme\Domain\VirtualInterface" type="Magento\Theme\Model\Theme\Domain\Virtual" />
@@ -82,7 +82,7 @@
     <preference for="Magento\Framework\Stdlib\CookieManagerInterface" type="Magento\Framework\Stdlib\Cookie\PhpCookieManager" />
     <preference for="Magento\Framework\TranslateInterface" type="Magento\Framework\Translate" />
     <preference for="Magento\Framework\Config\ScopeListInterface" type="interceptionConfigScope" />
-    <preference for="Magento\Framework\View\Design\Theme\Label\ListInterface" type="Magento\Theme\Model\Resource\Theme\Collection" />
+    <preference for="Magento\Framework\View\Design\Theme\Label\ListInterface" type="Magento\Theme\Model\ResourceModel\Theme\Collection" />
     <preference for="Magento\Framework\Mview\ConfigInterface" type="Magento\Framework\Mview\Config" />
     <preference for="Magento\Framework\Mview\ViewInterface" type="Magento\Framework\Mview\View" />
     <preference for="Magento\Framework\Mview\ProcessorInterface" type="Magento\Framework\Mview\Processor" />
@@ -94,7 +94,7 @@
     <preference for="Magento\Framework\Api\SearchCriteriaInterface" type="Magento\Framework\Api\SearchCriteria"/>
     <preference for="Magento\Framework\App\Rss\UrlBuilderInterface" type="Magento\Framework\App\Rss\UrlBuilder"/>
     <preference for="Magento\Framework\DB\LoggerInterface" type="Magento\Framework\DB\Logger\Quiet"/>
-    <preference for="Magento\Framework\App\Resource\ConnectionAdapterInterface" type="Magento\Framework\Model\Resource\Type\Db\Pdo\Mysql"/>
+    <preference for="Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface" type="Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql"/>
     <preference for="Magento\Framework\DB\QueryInterface" type="Magento\Framework\DB\Query"/>
     <preference for="Magento\Framework\App\ProductMetadataInterface" type="Magento\Framework\App\ProductMetadata"/>
     <preference for="Magento\Framework\Acl\CacheInterface" type="Magento\Framework\Acl\Cache" />
@@ -129,17 +129,17 @@
     <preference for="Magento\Framework\Locale\ResolverInterface" type="Magento\Framework\Locale\Resolver" />
     <preference for="Magento\Framework\Stdlib\DateTime\TimezoneInterface" type="Magento\Framework\Stdlib\DateTime\Timezone" />
 
-    <preference for="Magento\Framework\Module\ResourceInterface" type="Magento\Framework\Module\Resource" />
+    <preference for="Magento\Framework\Module\ResourceInterface" type="Magento\Framework\Module\ModuleResource" />
     <preference for="Magento\Framework\Pricing\Amount\AmountInterface" type="Magento\Framework\Pricing\Amount\Base" />
     <preference for="Magento\Framework\Api\SearchResultsInterface" type="Magento\Framework\Api\SearchResults" />
     <preference for="Magento\Framework\Api\AttributeInterface" type="Magento\Framework\Api\AttributeValue" />
-    <preference for="Magento\Framework\Model\Resource\Db\TransactionManagerInterface" type="Magento\Framework\Model\Resource\Db\TransactionManager" />
+    <preference for="Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface" type="Magento\Framework\Model\ResourceModel\Db\TransactionManager" />
     <preference for="Magento\Framework\Api\Data\ImageContentInterface" type="Magento\Framework\Api\ImageContent" />
     <preference for="Magento\Framework\Api\ImageContentValidatorInterface" type="Magento\Framework\Api\ImageContentValidator" />
     <preference for="Magento\Framework\Api\ImageProcessorInterface" type="Magento\Framework\Api\ImageProcessor" />
     <preference for="Magento\Framework\Code\Reader\ClassReaderInterface" type="Magento\Framework\Code\Reader\ClassReader" />
     <preference for="Magento\Framework\Stdlib\DateTime\DateTimeFormatterInterface" type="Magento\Framework\Stdlib\DateTime\DateTimeFormatter"/>
-    <type name="Magento\Framework\Model\Resource\Db\TransactionManager" shared="false" />
+    <type name="Magento\Framework\Model\ResourceModel\Db\TransactionManager" shared="false" />
     <type name="Magento\Framework\Logger\Handler\Base">
         <arguments>
             <argument name="filesystem" xsi:type="object">Magento\Framework\Filesystem\Driver\File</argument>
@@ -226,7 +226,7 @@
                     <item name="class" xsi:type="string">Magento\Framework\Cache\Frontend\Decorator\Logger</item>
                 </item>
             </argument>
-            <argument name="resource" xsi:type="object">Magento\Framework\App\Resource\Proxy</argument>
+            <argument name="resource" xsi:type="object">Magento\Framework\App\ResourceConnection\Proxy</argument>
         </arguments>
     </type>
     <type name="Magento\Backend\App\Area\FrontNameResolver">
@@ -305,18 +305,18 @@
             </argument>
         </arguments>
     </type>
-    <type name="Magento\Framework\App\Resource">
+    <type name="Magento\Framework\App\ResourceConnection">
         <arguments>
-            <argument name="connectionFactory" xsi:type="object">Magento\Framework\App\Resource\ConnectionFactory</argument>
+            <argument name="connectionFactory" xsi:type="object">Magento\Framework\App\ResourceConnection\ConnectionFactory</argument>
         </arguments>
     </type>
-    <type name="Magento\Framework\App\Resource\Config">
+    <type name="Magento\Framework\App\ResourceConnection\Config">
         <arguments>
-            <argument name="reader" xsi:type="object">Magento\Framework\App\Resource\Config\Reader\Proxy</argument>
+            <argument name="reader" xsi:type="object">Magento\Framework\App\ResourceConnection\Config\Reader\Proxy</argument>
             <argument name="cache" xsi:type="object">Magento\Framework\App\Cache\Type\Config\Proxy</argument>
         </arguments>
     </type>
-    <type name="Magento\Framework\App\Resource\Config\Reader">
+    <type name="Magento\Framework\App\ResourceConnection\Config\Reader">
         <arguments>
             <argument name="fileResolver" xsi:type="object">Magento\Framework\App\Config\FileResolver\Proxy</argument>
         </arguments>
diff --git a/composer.json b/composer.json
index b9bfa65c39a8c33ee1b4322a16dda9098045833b..0fa24640ae43b12e18e5f1a33654b4e88e8bdc0c 100644
--- a/composer.json
+++ b/composer.json
@@ -71,7 +71,7 @@
         "ext-mbstring": "*",
         "sjparkinson/static-review": "~4.1",
         "fabpot/php-cs-fixer": "~1.2",
-        "lusitanian/oauth": "~0.3"
+        "lusitanian/oauth": "~0.3 <=0.7.0"
     },
     "replace": {
         "magento/module-marketplace": "self.version",
@@ -149,6 +149,7 @@
         "magento/module-sales": "self.version",
         "magento/module-sales-rule": "self.version",
         "magento/module-sales-sequence": "self.version",
+        "magento/module-sample-data": "self.version",
         "magento/module-search": "self.version",
         "magento/module-send-friend": "self.version",
         "magento/module-shipping": "self.version",
@@ -223,7 +224,9 @@
         "psr-0": {
             "": "app/code/"
         },
-        "files": ["app/etc/NonComposerComponentRegistration.php"]
+        "files": [
+            "app/etc/NonComposerComponentRegistration.php"
+        ]
     },
     "autoload-dev": {
         "psr-4": {
diff --git a/composer.lock b/composer.lock
index cfa0e8c41d9439507ae4bf9ac2c968cccce49f14..30da2611948979b879c9c4272ed8ec235595f617 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,8 +4,8 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "hash": "25a5ae0bdd6b3ea879ab1140483c493e",
-    "content-hash": "05d5894f85b00df1148fd6ca99e33b82",
+    "hash": "c4198e8a51c13b0d2c96bb54023cf2c6",
+    "content-hash": "444606690390cbbc73e906d61746c25d",
     "packages": [
         {
             "name": "braintree/braintree_php",
@@ -2845,16 +2845,16 @@
         },
         {
             "name": "phpunit/php-code-coverage",
-            "version": "2.2.3",
+            "version": "2.2.4",
             "source": {
                 "type": "git",
                 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
-                "reference": "ef1ca6835468857944d5c3b48fa503d5554cff2f"
+                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ef1ca6835468857944d5c3b48fa503d5554cff2f",
-                "reference": "ef1ca6835468857944d5c3b48fa503d5554cff2f",
+                "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
+                "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
                 "shasum": ""
             },
             "require": {
@@ -2903,7 +2903,7 @@
                 "testing",
                 "xunit"
             ],
-            "time": "2015-09-14 06:51:16"
+            "time": "2015-10-06 15:47:00"
         },
         {
             "name": "phpunit/php-file-iterator",
diff --git a/dev/tests/api-functional/_files/Magento/TestModule4/Model/Resource/Item.php b/dev/tests/api-functional/_files/Magento/TestModule4/Model/ResourceModel/Item.php
similarity index 73%
rename from dev/tests/api-functional/_files/Magento/TestModule4/Model/Resource/Item.php
rename to dev/tests/api-functional/_files/Magento/TestModule4/Model/ResourceModel/Item.php
index 5aa3a48413ba2806af53acc736f5187b2ef5d28a..b8cab8ad42eec1a52394573b329d6cc121a98c74 100644
--- a/dev/tests/api-functional/_files/Magento/TestModule4/Model/Resource/Item.php
+++ b/dev/tests/api-functional/_files/Magento/TestModule4/Model/ResourceModel/Item.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\TestModule4\Model\Resource;
+namespace Magento\TestModule4\Model\ResourceModel;
 
 /**
  * Sample resource model
  */
-class Item extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
diff --git a/dev/tests/api-functional/_files/Magento/TestModule4/etc/di.xml b/dev/tests/api-functional/_files/Magento/TestModule4/etc/di.xml
index ed0bc2a38b35fe51687d59094fa3a038af126b99..a07701b9b6b92b099ca495dc3ffad744448b1566 100644
--- a/dev/tests/api-functional/_files/Magento/TestModule4/etc/di.xml
+++ b/dev/tests/api-functional/_files/Magento/TestModule4/etc/di.xml
@@ -10,7 +10,7 @@
     <preference for="Magento\TestModule4\Service\V1\Entity\ExtensibleRequestInterface" type="Magento\TestModule4\Service\V1\Entity\ExtensibleRequest" />
     <type name="Magento\TestModule4\Service\V1\Entity\ExtensibleRequest">
         <arguments>
-            <argument name="resource" xsi:type="object">Magento\TestModule4\Model\Resource\Item</argument>
+            <argument name="resource" xsi:type="object">Magento\TestModule4\Model\ResourceModel\Item</argument>
         </arguments>
     </type>
 </config>
diff --git a/dev/tests/api-functional/_files/Magento/TestModuleJoinDirectives/Model/TestRepository.php b/dev/tests/api-functional/_files/Magento/TestModuleJoinDirectives/Model/TestRepository.php
index fb7c03269090681f6ca7b53743ff55008b0d3e7d..790f5d4515a79b1d83efefe4bb0f939ef3dfe98f 100644
--- a/dev/tests/api-functional/_files/Magento/TestModuleJoinDirectives/Model/TestRepository.php
+++ b/dev/tests/api-functional/_files/Magento/TestModuleJoinDirectives/Model/TestRepository.php
@@ -14,7 +14,7 @@ use Magento\Framework\Api\ExtensionAttribute\JoinProcessorInterface;
 class TestRepository implements TestRepositoryInterface
 {
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\CollectionFactory
+     * @var \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory
      */
     private $quoteCollectionFactory;
 
@@ -29,12 +29,12 @@ class TestRepository implements TestRepositoryInterface
     private $extensionAttributesJoinProcessor;
 
     /**
-     * @param \Magento\Quote\Model\Resource\Quote\CollectionFactory $quoteCollectionFactory
+     * @param \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory $quoteCollectionFactory
      * @param \Magento\Quote\Api\Data\CartSearchResultsInterfaceFactory $searchResultsDataFactory
      * @param JoinProcessorInterface $extensionAttributesJoinProcessor
      */
     public function __construct(
-        \Magento\Quote\Model\Resource\Quote\CollectionFactory $quoteCollectionFactory,
+        \Magento\Quote\Model\ResourceModel\Quote\CollectionFactory $quoteCollectionFactory,
         \Magento\Quote\Api\Data\CartSearchResultsInterfaceFactory $searchResultsDataFactory,
         JoinProcessorInterface $extensionAttributesJoinProcessor
     ) {
diff --git a/dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/Resource/Item.php b/dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/ResourceModel/Item.php
similarity index 73%
rename from dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/Resource/Item.php
rename to dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/ResourceModel/Item.php
index 3cde8eba282ec34c5088b8feb6ddbc99afcc7b49..fcdce38ba6742e16f965a7c8b64d58306250ba21 100644
--- a/dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/Resource/Item.php
+++ b/dev/tests/api-functional/_files/Magento/TestModuleMSC/Model/ResourceModel/Item.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\TestModuleMSC\Model\Resource;
+namespace Magento\TestModuleMSC\Model\ResourceModel;
 
 /**
  * Sample resource model
  */
-class Item extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class Item extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Initialize connection and define main table
diff --git a/dev/tests/api-functional/_files/Magento/TestModuleMSC/etc/di.xml b/dev/tests/api-functional/_files/Magento/TestModuleMSC/etc/di.xml
index 737a9f3b1092461726f79e515e7cbf8638eb0f59..50b439f7ca545f7c6bd96e0c5d560a9bc1492732 100644
--- a/dev/tests/api-functional/_files/Magento/TestModuleMSC/etc/di.xml
+++ b/dev/tests/api-functional/_files/Magento/TestModuleMSC/etc/di.xml
@@ -21,13 +21,13 @@
     </virtualType>
     <type name="Magento\TestModuleMSC\Model\Data\Item">
         <arguments>
-            <argument name="resource" xsi:type="object">Magento\TestModuleMSC\Model\Resource\Item</argument>
+            <argument name="resource" xsi:type="object">Magento\TestModuleMSC\Model\ResourceModel\Item</argument>
             <argument name="metadataService" xsi:type="object">Magento\TestModuleMSC\Service\Config\TestModuleMSCMetadataConfig</argument>
         </arguments>
     </type>
     <type name="Magento\TestModuleMSC\Model\Data\CustomAttributeDataObject">
         <arguments>
-            <argument name="resource" xsi:type="object">Magento\TestModuleMSC\Model\Resource\Item</argument>
+            <argument name="resource" xsi:type="object">Magento\TestModuleMSC\Model\ResourceModel\Item</argument>
         </arguments>
     </type>
         <virtualType name="CustomAttributeMap" type="Magento\Framework\DataObject">
diff --git a/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..72005876cc595da0a6d1a2ae85a258464b07781f
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/Bundle/Api/OrderItemRepositoryTest.php
@@ -0,0 +1,128 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Bundle\Api;
+
+use Magento\TestFramework\TestCase\WebapiAbstract;
+
+class OrderItemRepositoryTest extends WebapiAbstract
+{
+    const RESOURCE_PATH = '/V1/orders/items';
+
+    const SERVICE_VERSION = 'V1';
+    const SERVICE_NAME = 'salesOrderItemRepositoryV1';
+
+    const ORDER_INCREMENT_ID = '100000001';
+
+    /**
+     * @var \Magento\TestFramework\ObjectManager
+     */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Bundle/_files/order_item_with_bundle_and_options.php
+     */
+    public function testGet()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+        $orderItem = current($order->getItems());
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'get',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]);
+
+        $this->assertTrue(is_array($response));
+        $this->assertOrderItem($orderItem, $response);
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Bundle/_files/order_item_with_bundle_and_options.php
+     */
+    public function testGetList()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+
+        /** @var $searchCriteriaBuilder  \Magento\Framework\Api\SearchCriteriaBuilder */
+        $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder');
+        /** @var $filterBuilder  \Magento\Framework\Api\FilterBuilder */
+        $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder');
+
+        $searchCriteriaBuilder->addFilters(
+            [
+                $filterBuilder->setField('order_id')
+                    ->setValue($order->getId())
+                    ->create(),
+            ]
+        );
+
+        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'getList',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, $requestData);
+
+        $this->assertTrue(is_array($response));
+        $this->assertArrayHasKey('items', $response);
+        $this->assertCount(1, $response['items']);
+        $this->assertTrue(is_array($response['items'][0]));
+        $this->assertOrderItem(current($order->getItems()), $response['items'][0]);
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Item $orderItem
+     * @param array $response
+     * @return void
+     */
+    protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response)
+    {
+        $bundleOption = $orderItem->getBuyRequest()->getBundleOption();
+        $bundleOptionQty = $orderItem->getBuyRequest()->getBundleOptionQty();
+
+        $this->assertArrayHasKey('product_option', $response);
+        $this->assertArrayHasKey('extension_attributes', $response['product_option']);
+        $this->assertArrayHasKey('bundle_options', $response['product_option']['extension_attributes']);
+
+        $actualOptions = $response['product_option']['extension_attributes']['bundle_options'];
+
+        $this->assertEquals(array_keys($bundleOption), array_column($actualOptions, 'option_id'));
+        $this->assertEquals($bundleOptionQty, array_column($actualOptions, 'option_qty', 'option_id'));
+
+        foreach ($actualOptions as $option) {
+            $expectedSelections = is_array($bundleOption[$option['option_id']])
+                ? $bundleOption[$option['option_id']]
+                : [$bundleOption[$option['option_id']]];
+            $this->assertEquals($expectedSelections, $option['option_selections']);
+        }
+    }
+}
diff --git a/dev/tests/api-functional/testsuite/Magento/Bundle/Api/ProductServiceTest.php b/dev/tests/api-functional/testsuite/Magento/Bundle/Api/ProductServiceTest.php
index 80fbe1999d3349f6b889931c23515cba7316e0c2..2c2a211b6e5839e8775fa5f269d554468f7c9fda 100644
--- a/dev/tests/api-functional/testsuite/Magento/Bundle/Api/ProductServiceTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Bundle/Api/ProductServiceTest.php
@@ -23,7 +23,7 @@ class ProductServiceTest extends WebapiAbstract
     const BUNDLE_PRODUCT_ID = 'sku-test-product-bundle';
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     protected $productCollection;
 
@@ -33,7 +33,7 @@ class ProductServiceTest extends WebapiAbstract
     public function setUp()
     {
         $objectManager = Bootstrap::getObjectManager();
-        $this->productCollection = $objectManager->get('Magento\Catalog\Model\Resource\Product\Collection');
+        $this->productCollection = $objectManager->get('Magento\Catalog\Model\ResourceModel\Product\Collection');
     }
 
     /**
diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/CategoryLinkRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/CategoryLinkRepositoryTest.php
index 84588ac82171ea29d17ba377b753d9265c5417db..6a5b956a28fa19c793ece2dd36e035d14777d2f3 100644
--- a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/CategoryLinkRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/CategoryLinkRepositoryTest.php
@@ -27,6 +27,8 @@ class CategoryLinkRepositoryTest extends WebapiAbstract
      */
     public function testSave($productLink, $productId, $productPosition = 0)
     {
+        $this->checkIfTestable();
+
         $serviceInfo = [
             'rest' => [
                 'resourcePath' => self::RESOURCE_PATH_SUFFIX
@@ -69,6 +71,8 @@ class CategoryLinkRepositoryTest extends WebapiAbstract
      */
     public function testUpdateProduct($productLink, $productId, $productPosition = 0)
     {
+        $this->checkIfTestable();
+
         $serviceInfo = [
             'rest' => [
                 'resourcePath' => self::RESOURCE_PATH_SUFFIX
@@ -107,6 +111,8 @@ class CategoryLinkRepositoryTest extends WebapiAbstract
      */
     public function testDelete()
     {
+        $this->checkIfTestable();
+
         $serviceInfo = [
             'rest' => [
                 'resourcePath' => self::RESOURCE_PATH_SUFFIX . '/' . $this->categoryId .
@@ -146,4 +152,20 @@ class CategoryLinkRepositoryTest extends WebapiAbstract
             return false;
         }
     }
+
+    /**
+     * MAGETWO-41737: Skip tests when the flag 'custom_categories_sort' is up
+     * @return void
+     */
+    private function checkIfTestable()
+    {
+        $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+        /** @var \Magento\Framework\App\Config\ScopeConfigInterface $config */
+        $config = $objectManager->get('Magento\Framework\App\Config\ScopeConfigInterface');
+
+        if ($config->getValue('catalog/custom_categories_sort') == 1) {
+            $this->markTestSkipped('Will be fixed after MAGETWO-41737');
+        }
+    }
 }
diff --git a/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..db63fbb6084601820a27dc4cc770fa6826a28507
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/Catalog/Api/OrderItemRepositoryTest.php
@@ -0,0 +1,129 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Catalog\Api;
+
+use Magento\TestFramework\TestCase\WebapiAbstract;
+
+class OrderItemRepositoryTest extends WebapiAbstract
+{
+    const RESOURCE_PATH = '/V1/orders/items';
+
+    const SERVICE_VERSION = 'V1';
+    const SERVICE_NAME = 'salesOrderItemRepositoryV1';
+
+    const ORDER_INCREMENT_ID = '100000001';
+
+    /**
+     * @var \Magento\TestFramework\ObjectManager
+     */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Catalog/_files/order_item_with_product_and_custom_options.php
+     */
+    public function testGet()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+        $orderItem = current($order->getItems());
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'get',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]);
+
+        $this->assertTrue(is_array($response));
+        $this->assertOrderItem($orderItem, $response);
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Catalog/_files/order_item_with_product_and_custom_options.php
+     */
+    public function testGetList()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+
+        /** @var $searchCriteriaBuilder  \Magento\Framework\Api\SearchCriteriaBuilder */
+        $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder');
+        /** @var $filterBuilder  \Magento\Framework\Api\FilterBuilder */
+        $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder');
+
+        $searchCriteriaBuilder->addFilters(
+            [
+                $filterBuilder->setField('order_id')
+                    ->setValue($order->getId())
+                    ->create(),
+            ]
+        );
+
+        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'getList',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, $requestData);
+
+        $this->assertTrue(is_array($response));
+        $this->assertArrayHasKey('items', $response);
+        $this->assertCount(1, $response['items']);
+        $this->assertTrue(is_array($response['items'][0]));
+        $this->assertOrderItem(current($order->getItems()), $response['items'][0]);
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Item $orderItem
+     * @param array $response
+     * @return void
+     */
+    protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response)
+    {
+        $expected = $orderItem->getBuyRequest()->getOptions();
+
+        $this->assertArrayHasKey('product_option', $response);
+        $this->assertArrayHasKey('extension_attributes', $response['product_option']);
+        $this->assertArrayHasKey('custom_options', $response['product_option']['extension_attributes']);
+
+        $actualOptions = $response['product_option']['extension_attributes']['custom_options'];
+
+        $expectedOptions = [];
+        foreach ($expected as $optionId => $optionValue) {
+            if (is_array($optionValue)) {
+                $optionValue = implode(',', $optionValue);
+            }
+            $expectedOptions[] = [
+                'option_id' => $optionId,
+                'option_value' => $optionValue,
+            ];
+        }
+        $this->assertEquals($expectedOptions, $actualOptions);
+    }
+}
diff --git a/dev/tests/api-functional/testsuite/Magento/CatalogInventory/Api/StockItemTest.php b/dev/tests/api-functional/testsuite/Magento/CatalogInventory/Api/StockItemTest.php
index 606c42e6b1269fa16cd5fc1c279fb7f561232425..8753e3021d733396544c087dfbde6ec9423d8434 100644
--- a/dev/tests/api-functional/testsuite/Magento/CatalogInventory/Api/StockItemTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/CatalogInventory/Api/StockItemTest.php
@@ -36,7 +36,7 @@ class StockItemTest extends WebapiAbstract
      */
     const RESOURCE_PUT_PATH = '/V1/products/:productSku/stockItems/:itemId';
 
-    /** @var \Magento\Catalog\Model\Resource\Product\Collection */
+    /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection */
     protected $productCollection;
 
     /** @var \Magento\Framework\ObjectManagerInterface */
@@ -48,7 +48,7 @@ class StockItemTest extends WebapiAbstract
     public function setUp()
     {
         $this->objectManager = Bootstrap::getObjectManager();
-        $this->productCollection = $this->objectManager->get('Magento\Catalog\Model\Resource\Product\Collection');
+        $this->productCollection = $this->objectManager->get('Magento\Catalog\Model\ResourceModel\Product\Collection');
     }
 
     /**
@@ -137,7 +137,7 @@ class StockItemTest extends WebapiAbstract
 
         $stockItemFactory = $this->objectManager->get('Magento\CatalogInventory\Api\Data\StockItemInterfaceFactory');
         $stockItem = $stockItemFactory->create();
-        $stockItemResource = $this->objectManager->get('Magento\CatalogInventory\Model\Resource\Stock\Item');
+        $stockItemResource = $this->objectManager->get('Magento\CatalogInventory\Model\ResourceModel\Stock\Item');
         $stockItemResource->loadByProductId($stockItem, $stockItemOld['product_id'], $stockItemOld['website_id']);
         $expectedResult['item_id'] = $stockItem->getItemId();
         $this->assertEquals($expectedResult, array_intersect_key($stockItem->getData(), $expectedResult));
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 cf6ae967dfbec92f8984b186702c1da86b4121bd..07e00fa1a0bec28ff8b998dceaeee155683d338a 100644
--- a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/CartItemRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/CartItemRepositoryTest.php
@@ -56,9 +56,9 @@ class CartItemRepositoryTest extends WebapiAbstract
         $items = $quote->getAllItems();
         $this->assertGreaterThan(0, count($items));
 
-        /** @var \Magento\Quote\Model\Resource\Quote\Item|null $item */
+        /** @var \Magento\Quote\Model\ResourceModel\Quote\Item|null $item */
         $item = null;
-        /** @var \Magento\Quote\Model\Resource\Quote\Item $quoteItem */
+        /** @var \Magento\Quote\Model\ResourceModel\Quote\Item $quoteItem */
         foreach ($items as $quoteItem) {
             if ($quoteItem->getProductType() == Configurable::TYPE_CODE && !$quoteItem->getParentItemId()) {
                 $item = $quoteItem;
@@ -151,9 +151,9 @@ class CartItemRepositoryTest extends WebapiAbstract
         $items = $quote->getAllItems();
         $this->assertGreaterThan(0, count($items));
 
-        /** @var \Magento\Quote\Model\Resource\Quote\Item|null $item */
+        /** @var \Magento\Quote\Model\ResourceModel\Quote\Item|null $item */
         $item = null;
-        /** @var \Magento\Quote\Model\Resource\Quote\Item $quoteItem */
+        /** @var \Magento\Quote\Model\ResourceModel\Quote\Item $quoteItem */
         foreach ($items as $quoteItem) {
             if ($quoteItem->getProductType() == Configurable::TYPE_CODE) {
                 $item = $quoteItem;
@@ -236,9 +236,9 @@ class CartItemRepositoryTest extends WebapiAbstract
         $items = $quote->getAllItems();
         $this->assertGreaterThan(0, count($items));
 
-        /** @var \Magento\Quote\Model\Resource\Quote\Item|null $item */
+        /** @var \Magento\Quote\Model\ResourceModel\Quote\Item|null $item */
         $item = null;
-        /** @var \Magento\Quote\Model\Resource\Quote\Item $quoteItem */
+        /** @var \Magento\Quote\Model\ResourceModel\Quote\Item $quoteItem */
         foreach ($items as $quoteItem) {
             if ($quoteItem->getProductType() == Configurable::TYPE_CODE) {
                 $item = $quoteItem;
diff --git a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..25cb0e8652bf2996a9864e68bfcbeb5fb977fe63
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/OrderItemRepositoryTest.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\ConfigurableProduct\Api;
+
+use Magento\TestFramework\TestCase\WebapiAbstract;
+
+class OrderItemRepositoryTest extends WebapiAbstract
+{
+    const RESOURCE_PATH = '/V1/orders/items';
+
+    const SERVICE_VERSION = 'V1';
+    const SERVICE_NAME = 'salesOrderItemRepositoryV1';
+
+    const ORDER_INCREMENT_ID = '100000001';
+
+    /**
+     * @var \Magento\TestFramework\ObjectManager
+     */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php
+     */
+    public function testGet()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+        $orderItem = current($order->getItems());
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'get',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]);
+
+        $this->assertTrue(is_array($response));
+        $this->assertOrderItem($orderItem, $response);
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php
+     */
+    public function testGetList()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+
+        /** @var $searchCriteriaBuilder  \Magento\Framework\Api\SearchCriteriaBuilder */
+        $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder');
+        /** @var $filterBuilder  \Magento\Framework\Api\FilterBuilder */
+        $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder');
+
+        $searchCriteriaBuilder->addFilters(
+            [
+                $filterBuilder->setField('order_id')
+                    ->setValue($order->getId())
+                    ->create(),
+            ]
+        );
+
+        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'getList',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, $requestData);
+
+        $this->assertTrue(is_array($response));
+        $this->assertArrayHasKey('items', $response);
+        $this->assertCount(1, $response['items']);
+        $this->assertTrue(is_array($response['items'][0]));
+        $this->assertOrderItem(current($order->getItems()), $response['items'][0]);
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Item $orderItem
+     * @param array $response
+     * @return void
+     */
+    protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response)
+    {
+        $expected = $orderItem->getBuyRequest()->getSuperAttribute();
+
+        $this->assertArrayHasKey('product_option', $response);
+        $this->assertArrayHasKey('extension_attributes', $response['product_option']);
+        $this->assertArrayHasKey('configurable_item_options', $response['product_option']['extension_attributes']);
+
+        $actualOptions = $response['product_option']['extension_attributes']['configurable_item_options'];
+
+        $this->assertTrue(is_array($actualOptions));
+        $this->assertTrue(is_array($actualOptions[0]));
+        $this->assertArrayHasKey('option_id', $actualOptions[0]);
+        $this->assertArrayHasKey('option_value', $actualOptions[0]);
+
+        $this->assertEquals(key($expected), $actualOptions[0]['option_id']);
+        $this->assertEquals(current($expected), $actualOptions[0]['option_value']);
+    }
+}
diff --git a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/ProductRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/ProductRepositoryTest.php
index b999ec3a3a778010e6db765327122030d6e0aade..e8719f6f4e276d3185856c04af776a8b38e61048 100644
--- a/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/ProductRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/ProductRepositoryTest.php
@@ -56,9 +56,9 @@ class ProductRepositoryTest extends WebapiAbstract
 
     protected function getConfigurableAttributeOptions()
     {
-        /** @var \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection $optionCollection */
+        /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection $optionCollection */
         $optionCollection = $this->objectManager->create(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection'
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection'
         );
         $options = $optionCollection->setAttributeFilter($this->configurableAttribute->getId())->getData();
         return $options;
diff --git a/dev/tests/api-functional/testsuite/Magento/Customer/Api/GroupManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Customer/Api/GroupManagementTest.php
index d3b7dcbe0e7dab7d4573b230db2817a2c4d395c2..c999456b9cc42fe39cb0ff81504df76ea2d44c6e 100644
--- a/dev/tests/api-functional/testsuite/Magento/Customer/Api/GroupManagementTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Customer/Api/GroupManagementTest.php
@@ -8,7 +8,7 @@ namespace Magento\Customer\Api;
 
 use Magento\Customer\Model\Data\Group as CustomerGroup;
 use Magento\Customer\Model\GroupRegistry;
-use Magento\Customer\Model\Resource\GroupRepository;
+use Magento\Customer\Model\ResourceModel\GroupRepository;
 use Magento\TestFramework\Helper\Bootstrap;
 use Magento\TestFramework\TestCase\WebapiAbstract;
 
@@ -38,7 +38,7 @@ class GroupManagementTest extends WebapiAbstract
     {
         $objectManager = Bootstrap::getObjectManager();
         $this->groupRegistry = $objectManager->get('Magento\Customer\Model\GroupRegistry');
-        $this->groupRepository = $objectManager->get('Magento\Customer\Model\Resource\GroupRepository');
+        $this->groupRepository = $objectManager->get('Magento\Customer\Model\ResourceModel\GroupRepository');
     }
 
     /**
diff --git a/dev/tests/api-functional/testsuite/Magento/Customer/Api/GroupRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Customer/Api/GroupRepositoryTest.php
index 16ea7de67a72734c3c18807b2cd3ab54371a0ed9..e241e2c2b1f385096fc1593643762e21027b6347 100644
--- a/dev/tests/api-functional/testsuite/Magento/Customer/Api/GroupRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Customer/Api/GroupRepositoryTest.php
@@ -8,7 +8,7 @@ namespace Magento\Customer\Api;
 
 use Magento\Customer\Model\Data\Group as CustomerGroup;
 use Magento\Customer\Model\GroupRegistry;
-use Magento\Customer\Model\Resource\GroupRepository;
+use Magento\Customer\Model\ResourceModel\GroupRepository;
 use Magento\Framework\Exception\NoSuchEntityException;
 use Magento\TestFramework\Helper\Bootstrap;
 use Magento\TestFramework\TestCase\WebapiAbstract;
@@ -44,7 +44,7 @@ class GroupRepositoryTest extends WebapiAbstract
     {
         $objectManager = Bootstrap::getObjectManager();
         $this->groupRegistry = $objectManager->get('Magento\Customer\Model\GroupRegistry');
-        $this->groupRepository = $objectManager->get('Magento\Customer\Model\Resource\GroupRepository');
+        $this->groupRepository = $objectManager->get('Magento\Customer\Model\ResourceModel\GroupRepository');
         $this->customerGroupFactory = $objectManager->create('Magento\Customer\Api\Data\GroupInterfaceFactory');
     }
 
diff --git a/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..41a5c6a506962a018eeb8421c6d8bc53f5ad7567
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/OrderItemRepositoryTest.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Downloadable\Api;
+
+use Magento\TestFramework\TestCase\WebapiAbstract;
+
+class OrderItemRepositoryTest extends WebapiAbstract
+{
+    const RESOURCE_PATH = '/V1/orders/items';
+
+    const SERVICE_VERSION = 'V1';
+    const SERVICE_NAME = 'salesOrderItemRepositoryV1';
+
+    const ORDER_INCREMENT_ID = '100000001';
+
+    /**
+     * @var \Magento\TestFramework\ObjectManager
+     */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Downloadable/_files/order_item_with_downloadable_and_options.php
+     */
+    public function testGet()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+        $orderItem = current($order->getItems());
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'get',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]);
+
+        $this->assertTrue(is_array($response));
+        $this->assertOrderItem($orderItem, $response);
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Downloadable/_files/order_item_with_downloadable_and_options.php
+     */
+    public function testGetList()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+
+        /** @var $searchCriteriaBuilder  \Magento\Framework\Api\SearchCriteriaBuilder */
+        $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder');
+        /** @var $filterBuilder  \Magento\Framework\Api\FilterBuilder */
+        $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder');
+
+        $searchCriteriaBuilder->addFilters(
+            [
+                $filterBuilder->setField('order_id')
+                    ->setValue($order->getId())
+                    ->create(),
+            ]
+        );
+
+        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'getList',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, $requestData);
+
+        $this->assertTrue(is_array($response));
+        $this->assertArrayHasKey('items', $response);
+        $this->assertCount(1, $response['items']);
+        $this->assertTrue(is_array($response['items'][0]));
+        $this->assertOrderItem(current($order->getItems()), $response['items'][0]);
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Item $orderItem
+     * @param array $response
+     * @return void
+     */
+    protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response)
+    {
+        $expected = $orderItem->getBuyRequest()->getLinks();
+
+        $this->assertArrayHasKey('product_option', $response);
+        $this->assertArrayHasKey('extension_attributes', $response['product_option']);
+        $this->assertArrayHasKey('downloadable_option', $response['product_option']['extension_attributes']);
+
+        $actualOptions = $response['product_option']['extension_attributes']['downloadable_option'];
+
+        $this->assertArrayHasKey('downloadable_links', $actualOptions);
+        $this->assertEquals($expected, $actualOptions['downloadable_links']);
+    }
+}
diff --git a/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/SampleRepositoryTest.php b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/SampleRepositoryTest.php
index dfd7ee356eb76bb0663e68540d723c25e3bd547a..071ae3dbbad547fc9ee4187826be19a32c149c01 100644
--- a/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/SampleRepositoryTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Downloadable/Api/SampleRepositoryTest.php
@@ -98,7 +98,7 @@ class SampleRepositoryTest extends WebapiAbstract
      */
     protected function getTargetSample(Product $product, $sampleId = null)
     {
-        /** @var $samples \Magento\Downloadable\Model\Resource\Sample\Collection */
+        /** @var $samples \Magento\Downloadable\Model\ResourceModel\Sample\Collection */
         $samples = $product->getTypeInstance()->getSamples($product);
         if ($sampleId !== null) {
             /* @var $sample \Magento\Downloadable\Model\Sample */
diff --git a/dev/tests/api-functional/testsuite/Magento/GroupedProduct/Api/ProductLinkTypeListTest.php b/dev/tests/api-functional/testsuite/Magento/GroupedProduct/Api/ProductLinkTypeListTest.php
index 960e9cdbfa3b9aec2dc6ebab6f6d0753f6a5a704..535075ce64680cf96e42c2c5718d2c7483ada868 100644
--- a/dev/tests/api-functional/testsuite/Magento/GroupedProduct/Api/ProductLinkTypeListTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/GroupedProduct/Api/ProductLinkTypeListTest.php
@@ -6,7 +6,7 @@
  */
 namespace Magento\GroupedProduct\Api;
 
-use Magento\GroupedProduct\Model\Resource\Product\Link;
+use Magento\GroupedProduct\Model\ResourceModel\Product\Link;
 
 class ProductLinkTypeListTest extends \Magento\TestFramework\TestCase\WebapiAbstract
 {
diff --git a/dev/tests/api-functional/testsuite/Magento/Integration/Model/CustomerTokenServiceTest.php b/dev/tests/api-functional/testsuite/Magento/Integration/Model/CustomerTokenServiceTest.php
index 993a369782eca345eb717089573788b800f548e2..2244a49265f868aae0d1978905f13d99f3ca3411 100644
--- a/dev/tests/api-functional/testsuite/Magento/Integration/Model/CustomerTokenServiceTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Integration/Model/CustomerTokenServiceTest.php
@@ -13,7 +13,7 @@ use Magento\TestFramework\Helper\Bootstrap;
 use Magento\TestFramework\TestCase\WebapiAbstract;
 use Magento\User\Model\User as UserModel;
 use Magento\Framework\Webapi\Exception as HTTPExceptionCodes;
-use Magento\Integration\Model\Resource\Oauth\Token\CollectionFactory;
+use Magento\Integration\Model\ResourceModel\Oauth\Token\CollectionFactory;
 
 /**
  * api-functional test for \Magento\Integration\Model\CustomerTokenService.
@@ -56,7 +56,7 @@ class CustomerTokenServiceTest extends WebapiAbstract
             'Magento\Customer\Api\AccountManagementInterface'
         );
         $tokenCollectionFactory = Bootstrap::getObjectManager()->get(
-            'Magento\Integration\Model\Resource\Oauth\Token\CollectionFactory'
+            'Magento\Integration\Model\ResourceModel\Oauth\Token\CollectionFactory'
         );
         $this->tokenCollection = $tokenCollectionFactory->create();
         $this->userModel = Bootstrap::getObjectManager()->get('Magento\User\Model\User');
@@ -82,7 +82,7 @@ class CustomerTokenServiceTest extends WebapiAbstract
 
         $customerData = $this->customerAccountManagement->authenticate($customerUserName, $password);
 
-        /** @var $this->tokenCollection \Magento\Integration\Model\Resource\Oauth\Token\Collection */
+        /** @var $this->tokenCollection \Magento\Integration\Model\ResourceModel\Oauth\Token\Collection */
         $this->tokenCollection->addFilterByCustomerId($customerData->getId());
 
         foreach ($this->tokenCollection->getItems() as $item) {
diff --git a/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestPaymentMethodManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestPaymentMethodManagementTest.php
index a1e2789c99142741e413079d6ecbf3be90550c7b..0a238c7f6659cffc84b19a28d0e3465bcdcfb58d 100644
--- a/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestPaymentMethodManagementTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Quote/Api/GuestPaymentMethodManagementTest.php
@@ -81,11 +81,7 @@ class GuestPaymentMethodManagementTest extends \Magento\TestFramework\TestCase\W
             "cartId" => $cartId,
             "method" => [
                 'method' => 'checkmo',
-                'po_number' => null,
-                'cc_owner' => 'John',
-                'cc_type' => null,
-                'cc_exp_year' => null,
-                'cc_exp_month' => null,
+                'po_number' => null
             ],
         ];
 
@@ -118,11 +114,7 @@ class GuestPaymentMethodManagementTest extends \Magento\TestFramework\TestCase\W
             "cartId" => $cartId,
             "method" => [
                 'method' => 'checkmo',
-                'po_number' => '200',
-                'cc_owner' => 'tester',
-                'cc_type' => 'test',
-                'cc_exp_year' => '2014',
-                'cc_exp_month' => '1',
+                'po_number' => '200'
             ],
         ];
         $this->assertNotNull($this->_webApiCall($serviceInfo, $requestData));
@@ -154,11 +146,7 @@ class GuestPaymentMethodManagementTest extends \Magento\TestFramework\TestCase\W
             "cartId" => $cartId,
             "method" => [
                 'method' => 'checkmo',
-                'po_number' => '200',
-                'cc_owner' => 'tester',
-                'cc_type' => 'test',
-                'cc_exp_year' => '2014',
-                'cc_exp_month' => '1',
+                'po_number' => '200'
             ],
         ];
 
@@ -193,11 +181,7 @@ class GuestPaymentMethodManagementTest extends \Magento\TestFramework\TestCase\W
             "cartId" => $cartId,
             "method" => [
                 'method' => 'checkmo',
-                'po_number' => '200',
-                'cc_owner' => 'tester',
-                'cc_type' => 'test',
-                'cc_exp_year' => '2014',
-                'cc_exp_month' => '1',
+                'po_number' => '200'
             ],
         ];
         $this->assertNotNull($this->_webApiCall($serviceInfo, $requestData));
@@ -275,7 +259,7 @@ class GuestPaymentMethodManagementTest extends \Magento\TestFramework\TestCase\W
      */
     protected function getPaymentMethodFieldsForAssert()
     {
-        return ['method', 'po_number', 'cc_owner', 'cc_type', 'cc_exp_year', 'cc_exp_month', 'additional_data'];
+        return ['method', 'po_number', 'additional_data'];
     }
 
     /**
diff --git a/dev/tests/api-functional/testsuite/Magento/Quote/Api/PaymentMethodManagementTest.php b/dev/tests/api-functional/testsuite/Magento/Quote/Api/PaymentMethodManagementTest.php
index 8a6115ef70be0b80a8e42b1ee9df067fafdbb544..c9f3c85451dfc68aa01e4c267b0899e9fe6ea6cf 100644
--- a/dev/tests/api-functional/testsuite/Magento/Quote/Api/PaymentMethodManagementTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Quote/Api/PaymentMethodManagementTest.php
@@ -47,11 +47,7 @@ class PaymentMethodManagementTest extends \Magento\TestFramework\TestCase\Webapi
             "cartId" => $cartId,
             "method" => [
                 'method' => 'checkmo',
-                'po_number' => null,
-                'cc_owner' => 'John',
-                'cc_type' => null,
-                'cc_exp_year' => null,
-                'cc_exp_month' => null,
+                'po_number' => null
             ],
         ];
 
@@ -84,11 +80,7 @@ class PaymentMethodManagementTest extends \Magento\TestFramework\TestCase\Webapi
             "cartId" => $cartId,
             "method" => [
                 'method' => 'checkmo',
-                'po_number' => '200',
-                'cc_owner' => 'tester',
-                'cc_type' => 'test',
-                'cc_exp_year' => '2014',
-                'cc_exp_month' => '1',
+                'po_number' => '200'
             ],
         ];
         $this->assertNotNull($this->_webApiCall($serviceInfo, $requestData));
@@ -120,11 +112,7 @@ class PaymentMethodManagementTest extends \Magento\TestFramework\TestCase\Webapi
             "cartId" => $cartId,
             "method" => [
                 'method' => 'checkmo',
-                'po_number' => '200',
-                'cc_owner' => 'tester',
-                'cc_type' => 'test',
-                'cc_exp_year' => '2014',
-                'cc_exp_month' => '1',
+                'po_number' => '200'
             ],
         ];
 
@@ -159,11 +147,7 @@ class PaymentMethodManagementTest extends \Magento\TestFramework\TestCase\Webapi
             "cartId" => $cartId,
             "method" => [
                 'method' => 'checkmo',
-                'po_number' => '200',
-                'cc_owner' => 'tester',
-                'cc_type' => 'test',
-                'cc_exp_year' => '2014',
-                'cc_exp_month' => '1',
+                'po_number' => '200'
             ],
         ];
         $this->assertNotNull($this->_webApiCall($serviceInfo, $requestData));
@@ -317,11 +301,7 @@ class PaymentMethodManagementTest extends \Magento\TestFramework\TestCase\Webapi
         $requestData = [
             "method" => [
                 'method' => 'checkmo',
-                'po_number' => '200',
-                'cc_owner' => 'tester',
-                'cc_type' => 'test',
-                'cc_exp_year' => '2014',
-                'cc_exp_month' => '1',
+                'po_number' => '200'
             ],
         ];
 
@@ -333,7 +313,7 @@ class PaymentMethodManagementTest extends \Magento\TestFramework\TestCase\Webapi
      */
     protected function getPaymentMethodFieldsForAssert()
     {
-        return ['method', 'po_number', 'cc_owner', 'cc_type', 'cc_exp_year', 'cc_exp_month', 'additional_data'];
+        return ['method', 'po_number', 'additional_data'];
     }
 
     /**
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoAddCommentTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoAddCommentTest.php
index 909d1bf694e8fa61e9c4bf0b04b6108de30fffb0..41cd5c2607a3f959c1e81a22c4c980cee24b831c 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoAddCommentTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoAddCommentTest.php
@@ -50,8 +50,9 @@ class CreditmemoAddCommentTest extends WebapiAbstract
      */
     public function testCreditmemoAddComment()
     {
-        /** @var \Magento\Sales\Model\Resource\Order\Creditmemo\Collection $creditmemoCollection */
-        $creditmemoCollection = $this->objectManager->get('Magento\Sales\Model\Resource\Order\Creditmemo\Collection');
+        /** @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection $creditmemoCollection */
+        $creditmemoCollection =
+            $this->objectManager->get('Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection');
         $creditmemo = $creditmemoCollection->getFirstItem();
 
         $commentData = [
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoCancelTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoCancelTest.php
index fd420b3e8496b882726c6c15e95ee6085ce1aadd..2fe034bcce0d57b4c9984505b4d4e1e0a6ddd8db 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoCancelTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoCancelTest.php
@@ -26,8 +26,8 @@ class CreditmemoCancelTest extends WebapiAbstract
         $this->markTestSkipped('You can not cancel Credit Memo');
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 
-        /** @var \Magento\Sales\Model\Resource\Order\Creditmemo\Collection $creditmemoCollection */
-        $creditmemoCollection = $objectManager->get('Magento\Sales\Model\Resource\Order\Creditmemo\Collection');
+        /** @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection $creditmemoCollection */
+        $creditmemoCollection = $objectManager->get('Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection');
         $creditmemo = $creditmemoCollection->getFirstItem();
 
         $serviceInfo = [
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoCommentsListTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoCommentsListTest.php
index faf8bdeb1b5c6169fdd9f8622cd89e64e14a96fe..39e89a1e77c73dae611a323f39dfa313e9c4949e 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoCommentsListTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoCommentsListTest.php
@@ -24,8 +24,8 @@ class CreditmemoCommentsListTest extends WebapiAbstract
     {
         $comment = 'Test comment';
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
-        /** @var \Magento\Sales\Model\Resource\Order\Creditmemo\Collection $creditmemoCollection */
-        $creditmemoCollection = $objectManager->get('Magento\Sales\Model\Resource\Order\Creditmemo\Collection');
+        /** @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection $creditmemoCollection */
+        $creditmemoCollection = $objectManager->get('Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection');
         $creditmemo = $creditmemoCollection->getFirstItem();
         $creditmemoComment = $objectManager->get('Magento\Sales\Model\Order\Creditmemo\Comment');
 
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoCreateTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoCreateTest.php
index 4e14024dcf104ff1f0a34b9a19501bdd065ef35a..b3b608336b433bff426b8458863db305ac2582a6 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoCreateTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoCreateTest.php
@@ -37,7 +37,7 @@ class CreditmemoCreateTest extends WebapiAbstract
     public function testInvoke()
     {
         /** @var \Magento\Sales\Model\Order $order */
-        $orderCollection = $this->objectManager->get('Magento\Sales\Model\Resource\Order\Collection');
+        $orderCollection = $this->objectManager->get('Magento\Sales\Model\ResourceModel\Order\Collection');
         $order = $orderCollection->getFirstItem();
 
 //        $order = $this->objectManager->create('Magento\Sales\Model\Order')->loadByIncrementId('100000001');
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoEmailTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoEmailTest.php
index 10c64693ecd85827fba7ce7774e069c63cedaa45..46869058bf032d8f347a199635d64dc4980df763 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoEmailTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoEmailTest.php
@@ -25,8 +25,8 @@ class CreditmemoEmailTest extends WebapiAbstract
     {
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 
-        /** @var \Magento\Sales\Model\Resource\Order\Creditmemo\Collection $creditmemoCollection */
-        $creditmemoCollection = $objectManager->get('Magento\Sales\Model\Resource\Order\Creditmemo\Collection');
+        /** @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection $creditmemoCollection */
+        $creditmemoCollection = $objectManager->get('Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection');
         $creditmemo = $creditmemoCollection->getFirstItem();
         $serviceInfo = [
             'rest' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoGetTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoGetTest.php
index d380bdc40fdd7d926d1b4e3aae4acfb2b42b29e2..a54f03b92629a9c35d13a42916e3298849d39a1e 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoGetTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/CreditmemoGetTest.php
@@ -81,8 +81,9 @@ class CreditmemoGetTest extends WebapiAbstract
      */
     public function testCreditmemoGet()
     {
-        /** @var \Magento\Sales\Model\Resource\Order\Creditmemo\Collection $creditmemoCollection */
-        $creditmemoCollection = $this->objectManager->get('Magento\Sales\Model\Resource\Order\Creditmemo\Collection');
+        /** @var \Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection $creditmemoCollection */
+        $creditmemoCollection =
+            $this->objectManager->get('Magento\Sales\Model\ResourceModel\Order\Creditmemo\Collection');
         $creditmemo = $creditmemoCollection->getFirstItem();
 
         $serviceInfo = [
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceAddCommentTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceAddCommentTest.php
index fb69f3e2bf944ae199ce963c484f6638b87457be..6c499979033c895d48d3f65bc254ff4f3305019b 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceAddCommentTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceAddCommentTest.php
@@ -32,7 +32,7 @@ class InvoiceAddCommentTest extends WebapiAbstract
     {
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
         /** @var \Magento\Sales\Model\Order\Invoice $invoice */
-        $invoiceCollection = $objectManager->get('Magento\Sales\Model\Resource\Order\Invoice\Collection');
+        $invoiceCollection = $objectManager->get('Magento\Sales\Model\ResourceModel\Order\Invoice\Collection');
         $invoice = $invoiceCollection->getFirstItem();
 
         $commentData = [
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceCommentsListTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceCommentsListTest.php
index d03981ed76af47d0c93b36984e1bd44acae0a1a4..507ac734be861fda22c7f14c60804b53f88f122b 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceCommentsListTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceCommentsListTest.php
@@ -24,8 +24,8 @@ class InvoiceCommentsListTest extends WebapiAbstract
         $comment = 'Test comment';
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 
-        /** @var \Magento\Sales\Model\Resource\Order\Invoice\Collection $invoiceCollection */
-        $invoiceCollection = $objectManager->get('Magento\Sales\Model\Resource\Order\Invoice\Collection');
+        /** @var \Magento\Sales\Model\ResourceModel\Order\Invoice\Collection $invoiceCollection */
+        $invoiceCollection = $objectManager->get('Magento\Sales\Model\ResourceModel\Order\Invoice\Collection');
         $invoice = $invoiceCollection->getFirstItem();
         $invoiceComment = $objectManager->get('Magento\Sales\Model\Order\Invoice\Comment');
         $invoiceComment->setComment($comment);
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceEmailTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceEmailTest.php
index 66ae7db9a299d598a630f249f377cce6d4d00472..93061006beead582af8ec8c86db7efc80eca8c4e 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceEmailTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceEmailTest.php
@@ -22,7 +22,7 @@ class InvoiceEmailTest extends WebapiAbstract
     public function testInvoiceEmail()
     {
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
-        $invoiceCollection = $objectManager->get('Magento\Sales\Model\Resource\Order\Invoice\Collection');
+        $invoiceCollection = $objectManager->get('Magento\Sales\Model\ResourceModel\Order\Invoice\Collection');
         $invoice = $invoiceCollection->getFirstItem();
         $serviceInfo = [
             'rest' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceGetTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceGetTest.php
index 9e7758a570e5c6098ff156809b6341d6e58ce7d5..d76af2b875e845b047e9809b46385d715302fc29 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceGetTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/InvoiceGetTest.php
@@ -25,7 +25,7 @@ class InvoiceGetTest extends WebapiAbstract
     {
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
         /** @var \Magento\Sales\Model\Order\Invoice $invoice */
-        $invoiceCollection = $objectManager->get('Magento\Sales\Model\Resource\Order\Invoice\Collection');
+        $invoiceCollection = $objectManager->get('Magento\Sales\Model\ResourceModel\Order\Invoice\Collection');
         $invoice = $invoiceCollection->getFirstItem();
         $expectedInvoiceData = [
             'grand_total' => '100.0000',
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1cd2b7a30656eea7334dbf9266281f9871bceeec
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetListTest.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Service\V1;
+
+use Magento\TestFramework\TestCase\WebapiAbstract;
+
+class OrderItemGetListTest extends WebapiAbstract
+{
+    const RESOURCE_PATH = '/V1/orders/items';
+
+    const SERVICE_VERSION = 'V1';
+    const SERVICE_NAME = 'salesOrderItemRepositoryV1';
+
+    const ORDER_INCREMENT_ID = '100000001';
+
+    /**
+     * @var \Magento\TestFramework\ObjectManager
+     */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Sales/_files/order.php
+     */
+    public function testGetList()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+
+        /** @var $searchCriteriaBuilder  \Magento\Framework\Api\SearchCriteriaBuilder */
+        $searchCriteriaBuilder = $this->objectManager->create('Magento\Framework\Api\SearchCriteriaBuilder');
+        /** @var $filterBuilder  \Magento\Framework\Api\FilterBuilder */
+        $filterBuilder = $this->objectManager->create('Magento\Framework\Api\FilterBuilder');
+
+        $searchCriteriaBuilder->addFilters(
+            [
+                $filterBuilder->setField('order_id')
+                    ->setValue($order->getId())
+                    ->create(),
+            ]
+        );
+
+        $requestData = ['criteria' => $searchCriteriaBuilder->create()->__toArray()];
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '?' . http_build_query($requestData),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'getList',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, $requestData);
+
+        $this->assertTrue(is_array($response));
+        $this->assertArrayHasKey('items', $response);
+        $this->assertCount(1, $response['items']);
+        $this->assertTrue(is_array($response['items'][0]));
+        $this->assertOrderItem(current($order->getItems()), $response['items'][0]);
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Item $orderItem
+     * @param array $response
+     * @return void
+     */
+    protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response)
+    {
+        $this->assertEquals($orderItem->getId(), $response['item_id']);
+        $this->assertEquals($orderItem->getOrderId(), $response['order_id']);
+        $this->assertEquals($orderItem->getProductId(), $response['product_id']);
+        $this->assertEquals($orderItem->getProductType(), $response['product_type']);
+        $this->assertEquals($orderItem->getBasePrice(), $response['base_price']);
+        $this->assertEquals($orderItem->getRowTotal(), $response['row_total']);
+    }
+}
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..ca2803a520d4ac25d6bef680541e7de2528626af
--- /dev/null
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/OrderItemGetTest.php
@@ -0,0 +1,72 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sales\Service\V1;
+
+use Magento\TestFramework\TestCase\WebapiAbstract;
+
+class OrderItemGetTest extends WebapiAbstract
+{
+    const RESOURCE_PATH = '/V1/orders/items';
+
+    const SERVICE_VERSION = 'V1';
+    const SERVICE_NAME = 'salesOrderItemRepositoryV1';
+
+    const ORDER_INCREMENT_ID = '100000001';
+
+    /**
+     * @var \Magento\TestFramework\ObjectManager
+     */
+    protected $objectManager;
+
+    protected function setUp()
+    {
+        $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+    }
+
+    /**
+     * @magentoApiDataFixture Magento/Sales/_files/order.php
+     */
+    public function testGet()
+    {
+        /** @var \Magento\Sales\Model\Order $order */
+        $order = $this->objectManager->create('Magento\Sales\Model\Order');
+        $order->loadByIncrementId(self::ORDER_INCREMENT_ID);
+        /** @var \Magento\Sales\Model\Order\Item $orderItem */
+        $orderItem = current($order->getItems());
+
+        $serviceInfo = [
+            'rest' => [
+                'resourcePath' => self::RESOURCE_PATH . '/' . $orderItem->getId(),
+                'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
+            ],
+            'soap' => [
+                'service' => self::SERVICE_NAME,
+                'serviceVersion' => self::SERVICE_VERSION,
+                'operation' => self::SERVICE_NAME . 'get',
+            ],
+        ];
+
+        $response = $this->_webApiCall($serviceInfo, ['id' => $orderItem->getId()]);
+
+        $this->assertTrue(is_array($response));
+        $this->assertOrderItem($orderItem, $response);
+    }
+
+    /**
+     * @param \Magento\Sales\Model\Order\Item $orderItem
+     * @param array $response
+     * @return void
+     */
+    protected function assertOrderItem(\Magento\Sales\Model\Order\Item $orderItem, array $response)
+    {
+        $this->assertEquals($orderItem->getId(), $response['item_id']);
+        $this->assertEquals($orderItem->getOrderId(), $response['order_id']);
+        $this->assertEquals($orderItem->getProductId(), $response['product_id']);
+        $this->assertEquals($orderItem->getProductType(), $response['product_type']);
+        $this->assertEquals($orderItem->getBasePrice(), $response['base_price']);
+        $this->assertEquals($orderItem->getRowTotal(), $response['row_total']);
+    }
+}
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentAddCommentTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentAddCommentTest.php
index 330fd56c430b6dd682fa9f6d50e530fac74884a2..68b1ca3b367119867615dcdc95fcfde2338adaa2 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentAddCommentTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentAddCommentTest.php
@@ -45,8 +45,8 @@ class ShipmentAddCommentTest extends WebapiAbstract
      */
     public function testShipmentAddComment()
     {
-        /** @var \Magento\Sales\Model\Resource\Order\Shipment\Collection $shipmentCollection */
-        $shipmentCollection = $this->objectManager->get('Magento\Sales\Model\Resource\Order\Shipment\Collection');
+        /** @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Collection $shipmentCollection */
+        $shipmentCollection = $this->objectManager->get('Magento\Sales\Model\ResourceModel\Order\Shipment\Collection');
         $shipment = $shipmentCollection->getFirstItem();
 
         $commentData = [
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentAddTrackTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentAddTrackTest.php
index 65ffc97c44f6e302c409dfa4f85cbbc8dd4f3445..841e290533e5594242b0f314a61b7eb47d1723b9 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentAddTrackTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentAddTrackTest.php
@@ -46,7 +46,7 @@ class ShipmentAddTrackTest extends WebapiAbstract
     public function testShipmentAddTrack()
     {
         /** @var \Magento\Sales\Model\Order\Shipment $shipment */
-        $shipmentCollection = $this->objectManager->get('Magento\Sales\Model\Resource\Order\Shipment\Collection');
+        $shipmentCollection = $this->objectManager->get('Magento\Sales\Model\ResourceModel\Order\Shipment\Collection');
         $shipment = $shipmentCollection->getFirstItem();
 
         $trackData = [
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentCommentsListTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentCommentsListTest.php
index c3c73188efa106da2af6078f1824394bb20f4054..138e4b2bdf86df8a1432af7118528dd1c3ca4923 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentCommentsListTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentCommentsListTest.php
@@ -24,8 +24,8 @@ class ShipmentCommentsListTest extends WebapiAbstract
         $comment = 'Test comment';
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 
-        /** @var \Magento\Sales\Model\Resource\Order\Shipment\Collection $shipmentCollection */
-        $shipmentCollection = $objectManager->get('Magento\Sales\Model\Resource\Order\Shipment\Collection');
+        /** @var \Magento\Sales\Model\ResourceModel\Order\Shipment\Collection $shipmentCollection */
+        $shipmentCollection = $objectManager->get('Magento\Sales\Model\ResourceModel\Order\Shipment\Collection');
         $shipment = $shipmentCollection->getFirstItem();
         $shipmentComment = $objectManager->get('Magento\Sales\Model\Order\Shipment\Comment');
         $shipmentComment->setComment($comment);
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentEmailTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentEmailTest.php
index d6b59d22475398ce532469035661fba7a51edd64..996a09d0f4cc76b9fa0a5fe860d829f6daa491f8 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentEmailTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentEmailTest.php
@@ -23,7 +23,7 @@ class ShipmentEmailTest extends WebapiAbstract
     public function testShipmentEmail()
     {
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
-        $shipmentCollection = $objectManager->get('Magento\Sales\Model\Resource\Order\Shipment\Collection');
+        $shipmentCollection = $objectManager->get('Magento\Sales\Model\ResourceModel\Order\Shipment\Collection');
         $shipment = $shipmentCollection->getFirstItem();
         $serviceInfo = [
             'rest' => [
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentGetTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentGetTest.php
index 7953ce94247646144ecd17fb704c50847a48effb..171b89452cff6ae1e623ad887cd6665718973c73 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentGetTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentGetTest.php
@@ -32,7 +32,7 @@ class ShipmentGetTest extends WebapiAbstract
     public function testShipmentGet()
     {
         /** @var \Magento\Sales\Model\Order\Shipment $shipment */
-        $shipmentCollection = $this->objectManager->get('Magento\Sales\Model\Resource\Order\Shipment\Collection');
+        $shipmentCollection = $this->objectManager->get('Magento\Sales\Model\ResourceModel\Order\Shipment\Collection');
         $shipment = $shipmentCollection->getFirstItem();
         $shipment->load($shipment->getId());
         $serviceInfo = [
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentLabelGetTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentLabelGetTest.php
index 95d652c84f99bef6e0ee9178a2af1fb5cc45d458..878fa2dc7cf7181a881e9b2a09d31fa2a45f21a6 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentLabelGetTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentLabelGetTest.php
@@ -32,7 +32,7 @@ class ShipmentLabelGetTest extends WebapiAbstract
     public function testShipmentGet()
     {
         /** @var \Magento\Sales\Model\Order\Shipment $shipment */
-        $shipmentCollection = $this->objectManager->get('Magento\Sales\Model\Resource\Order\Shipment\Collection');
+        $shipmentCollection = $this->objectManager->get('Magento\Sales\Model\ResourceModel\Order\Shipment\Collection');
         $shipment = $shipmentCollection->getFirstItem();
         $shipment->setShippingLabel('test_shipping_label');
         $shipment->save();
diff --git a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentRemoveTrackTest.php b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentRemoveTrackTest.php
index 2dcfc346727214ea0a61d8e94832c0fb88dec48c..6a3a1dc0d5301df1cb9f6d1f16c5dc76a13d30c2 100644
--- a/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentRemoveTrackTest.php
+++ b/dev/tests/api-functional/testsuite/Magento/Sales/Service/V1/ShipmentRemoveTrackTest.php
@@ -46,7 +46,7 @@ class ShipmentRemoveTrackTest extends WebapiAbstract
     public function testShipmentRemoveTrack()
     {
         /** @var \Magento\Sales\Model\Order\Shipment $shipment */
-        $shipmentCollection = $this->objectManager->get('Magento\Sales\Model\Resource\Order\Shipment\Collection');
+        $shipmentCollection = $this->objectManager->get('Magento\Sales\Model\ResourceModel\Order\Shipment\Collection');
         $shipment = $shipmentCollection->getFirstItem();
 
         /** @var \Magento\Sales\Model\Order\Shipment\Track $track */
diff --git a/dev/tests/functional/lib/Magento/Mtf/Client/Element/SimplifiedselectElement.php b/dev/tests/functional/lib/Magento/Mtf/Client/Element/SimplifiedselectElement.php
index 3ac15fe0c963c248b424e44d407ed4a65560ede4..aa62e985e5306ba8d254be456eba9beb31b29292 100644
--- a/dev/tests/functional/lib/Magento/Mtf/Client/Element/SimplifiedselectElement.php
+++ b/dev/tests/functional/lib/Magento/Mtf/Client/Element/SimplifiedselectElement.php
@@ -18,7 +18,7 @@ class SimplifiedselectElement extends SelectElement
      *
      * @var string
      */
-    protected $optionGroupValue = ".//*[@title='%s']";
+    protected $optionGroupValue = ".//*[@data-title='%s']";
 
     /**
      * Select value in ropdown which has option groups.
diff --git a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Fixture/FieldsProvider.php b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Fixture/FieldsProvider.php
index f566fa7959ac3ad3ee3bc5376a8a6be569f57c6c..bc56c8b3fb2261506682da7d506e7fc8ac2cc54d 100644
--- a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Fixture/FieldsProvider.php
+++ b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Fixture/FieldsProvider.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Mtf\Util\Generate\Fixture;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\ObjectManagerInterface;
 use Magento\Eav\Model\Config;
 use Magento\Framework\DB\Adapter\AdapterInterface;
@@ -44,7 +44,7 @@ class FieldsProvider
     public function __construct(ObjectManagerInterface $objectManager)
     {
         $this->eavConfig = $objectManager->create('Magento\Eav\Model\Config');
-        $this->resource = $objectManager->create('Magento\Framework\App\Resource');
+        $this->resource = $objectManager->create('Magento\Framework\App\ResourceConnection');
     }
 
     /**
diff --git a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/Resource.php b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/RepositoryResource.php
similarity index 84%
rename from dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/Resource.php
rename to dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/RepositoryResource.php
index f366bbc74009cee589f3ba1043a4846dbd054994..db91d8a9984fcdb3c0af5919ec17b9bf9d97a69f 100644
--- a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/Resource.php
+++ b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/RepositoryResource.php
@@ -10,7 +10,7 @@ namespace Magento\Mtf\Util\Generate\Repository;
  * Class Resource
  *
  */
-class Resource extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class RepositoryResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Set fixture entity_type
@@ -28,7 +28,7 @@ class Resource extends \Magento\Framework\Model\Resource\Db\AbstractDb
      * @param \Magento\Framework\Model\AbstractModel $object
      * @param mixed $value
      * @param null $field
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb|void
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb|void
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
     public function load(\Magento\Framework\Model\AbstractModel $object, $value, $field = null)
diff --git a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/TableCollection.php b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/TableCollection.php
index 74cc01067d3345703eeefd14c1d92e61fe5f2712..bdfbd8544da31fc43879042a539b7263f8de148b 100644
--- a/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/TableCollection.php
+++ b/dev/tests/functional/lib/Magento/Mtf/Util/Generate/Repository/TableCollection.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Mtf\Util\Generate\Repository;
 
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 /**
  * Class CollectionProvider
@@ -26,7 +26,7 @@ class TableCollection extends AbstractCollection
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param null $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @param array $fixture
      */
     public function __construct(
@@ -35,11 +35,11 @@ class TableCollection extends AbstractCollection
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null,
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null,
         array $fixture = []
     ) {
         $this->setModel('Magento\Framework\DataObject');
-        $this->setResourceModel('Magento\Mtf\Util\Generate\Repository\Resource');
+        $this->setResourceModel('Magento\Mtf\Util\Generate\Repository\RepositoryResource');
 
         $resource = $this->getResource();
         $resource->setFixture($fixture);
@@ -50,7 +50,7 @@ class TableCollection extends AbstractCollection
     /**
      * Get resource instance
      *
-     * @return \Magento\Mtf\Util\Generate\Repository\Resource
+     * @return \Magento\Mtf\Util\Generate\Repository\RepositoryResource
      */
     public function getResource()
     {
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php
index 988614620e01b51334c734ea0a2e594487d8611f..be0e3f829e2eb6eb668972e7143aa8e4e4dc35cb 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Cache.php
@@ -59,7 +59,6 @@ class Cache extends Block
     public function flushCacheStorage()
     {
         $this->_rootElement->find($this->flushCacheStorageButton)->click();
-        $this->browser->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/FormPageActions.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/FormPageActions.php
index 246c3113a8d176f05a2b226aab70d056f2effe50..302139354092fc6fdc2cb429056cbadfc1b016b3 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/FormPageActions.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/FormPageActions.php
@@ -110,7 +110,6 @@ class FormPageActions extends PageActions
     public function delete()
     {
         $this->_rootElement->find($this->deleteButton)->click();
-        $this->browser->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/PageActions.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/PageActions.php
index 2dbbdd6fe04c8e4a7b57f1fc71316dd4e1c85023..281c4fbd7a08164f8801d52fce5576a2eb140baa 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/PageActions.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/System/Config/PageActions.php
@@ -35,7 +35,6 @@ class PageActions extends AbstractPageActions
     {
         $this->_rootElement->find($this->scopeSelector, Locator::SELECTOR_CSS, 'liselectstore')
             ->setValue($websiteScope);
-        $this->browser->acceptAlert();
 
         return $this;
     }
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
index 8e1e7be0371373664c4deb588110301cd7f13182..65017b9c85d99fec33b811997c6aec9d17848d67 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Block/Widget/Grid.php
@@ -188,6 +188,13 @@ abstract class Grid extends Block
      */
     protected $rowPattern = '//tbody/tr[%s]';
 
+    /**
+     *  Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Get backend abstract block
      *
@@ -340,7 +347,10 @@ abstract class Grid extends Block
     {
         $this->_rootElement->find($this->massactionSubmit, Locator::SELECTOR_CSS)->click();
         if ($acceptAlert) {
-            $this->browser->acceptAlert();
+            $element = $this->browser->find($this->confirmModal);
+            /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+            $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+            $modal->acceptAlert();
         }
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertStoreCanBeLocalized.php b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertStoreCanBeLocalized.php
index ffd5e52d7eaa2e47792d8b04636b80198dac9fd3..fd241121f62fc88eaa86debe9df1aa86242f53b0 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertStoreCanBeLocalized.php
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Constraint/AssertStoreCanBeLocalized.php
@@ -38,6 +38,7 @@ class AssertStoreCanBeLocalized extends AbstractConstraint
         // Set locale options
         $systemConfig->open();
         $systemConfig->getPageActions()->selectStore($store->getGroupId() . "/" . $store->getName());
+        $systemConfig->getModalBlock()->acceptAlert();
         $configGroup = $systemConfig->getForm()->getGroup('Locale Options');
         $configGroup->open();
         $configGroup->setValue('select-groups-locale-fields-code-value', $locale);
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml
index bb9fc78299f5ddecdcc0f1baa66690879baef977..ed129a534adb77e2686f91a5dbd3723e39dbe7a4 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/AdminCache.xml
@@ -10,5 +10,6 @@
         <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages .messages" strategy="css selector"/>
         <block name="actionsBlock" class="Magento\Backend\Test\Block\Cache" locator="div.page-actions" strategy="css selector"/>
         <block name="additionalBlock" class="Magento\Backend\Test\Block\Cache\Additional" locator="div.additional-cache-management" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/SystemConfig.xml b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/SystemConfig.xml
index 9b9a0f3a3093c1bded062e441827c8a43733fc94..4dbb6babb500ec6cb10e25b05b5dae7550c3f878 100644
--- a/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/SystemConfig.xml
+++ b/dev/tests/functional/tests/app/Magento/Backend/Test/Page/Adminhtml/SystemConfig.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="SystemConfig" area="Adminhtml" mca="admin/system_config" module="Magento_Backend">
-    <block name="pageActions" class="Magento\Backend\Test\Block\System\Config\PageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="form" class="Magento\Backend\Test\Block\System\Config\Form" locator="#config-edit-form" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-  </page>
+    <page name="SystemConfig" area="Adminhtml" mca="admin/system_config" module="Magento_Backend">
+        <block name="pageActions" class="Magento\Backend\Test\Block\System\Config\PageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="form" class="Magento\Backend\Test\Block\System\Config\Form" locator="#config-edit-form" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php b/dev/tests/functional/tests/app/Magento/Bundle/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php
index 20688802c899c457d0d6723e00d1a1ec0afe8898..7f973d398b8d5b4c17ffe89b1d3265a3568b5e99 100644
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php
+++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/Block/Adminhtml/Catalog/Product/Edit/Tab/Bundle/Option.php
@@ -22,7 +22,7 @@ class Option extends Form
      *
      * @var string
      */
-    protected $searchGridBlock = "ancestor::body//div[contains(@style,'display: block') and @role='dialog']";
+    protected $searchGridBlock = "ancestor::body//aside[contains(@class,'_show') and @data-role='modal']";
 
     /**
      * Added product row
diff --git a/dev/tests/functional/tests/app/Magento/Bundle/Test/Fixture/BundleProduct.xml b/dev/tests/functional/tests/app/Magento/Bundle/Test/Fixture/BundleProduct.xml
index 8cd33885a7ddfc47830c30ee147d541408107991..df8747764e54111ff0eaa1164720f2adf36150e6 100644
--- a/dev/tests/functional/tests/app/Magento/Bundle/Test/Fixture/BundleProduct.xml
+++ b/dev/tests/functional/tests/app/Magento/Bundle/Test/Fixture/BundleProduct.xml
@@ -11,7 +11,7 @@
              type="eav"
              entity_type="catalog_product"
              product_type="bundle"
-             collection="Magento\Catalog\Model\Resource\Product\Collection"
+             collection="Magento\Catalog\Model\ResourceModel\Product\Collection"
              identifier="sku"
              repository_class="Magento\Bundle\Test\Repository\BundleProduct"
              handler_interface="Magento\Bundle\Test\Handler\BundleProduct\BundleProductInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php
index 47a2e261ba15fd602141d4e20f9cc5d73b7bf695..58128695cc34a41989502b51e65ff907a5906c9a 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Attribute/Set/Main.php
@@ -50,6 +50,13 @@ class Main extends Block
      */
     protected $noteBlock = '.attribute-set .title';
 
+    /**
+     * Selector for prompt.
+     *
+     * @var string
+     */
+    protected $promptModal = '.prompt._show[data-role=modal]';
+
     /**
      * Move Attribute to Attribute Group
      *
@@ -123,7 +130,10 @@ class Main extends Block
     public function addAttributeSetGroup($groupName)
     {
         $this->_rootElement->find($this->addGroupButton)->click();
-        $this->browser->setAlertText($groupName);
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->promptModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->setAlertText($groupName);
+        $modal->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Composite/Configure.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Composite/Configure.php
index 6416c7c9c7a0672d9b8e147516de5de8a6d79867..9af022411c24bca0123ea9a720a736cc1686322c 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Composite/Configure.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Composite/Configure.php
@@ -44,7 +44,7 @@ class Configure extends AbstractConfigureBlock
      *
      * @var string
      */
-    protected $okButton = '.ui-button.action-primary';
+    protected $okButton = '.action-primary[data-role="action"]';
 
     /**
      * Backend abstract block.
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/Options.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/Options.php
index e1524101cee79623cf454e1fbc94205a7982dba4..0cd45384360867851e78f7781e45779910c28b03 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/Options.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Edit/Tab/Options.php
@@ -51,7 +51,7 @@ class Options extends Tab
      *
      * @var string
      */
-    protected $importGrid = "//ancestor::body/div[*[@id='import-container'] and contains(@style,'display: block')]";
+    protected $importGrid = "//ancestor::body//aside[*//div[@id='import-container']]";
 
     /**
      * Fill custom options form on tab
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php
index c23f96bef04d15ffdd348ba251f11174f09db5a2..c13742e661e3f7454cfe69dfebbd9ad910963017 100755
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Adminhtml/Product/Grid.php
@@ -27,37 +27,37 @@ class Grid extends DataGrid
      */
     protected $filters = [
         'name' => [
-            'selector' => '[name="filters[name]"]',
+            'selector' => '[name="name"]',
         ],
         'sku' => [
-            'selector' => '[name="filters[sku]"]',
+            'selector' => '[name="sku"]',
         ],
         'type' => [
-            'selector' => '[name="filters[type_id]"]',
+            'selector' => '[name="type_id"]',
             'input' => 'select',
         ],
         'price_from' => [
-            'selector' => '[name="filters[price][from]"]',
+            'selector' => '[name="price[from]"]',
         ],
         'price_to' => [
-            'selector' => '[name="filters[price][to]"]',
+            'selector' => '[name="price[to]"]',
         ],
         'qty_from' => [
-            'selector' => '[name="filters[qty][from]"]',
+            'selector' => '[name="qty[from]"]',
         ],
         'qty_to' => [
-            'selector' => '[name="filters[qty][to]"]',
+            'selector' => '[name="qty[to]"]',
         ],
         'visibility' => [
-            'selector' => '[name="filters[visibility]"]',
+            'selector' => '[name="visibility"]',
             'input' => 'select',
         ],
         'status' => [
-            'selector' => '[name="filters[status]"]',
+            'selector' => '[name="status"]',
             'input' => 'select',
         ],
         'set_name' => [
-            'selector' => '[name="filters[attribute_set_id]"]',
+            'selector' => '[name="attribute_set_id"]',
             'input' => 'select',
         ],
     ];
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/Sidebar.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/Sidebar.php
index ea1a27a09e26292c9a81f23f6cb9f7f07e4c407e..eec1be1fcf543149fbcc08a034fa02628c4065c2 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/Sidebar.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Block/Product/Compare/Sidebar.php
@@ -32,6 +32,13 @@ class Sidebar extends ListCompare
      */
     protected $clearAll = '#compare-clear-all';
 
+    /**
+     * Selector for alert.
+     *
+     * @var string
+     */
+    protected $alertModal = '._show[data-role=modal]';
+
     /**
      * Get compare products block content.
      *
@@ -79,6 +86,9 @@ class Sidebar extends ListCompare
             }
         );
         $this->_rootElement->find($this->clearAll)->click();
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->alertModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogAttributeSet.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogAttributeSet.xml
index 8fad06be79f594e14f7a05d33b3d6c0ecc32a736..25bea300f98b116c482dbce48cf28bdb66f8a037 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogAttributeSet.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogAttributeSet.xml
@@ -10,7 +10,7 @@
              module="Magento_Catalog"
              type="flat"
              entity_type="eav_attribute_set"
-             collection="Magento\Catalog\Model\Resource\Product\Link\Product\Collection"
+             collection="Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection"
              repository_class="Magento\Catalog\Test\Repository\CatalogAttributeSet"
              handler_interface="Magento\Catalog\Test\Handler\CatalogAttributeSet\CatalogAttributeSetInterface"
              class="Magento\Catalog\Test\Fixture\CatalogAttributeSet">
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductAttribute.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductAttribute.xml
index 6c9fb2a326500be7e266b1b2114085eed7765695..4ad05c994d76d32b6db9de4a06496833d78b1f9e 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductAttribute.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductAttribute.xml
@@ -9,7 +9,7 @@
     <fixture name="catalogProductAttribute"
              module="Magento_Catalog"
              type="composite"
-             collection="Magento\Catalog\Model\Resource\Attribute"
+             collection="Magento\Catalog\Model\ResourceModel\Attribute"
              repository_class="Magento\Catalog\Test\Repository\CatalogProductAttribute"
              handler_interface="Magento\Catalog\Test\Handler\CatalogProductAttribute\CatalogProductAttributeInterface"
              class="Magento\Catalog\Test\Fixture\CatalogProductAttribute">
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.xml
index 9e1006113ed4d37799dad125974499bcabe6cae6..33115e59f4ca9e915dc4cf1eecd92bdaceffee99 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductSimple.xml
@@ -11,7 +11,7 @@
              type="eav"
              entity_type="catalog_product"
              product_type="simple"
-             collection="Magento\Catalog\Model\Resource\Product\Collection"
+             collection="Magento\Catalog\Model\ResourceModel\Product\Collection"
              identifier="sku"
              repository_class="Magento\Catalog\Test\Repository\CatalogProductSimple"
              handler_interface="Magento\Catalog\Test\Handler\CatalogProductSimple\CatalogProductSimpleInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual.xml
index 0ca75c7097d8a24430f8c268b4d9edde10bfbbcf..db6a6430a90f122df4471ddfc60cf91822102baa 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/CatalogProductVirtual.xml
@@ -11,7 +11,7 @@
              type="eav"
              entity_type="catalog_product"
              product_type="virtual"
-             collection="Magento\Catalog\Model\Resource\Product\Collection"
+             collection="Magento\Catalog\Model\ResourceModel\Product\Collection"
              identifier="sku"
              repository_class="Magento\Catalog\Test\Repository\CatalogProductVirtual"
              handler_interface="Magento\Catalog\Test\Handler\CatalogProductVirtual\CatalogProductVirtualInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Category.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Category.xml
index 61f89e310617f86b7ce1267d5aa1eff2c5fa8207..2c5e23a9099b79bee01f5aee1d92ff8440029b1c 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Category.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Fixture/Category.xml
@@ -10,7 +10,7 @@
              module="Magento_Catalog"
              type="eav"
              entity_type="catalog_category_entity"
-             collection="Magento\Catalog\Model\Resource\Category\Collection"
+             collection="Magento\Catalog\Model\ResourceModel\Category\Collection"
              repository_class="Magento\Catalog\Test\Repository\Category"
              handler_interface="Magento\Catalog\Test\Handler\Category\CategoryInterface"
              class="Magento\Catalog\Test\Fixture\Category">
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogCategoryEdit.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogCategoryEdit.xml
index 6c94684f9931aa51bcd24d7ea2a59cd2a5201834..a9efc7486ed7a16fcf6b5b95ac675a8b728df48b 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogCategoryEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogCategoryEdit.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CatalogCategoryEdit" area="Adminhtml" mca="catalog/category/edit" module="Magento_Catalog">
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-    <block name="formPageActions" class="Magento\Catalog\Test\Block\Adminhtml\Category\Edit\PageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="editForm" class="Magento\Catalog\Test\Block\Adminhtml\Category\Edit\CategoryForm" locator="#category-edit-container" strategy="css selector"/>
-  </page>
+    <page name="CatalogCategoryEdit" area="Adminhtml" mca="catalog/category/edit" module="Magento_Catalog">
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="formPageActions" class="Magento\Catalog\Test\Block\Adminhtml\Category\Edit\PageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="editForm" class="Magento\Catalog\Test\Block\Adminhtml\Category\Edit\CategoryForm" locator="#category-edit-container" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductAttributeNew.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductAttributeNew.xml
index 7340141c593ee3fd494b638beab71df8e12075c4..b53ec68704e7093111573610aab4e467d8f84b8a 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductAttributeNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductAttributeNew.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CatalogProductAttributeNew" area="Adminhtml" mca="catalog/product_attribute/new" module="Magento_Catalog">
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-    <block name="pageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="attributeForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Edit\AttributeForm" locator="[id='page:main-container']" strategy="css selector"/>
-  </page>
+    <page name="CatalogProductAttributeNew" area="Adminhtml" mca="catalog/product_attribute/new" module="Magento_Catalog">
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="pageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="attributeForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Edit\AttributeForm" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductSetEdit.xml b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductSetEdit.xml
index be45d688fbc5ab5315cea13690e3d2f717083054..318016cdd30355292c6ae10936b606b4fe3f7691 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductSetEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/Page/Adminhtml/CatalogProductSetEdit.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CatalogProductSetEdit" area="Adminhtml" mca="catalog/product_set/edit" module="Magento_Catalog">
-    <block name="pageActions" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="attributeSetEditBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\Main" locator=".attribute-set" strategy="css selector"/>
-    <block name="attributeSetEditForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\Main\EditForm" locator="#set_name" strategy="css selector"/>
-  </page>
+    <page name="CatalogProductSetEdit" area="Adminhtml" mca="catalog/product_set/edit" module="Magento_Catalog">
+        <block name="pageActions" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="attributeSetEditBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\Main" locator=".attribute-set" strategy="css selector"/>
+        <block name="attributeSetEditForm" class="Magento\Catalog\Test\Block\Adminhtml\Product\Attribute\Set\Main\EditForm" locator="#set_name" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/DeleteCategoryEntityTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/DeleteCategoryEntityTest.php
index e6bafe0e25615211ce15857da2e2028cef3c4c33..ec77f237b21cfb95bd1a5202747d54aade59c27b 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/DeleteCategoryEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/Category/DeleteCategoryEntityTest.php
@@ -74,5 +74,6 @@ class DeleteCategoryEntityTest extends Injectable
         $this->catalogCategoryIndex->open();
         $this->catalogCategoryIndex->getTreeCategories()->selectCategory($category);
         $this->catalogCategoryEdit->getFormPageActions()->delete();
+        $this->catalogCategoryEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php
index b1994e6b362d3c5c753d98ebdf771fa44220c3e8..a3c0028f6e70c13d348e9db060bbf528c24209d8 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAssignedToTemplateProductAttributeTest.php
@@ -78,6 +78,7 @@ class DeleteAssignedToTemplateProductAttributeTest extends Injectable
         $this->attributeIndex->open();
         $this->attributeIndex->getGrid()->searchAndOpen($filter);
         $this->attributeNew->getPageActions()->delete();
+        $this->attributeNew->getModalBlock()->acceptAlert();
 
         return ['productTemplate' => $productTemplate, 'attribute' => $attribute];
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php
index 4eb5df71d91d4c48024acec44d3ff42623edb512..d996e70adb41097c9c62ff5f37f52c5cfb7d4760 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteAttributeSetTest.php
@@ -93,6 +93,7 @@ class DeleteAttributeSetTest extends Injectable
         $this->productSetIndex->open();
         $this->productSetIndex->getGrid()->searchAndOpen($filter);
         $this->productSetEdit->getPageActions()->delete();
+        $this->productSetEdit->getModalBlock()->acceptAlert();
 
         return ['product' => $product];
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteProductAttributeEntityTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteProductAttributeEntityTest.php
index b2803209bad71d700debd46f25397569d8f22cb5..0574f736acace9e35c1905d9ff349104efeeab17 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteProductAttributeEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteProductAttributeEntityTest.php
@@ -53,5 +53,6 @@ class DeleteProductAttributeEntityTest extends Injectable
         $attributeIndex->open();
         $attributeIndex->getGrid()->searchAndOpen(['frontend_label' => $attribute->getFrontendLabel()]);
         $attributeNew->getPageActions()->delete();
+        $attributeNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteUsedInConfigurableProductAttributeTest.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteUsedInConfigurableProductAttributeTest.php
index 4b5c4403e8c873ba7e04bf1c8ee6a4ad67232506..934b2e185add6a32e4b14dbd5aa91e0c11e45f34 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteUsedInConfigurableProductAttributeTest.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestCase/ProductAttribute/DeleteUsedInConfigurableProductAttributeTest.php
@@ -82,6 +82,7 @@ class DeleteUsedInConfigurableProductAttributeTest extends Injectable
         $this->attributeIndex->open();
         $this->attributeIndex->getGrid()->searchAndOpen(['attribute_code' => $attribute->getAttributeCode()]);
         $this->attributeNew->getPageActions()->delete();
+        $this->attributeNew->getModalBlock()->acceptAlert();
 
         return ['attribute' => $attribute];
     }
diff --git a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/DeleteAttributeStep.php b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/DeleteAttributeStep.php
index 8665338166eb949f6207668c975b9ee07af7967b..26db72b37ef72a51d534681cbfe241f2642c1b23 100644
--- a/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/DeleteAttributeStep.php
+++ b/dev/tests/functional/tests/app/Magento/Catalog/Test/TestStep/DeleteAttributeStep.php
@@ -67,6 +67,7 @@ class DeleteAttributeStep implements TestStepInterface
         if ($this->catalogProductAttributeIndex->getGrid()->isRowVisible($filter)) {
             $this->catalogProductAttributeIndex->getGrid()->searchAndOpen($filter);
             $this->catalogProductAttributeNew->getPageActions()->delete();
+            $this->catalogProductAttributeNew->getModalBlock()->acceptAlert();
         }
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Fixture/CatalogRule.xml b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Fixture/CatalogRule.xml
index 1c025f00d6eb511b1ec2a85cbaabb7567ebaaec6..82a54991d17fdb708898947bd9544e2559557c13 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Fixture/CatalogRule.xml
+++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Fixture/CatalogRule.xml
@@ -10,7 +10,7 @@
              module="Magento_CatalogRule"
              type="eav"
              entity_type="catalog_rule"
-             collection="Magento\CatalogRule\Model\Resource\Rule\Product\Price\Collection"
+             collection="Magento\CatalogRule\Model\ResourceModel\Rule\Product\Price\Collection"
              repository_class="Magento\CatalogRule\Test\Repository\CatalogRule"
              handler_interface="Magento\CatalogRule\Test\Handler\CatalogRule\CatalogRuleInterface"
              class="Magento\CatalogRule\Test\Fixture\CatalogRule">
diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Page/Adminhtml/CatalogRuleNew.xml b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Page/Adminhtml/CatalogRuleNew.xml
index 5dd34d3be1a902e1ba907860806eb3362041fb12..af8118dc6be7fa44a66f48a0bf8c8d68cfd7d4d5 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Page/Adminhtml/CatalogRuleNew.xml
+++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/Page/Adminhtml/CatalogRuleNew.xml
@@ -6,8 +6,9 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CatalogRuleNew" area="Adminhtml" mca="catalog_rule/promo_catalog/new" module="Magento_CatalogRule">
-    <block name="formPageActions" class="Magento\CatalogRule\Test\Block\Adminhtml\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="editForm" class="Magento\CatalogRule\Test\Block\Adminhtml\Promo\Catalog\Edit\PromoForm" locator="[id='page:main-container']" strategy="css selector"/>
-  </page>
+    <page name="CatalogRuleNew" area="Adminhtml" mca="catalog_rule/promo_catalog/new" module="Magento_CatalogRule">
+        <block name="formPageActions" class="Magento\CatalogRule\Test\Block\Adminhtml\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="editForm" class="Magento\CatalogRule\Test\Block\Adminhtml\Promo\Catalog\Edit\PromoForm" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/DeleteCatalogPriceRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/DeleteCatalogPriceRuleEntityTest.php
index 959edfcf46434fe1522a305970123c5c28509582..aaea841d414f4374b3a5d1b52612e829eae889eb 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/DeleteCatalogPriceRuleEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestCase/DeleteCatalogPriceRuleEntityTest.php
@@ -82,5 +82,6 @@ class DeleteCatalogPriceRuleEntityTest extends Injectable
         $this->catalogRuleIndex->open();
         $this->catalogRuleIndex->getCatalogRuleGrid()->searchAndOpen($filter);
         $this->catalogRuleNew->getFormPageActions()->delete();
+        $this->catalogRuleNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestStep/DeleteAllCatalogRulesStep.php b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestStep/DeleteAllCatalogRulesStep.php
index dcc06c224c0baafb2d9429ba256b7d922cbb6136..5a733e8224def1d91632c364e31a18c23769733f 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestStep/DeleteAllCatalogRulesStep.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogRule/Test/TestStep/DeleteAllCatalogRulesStep.php
@@ -55,6 +55,7 @@ class DeleteAllCatalogRulesStep implements TestStepInterface
         while ($this->catalogRuleIndex->getCatalogRuleGrid()->isFirstRowVisible()) {
             $this->catalogRuleIndex->getCatalogRuleGrid()->openFirstRow();
             $this->catalogRuleNew->getFormPageActions()->delete();
+            $this->catalogRuleNew->getModalBlock()->acceptAlert();
             $this->catalogRuleIndex->getSystemMessageDialog()->closePopup();
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Fixture/CatalogSearchQuery.xml b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Fixture/CatalogSearchQuery.xml
index 348fd35048e3a1331e1720b76edaac9117bf63af..430c045eeaae5e56d792514a0306db0a0152bbff 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Fixture/CatalogSearchQuery.xml
+++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Fixture/CatalogSearchQuery.xml
@@ -10,7 +10,7 @@
              module="Magento_CatalogSearch"
              type="flat"
              entity_type="search_query"
-             collection="Magento\Search\Model\Resource\Query\Collection"
+             collection="Magento\Search\Model\ResourceModel\Query\Collection"
              repository_class="Magento\CatalogSearch\Test\Repository\CatalogSearchQuery"
              handler_interface="Magento\CatalogSearch\Test\Handler\CatalogSearchQuery\CatalogSearchQueryInterface"
              class="Magento\CatalogSearch\Test\Fixture\CatalogSearchQuery">
diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/Adminhtml/CatalogSearchEdit.xml b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/Adminhtml/CatalogSearchEdit.xml
index 87d6b0b791a79d52c91d0306a321760cfe2dc72a..0d20a2f4ac16b8f0fc89c7406e3fd7359e696563 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/Adminhtml/CatalogSearchEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/Page/Adminhtml/CatalogSearchEdit.xml
@@ -6,8 +6,9 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CatalogSearchEdit" area="Adminhtml" mca="search/term/edit" module="Magento_CatalogSearch">
-    <block name="form" class="Magento\CatalogSearch\Test\Block\Adminhtml\Edit\SearchTermForm" locator="#edit_form" strategy="css selector"/>
-    <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-  </page>
+    <page name="CatalogSearchEdit" area="Adminhtml" mca="search/term/edit" module="Magento_CatalogSearch">
+        <block name="form" class="Magento\CatalogSearch\Test\Block\Adminhtml\Edit\SearchTermForm" locator="#edit_form" strategy="css selector"/>
+        <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/DeleteSearchTermEntityTest.php b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/DeleteSearchTermEntityTest.php
index b8400504d031aeda63c0d132b266d69aa55e7c46..4c9cdecc2c323be8c36dfb6c06dbeb8d2a49a4c7 100644
--- a/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/DeleteSearchTermEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/CatalogSearch/Test/TestCase/DeleteSearchTermEntityTest.php
@@ -78,5 +78,6 @@ class DeleteSearchTermEntityTest extends Injectable
         $this->indexPage->open();
         $this->indexPage->getGrid()->searchAndOpen(['search_query' => $searchText]);
         $this->editPage->getFormPageActions()->delete();
+        $this->editPage->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.xml
index b2b6b2290fb9a2ec4d3fe2762cc93c6c4ffb5f44..6056844a06473ef7cd7d8624841a8c8a7fb38cf7 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.xml
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Shipping.xml
@@ -6,7 +6,6 @@
  */
 -->
 <mapping strict="0">
-    <wrapper>shippingAddress</wrapper>
     <fields>
         <country_id>
             <input>select</input>
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php
index 7d0966f153598dcdd97c018ecf89f3cf5b0ae4d1..43dbd23499a0d866f2fdf999c086716d20d79a4d 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Cart/Sidebar/Item.php
@@ -28,6 +28,13 @@ class Item extends Sidebar
      */
     protected $editItem = '.action.edit';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Remove product item from mini cart
      *
@@ -36,7 +43,10 @@ class Item extends Sidebar
     public function removeItemFromMiniCart()
     {
         $this->_rootElement->find($this->removeItem)->click();
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml
index 1b99093b23eec0d7b598fd3fd902867fe2fa5f0a..a61ff0273b51dbf315739492e8a27e88b6f14389 100644
--- a/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml
+++ b/dev/tests/functional/tests/app/Magento/Checkout/Test/Block/Onepage/Shipping.xml
@@ -6,7 +6,6 @@
  */
 -->
 <mapping strict="0">
-    <wrapper>shippingAddress</wrapper>
     <fields>
         <email>
             <selector>#customer-email</selector>
@@ -15,7 +14,7 @@
         <lastname />
         <company />
         <street>
-            <selector>[name='shippingAddress[street][0]']</selector>
+            <selector>input[name="street[0]"]</selector>
         </street>
         <city />
         <region_id>
@@ -25,8 +24,6 @@
             <input>select</input>
         </country_id>
         <telephone />
-        <postcode>
-            <selector>[name='shippingAddress[postcode]']</selector>
-        </postcode>
+        <postcode />
     </fields>
 </mapping>
diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Fixture/CheckoutAgreement.xml b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Fixture/CheckoutAgreement.xml
index 4ca607bd646b9ea5dd176d78f76149b6e626aef7..4e4a8d7845580e0c4fd1cf2483433225c11a099c 100644
--- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Fixture/CheckoutAgreement.xml
+++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Fixture/CheckoutAgreement.xml
@@ -7,7 +7,7 @@
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/fixture.xsd">
     <fixture name="checkoutAgreement" module="Magento_CheckoutAgreements"
-             type="flat" entity_type="checkout_agreement" collection="Magento\CheckoutAgreements\Model\Resource\Agreement\Collection"
+             type="flat" entity_type="checkout_agreement" collection="Magento\CheckoutAgreements\Model\ResourceModel\Agreement\Collection"
              repository_class="Magento\CheckoutAgreements\Test\Repository\CheckoutAgreement"
              handler_interface="Magento\CheckoutAgreements\Test\Handler\CheckoutAgreement\CheckoutAgreementInterface"
              class="Magento\CheckoutAgreements\Test\Fixture\CheckoutAgreement">
diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/Adminhtml/CheckoutAgreementNew.xml b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/Adminhtml/CheckoutAgreementNew.xml
index 401dac62e9c0a18d8e7845519006a65da12caa7d..05356444ea635cd7b1cf78c0d862acc356b68eb8 100644
--- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/Adminhtml/CheckoutAgreementNew.xml
+++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/Page/Adminhtml/CheckoutAgreementNew.xml
@@ -9,5 +9,6 @@
     <page name="CheckoutAgreementNew" area="Adminhtml" mca="checkout/agreement/new" module="Magento_CheckoutAgreements">
         <block name="pageActionsBlock" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
         <block name="agreementsForm" class="Magento\CheckoutAgreements\Test\Block\Adminhtml\Block\Agreement\Edit\AgreementsForm" locator="#edit_form" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
\ No newline at end of file
diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteAllTermsEntityStep.php b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteAllTermsEntityStep.php
index 3599882b174c192c6f0638b491a86937e7e39c8c..b40f50f32d2ba5b85354b5c7f88859b3d322fc8c 100644
--- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteAllTermsEntityStep.php
+++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteAllTermsEntityStep.php
@@ -56,6 +56,7 @@ class DeleteAllTermsEntityStep implements TestStepInterface
         while ($this->agreementIndex->getAgreementGridBlock()->isFirstRowVisible()) {
             $this->agreementIndex->getAgreementGridBlock()->openFirstRow();
             $this->agreementNew->getPageActionsBlock()->delete();
+            $this->agreementNew->getModalBlock()->acceptAlert();
         }
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteTermEntityStep.php b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteTermEntityStep.php
index d5b572db6ea2f8cd935667a2443ce334e99afe3e..34c352f39ea40b8735ac2e7e48b61fd8cc6240aa 100644
--- a/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteTermEntityStep.php
+++ b/dev/tests/functional/tests/app/Magento/CheckoutAgreements/Test/TestStep/DeleteTermEntityStep.php
@@ -63,5 +63,6 @@ class DeleteTermEntityStep implements TestStepInterface
     {
         $this->agreementIndex->open()->getAgreementGridBlock()->searchAndOpen(['name' => $this->agreement->getName()]);
         $this->agreementNew->getPageActionsBlock()->delete();
+        $this->agreementNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Block/CmsGrid.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Block/CmsGrid.php
index 4ca3fe0ead7b62c175f7452f3f52f921aeff78ca..1f4c5cfbd659be67e2849194278241068c38c47a 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Block/CmsGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Block/CmsGrid.php
@@ -28,36 +28,36 @@ class CmsGrid extends DataGrid
      */
     protected $filters = [
         'block_id_from' => [
-            'selector' => '[name="filters[block_id][from]"]',
+            'selector' => '[name="block_id[from]"]',
         ],
         'block_id_to' => [
-            'selector' => '[name="filters[block_id][to]"]',
+            'selector' => '[name="block_id[to]"]',
         ],
         'title' => [
-            'selector' => '[name="filters[title]"]',
+            'selector' => '[name="title"]',
         ],
         'identifier' => [
-            'selector' => '[name="filters[identifier]"]',
+            'selector' => '[name="identifier"]',
         ],
         'store_id' => [
-            'selector' => '[name="filters[store_id]"]',
+            'selector' => '[name="store_id"]',
             'input' => 'simplifiedselect'
         ],
         'is_active' => [
-            'selector' => '[name="filters[is_active]"]',
+            'selector' => '[name="is_active"]',
             'input' => 'select',
         ],
         'creation_time_from' => [
-            'selector' => '[name="filters[creation_time][from]"]',
+            'selector' => '[name="creation_time[from]"]',
         ],
         'creation_time_to' => [
-            'selector' => '[name="filters[creation_time][to]"]',
+            'selector' => '[name="creation_time[to]"]',
         ],
         'update_time_from' => [
-            'selector' => '[name="filters[update_time][from]"]',
+            'selector' => '[name="update_time[from]"]',
         ],
         'update_time_to' => [
-            'selector' => '[name="filters[update_time][to]"]',
+            'selector' => '[name="update_time[to]"]',
         ],
     ];
 
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Edit/Tab/Content.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Edit/Tab/Content.php
index a10d58ffa2dfecea82389000f734e1913c5ae5f7..a07445f3eee83cf3d6d3b542c04921c4880f8f8e 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Edit/Tab/Content.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Edit/Tab/Content.php
@@ -39,7 +39,7 @@ class Content extends Tab
     protected $addVariableButton = ".add-variable";
 
     /**
-     * Insert Frontend App button selector.
+     * Insert Widget button selector.
      *
      * @var string
      */
@@ -73,7 +73,7 @@ class Content extends Tab
     }
 
     /**
-     * Clicking in content tab 'Insert Frontend App' button.
+     * Clicking in content tab 'Insert Widget' button.
      *
      * @return void
      */
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Grid.php b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Grid.php
index 76415b59ed47ad9df9646ca6b42920c6abcf7945..8562232305382db9d419dfaa7d2baa59e6794509 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Block/Adminhtml/Page/Grid.php
@@ -29,43 +29,43 @@ class Grid extends DataGrid
      */
     protected $filters = [
         'page_id_from' => [
-            'selector' => '[name="filters[page_id][from]"]',
+            'selector' => '[name="page_id[from]"]',
         ],
         'page_id_to' => [
-            'selector' => '[name="filters[page_id][to]"]',
+            'selector' => '[name="page_id[to]"]',
         ],
         'title' => [
-            'selector' => '[name="filters[title]"]',
+            'selector' => '[name="title"]',
         ],
         'identifier' => [
-            'selector' => '[name="filters[identifier]"]',
+            'selector' => '[name="identifier"]',
         ],
         'page_layout' => [
-            'selector' => '[name="filters[page_layout]"]',
+            'selector' => '[name="page_layout"]',
             'input' => 'select',
         ],
         'store_id' => [
-            'selector' => '[name="filters[store_id]"]',
+            'selector' => '[name="store_id"]',
             'input' => 'selectstore'
         ],
         'is_active' => [
-            'selector' => '[name="filters[is_active]"]',
+            'selector' => '[name="is_active"]',
             'input' => 'select',
         ],
         'creation_time_from' => [
-            'selector' => '[name="filters[creation_time][from]"]',
+            'selector' => '[name="creation_time[from]"]',
         ],
         'creation_time_to' => [
-            'selector' => '[name="filters[creation_time][to]"]',
+            'selector' => '[name="creation_time[to]"]',
         ],
         'update_time_from' => [
-            'selector' => '[name="filters[update_time][from]"]',
+            'selector' => '[name="update_time[from]"]',
         ],
         'update_time_to' => [
-            'selector' => '[name="filters[update_time][to]"]',
+            'selector' => '[name="update_time[to]"]',
         ],
         'under_version_control' => [
-            'selector' => '[name="filters[under_version_control]"]',
+            'selector' => '[name="under_version_control"]',
         ],
     ];
 
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsBlock.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsBlock.xml
index 71e66d0998b0d6085bb5635aaaa14c0c9c5673cc..267308c48735ed6ec77237af7c2857754dcc9b31 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsBlock.xml
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsBlock.xml
@@ -10,7 +10,7 @@
              module="Magento_Cms"
              type="flat"
              entity_type="cms_block"
-             collection="Magento\Cms\Model\Resource\Block\Grid\Collection"
+             collection="Magento\Cms\Model\ResourceModel\Block\Grid\Collection"
              identifier="identifier"
              handler_interface="Magento\Cms\Test\Handler\CmsBlock\CmsBlockInterface"
              repository_class="Magento\Cms\Test\Repository\CmsBlock" class="Magento\Cms\Test\Fixture\CmsBlock">
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage.xml
index 811bda4037135ba277338b7c51a7a95aeea6a196..3f2d47608055f0e7269915e3e3d094c0c7d18bb2 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage.xml
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Fixture/CmsPage.xml
@@ -10,7 +10,7 @@
              module="Magento_Cms"
              type="flat"
              entity_type="cms_page"
-             collection="Magento\Cms\Model\Resource\Page\Grid\Collection"
+             collection="Magento\Cms\Model\ResourceModel\Page\Grid\Collection"
              identifier="identifier"
              repository_class="Magento\Cms\Test\Repository\CmsPage"
              handler_interface="Magento\Cms\Test\Handler\CmsPage\CmsPageInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockNew.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockNew.xml
index d37d3e1420419a36bb1c134e900889c80c5ba50b..a9089eeddc76073466aa542f0d8687a1d1eeb68e 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsBlockNew.xml
@@ -10,5 +10,6 @@
         <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" />
         <block name="cmsForm" class="Magento\Cms\Test\Block\Adminhtml\Block\Edit\CmsForm" locator="[id='page:main-container']" strategy="css selector" />
         <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector" />
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageNew.xml b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageNew.xml
index 252dc039121b9ae55c6b30b063170fee9114c9a6..fc93801cdc7ef5a32179fc2f643388022f320e72 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/Page/Adminhtml/CmsPageNew.xml
@@ -9,5 +9,6 @@
     <page name="CmsPageNew" area="Adminhtml" mca="cms/page/new" module="Magento_Cms">
         <block name="pageForm" class="Magento\Cms\Test\Block\Adminhtml\Page\Edit\PageForm" locator="[id='page:main-container']" strategy="css selector" />
         <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" />
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsBlockEntityTest.php b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsBlockEntityTest.php
index 07f8d2dea4488bc90f697262bbaadf250022dde9..31f36c5eb25d627416f072aeb42a2bbe97306e31 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsBlockEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsBlockEntityTest.php
@@ -77,5 +77,6 @@ class DeleteCmsBlockEntityTest extends Injectable
         $this->cmsBlockIndex->open();
         $this->cmsBlockIndex->getCmsBlockGrid()->searchAndOpen($filter, true, false);
         $this->cmsBlockNew->getFormPageActions()->delete();
+        $this->cmsBlockNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageEntityTest.php b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageEntityTest.php
index 5801ba85ea504bfeab0d880713bb50a51780d201..17d47b6681c4c87f62b492f32f327411e1089ff9 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageEntityTest.php
@@ -74,5 +74,6 @@ class DeleteCmsPageEntityTest extends Injectable
         $this->cmsPageIndex->open();
         $this->cmsPageIndex->getCmsPageGridBlock()->searchAndOpen(['title' => $cmsPage->getTitle()]);
         $this->cmsPageNew->getPageMainActions()->delete();
+        $this->cmsPageNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageUrlRewriteEntityTest.php
index 7d5364c7c6fe48279ef35c797ddce98eefa828c2..7ef7db00e0aa723a15fd04cd347ced2fb6bc48f3 100644
--- a/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageUrlRewriteEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Cms/Test/TestCase/DeleteCmsPageUrlRewriteEntityTest.php
@@ -77,5 +77,6 @@ class DeleteCmsPageUrlRewriteEntityTest extends Injectable
         $this->urlRewriteIndex->open();
         $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen(['request_path' => $urlRewrite->getRequestPath()]);
         $this->urlRewriteEdit->getPageMainActions()->delete();
+        $this->urlRewriteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Config/Test/Fixture/ConfigData.xml b/dev/tests/functional/tests/app/Magento/Config/Test/Fixture/ConfigData.xml
index d3f1fd8c407b01297bd7385273a0251475c08747..a70fb1a7c122da2ca7e772041ada1e201fbf7856 100644
--- a/dev/tests/functional/tests/app/Magento/Config/Test/Fixture/ConfigData.xml
+++ b/dev/tests/functional/tests/app/Magento/Config/Test/Fixture/ConfigData.xml
@@ -10,7 +10,7 @@
              module="Magento_Config"
              type="flat"
              entity_type="core_config_data"
-             collection="Magento\Config\Model\Resource\Config\Data\Collection"
+             collection="Magento\Config\Model\ResourceModel\Config\Data\Collection"
              repository_class="Magento\Config\Test\Repository\ConfigData"
              handler_interface="Magento\Config\Test\Handler\ConfigData\ConfigDataInterface"
              class="Magento\Config\Test\Fixture\ConfigData">
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/AttributesGrid.php b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/AttributesGrid.php
index 523ff4c9c377d560c074d62834fc98d9642a24ff..78e58b4926c514bf1f388d0c0ddc8f8d0a53bdea 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/AttributesGrid.php
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Block/Adminhtml/Product/AttributesGrid.php
@@ -20,7 +20,7 @@ class AttributesGrid extends DataGrid
      */
     protected $filters = [
         'frontend_label' => [
-            'selector' => '[name="filters[frontend_label]"]',
+            'selector' => '[name="frontend_label"]',
         ],
     ];
 }
diff --git a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Fixture/ConfigurableProduct.xml b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Fixture/ConfigurableProduct.xml
index f355522a64886ef349c76a381127b6c617fe85da..47f898e4e5b5a3a096740561f4f0872b97390a41 100644
--- a/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Fixture/ConfigurableProduct.xml
+++ b/dev/tests/functional/tests/app/Magento/ConfigurableProduct/Test/Fixture/ConfigurableProduct.xml
@@ -11,7 +11,7 @@
              type="eav"
              entity_type="catalog_product"
              product_type="configurable"
-             collection="Magento\Catalog\Model\Resource\Product\Collection"
+             collection="Magento\Catalog\Model\ResourceModel\Product\Collection"
              identifier="sku"
              repository_class="Magento\ConfigurableProduct\Test\Repository\ConfigurableProduct"
              handler_interface="Magento\ConfigurableProduct\Test\Handler\ConfigurableProduct\ConfigurableProductInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Account/AddressesAdditional.php b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Account/AddressesAdditional.php
index 89292194978865d58920ac9c5cadcc8b47c1b69f..9e316ceabeab7a7c3b2f500465ece437d0032136 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Account/AddressesAdditional.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Account/AddressesAdditional.php
@@ -36,6 +36,13 @@ class AddressesAdditional extends Block
      */
     protected $additionalAddressContent = '.block-content';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Delete Additional Address
      *
@@ -46,7 +53,10 @@ class AddressesAdditional extends Block
     {
         $this->_rootElement->find(sprintf($this->addressSelector, $address->getStreet()), Locator::SELECTOR_XPATH)
             ->find($this->deleteAddressLink)->click();
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml
index bc70891ffa44c1c7dc73bdc6469b37fcd113c886..c4778125723fb2d2312f151e23a32ad03248d2c1 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Block/Adminhtml/Edit/CustomerForm.xml
@@ -10,7 +10,7 @@
         <class>\Magento\Backend\Test\Block\Widget\Tab</class>
         <selector>#tab_customer</selector>
         <strategy>css selector</strategy>
-        <wrapper>data[customer]</wrapper>
+        <wrapper>customer</wrapper>
         <fields>
             <website_id>
                 <input>select</input>
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Address.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Address.xml
index 2493ece8b746748f07b73567128c23b5c7dce1c5..49a4878d93b604b9ab66c459489c8036592fc3b8 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Address.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Address.xml
@@ -10,7 +10,7 @@
              module="Magento_Customer"
              type="eav"
              entity_type="customer_address"
-             collection="Magento\Customer\Model\Resource\Address\Collection"
+             collection="Magento\Customer\Model\ResourceModel\Address\Collection"
              repository_class="Magento\Customer\Test\Repository\Address"
              handler_interface="Magento\Customer\Test\Handler\Address\AddressInterface"
              class="Magento\Customer\Test\Fixture\Address">
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Customer.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Customer.xml
index 143efd72a580f14ec2ddf86fdb6de2ee3cb185d9..c65ff0d9c5101faa6374df50f4e5ec499acb2fec 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Customer.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/Customer.xml
@@ -10,7 +10,7 @@
              module="Magento_Customer"
              type="eav"
              entity_type="customer"
-             collection="Magento\Customer\Model\Resource\Customer\Collection"
+             collection="Magento\Customer\Model\ResourceModel\Customer\Collection"
              identifier="email"
              repository_class="Magento\Customer\Test\Repository\Customer"
              handler_interface="Magento\Customer\Test\Handler\Customer\CustomerInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/CustomerGroup.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/CustomerGroup.xml
index bd0e52cf844d8691b8a95c88a46fa6c15e985d3b..276b59ddd346fcd54f147bfe1c1b73db316ae96d 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/CustomerGroup.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Fixture/CustomerGroup.xml
@@ -10,7 +10,7 @@
              module="Magento_Customer"
              type="flat"
              entity_type="customer_group"
-             collection="Magento\Customer\Model\Resource\Group\Collection"
+             collection="Magento\Customer\Model\ResourceModel\Group\Collection"
              repository_class="Magento\Customer\Test\Repository\CustomerGroup"
              handler_interface="Magento\Customer\Test\Handler\CustomerGroup\CustomerGroupInterface"
              class="Magento\Customer\Test\Fixture\CustomerGroup">
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerGroupNew.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerGroupNew.xml
index 69db394b4cd959a1ed6c295872385ba49c86b0cf..72d8c4bf8231191d34e9337edc1bc90379eac86e 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerGroupNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerGroupNew.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CustomerGroupNew" area="Adminhtml" mca="customer/group/new" module="Magento_Customer">
-    <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="pageMainForm" class="Magento\Customer\Test\Block\Adminhtml\Group\Edit\Form" locator="[id='page:main-container']" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-  </page>
+    <page name="CustomerGroupNew" area="Adminhtml" mca="customer/group/new" module="Magento_Customer">
+        <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="pageMainForm" class="Magento\Customer\Test\Block\Adminhtml\Group\Edit\Form" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml
index 80bd928de60acd6954d2f443840b73a548cd2c49..7dfacbc495c1259f286bfca6677d7339e280503a 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/Page/Adminhtml/CustomerIndexEdit.xml
@@ -6,11 +6,12 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="CustomerIndexEdit" area="Adminhtml" mca="customer/index/edit" module="Magento_Customer">
-    <block name="titleBlock" class="Magento\Theme\Test\Block\Html\Title" locator=".page-title-wrapper .page-title" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-    <block name="pageActionsBlock" class="Magento\Customer\Test\Block\Adminhtml\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="customerForm" class="Magento\Customer\Test\Block\Adminhtml\Edit\CustomerForm" locator="[id='page:main-container']" strategy="css selector"/>
-    <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@role='dialog' and ./*[@id='product_composite_configure'] and contains(@style,'display: block')]" strategy="xpath"/>
-  </page>
+    <page name="CustomerIndexEdit" area="Adminhtml" mca="customer/index/edit" module="Magento_Customer">
+        <block name="titleBlock" class="Magento\Theme\Test\Block\Html\Title" locator=".page-title-wrapper .page-title" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="pageActionsBlock" class="Magento\Customer\Test\Block\Adminhtml\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="customerForm" class="Magento\Customer\Test\Block\Adminhtml\Edit\CustomerForm" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@role='dialog' and ./*[@id='product_composite_configure'] and contains(@style,'display: block')]" strategy="xpath"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerBackendEntityTest.php b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerBackendEntityTest.php
index adb0c3fc6db5b4bdf5459ba0982afc63b350cc59..55193f4834afad1c48e987b460f3e834dd4f8836 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerBackendEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerBackendEntityTest.php
@@ -74,5 +74,6 @@ class DeleteCustomerBackendEntityTest extends Injectable
         $this->customerIndexPage->open();
         $this->customerIndexPage->getCustomerGridBlock()->searchAndOpen($filter);
         $this->customerIndexEditPage->getPageActionsBlock()->delete();
+        $this->customerIndexEditPage->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerGroupEntityTest.php b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerGroupEntityTest.php
index 7b3cfefbf139cc9d1c62c61f1cc96872a5da1a39..067e17a8d0e5945f342579371a6325436e014b60 100644
--- a/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerGroupEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Customer/Test/TestCase/DeleteCustomerGroupEntityTest.php
@@ -80,5 +80,6 @@ class DeleteCustomerGroupEntityTest extends Injectable
         $this->customerGroupIndex->open();
         $this->customerGroupIndex->getCustomerGroupGrid()->searchAndOpen($filter);
         $this->customerGroupNew->getPageMainActions()->delete();
+        $this->customerGroupNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Directory/Test/Fixture/CurrencyRate.xml b/dev/tests/functional/tests/app/Magento/Directory/Test/Fixture/CurrencyRate.xml
index 8e9a51f944a7dab96f43db73dacf4163539c4f54..19562d7ecae6314ea263d2f80ea42ff904d2ffa0 100644
--- a/dev/tests/functional/tests/app/Magento/Directory/Test/Fixture/CurrencyRate.xml
+++ b/dev/tests/functional/tests/app/Magento/Directory/Test/Fixture/CurrencyRate.xml
@@ -10,7 +10,7 @@
              module="Magento_Directory"
              type="flat"
              entity_type="directory_currency_rate"
-             collection="Magento\Directory\Model\Resource\Currency"
+             collection="Magento\Directory\Model\ResourceModel\Currency"
              identifier=""
              repository_class="Magento\Directory\Test\Repository\CurrencyRate"
              handler_interface="Magento\Directory\Test\Handler\CurrencyRate\CurrencyRateInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProduct.xml b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProduct.xml
index f75a1b3fb39d1a74459c913e4c35619ad6b4b7ff..a105a2e083d6253f5c68732287d868d0ac01d7d2 100644
--- a/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProduct.xml
+++ b/dev/tests/functional/tests/app/Magento/Downloadable/Test/Fixture/DownloadableProduct.xml
@@ -11,7 +11,7 @@
              type="eav"
              entity_type="catalog_product"
              product_type="downloadable"
-             collection="Magento\Catalog\Model\Resource\Product\Collection"
+             collection="Magento\Catalog\Model\ResourceModel\Product\Collection"
              identifier="sku"
              repository_class="Magento\Downloadable\Test\Repository\DownloadableProduct"
              handler_interface="Magento\Downloadable\Test\Handler\DownloadableProduct\DownloadableProductInterface"
diff --git a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Fixture/GiftMessage.xml b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Fixture/GiftMessage.xml
index 17844e49b69b1e0cb11f8cd53f52146d6eec725a..175bbedd49bf39ca4e2c35014de4ead6dbc6646c 100644
--- a/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Fixture/GiftMessage.xml
+++ b/dev/tests/functional/tests/app/Magento/GiftMessage/Test/Fixture/GiftMessage.xml
@@ -10,7 +10,7 @@
              module="Magento_GiftMessage"
              type="flat"
              entity_type="gift_message"
-             collection="Magento\GiftMessage\Model\Resource\Message\Collection"
+             collection="Magento\GiftMessage\Model\ResourceModel\Message\Collection"
              identifier="gift_message_id"
              repository_class="Magento\GiftMessage\Test\Repository\GiftMessage"
              class="Magento\GiftMessage\Test\Fixture\GiftMessage">
diff --git a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Fixture/GroupedProduct.xml b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Fixture/GroupedProduct.xml
index e1757e1adbcf006b9653385d22b80bb23be118cb..6ca304566be90f6f9b2b04fc6a761d858e639b1f 100644
--- a/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Fixture/GroupedProduct.xml
+++ b/dev/tests/functional/tests/app/Magento/GroupedProduct/Test/Fixture/GroupedProduct.xml
@@ -11,7 +11,7 @@
              type="eav"
              entity_type="catalog_product"
              product_type="grouped"
-             collection="Magento\Catalog\Model\Resource\Product\Collection"
+             collection="Magento\Catalog\Model\ResourceModel\Product\Collection"
              identifier="sku"
              repository_class="Magento\GroupedProduct\Test\Repository\GroupedProduct"
              handler_interface="Magento\GroupedProduct\Test\Handler\GroupedProduct\GroupedProductInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid.php b/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid.php
index fa5f9a0e4a2f82c9ebc6216d254390dbadde8964..73c66f0af0aa7d3ab65c1f10d8d6505267960090 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Block/Adminhtml/Integration/IntegrationGrid.php
@@ -74,6 +74,13 @@ class IntegrationGrid extends Grid
      */
     protected $tokensPopupSelector = './/ancestor::body/div[descendant::fieldset[contains(@id,"integration_token")]]';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Search and delete current item
      *
@@ -84,13 +91,10 @@ class IntegrationGrid extends Grid
     {
         $this->search($item);
         $this->_rootElement->find($this->deleteLink)->click();
-
-        /** @var \Magento\Integration\Test\Block\Adminhtml\Integration\IntegrationGrid\DeleteDialog $deleteDialog */
-        $deleteDialog = $this->blockFactory->create(
-            'Magento\Integration\Test\Block\Adminhtml\Integration\IntegrationGrid\DeleteDialog',
-            ['element' => $this->_rootElement->find($this->deleteBlockSelector, Locator::SELECTOR_XPATH)]
-        );
-        $deleteDialog->acceptDeletion();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Integration/Test/Fixture/Integration.xml b/dev/tests/functional/tests/app/Magento/Integration/Test/Fixture/Integration.xml
index 2712dcbae41d754fbb826bd041e72b4524215d36..574878a5927af34d4046f007b3358d60e465e425 100644
--- a/dev/tests/functional/tests/app/Magento/Integration/Test/Fixture/Integration.xml
+++ b/dev/tests/functional/tests/app/Magento/Integration/Test/Fixture/Integration.xml
@@ -10,7 +10,7 @@
              module="Magento_Integration"
              type="composite"
              entity_type="integration"
-             collection="Magento\Integration\Model\Resource\Integration\Collection"
+             collection="Magento\Integration\Model\ResourceModel\Integration\Collection"
              repository_class="Magento\Integration\Test\Repository\Integration"
              handler_interface="Magento\Integration\Test\Handler\Integration\IntegrationInterface"
              class="Magento\Integration\Test\Fixture\Integration">
diff --git a/dev/tests/functional/tests/app/Magento/Newsletter/Test/Fixture/Template.xml b/dev/tests/functional/tests/app/Magento/Newsletter/Test/Fixture/Template.xml
index 38155dfa637f67fe7fc8262f1713b830236e67f1..30f84dceefc7b2c7eaea328e72b077929e3b7d1f 100644
--- a/dev/tests/functional/tests/app/Magento/Newsletter/Test/Fixture/Template.xml
+++ b/dev/tests/functional/tests/app/Magento/Newsletter/Test/Fixture/Template.xml
@@ -10,7 +10,7 @@
              module="Magento_Newsletter"
              type="flat"
              entity_type="newsletter_template"
-             collection="Magento\Newsletter\Model\Resource\Template\Collection"
+             collection="Magento\Newsletter\Model\ResourceModel\Template\Collection"
              identifier="template_id"
              repository_class="Magento\Newsletter\Test\Repository\Template"
              handler_interface="Magento\Newsletter\Test\Handler\Template\TemplateInterface"
diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php
index efbf9ac19ef2cadf83593911322353f99b0a5a3d..c490b2dbaf13b2cfaba9787a46afa4fc6fc22f7a 100755
--- a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php
+++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/Edit/Tab/ImagesAndVideos.php
@@ -20,7 +20,7 @@ class ImagesAndVideos extends Tab
      *
      * @var string
      */
-    protected $addVideoButton = '#product_info_tabs_images-and-videos_content #add_video_button';
+    protected $addVideoButton = '#product_info_tabs_image-management_content #add_video_button';
 
     /**
      * Video dialog CSS locator.
diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml
index 94e28feef713c0c1e8a6746f2f6749d02fd73e8b..5a3c8fbe3fd8a2ad7b6aa3e97d29357ef2a9a0a5 100755
--- a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml
+++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Block/Adminhtml/Product/ProductForm.xml
@@ -8,7 +8,7 @@
 <tabs>
     <images-and-videos>
         <class>\Magento\ProductVideo\Test\Block\Adminhtml\Product\Edit\Tab\ImagesAndVideos</class>
-        <selector>#product_info_tabs_images-and-videos</selector>
+        <selector>#product_info_tabs_image-management</selector>
         <strategy>css selector</strategy>
         <fields>
             <position />
diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Repository/ConfigData.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Repository/ConfigData.xml
new file mode 100755
index 0000000000000000000000000000000000000000..5227236ce505b0b23ac486f1b3cffcf509cbe6e4
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/Repository/ConfigData.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0"?>
+<!--
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+-->
+<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/Magento/Mtf/Repository/etc/repository.xsd">
+    <repository class="Magento\Config\Test\Repository\ConfigData">
+        <dataset name="youtube_api_key">
+            <field name="catalog/product_video/youtube_api_key" xsi:type="array">
+                <item name="scope" xsi:type="string">default</item>
+                <item name="scope_id" xsi:type="number">0</item>
+                <item name="label" xsi:type="string"/>
+                <item name="value" xsi:type="string">AIzaSyDwqDWuw1lra-LnpJL2Mr02DYuFmkuRSns</item>
+            </field>
+        </dataset>
+        <dataset name="youtube_api_key_rollback">
+            <field name="catalog/product_video/youtube_api_key" xsi:type="array">
+                <item name="scope" xsi:type="string">default</item>
+                <item name="scope_id" xsi:type="number">0</item>
+                <item name="label" xsi:type="string"/>
+                <item name="value" xsi:type="string"/>
+            </field>
+        </dataset>
+    </repository>
+</config>
diff --git a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/UpdateSimpleProductEntityTest.xml b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/UpdateSimpleProductEntityTest.xml
index 6a151535f05f02ed372dbe0fec9671a6235b4840..74f73a10f81e37277a67c839ac9318704cda1712 100755
--- a/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/UpdateSimpleProductEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/ProductVideo/Test/TestCase/UpdateSimpleProductEntityTest.xml
@@ -34,6 +34,7 @@
             <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/WMp2PvU2qi8</data>
             <data name="product/data/media_gallery/images/0/video_title" xsi:type="string">Foo Test 1</data>
             <data name="product/data/media_gallery/images/0/video_description" xsi:type="string">This is a test "Foo Test 1"</data>
+            <data name="configData" xsi:type="string">youtube_api_key</data>
             <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoCategoryView" />
             <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoProductView" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" />
@@ -50,18 +51,19 @@
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" />
         </variation>
         <variation name="AddVideoToPCFTestVariation3">
-        <data name="initialProduct/dataset" xsi:type="string">product_with_category</data>
-        <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data>
+            <data name="initialProduct/dataset" xsi:type="string">product_with_category</data>
+            <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data>
             <data name="product/data/sku" xsi:type="string">sku_simple_product_with_video_%isolation%</data>
             <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/WMp2PvU2qi8</data>
             <data name="product/data/media_gallery/images/0/video_title" xsi:type="string">Foo Test 1</data>
+            <data name="configData" xsi:type="string">youtube_api_key</data>
             <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoCategoryView" />
             <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoProductView" />
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" />
         </variation>
         <variation name="AddVideoToPCFTestVariation4">
-        <data name="initialProduct/dataset" xsi:type="string">product_with_category</data>
-        <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data>
+            <data name="initialProduct/dataset" xsi:type="string">product_with_category</data>
+            <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data>
             <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://vimeo.com/21776334</data>
             <data name="product/data/media_gallery/images/0/video_title" xsi:type="string">Foo Test 2</data>
             <constraint name="Magento\ProductVideo\Test\Constraint\AssertVideoCategoryView" />
@@ -73,6 +75,7 @@
             <data name="initialProduct/dataset" xsi:type="string">product_with_video_youtube</data>
             <data name="product/data/sku" xsi:type="string">sku_simple_product_with_video_%isolation%</data>
             <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/bpOSxM0rNPM</data>
+            <data name="configData" xsi:type="string">youtube_api_key</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" />
         </variation>
         <variation name="UpdateVideoInPCFTestVariation2">
@@ -97,6 +100,7 @@
             <data name="productVideo/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/bpOSxM0rNPM</data>
             <data name="productVideo/data/media_gallery/images/0/video_title" xsi:type="string">Edit Test</data>
             <data name="productVideo/data/media_gallery/images/0/video_description" xsi:type="string">This is an edit test</data>
+            <data name="configData" xsi:type="string">youtube_api_key</data>
             <constraint name="Magento\Catalog\Test\Constraint\AssertProductForm" />
         </variation>
         <variation name="GetVideoInfoTestVariation1">
@@ -105,6 +109,7 @@
             <data name="product/data/sku" xsi:type="string">simple_product_with_category_%isolation%</data>
             <data name="product/data/media_gallery/images/0/video_url" xsi:type="string">https://youtu.be/WMp2PvU2qi8</data>
             <data name="video/video_title" xsi:type="string">Foo Fighters - Congregation</data>
+            <data name="configData" xsi:type="string">youtube_api_key</data>
             <constraint name="Magento\ProductVideo\Test\Constraint\AssertGetVideoInfoDataIsCorrect" />
         </variation>
         <variation name="GetVideoInfoTestVariation2">
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertSetApprovedProductReview.php b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertSetApprovedProductReview.php
index 1e627941bd767bda72fe440332592e03926229a6..ea33820808df7a4ec29e046b924ed061dceafcb2 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertSetApprovedProductReview.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Constraint/AssertSetApprovedProductReview.php
@@ -69,6 +69,7 @@ class AssertSetApprovedProductReview extends AbstractConstraint
     {
         $this->cachePage->open();
         $this->cachePage->getActionsBlock()->flushCacheStorage();
+        $this->cachePage->getModalBlock()->acceptAlert();
         \PHPUnit_Framework_Assert::assertTrue(
             $this->cachePage->getActionsBlock()->isStorageCacheFlushed(),
             'Cache is not flushed.'
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Rating.xml b/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Rating.xml
index 4eb0c4f5dd9b29fe1dac349b4c07db8ed0fd9a5a..54b82e5ead56a10dc7d228cbd901a1ec0e460547 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Rating.xml
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Rating.xml
@@ -10,7 +10,7 @@
              module="Magento_Review"
              type="flat"
              entity_type="rating"
-             collection="Magento\Review\Model\Resource\Rating\Collection"
+             collection="Magento\Review\Model\ResourceModel\Rating\Collection"
              identifier="rating_code"
              repository_class="Magento\Review\Test\Repository\Rating"
              handler_interface="Magento\Review\Test\Handler\Rating\RatingInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Review.xml b/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Review.xml
index 41d99fc38a70e1c4c4466803a60633fb0e522404..846dba63088e012bd23dbcade5ee27d2be37e6d6 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Review.xml
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Fixture/Review.xml
@@ -9,7 +9,7 @@
     <fixture name="review"
              module="Magento_Review"
              type="composite"
-             collection="Magento\Review\Model\Resource\Review\Collection"
+             collection="Magento\Review\Model\ResourceModel\Review\Collection"
              repository_class="Magento\Review\Test\Repository\Review"
              handler_interface="Magento\Review\Test\Handler\Review\ReviewInterface"
              class="Magento\Review\Test\Fixture\Review">
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/Page/Adminhtml/RatingEdit.xml b/dev/tests/functional/tests/app/Magento/Review/Test/Page/Adminhtml/RatingEdit.xml
index 2f6ca2960091c5bd82bb7b4d7d53870d6e62705a..f5f44551d022211696f6414d012d7ae71c082980 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/Page/Adminhtml/RatingEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/Page/Adminhtml/RatingEdit.xml
@@ -9,5 +9,6 @@
     <page name="RatingEdit" area="Adminhtml" mca="review/rating/edit" module="Magento_Review">
         <block name="pageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" />
         <block name="ratingForm" class="Magento\Review\Test\Block\Adminhtml\Rating\Edit\RatingForm" locator="[id='page:main-container']" strategy="css selector" />
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductRatingEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductRatingEntityTest.php
index 9f826b41451c330ba04df0998bf884e2a757c4fd..bbfabc028edbfcf7f338079820e8d1eab1aa5efb 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductRatingEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductRatingEntityTest.php
@@ -127,5 +127,6 @@ class CreateProductRatingEntityTest extends Injectable
         $this->ratingIndex->open();
         $this->ratingIndex->getRatingGrid()->searchAndOpen($filter);
         $this->ratingEdit->getPageActions()->delete();
+        $this->ratingEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewBackendEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewBackendEntityTest.php
index 937cca411d93bd0c63e1fa0781d3fb24a1160f90..961ab02b043db089113b5b9872d48e9635aefb0c 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewBackendEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewBackendEntityTest.php
@@ -135,6 +135,7 @@ class CreateProductReviewBackendEntityTest extends Injectable
             foreach ($this->review->getRatings() as $rating) {
                 $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]);
                 $this->ratingEdit->getPageActions()->delete();
+                $this->ratingEdit->getModalBlock()->acceptAlert();
             }
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewFrontendEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewFrontendEntityTest.php
index d0635638f9ff22cd66dd9652799057e37202d706..406f4deef9c96938bcc1168594cff4ec68fa1bb4 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewFrontendEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/CreateProductReviewFrontendEntityTest.php
@@ -128,6 +128,7 @@ class CreateProductReviewFrontendEntityTest extends Injectable
             foreach ($ratings as $rating) {
                 $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]);
                 $this->ratingEdit->getPageActions()->delete();
+                $this->ratingEdit->getModalBlock()->acceptAlert();
             }
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/DeleteProductRatingEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/DeleteProductRatingEntityTest.php
index 193c7307ab800639ce31252e6b9614b64c18238f..8b7d3bf5749d993c9b6af023813bb06e9f74af05 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/DeleteProductRatingEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/DeleteProductRatingEntityTest.php
@@ -90,5 +90,6 @@ class DeleteProductRatingEntityTest extends Injectable
         $this->ratingIndex->open();
         $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $productRating->getRatingCode()]);
         $this->ratingEdit->getPageActions()->delete();
+        $this->ratingEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/ManageProductReviewFromCustomerPageTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/ManageProductReviewFromCustomerPageTest.php
index f0a34008cf012d56b49cf4f91e3c721aa00a319f..b7d7b5b53f55c84b5e599a517dbb12866b49e212 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/ManageProductReviewFromCustomerPageTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/ManageProductReviewFromCustomerPageTest.php
@@ -208,6 +208,7 @@ class ManageProductReviewFromCustomerPageTest extends Injectable
             foreach ($this->reviewInitial->getRatings() as $rating) {
                 $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]);
                 $this->ratingEdit->getPageActions()->delete();
+                $this->ratingEdit->getModalBlock()->acceptAlert();
             }
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/MassActionsProductReviewEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/MassActionsProductReviewEntityTest.php
index f351eb72b7d9364a998b6c3e0edb9398ae3ca568..188ec0fa1e69df95095bd633a8d7c13a51fcfbc9 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/MassActionsProductReviewEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/MassActionsProductReviewEntityTest.php
@@ -119,6 +119,7 @@ class MassActionsProductReviewEntityTest extends Injectable
             foreach ($this->review->getRatings() as $rating) {
                 $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]);
                 $this->ratingEdit->getPageActions()->delete();
+                $this->ratingEdit->getModalBlock()->acceptAlert();
             }
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php
index 7b6908ce0a0aeb502cb1954369d583de1ec36041..0a373da1808d8f3d1fa4b0de030cc9c0f0d5c5c7 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityOnProductPageTest.php
@@ -178,6 +178,7 @@ class UpdateProductReviewEntityOnProductPageTest extends Injectable
         foreach ($this->reviewInitial->getRatings() as $rating) {
             $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]);
             $this->ratingEdit->getPageActions()->delete();
+            $this->ratingEdit->getModalBlock()->acceptAlert();
         }
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityTest.php b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityTest.php
index f2ab71072a284343bb6b61dfa5c7fd8d1c0f7284..f3005a32db02202fbb7e12576727b1f64e1c01e4 100644
--- a/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Review/Test/TestCase/UpdateProductReviewEntityTest.php
@@ -132,6 +132,7 @@ class UpdateProductReviewEntityTest extends Injectable
             foreach ($this->review->getRatings() as $rating) {
                 $this->ratingIndex->getRatingGrid()->searchAndOpen(['rating_code' => $rating['title']]);
                 $this->ratingEdit->getPageActions()->delete();
+                $this->ratingEdit->getModalBlock()->acceptAlert();
             }
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php
index 4d5bf937f8f114d8b7aecfc572af2e91f6ddaff6..2a1942e9f7254b0ff6bfba751f5f17f073e160ca 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php
@@ -113,6 +113,13 @@ class Actions extends Block
      */
     protected $button = 'button[data-ui-id$="%s-button"]';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Ship order
      *
@@ -171,7 +178,10 @@ class Actions extends Block
     public function cancel()
     {
         $this->_rootElement->find($this->cancel)->click();
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php
index 8edbfb720f70923331a9af8cd1d2f6c0581e34d6..eafb045e43909796768abf263b75cfbe940e875d 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Grid.php
@@ -21,39 +21,39 @@ class Grid extends DataGrid
      */
     protected $filters = [
         'id' => [
-            'selector' => '[name="filters[increment_id]"]',
+            'selector' => '[name="increment_id"]',
         ],
         'status' => [
-            'selector' => '[name="filters[status]"]',
+            'selector' => '[name="status"]',
             'input' => 'select',
         ],
         'purchase_date_from' => [
-            'selector' => '[name="filters[created_at][from]"]',
+            'selector' => '[name="created_at[from]"]',
         ],
         'purchase_date_to' => [
-            'selector' => '[name="filters[created_at][to]"]',
+            'selector' => '[name="created_at[to]"]',
         ],
         'base_grand_total_from' => [
-            'selector' => '[name="filters[base_grand_total][from]"]',
+            'selector' => '[name="base_grand_total[from]"]',
         ],
         'base_grand_total_to' => [
-            'selector' => '[name="filters[base_grand_total][to]"]',
+            'selector' => '[name="base_grand_total[to]"]',
         ],
         'purchased_gran_total_from' => [
-            'selector' => '[name="filters[grand_total][from]"]',
+            'selector' => '[name="grand_total[from]"]',
         ],
         'purchased_gran_total_to' => [
-            'selector' => '[name="filters[grand_total][to]"]',
+            'selector' => '[name="grand_total[to]"]',
         ],
         'purchase_point' => [
-            'selector' => '[name="filters[store_id]"]',
+            'selector' => '[name="store_id"]',
             'input' => 'selectstore'
         ],
         'bill_to_name' => [
-            'selector' => '[name="filters[billing_name]"]'
+            'selector' => '[name="billing_name"]'
         ],
         'ship_to_name' => [
-            'selector' => '[name="filters[shipping_name]"]',
+            'selector' => '[name="shipping_name"]',
         ]
     ];
 
@@ -62,13 +62,6 @@ class Grid extends DataGrid
      */
     protected $createNewOrder = '[data-ui-id="add-button"]';
 
-    /**
-     * Purchase Point Filter selector.
-     *
-     * @var string
-     */
-    protected $purchasePointFilter = '[name="filters[store_id]"]';
-
     /**
      * Order Id td selector.
      *
@@ -101,12 +94,14 @@ class Grid extends DataGrid
     public function getPurchasePointStoreGroups()
     {
         $this->openFilterBlock();
-        $storeGroupElements = $this->_rootElement->find($this->purchasePointFilter)
+
+        $storeGroupElements = $this->_rootElement->find($this->filters['purchase_point']['selector'])
             ->getElements('//option/preceding-sibling::optgroup[1]', Locator::SELECTOR_XPATH);
         $result = [];
 
         foreach ($storeGroupElements as $storeGroupElement) {
-            $result[] = trim($storeGroupElement->getAttribute('label'));
+            // "u" pattern modifier allows to match "&nbsp;" and other similar entities given in invalid encryption
+            $result[] = preg_replace('~^\s*~u', '', $storeGroupElement->getAttribute('label'));
         }
 
         return $result;
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Fixture/OrderInjectable.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/Fixture/OrderInjectable.xml
index d65cebe5a9456418ddd06cb45c6c2bb7d8f023e6..c3b5149f053e8d9f7fc2b2978177f89e199ee6fb 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Fixture/OrderInjectable.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Fixture/OrderInjectable.xml
@@ -10,7 +10,7 @@
              module="Magento_Sales"
              type="flat"
              entity_type="sales_order"
-             collection="Magento\Sales\Model\Resource\Order\Collection"
+             collection="Magento\Sales\Model\ResourceModel\Order\Collection"
              repository_class="Magento\Sales\Test\Repository\OrderInjectable"
              handler_interface="Magento\Sales\Test\Handler\OrderInjectable\OrderInjectableInterface"
              class="Magento\Sales\Test\Fixture\OrderInjectable">
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Fixture/OrderStatus.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/Fixture/OrderStatus.xml
index 5cea54a5f707fb135a12a59300a163ad89d22cba..cad9c27fbee8b978c47ea11f92622dd904a3ce1c 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Fixture/OrderStatus.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Fixture/OrderStatus.xml
@@ -9,7 +9,7 @@
     <fixture name="orderStatus"
              module="Magento_Sales"
              type="composite"
-             collection="Magento\Sales\Model\Resource\Order\Status\Collection"
+             collection="Magento\Sales\Model\ResourceModel\Order\Status\Collection"
              repository_class="Magento\Sales\Test\Repository\OrderStatus"
              handler_interface="Magento\Sales\Test\Handler\OrderStatus\OrderStatusInterface"
              class="Magento\Sales\Test\Fixture\OrderStatus">
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderCreateIndex.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderCreateIndex.xml
index 9ca28ac5ddd33341712eca9726bc6c2b62656946..cdfafdfa832440fa68a2891379cf88a96dd80613 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderCreateIndex.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Page/Adminhtml/OrderCreateIndex.xml
@@ -13,6 +13,6 @@
     <block name="actionsBlock" class="Magento\Backend\Test\Block\GridPageActions" locator=".page-main-actions" strategy="css selector"/>
     <block name="couponsBlock" class="Magento\Sales\Test\Block\Adminhtml\Order\Create\Coupons" locator="#order-coupons" strategy="css selector"/>
     <block name="customerActivitiesBlock" class="Magento\Sales\Test\Block\Adminhtml\Order\Create\CustomerActivities" locator=".customer-current-activity" strategy="css selector"/>
-    <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@role='dialog' and ./*[@id='product_composite_configure'] and contains(@style,'display: block')]" strategy="xpath"/>
+    <block name="configureProductBlock" class="Magento\Catalog\Test\Block\Adminhtml\Product\Composite\Configure" locator="//*[@data-role='modal' and .//*[@id='product_composite_configure'] and contains(@class,'_show')]" strategy="xpath"/>
   </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Fixture/SalesRule.xml b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Fixture/SalesRule.xml
index c82680f07a6f4751898e3ce76a81a329a100153a..eb8e4630ecb3047650044a7e92d8ebb1d575edb2 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Fixture/SalesRule.xml
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Fixture/SalesRule.xml
@@ -10,7 +10,7 @@
              module="Magento_SalesRule"
              type="flat"
              entity_type="salesrule"
-             collection="Magento\SalesRule\Model\Resource\Rule\Collection"
+             collection="Magento\SalesRule\Model\ResourceModel\Rule\Collection"
              repository_class="Magento\SalesRule\Test\Repository\SalesRule"
              handler_interface="Magento\SalesRule\Test\Handler\SalesRule\SalesRuleInterface"
              class="Magento\SalesRule\Test\Fixture\SalesRule">
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Page/Adminhtml/PromoQuoteEdit.xml b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Page/Adminhtml/PromoQuoteEdit.xml
index 23b3fe8d67b3aa5d93acb24f2f156893daff2730..432d754fddf7ef133232e86840e61ba25ea4c035 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/Page/Adminhtml/PromoQuoteEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/Page/Adminhtml/PromoQuoteEdit.xml
@@ -9,5 +9,6 @@
     <page name="PromoQuoteEdit" area="Adminhtml" mca="sales_rule/promo_quote/edit" module="Magento_SalesRule">
         <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" />
         <block name="salesRuleForm" class="Magento\SalesRule\Test\Block\Adminhtml\Promo\Quote\Edit\PromoQuoteForm" locator="[id='page:main-container']" strategy="css selector" />
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.php
index 906a7b51a359b37337311d70edfde7d57a18c135..833752c00f609c80f4cd7666e1f0bb27f9d0c8d5 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/CreateSalesRuleEntityTest.php
@@ -142,5 +142,6 @@ class CreateSalesRuleEntityTest extends Injectable
         $this->promoQuoteIndex->open();
         $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen($filter);
         $this->promoQuoteEdit->getFormPageActions()->delete();
+        $this->promoQuoteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/DeleteSalesRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/DeleteSalesRuleEntityTest.php
index 39acead1497ca0f54a8b88c0ab2991fb1b2e6ee5..354d27064be2eeedd4ad36ac9a7c0ff0f212c667 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/DeleteSalesRuleEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/DeleteSalesRuleEntityTest.php
@@ -75,5 +75,6 @@ class DeleteSalesRuleEntityTest extends Injectable
         $this->promoQuoteIndex->open();
         $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen(['name' => $salesRule->getName()]);
         $this->promoQuoteEdit->getFormPageActions()->delete();
+        $this->promoQuoteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php
index a1ef4b347fef4ddf8cf43643b7ac9723e34191cb..5ae2160bc42b3ab727644f984d089c4963c82118 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestCase/UpdateSalesRuleEntityTest.php
@@ -127,5 +127,6 @@ class UpdateSalesRuleEntityTest extends Injectable
         $this->promoQuoteIndex->open();
         $this->promoQuoteIndex->getPromoQuoteGrid()->searchAndOpen($filter);
         $this->promoQuoteEdit->getFormPageActions()->delete();
+        $this->promoQuoteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestStep/DeleteAllSalesRuleStep.php b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestStep/DeleteAllSalesRuleStep.php
index 98bf51e84f7c37fa0c7cf86af5024e0f7ceefe72..db64010c1af084e6d9aa892612f0fe28e401f9bc 100644
--- a/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestStep/DeleteAllSalesRuleStep.php
+++ b/dev/tests/functional/tests/app/Magento/SalesRule/Test/TestStep/DeleteAllSalesRuleStep.php
@@ -54,6 +54,7 @@ class DeleteAllSalesRuleStep implements TestStepInterface
         while ($this->promoQuoteIndex->getPromoQuoteGrid()->isFirstRowVisible()) {
             $this->promoQuoteIndex->getPromoQuoteGrid()->openFirstRow();
             $this->promoQuoteEdit->getFormPageActions()->delete();
+            $this->promoQuoteEdit->getModalBlock()->acceptAlert();
             $this->promoQuoteIndex->getSystemMessageDialog()->closePopup();
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Fixture/Sitemap.xml b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Fixture/Sitemap.xml
index b225aa55e33a795662f055396f7dbaa6f89409dd..e6d9770450ef4299344219c8b2705591500d47a2 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Fixture/Sitemap.xml
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Fixture/Sitemap.xml
@@ -10,7 +10,7 @@
              module="Magento_Sitemap"
              type="flat"
              entity_type="sitemap"
-             collection="Magento\Sitemap\Model\Resource\Sitemap\Collection"
+             collection="Magento\Sitemap\Model\ResourceModel\Sitemap\Collection"
              repository_class="Magento\Sitemap\Test\Repository\Sitemap"
              handler_interface="Magento\Sitemap\Test\Handler\Sitemap\SitemapInterface"
              class="Magento\Sitemap\Test\Fixture\Sitemap">
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Page/Adminhtml/SitemapEdit.xml b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Page/Adminhtml/SitemapEdit.xml
index 78ebe3f0f12dd0acebec5c13d7da02b3d7ad1b48..9f2d045ae61a873198f246971f3da1eb4ed3ef29 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/Page/Adminhtml/SitemapEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/Page/Adminhtml/SitemapEdit.xml
@@ -6,7 +6,8 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="SitemapEdit" area="Adminhtml" mca="admin/sitemap/edit" module="Magento_Sitemap">
-    <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-  </page>
+    <page name="SitemapEdit" area="Adminhtml" mca="admin/sitemap/edit" module="Magento_Sitemap">
+        <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Sitemap/Test/TestCase/DeleteSitemapEntityTest.php b/dev/tests/functional/tests/app/Magento/Sitemap/Test/TestCase/DeleteSitemapEntityTest.php
index 56371fb69ad3d0420eaade513e0efd1594a34b0a..9e62c9111a036bb42a1708148ab53f5b8c2aa3b3 100644
--- a/dev/tests/functional/tests/app/Magento/Sitemap/Test/TestCase/DeleteSitemapEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Sitemap/Test/TestCase/DeleteSitemapEntityTest.php
@@ -72,5 +72,6 @@ class DeleteSitemapEntityTest extends Injectable
         $this->sitemapIndex->open();
         $this->sitemapIndex->getSitemapGrid()->searchAndOpen($filter);
         $this->sitemapEdit->getFormPageActions()->delete();
+        $this->sitemapEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Store.xml b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Store.xml
index 51c3f79b2b90170bb3afc99d24f531802f94dcd3..7c186092c05270e8afc4f458ad40c02de8d7c9f6 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Store.xml
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Store.xml
@@ -10,7 +10,7 @@
              module="Magento_Store"
              type="flat"
              entity_type="store"
-             collection="Magento\Store\Model\Resource\Store\Collection"
+             collection="Magento\Store\Model\ResourceModel\Store\Collection"
              repository_class="Magento\Store\Test\Repository\Store"
              handler_interface="Magento\Store\Test\Handler\Store\StoreInterface"
              class="Magento\Store\Test\Fixture\Store">
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/StoreGroup.xml b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/StoreGroup.xml
index c1fa4d6a8ac0fc0b67acae2f0013a9411b91b1d7..ded2b0b0aef080f328663f83067f0af817c63a33 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/StoreGroup.xml
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/StoreGroup.xml
@@ -10,7 +10,7 @@
              module="Magento_Store"
              type="flat"
              entity_type="store_group"
-             collection="Magento\Store\Model\Resource\Group\Collection"
+             collection="Magento\Store\Model\ResourceModel\Group\Collection"
              repository_class="Magento\Store\Test\Repository\StoreGroup"
              handler_interface="Magento\Store\Test\Handler\StoreGroup\StoreGroupInterface"
              class="Magento\Store\Test\Fixture\StoreGroup">
diff --git a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Website.xml b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Website.xml
index 574f78cb6bc84bd254f17dbf3ad12f0fb3f4dc5d..40b6f3170f0f5f9d88b72f951249810f87f2279e 100644
--- a/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Website.xml
+++ b/dev/tests/functional/tests/app/Magento/Store/Test/Fixture/Website.xml
@@ -10,7 +10,7 @@
              module="Magento_Store"
              type="flat"
              entity_type="store_website"
-             collection="Magento\Store\Model\Resource\Website\Collection"
+             collection="Magento\Store\Model\ResourceModel\Website\Collection"
              identifier="code"
              repository_class="Magento\Store\Test\Repository\Website"
              handler_interface="Magento\Store\Test\Handler\Website\WebsiteInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxClass.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxClass.xml
index 7c33ce4479eb81b6e7c49a7fe8d4d648b088cade..3e2cc55bf65fcd821c9e8d2a5c51bd0328e46498 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxClass.xml
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxClass.xml
@@ -10,7 +10,7 @@
              module="Magento_Tax"
              type="flat"
              entity_type="tax_class"
-             collection="Magento\Tax\Model\Resource\TaxClass\Collection"
+             collection="Magento\Tax\Model\ResourceModel\TaxClass\Collection"
              repository_class="Magento\Tax\Test\Repository\TaxClass"
              handler_interface="Magento\Tax\Test\Handler\TaxClass\TaxClassInterface"
              class="Magento\Tax\Test\Fixture\TaxClass">
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRate.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRate.xml
index 93925c39ddecd4a2749d9a74e8f72ea43f2926b2..c8400d8f7ce82c8c5fc07dd7af93d8c7d607105d 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRate.xml
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRate.xml
@@ -10,7 +10,7 @@
              module="Magento_Tax"
              type="flat"
              entity_type="tax_calculation_rate"
-             collection="Magento\Tax\Model\Resource\Calculation\Rate\Collection"
+             collection="Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection"
              identifier="code"
              repository_class="Magento\Tax\Test\Repository\TaxRate"
              handler_interface="Magento\Tax\Test\Handler\TaxRate\TaxRateInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRule.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRule.xml
index 671a12d176951aabdd9ac591c8f464c768360fdb..614738c6404ed3c8813e0e287ef840c3c946fd26 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRule.xml
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Fixture/TaxRule.xml
@@ -10,7 +10,7 @@
              module="Magento_Tax"
              type="flat"
              entity_type="tax_calculation_rule"
-             collection="Magento\Tax\Model\Resource\Calculation\Rule\Collection"
+             collection="Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection"
              identifier="code"
              repository_class="Magento\Tax\Test\Repository\TaxRule"
              handler_interface="Magento\Tax\Test\Handler\TaxRule\TaxRuleInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRateNew.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRateNew.xml
index 0237379975c22bc99ffe1e1be0f486821e03efc7..9940b8cca862f7a0b1c62448bc9cb3bb76c74e89 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRateNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRateNew.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="TaxRateNew" area="Adminhtml" mca="tax/rate/add" module="Magento_Tax">
-    <block name="formPageActions" class="Magento\Tax\Test\Block\Adminhtml\Rate\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="taxRateForm" class="Magento\Tax\Test\Block\Adminhtml\Rate\Edit\Form" locator="#rate-form" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-  </page>
+    <page name="TaxRateNew" area="Adminhtml" mca="tax/rate/add" module="Magento_Tax">
+        <block name="formPageActions" class="Magento\Tax\Test\Block\Adminhtml\Rate\Edit\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="taxRateForm" class="Magento\Tax\Test\Block\Adminhtml\Rate\Edit\Form" locator="#rate-form" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRuleNew.xml b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRuleNew.xml
index 3396503e1d46f35179b27fe6f7f9e39274d3ac8a..3806a2e36a130cd002e0c38914ccc6a12f59786e 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRuleNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/Page/Adminhtml/TaxRuleNew.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="TaxRuleNew" area="Adminhtml" mca="tax/rule/new" module="Magento_Tax">
-    <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="taxRuleForm" class="Magento\Tax\Test\Block\Adminhtml\Rule\Edit\Form" locator="#edit_form" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-  </page>
+    <page name="TaxRuleNew" area="Adminhtml" mca="tax/rule/new" module="Magento_Tax">
+        <block name="formPageActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="taxRuleForm" class="Magento\Tax\Test\Block\Adminhtml\Rule\Edit\Form" locator="#edit_form" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRateEntityTest.php b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRateEntityTest.php
index 4bbdfbe520493e9ce5e1eafb98f0598a2edf5f06..a83bfa60070df51611a05ef74aecb4b16a4e75ca 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRateEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRateEntityTest.php
@@ -81,5 +81,6 @@ class DeleteTaxRateEntityTest extends Injectable
         $this->taxRateIndex->open();
         $this->taxRateIndex->getTaxRateGrid()->searchAndOpen($filter);
         $this->taxRateNew->getFormPageActions()->delete();
+        $this->taxRateNew->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRuleEntityTest.php b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRuleEntityTest.php
index bef4c799b43f3a3603fb29b7706b12def4732cc0..de83384d07acc21f24b4926c4c9a187daf29915f 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRuleEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestCase/DeleteTaxRuleEntityTest.php
@@ -89,5 +89,6 @@ class DeleteTaxRuleEntityTest extends Injectable
         $this->taxRuleIndexPage->open();
         $this->taxRuleIndexPage->getTaxRuleGrid()->searchAndOpen(['code' => $taxRule->getCode()]);
         $this->taxRuleNewPage->getFormPageActions()->delete();
+        $this->taxRuleNewPage->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php b/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php
index d24b2ca4c4de8cd5cb362704b3c78c2ad4905fb4..212d8beabc9568d25cfdabba0a00f75bd4c86e5b 100644
--- a/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php
+++ b/dev/tests/functional/tests/app/Magento/Tax/Test/TestStep/DeleteAllTaxRulesStep.php
@@ -55,6 +55,7 @@ class DeleteAllTaxRulesStep implements TestStepInterface
         while ($this->taxRuleIndexPage->getTaxRuleGrid()->isFirstRowVisible()) {
             $this->taxRuleIndexPage->getTaxRuleGrid()->openFirstRow();
             $this->taxRuleNewPage->getFormPageActions()->delete();
+            $this->taxRuleNewPage->getModalBlock()->acceptAlert();
         }
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
index f8091af4cc497cfc16cbef6222ec0e7e8c00c6d1..5757bf446e6eecf0bf13ea8c2e9253e3166ae137 100644
--- a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/DataGrid.php
@@ -121,6 +121,13 @@ class DataGrid extends Grid
      */
     protected $noRecords = '[class$=no-data]';
 
+    /**
+     * Selector for alert.
+     *
+     * @var string
+     */
+    protected $alertModal = '._show[data-role=modal]';
+
     /**
      * Clear all applied Filters.
      *
@@ -250,7 +257,10 @@ class DataGrid extends Grid
             ->find(sprintf($this->massActionToggleList, $actionType), Locator::SELECTOR_XPATH)
             ->click();
         if ($acceptAlert) {
-            $this->browser->find($this->actionButton)->click();
+            $element = $this->browser->find($this->alertModal);
+            /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+            $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+            $modal->acceptAlert();
         }
     }
 
diff --git a/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
new file mode 100644
index 0000000000000000000000000000000000000000..96ed46ae296cd0ec50cb90259929c9d87d068e5d
--- /dev/null
+++ b/dev/tests/functional/tests/app/Magento/Ui/Test/Block/Adminhtml/Modal.php
@@ -0,0 +1,94 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Ui\Test\Block\Adminhtml;
+
+use Magento\Mtf\Block\Block;
+
+/**
+ * Alert, confirm, prompt block.
+ */
+class Modal extends Block
+{
+    /**
+     * Locator value for accept button.
+     *
+     * @var string
+     */
+    protected $acceptButtonSelector = '.action-accept';
+
+    /**
+     * Locator value for dismiss button.
+     *
+     * @var string
+     */
+    protected $dismissButtonSelector = '.action-dismiss';
+
+    /**
+     * Locator value for close button.
+     *
+     * @var string
+     */
+    protected $closeButtonSelector = '.action-close';
+
+    /**
+     * Locator value for prompt input.
+     *
+     * @var string
+     */
+    protected $inputFieldSelector = '[data-role="promptField"]';
+
+    /**
+     * Press OK on an alert, confirm, prompt a dialog.
+     *
+     * @return void
+     */
+    public function acceptAlert()
+    {
+        $this->_rootElement->find($this->acceptButtonSelector)->click();
+    }
+
+    /**
+     * Press Cancel on an alert, confirm, prompt a dialog.
+     *
+     * @return void
+     */
+    public function dismissAlert()
+    {
+        $this->_rootElement->find($this->dismissButtonSelector)->click();
+    }
+
+    /**
+     * Press Close on an alert, confirm, prompt a dialog.
+     *
+     * @return void
+     */
+    public function closeAlert()
+    {
+        $this->_rootElement->find($this->closeButtonSelector)->click();
+    }
+
+    /**
+     * Get the alert dialog text.
+     *
+     * @return string
+     */
+    public function getAlertText()
+    {
+        return $this->_rootElement->find($this->inputFieldSelector)->getValue();
+    }
+
+    /**
+     * Set the text to a prompt popup.
+     *
+     * @param string $text
+     * @return void
+     */
+    public function setAlertText($text)
+    {
+        $this->_rootElement->find($this->inputFieldSelector)->setValue($text);
+    }
+}
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite.xml b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite.xml
index e2e122faa0a5e179ab42bf2a8d3563160fd16818..14bde8faa6f7115b0b7c390dc148f8c861d64d49 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite.xml
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Fixture/UrlRewrite.xml
@@ -10,7 +10,7 @@
              module="Magento_UrlRewrite"
              type="virtual"
              entity_type="url_rewrite"
-             collection="Magento\UrlRewrite\Model\Resource\UrlRewriteCollection"
+             collection="Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollection"
              identifier="request_path"
              repository_class="Magento\UrlRewrite\Test\Repository\UrlRewrite"
              handler_interface="Magento\UrlRewrite\Test\Handler\UrlRewrite\UrlRewriteInterface"
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Page/Adminhtml/UrlRewriteEdit.xml b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Page/Adminhtml/UrlRewriteEdit.xml
index 77022c54f4f7354855acb5fc1515f866b899faa5..96a0d514a30736d6aadcad8340e921fed9f5fbbb 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Page/Adminhtml/UrlRewriteEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/Page/Adminhtml/UrlRewriteEdit.xml
@@ -6,13 +6,14 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="UrlRewriteEdit" area="Adminhtml" mca="admin/url_rewrite/edit" module="Magento_UrlRewrite">
-    <block name="treeBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Category\Tree" locator="[id='page:main-container']" strategy="css selector"/>
-    <block name="formBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Edit\UrlRewriteForm" locator="[id='page:main-container']" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages .messages" strategy="css selector"/>
-    <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="productGridBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Product\Grid" locator="[id='productGrid']" strategy="css selector"/>
-    <block name="urlRewriteTypeSelectorBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Selector" locator="[data-container-for='entity-type-selector']" strategy="css selector"/>
-    <block name="cmsGridBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Cms\Page\Grid" locator="#cmsPageGrid" strategy="css selector"/>
-  </page>
+    <page name="UrlRewriteEdit" area="Adminhtml" mca="admin/url_rewrite/edit" module="Magento_UrlRewrite">
+        <block name="treeBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Category\Tree" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="formBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Edit\UrlRewriteForm" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages .messages" strategy="css selector"/>
+        <block name="pageMainActions" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="productGridBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Catalog\Product\Grid" locator="[id='productGrid']" strategy="css selector"/>
+        <block name="urlRewriteTypeSelectorBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Selector" locator="[data-container-for='entity-type-selector']" strategy="css selector"/>
+        <block name="cmsGridBlock" class="Magento\UrlRewrite\Test\Block\Adminhtml\Cms\Page\Grid" locator="#cmsPageGrid" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php
index 75365689598a48d2b2d548a4cc9d9c6451b2eab1..a7eebdeae3e29abbb8d58c9a5fa2c1b51b86f9bf 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCategoryUrlRewriteEntityTest.php
@@ -82,5 +82,6 @@ class DeleteCategoryUrlRewriteEntityTest extends Injectable
         }
         $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter);
         $this->urlRewriteEdit->getPageMainActions()->delete();
+        $this->urlRewriteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCustomUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCustomUrlRewriteEntityTest.php
index f5592e87abef014f261c7d6bcaef3f4a6557972c..d34485b7819e70a21a5828890f7bdcfdd5080cc2 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCustomUrlRewriteEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteCustomUrlRewriteEntityTest.php
@@ -78,5 +78,6 @@ class DeleteCustomUrlRewriteEntityTest extends Injectable
         $filter = ['request_path' => $urlRewrite->getRequestPath()];
         $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter);
         $this->urlRewriteEdit->getPageMainActions()->delete();
+        $this->urlRewriteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php
index c668f0512eabda5375eef8fb30e59bc2f203bc1c..5673b0ae5e35c56cb721052e22ad3cdef054a8e7 100644
--- a/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/UrlRewrite/Test/TestCase/DeleteProductUrlRewriteEntityTest.php
@@ -80,5 +80,6 @@ class DeleteProductUrlRewriteEntityTest extends Injectable
         $filter = ['request_path' => $productRedirect->getRequestPath()];
         $this->urlRewriteIndex->getUrlRedirectGrid()->searchAndOpen($filter);
         $this->urlRewriteEdit->getPageMainActions()->delete();
+        $this->urlRewriteEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/User/Edit/PageActions.php b/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/User/Edit/PageActions.php
index c2cf7eaf643955c850940a7b7c78254aa710d881..4c75ccbc6e183f14f614ad94faf2641c600cd5d5 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/User/Edit/PageActions.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Block/Adminhtml/User/Edit/PageActions.php
@@ -21,6 +21,13 @@ class PageActions extends FormPageActions
      */
     protected $forceSignIn = '#invalidate';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Click on 'Force Sign-In' button.
      *
@@ -29,6 +36,9 @@ class PageActions extends FormPageActions
     public function forceSignIn()
     {
         $this->_rootElement->find($this->forceSignIn)->click();
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/Role.xml b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/Role.xml
index a013071cb9c756a33e7557ca5e4d1db50ceb115e..d2f6ee84b919ad81a86d9393ab5ab03f433288b8 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/Role.xml
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/Role.xml
@@ -10,7 +10,7 @@
              module="Magento_User"
              type="flat"
              entity_type="authorization_role"
-             collection="Magento\User\Model\Resource\Role\User\Collection"
+             collection="Magento\User\Model\ResourceModel\Role\User\Collection"
              repository_class="Magento\User\Test\Repository\Role"
              handler_interface="Magento\User\Test\Handler\Role\RoleInterface"
              class="Magento\User\Test\Fixture\Role">
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User.xml b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User.xml
index a6a92e41d6446f218e7aeca63bdf251fcbdae3c1..8f9243ff4bd8e003c9a985df925feff94e6a39b3 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User.xml
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Fixture/User.xml
@@ -10,7 +10,7 @@
              module="Magento_User"
              type="flat"
              entity_type="admin_user"
-             collection="Magento\User\Model\Resource\User\Collection"
+             collection="Magento\User\Model\ResourceModel\User\Collection"
              repository_class="Magento\User\Test\Repository\User"
              handler_interface="Magento\User\Test\Handler\User\UserInterface"
              class="Magento\User\Test\Fixture\User">
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserEdit.xml b/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserEdit.xml
index 63f872991799bd133ff580c0ff246c5023fa420d..67a3334680817155db54376c80d3aba5bbb7dec2 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserEdit.xml
@@ -6,10 +6,11 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="UserEdit" area="Adminhtml" mca="admin/user/edit" module="Magento_User">
-    <block name="pageActions" class="Magento\User\Test\Block\Adminhtml\User\Edit\PageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-    <block name="userForm" class="Magento\User\Test\Block\Adminhtml\User\UserForm" locator="[id='page:main-container']" strategy="css selector"/>
-    <block name="rolesGrid" class="Magento\User\Test\Block\Adminhtml\User\Tab\Role\Grid" locator="[id='permissionsUserRolesGrid']" strategy="css selector"/>
-  </page>
+    <page name="UserEdit" area="Adminhtml" mca="admin/user/edit" module="Magento_User">
+        <block name="pageActions" class="Magento\User\Test\Block\Adminhtml\User\Edit\PageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="userForm" class="Magento\User\Test\Block\Adminhtml\User\UserForm" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="rolesGrid" class="Magento\User\Test\Block\Adminhtml\User\Tab\Role\Grid" locator="[id='permissionsUserRolesGrid']" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserRoleEditRole.xml b/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserRoleEditRole.xml
index 739a150f8a4842f11ff4deeba75ae08e8fb6acc3..4f30dddd026ccb065f3220129f1c136c195fb18c 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserRoleEditRole.xml
+++ b/dev/tests/functional/tests/app/Magento/User/Test/Page/Adminhtml/UserRoleEditRole.xml
@@ -6,9 +6,10 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="UserRoleEditRole" area="Adminhtml" mca="admin/user_role/editrole" module="Magento_User">
-    <block name="pageActions" class="Magento\User\Test\Block\Adminhtml\Role\PageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="roleFormTabs" class="Magento\User\Test\Block\Adminhtml\Role\RoleForm" locator="[id='page:main-container']" strategy="css selector"/>
-    <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
-  </page>
+    <page name="UserRoleEditRole" area="Adminhtml" mca="admin/user_role/editrole" module="Magento_User">
+        <block name="pageActions" class="Magento\User\Test\Block\Adminhtml\Role\PageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="roleFormTabs" class="Magento\User\Test\Block\Adminhtml\Role\RoleForm" locator="[id='page:main-container']" strategy="css selector"/>
+        <block name="messagesBlock" class="Magento\Backend\Test\Block\Messages" locator="#messages" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteAdminUserEntityTest.php b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteAdminUserEntityTest.php
index 662992062276a834232c280958d232c8bfc983fc..0e0c500fc5f125bcdee94ebcbace61ae262b7837 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteAdminUserEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteAdminUserEntityTest.php
@@ -120,6 +120,7 @@ class DeleteAdminUserEntityTest extends Injectable
         $this->userIndex->open();
         $this->userIndex->getUserGrid()->searchAndOpen($filter);
         $this->userEdit->getPageActions()->delete();
+        $this->userEdit->getModalBlock()->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteUserRoleEntityTest.php b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteUserRoleEntityTest.php
index 22421a9557c82e3a7feb4f745ec5c92da61d59ee..8f66d93cc0831c81a4750c7a6503ed13ee810920 100644
--- a/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteUserRoleEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/User/Test/TestCase/DeleteUserRoleEntityTest.php
@@ -122,6 +122,7 @@ class DeleteUserRoleEntityTest extends Injectable
         $this->userRoleIndex->open();
         $this->userRoleIndex->getRoleGrid()->searchAndOpen($filter);
         $this->userRoleEditRole->getPageActions()->delete();
+        $this->userRoleEditRole->getModalBlock()->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php b/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php
index 8fa7f1fc390d3a44fae5e75970962dec1d72711a..fab74ada1dcf7f6031dd7b1b658bbb3cb691d159 100644
--- a/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php
+++ b/dev/tests/functional/tests/app/Magento/Variable/Test/Block/Adminhtml/System/Variable/FormPageActions.php
@@ -35,6 +35,13 @@ class FormPageActions extends AbstractFormPageActions
      */
     protected $storeView = './/*/a[contains(text(),"%s")]';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Select Store View.
      *
@@ -56,7 +63,10 @@ class FormPageActions extends AbstractFormPageActions
         } else {
             throw new \Exception('Store View with name \'' . $storeName . '\' is not visible!');
         }
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
 
         return null;
     }
diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/Fixture/SystemVariable.xml b/dev/tests/functional/tests/app/Magento/Variable/Test/Fixture/SystemVariable.xml
index 6b80268f5032dcdc0cc0a20d34ccb640d327dbbd..e1abed3efc30e56bb0e526aafcc28094932a2272 100644
--- a/dev/tests/functional/tests/app/Magento/Variable/Test/Fixture/SystemVariable.xml
+++ b/dev/tests/functional/tests/app/Magento/Variable/Test/Fixture/SystemVariable.xml
@@ -9,7 +9,7 @@
     <fixture name="systemVariable"
              module="Magento_Variable"
              type="composite"
-             collection="Magento\Variable\Model\Resource\Variable\Collection"
+             collection="Magento\Variable\Model\ResourceModel\Variable\Collection"
              repository_class="Magento\Variable\Test\Repository\SystemVariable"
              handler_interface="Magento\Variable\Test\Handler\SystemVariable\SystemVariableInterface"
              class="Magento\Variable\Test\Fixture\SystemVariable">
diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/Page/Adminhtml/SystemVariableNew.xml b/dev/tests/functional/tests/app/Magento/Variable/Test/Page/Adminhtml/SystemVariableNew.xml
index 1ef12a76ebccb87e88c0a471733b5c256f06f123..294fbe0a1e9760fbdad9c19bc2bce5b082d493f2 100644
--- a/dev/tests/functional/tests/app/Magento/Variable/Test/Page/Adminhtml/SystemVariableNew.xml
+++ b/dev/tests/functional/tests/app/Magento/Variable/Test/Page/Adminhtml/SystemVariableNew.xml
@@ -6,8 +6,9 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../../vendor/magento/mtf/etc/pages.xsd">
-  <page name="SystemVariableNew" area="Adminhtml" mca="admin/system_variable/new" module="Magento_Variable">
-    <block name="formPageActions" class="Magento\Variable\Test\Block\Adminhtml\System\Variable\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
-    <block name="systemVariableForm" class="Magento\Variable\Test\Block\Adminhtml\System\Variable\Edit\VariableForm" locator="#edit_form" strategy="css selector"/>
-  </page>
+    <page name="SystemVariableNew" area="Adminhtml" mca="admin/system_variable/new" module="Magento_Variable">
+        <block name="formPageActions" class="Magento\Variable\Test\Block\Adminhtml\System\Variable\FormPageActions" locator=".page-main-actions" strategy="css selector"/>
+        <block name="systemVariableForm" class="Magento\Variable\Test\Block\Adminhtml\System\Variable\Edit\VariableForm" locator="#edit_form" strategy="css selector"/>
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
+    </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/DeleteCustomVariableEntityTest.php b/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/DeleteCustomVariableEntityTest.php
index 48ae7608c568326d3cd3bcac38a21985d29bed1e..a52fdc02ca3c20d1e168bb144f9533a2995541d6 100644
--- a/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/DeleteCustomVariableEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Variable/Test/TestCase/DeleteCustomVariableEntityTest.php
@@ -80,5 +80,6 @@ class DeleteCustomVariableEntityTest extends Injectable
         $this->systemVariableIndexPage->open();
         $this->systemVariableIndexPage->getSystemVariableGrid()->searchAndOpen($filter);
         $this->systemVariableNewPage->getFormPageActions()->delete();
+        $this->systemVariableNewPage->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/Fixture/Widget.xml b/dev/tests/functional/tests/app/Magento/Widget/Test/Fixture/Widget.xml
index 0680d4c5f386d788d73202a0d453509e7d3209f2..4885e940095cdf6dd5e811e187818208f580c474 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/Fixture/Widget.xml
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/Fixture/Widget.xml
@@ -10,7 +10,7 @@
              module="Magento_Widget"
              type="flat"
              entity_type="widget_instance"
-             collection="Magento\Widget\Model\Resource\Widget\Instance\Collection"
+             collection="Magento\Widget\Model\ResourceModel\Widget\Instance\Collection"
              identifier="parameters"
              repository_class="Magento\Widget\Test\Repository\Widget"
              handler_interface="Magento\Widget\Test\Handler\Widget\WidgetInterface"
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/Page/Adminhtml/WidgetInstanceEdit.xml b/dev/tests/functional/tests/app/Magento/Widget/Test/Page/Adminhtml/WidgetInstanceEdit.xml
index ce17b52e6d47f0ab26bb8146f8f3f0372fa604d6..a91e0a5d3c3e48ee80edefe16ad73fbffb6bb6d4 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/Page/Adminhtml/WidgetInstanceEdit.xml
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/Page/Adminhtml/WidgetInstanceEdit.xml
@@ -10,5 +10,6 @@
         <block name="widgetForm" class="Magento\Widget\Test\Block\Adminhtml\Widget\Instance\Edit\WidgetForm" locator="[id='page:main-container']" strategy="css selector" />
         <block name="pageActionsBlock" class="Magento\Backend\Test\Block\FormPageActions" locator=".page-main-actions" strategy="css selector" />
         <block name="templateBlock" class="Magento\Backend\Test\Block\Template" locator="body" strategy="css selector" />
+        <block name="modalBlock" class="Magento\Ui\Test\Block\Adminhtml\Modal" locator="._show[data-role=modal]" strategy="css selector"/>
     </page>
 </config>
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.php b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.php
index cbcc24d2aaffbfd0b59b4009729641ac756e738b..c17f332131ced87004565d10a18b8381cf4315df 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.php
@@ -11,8 +11,8 @@ use Magento\Widget\Test\Fixture\Widget;
 /**
  * Steps:
  * 1. Login to the backend.
- * 2. Open Content > Frontend Apps.
- * 3. Click Add Frontend App.
+ * 2. Open Content > Widgets.
+ * 3. Click Add Widget.
  * 4. Fill settings data according dataset.
  * 5. Click button Continue.
  * 6. Fill widget data according dataset.
@@ -29,7 +29,7 @@ class CreateWidgetEntityTest extends AbstractCreateWidgetEntityTest
     /* end tags */
 
     /**
-     * Create for New Frontend App.
+     * Create for New Widget.
      *
      * @param Widget $widget
      * @return void
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.xml b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.xml
index c46bc78fda62b210b168c22b4d9c1b02dee53779..44eb1380f7c724137c5507db24870e0e5016c746 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/CreateWidgetEntityTest.xml
@@ -6,7 +6,7 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
-    <testCase name="Magento\Widget\Test\TestCase\CreateWidgetEntityTest" summary="Create Widget (Frontend Apps)" ticketId="MAGETWO-27916">
+    <testCase name="Magento\Widget\Test\TestCase\CreateWidgetEntityTest" summary="Create Widget" ticketId="MAGETWO-27916">
         <variation name="CreateWidgetEntityTestVariation1">
             <data name="widget/data/code" xsi:type="string">CMS Static Block</data>
             <data name="widget/data/theme_id" xsi:type="string">Magento Luma</data>
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.php b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.php
index 29a30c20cbc33d02ff37ab85aa97fc951771b3fa..076cc16f6fef7a43061ca835723389aebb639bb5 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.php
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.php
@@ -17,7 +17,7 @@ use Magento\Mtf\TestCase\Injectable;
  *
  * Steps:
  * 1. Login to backend.
- * 2. Open Content > Frontend Apps.
+ * 2. Open Content > Widgets.
  * 3. Open Widget from preconditions.
  * 4. Delete.
  * 5. Perform all asserts.
@@ -77,5 +77,6 @@ class DeleteWidgetEntityTest extends Injectable
         $this->widgetInstanceIndex->open();
         $this->widgetInstanceIndex->getWidgetGrid()->searchAndOpen($filter);
         $this->widgetInstanceEdit->getPageActionsBlock()->delete();
+        $this->widgetInstanceEdit->getModalBlock()->acceptAlert();
     }
 }
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.xml b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.xml
index 33d8eb778f015117b4868d77846f4b6bebc593ad..8154a74002bbcba855f5191f41965102e38facad 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/DeleteWidgetEntityTest.xml
@@ -6,7 +6,7 @@
  */
  -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
-    <testCase name="Magento\Widget\Test\TestCase\DeleteWidgetEntityTest" summary="Delete Widget (Frontend Apps)" ticketId="MAGETWO-28459">
+    <testCase name="Magento\Widget\Test\TestCase\DeleteWidgetEntityTest" summary="Delete Widget" ticketId="MAGETWO-28459">
         <variation name="DeleteWidgetEntityTestVariation1">
             <data name="widget/dataset" xsi:type="string">default</data>
             <constraint name="Magento\Widget\Test\Constraint\AssertWidgetSuccessDeleteMessage" />
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/NavigateMenuTest.xml b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/NavigateMenuTest.xml
index c8eacf42e80104dfbc358497b2130a3abb01b1fd..1f840318a9a73348d5fc2a13db7cae4c23819e92 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/NavigateMenuTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestCase/NavigateMenuTest.xml
@@ -8,8 +8,8 @@
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../../../../../../vendor/magento/mtf/etc/variations.xsd">
     <testCase name="Magento\Backend\Test\TestCase\NavigateMenuTest">
         <variation name="NavigateMenuTest96">
-            <data name="menuItem" xsi:type="string">Content > Frontend Apps</data>
-            <data name="pageTitle" xsi:type="string">Frontend Apps</data>
+            <data name="menuItem" xsi:type="string">Content > Widgets</data>
+            <data name="pageTitle" xsi:type="string">Widgets</data>
             <constraint name="Magento\Backend\Test\Constraint\AssertBackendPageIsAvailable" />
         </variation>
     </testCase>
diff --git a/dev/tests/functional/tests/app/Magento/Widget/Test/TestStep/DeleteAllWidgetsStep.php b/dev/tests/functional/tests/app/Magento/Widget/Test/TestStep/DeleteAllWidgetsStep.php
index fd5825cb022ec3c7a45323949345efcb467ef580..f3d8184eea17df7a2748b6933b104d034d7423bb 100644
--- a/dev/tests/functional/tests/app/Magento/Widget/Test/TestStep/DeleteAllWidgetsStep.php
+++ b/dev/tests/functional/tests/app/Magento/Widget/Test/TestStep/DeleteAllWidgetsStep.php
@@ -55,6 +55,7 @@ class DeleteAllWidgetsStep implements TestStepInterface
             $this->widgetInstanceIndex->getWidgetGrid()->openFirstRow();
             $this->widgetInstanceEdit->getTemplateBlock()->waitLoader();
             $this->widgetInstanceEdit->getPageActionsBlock()->delete();
+            $this->widgetInstanceEdit->getModalBlock()->acceptAlert();
             $this->widgetInstanceIndex->getSystemMessageDialog()->closePopup();
         }
     }
diff --git a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Adminhtml/Customer/Edit/Tab/Wishlist/Grid.php b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Adminhtml/Customer/Edit/Tab/Wishlist/Grid.php
index e7147535ce163d374438d18904e87cf26202bc9c..a13e0feda852349ec6d3182b80853c5282b41f57 100644
--- a/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Adminhtml/Customer/Edit/Tab/Wishlist/Grid.php
+++ b/dev/tests/functional/tests/app/Magento/Wishlist/Test/Block/Adminhtml/Customer/Edit/Tab/Wishlist/Grid.php
@@ -57,6 +57,13 @@ class Grid extends \Magento\Backend\Test\Block\Widget\Grid
      */
     protected $rowTemplateStrict = 'td[contains(.,normalize-space("%s"))]';
 
+    /**
+     * Selector for confirm.
+     *
+     * @var string
+     */
+    protected $confirmModal = '.confirm._show[data-role=modal]';
+
     /**
      * Delete product
      *
@@ -65,7 +72,10 @@ class Grid extends \Magento\Backend\Test\Block\Widget\Grid
     protected function delete()
     {
         $this->_rootElement->find($this->rowItem . ' ' . $this->deleteLink)->click();
-        $this->browser->acceptAlert();
+        $element = $this->browser->find($this->confirmModal);
+        /** @var \Magento\Ui\Test\Block\Adminhtml\Modal $modal */
+        $modal = $this->blockFactory->create('Magento\Ui\Test\Block\Adminhtml\Modal', ['element' => $element]);
+        $modal->acceptAlert();
     }
 
     /**
diff --git a/dev/tests/integration/etc/di/preferences/ce.php b/dev/tests/integration/etc/di/preferences/ce.php
index 52573b8d3d2891bef95fe7d8606278e54c2410e6..fdf00fa6d59b02c3529babbe44abc54722a3c109 100644
--- a/dev/tests/integration/etc/di/preferences/ce.php
+++ b/dev/tests/integration/etc/di/preferences/ce.php
@@ -14,8 +14,9 @@ return [
     'Magento\Framework\App\Response\Http' => 'Magento\TestFramework\Response',
     'Magento\Framework\Interception\PluginListInterface' =>
         'Magento\TestFramework\Interception\PluginList',
-    'Magento\Framework\Interception\ObjectManager\Config' =>
+    'Magento\Framework\Interception\ObjectManager\Config\Developer' =>
         'Magento\TestFramework\ObjectManager\Config',
     'Magento\Framework\View\LayoutInterface' => 'Magento\TestFramework\View\Layout',
-    'Magento\Framework\App\Resource\ConnectionAdapterInterface' => 'Magento\TestFramework\Db\ConnectionAdapter',
+    'Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface' =>
+        'Magento\TestFramework\Db\ConnectionAdapter',
 ];
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Application.php b/dev/tests/integration/framework/Magento/TestFramework/Application.php
index cddc60e12b3313098902441a995703641c3c79ce..523c4de04e492b3a64d26133a1e4d66ba16122ff 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Application.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Application.php
@@ -367,7 +367,6 @@ class Application
                 'core_app_init_current_store_after' => [
                     'integration_tests' => [
                         'instance' => 'Magento\TestFramework\Event\Magento',
-                        'method' => 'initStoreAfter',
                         'name' => 'integration_tests'
                     ]
                 ]
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Db/ConnectionAdapter.php b/dev/tests/integration/framework/Magento/TestFramework/Db/ConnectionAdapter.php
index 05b61457a6562655bbcd2d11d5100c6a3ae0d48f..7f624342718b7d1004ca98bf065a5de3d75cb8e7 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Db/ConnectionAdapter.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Db/ConnectionAdapter.php
@@ -7,7 +7,7 @@
  */
 namespace Magento\TestFramework\Db;
 
-class ConnectionAdapter extends \Magento\Framework\Model\Resource\Type\Db\Pdo\Mysql
+class ConnectionAdapter extends \Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql
 {
     /**
      * Retrieve DB connection class name
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Db/Sequence.php b/dev/tests/integration/framework/Magento/TestFramework/Db/Sequence.php
index 054fd8bf302ffe3dfc652fbd14581abfb4ef473d..ad4cb3313442e433a181ac55c1c8b8f4f49b4a0d 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Db/Sequence.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Db/Sequence.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\TestFramework\Db;
 
-use Magento\Framework\App\Resource as AppResource;
+use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\Framework\DB\Ddl\Sequence as DdlSequence;
 
 /**
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Db/Sequence/Builder.php b/dev/tests/integration/framework/Magento/TestFramework/Db/Sequence/Builder.php
index 18477c78fafa1ac6f85b0d125550263b116e9f53..774abe3b211a5d077941ff95ef9c3cb8172427ba 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Db/Sequence/Builder.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Db/Sequence/Builder.php
@@ -5,10 +5,10 @@
  */
 namespace Magento\TestFramework\Db\Sequence;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Webapi\Exception;
-use Magento\SalesSequence\Model\Resource\Meta as ResourceMetadata;
-use Magento\Framework\App\Resource as AppResource;
+use Magento\SalesSequence\Model\ResourceModel\Meta as ResourceMetadata;
+use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\Framework\DB\Ddl\Sequence as DdlSequence;
 use Magento\SalesSequence\Model\ProfileFactory;
 use Magento\SalesSequence\Model\MetaFactory;
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Event/Magento.php b/dev/tests/integration/framework/Magento/TestFramework/Event/Magento.php
index 95d35b39eb61bc186d8a44a9e0647e915d86887c..37191d9f51c825e4af31fa805c26b557334eebd9 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Event/Magento.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Event/Magento.php
@@ -6,10 +6,12 @@
 
 namespace Magento\TestFramework\Event;
 
+use Magento\Framework\Event\ObserverInterface;
+
 /**
  * Observer of Magento events triggered using \Magento\TestFramework\EventManager::dispatch()
  */
-class Magento
+class Magento implements ObserverInterface
 {
     /**
      * Used when Magento framework instantiates the class on its own and passes nothing to the constructor
@@ -51,8 +53,10 @@ class Magento
 
     /**
      * Handler for 'core_app_init_current_store_after' event, that converts it into 'initStoreAfter'
+     * @param \Magento\Framework\Event\Observer $observer
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
-    public function initStoreAfter()
+    public function execute(\Magento\Framework\Event\Observer $observer)
     {
         $this->_eventManager->fireEvent('initStoreAfter');
     }
diff --git a/dev/tests/integration/framework/Magento/TestFramework/Event/Transaction.php b/dev/tests/integration/framework/Magento/TestFramework/Event/Transaction.php
index 4d14af503e3ad918053ef03ea8288e744469e2c2..961d8c3204ea97db0c99f9a11aa1b48fcf251fea 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/Event/Transaction.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/Event/Transaction.php
@@ -123,10 +123,11 @@ class Transaction
      * @return \Magento\Framework\DB\Adapter\AdapterInterface|\Magento\TestFramework\Db\Adapter\TransactionInterface
      * @throws \Magento\Framework\Exception\LocalizedException
      */
-    protected function _getConnection($connectionName = \Magento\Framework\App\Resource::DEFAULT_CONNECTION)
+    protected function _getConnection($connectionName = \Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION)
     {
-        /** @var $resource \Magento\Framework\App\Resource */
-        $resource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\App\Resource');
+        /** @var $resource \Magento\Framework\App\ResourceConnection */
+        $resource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
+            ->get('Magento\Framework\App\ResourceConnection');
         return $resource->getConnection($connectionName);
     }
 
diff --git a/dev/tests/integration/framework/Magento/TestFramework/ObjectManager.php b/dev/tests/integration/framework/Magento/TestFramework/ObjectManager.php
index a4a86573f80d02ac9bc6a9c4b32eb7cffa44f2b1..9e75a6bbdf8ed88a742a7b4eb66d0b41bbcf51a7 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/ObjectManager.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/ObjectManager.php
@@ -20,7 +20,7 @@ class ObjectManager extends \Magento\Framework\App\ObjectManager
      * @var array
      */
     protected $persistedInstances = [
-        'Magento\Framework\App\Resource',
+        'Magento\Framework\App\ResourceConnection',
         'Magento\Framework\Config\Scope',
         'Magento\Framework\ObjectManager\RelationsInterface',
         'Magento\Framework\ObjectManager\ConfigInterface',
diff --git a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractIntegrity.php b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractIntegrity.php
index d498f186f05040bd0b55a31a271cc7df8cdae4df..71488dabaa0223c78cf5d60088e2c00b1e9e2b72 100644
--- a/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractIntegrity.php
+++ b/dev/tests/integration/framework/Magento/TestFramework/TestCase/AbstractIntegrity.php
@@ -62,7 +62,7 @@ abstract class AbstractIntegrity extends \PHPUnit_Framework_TestCase
         $themeItems = [];
         /** @var $themeCollection \Magento\Theme\Model\Theme\Collection */
         $themeCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Theme\Model\Resource\Theme\Collection'
+            'Magento\Theme\Model\ResourceModel\Theme\Collection'
         );
         /** @var $theme \Magento\Framework\View\Design\ThemeInterface */
         foreach ($themeCollection as $theme) {
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/MagentoTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/MagentoTest.php
index 119dc7bed56275c1f396628e89705ed99fb15fc1..ca83fe53b581daa291733b020c863a06834af671 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/MagentoTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/Event/MagentoTest.php
@@ -61,6 +61,6 @@ class MagentoTest extends \PHPUnit_Framework_TestCase
     public function testInitStoreAfter()
     {
         $this->_eventManager->expects($this->once())->method('fireEvent')->with('initStoreAfter');
-        $this->_object->initStoreAfter();
+        $this->_object->execute($this->getMock('\Magento\Framework\Event\Observer'));
     }
 }
diff --git a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ObjectManagerTest.php b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ObjectManagerTest.php
index 0e3104c538c1d81439e96358d9ac8dce2ab4a5ea..c41ccea26f4d1319a345681e7a25ff41696e68b1 100644
--- a/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ObjectManagerTest.php
+++ b/dev/tests/integration/framework/tests/unit/testsuite/Magento/Test/ObjectManagerTest.php
@@ -56,6 +56,9 @@ class ObjectManagerTest extends \PHPUnit_Framework_TestCase
             )
         );
 
+        $connectionMock = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
+            ->disableOriginalConstructor()
+            ->getMock();
         $sharedInstances = [
             'Magento\Framework\App\Cache\Type\Config' => $cache,
             'Magento\Framework\App\ObjectManager\ConfigLoader' => $configLoader,
@@ -67,11 +70,9 @@ class ObjectManagerTest extends \PHPUnit_Framework_TestCase
             'Magento\Framework\Config\CacheInterface' => $this->getMock('Magento\Framework\Config\CacheInterface'),
             'Magento\Framework\Cache\FrontendInterface' =>
                 $this->getMock('Magento\Framework\Cache\FrontendInterface'),
-            'Magento\Framework\App\Resource' => $this->getMockBuilder('Magento\Framework\App\Resource')
-                ->disableOriginalConstructor()
-                ->getMock(),
-            'Magento\Framework\App\Resource\Config' => $this->getMock(
-                'Magento\Framework\App\Resource\Config',
+            'Magento\Framework\App\ResourceConnection' => $connectionMock,
+            'Magento\Framework\App\ResourceConnection\Config' => $this->getMock(
+                'Magento\Framework\App\ResourceConnection\Config',
                 [],
                 [],
                 '',
@@ -85,13 +86,13 @@ class ObjectManagerTest extends \PHPUnit_Framework_TestCase
             $primaryLoaderMock
         );
 
-        $model->addSharedInstance($resource, 'Magento\Framework\App\Resource');
+        $model->addSharedInstance($resource, 'Magento\Framework\App\ResourceConnection');
         $instance1 = $model->get('Magento\Framework\DataObject');
 
         $this->assertSame($instance1, $model->get('Magento\Framework\DataObject'));
         $this->assertSame($model, $model->clearCache());
         $this->assertSame($model, $model->get('Magento\Framework\ObjectManagerInterface'));
-        $this->assertSame($resource, $model->get('Magento\Framework\App\Resource'));
+        $this->assertSame($resource, $model->get('Magento\Framework\App\ResourceConnection'));
         $this->assertNotSame($instance1, $model->get('Magento\Framework\DataObject'));
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/AdminNotification/Model/Resource/Inbox/Collection/CriticalTest.php b/dev/tests/integration/testsuite/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/CriticalTest.php
similarity index 72%
rename from dev/tests/integration/testsuite/Magento/AdminNotification/Model/Resource/Inbox/Collection/CriticalTest.php
rename to dev/tests/integration/testsuite/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/CriticalTest.php
index 405cbea8cb30748dafa13bb64b9c4715b2972dc4..081b7430514e012f241ea1cd2ccd85a78d9bc8fc 100644
--- a/dev/tests/integration/testsuite/Magento/AdminNotification/Model/Resource/Inbox/Collection/CriticalTest.php
+++ b/dev/tests/integration/testsuite/Magento/AdminNotification/Model/ResourceModel/Inbox/Collection/CriticalTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\AdminNotification\Model\Resource\Inbox\Collection;
+namespace Magento\AdminNotification\Model\ResourceModel\Inbox\Collection;
 
 class CriticalTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\AdminNotification\Model\Resource\Inbox\Collection\Critical
+     * @var \Magento\AdminNotification\Model\ResourceModel\Inbox\Collection\Critical
      */
     protected $_model;
 
     protected function setUp()
     {
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\AdminNotification\Model\Resource\Inbox\Collection\Critical'
+            'Magento\AdminNotification\Model\ResourceModel\Inbox\Collection\Critical'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Authorization/Model/Resource/Role/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Authorization/Model/ResourceModel/Role/CollectionTest.php
similarity index 88%
rename from dev/tests/integration/testsuite/Magento/Authorization/Model/Resource/Role/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Authorization/Model/ResourceModel/Role/CollectionTest.php
index b7ad3b8d45e8410e74e7a0ed00bdd089a17328e8..d3a1bf838e864866feba424b0eb208cfcc9f32ef 100644
--- a/dev/tests/integration/testsuite/Magento/Authorization/Model/Resource/Role/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Authorization/Model/ResourceModel/Role/CollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Authorization\Model\Resource\Role;
+namespace Magento\Authorization\Model\ResourceModel\Role;
 
 use Magento\Authorization\Model\UserContextInterface;
 
@@ -14,14 +14,14 @@ use Magento\Authorization\Model\UserContextInterface;
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Authorization\Model\Resource\Role\Collection
+     * @var \Magento\Authorization\Model\ResourceModel\Role\Collection
      */
     protected $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Authorization\Model\Resource\Role\Collection'
+            'Magento\Authorization\Model\ResourceModel\Role\Collection'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Authorization/Model/Resource/Role/Grid/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Authorization/Model/ResourceModel/Role/Grid/CollectionTest.php
similarity index 82%
rename from dev/tests/integration/testsuite/Magento/Authorization/Model/Resource/Role/Grid/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Authorization/Model/ResourceModel/Role/Grid/CollectionTest.php
index 640823a17db1d8458688c0a428045ccb50bbe9cf..498ca344e9fbbd78531f0882d64f9503e06404da 100644
--- a/dev/tests/integration/testsuite/Magento/Authorization/Model/Resource/Role/Grid/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Authorization/Model/ResourceModel/Role/Grid/CollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Authorization\Model\Resource\Role\Grid;
+namespace Magento\Authorization\Model\ResourceModel\Role\Grid;
 
 /**
  * @magentoAppArea adminhtml
@@ -11,14 +11,14 @@ namespace Magento\Authorization\Model\Resource\Role\Grid;
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Authorization\Model\Resource\Role\Grid\Collection
+     * @var \Magento\Authorization\Model\ResourceModel\Role\Grid\Collection
      */
     private $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Authorization\Model\Resource\Role\Grid\Collection'
+            'Magento\Authorization\Model\ResourceModel\Role\Grid\Collection'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Authorization/Model/Resource/RoleTest.php b/dev/tests/integration/testsuite/Magento/Authorization/Model/ResourceModel/RoleTest.php
similarity index 86%
rename from dev/tests/integration/testsuite/Magento/Authorization/Model/Resource/RoleTest.php
rename to dev/tests/integration/testsuite/Magento/Authorization/Model/ResourceModel/RoleTest.php
index 358976772d3537977dab4913b117496992753a66..0584519c462f5000ac9528c8589763962de8e474 100644
--- a/dev/tests/integration/testsuite/Magento/Authorization/Model/Resource/RoleTest.php
+++ b/dev/tests/integration/testsuite/Magento/Authorization/Model/ResourceModel/RoleTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Authorization\Model\Resource;
+namespace Magento\Authorization\Model\ResourceModel;
 
 /**
  * Role resource test
@@ -16,7 +16,7 @@ class RoleTest extends \PHPUnit_Framework_TestCase
     {
         $role = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Authorization\Model\Role');
         $roleResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Authorization\Model\Resource\Role'
+            'Magento\Authorization\Model\ResourceModel\Role'
         );
 
         $this->assertEmpty($roleResource->getRoleUsers($role));
diff --git a/dev/tests/integration/testsuite/Magento/Authorization/Model/Resource/Rules/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Authorization/Model/ResourceModel/Rules/CollectionTest.php
similarity index 86%
rename from dev/tests/integration/testsuite/Magento/Authorization/Model/Resource/Rules/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Authorization/Model/ResourceModel/Rules/CollectionTest.php
index 78ce56ca50bb5617b564952485b66c3b3d2b86ef..35cdd384cfb8a6290108aa18fffb23d4e6151681 100644
--- a/dev/tests/integration/testsuite/Magento/Authorization/Model/Resource/Rules/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Authorization/Model/ResourceModel/Rules/CollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Authorization\Model\Resource\Rules;
+namespace Magento\Authorization\Model\ResourceModel\Rules;
 
 /**
  * @magentoAppArea adminhtml
@@ -11,14 +11,14 @@ namespace Magento\Authorization\Model\Resource\Rules;
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Authorization\Model\Resource\Rules\Collection
+     * @var \Magento\Authorization\Model\ResourceModel\Rules\Collection
      */
     protected $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Authorization\Model\Resource\Rules\Collection'
+            'Magento\Authorization\Model\ResourceModel\Rules\Collection'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Bundle/Model/Product/TypeTest.php b/dev/tests/integration/testsuite/Magento/Bundle/Model/Product/TypeTest.php
index d58a2c767a30c3921053836c17e88d3199b345c6..517d560cb55131a9f9cff8d707da3a809782e5cd 100644
--- a/dev/tests/integration/testsuite/Magento/Bundle/Model/Product/TypeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Bundle/Model/Product/TypeTest.php
@@ -24,7 +24,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
     protected $indexer;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $resource;
 
@@ -43,7 +43,7 @@ class TypeTest extends \PHPUnit_Framework_TestCase
         $indexerRegistry = $this->objectManager->create('\Magento\Framework\Indexer\IndexerRegistry');
         $this->indexer =  $indexerRegistry->get('catalogsearch_fulltext');
 
-        $this->resource = $this->objectManager->get('Magento\Framework\App\Resource');
+        $this->resource = $this->objectManager->get('Magento\Framework\App\ResourceConnection');
         $this->connectionMock = $this->resource->getConnection();
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options.php b/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options.php
new file mode 100644
index 0000000000000000000000000000000000000000..b4e01574fae77202e053a134691b32fe96222d4b
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_with_multiple_options.php';
+
+$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php';
+
+$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]);
+$billingAddress->setAddressType('billing');
+
+$shippingAddress = clone $billingAddress;
+$shippingAddress->setId(null)->setAddressType('shipping');
+
+$payment = $objectManager->create('Magento\Sales\Model\Order\Payment');
+$payment->setMethod('checkmo');
+
+/** @var $product \Magento\Catalog\Model\Product */
+$product = $objectManager->create('Magento\Catalog\Model\Product');
+$product->load(3);
+
+/** @var $typeInstance \Magento\Bundle\Model\Product\Type */
+$typeInstance = $product->getTypeInstance();
+$typeInstance->setStoreFilter($product->getStoreId(), $product);
+$optionCollection = $typeInstance->getOptionsCollection($product);
+
+$bundleOptions = [];
+$bundleOptionsQty = [];
+foreach ($optionCollection as $option) {
+    /** @var $option \Magento\Bundle\Model\Option */
+    $selectionsCollection = $typeInstance->getSelectionsCollection([$option->getId()], $product);
+    if ($option->isMultiSelection()) {
+        $bundleOptions[$option->getId()] = array_column($selectionsCollection->toArray(), 'selection_id');
+    } else {
+        $bundleOptions[$option->getId()] = $selectionsCollection->getFirstItem()->getSelectionId();
+    }
+    $bundleOptionsQty[$option->getId()] = 1;
+}
+
+$requestInfo = [
+    'product' => $product->getId(),
+    'bundle_option' => $bundleOptions,
+    'bundle_option_qty' => $bundleOptionsQty,
+    'qty' => 1,
+];
+
+/** @var \Magento\Sales\Model\Order\Item $orderItem */
+$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item');
+$orderItem->setProductId($product->getId());
+$orderItem->setQtyOrdered(1);
+$orderItem->setBasePrice($product->getPrice());
+$orderItem->setPrice($product->getPrice());
+$orderItem->setRowTotal($product->getPrice());
+$orderItem->setProductType($product->getTypeId());
+$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
+
+/** @var \Magento\Sales\Model\Order $order */
+$order = $objectManager->create('Magento\Sales\Model\Order');
+$order->setIncrementId('100000001');
+$order->setState(\Magento\Sales\Model\Order::STATE_NEW);
+$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW));
+$order->setCustomerIsGuest(true);
+$order->setCustomerEmail('customer@null.com');
+$order->setCustomerFirstname('firstname');
+$order->setCustomerLastname('lastname');
+$order->setBillingAddress($billingAddress);
+$order->setShippingAddress($shippingAddress);
+$order->setAddresses([$billingAddress, $shippingAddress]);
+$order->setPayment($payment);
+$order->addItem($orderItem);
+$order->setStoreId($objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId());
+$order->setSubtotal(100);
+$order->setBaseSubtotal(100);
+$order->setBaseGrandTotal(100);
+$order->save();
diff --git a/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options_rollback.php b/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options_rollback.php
new file mode 100644
index 0000000000000000000000000000000000000000..e528be5818b7b2d98f4035f813a7f68b7fd8b039
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Bundle/_files/order_item_with_bundle_and_options_rollback.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_with_multiple_options_rollback.php';
+require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php';
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/FrontTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/FrontTest.php
index c008ac20750a8856a16907ade339460fbc2cf095..909a83d891510c8cd798c0cb3d1dac8d97472833 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/FrontTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Adminhtml/Product/Attribute/Edit/Tab/FrontTest.php
@@ -35,8 +35,8 @@ class FrontTest extends \PHPUnit_Framework_TestCase
      */
     public function testToHtml($attributeCode)
     {
-        /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $model */
-        $model = $this->objectManager->create('Magento\Catalog\Model\Resource\Eav\Attribute');
+        /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $model */
+        $model = $this->objectManager->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
         $model->loadByCode(\Magento\Catalog\Model\Product::ENTITY, $attributeCode);
 
         /** @var \Magento\Framework\Registry $coreRegistry */
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php
index 84d96284b9945e52a6db58b749968bdd7fe7d4d2..2de1875f02cdcd070977f0b5402126fd45b69edd 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ListTest.php
@@ -38,7 +38,7 @@ class ListTest extends \PHPUnit_Framework_TestCase
     {
         $this->_block->setShowRootCategory(true);
         $collection = $this->_block->getLoadedProductCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Product\Collection', $collection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Product\Collection', $collection);
         /* Check that root category was defined for Layer as current */
         $this->assertEquals(2, $this->_block->getLayer()->getCurrentCategory()->getId());
     }
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/NewTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/NewTest.php
index 0801e8bccbcdac6a31dcc23323e075f75a3d6ddb..4e5a3b4250c9c7b3f3c20f63039eecb184aab2f3 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/NewTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/NewTest.php
@@ -109,7 +109,7 @@ class NewTest extends \PHPUnit_Framework_TestCase
         $this->assertNotEmpty($html);
         $this->assertContains('New Product', $html);
         $this->assertInstanceOf(
-            'Magento\Catalog\Model\Resource\Product\Collection',
+            'Magento\Catalog\Model\ResourceModel\Product\Collection',
             $this->_block->getProductCollection()
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/CrosssellTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/CrosssellTest.php
index 61c85378e91d20a53b068e54e8f5837c9630bae8..20024fdb2b58856eb1ac3626a71ada805cbc6a4e 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/CrosssellTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/CrosssellTest.php
@@ -40,6 +40,9 @@ class CrosssellTest extends \PHPUnit_Framework_TestCase
         /* name */
         $this->assertContains('product\/1\/', $html);
         /* part of url */
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Product\Link\Product\Collection', $block->getItems());
+        $this->assertInstanceOf(
+            'Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection',
+            $block->getItems()
+        );
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/RelatedTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/RelatedTest.php
index e2513944894281c6f534414f99ea2976646199c9..12f1f4d14654eb7b7cc7947cd09e3dabd8a7251b 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/RelatedTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Block/Product/ProductList/RelatedTest.php
@@ -36,6 +36,9 @@ class RelatedTest extends \PHPUnit_Framework_TestCase
         /* name */
         $this->assertContains('"product":"1"', $html);
         /* part of url */
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Product\Link\Product\Collection', $block->getItems());
+        $this->assertInstanceOf(
+            'Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection',
+            $block->getItems()
+        );
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
index 94bfe083285eae4f9dbe9af37ad4c6e986bd7d3c..007c4939d78885013937f86f1424a8f2f8ab71e9 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Adminhtml/Product/AttributeTest.php
@@ -170,7 +170,7 @@ class AttributeTest extends \Magento\TestFramework\TestCase\AbstractBackendContr
         $postData = $this->_getAttributeData() + ['attribute_id' => '2'];
         $this->getRequest()->setPostValue($postData);
         $this->dispatch('backend/catalog/product_attribute/save');
-        $model = $this->_objectManager->create('Magento\Catalog\Model\Resource\Eav\Attribute');
+        $model = $this->_objectManager->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
         $model->load($postData['attribute_id']);
         $this->assertNull($model->getData('apply_to'));
     }
@@ -183,8 +183,8 @@ class AttributeTest extends \Magento\TestFramework\TestCase\AbstractBackendContr
         $postData = $this->_getAttributeData() + ['attribute_id' => '1'];
         $this->getRequest()->setPostValue($postData);
         $this->dispatch('backend/catalog/product_attribute/save');
-        /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $model */
-        $model = $this->_objectManager->create('Magento\Catalog\Model\Resource\Eav\Attribute');
+        /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $model */
+        $model = $this->_objectManager->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
         $model->load($postData['attribute_id']);
         $this->assertEquals('simple', $model->getData('apply_to'));
     }
@@ -198,7 +198,7 @@ class AttributeTest extends \Magento\TestFramework\TestCase\AbstractBackendContr
         unset($postData['apply_to']);
         $this->getRequest()->setPostValue($postData);
         $this->dispatch('backend/catalog/product_attribute/save');
-        $model = $this->_objectManager->create('Magento\Catalog\Model\Resource\Eav\Attribute');
+        $model = $this->_objectManager->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
         $model->load($postData['attribute_id']);
         $this->assertEquals(['simple'], $model->getApplyTo());
     }
@@ -210,8 +210,8 @@ class AttributeTest extends \Magento\TestFramework\TestCase\AbstractBackendContr
      */
     public function testSaveActionCleanAttributeLabelCache()
     {
-        /** @var \Magento\Translation\Model\Resource\StringUtils $string */
-        $string = $this->_objectManager->create('Magento\Translation\Model\Resource\StringUtils');
+        /** @var \Magento\Translation\Model\ResourceModel\StringUtils $string */
+        $string = $this->_objectManager->create('Magento\Translation\Model\ResourceModel\StringUtils');
         $this->assertEquals('predefined string translation', $this->_translate('string to translate'));
         $string->saveTranslate('string to translate', 'new string translation');
         $postData = $this->_getAttributeData() + ['attribute_id' => 1];
@@ -248,7 +248,7 @@ class AttributeTest extends \Magento\TestFramework\TestCase\AbstractBackendContr
     protected function _getAttributeData()
     {
         return [
-            'is_global' => \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_STORE,
+            'is_global' => \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_STORE,
             'default_value_text' => '0',
             'default_value_yesno' => '0',
             'default_value_date' => '',
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Product/CompareTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Product/CompareTest.php
index cbbb86dcc3fef14860c8190f3937a1661e600558..d21037c07d13ff825e2f837d3452f23e6125c91a 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Controller/Product/CompareTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Controller/Product/CompareTest.php
@@ -290,9 +290,9 @@ class CompareTest extends \Magento\TestFramework\TestCase\AbstractController
      */
     protected function _assertCompareListEquals(array $expectedProductIds)
     {
-        /** @var $compareItems \Magento\Catalog\Model\Resource\Product\Compare\Item\Collection */
+        /** @var $compareItems \Magento\Catalog\Model\ResourceModel\Product\Compare\Item\Collection */
         $compareItems = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Catalog\Model\Resource\Product\Compare\Item\Collection'
+            'Magento\Catalog\Model\ResourceModel\Product\Compare\Item\Collection'
         );
         $compareItems->useProductItem(true);
         // important
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/CompareTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/CompareTest.php
index 05eae700bea266a105973b7bc4c8c946ccbb257a..60ad12e0a18db9f22a17f250f57df75d1945bfb3 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/CompareTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Helper/Product/CompareTest.php
@@ -81,7 +81,7 @@ class CompareTest extends \PHPUnit_Framework_TestCase
     public function testGetItemCollection()
     {
         $this->assertInstanceOf(
-            'Magento\Catalog\Model\Resource\Product\Compare\Item\Collection',
+            'Magento\Catalog\Model\ResourceModel\Product\Compare\Item\Collection',
             $this->_helper->getItemCollection()
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/AbstractTest.php
index 026e4f09722cc31c062dca66bef7e01c1a063a23..3e43fca70ab858b0afee2998fc6b60840e865ecb 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/AbstractTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/AbstractTest.php
@@ -35,11 +35,11 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
 
         $resourceProperty = new \ReflectionProperty(get_class($this->_model), '_resourceName');
         $resourceProperty->setAccessible(true);
-        $resourceProperty->setValue($this->_model, 'Magento\Catalog\Model\Resource\Product');
+        $resourceProperty->setValue($this->_model, 'Magento\Catalog\Model\ResourceModel\Product');
 
         $collectionProperty = new \ReflectionProperty(get_class($this->_model), '_collectionName');
         $collectionProperty->setAccessible(true);
-        $collectionProperty->setValue($this->_model, 'Magento\Catalog\Model\Resource\Product\Collection');
+        $collectionProperty->setValue($this->_model, 'Magento\Catalog\Model\ResourceModel\Product\Collection');
     }
 
     /**
@@ -112,7 +112,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
     {
         $this->_model->setStoreId(99);
         $collection = $this->_model->getResourceCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Collection\AbstractCollection', $collection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Collection\AbstractCollection', $collection);
         $this->assertEquals(99, $collection->getStoreId());
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/CategoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/CategoryTest.php
index 2eb662d331ffc0a1e6717690ed3a55dc1a5f152b..b5d3e0e7a1cc5b7b09d54b03b576fd51323b5c3c 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/CategoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/CategoryTest.php
@@ -43,14 +43,14 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
     public function testGetTreeModel()
     {
         $model = $this->_model->getTreeModel();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Category\Tree', $model);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Tree', $model);
         $this->assertNotSame($model, $this->_model->getTreeModel());
     }
 
     public function testGetTreeModelInstance()
     {
         $model = $this->_model->getTreeModelInstance();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Category\Tree', $model);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Tree', $model);
         $this->assertSame($model, $this->_model->getTreeModelInstance());
     }
 
@@ -63,7 +63,7 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
     public function testGetProductCollection()
     {
         $collection = $this->_model->getProductCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Product\Collection', $collection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Product\Collection', $collection);
         $this->assertEquals($this->_model->getStoreId(), $collection->getStoreId());
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Category/ProductTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Category/ProductTest.php
index d95e25740a0607a14a8334d7fe49562301ff1746..ac6c6a79899cea59978b597e65545b0d162747e8 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Category/ProductTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Category/ProductTest.php
@@ -22,7 +22,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     protected $indexer;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product
+     * @var \Magento\Catalog\Model\ResourceModel\Product
      */
     protected $productResource;
 
@@ -34,9 +34,9 @@ class ProductTest extends \PHPUnit_Framework_TestCase
         );
         $this->indexer->load('catalog_category_product');
 
-        /** @var \Magento\Catalog\Model\Resource\Product $productResource */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product $productResource */
         $this->productResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
-            'Magento\Catalog\Model\Resource\Product'
+            'Magento\Catalog\Model\ResourceModel\Product'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/FlatTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/FlatTest.php
index 0cd782e244401cc1d0a060e418cb80c7bf442844..6df6b1f6753204ad2ca09516d202832fcc0c167f 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/FlatTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/FlatTest.php
@@ -92,7 +92,7 @@ class FlatTest extends \PHPUnit_Framework_TestCase
         )->load(
             2
         );
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Category\Flat', $category->getResource());
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $category->getResource());
         $this->checkCategoryData($category);
     }
 
@@ -109,7 +109,7 @@ class FlatTest extends \PHPUnit_Framework_TestCase
             2
         );
 
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Category\Flat', $category->getResource());
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $category->getResource());
 
         $result = $category->getAllChildren(true);
         $this->assertNotEmpty($result);
@@ -174,7 +174,7 @@ class FlatTest extends \PHPUnit_Framework_TestCase
             2
         );
 
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Category\Flat', $category->getResource());
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $category->getResource());
 
         $result = $category->getAllChildren(true);
         $this->assertNotEmpty($result);
@@ -188,7 +188,7 @@ class FlatTest extends \PHPUnit_Framework_TestCase
             self::$categoryOne
         );
 
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Category\Flat', $categoryOne->getResource());
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $categoryOne->getResource());
 
         $result = $categoryOne->getAllChildren(true);
         $this->assertNotEmpty($result);
@@ -203,7 +203,7 @@ class FlatTest extends \PHPUnit_Framework_TestCase
             self::$categoryTwo
         );
 
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Category\Flat', $categoryTwo->getResource());
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $categoryTwo->getResource());
 
         $this->assertEquals(self::$categoryOne, $categoryTwo->getParentId());
         $this->checkCategoryData($categoryTwo);
@@ -264,7 +264,7 @@ class FlatTest extends \PHPUnit_Framework_TestCase
             2
         );
 
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Category\Flat', $category->getResource());
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $category->getResource());
 
         $this->checkCategoryData($category);
 
@@ -332,7 +332,7 @@ class FlatTest extends \PHPUnit_Framework_TestCase
             2
         );
 
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Category\Flat', $category->getResource());
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Flat', $category->getResource());
 
         $result = $category->getAllChildren(true);
         $this->assertNotEmpty($result);
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Eav/Action/FullTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Eav/Action/FullTest.php
index 3a2c5f974dff6b4abb748716dc19c4243d3b4a3c..1397f8888bc9cd1a2abeadb7ee6ef5a6c5e68c73 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Eav/Action/FullTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Eav/Action/FullTest.php
@@ -29,7 +29,7 @@ class FullTest extends \PHPUnit_Framework_TestCase
      */
     public function testReindexAll()
     {
-        /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attr **/
+        /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attr **/
         $attr = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Eav\Model\Config')
             ->getAttribute('catalog_product', 'weight');
         $attr->setIsFilterable(1)->save();
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Eav/Action/RowTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Eav/Action/RowTest.php
index ef8c0dd8d39fe7175aebc20c8afbb64a0d2e7965..934877780d1619c48e044fc38949883a42bace8b 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Eav/Action/RowTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Eav/Action/RowTest.php
@@ -17,7 +17,7 @@ class RowTest extends \PHPUnit_Framework_TestCase
      */
     public function testUpdateProduct()
     {
-        /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attr **/
+        /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attr **/
         $attr = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Eav\Model\Config')
             ->getAttribute('catalog_product', 'weight');
         $attr->setIsFilterable(1)->save();
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Eav/Action/RowsTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Eav/Action/RowsTest.php
index 7f16e5eac3c18f456ef8b5e9e0e01bc4af652550..5b42a30c43948b3ae3c2c9ce69e226b2efe85335 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Eav/Action/RowsTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Eav/Action/RowsTest.php
@@ -29,7 +29,7 @@ class RowsTest extends \PHPUnit_Framework_TestCase
      */
     public function testUpdateAttributes()
     {
-        /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attr **/
+        /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attr **/
         $attr = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Eav\Model\Config')
             ->getAttribute('catalog_product', 'weight');
         $attr->setIsFilterable(1)->save();
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/RowTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/RowTest.php
index f45f0cce8e8556a130bca9174282933d5b7015c3..07bb7bde4cc407cd9d7c68fd89612e3801777687 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/RowTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/Action/RowTest.php
@@ -69,7 +69,7 @@ class RowTest extends \Magento\TestFramework\Indexer\TestCase
         $category = $categoryFactory->create()->load(9);
         $layer = $listProduct->getLayer();
         $layer->setCurrentCategory($category);
-        /** @var \Magento\Catalog\Model\Resource\Product\Collection $productCollection */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */
         $productCollection = $layer->getProductCollection();
         $this->assertTrue(
             $productCollection->isEnabledFlat(),
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/ProcessorTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/ProcessorTest.php
index 2eb856f8f8236f39b824ec3f329afc62101c2b62..b013bd695c3c0fa0ffffad2d5c98bf4990731872 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/ProcessorTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Indexer/Product/Flat/ProcessorTest.php
@@ -56,7 +56,7 @@ class ProcessorTest extends \Magento\TestFramework\Indexer\TestCase
             'Magento\Catalog\Model\Product'
         );
 
-        /** @var \Magento\Catalog\Model\Resource\Product $productResource */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product $productResource */
         $productResource = $product->getResource();
         $productResource->getAttribute('sku')->setData('used_for_sort_by', 1)->save();
 
@@ -77,7 +77,7 @@ class ProcessorTest extends \Magento\TestFramework\Indexer\TestCase
             'Magento\Catalog\Model\Product'
         );
 
-        /** @var \Magento\Catalog\Model\Resource\Product $productResource */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product $productResource */
         $productResource = $product->getResource();
         $productResource->getAttribute('media_gallery')->delete();
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/CategoryTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/CategoryTest.php
index 4c2503d20672400989d6fe7c600cc7dd9093912e..f236aa62f3204f07e4fa75fe32b21a7a1edcd730 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/CategoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/CategoryTest.php
@@ -32,9 +32,9 @@ class CategoryTest extends \PHPUnit_Framework_TestCase
 
     public function testGetProductCollection()
     {
-        /** @var $collection \Magento\Catalog\Model\Resource\Product\Collection */
+        /** @var $collection \Magento\Catalog\Model\ResourceModel\Product\Collection */
         $collection = $this->_model->getProductCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Product\Collection', $collection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Product\Collection', $collection);
         $ids = $collection->getAllIds();
         $this->assertContains(1, $ids);
         $this->assertContains(2, $ids);
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/AlgorithmAdvancedTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/AlgorithmAdvancedTest.php
index 1ca22e747cbdc067a30bc4bfe3ee608bd9431133..19bdbf74288e3b8d58c0c2f39e05d2655c2da1cd 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/AlgorithmAdvancedTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/AlgorithmAdvancedTest.php
@@ -46,7 +46,7 @@ class AlgorithmAdvancedTest extends \PHPUnit_Framework_TestCase
      * Prepare price filter model
      *
      * @param \Magento\Catalog\Model\Layer $layer
-     * @param \Magento\Catalog\Model\Resource\Layer\Filter\Price $priceResource
+     * @param \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price $priceResource
      * @param \Magento\TestFramework\Request|null $request
      * @internal param \Magento\CatalogSearch\Model\Price\Interval $interval
      * @return \Magento\Framework\Search\Dynamic\Algorithm
@@ -132,12 +132,12 @@ class AlgorithmAdvancedTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @param $layer
-     * @return \Magento\Catalog\Model\Resource\Layer\Filter\Price
+     * @return \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price
      */
     protected function createPriceResource($layer)
     {
         return Bootstrap::getObjectManager()
-            ->create('Magento\Catalog\Model\Resource\Layer\Filter\Price', ['layer' => $layer]);
+            ->create('Magento\Catalog\Model\ResourceModel\Layer\Filter\Price', ['layer' => $layer]);
     }
 
     /**
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/AlgorithmBaseTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/AlgorithmBaseTest.php
index 3cc8702b4403ccaccd2a5c6fa567684a592ce874..0a04d777cf76b7226e928294cfc5be4c1441fb34 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/AlgorithmBaseTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/AlgorithmBaseTest.php
@@ -29,7 +29,7 @@ class AlgorithmBaseTest extends \PHPUnit_Framework_TestCase
     protected $_filter;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Layer\Filter\Price
+     * @var \Magento\Catalog\Model\ResourceModel\Layer\Filter\Price
      */
     protected $priceResource;
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_advanced_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_advanced_rollback.php
index 66b578d77c9353fb9db991016a2210a6b63a3633..bd55384332dce6dad8038bd447c8ed93319d7527 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_advanced_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_advanced_rollback.php
@@ -27,9 +27,9 @@ foreach ($prices as $price) {
     $lastProductId++;
 }
 
-/** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
+/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
 $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-    ->create('Magento\Catalog\Model\Resource\Category\Collection');
+    ->create('Magento\Catalog\Model\ResourceModel\Category\Collection');
 $collection
     ->addAttributeToFilter('level', 2)
     ->load()
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_base.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_base.php
index 990052de5455996f134cf596d0556fe7d4419071..03f477f6054fd65d9f72254c719d4bae7bed9e84 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_base.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/Price/_files/products_base.php
@@ -64,6 +64,8 @@ foreach ($testCases as $index => $testCase) {
         true
     )->setPosition(
         $position
+    )->setUrlKey(
+        'category_' . $categoryId
     )->save();
 
     foreach ($testCase[0] as $price) {
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/_files/attribute_with_option.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/_files/attribute_with_option.php
index e73c0c2131ef31db30f837d5ad916ba94d31a7c2..5ed6c1ca0856bace1c93e4fa1c7cdabea0da9775 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/_files/attribute_with_option.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/_files/attribute_with_option.php
@@ -7,9 +7,9 @@
 /* Create attribute */
 /** @var $installer \Magento\Catalog\Setup\CategorySetup */
 $installer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Catalog\Setup\CategorySetup');
-/** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $attribute->setData(
     [
@@ -28,9 +28,9 @@ $attribute->save();
 $installer->addAttributeToGroup('catalog_product', 'Default', 'General', $attribute->getId());
 
 /* Create simple products per each option */
-/** @var $options \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection */
+/** @var $options \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection */
 $options = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection'
+    'Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection'
 );
 $options->setAttributeFilter($attribute->getId());
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/_files/attribute_with_option_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/_files/attribute_with_option_rollback.php
index 172ba1389b391a03d3d0da01d79f83e321eb5c29..28e91d97af359003de426bb901dec05fe0262828 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/_files/attribute_with_option_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Layer/Filter/_files/attribute_with_option_rollback.php
@@ -7,16 +7,16 @@
 /* Create attribute */
 /** @var $installer \Magento\Catalog\Setup\CategorySetup */
 $installer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Catalog\Setup\CategorySetup');
-/** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $attribute->loadByCode(\Magento\Catalog\Model\Product::ENTITY, 'attribute_with_option');
 
 /* Delete simple products per each option */
-/** @var $options \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection */
+/** @var $options \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection */
 $options = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection'
+    'Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection'
 );
 $registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\Registry');
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/PriceTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/PriceTest.php
index 7b46196b1238bbf0222c91e084e525f9ea03d557..5a8a484ac6ef31d7d20d101ee772c46517fda0a4 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/PriceTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/Backend/PriceTest.php
@@ -36,12 +36,12 @@ class PriceTest extends \PHPUnit_Framework_TestCase
     {
         /* validate result of setAttribute */
         $this->assertEquals(
-            \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL,
+            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
             $this->_model->getAttribute()->getIsGlobal()
         );
         $this->_model->setScope($this->_model->getAttribute());
         $this->assertEquals(
-            \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_GLOBAL,
+            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_GLOBAL,
             $this->_model->getAttribute()->getIsGlobal()
         );
     }
@@ -53,7 +53,7 @@ class PriceTest extends \PHPUnit_Framework_TestCase
     {
         $this->_model->setScope($this->_model->getAttribute());
         $this->assertEquals(
-            \Magento\Catalog\Model\Resource\Eav\Attribute::SCOPE_WEBSITE,
+            \Magento\Catalog\Model\ResourceModel\Eav\Attribute::SCOPE_WEBSITE,
             $this->_model->getAttribute()->getIsGlobal()
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/create_attribute_service_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/create_attribute_service_rollback.php
index f43c64eb0d557ecd4be2ec47d3030f542d91734f..84ff0d5cd7abe9102ee283c794fe823e5dc07993 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/create_attribute_service_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/create_attribute_service_rollback.php
@@ -10,16 +10,16 @@ $registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Ma
 $registry->unregister('isSecureArea');
 $registry->register('isSecureArea', true);
 
-/** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attribute */
-$attribute = Bootstrap::getObjectManager()->create('Magento\Catalog\Model\Resource\Eav\Attribute');
+/** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
+$attribute = Bootstrap::getObjectManager()->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
 $attribute->loadByCode(4, 'label_attr_code3df4tr3');
 
 if ($attribute->getId()) {
     $attribute->delete();
 }
 
-/** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attribute */
-$attribute = Bootstrap::getObjectManager()->create('Magento\Catalog\Model\Resource\Eav\Attribute');
+/** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
+$attribute = Bootstrap::getObjectManager()->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
 $attribute->loadByCode(4, 'test_attribute_code_l');
 
 if ($attribute->getId()) {
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/select_attribute.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/select_attribute.php
index de15334e9b7e9c7eec87742c17b110006d2d2fa1..16e6accd5bc5a78a18beead33c3fad4235fd8266 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/select_attribute.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/select_attribute.php
@@ -18,9 +18,9 @@ $defaultSet->load($defaultSetId);
 $defaultGroupId = $defaultSet->getDefaultGroupId();
 $optionData = ['value' => ['option_1' => [0 => 'Fixture Option']], 'order' => ['option_1' => 1]];
 
-/** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $attribute->setAttributeCode(
     'select_attribute'
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/select_attribute_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/select_attribute_rollback.php
index 13cd9a64a06fefb427e1f6a5f4f24339f0221019..bba612091fc906354e9768d254ff21330fdbab0d 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/select_attribute_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Attribute/_files/select_attribute_rollback.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-/** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $attribute->load('select_attribute', 'attribute_code');
 if ($attribute->getId()) {
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Type/AbstractTypeTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Type/AbstractTypeTest.php
index 5e6d627eeb3820a4f042f2be248d9e424f250efb..a2d3e14f5bc3d0e3b420f225821e38563a52496e 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Type/AbstractTypeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/Product/Type/AbstractTypeTest.php
@@ -79,7 +79,7 @@ class AbstractTypeTest extends \PHPUnit_Framework_TestCase
         $this->assertArrayHasKey('sku', $attributes);
         $this->assertArrayHasKey('name', $attributes);
         foreach ($attributes as $attribute) {
-            $this->assertInstanceOf('Magento\Catalog\Model\Resource\Eav\Attribute', $attribute);
+            $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Eav\Attribute', $attribute);
         }
         /* possibility of fatal error if passing null instead of product */
     }
@@ -115,7 +115,7 @@ class AbstractTypeTest extends \PHPUnit_Framework_TestCase
 
         $isTypeExists = false;
         foreach ($attributes as $attribute) {
-            $this->assertInstanceOf('Magento\Catalog\Model\Resource\Eav\Attribute', $attribute);
+            $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Eav\Attribute', $attribute);
             $applyTo = $attribute->getApplyTo();
             if (count($applyTo) > 0 && !in_array('simple', $applyTo)) {
                 $isTypeExists = true;
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductExternalTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductExternalTest.php
index 4e6d3a35959746dfd409e5963d11287448dde08a..4e19766ff9a0ae9e0e3b68e8538985381b7bc3dd 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductExternalTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductExternalTest.php
@@ -102,12 +102,12 @@ class ProductExternalTest extends \PHPUnit_Framework_TestCase
     {
         // empty
         $collection = $this->_model->getCategoryCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Category\Collection', $collection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Collection', $collection);
 
         // fixture
         $this->_model->setId(1);
         $fixtureCollection = $this->_model->getCategoryCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Category\Collection', $fixtureCollection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Collection', $fixtureCollection);
         $this->assertNotSame($fixtureCollection, $collection);
         $ids = [];
         foreach ($fixtureCollection as $category) {
@@ -158,11 +158,11 @@ class ProductExternalTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals([], $this->_model->getRelatedProductIds());
 
         $collection = $this->_model->getRelatedProductCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Product\Collection', $collection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Product\Collection', $collection);
         $this->assertSame($this->_model, $collection->getProduct());
 
         $linkCollection = $this->_model->getRelatedLinkCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Product\Link\Collection', $linkCollection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Product\Link\Collection', $linkCollection);
         $this->assertSame($this->_model, $linkCollection->getProduct());
     }
 
@@ -178,11 +178,11 @@ class ProductExternalTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals([], $this->_model->getUpSellProductIds());
 
         $collection = $this->_model->getUpSellProductCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Product\Collection', $collection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Product\Collection', $collection);
         $this->assertSame($this->_model, $collection->getProduct());
 
         $linkCollection = $this->_model->getUpSellLinkCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Product\Link\Collection', $linkCollection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Product\Link\Collection', $linkCollection);
         $this->assertSame($this->_model, $linkCollection->getProduct());
     }
 
@@ -198,11 +198,11 @@ class ProductExternalTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals([], $this->_model->getCrossSellProductIds());
 
         $collection = $this->_model->getCrossSellProductCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Product\Collection', $collection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Product\Collection', $collection);
         $this->assertSame($this->_model, $collection->getProduct());
 
         $linkCollection = $this->_model->getCrossSellLinkCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Product\Link\Collection', $linkCollection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Product\Link\Collection', $linkCollection);
         $this->assertSame($this->_model, $linkCollection->getProduct());
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductGettersTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductGettersTest.php
index 048f4d7af2a3f255d8faad8af25b0b67b36fe9f1..85cd43cd90378b283b3e06dc236a145ee921f541 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductGettersTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ProductGettersTest.php
@@ -32,7 +32,7 @@ class ProductGettersTest extends \PHPUnit_Framework_TestCase
     public function testGetResourceCollection()
     {
         $collection = $this->_model->getResourceCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Product\Collection', $collection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Product\Collection', $collection);
         $this->assertEquals($this->_model->getStoreId(), $collection->getStoreId());
     }
 
@@ -106,7 +106,7 @@ class ProductGettersTest extends \PHPUnit_Framework_TestCase
         $attributes = $this->_model->getAttributes();
         $this->assertArrayHasKey('name', $attributes);
         $this->assertArrayHasKey('sku', $attributes);
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Eav\Attribute', $attributes['sku']);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Eav\Attribute', $attributes['sku']);
     }
 
     /**
@@ -154,7 +154,7 @@ class ProductGettersTest extends \PHPUnit_Framework_TestCase
         $this->assertArrayHasKey('image', $attributes);
         $this->assertArrayHasKey('small_image', $attributes);
         $this->assertArrayHasKey('thumbnail', $attributes);
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Eav\Attribute', $attributes['image']);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Eav\Attribute', $attributes['image']);
     }
 
     public function testGetMediaGalleryImages()
@@ -227,7 +227,7 @@ class ProductGettersTest extends \PHPUnit_Framework_TestCase
     public function testGetProductOptionsCollection()
     {
         $this->assertInstanceOf(
-            'Magento\Catalog\Model\Resource\Product\Option\Collection',
+            'Magento\Catalog\Model\ResourceModel\Product\Option\Collection',
             $this->_model->getProductOptionsCollection()
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/Eav/AttributeTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Eav/AttributeTest.php
similarity index 83%
rename from dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/Eav/AttributeTest.php
rename to dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Eav/AttributeTest.php
index ba64007135a57a9a7ff3282ee63cb1ef98f47273..e0c225ea31fba4666fcde460b01bfb299238bf9e 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/Eav/AttributeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Eav/AttributeTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Eav;
+namespace Magento\Catalog\Model\ResourceModel\Eav;
 
 class AttributeTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     protected $_model;
 
     protected function setUp()
     {
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Catalog\Model\Resource\Eav\Attribute'
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/Product/Indexer/Eav/SourceTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/SourceTest.php
similarity index 82%
rename from dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/Product/Indexer/Eav/SourceTest.php
rename to dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/SourceTest.php
index 99298aba0e67c30232add3cb375385be7f5916e0..e9039de4667257606bc3b9f5286a65e8c3ee68d2 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/Product/Indexer/Eav/SourceTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Product/Indexer/Eav/SourceTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Indexer\Eav;
+namespace Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav;
 
 /**
  * @magentoDataFixture Magento/ConfigurableProduct/_files/product_configurable.php
@@ -11,12 +11,12 @@ namespace Magento\Catalog\Model\Resource\Product\Indexer\Eav;
 class SourceTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Indexer\Eav\Source
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\Source
      */
     protected $source;
 
     /**
-     * @var \Magento\Catalog\Model\Resource\Product
+     * @var \Magento\Catalog\Model\ResourceModel\Product
      */
     protected $productResource;
 
@@ -32,11 +32,11 @@ class SourceTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->source = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Catalog\Model\Resource\Product\Indexer\Eav\Source'
+            'Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav\Source'
         );
 
         $this->productResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
-            'Magento\Catalog\Model\Resource\Product'
+            'Magento\Catalog\Model\ResourceModel\Product'
         );
 
         $this->_eavIndexerProcessor = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
@@ -49,16 +49,16 @@ class SourceTest extends \PHPUnit_Framework_TestCase
      */
     public function testReindexEntitiesForConfigurableProduct()
     {
-        /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attr **/
+        /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attr **/
         $attr = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Eav\Model\Config')
            ->getAttribute('catalog_product', 'test_configurable');
         $attr->setIsFilterable(1)->save();
 
         $this->_eavIndexerProcessor->reindexAll();
 
-        /** @var \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection $options **/
+        /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection $options **/
         $options = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection'
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection'
         );
         $options->setAttributeFilter($attr->getId())->load();
         $optionIds = $options->getAllIds();
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/Product/Link/Product/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Product/Link/Product/CollectionTest.php
similarity index 90%
rename from dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/Product/Link/Product/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Product/Link/Product/CollectionTest.php
index ca86369689a920177064a0acc43568229b355ee0..305f04398966a8eb96506e733201c4f4dfc16cb5 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/Product/Link/Product/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/Product/Link/Product/CollectionTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Catalog\Model\Resource\Product\Link\Product;
+namespace Magento\Catalog\Model\ResourceModel\Product\Link\Product;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Catalog\Model\Resource\Product\Collection
+     * @var \Magento\Catalog\Model\ResourceModel\Product\Collection
      */
     protected $collection;
 
@@ -19,7 +19,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Catalog\Model\Resource\Product\Link\Product\Collection'
+            'Magento\Catalog\Model\ResourceModel\Product\Link\Product\Collection'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/_files/product_simple.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/product_simple.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/_files/product_simple.php
rename to dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/product_simple.php
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/_files/url_rewrites.php b/dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/url_rewrites.php
similarity index 100%
rename from dev/tests/integration/testsuite/Magento/Catalog/Model/Resource/_files/url_rewrites.php
rename to dev/tests/integration/testsuite/Magento/Catalog/Model/ResourceModel/_files/url_rewrites.php
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_image_attribute_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_image_attribute_rollback.php
index c8c8fbfd75de3cace357f189a8597126ea94d638..a65e66258fb059c3600ce87aeec036e2f291c168 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_image_attribute_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/attribute_set_with_image_attribute_rollback.php
@@ -11,8 +11,8 @@ $entityType = $objectManager->create('Magento\Eav\Model\Entity\Type')->loadByCod
 
 // remove attribute
 
-/** @var \Magento\Catalog\Model\Resource\Product\Attribute\Collection $attributeCollection */
-$attributeCollection = $objectManager->create('Magento\Catalog\Model\Resource\Product\Attribute\Collection');
+/** @var \Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection $attributeCollection */
+$attributeCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Attribute\Collection');
 $attributeCollection->setFrontendInputTypeFilter('media_image');
 $attributeCollection->setCodeFilter('funny_image');
 $attributeCollection->setEntityTypeFilter($entityType->getId());
@@ -23,8 +23,8 @@ $attribute->delete();
 
 // remove attribute set
 
-/** @var \Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection $attributeSetCollection */
-$attributeSetCollection = $objectManager->create('Magento\Eav\Model\Resource\Entity\Attribute\Set\Collection');
+/** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection $attributeSetCollection */
+$attributeSetCollection = $objectManager->create('Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\Collection');
 $attributeSetCollection->addFilter('attribute_set_name', 'attribute_set_with_media_attribute');
 $attributeSetCollection->addFilter('entity_type_id', $entityType->getId());
 $attributeSetCollection->setOrder('attribute_set_id'); // descending is default value
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/categories_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/categories_rollback.php
index 6514c5009174dab22b87e136803a3156e169d3a5..50f7f23219bf95776434f2abe4240327de2f1ee3 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/categories_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/categories_rollback.php
@@ -11,12 +11,12 @@ $registry = $objectManager->get('Magento\Framework\Registry');
 $registry->unregister('isSecureArea');
 $registry->register('isSecureArea', true);
 
-/** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
-$collection = $objectManager->create('Magento\Catalog\Model\Resource\Product\Collection');
+/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
+$collection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
 $collection->addAttributeToSelect('id')->load()->delete();
 
-/** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
-$collection = $objectManager->create('Magento\Catalog\Model\Resource\Category\Collection');
+/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
+$collection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Category\Collection');
 $collection
     ->addAttributeToFilter('level', 2)
     ->load()
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/category_attribute.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/category_attribute.php
index d3edcbdb9a2915ae324f78af96970cf7bfc1dcff..3fd65000c91607b240ce2e473510da3288f1b412 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/category_attribute.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/category_attribute.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-/** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attribute */
+/** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-    ->create('Magento\Catalog\Model\Resource\Eav\Attribute');
+    ->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
 $attribute->setAttributeCode('test_attribute_code_666')
     ->setEntityTypeId(3)
     ->setIsGlobal(1);
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/category_attribute_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/category_attribute_rollback.php
index a2c50d0c89481353fef3d74e72b2e124ba6e8db9..b940441d6369867bfeaa2b867f529fdb449eb460 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/category_attribute_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/category_attribute_rollback.php
@@ -10,9 +10,9 @@ $registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Ma
 $registry->unregister('isSecureArea');
 $registry->register('isSecureArea', true);
 
-/** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attribute */
+/** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-    ->create('Magento\Catalog\Model\Resource\Eav\Attribute');
+    ->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
 
 $attribute->loadByCode(3, 'test_attribute_code_666');
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/filterable_attributes.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/filterable_attributes.php
index 40aa646824749a3679742aa18d62d90a6caf2432..f15555b1d28c5fc6268d8d70084398abd22fc263 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/filterable_attributes.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/filterable_attributes.php
@@ -11,9 +11,9 @@ $entityModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->crea
 $entityTypeId = $entityModel->setType(\Magento\Catalog\Model\Product::ENTITY)->getTypeId();
 $groupId = $installer->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
 
-/** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $attribute->setAttributeCode(
     'filterable_attribute_a'
@@ -30,7 +30,7 @@ $attribute->setAttributeCode(
 )->save();
 
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $attribute->setAttributeCode(
     'filterable_attribute_b'
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php
index a85a94dba73bafd9156c38918bda65e3fe3cf893..cd73e3bb11caf2f4193fb76c6283c51dbad7909d 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/indexer_catalog_category_rollback.php
@@ -23,8 +23,8 @@ foreach ($products as $product) {
     }
 }
 
-/** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
-$collection = $objectManager->create('Magento\Catalog\Model\Resource\Category\Collection');
+/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
+$collection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Category\Collection');
 $collection
     ->addAttributeToFilter('level', 2)
     ->load()
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/multiselect_attribute.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/multiselect_attribute.php
index d9fcffa316bd8baec7e270c5b51d7e9614ba6fa0..b87c30697f2c4b1eb4e7711f5d474e4f84258499 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/multiselect_attribute.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/multiselect_attribute.php
@@ -7,9 +7,9 @@
 /* Create attribute */
 /** @var $installer \Magento\Catalog\Setup\CategorySetup */
 $installer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Catalog\Setup\CategorySetup');
-/** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $attribute->setData(
     [
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options.php
new file mode 100644
index 0000000000000000000000000000000000000000..0d4b9ba608adf24f09684176d849cbc349a34d17
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_simple.php';
+
+$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php';
+
+$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]);
+$billingAddress->setAddressType('billing');
+
+$shippingAddress = clone $billingAddress;
+$shippingAddress->setId(null)->setAddressType('shipping');
+
+$payment = $objectManager->create('Magento\Sales\Model\Order\Payment');
+$payment->setMethod('checkmo');
+
+/** @var $product \Magento\Catalog\Model\Product */
+$product = $objectManager->create('Magento\Catalog\Model\Product');
+$product->load(1);
+
+$optionValuesByType = [
+    'field' => 'Test value',
+    'date_time' => [
+        'year' => '2015',
+        'month' => '9',
+        'day' => '9',
+        'hour' => '2',
+        'minute' => '2',
+        'day_part' => 'am',
+        'date_internal' => '',
+    ],
+    'drop_down' => '3-1-select',
+    'radio' => '4-1-radio',
+];
+
+$requestInfo = ['options' => []];
+$productOptions = $product->getOptions();
+foreach ($productOptions as $option) {
+    $requestInfo['options'][$option->getOptionId()] = $optionValuesByType[$option->getType()];
+}
+
+/** @var \Magento\Sales\Model\Order\Item $orderItem */
+$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item');
+$orderItem->setProductId($product->getId());
+$orderItem->setQtyOrdered(1);
+$orderItem->setBasePrice($product->getPrice());
+$orderItem->setPrice($product->getPrice());
+$orderItem->setRowTotal($product->getPrice());
+$orderItem->setProductType($product->getTypeId());
+$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
+
+/** @var \Magento\Sales\Model\Order $order */
+$order = $objectManager->create('Magento\Sales\Model\Order');
+$order->setIncrementId('100000001');
+$order->setState(\Magento\Sales\Model\Order::STATE_NEW);
+$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW));
+$order->setCustomerIsGuest(true);
+$order->setCustomerEmail('customer@null.com');
+$order->setCustomerFirstname('firstname');
+$order->setCustomerLastname('lastname');
+$order->setBillingAddress($billingAddress);
+$order->setShippingAddress($shippingAddress);
+$order->setAddresses([$billingAddress, $shippingAddress]);
+$order->setPayment($payment);
+$order->addItem($orderItem);
+$order->setStoreId($objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId());
+$order->setSubtotal(100);
+$order->setBaseSubtotal(100);
+$order->setBaseGrandTotal(100);
+$order->save();
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options_rollback.php
new file mode 100644
index 0000000000000000000000000000000000000000..dc1ef8a350e6b42cad88a9a371ca2ff8f010579d
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/order_item_with_product_and_custom_options_rollback.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_simple_rollback.php';
+require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php';
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_attribute.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_attribute.php
index 5d7d8a698abd8d248eee00af2bc059bada2887f4..2f60587a8a4fa18e655de6d73f0591fb5cd5a218 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_attribute.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_attribute.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-/** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attribute */
+/** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-    ->create('Magento\Catalog\Model\Resource\Eav\Attribute');
+    ->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
 $attribute->setAttributeCode('test_attribute_code_333')
     ->setEntityTypeId(4)
     ->setIsGlobal(1)
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_attribute_rollback.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_attribute_rollback.php
index 409acf87b677890261a2a3e33a657ba02bfd9fcc..07bc7eb55ca9b21c9fb748d0754c0d1c39428fbf 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_attribute_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_attribute_rollback.php
@@ -10,9 +10,9 @@ $registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Ma
 $registry->unregister('isSecureArea');
 $registry->register('isSecureArea', true);
 
-/** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attribute */
+/** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-    ->create('Magento\Catalog\Model\Resource\Eav\Attribute');
+    ->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
 
 $attribute->loadByCode(4, 'test_attribute_code_333');
 
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_attribute_with_invalid_apply_to.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_attribute_with_invalid_apply_to.php
index 11db97c3f37cee716b3ac6378f835a74231d8d88..4b22a0d6da55bbdd29fc884c3ee3024afcab38d0 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/product_attribute_with_invalid_apply_to.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/product_attribute_with_invalid_apply_to.php
@@ -7,9 +7,9 @@
 /** @var \Magento\Catalog\Setup\CategorySetup $installer */
 $installer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Catalog\Setup\CategorySetup');
 
-/** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $attribute->setData(
     [
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/_files/products_with_multiselect_attribute.php b/dev/tests/integration/testsuite/Magento/Catalog/_files/products_with_multiselect_attribute.php
index 634a5cd6a27a71bd54391c036936f9908bc062d7..51a94e9d654bea5a8b2df658a067e79bfd29bdd4 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/_files/products_with_multiselect_attribute.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/_files/products_with_multiselect_attribute.php
@@ -8,9 +8,9 @@ require __DIR__ . '/multiselect_attribute.php';
 /** @var $installer \Magento\Catalog\Setup\CategorySetup */
 $installer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Catalog\Setup\CategorySetup');
 
-/** @var $options \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection */
+/** @var $options \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection */
 $options = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection'
+    'Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection'
 );
 $options->setAttributeFilter($attribute->getId());
 $optionIds = $options->getAllIds();
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_system.php b/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_system.php
index 9f0cfa001a1cadd864f38e7cd213b00d586a782d..5b5641a286186b04d9630478bf5494ed67804436 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_system.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_system.php
@@ -5,7 +5,7 @@
  */
 
 $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $model->setName('system_attribute')->setId(2)->setEntityTypeId(4)->setIsUserDefined(0);
 $model->save();
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_system_popup.php b/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_system_popup.php
index 1ccf20a673c60d61ccde43ded234c7790653241b..d0bf1f915a0c5507655e7f408c061f6adacef52d 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_system_popup.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_system_popup.php
@@ -5,7 +5,7 @@
  */
 
 $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $model->setName('system_attribute')->setId(5)->setEntityTypeId(4)->setIsUserDefined(0);
 $model->save();
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_system_with_applyto_data.php b/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_system_with_applyto_data.php
index 8ee7df73071d1f11a1a419ef02015a116ce39dc4..0868b315f317ceda62320c3b294c8ff04770edf7 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_system_with_applyto_data.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_system_with_applyto_data.php
@@ -5,7 +5,7 @@
  */
 
 $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $model->setName('system_attribute')->setId(3)->setEntityTypeId(4)->setIsUserDefined(0)->setApplyTo(['simple']);
 $model->save();
diff --git a/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_user_defined.php b/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_user_defined.php
index c234693fcccac5454345bc505ec412e715b79d1a..3fa434d3eca45a24fd444dd8f375a5b7f03e6f94 100644
--- a/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_user_defined.php
+++ b/dev/tests/integration/testsuite/Magento/Catalog/controllers/_files/attribute_user_defined.php
@@ -5,7 +5,7 @@
  */
 
 $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $model->setName('user_attribute')->setId(1)->setEntityTypeId(4)->setIsUserDefined(1);
 $model->save();
diff --git a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractTest.php b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractTest.php
index 8e0235efe0b821778d4f2b53926be0a5b4144c87..862d5d547e3e636e8300087c8fc1be4da35f3d31 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractTest.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogImportExport/Model/Import/Product/Type/AbstractTest.php
@@ -23,9 +23,9 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
         $this->_model = $this->getMockForAbstractClass(
             'Magento\CatalogImportExport\Model\Import\Product\Type\AbstractType',
             [
-                $objectManager->get('Magento\Eav\Model\Resource\Entity\Attribute\Set\CollectionFactory'),
-                $objectManager->get('Magento\Catalog\Model\Resource\Product\Attribute\CollectionFactory'),
-                $objectManager->get('Magento\Framework\App\Resource'),
+                $objectManager->get('Magento\Eav\Model\ResourceModel\Entity\Attribute\Set\CollectionFactory'),
+                $objectManager->get('Magento\Catalog\Model\ResourceModel\Product\Attribute\CollectionFactory'),
+                $objectManager->get('Magento\Framework\App\ResourceConnection'),
                 $params
             ]
         );
diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Config/Backend/ManagestockTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Config/Backend/ManagestockTest.php
index ca00ebb983ff15375659f88fdfe48d9a5ddf97e8..07fcc69d89ca9fae58b1b6e7855aca81c06181de 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Config/Backend/ManagestockTest.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Config/Backend/ManagestockTest.php
@@ -56,7 +56,7 @@ class ManagestockTest extends \PHPUnit_Framework_TestCase
             Bootstrap::getObjectManager()->get('Magento\Framework\App\Config\ScopeConfigInterface'),
             $stockManagement,
             Bootstrap::getObjectManager()->get('Magento\CatalogInventory\Model\Indexer\Stock\Processor'),
-            Bootstrap::getObjectManager()->get('Magento\Config\Model\Resource\Config')
+            Bootstrap::getObjectManager()->get('Magento\Config\Model\ResourceModel\Config')
         );
 
         $manageStock->setPath('cataloginventory/item_options/manage_stock');
diff --git a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Indexer/Stock/Action/RowsTest.php b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Indexer/Stock/Action/RowsTest.php
index b2ec06714c2a0a1e3a3ecd3ebaec1725f3010ad6..4a8191745a03e5afe6f9f92f21bb76fbd18a9af3 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Indexer/Stock/Action/RowsTest.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogInventory/Model/Indexer/Stock/Action/RowsTest.php
@@ -50,9 +50,9 @@ class RowsTest extends \PHPUnit_Framework_TestCase
             'Magento\CatalogInventory\Api\StockItemRepositoryInterface'
         );
 
-        /** @var \Magento\CatalogInventory\Model\Resource\Stock\Item $stockItemResource */
+        /** @var \Magento\CatalogInventory\Model\ResourceModel\Stock\Item $stockItemResource */
         $stockItemResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\CatalogInventory\Model\Resource\Stock\Item'
+            'Magento\CatalogInventory\Model\ResourceModel\Stock\Item'
         );
 
         $stockItem = $stockRegistry->getStockItem(1, 1);
diff --git a/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/BatchIndexTest.php b/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/BatchIndexTest.php
index c7b7f38879fff62de91d8f4e258e1fa366703d6e..b374171f56f2276626921b19dbeaf3e703b5ecd9 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/BatchIndexTest.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/BatchIndexTest.php
@@ -22,13 +22,13 @@ class BatchIndexTest extends \PHPUnit_Framework_TestCase
     protected $product;
 
     /**
-     * @var \Magento\CatalogRule\Model\Resource\Rule
+     * @var \Magento\CatalogRule\Model\ResourceModel\Rule
      */
     protected $resourceRule;
 
     protected function setUp()
     {
-        $this->resourceRule = Bootstrap::getObjectManager()->get('Magento\CatalogRule\Model\Resource\Rule');
+        $this->resourceRule = Bootstrap::getObjectManager()->get('Magento\CatalogRule\Model\ResourceModel\Rule');
         $this->product = Bootstrap::getObjectManager()->get('Magento\Catalog\Model\Product');
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/IndexerBuilderTest.php b/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/IndexerBuilderTest.php
index ad347d5464a305eda52d2c705a25e8bb240e79a4..c21d0e334332994de1e6a1500e15dd1e7ce05773 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/IndexerBuilderTest.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/IndexerBuilderTest.php
@@ -15,7 +15,7 @@ class IndexerBuilderTest extends \PHPUnit_Framework_TestCase
     protected $indexerBuilder;
 
     /**
-     * @var \Magento\CatalogRule\Model\Resource\Rule
+     * @var \Magento\CatalogRule\Model\ResourceModel\Rule
      */
     protected $resourceRule;
 
@@ -37,7 +37,7 @@ class IndexerBuilderTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->indexerBuilder = Bootstrap::getObjectManager()->get('Magento\CatalogRule\Model\Indexer\IndexBuilder');
-        $this->resourceRule = Bootstrap::getObjectManager()->get('Magento\CatalogRule\Model\Resource\Rule');
+        $this->resourceRule = Bootstrap::getObjectManager()->get('Magento\CatalogRule\Model\ResourceModel\Rule');
         $this->product = Bootstrap::getObjectManager()->get('Magento\Catalog\Model\Product');
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/ProductRuleTest.php b/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/ProductRuleTest.php
index 71b8ce0ad73268fbf5d8583bb705df8450560edc..0f6c474214954a0e2567b3dd2906a6ef3fe0dfb9 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/ProductRuleTest.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/ProductRuleTest.php
@@ -14,7 +14,7 @@ use Magento\TestFramework\Helper\Bootstrap;
 class ProductRuleTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\CatalogRule\Model\Resource\Rule
+     * @var \Magento\CatalogRule\Model\ResourceModel\Rule
      */
     protected $resourceRule;
 
@@ -25,7 +25,7 @@ class ProductRuleTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->resourceRule = Bootstrap::getObjectManager()->get('Magento\CatalogRule\Model\Resource\Rule');
+        $this->resourceRule = Bootstrap::getObjectManager()->get('Magento\CatalogRule\Model\ResourceModel\Rule');
         $this->product = Bootstrap::getObjectManager()->get('Magento\Catalog\Model\Product');
 
         Bootstrap::getObjectManager()->get('Magento\CatalogRule\Model\Indexer\Product\ProductRuleProcessor')
diff --git a/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/RuleProductTest.php b/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/RuleProductTest.php
index 8019307038d680f7d03c689b5977da0847164df8..b4e167cc5c3d7f314cbbe4bffdd9f72b7ed7cd27 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/RuleProductTest.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogRule/Model/Indexer/RuleProductTest.php
@@ -19,7 +19,7 @@ class RuleProductTest extends \PHPUnit_Framework_TestCase
     protected $indexBuilder;
 
     /**
-     * @var \Magento\CatalogRule\Model\Resource\Rule
+     * @var \Magento\CatalogRule\Model\ResourceModel\Rule
      */
     protected $resourceRule;
 
@@ -31,7 +31,7 @@ class RuleProductTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->indexBuilder = Bootstrap::getObjectManager()->get('Magento\CatalogRule\Model\Indexer\IndexBuilder');
-        $this->resourceRule = Bootstrap::getObjectManager()->get('Magento\CatalogRule\Model\Resource\Rule');
+        $this->resourceRule = Bootstrap::getObjectManager()->get('Magento\CatalogRule\Model\ResourceModel\Rule');
         $this->product = Bootstrap::getObjectManager()->create('Magento\Catalog\Model\Product');
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/CatalogRule/Model/RuleTest.php b/dev/tests/integration/testsuite/Magento/CatalogRule/Model/RuleTest.php
index cd5ba5c80ed8bece11e7cd405dc19e8471ae029a..40ee3643f05eca2a7e6606d5bd82bcf11b6189b4 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogRule/Model/RuleTest.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogRule/Model/RuleTest.php
@@ -19,7 +19,7 @@ class RuleTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $resourceMock = $this->getMock(
-            'Magento\CatalogRule\Model\Resource\Rule',
+            'Magento\CatalogRule\Model\ResourceModel\Rule',
             ['getIdFieldName', 'getRulesFromProduct'],
             [],
             '',
diff --git a/dev/tests/integration/testsuite/Magento/CatalogRule/_files/attribute.php b/dev/tests/integration/testsuite/Magento/CatalogRule/_files/attribute.php
index a9fe3d15164da1207838af55095265035af3e4d6..56312f9878c66a1421224d98e2ff15aa5ed6ba59 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogRule/_files/attribute.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogRule/_files/attribute.php
@@ -7,9 +7,9 @@
 /** @var \Magento\Catalog\Setup\CategorySetup $installer */
 $installer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Catalog\Setup\CategorySetup');
 
-/** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $attribute->setData(
     [
diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/Advanced/ResultTest.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/Advanced/ResultTest.php
index 56ab521b4fc5f51af1414ed8846c9f4b26575361..c29661ea8ed90aecb3343158e23c071039f8234f 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/Advanced/ResultTest.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/Block/Advanced/ResultTest.php
@@ -79,7 +79,7 @@ class ResultTest extends \PHPUnit_Framework_TestCase
         $this->assertEmpty($childBlock->getCollection());
         $this->_block->setListCollection();
         $this->assertInstanceOf(
-            'Magento\CatalogSearch\Model\Resource\Advanced\Collection',
+            'Magento\CatalogSearch\Model\ResourceModel\Advanced\Collection',
             $childBlock->getCollection()
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php
index baf9ad79545315035b8001f5dc8e13d8b01c11fc..02fbb446d13eb0c9e162f62b48fee3bfd6c595b9 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/Model/Indexer/FulltextTest.php
@@ -6,7 +6,7 @@
 namespace Magento\CatalogSearch\Model\Indexer;
 
 use Magento\Catalog\Model\Product;
-use Magento\CatalogSearch\Model\Resource\Fulltext\Collection;
+use Magento\CatalogSearch\Model\ResourceModel\Fulltext\Collection;
 use Magento\TestFramework\Helper\Bootstrap;
 
 /**
@@ -21,12 +21,12 @@ class FulltextTest extends \PHPUnit_Framework_TestCase
     protected $indexer;
 
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\Engine
+     * @var \Magento\CatalogSearch\Model\ResourceModel\Engine
      */
     protected $engine;
 
     /**
-     * @var \Magento\CatalogSearch\Model\Resource\Fulltext
+     * @var \Magento\CatalogSearch\Model\ResourceModel\Fulltext
      */
     protected $resourceFulltext;
 
@@ -79,11 +79,11 @@ class FulltextTest extends \PHPUnit_Framework_TestCase
         $this->indexer->load('catalogsearch_fulltext');
 
         $this->engine = Bootstrap::getObjectManager()->get(
-            'Magento\CatalogSearch\Model\Resource\Engine'
+            'Magento\CatalogSearch\Model\ResourceModel\Engine'
         );
 
         $this->resourceFulltext = Bootstrap::getObjectManager()->get(
-            'Magento\CatalogSearch\Model\Resource\Fulltext'
+            'Magento\CatalogSearch\Model\ResourceModel\Fulltext'
         );
 
         $this->queryFactory = Bootstrap::getObjectManager()->get(
diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/indexer_fulltext_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/indexer_fulltext_rollback.php
index 69a8a4cf5ae8f9e37c68682b79095ad7c54c0921..13885506533c7ae9705820e298c96cbe2fc5a0c4 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/indexer_fulltext_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/indexer_fulltext_rollback.php
@@ -11,8 +11,8 @@ $registry = $objectManager->get('Magento\Framework\Registry');
 $registry->unregister('isSecureArea');
 $registry->register('isSecureArea', true);
 
-/** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
-$collection = $objectManager->create('Magento\Catalog\Model\Resource\Product\Collection');
+/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
+$collection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
 $collection->addAttributeToSelect('id')->load()->delete();
 
 
diff --git a/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/search_attributes.php b/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/search_attributes.php
index 78056c554ce1a0c27116db861df4899204c32d6f..af25a77a420a74faf401bff36ea3986515b171d2 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/search_attributes.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogSearch/_files/search_attributes.php
@@ -21,9 +21,9 @@ $attributesData = [
 
 foreach ($attributesData as $data) {
 
-    /** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+    /** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
     $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-        'Magento\Catalog\Model\Resource\Eav\Attribute'
+        'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
     );
     $attributeData = array_merge(
         [
diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/categories_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/categories_rollback.php
index 14bfa30d2257496e5c05eb4676bed7eb7494f046..d7f1259f2985b7c10f86b09b32bcf98b84c13fbd 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/categories_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/categories_rollback.php
@@ -11,8 +11,8 @@ $registry = $objectManager->get('Magento\Framework\Registry');
 $registry->unregister('isSecureArea');
 $registry->register('isSecureArea', true);
 
-/** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
-$collection = $objectManager->create('Magento\Catalog\Model\Resource\Category\Collection');
+/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
+$collection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Category\Collection');
 $collection
     ->addAttributeToFilter('level', 2)
     ->load()
diff --git a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/categories_with_products_rollback.php b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/categories_with_products_rollback.php
index 1a4f4c56244a179bd8b7de450314855baeeb100f..311d8885f23710812529857b9e9f32432ab9cd92 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/categories_with_products_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogUrlRewrite/_files/categories_with_products_rollback.php
@@ -8,9 +8,9 @@ $registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Ma
 $registry->unregister('isSecureArea');
 $registry->register('isSecureArea', true);
 
-/** @var $productCollection \Magento\Catalog\Model\Resource\Product\Collection */
+/** @var $productCollection \Magento\Catalog\Model\ResourceModel\Product\Collection */
 $productCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-    ->create('\Magento\Catalog\Model\Resource\Product\Collection');
+    ->create('\Magento\Catalog\Model\ResourceModel\Product\Collection');
 
 $productCollection->load()->delete();
 
diff --git a/dev/tests/integration/testsuite/Magento/CatalogWidget/Model/Rule/Condition/ProductTest.php b/dev/tests/integration/testsuite/Magento/CatalogWidget/Model/Rule/Condition/ProductTest.php
index 1b39285d8027a1c888449e79000862f90c5f8721..de963d28f6914c738b7d32166ea8ba2a3d32fd42 100644
--- a/dev/tests/integration/testsuite/Magento/CatalogWidget/Model/Rule/Condition/ProductTest.php
+++ b/dev/tests/integration/testsuite/Magento/CatalogWidget/Model/Rule/Condition/ProductTest.php
@@ -15,7 +15,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     protected $conditionProduct;
 
     /**
-     * @var \Magento\Framework\ObjectManager
+     * @var \Magento\Framework\ObjectManagerInterface
      */
     protected $objectManager;
 
@@ -42,7 +42,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
 
     public function testAddGlobalAttributeToCollection()
     {
-        $collection = $this->objectManager->create('Magento\Catalog\Model\Resource\Product\Collection');
+        $collection = $this->objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
         $this->conditionProduct->setAttribute('special_price');
         $this->conditionProduct->addToCollection($collection);
         $collectedAttributes = $this->conditionProduct->getRule()->getCollectedAttributes();
@@ -54,7 +54,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
 
     public function testAddNonGlobalAttributeToCollectionNoProducts()
     {
-        $collection = $this->objectManager->create('Magento\Catalog\Model\Resource\Product\Collection');
+        $collection = $this->objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
         $this->conditionProduct->setAttribute('visibility');
         $this->conditionProduct->setOperator('()');
         $this->conditionProduct->setValue('4');
@@ -73,7 +73,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
      */
     public function testAddNonGlobalAttributeToCollection()
     {
-        $collection = $this->objectManager->create('Magento\Catalog\Model\Resource\Product\Collection');
+        $collection = $this->objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
         $this->conditionProduct->setAttribute('visibility');
         $this->conditionProduct->setOperator('()');
         $this->conditionProduct->setValue('4');
diff --git a/dev/tests/integration/testsuite/Magento/Checkout/Block/Onepage/BillingTest.php b/dev/tests/integration/testsuite/Magento/Checkout/Block/Onepage/BillingTest.php
index 84130ab4361c5f98de4e293f68306fb3bb622799..86ac63afe57145019c36e4f111e5e398d0c12260 100644
--- a/dev/tests/integration/testsuite/Magento/Checkout/Block/Onepage/BillingTest.php
+++ b/dev/tests/integration/testsuite/Magento/Checkout/Block/Onepage/BillingTest.php
@@ -47,8 +47,8 @@ class BillingTest extends \PHPUnit_Framework_TestCase
         //fetch sample address
         $address = $this->_addressRepository->getById(self::FIXTURE_ADDRESS_ID);
 
-        /** @var \Magento\Quote\Model\Resource\Quote\Collection $quoteCollection */
-        $quoteCollection = $objectManager->get('Magento\Quote\Model\Resource\Quote\Collection');
+        /** @var \Magento\Quote\Model\ResourceModel\Quote\Collection $quoteCollection */
+        $quoteCollection = $objectManager->get('Magento\Quote\Model\ResourceModel\Quote\Collection');
         /** @var $quote \Magento\Quote\Model\Quote */
         $quote = $quoteCollection->getLastItem();
         $quote->setCustomer($customer);
diff --git a/dev/tests/integration/testsuite/Magento/Checkout/Model/Type/OnepageTest.php b/dev/tests/integration/testsuite/Magento/Checkout/Model/Type/OnepageTest.php
deleted file mode 100644
index 23fe7f6b3ee75dc0caa0bea558f626786c09a45a..0000000000000000000000000000000000000000
--- a/dev/tests/integration/testsuite/Magento/Checkout/Model/Type/OnepageTest.php
+++ /dev/null
@@ -1,560 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Checkout\Model\Type;
-
-use Magento\TestFramework\Helper\Bootstrap;
-
-/**
- * @magentoDataFixture Magento/Checkout/_files/quote_with_product_and_payment.php
- * @magentoAppArea frontend
- */
-class OnepageTest extends \PHPUnit_Framework_TestCase
-{
-    /** @var \Magento\Checkout\Model\Type\Onepage */
-    protected $_model;
-
-    /** @var \Magento\Quote\Model\Quote */
-    protected $_currentQuote;
-
-    protected function setUp()
-    {
-        parent::setUp();
-        $this->_model = Bootstrap::getObjectManager()->create('Magento\Checkout\Model\Type\Onepage');
-        /** @var \Magento\Quote\Model\Resource\Quote\Collection $quoteCollection */
-        $quoteCollection = Bootstrap::getObjectManager()->create('Magento\Quote\Model\Resource\Quote\Collection');
-        /** @var \Magento\Quote\Model\Quote $quote */
-        $this->_currentQuote = $quoteCollection->getLastItem();
-        $this->_model->setQuote($this->_currentQuote);
-    }
-
-    /**
-     * @magentoAppIsolation enabled
-     * @magentoDbIsolation enabled
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     * @magentoDataFixture Magento/Customer/_files/customer_address.php
-     */
-    public function testSaveShippingWithCustomerId()
-    {
-        $this->_currentQuote->setCustomerId(1)->save();
-        $data = [
-            'address_id' => '',
-            'firstname' => 'Joe',
-            'lastname' => 'Black',
-            'company' => 'Lunatis',
-            'street' => ['1100 Parmer', 'ln.'],
-            'city' => 'Austin',
-            'region_id' => '57',
-            'region' => '',
-            'postcode' => '78757',
-            'country_id' => 'US',
-            'telephone' => '(512) 999-9999',
-            'fax' => '',
-            'save_in_address_book' => 1,
-        ];
-        $this->_model->saveShipping($data, 1);
-
-        $address = $this->_currentQuote->getShippingAddress();
-
-        /* Verify that data from Customer Address identified by id=1 is set */
-        $this->assertEquals('John', $address->getFirstname());
-        $this->assertEquals('Smith', $address->getLastname());
-        $this->assertEquals(['Green str, 67'], $address->getStreet());
-        $this->assertEquals('CityM', $address->getCity());
-        $this->assertEquals('Alabama', $address->getRegion());
-        $this->assertEquals(1, $address->getRegionId());
-        $this->assertEquals('75477', $address->getPostcode());
-        $this->assertEquals('US', $address->getCountryId());
-        $this->assertEquals('3468676', $address->getTelephone());
-        $this->assertEquals('customer@example.com', $address->getEmail());
-        $this->assertTrue($address->getCollectShippingRates());
-        $this->assertEquals(1, $address->getCustomerAddressId());
-    }
-
-    /**
-     * @magentoAppIsolation enabled
-     * @magentoDbIsolation enabled
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     * @magentoDataFixture Magento/Customer/_files/customer_address.php
-     */
-    public function testSaveShippingWithData()
-    {
-        $data = [
-            'address_id' => '',
-            'firstname' => 'Joe',
-            'lastname' => 'Black',
-            'company' => 'Lunatis',
-            'street' => ['1100 Parmer', 'ln.'],
-            'city' => 'Austin',
-            'region_id' => '57',
-            'region' => '',
-            'postcode' => '78757',
-            'country_id' => 'US',
-            'telephone' => '(512) 999-9999',
-            'save_in_address_book' => 1,
-        ];
-        $this->_model->saveShipping($data, null);
-
-        $address = $this->_currentQuote->getShippingAddress();
-
-        /* Verify that data from the form is set */
-        $this->assertEquals('Joe', $address->getFirstname());
-        $this->assertEquals('Black', $address->getLastname());
-        $this->assertEquals('Lunatis', $address->getCompany());
-        $this->assertEquals("1100 Parmer\nln.", $address->getData('street'));
-        $this->assertEquals('Austin', $address->getCity());
-        $this->assertEquals('US', $address->getCountryId());
-        $this->assertEquals('Texas', $address->getRegion());
-        $this->assertEquals('57', $address->getRegionId());
-        $this->assertEquals('78757', $address->getPostcode());
-        $this->assertEquals('(512) 999-9999', $address->getTelephone());
-        $this->assertNull($address->getCustomerAddressId());
-    }
-
-    /**
-     * @magentoAppIsolation enabled
-     */
-    public function testSaveOrder()
-    {
-        $this->markTestIncomplete('MAGETWO-31257');
-        $this->_model->saveBilling($this->_getCustomerData(), null);
-        $this->_prepareQuote($this->_getQuote());
-
-        $this->_model->saveOrder();
-
-        /** @var $order \Magento\Sales\Model\Order */
-        $order = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Sales\Model\Order');
-        $order->loadByIncrementId($this->_model->getLastOrderId());
-
-        $this->assertNotEmpty(
-            $this->_model->getQuote()->getShippingAddress()->getCustomerAddressId(),
-            'Quote shipping CustomerAddressId should not be empty'
-        );
-        $this->assertNotEmpty(
-            $this->_model->getQuote()->getBillingAddress()->getCustomerAddressId(),
-            'Quote billing CustomerAddressId should not be empty'
-        );
-
-        $this->assertNotEmpty(
-            $order->getShippingAddress()->getCustomerAddressId(),
-            'Order shipping CustomerAddressId should not be empty'
-        );
-        $this->assertNotEmpty(
-            $order->getBillingAddress()->getCustomerAddressId(),
-            'Order billing CustomerAddressId should not be empty'
-        );
-    }
-
-    /**
-     * @magentoAppIsolation enabled
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     */
-    public function testInitCheckoutNotLoggedIn()
-    {
-        /* The customer session must be cleared before the real test begins. Need to
-           have a customer via the data fixture to actually log out. */
-        /** @var $customerSession \Magento\Customer\Model\Session*/
-        $customerSession = Bootstrap::getObjectManager()->create('Magento\Customer\Model\Session');
-        $customerSession->setCustomerId(1);
-        $customerSession->logout();
-
-        $this->_model->saveBilling($this->_getCustomerData(), null);
-        $this->_prepareQuote($this->_getQuote());
-        $this->assertTrue($this->_model->getCheckout()->getSteps()['shipping']['allow']);
-        $this->assertTrue($this->_model->getCheckout()->getSteps()['billing']['allow']);
-        $this->_model->initCheckout();
-        $this->assertFalse($this->_model->getCheckout()->getSteps()['shipping']['allow']);
-        $this->assertFalse($this->_model->getCheckout()->getSteps()['billing']['allow']);
-        $this->assertNull($this->_model->getQuote()->getCustomer()->getEmail());
-    }
-
-    /**
-     * @magentoAppIsolation enabled
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     */
-    public function testInitCheckoutLoggedIn()
-    {
-        $this->_model->saveBilling($this->_getCustomerData(), null);
-        $this->_prepareQuote($this->_getQuote());
-        $customerIdFromFixture = 1;
-        $emailFromFixture = 'customer@example.com';
-        /** @var $customerSession \Magento\Customer\Model\Session*/
-        $customerSession = Bootstrap::getObjectManager()->create('Magento\Customer\Model\Session');
-        /** @var $customerRepository \Magento\Customer\Api\CustomerRepositoryInterface */
-        $customerRepository = Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Api\CustomerRepositoryInterface'
-        );
-        $customerData = $customerRepository->getById($customerIdFromFixture);
-        $customerSession->setCustomerDataObject($customerData);
-        $this->_model = Bootstrap::getObjectManager()->create(
-            'Magento\Checkout\Model\Type\Onepage',
-            ['customerSession' => $customerSession]
-        );
-        $this->assertTrue($this->_model->getCheckout()->getSteps()['shipping']['allow']);
-        $this->assertTrue($this->_model->getCheckout()->getSteps()['billing']['allow']);
-        $this->_model->initCheckout();
-        $this->assertFalse($this->_model->getCheckout()->getSteps()['shipping']['allow']);
-        //When the user is logged in and for Step billing - allow is not reset to true
-        $this->assertTrue($this->_model->getCheckout()->getSteps()['billing']['allow']);
-        $this->assertEquals($emailFromFixture, $this->_model->getQuote()->getCustomer()->getEmail());
-    }
-
-    /**
-     * New customer, the same address should be used for shipping and billing, it should be persisted to DB.
-     *
-     * @magentoAppIsolation enabled
-     * @magentoDbIsolation enabled
-     */
-    public function testSaveBillingSameAsShipping()
-    {
-        $quote = $this->_model->getQuote();
-
-        /** Preconditions */
-        $customerData = $this->_getCustomerData();
-        $customerAddressId = false;
-        $this->assertEquals(1, $customerData['use_for_shipping'], "Precondition failed: use_for_shipping is invalid");
-        $this->assertEquals(
-            1,
-            $customerData['save_in_address_book'],
-            "Precondition failed: save_in_address_book is invalid"
-        );
-        $this->assertEmpty(
-            $quote->getBillingAddress()->getId(),
-            "Precondition failed: billing address must not be initialized."
-        );
-        $this->assertEmpty(
-            $quote->getShippingAddress()->getId(),
-            "Precondition failed: billing address must not be initialized."
-        );
-
-        /** Execute SUT */
-        $result = $this->_model->saveBilling($customerData, $customerAddressId);
-        $this->assertEquals([], $result, 'Return value is invalid');
-
-        /** Ensure that quote addresses were persisted correctly */
-        $billingAddress = $quote->getBillingAddress();
-        $shippingAddress = $quote->getShippingAddress();
-
-        $quoteAddressFieldsToCheck = [
-            'quote_id' => $quote->getId(),
-            'firstname' => 'John',
-            'lastname' => 'Smith',
-            'email' => 'John.Smith@example.com',
-            'street' => '6131 Monterey Rd, Apt 1',
-            'city' => 'Los Angeles',
-            'postcode' => '90042',
-            'country_id' => 'US',
-            'region_id' => '1',
-            'region' => 'Alabama',
-            'telephone' => '(323) 255-5861',
-            'customer_id' => null,
-            'customer_address_id' => null,
-        ];
-
-        foreach ($quoteAddressFieldsToCheck as $field => $value) {
-            $this->assertEquals($value, $billingAddress->getData($field), "{$field} value is invalid");
-            $this->assertEquals($value, $shippingAddress->getData($field), "{$field} value is invalid");
-        }
-        $this->assertEquals('1', $shippingAddress->getData('same_as_billing'), "same_as_billing value is invalid");
-        $this->assertGreaterThan(0, $shippingAddress->getData('address_id'), "address_id value is invalid");
-        $this->assertGreaterThan(0, $billingAddress->getData('address_id'), "address_id value is invalid");
-        $this->assertEquals(
-            1,
-            $billingAddress->getData('save_in_address_book'),
-            "save_in_address_book value is invalid"
-        );
-        $this->assertEquals(
-            0,
-            $shippingAddress->getData('save_in_address_book'),
-            "As soon as 'same_as_billing' is set to 1, 'save_in_address_book' of shipping should be 0"
-        );
-
-        /** Ensure that customer-related data was ported to quote correctly */
-        $quoteFieldsToCheck = [
-            'customer_firstname' => 'John',
-            'customer_lastname' => 'Smith',
-            'customer_email' => 'John.Smith@example.com',
-        ];
-        foreach ($quoteFieldsToCheck as $field => $value) {
-            $this->assertEquals($value, $quote->getData($field), "{$field} value is set to quote incorrectly.");
-        }
-
-        /** Perform if checkout steps status was correctly updated in session */
-        /** @var \Magento\Checkout\Model\Session $checkoutSession */
-        $checkoutSession = Bootstrap::getObjectManager()->get('Magento\Checkout\Model\Session');
-        $this->assertTrue($checkoutSession->getStepData('billing', 'allow'), 'Billing step should be allowed.');
-        $this->assertTrue($checkoutSession->getStepData('billing', 'complete'), 'Billing step should be completed.');
-        $this->assertTrue($checkoutSession->getStepData('shipping', 'allow'), 'Shipping step should be allowed.');
-    }
-
-    /**
-     * New customer, billing address should not be used as shipping address, it should be persisted to DB.
-     *
-     * @magentoAppIsolation enabled
-     * @magentoDbIsolation enabled
-     */
-    public function testSaveBilling()
-    {
-        $quote = $this->_model->getQuote();
-
-        /** Preconditions */
-        $customerData = $this->_getCustomerData();
-        $customerData['use_for_shipping'] = 0;
-        $customerAddressId = false;
-        $this->assertEquals(
-            1,
-            $customerData['save_in_address_book'],
-            "Precondition failed: save_in_address_book is invalid"
-        );
-        $this->assertEmpty(
-            $quote->getBillingAddress()->getId(),
-            "Precondition failed: billing address must not be initialized."
-        );
-        $this->assertEmpty(
-            $quote->getShippingAddress()->getId(),
-            "Precondition failed: billing address must not be initialized."
-        );
-
-        /** Execute SUT */
-        $result = $this->_model->saveBilling($customerData, $customerAddressId);
-        $this->assertEquals([], $result, 'Return value is invalid');
-
-        /** Ensure that quote addresses were persisted correctly */
-        $billingAddress = $quote->getBillingAddress();
-        $shippingAddress = $quote->getShippingAddress();
-
-        $quoteAddressFieldsToCheck = [
-            'quote_id' => $quote->getId(),
-            'firstname' => 'John',
-            'lastname' => 'Smith',
-            'email' => 'John.Smith@example.com',
-            'street' => '6131 Monterey Rd, Apt 1',
-            'city' => 'Los Angeles',
-            'postcode' => '90042',
-            'country_id' => 'US',
-            'region_id' => '1',
-            'region' => 'Alabama',
-            'telephone' => '(323) 255-5861',
-            'customer_id' => null,
-            'customer_address_id' => null,
-        ];
-
-        foreach ($quoteAddressFieldsToCheck as $field => $value) {
-            $this->assertEquals($value, $billingAddress->getData($field), "{$field} value is invalid");
-        }
-        $this->assertGreaterThan(0, $billingAddress->getData('address_id'), "address_id value is invalid");
-        $this->assertEmpty(
-            $shippingAddress->getData('firstname'),
-            "Shipping address should not be populated with billing address data when 'same_as_billing' is set to 0."
-        );
-        $this->assertEquals(
-            1,
-            $billingAddress->getData('save_in_address_book'),
-            "save_in_address_book value is invalid"
-        );
-
-        /** Ensure that customer-related data was ported to quote correctly */
-        $quoteFieldsToCheck = [
-            'customer_firstname' => 'John',
-            'customer_lastname' => 'Smith',
-            'customer_email' => 'John.Smith@example.com',
-        ];
-        foreach ($quoteFieldsToCheck as $field => $value) {
-            $this->assertEquals($value, $quote->getData($field), "{$field} value is set to quote incorrectly.");
-        }
-
-        /** Perform if checkout steps status was correctly updated in session */
-        /** @var \Magento\Checkout\Model\Session $checkoutSession */
-        $checkoutSession = Bootstrap::getObjectManager()->get('Magento\Checkout\Model\Session');
-        $this->assertTrue($checkoutSession->getStepData('billing', 'allow'), 'Billing step should be allowed.');
-        $this->assertTrue($checkoutSession->getStepData('billing', 'complete'), 'Billing step should be completed.');
-        $this->assertTrue($checkoutSession->getStepData('shipping', 'allow'), 'Shipping step should be allowed.');
-    }
-
-    /**
-     * New address, address data is invalid.
-     */
-    public function testSaveBillingValidationErrorNewAddress()
-    {
-        /** Preconditions */
-        $customerData = $this->_getCustomerData();
-        unset($customerData['firstname']);
-        $customerAddressId = false;
-
-        /** Execute SUT */
-        $result = $this->_model->saveBilling($customerData, $customerAddressId);
-        $validationErrors = [
-            '"First Name" is a required value.',
-            '"First Name" length must be equal or greater than 1 characters.',
-        ];
-        $this->assertEquals(
-            ['error' => 1, 'message' => $validationErrors],
-            $result,
-            'Validation error is invalid.'
-        );
-    }
-
-    /**
-     * Existing address, address data is invalid.
-     *
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     * @magentoDataFixture Magento/Customer/_files/customer_address.php
-     */
-    public function testSaveBillingExistingAddressInvalidData()
-    {
-        /** Preconditions */
-        $addressIdFromFixture = 1;
-        $customerIdFromFixture = 1;
-        $customerData = $this->_getCustomerData();
-        unset($customerData['firstname']);
-        $this->_getQuote()->setCustomerId($customerIdFromFixture);
-
-        /** Execute SUT */
-        /**
-         * If customer address is available, provided customer data is not validated,
-         * that's why no error occurs when invalid data is provided
-         */
-        $result = $this->_model->saveBilling($customerData, $addressIdFromFixture);
-        $this->assertEquals([], $result, 'No errors expected.');
-    }
-
-    /**
-     * Address exists, but it does not belong to the current customer which is set to quote.
-     *
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     * @magentoDataFixture Magento/Customer/_files/customer_address.php
-     */
-    public function testSaveBillingInvalidAddressId()
-    {
-        /** Preconditions */
-        $addressIdFromFixture = 1;
-        $customerData = $this->_getCustomerData();
-        unset($customerData['firstname']);
-        /** Any ID can be used, which is not equal to ID of customer to which current address belongs. */
-        $secondCustomerId = 2;
-        $this->_getQuote()->setCustomerId($secondCustomerId);
-
-        /** Execute SUT */
-        $result = $this->_model->saveBilling($customerData, $addressIdFromFixture);
-        $validationErrors = 'The customer address is not valid.';
-        $this->assertEquals(
-            ['error' => 1, 'message' => $validationErrors],
-            $result,
-            'Validation error is invalid.'
-        );
-    }
-
-    /**
-     * Empty data.
-     */
-    public function testSaveBillingEmptyData()
-    {
-        /** Execute SUT */
-        $customerData = [];
-        $customerAddressId = false;
-        $result = $this->_model->saveBilling($customerData, $customerAddressId);
-        $this->assertEquals(
-            ['error' => -1, 'message' => 'Invalid data'],
-            $result,
-            'Validation error is invalid.'
-        );
-    }
-
-    /**
-     * Address does not exist, but existing email is specified in address data.
-     *
-     * @magentoDataFixture Magento/Customer/_files/customer.php
-     */
-    public function testSaveBillingNewAddressErrorExistingEmail()
-    {
-        /** Preconditions */
-        $customerData = $this->_getCustomerData();
-        $fixtureCustomerEmail = 'customer@example.com';
-        $customerData['email'] = $fixtureCustomerEmail;
-        $customerAddressId = false;
-        $this->_getQuote()->setCheckoutMethod(\Magento\Checkout\Model\Type\Onepage::METHOD_REGISTER);
-
-        /** Execute SUT */
-        $result = $this->_model->saveBilling($customerData, $customerAddressId);
-        $this->assertArrayHasKey('message', $result, 'Error message was expected to be set');
-        $this->assertStringStartsWith(
-            'This email address already belongs to a registered customer.',
-            (string)$result['message'],
-            'Validation error is invalid.'
-        );
-    }
-
-    /**
-     * New address, customer address is invalid (customer validation should fail, not address validation).
-     */
-    public function testSaveBillingInvalidCustomerData()
-    {
-        /** Preconditions */
-        $customerData = $this->_getCustomerData();
-        $customerData['email'] = 'invalidemail';
-        $this->_getQuote()->setCheckoutMethod(\Magento\Checkout\Model\Type\Onepage::METHOD_REGISTER);
-        $customerAddressId = false;
-
-        /** Execute SUT */
-        $result = $this->_model->saveBilling($customerData, $customerAddressId);
-        $validationErrors = '"Email" is not a valid email address.';
-        $this->assertEquals(
-            ['error' => -1, 'message' => $validationErrors],
-            $result,
-            'Validation error is invalid.'
-        );
-    }
-
-    /**
-     * @return \Magento\Quote\Model\Quote
-     */
-    protected function _getQuote()
-    {
-        return $this->_currentQuote;
-    }
-
-    /**
-     * Prepare Quote
-     *
-     * @param \Magento\Quote\Model\Quote $quote
-     */
-    protected function _prepareQuote($quote)
-    {
-        /** @var $rate \Magento\Quote\Model\Quote\Address\Rate */
-        $rate = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Quote\Model\Quote\Address\Rate'
-        );
-        $rate->setCode('freeshipping_freeshipping');
-        $rate->getPrice(1);
-
-        $quote->getShippingAddress()->setShippingMethod('freeshipping_freeshipping');
-        $quote->getShippingAddress()->addShippingRate($rate);
-        $quote->setCheckoutMethod(\Magento\Checkout\Model\Type\Onepage::METHOD_REGISTER);
-    }
-
-    /**
-     * Customer data for quote
-     *
-     * @return array
-     */
-    protected function _getCustomerData()
-    {
-        return [
-            'firstname' => 'John',
-            'lastname' => 'Smith',
-            'email' => 'John.Smith@example.com',
-            'street' => ['6131 Monterey Rd, Apt 1', ''],
-            'city' => 'Los Angeles',
-            'postcode' => '90042',
-            'country_id' => 'US',
-            'region_id' => '1',
-            'telephone' => '(323) 255-5861',
-            'customer_password' => 'password',
-            'confirm_password' => 'password',
-            'save_in_address_book' => '1',
-            'use_for_shipping' => '1'
-        ];
-    }
-}
diff --git a/dev/tests/integration/testsuite/Magento/Checkout/_files/quote_with_downloadable_product.php b/dev/tests/integration/testsuite/Magento/Checkout/_files/quote_with_downloadable_product.php
index c32809da7a44163ff8550a812e0809756cc820af..fcc7c2cc98b46622a0a23f7f0e1b8d70041e4a1f 100644
--- a/dev/tests/integration/testsuite/Magento/Checkout/_files/quote_with_downloadable_product.php
+++ b/dev/tests/integration/testsuite/Magento/Checkout/_files/quote_with_downloadable_product.php
@@ -10,7 +10,7 @@ require __DIR__ . '/../../../Magento/Downloadable/_files/product_downloadable.ph
 $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Catalog\Model\Product');
 $product->load(1);
 
-/** @var $linkCollection \Magento\Downloadable\Model\Resource\Link\Collection */
+/** @var $linkCollection \Magento\Downloadable\Model\ResourceModel\Link\Collection */
 $linkCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
     'Magento\Downloadable\Model\Link'
 )->getCollection()->addProductToFilter(
diff --git a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/FormTest.php b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/FormTest.php
index cc545e0b5537bd4025c7fa2aba8f0113d49cb51b..d1bd13f74a1885c3289c8673beb0cb2691203f28 100644
--- a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/FormTest.php
+++ b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/FormTest.php
@@ -75,19 +75,21 @@ class FormTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @covers \Magento\Config\Block\System\Config\Form::initFields
-     * @param bool $useConfigField uses the test_field_use_config field if true
+     * @param string $fieldId uses the test_field_use_config field if true
      * @param bool $isConfigDataEmpty if the config data array should be empty or not
-     * @param $configDataValue the value that the field path should be set to in the config data
+     * @param string $configDataValue The value that the field path should be set to in the config data
+     * @param int $valueSelCtr Number of time that value is selected
      * @param bool $expectedUseDefault
      * @dataProvider initFieldsUseDefaultCheckboxDataProvider
      */
     public function testInitFieldsUseDefaultCheckbox(
-        $useConfigField,
+        $fieldId,
         $isConfigDataEmpty,
         $configDataValue,
-        $expectedUseDefault
+        $expectedUseDefault,
+        $valueSelCtr = 1
     ) {
-        $this->_setupFieldsInheritCheckbox($useConfigField, $isConfigDataEmpty, $configDataValue);
+        $this->_setupFieldsInheritCheckbox($fieldId, $isConfigDataEmpty, $configDataValue);
 
         \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
             'Magento\Framework\Config\ScopeInterface'
@@ -126,12 +128,17 @@ class FormTest extends \PHPUnit_Framework_TestCase
         $fieldsetHtml = $fieldset->getElementHtml();
 
         $this->assertSelectCount($fieldsetSel, true, $fieldsetHtml, 'Fieldset HTML is invalid');
-        $this->assertSelectCount($valueSel, true, $fieldsetHtml, 'Field input not found in fieldset HTML');
+        $this->assertSelectCount(
+            $valueSel,
+            $valueSelCtr,
+            $fieldsetHtml,
+            'Field input should appear ' . $valueSelCtr . ' times in fieldset HTML'
+        );
         $this->assertSelectCount(
             $useDefaultSel,
-            true,
+            $valueSelCtr,
             $fieldsetHtml,
-            '"Use Default" checkbox not found in fieldset HTML'
+            '"Use Default" checkbox should appear' . $valueSelCtr . ' times  in fieldset HTML.'
         );
 
         if ($expectedUseDefault) {
@@ -159,25 +166,27 @@ class FormTest extends \PHPUnit_Framework_TestCase
     public static function initFieldsUseDefaultCheckboxDataProvider()
     {
         return [
-            [false, true, null, true],
-            [false, false, null, false],
-            [false, false, '', false],
-            [false, false, 'value', false],
-            [true, false, 'config value', false]
+            ['test_field', true, null, true],
+            ['test_field', false, null, false],
+            ['test_field', false, '', false],
+            ['test_field', false, 'value', false],
+            ['test_field_use_config_module_1', false, 'config value', false],
+            ['test_field_use_config_module_0', false, 'config value', false, 0],
         ];
     }
 
     /**
      * @covers \Magento\Config\Block\System\Config\Form::initFields
-     * @param bool $useConfigField uses the test_field_use_config field if true
+     * @param string $fieldId uses the test_field_use_config field if true
      * @param bool $isConfigDataEmpty if the config data array should be empty or not
-     * @param $configDataValue the value that the field path should be set to in the config data
+     * @param string $configDataValue Value that the field path should be set to in the config data
+     * @param int $valueSelCtr Number of time that value is selected
      * @dataProvider initFieldsUseConfigPathDataProvider
      * @magentoConfigFixture default/test_config_section/test_group_config_node/test_field_value config value
      */
-    public function testInitFieldsUseConfigPath($useConfigField, $isConfigDataEmpty, $configDataValue)
+    public function testInitFieldsUseConfigPath($fieldId, $isConfigDataEmpty, $configDataValue, $valueSelCtr = 1)
     {
-        $this->_setupFieldsInheritCheckbox($useConfigField, $isConfigDataEmpty, $configDataValue);
+        $this->_setupFieldsInheritCheckbox($fieldId, $isConfigDataEmpty, $configDataValue);
 
         \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
             'Magento\Framework\Config\ScopeInterface'
@@ -208,7 +217,12 @@ class FormTest extends \PHPUnit_Framework_TestCase
         $fieldsetHtml = $fieldset->getElementHtml();
 
         $this->assertSelectCount($fieldsetSel, true, $fieldsetHtml, 'Fieldset HTML is invalid');
-        $this->assertSelectCount($valueSel, true, $fieldsetHtml, 'Field input not found in fieldset HTML');
+        $this->assertSelectCount(
+            $valueSel,
+            $valueSelCtr,
+            $fieldsetHtml,
+            'Field input should appear ' . $valueSelCtr . ' times in fieldset HTML'
+        );
     }
 
     /**
@@ -217,20 +231,21 @@ class FormTest extends \PHPUnit_Framework_TestCase
     public static function initFieldsUseConfigPathDataProvider()
     {
         return [
-            [false, true, null],
-            [false, false, null],
-            [false, false, ''],
-            [false, false, 'value'],
-            [true, false, 'config value']
+            ['test_field', true, null],
+            ['test_field', false, null],
+            ['test_field', false, ''],
+            ['test_field', false, 'value'],
+            ['test_field_use_config_module_1', false, 'config value'],
+            ['test_field_use_config_module_0', false, 'config value', 0]
         ];
     }
 
     /**
-     * @param bool $useConfigField uses the test_field_use_config field if true
+     * @param string $fieldId uses the test_field_use_config field if true
      * @param bool $isConfigDataEmpty if the config data array should be empty or not
-     * @param $configDataValue the value that the field path should be set to in the config data
+     * @param string $configDataValue the value that the field path should be set to in the config data
      */
-    protected function _setupFieldsInheritCheckbox($useConfigField, $isConfigDataEmpty, $configDataValue)
+    protected function _setupFieldsInheritCheckbox($fieldId, $isConfigDataEmpty, $configDataValue)
     {
         \Magento\TestFramework\Helper\Bootstrap::getInstance()->reinitialize([
             State::PARAM_BAN_CACHE => true,
@@ -273,11 +288,8 @@ class FormTest extends \PHPUnit_Framework_TestCase
 
         $this->_group = $structure->getElement('test_section/test_group');
 
-        if ($useConfigField) {
-            $this->_field = $structure->getElement('test_section/test_group/test_field_use_config');
-        } else {
-            $this->_field = $structure->getElement('test_section/test_group/test_field');
-        }
+        $this->_field = $structure->getElement('test_section/test_group/' . $fieldId);
+
         $fieldPath = $this->_field->getConfigPath();
 
         if ($isConfigDataEmpty) {
diff --git a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_section_config.xml b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_section_config.xml
index 072e1921a23e5b855d183235bf5192b5e3531b64..d584ff2a9f445ef867e1e6728a6df4eb6702bb3d 100644
--- a/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_section_config.xml
+++ b/dev/tests/integration/testsuite/Magento/Config/Block/System/Config/_files/test_section_config.xml
@@ -20,9 +20,15 @@
                     <label>Test Field</label>
                     <config_path>test_section/test_group/test_field</config_path>
                 </field>
-                <field id="test_field_use_config" translate="label comment" showInDefault="1" showInWebsite="1" showInStore="1" type="text" sortOrder="20">
+                <field id="test_field_use_config_module_1" translate="label comment" showInDefault="1" showInWebsite="1" showInStore="1" type="text" sortOrder="20">
                     <label>Test Field</label>
                     <config_path>test_config_section/test_group_config_node/test_field_value</config_path>
+                    <if_module_enabled>Magento_Config</if_module_enabled>
+                </field>
+                <field id="test_field_use_config_module_0" translate="label comment" showInDefault="1" showInWebsite="1" showInStore="1" type="text" sortOrder="20">
+                    <label>Test Field</label>
+                    <config_path>test_config_section/test_group_config_node/test_field_value</config_path>
+                    <if_module_enabled>Test_Module</if_module_enabled>
                 </field>
             </group>
         </section>
diff --git a/dev/tests/integration/testsuite/Magento/Config/Model/Resource/ConfigTest.php b/dev/tests/integration/testsuite/Magento/Config/Model/ResourceModel/ConfigTest.php
similarity index 84%
rename from dev/tests/integration/testsuite/Magento/Config/Model/Resource/ConfigTest.php
rename to dev/tests/integration/testsuite/Magento/Config/Model/ResourceModel/ConfigTest.php
index 23a2435bc5108d2bb25e0b103ecb4d04cb179ac1..836fbed59e443eb3dae1ad015b580178c0c5f8a0 100644
--- a/dev/tests/integration/testsuite/Magento/Config/Model/Resource/ConfigTest.php
+++ b/dev/tests/integration/testsuite/Magento/Config/Model/ResourceModel/ConfigTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Config\Model\Resource;
+namespace Magento\Config\Model\ResourceModel;
 
 class ConfigTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Config\Model\Resource\Config
+     * @var \Magento\Config\Model\ResourceModel\Config
      */
     protected $_model;
 
     protected function setUp()
     {
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Config\Model\Resource\Config'
+            'Magento\Config\Model\ResourceModel\Config'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Block/Product/View/Type/ConfigurableTest.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Block/Product/View/Type/ConfigurableTest.php
index 9fbf676b355ed107dcb1db23c847ff5499643e04..c33e7d4f11774faaedc66355a193ed2eb4e771f5 100644
--- a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Block/Product/View/Type/ConfigurableTest.php
+++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Block/Product/View/Type/ConfigurableTest.php
@@ -44,7 +44,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
     {
         $attributes = $this->_block->getAllowAttributes();
         $this->assertInstanceOf(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\Collection',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection',
             $attributes
         );
         $this->assertGreaterThanOrEqual(1, $attributes->getSize());
diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Model/Product/Type/ConfigurableTest.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Model/Product/Type/ConfigurableTest.php
index c7654467375009bc0d36243fc5479b20fa3c3fd2..29159ada9e96320ffecb7cf730c083c278c92856 100644
--- a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Model/Product/Type/ConfigurableTest.php
+++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/Model/Product/Type/ConfigurableTest.php
@@ -102,7 +102,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
     {
         $collection = $this->_model->getConfigurableAttributes($this->_product);
         $this->assertInstanceOf(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\Collection',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection',
             $collection
         );
         $testConfigurable = $this->_getAttributeByCode('test_configurable');
@@ -163,7 +163,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
     {
         $collection = $this->_model->getConfigurableAttributeCollection($this->_product);
         $this->assertInstanceOf(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\Collection',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection',
             $collection
         );
     }
@@ -188,7 +188,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
     public function testGetUsedProductCollection()
     {
         $this->assertInstanceOf(
-            'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\Collection',
+            'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection',
             $this->_model->getUsedProductCollection($this->_product)
         );
     }
@@ -417,7 +417,7 @@ class ConfigurableTest extends \PHPUnit_Framework_TestCase
      * Find and instantiate a catalog attribute model by attribute code
      *
      * @param string $code
-     * @return \Magento\Catalog\Model\Resource\Eav\Attribute
+     * @return \Magento\Catalog\Model\ResourceModel\Eav\Attribute
      */
     protected function _getAttributeByCode($code)
     {
diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/configurable_attribute.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/configurable_attribute.php
index 42e97f388f181132fef6bed195c44b4f843075b2..9d621f5aa20731dafdc7b22590d4283c68e33339 100644
--- a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/configurable_attribute.php
+++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/configurable_attribute.php
@@ -16,9 +16,9 @@ $eavConfig->clear();
 /** @var $installer \Magento\Catalog\Setup\CategorySetup */
 $installer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Catalog\Setup\CategorySetup');
 
-/** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $attribute->setData(
     [
diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php
new file mode 100644
index 0000000000000000000000000000000000000000..3a63d6c93e73e8fb8fe0b01ee0229b1d238ede19
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options.php
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require 'product_configurable.php';
+
+$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php';
+
+$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]);
+$billingAddress->setAddressType('billing');
+
+$shippingAddress = clone $billingAddress;
+$shippingAddress->setId(null)->setAddressType('shipping');
+
+$payment = $objectManager->create('Magento\Sales\Model\Order\Payment');
+$payment->setMethod('checkmo');
+
+/** @var $product \Magento\Catalog\Model\Product */
+$product = $objectManager->create('Magento\Catalog\Model\Product');
+$product->load(1);
+
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
+$eavConfig = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Eav\Model\Config');
+$attribute = $eavConfig->getAttribute('catalog_product', 'test_configurable');
+
+/** @var $options \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection */
+$options = $objectManager->create('Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection');
+$option = $options->setAttributeFilter($attribute->getId())
+    ->getFirstItem();
+
+$requestInfo = [
+    'qty' => 1,
+    'super_attribute' => [
+        $attribute->getId() => $option->getId(),
+    ],
+];
+
+/** @var \Magento\Sales\Model\Order\Item $orderItem */
+$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item');
+$orderItem->setProductId($product->getId());
+$orderItem->setQtyOrdered(1);
+$orderItem->setBasePrice($product->getPrice());
+$orderItem->setPrice($product->getPrice());
+$orderItem->setRowTotal($product->getPrice());
+$orderItem->setProductType($product->getTypeId());
+$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
+
+/** @var \Magento\Sales\Model\Order $order */
+$order = $objectManager->create('Magento\Sales\Model\Order');
+$order->setIncrementId('100000001');
+$order->setState(\Magento\Sales\Model\Order::STATE_NEW);
+$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW));
+$order->setCustomerIsGuest(true);
+$order->setCustomerEmail('customer@null.com');
+$order->setCustomerFirstname('firstname');
+$order->setCustomerLastname('lastname');
+$order->setBillingAddress($billingAddress);
+$order->setShippingAddress($shippingAddress);
+$order->setAddresses([$billingAddress, $shippingAddress]);
+$order->setPayment($payment);
+$order->addItem($orderItem);
+$order->setStoreId($objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId());
+$order->setSubtotal(100);
+$order->setBaseSubtotal(100);
+$order->setBaseGrandTotal(100);
+$order->save();
diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options_rollback.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options_rollback.php
new file mode 100644
index 0000000000000000000000000000000000000000..bb2003ecfc1e4065f8fffd39b323f3cfbf5414ac
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/order_item_with_configurable_and_options_rollback.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_configurable_rollback.php';
+require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php';
diff --git a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/quote_with_configurable_product.php b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/quote_with_configurable_product.php
index daa81b554db9872d75d7b92bf6b6c52419eab462..00e50477ae4c8df6d9e550d6ec2495a53ec99436 100644
--- a/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/quote_with_configurable_product.php
+++ b/dev/tests/integration/testsuite/Magento/ConfigurableProduct/_files/quote_with_configurable_product.php
@@ -5,15 +5,15 @@
  */
 
 require 'product_configurable.php';
-/** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
 
 /** @var $product \Magento\Catalog\Model\Product */
 $product = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create('Magento\Catalog\Model\Product');
 $product->load(1);
 /* Create simple products per each option */
-/** @var $options \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection */
+/** @var $options \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection */
 $options = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection'
+    'Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection'
 );
 $option = $options->setAttributeFilter($attribute->getId())->getFirstItem();
 
diff --git a/dev/tests/integration/testsuite/Magento/Cron/Observer/ProcessCronQueueObserverTest.php b/dev/tests/integration/testsuite/Magento/Cron/Observer/ProcessCronQueueObserverTest.php
index 48374709e5358eb79d3fcf80cdb4d1501d5fdd6b..3d58d1d29113d661a34fc57ed2b59cca3a7ebd9e 100644
--- a/dev/tests/integration/testsuite/Magento/Cron/Observer/ProcessCronQueueObserverTest.php
+++ b/dev/tests/integration/testsuite/Magento/Cron/Observer/ProcessCronQueueObserverTest.php
@@ -32,7 +32,7 @@ class ProcessCronQueueObserverTest extends \PHPUnit_Framework_TestCase
     public function testDispatchScheduled()
     {
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Cron\Model\Resource\Schedule\Collection'
+            'Magento\Cron\Model\ResourceModel\Schedule\Collection'
         );
         $collection->addFieldToFilter('status', \Magento\Cron\Model\Schedule::STATUS_PENDING);
         $this->assertGreaterThan(0, $collection->count(), 'Cron has failed to schedule tasks for itself for future.');
@@ -41,7 +41,7 @@ class ProcessCronQueueObserverTest extends \PHPUnit_Framework_TestCase
     public function testDispatchNoFailed()
     {
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Cron\Model\Resource\Schedule\Collection'
+            'Magento\Cron\Model\ResourceModel\Schedule\Collection'
         );
         $collection->addFieldToFilter('status', \Magento\Cron\Model\Schedule::STATUS_ERROR);
         foreach ($collection as $item) {
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Api/AddressRepositoryTest.php b/dev/tests/integration/testsuite/Magento/Customer/Api/AddressRepositoryTest.php
index 544874bba470174ae05abeb7123d065429aa0704..67c307bb8a3eab425761cd9b4ad1451c28bf111b 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Api/AddressRepositoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Api/AddressRepositoryTest.php
@@ -10,7 +10,7 @@ use Magento\Framework\Exception\InputException;
 use Magento\Framework\Exception\NoSuchEntityException;
 
 /**
- * Integration test for service layer \Magento\Customer\Model\Resource\AddressRepository
+ * Integration test for service layer \Magento\Customer\Model\ResourceModel\AddressRepository
  *
  * @SuppressWarnings(PHPMD.TooManyMethods)
  * @SuppressWarnings(PHPMD.ExcessivePublicCount)
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/CartTest.php b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/CartTest.php
index 482e0d7f7c59ee70bddf6fad3cc8051b78757e44..613e80c63b78130859bc52f5965a667482f34f84 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/CartTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/Cart/Product/Composite/CartTest.php
@@ -11,7 +11,7 @@ namespace Magento\Customer\Controller\Adminhtml\Cart\Product\Composite;
 class CartTest extends \Magento\TestFramework\TestCase\AbstractBackendController
 {
     /**
-     * @var \Magento\Quote\Model\Resource\Quote\Item\CollectionFactory
+     * @var \Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory
      */
     protected $quoteItemCollectionFactory;
 
@@ -19,7 +19,7 @@ class CartTest extends \Magento\TestFramework\TestCase\AbstractBackendController
     {
         parent::setUp();
         $this->quoteItemCollectionFactory = $this->_objectManager->get(
-            'Magento\Quote\Model\Resource\Quote\Item\CollectionFactory'
+            'Magento\Quote\Model\ResourceModel\Quote\Item\CollectionFactory'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php
index 41cda6cd8948779991a6e5e975b8cefb39f734f9..a140ddd6dd0aff141dd644067604a4ed699447d7 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Controller/Adminhtml/IndexTest.php
@@ -33,6 +33,9 @@ class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendControlle
     /** @var AccountManagementInterface */
     protected $accountManagement;
 
+    /** @var \Magento\Framework\Data\Form\FormKey */
+    protected $formKey;
+
     protected function setUp()
     {
         parent::setUp();
@@ -46,6 +49,10 @@ class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendControlle
         $this->accountManagement = Bootstrap::getObjectManager()->get(
             'Magento\Customer\Api\AccountManagementInterface'
         );
+
+        $this->formKey = Bootstrap::getObjectManager()->get(
+            'Magento\Framework\Data\Form\FormKey'
+        );
     }
 
     protected function tearDown()
@@ -289,7 +296,8 @@ class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendControlle
         $this->assertEquals('test firstname', $customer->getFirstname());
 
         /**
-         * Addresses should be removed by \Magento\Customer\Model\Resource\Customer::_saveAddresses during _afterSave
+         * Addresses should be removed by
+         * \Magento\Customer\Model\ResourceModel\Customer::_saveAddresses during _afterSave
          * addressOne - updated
          * addressTwo - removed
          * addressThree - removed
@@ -499,6 +507,10 @@ class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendControlle
     public function testDeleteAction()
     {
         $this->getRequest()->setParam('id', 1);
+        $this->getRequest()->setParam('form_key', $this->formKey->getFormKey());
+
+        $this->getRequest()->setMethod(\Zend\Http\Request::METHOD_POST);
+
         $this->dispatch('backend/customer/index/delete');
         $this->assertRedirect($this->stringContains('customer/index'));
         $this->assertSessionMessages(
@@ -513,6 +525,10 @@ class IndexTest extends \Magento\TestFramework\TestCase\AbstractBackendControlle
     public function testNotExistingCustomerDeleteAction()
     {
         $this->getRequest()->setParam('id', 2);
+        $this->getRequest()->setParam('form_key', $this->formKey->getFormKey());
+
+        $this->getRequest()->setMethod(\Zend\Http\Request::METHOD_POST);
+
         $this->dispatch('backend/customer/index/delete');
         $this->assertRedirect($this->stringContains('customer/index'));
         $this->assertSessionMessages(
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Address/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Address/CollectionTest.php
similarity index 88%
rename from dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Address/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Address/CollectionTest.php
index 56a1c8f0a6168202314fb0c9def7d9b956eb93bc..5c26fe930b1f09d6855a906debb74ebf06531ca2 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Address/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Address/CollectionTest.php
@@ -7,14 +7,14 @@
 /**
  * Tests for customer addresses collection
  */
-namespace Magento\Customer\Model\Resource\Address;
+namespace Magento\Customer\Model\ResourceModel\Address;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     public function testSetCustomerFilter()
     {
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Address\Collection'
+            'Magento\Customer\Model\ResourceModel\Address\Collection'
         );
         $select = $collection->getSelect();
         $this->assertSame($collection, $collection->setCustomerFilter([1, 2]));
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/AddressRepositoryTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/AddressRepositoryTest.php
similarity index 99%
rename from dev/tests/integration/testsuite/Magento/Customer/Model/Resource/AddressRepositoryTest.php
rename to dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/AddressRepositoryTest.php
index fb917f1aaffc7f4ea5e3b28d1ace94201b2e8621..fc2c50f77ea5f0bd8e632b3c7b479a3d049e0921 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/AddressRepositoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/AddressRepositoryTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Customer\Model\Resource;
+namespace Magento\Customer\Model\ResourceModel;
 
 use Magento\Customer\Api\AddressRepositoryInterface;
 use Magento\Framework\Api\SortOrder;
@@ -12,7 +12,7 @@ use Magento\Framework\Exception\InputException;
 use Magento\Framework\Exception\NoSuchEntityException;
 
 /**
- * Integration test for \Magento\Customer\Model\Resource\AddressRepository
+ * Integration test for \Magento\Customer\Model\ResourceModel\AddressRepository
  *
  * @SuppressWarnings(PHPMD.TooManyMethods)
  * @SuppressWarnings(PHPMD.ExcessivePublicCount)
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Customer/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Customer/CollectionTest.php
similarity index 71%
rename from dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Customer/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Customer/CollectionTest.php
index fda5b04e57ebfd11b0a57ce1ccac33511c7e1971..87336b5dc9b0a20827ddc29d447706b35e9a160b 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Customer/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Customer/CollectionTest.php
@@ -1,23 +1,23 @@
 <?php
 /**
- * \Magento\Customer\Model\Resource\Customer\Collection
+ * \Magento\Customer\Model\ResourceModel\Customer\Collection
  *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Customer;
+namespace Magento\Customer\Model\ResourceModel\Customer;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Customer\Model\Resource\Customer\Collection
+     * @var \Magento\Customer\Model\ResourceModel\Customer\Collection
      */
     protected $_collection;
 
     public function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Customer\Collection'
+            'Magento\Customer\Model\ResourceModel\Customer\Collection'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/CustomerRepositoryTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/CustomerRepositoryTest.php
similarity index 99%
rename from dev/tests/integration/testsuite/Magento/Customer/Model/Resource/CustomerRepositoryTest.php
rename to dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/CustomerRepositoryTest.php
index 16a007272c94fe8e15144fc9b9c6c504523c5c6a..c24fac5a1f4f8cd998c52c7ff4880af6c4deabbc 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/CustomerRepositoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/CustomerRepositoryTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Customer\Model\Resource;
+namespace Magento\Customer\Model\ResourceModel;
 
 use Magento\Customer\Api\AccountManagementInterface;
 use Magento\Customer\Api\CustomerRepositoryInterface;
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Group/Grid/ServiceCollectionTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Group/Grid/ServiceCollectionTest.php
similarity index 95%
rename from dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Group/Grid/ServiceCollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Group/Grid/ServiceCollectionTest.php
index 354a4c4533d6579713a490f24f538a518c261de8..bcb2bbb38021e5ef9ddecf9aa96eebccce524062 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/Group/Grid/ServiceCollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/Group/Grid/ServiceCollectionTest.php
@@ -1,11 +1,11 @@
 <?php
 /**
- * \Magento\Customer\Model\Resource\Group\Grid\ServiceCollection
+ * \Magento\Customer\Model\ResourceModel\Group\Grid\ServiceCollection
  *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Customer\Model\Resource\Group\Grid;
+namespace Magento\Customer\Model\ResourceModel\Group\Grid;
 
 class ServiceCollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -15,7 +15,7 @@ class ServiceCollectionTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Group\Grid\ServiceCollection'
+            'Magento\Customer\Model\ResourceModel\Group\Grid\ServiceCollection'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/GroupRepositoryTest.php b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/GroupRepositoryTest.php
similarity index 99%
rename from dev/tests/integration/testsuite/Magento/Customer/Model/Resource/GroupRepositoryTest.php
rename to dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/GroupRepositoryTest.php
index 40e660da0c658cd55196e4be633e0ee56bb059c2..873b584112da6473399a6d8fe6d08b56a7f5d4ee 100644
--- a/dev/tests/integration/testsuite/Magento/Customer/Model/Resource/GroupRepositoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Customer/Model/ResourceModel/GroupRepositoryTest.php
@@ -4,13 +4,13 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Customer\Model\Resource;
+namespace Magento\Customer\Model\ResourceModel;
 
 use Magento\Customer\Api\Data\GroupInterface;
 use Magento\Framework\Api\SortOrder;
 
 /**
- * Integration test for \Magento\Customer\Model\Resource\GroupRepository
+ * Integration test for \Magento\Customer\Model\ResourceModel\GroupRepository
  */
 class GroupRepositoryTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Export/AddressTest.php b/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Export/AddressTest.php
index 73012c62e5cfde76deba26e987bca4e5f12ea609..19988d0c66d424545ed90befa91062a32f0ee45e 100644
--- a/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Export/AddressTest.php
+++ b/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Export/AddressTest.php
@@ -56,9 +56,9 @@ class AddressTest extends \PHPUnit_Framework_TestCase
         $entityIdCode = Address::COLUMN_ADDRESS_ID;
 
         $expectedAttributes = [];
-        /** @var $collection \Magento\Customer\Model\Resource\Address\Attribute\Collection */
+        /** @var $collection \Magento\Customer\Model\ResourceModel\Address\Attribute\Collection */
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Address\Attribute\Collection'
+            'Magento\Customer\Model\ResourceModel\Address\Attribute\Collection'
         );
         /** @var $attribute \Magento\Customer\Model\Attribute */
         foreach ($collection as $attribute) {
@@ -193,7 +193,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
     public function testGetAttributeCollection()
     {
         $this->assertInstanceOf(
-            'Magento\Customer\Model\Resource\Address\Attribute\Collection',
+            'Magento\Customer\Model\ResourceModel\Address\Attribute\Collection',
             $this->_model->getAttributeCollection()
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Export/CustomerTest.php b/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Export/CustomerTest.php
index 5f1ba57f4932dd8ab7d470b32a61b4b4241475f9..0ccd44239576d34f4bae8c765f55278fe48a4df4 100644
--- a/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Export/CustomerTest.php
+++ b/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Export/CustomerTest.php
@@ -31,9 +31,9 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
     public function testExport()
     {
         $expectedAttributes = [];
-        /** @var $collection \Magento\Customer\Model\Resource\Attribute\Collection */
+        /** @var $collection \Magento\Customer\Model\ResourceModel\Attribute\Collection */
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Attribute\Collection'
+            'Magento\Customer\Model\ResourceModel\Attribute\Collection'
         );
         /** @var $attribute \Magento\Customer\Model\Attribute */
         foreach ($collection as $attribute) {
@@ -94,7 +94,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
     public function testGetAttributeCollection()
     {
         $this->assertInstanceOf(
-            'Magento\Customer\Model\Resource\Attribute\Collection',
+            'Magento\Customer\Model\ResourceModel\Attribute\Collection',
             $this->_model->getAttributeCollection()
         );
     }
@@ -104,7 +104,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
      */
     public function testFilterAttributeCollection()
     {
-        /** @var $collection \Magento\Customer\Model\Resource\Attribute\Collection */
+        /** @var $collection \Magento\Customer\Model\ResourceModel\Attribute\Collection */
         $collection = $this->_model->getAttributeCollection();
         $collection = $this->_model->filterAttributeCollection($collection);
         /**
@@ -167,7 +167,7 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
          * Change type of created_at attribute. In this case we have possibility to test date rage filter
          */
         $attributeCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Attribute\Collection'
+            'Magento\Customer\Model\ResourceModel\Attribute\Collection'
         );
         $attributeCollection->addFieldToFilter('attribute_code', 'created_at');
         /** @var $createdAtAttribute \Magento\Customer\Model\Attribute */
@@ -187,10 +187,10 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
             ]
         ];
         $this->_model->setParameters($parameters);
-        /** @var $customers \Magento\Customer\Model\Resource\Customer\Collection */
+        /** @var $customers \Magento\Customer\Model\ResourceModel\Customer\Collection */
         $collection = $this->_model->filterEntityCollection(
             \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-                'Magento\Customer\Model\Resource\Customer\Collection'
+                'Magento\Customer\Model\ResourceModel\Customer\Collection'
             )
         );
         $collection->load();
diff --git a/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/AddressTest.php b/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/AddressTest.php
index a4dd5f80b41fbe19a34f8959cd34c236808eb48b..521c107aa17211102b4b198b581d849a5993f726 100644
--- a/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/AddressTest.php
+++ b/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/AddressTest.php
@@ -74,7 +74,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
         'not_delete' => '72701',  // not deleted address
     ];
 
-    /** @var \Magento\Customer\Model\Resource\Customer */
+    /** @var \Magento\Customer\Model\ResourceModel\Customer */
     protected $customerResource;
 
     /**
@@ -82,9 +82,9 @@ class AddressTest extends \PHPUnit_Framework_TestCase
      */
     protected function setUp()
     {
-        /** @var \Magento\Catalog\Model\Resource\Product $productResource */
+        /** @var \Magento\Catalog\Model\ResourceModel\Product $productResource */
         $this->customerResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
-            'Magento\Customer\Model\Resource\Customer'
+            'Magento\Customer\Model\ResourceModel\Customer'
         );
         $this->_entityAdapter = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
             $this->_testClassName
@@ -243,7 +243,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
             'Magento\Customer\Model\Address'
         );
         $tableName = $addressModel->getResource()->getEntityTable();
-        $addressId = $objectManager->get('Magento\ImportExport\Model\Resource\Helper')
+        $addressId = $objectManager->get('Magento\ImportExport\Model\ResourceModel\Helper')
             ->getNextAutoincrement($tableName);
 
         $newEntityData = [
@@ -417,7 +417,7 @@ class AddressTest extends \PHPUnit_Framework_TestCase
 
         // get addresses
         $addressCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Address\Collection'
+            'Magento\Customer\Model\ResourceModel\Address\Collection'
         );
         $addressCollection->addAttributeToSelect($requiredAttributes);
         $addresses = [];
@@ -504,9 +504,9 @@ class AddressTest extends \PHPUnit_Framework_TestCase
         $keyAttribute = 'postcode';
 
         // get addresses
-        /** @var $addressCollection \Magento\Customer\Model\Resource\Address\Collection */
+        /** @var $addressCollection \Magento\Customer\Model\ResourceModel\Address\Collection */
         $addressCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Address\Collection'
+            'Magento\Customer\Model\ResourceModel\Address\Collection'
         );
         $addressCollection->addAttributeToSelect($keyAttribute);
         $addresses = [];
diff --git a/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/CustomerCompositeTest.php b/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/CustomerCompositeTest.php
index 1ac06a6a9110af08cf9ea9ed5958f8abc2a30bbf..e4fca0abc82454a164285d4fadfa0bcedf81540d 100644
--- a/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/CustomerCompositeTest.php
+++ b/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/CustomerCompositeTest.php
@@ -94,8 +94,8 @@ class CustomerCompositeTest extends \PHPUnit_Framework_TestCase
      */
     protected function _assertCustomerData(array $expectedData)
     {
-        /** @var $collection \Magento\Customer\Model\Resource\Customer\Collection */
-        $collection = $this->_objectManager->create('Magento\Customer\Model\Resource\Customer\Collection');
+        /** @var $collection \Magento\Customer\Model\ResourceModel\Customer\Collection */
+        $collection = $this->_objectManager->create('Magento\Customer\Model\ResourceModel\Customer\Collection');
         $collection->addAttributeToSelect($this->_customerAttributes);
         $customers = $collection->getItems();
 
diff --git a/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/CustomerTest.php b/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/CustomerTest.php
index e9ff2b4c0045edcac586a3b9a85e53343020cec1..6baf9a6daf86c40eda9fb6e073d056d339ac72eb 100644
--- a/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/CustomerTest.php
+++ b/dev/tests/integration/testsuite/Magento/CustomerImportExport/Model/Import/CustomerTest.php
@@ -84,9 +84,9 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
             $this->directoryWrite
         );
 
-        /** @var $customersCollection \Magento\Customer\Model\Resource\Customer\Collection */
+        /** @var $customersCollection \Magento\Customer\Model\ResourceModel\Customer\Collection */
         $customersCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Customer\Collection'
+            'Magento\Customer\Model\ResourceModel\Customer\Collection'
         );
         $customersCollection->addAttributeToSelect('firstname', 'inner')->addAttributeToSelect('lastname', 'inner');
 
@@ -153,9 +153,9 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
             $this->directoryWrite
         );
 
-        /** @var $customerCollection \Magento\Customer\Model\Resource\Customer\Collection */
+        /** @var $customerCollection \Magento\Customer\Model\ResourceModel\Customer\Collection */
         $customerCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Customer\Collection'
+            'Magento\Customer\Model\ResourceModel\Customer\Collection'
         );
         $this->assertEquals(3, $customerCollection->count(), 'Count of existing customers are invalid');
 
diff --git a/dev/tests/integration/testsuite/Magento/Directory/Model/ObserverTest.php b/dev/tests/integration/testsuite/Magento/Directory/Model/ObserverTest.php
index 4e846c1f3b26cf07351dabb687dfb0525e974d43..34fc0d9f66c8c43fd48f92097c5a8187c4f61bd3 100644
--- a/dev/tests/integration/testsuite/Magento/Directory/Model/ObserverTest.php
+++ b/dev/tests/integration/testsuite/Magento/Directory/Model/ObserverTest.php
@@ -35,7 +35,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
     /** @var string */
     protected $allowedCurrenciesPath = 'currency/options/allow';
 
-    /** @var \Magento\Config\Model\Resource\Config */
+    /** @var \Magento\Config\Model\ResourceModel\Config */
     protected $configResource;
 
     public function setUp()
@@ -47,7 +47,7 @@ class ObserverTest extends \PHPUnit_Framework_TestCase
         $this->scopeConfig->setValue(Observer::CRON_STRING_PATH, 'cron-string-path', ScopeInterface::SCOPE_STORE);
         $this->scopeConfig->setValue(Observer::IMPORT_SERVICE, 'webservicex', ScopeInterface::SCOPE_STORE);
 
-        $this->configResource = $this->objectManager->get('Magento\Config\Model\Resource\Config');
+        $this->configResource = $this->objectManager->get('Magento\Config\Model\ResourceModel\Config');
         $this->configResource->saveConfig(
             $this->baseCurrencyPath,
             $this->baseCurrency,
diff --git a/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options.php b/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options.php
new file mode 100644
index 0000000000000000000000000000000000000000..e7919efd48315e714028e3e7fff963d6a7f4f3db
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options.php
@@ -0,0 +1,58 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_downloadable.php';
+
+$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
+
+$addressData = include __DIR__ . '/../../../Magento/Sales/_files/address_data.php';
+
+$billingAddress = $objectManager->create('Magento\Sales\Model\Order\Address', ['data' => $addressData]);
+$billingAddress->setAddressType('billing');
+
+$shippingAddress = clone $billingAddress;
+$shippingAddress->setId(null)->setAddressType('shipping');
+
+$payment = $objectManager->create('Magento\Sales\Model\Order\Payment');
+$payment->setMethod('checkmo');
+
+/** @var $product \Magento\Catalog\Model\Product */
+$product = $objectManager->create('Magento\Catalog\Model\Product');
+$product->load(1);
+
+$requestInfo = [
+    'links' => array_keys($product->getDownloadableLinks()),
+];
+
+/** @var \Magento\Sales\Model\Order\Item $orderItem */
+$orderItem = $objectManager->create('Magento\Sales\Model\Order\Item');
+$orderItem->setProductId($product->getId());
+$orderItem->setQtyOrdered(1);
+$orderItem->setBasePrice($product->getPrice());
+$orderItem->setPrice($product->getPrice());
+$orderItem->setRowTotal($product->getPrice());
+$orderItem->setProductType($product->getTypeId());
+$orderItem->setProductOptions(['info_buyRequest' => $requestInfo]);
+
+/** @var \Magento\Sales\Model\Order $order */
+$order = $objectManager->create('Magento\Sales\Model\Order');
+$order->setIncrementId('100000001');
+$order->setState(\Magento\Sales\Model\Order::STATE_NEW);
+$order->setStatus($order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_NEW));
+$order->setCustomerIsGuest(true);
+$order->setCustomerEmail('customer@null.com');
+$order->setCustomerFirstname('firstname');
+$order->setCustomerLastname('lastname');
+$order->setBillingAddress($billingAddress);
+$order->setShippingAddress($shippingAddress);
+$order->setAddresses([$billingAddress, $shippingAddress]);
+$order->setPayment($payment);
+$order->addItem($orderItem);
+$order->setStoreId($objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getId());
+$order->setSubtotal(100);
+$order->setBaseSubtotal(100);
+$order->setBaseGrandTotal(100);
+$order->save();
diff --git a/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options_rollback.php b/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options_rollback.php
new file mode 100644
index 0000000000000000000000000000000000000000..3d18328b96d754940a55b9ee9ac25e6b6ed62707
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Downloadable/_files/order_item_with_downloadable_and_options_rollback.php
@@ -0,0 +1,8 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+require __DIR__ . '/product_downloadable_rollback.php';
+require __DIR__ . '/../../../Magento/Sales/_files/default_rollback.php';
diff --git a/dev/tests/integration/testsuite/Magento/Eav/Model/Resource/Entity/Attribute/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Eav/Model/ResourceModel/Entity/Attribute/CollectionTest.php
similarity index 82%
rename from dev/tests/integration/testsuite/Magento/Eav/Model/Resource/Entity/Attribute/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Eav/Model/ResourceModel/Entity/Attribute/CollectionTest.php
index b3528f0255160381d060f7655af51a5b7fe002c0..79909b26908038e3c26c8d71bf4329afdd617386 100644
--- a/dev/tests/integration/testsuite/Magento/Eav/Model/Resource/Entity/Attribute/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Eav/Model/ResourceModel/Entity/Attribute/CollectionTest.php
@@ -3,26 +3,26 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Eav\Model\Resource\Entity\Attribute;
+namespace Magento\Eav\Model\ResourceModel\Entity\Attribute;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Eav\Model\Resource\Entity\Attribute\Collection
+     * @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection
      */
     protected $_model;
 
     protected function setUp()
     {
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Collection'
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection'
         );
     }
 
     /**
      * Returns array of set ids, present in collection attributes
      *
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Collection $collection
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $collection
      * @return array
      */
     protected function _getSets($collection)
@@ -41,7 +41,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     public function testSetAttributeGroupFilter()
     {
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Eav\Model\Resource\Entity\Attribute\Collection'
+            'Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection'
         );
         $groupsPresent = $this->_getGroups($collection);
         $includeGroupId = current($groupsPresent);
@@ -55,7 +55,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     /**
      * Returns array of group ids, present in collection attributes
      *
-     * @param \Magento\Eav\Model\Resource\Entity\Attribute\Collection $collection
+     * @param \Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection $collection
      * @return array
      */
     protected function _getGroups($collection)
diff --git a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
index a63bbacc8bd6ac04ccf15e4dca6cec54ec4df671..48d237cd8d627ad9f0614ff20e0e7bda9af7aa7b 100644
--- a/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
+++ b/dev/tests/integration/testsuite/Magento/Email/Model/TemplateTest.php
@@ -501,7 +501,7 @@ class TemplateTest extends \PHPUnit_Framework_TestCase
         // inline CSS files get loaded properly from both areas.
         Bootstrap::getInstance()->loadArea($area);
 
-        $collection = $this->objectManager->create('Magento\Theme\Model\Resource\Theme\Collection');
+        $collection = $this->objectManager->create('Magento\Theme\Model\ResourceModel\Theme\Collection');
 
         // Hard-coding theme as we want to test the fallback structure to ensure that the parent/grandparent themes of
         // Vendor_EmailTest/custom_theme will be checked for CSS files
diff --git a/dev/tests/integration/testsuite/Magento/EncryptionKey/Model/Resource/Key/ChangeTest.php b/dev/tests/integration/testsuite/Magento/EncryptionKey/Model/ResourceModel/Key/ChangeTest.php
similarity index 88%
rename from dev/tests/integration/testsuite/Magento/EncryptionKey/Model/Resource/Key/ChangeTest.php
rename to dev/tests/integration/testsuite/Magento/EncryptionKey/Model/ResourceModel/Key/ChangeTest.php
index 494b050594c396d749c559d54edbe65f2e8c24e0..f089203ef3590e411f3d8ab16568cb4065a9e034 100644
--- a/dev/tests/integration/testsuite/Magento/EncryptionKey/Model/Resource/Key/ChangeTest.php
+++ b/dev/tests/integration/testsuite/Magento/EncryptionKey/Model/ResourceModel/Key/ChangeTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\EncryptionKey\Model\Resource\Key;
+namespace Magento\EncryptionKey\Model\ResourceModel\Key;
 
 class ChangeTest extends \PHPUnit_Framework_TestCase
 {
@@ -27,9 +27,9 @@ class ChangeTest extends \PHPUnit_Framework_TestCase
         $writerMock = $this->getMock('Magento\Framework\App\DeploymentConfig\Writer', [], [], '', false);
         $writerMock->expects($this->once())->method('checkIfWritable')->will($this->returnValue(false));
 
-        /** @var \Magento\EncryptionKey\Model\Resource\Key\Change $keyChangeModel */
+        /** @var \Magento\EncryptionKey\Model\ResourceModel\Key\Change $keyChangeModel */
         $keyChangeModel = $this->objectManager->create(
-            'Magento\EncryptionKey\Model\Resource\Key\Change',
+            'Magento\EncryptionKey\Model\ResourceModel\Key\Change',
             ['writer' => $writerMock]
         );
         $keyChangeModel->changeEncryptionKey();
@@ -52,14 +52,14 @@ class ChangeTest extends \PHPUnit_Framework_TestCase
             ->method('getFieldPathsByAttribute')
             ->will($this->returnValue([$testPath]));
 
-        /** @var \Magento\EncryptionKey\Model\Resource\Key\Change $keyChangeModel */
+        /** @var \Magento\EncryptionKey\Model\ResourceModel\Key\Change $keyChangeModel */
         $keyChangeModel = $this->objectManager->create(
-            'Magento\EncryptionKey\Model\Resource\Key\Change',
+            'Magento\EncryptionKey\Model\ResourceModel\Key\Change',
             ['structure' => $structureMock, 'writer' => $writerMock]
         );
 
         $configModel = $this->objectManager->create(
-            'Magento\Config\Model\Resource\Config'
+            'Magento\Config\Model\ResourceModel\Config'
         );
         $configModel->saveConfig($testPath, 'test', 'default', 0);
         $this->assertNotNull($keyChangeModel->changeEncryptionKey());
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Api/ExtensionAttribute/JoinProcessorTest.php b/dev/tests/integration/testsuite/Magento/Framework/Api/ExtensionAttribute/JoinProcessorTest.php
index e1c319834a5c92c1e6dec8a291e817f732b1a194..77ba00720546bd304546d0f479ca294099653bb0 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Api/ExtensionAttribute/JoinProcessorTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Api/ExtensionAttribute/JoinProcessorTest.php
@@ -10,7 +10,7 @@ use Magento\Framework\Api\ExtensionAttribute\Config\Reader;
 use Magento\Framework\Api\ExtensionAttribute\JoinData;
 use Magento\Framework\Api\ExtensionAttribute\JoinDataInterfaceFactory;
 use Magento\Framework\Reflection\TypeProcessor;
-use Magento\Framework\App\Resource as AppResource;
+use Magento\Framework\App\ResourceConnection as AppResource;
 use Magento\Framework\Api\ExtensionAttributesFactory;
 
 /**
@@ -72,7 +72,7 @@ class JoinProcessorTest extends \PHPUnit_Framework_TestCase
         /** @var \Magento\Framework\ObjectManagerInterface */
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 
-        $this->appResource = $objectManager->get('Magento\Framework\App\Resource');
+        $this->appResource = $objectManager->get('Magento\Framework\App\ResourceConnection');
 
         $this->joinProcessorHelper = $objectManager->create(
             'Magento\Framework\Api\ExtensionAttribute\JoinProcessorHelper',
@@ -232,8 +232,8 @@ class JoinProcessorTest extends \PHPUnit_Framework_TestCase
             'Magento\Framework\Api\ExtensionAttribute\JoinProcessor',
             ['joinProcessorHelper' => $extensionAttributesProcessorHelper]
         );
-        /** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
-        $collection = $objectManager->create('Magento\Catalog\Model\Resource\Product\Collection');
+        /** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
+        $collection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
         $extensionAttributesProcessor->process($collection);
         $config->reset();
 
diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Config/DataTest.php b/dev/tests/integration/testsuite/Magento/Framework/App/Config/DataTest.php
index a5f7aff97f05574aaed5745733f7305df848e71e..3da82d204c28debf1d4b3be83cf9ecfca4785f3b 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/App/Config/DataTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/App/Config/DataTest.php
@@ -58,7 +58,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
     {
         // load the model
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Config\Model\Resource\Config\Data\Collection'
+            'Magento\Config\Model\ResourceModel\Config\Data\Collection'
         );
         $collection->addFieldToFilter(
             'path',
diff --git a/dev/tests/integration/testsuite/Magento/Framework/App/Resource/ConnectionFactoryTest.php b/dev/tests/integration/testsuite/Magento/Framework/App/ResourceConnection/ConnectionFactoryTest.php
similarity index 83%
rename from dev/tests/integration/testsuite/Magento/Framework/App/Resource/ConnectionFactoryTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/App/ResourceConnection/ConnectionFactoryTest.php
index 5b77db64a1c6231529ad3918df55bc13e90d74a3..72152b0338f509252c2af297390c7defb479cc94 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/App/Resource/ConnectionFactoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/App/ResourceConnection/ConnectionFactoryTest.php
@@ -3,18 +3,18 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Resource;
+namespace Magento\Framework\App\ResourceConnection;
 
 class ConnectionFactoryTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\App\Resource\ConnectionFactory
+     * @var \Magento\Framework\App\ResourceConnection\ConnectionFactory
      */
     private $model;
 
     protected function setUp()
     {
-        $this->model = new \Magento\Framework\App\Resource\ConnectionFactory(
+        $this->model = new \Magento\Framework\App\ResourceConnection\ConnectionFactory(
             \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Composer/ComposerInformationTest.php b/dev/tests/integration/testsuite/Magento/Framework/Composer/ComposerInformationTest.php
index 590a553274d7d1ba8e1bf1d16037a4fc151efec2..542d25af339acf8e8e1083cc5884a09b066be28a 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Composer/ComposerInformationTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Composer/ComposerInformationTest.php
@@ -110,6 +110,27 @@ class ComposerInformationTest extends \PHPUnit_Framework_TestCase
         }
     }
 
+    /**
+     * @param $composerDir string Directory under _files that contains composer files
+     *
+     * @dataProvider getRequiredPhpVersionDataProvider
+     */
+    public function testGetSuggestedPackages($composerDir)
+    {
+        $this->setupDirectory($composerDir);
+        $composerInfo = $this->objectManager->create(
+            'Magento\Framework\Composer\ComposerInformation',
+            [
+                'applicationFactory' => new MagentoComposerApplicationFactory(
+                    $this->composerJsonFinder,
+                    $this->directoryList
+                )
+            ]
+        );
+        $actualSuggestedExtensions = $composerInfo->getSuggestedPackages();
+        $this->assertArrayHasKey('psr/log', $actualSuggestedExtensions);
+    }
+
     /**
      * @param $composerDir string Directory under _files that contains composer files
      *
diff --git a/dev/tests/integration/testsuite/Magento/Framework/DB/Adapter/Pdo/MysqlTest.php b/dev/tests/integration/testsuite/Magento/Framework/DB/Adapter/Pdo/MysqlTest.php
index 6b29591a6ae5dc3f003fdd7e7fb723301c3e6fe6..8091c5a6eaf58cd072c0daa9ac51228b19af4a2c 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/DB/Adapter/Pdo/MysqlTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/DB/Adapter/Pdo/MysqlTest.php
@@ -11,7 +11,7 @@
  */
 namespace Magento\Framework\DB\Adapter\Pdo;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class MysqlTest extends \PHPUnit_Framework_TestCase
 {
@@ -22,6 +22,16 @@ class MysqlTest extends \PHPUnit_Framework_TestCase
      */
     protected $_connection = null;
 
+    public function setUp()
+    {
+        set_error_handler(null);
+    }
+
+    public function tearDown()
+    {
+        restore_error_handler();
+    }
+
     /**
      * Test lost connection re-initializing
      *
@@ -115,9 +125,9 @@ class MysqlTest extends \PHPUnit_Framework_TestCase
     protected function _getConnection()
     {
         if (is_null($this->_connection)) {
-            /** @var $coreResource \Magento\Framework\App\Resource */
+            /** @var $coreResource \Magento\Framework\App\ResourceConnection */
             $coreResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-                ->get('Magento\Framework\App\Resource');
+                ->get('Magento\Framework\App\ResourceConnection');
             $this->_connection = $coreResource->getConnection();
         }
         return $this->_connection;
diff --git a/dev/tests/integration/testsuite/Magento/Framework/DB/HelperTest.php b/dev/tests/integration/testsuite/Magento/Framework/DB/HelperTest.php
index ee8a44e4644de8816b8e8ea63d6d612489866300..b9421fe71ad7817b6e0385d62c3342a43f16f47c 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/DB/HelperTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/DB/HelperTest.php
@@ -24,7 +24,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase
             ['modulePrefix' => 'core']
         );
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Store\Model\Resource\Store\Collection'
+            'Magento\Store\Model\ResourceModel\Store\Collection'
         );
         $this->_select = $collection->getSelect();
     }
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Db/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/AbstractTest.php
similarity index 78%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Db/AbstractTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/AbstractTest.php
index bf47aeb3babeedccc2c56be8c31bdca94440c709..ca8c899be7be3d643aab9d0fb965bba3090c41c3 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Db/AbstractTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/AbstractTest.php
@@ -6,23 +6,23 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Model\Resource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 class AbstractTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $_model;
 
     protected function setUp()
     {
-        $resource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\App\Resource');
+        $resource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\App\ResourceConnection');
         $context = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            '\Magento\Framework\Model\Resource\Db\Context',
+            '\Magento\Framework\Model\ResourceModel\Db\Context',
             ['resource' => $resource]
         );
-        $this->_model = $this->getMockForAbstractClass('Magento\Framework\Model\Resource\Db\AbstractDb',
+        $this->_model = $this->getMockForAbstractClass('Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             ['context' => $context]
         );
     }
@@ -31,7 +31,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
     {
         $resourceProperty = new \ReflectionProperty(get_class($this->_model), '_resources');
         $resourceProperty->setAccessible(true);
-        $this->assertInstanceOf('Magento\Framework\App\Resource', $resourceProperty->getValue($this->_model));
+        $this->assertInstanceOf('Magento\Framework\App\ResourceConnection', $resourceProperty->getValue($this->_model));
     }
 
     public function testSetMainTable()
@@ -55,15 +55,15 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
         $tableNameOrig = 'store_website';
         $tableSuffix = 'suffix';
         $resource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             ['tablePrefix' => 'prefix_']
         );
         $context = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            '\Magento\Framework\Model\Resource\Db\Context',
+            '\Magento\Framework\Model\ResourceModel\Db\Context',
             ['resource' => $resource]
         );
 
-        $model = $this->getMockForAbstractClass('Magento\Framework\Model\Resource\Db\AbstractDb',
+        $model = $this->getMockForAbstractClass('Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             ['context' => $context]
         );
 
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Db/Collection/AbstractTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractTest.php
similarity index 83%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Db/Collection/AbstractTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractTest.php
index a07cb44bd820c6b972823fbb17bec98c78c5ac9a..0bdb5fa5e4bd624d0a0628b87e1d3b4f731a52ed 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Db/Collection/AbstractTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractTest.php
@@ -3,26 +3,26 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Db\Collection;
+namespace Magento\Framework\Model\ResourceModel\Db\Collection;
 
 class AbstractTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected $_model = null;
 
     protected function setUp()
     {
         $resourceModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->get('Magento\Framework\App\Resource');
+            ->get('Magento\Framework\App\ResourceConnection');
         $context = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            '\Magento\Framework\Model\Resource\Db\Context',
+            '\Magento\Framework\Model\ResourceModel\Db\Context',
             ['resource' => $resourceModel]
         );
 
         $resource = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$context],
             '',
             true,
@@ -52,7 +52,7 @@ class AbstractTest extends \PHPUnit_Framework_TestCase
         $logger = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Psr\Log\LoggerInterface');
 
         $this->_model = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\Collection\AbstractCollection',
+            'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
             [$entityFactory, $logger, $fetchStrategy, $eventManager, null, $resource]
         );
     }
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Db/ProfilerTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/ProfilerTest.php
similarity index 83%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Db/ProfilerTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/ProfilerTest.php
index 86a3c7848fced417e139fa7bb910e6ff714470f0..34b1d0a51b312f1fc48a335ad8c4b5d74f69d356 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Db/ProfilerTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Db/ProfilerTest.php
@@ -1,18 +1,18 @@
 <?php
 /**
- * Test for \Magento\Framework\Model\Resource\Db\Profiler
+ * Test for \Magento\Framework\Model\ResourceModel\Db\Profiler
  *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 use Magento\Framework\Config\ConfigOptionsListConstants;
 
 class ProfilerTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_model;
 
@@ -36,7 +36,7 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->create('Magento\Framework\App\Resource');
+            ->create('Magento\Framework\App\ResourceConnection');
     }
 
     /**
@@ -49,7 +49,7 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase
         $dbConfig = $reader->getConfigData(ConfigOptionsListConstants::KEY_DB);
         $connectionConfig = $dbConfig['connection']['default'];
         $connectionConfig['profiler'] = [
-            'class' => 'Magento\Framework\Model\Resource\Db\Profiler',
+            'class' => 'Magento\Framework\Model\ResourceModel\Db\Profiler',
             'enabled' => 'true',
         ];
 
@@ -67,8 +67,9 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase
     {
         $connection = $this->_getConnection();
 
-        /** @var \Magento\Framework\App\Resource $resource */
-        $resource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\App\Resource');
+        /** @var \Magento\Framework\App\ResourceConnection $resource */
+        $resource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
+            ->get('Magento\Framework\App\ResourceConnection');
         $testTableName = $resource->getTableName('setup_module');
         $selectQuery = sprintf($selectQuery, $testTableName);
 
@@ -77,9 +78,9 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase
             $result->fetchAll();
         }
 
-        /** @var \Magento\Framework\Model\Resource\Db\Profiler $profiler */
+        /** @var \Magento\Framework\Model\ResourceModel\Db\Profiler $profiler */
         $profiler = $connection->getProfiler();
-        $this->assertInstanceOf('Magento\Framework\Model\Resource\Db\Profiler', $profiler);
+        $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\Profiler', $profiler);
 
         $queryProfiles = $profiler->getQueryProfiles($queryType);
         $this->assertCount(1, $queryProfiles);
@@ -133,14 +134,15 @@ class ProfilerTest extends \PHPUnit_Framework_TestCase
             $this->fail("Expected exception didn't thrown!");
         }
 
-        /** @var \Magento\Framework\App\Resource $resource */
-        $resource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\App\Resource');
+        /** @var \Magento\Framework\App\ResourceConnection $resource */
+        $resource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
+            ->get('Magento\Framework\App\ResourceConnection');
         $testTableName = $resource->getTableName('setup_module');
         $connection->query('SELECT * FROM ' . $testTableName);
 
-        /** @var \Magento\Framework\Model\Resource\Db\Profiler $profiler */
+        /** @var \Magento\Framework\Model\ResourceModel\Db\Profiler $profiler */
         $profiler = $connection->getProfiler();
-        $this->assertInstanceOf('Magento\Framework\Model\Resource\Db\Profiler', $profiler);
+        $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\Profiler', $profiler);
 
         $queryProfiles = $profiler->getQueryProfiles(\Magento\Framework\DB\Profiler::SELECT);
         $this->assertCount(2, $queryProfiles);
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Entity/TableTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Entity/TableTest.php
similarity index 81%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Entity/TableTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Entity/TableTest.php
index f1ee2be7df30c15cd53497e961a42cd4871d248c..80209e56a038f28cea11c6b647e17f5bbabcf05d 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Entity/TableTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Entity/TableTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Entity;
+namespace Magento\Framework\Model\ResourceModel\Entity;
 
 class TableTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Entity\Table
+     * @var \Magento\Framework\Model\ResourceModel\Entity\Table
      */
     protected $_model;
 
@@ -21,7 +21,7 @@ class TableTest extends \PHPUnit_Framework_TestCase
         // @codingStandardsIgnoreEnd
 
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->create('Magento\Framework\Model\Resource\Entity\Table', ['config' => $config]);
+            ->create('Magento\Framework\Model\ResourceModel\Entity\Table', ['config' => $config]);
     }
 
     public function testGetTable()
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/IteratorTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/IteratorTest.php
similarity index 83%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/Resource/IteratorTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/IteratorTest.php
index 612eedc23331bcf41dd197dde9188cc8d2fdb172..808ce9113056b3b54a09f751036fbefaa62b9639 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/IteratorTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/IteratorTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource;
+namespace Magento\Framework\Model\ResourceModel;
 
 class IteratorTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Iterator
+     * @var \Magento\Framework\Model\ResourceModel\Iterator
      */
     protected $_model;
 
@@ -22,14 +22,14 @@ class IteratorTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Framework\Model\Resource\Iterator'
+            'Magento\Framework\Model\ResourceModel\Iterator'
         );
     }
 
     public function testWalk()
     {
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Store\Model\Resource\Store\Collection'
+            'Magento\Store\Model\ResourceModel\Store\Collection'
         );
         $this->_model->walk($collection->getSelect(), [[$this, 'walkCallback']]);
         $this->assertGreaterThan(0, $this->_callbackCounter);
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Type/Db/ConnectionFactoryTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryTest.php
similarity index 94%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Type/Db/ConnectionFactoryTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryTest.php
index 9b403c51bdf60697c2990dd77de5bd687b79ef54..84ff6306201d6be927155ed3198d39f9fecceaf8 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Type/Db/ConnectionFactoryTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Type\Db;
+namespace Magento\Framework\Model\ResourceModel\Type\Db;
 
 class ConnectionFactoryTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Type/Db/Pdo/MysqlTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/MysqlTest.php
similarity index 85%
rename from dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Type/Db/Pdo/MysqlTest.php
rename to dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/MysqlTest.php
index 124fc5c6a0fe0131bfa8ed44ee85ad279344c5e6..f57497cd8e906be9002c627b2014c2c2bc0d599f 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/Resource/Type/Db/Pdo/MysqlTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/MysqlTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\Resource\Type\Db\Pdo;
+namespace Magento\Framework\Model\ResourceModel\Type\Db\Pdo;
 
 class MysqlTest extends \PHPUnit_Framework_TestCase
 {
@@ -23,9 +23,9 @@ class MysqlTest extends \PHPUnit_Framework_TestCase
             'dbname' => $db->getSchema(),
             'active' => true,
         ];
-        /** @var \Magento\Framework\Model\Resource\Type\Db\Pdo\Mysql $object */
+        /** @var \Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql $object */
         $object = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Framework\Model\Resource\Type\Db\Pdo\Mysql',
+            'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql',
             ['config' => $config]
         );
 
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceTest.php b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceTest.php
index 69efd85b380ca5d6aed84fcd22a2292ec2921983..961fc60985a5d75572237f08304144e89a3c38d8 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Model/ResourceTest.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Test for \Magento\Framework\Model\Resource
+ * Test for \Magento\Framework\Model\ResourceModel
  *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
@@ -10,14 +10,14 @@ namespace Magento\Framework\Model;
 class ResourceTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_model;
 
     protected function setUp()
     {
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->create('Magento\Framework\App\Resource');
+            ->create('Magento\Framework\App\ResourceConnection');
     }
 
     public function testGetTableName()
@@ -27,7 +27,7 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
         $tableNameOrig = 'store_website';
 
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             ['tablePrefix' => 'prefix_']
         );
 
@@ -51,7 +51,7 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
             [
                 'config' => [
                     'profiler' => [
-                        'class' => 'Magento\Framework\Model\Resource\Db\Profiler',
+                        'class' => 'Magento\Framework\Model\ResourceModel\Db\Profiler',
                         'enabled' => 'true',
                     ],
                     'username' => 'username',
@@ -63,10 +63,10 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        /** @var \Magento\Framework\Model\Resource\Db\Profiler $profiler */
+        /** @var \Magento\Framework\Model\ResourceModel\Db\Profiler $profiler */
         $profiler = $connection->getProfiler();
 
-        $this->assertInstanceOf('Magento\Framework\Model\Resource\Db\Profiler', $profiler);
+        $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\Profiler', $profiler);
         $this->assertTrue($profiler->getEnabled());
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Mview/View/ChangelogTest.php b/dev/tests/integration/testsuite/Magento/Framework/Mview/View/ChangelogTest.php
index 031861080ee3b931ecf370669f4ac918b49e3713..1151450d5c43ae0daf6b37063de76de13966f1c6 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Mview/View/ChangelogTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Mview/View/ChangelogTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Mview\View;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Test Class for \Magento\Framework\Mview\View\Changelog
@@ -18,7 +18,7 @@ class ChangelogTest extends \PHPUnit_Framework_TestCase
     protected $objectManager;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $resource;
 
@@ -40,7 +40,7 @@ class ChangelogTest extends \PHPUnit_Framework_TestCase
     public function setUp()
     {
         $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
-        $this->resource = $this->objectManager->get('Magento\Framework\App\Resource');
+        $this->resource = $this->objectManager->get('Magento\Framework\App\ResourceConnection');
         $this->connection = $this->resource->getConnection();
 
         $this->model = $this->objectManager->create(
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Search/Adapter/Mysql/AdapterTest.php b/dev/tests/integration/testsuite/Magento/Framework/Search/Adapter/Mysql/AdapterTest.php
index 5ff7dc4db8c323bb01c571f64870367f23fef3ed..e5438e32d623e7d69b405a12d59ef85f4dd1f8fc 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Search/Adapter/Mysql/AdapterTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Search/Adapter/Mysql/AdapterTest.php
@@ -368,18 +368,18 @@ class AdapterTest extends \PHPUnit_Framework_TestCase
      */
     public function testCustomFilterableAttribute()
     {
-        /** @var \Magento\Catalog\Model\Resource\Eav\Attribute $attribute */
-        $attribute = $this->objectManager->get('Magento\Catalog\Model\Resource\Eav\Attribute')
+        /** @var \Magento\Catalog\Model\ResourceModel\Eav\Attribute $attribute */
+        $attribute = $this->objectManager->get('Magento\Catalog\Model\ResourceModel\Eav\Attribute')
             ->loadByCode(\Magento\Catalog\Model\Product::ENTITY, 'select_attribute');
-        /** @var \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection $selectOptions */
+        /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection $selectOptions */
         $selectOptions = $this->objectManager
-            ->create('Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection')
+            ->create('Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection')
             ->setAttributeFilter($attribute->getId());
 
         $attribute->loadByCode(\Magento\Catalog\Model\Product::ENTITY, 'multiselect_attribute');
-        /** @var \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection $multiselectOptions */
+        /** @var \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection $multiselectOptions */
         $multiselectOptions = $this->objectManager
-            ->create('Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection')
+            ->create('Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection')
             ->setAttributeFilter($attribute->getId());
 
         $this->requestBuilder->bind('select_attribute', $selectOptions->getLastItem()->getId());
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Search/Adapter/Mysql/Builder/Query/MatchTest.php b/dev/tests/integration/testsuite/Magento/Framework/Search/Adapter/Mysql/Builder/Query/MatchTest.php
index 63096e9894fe57d2efe9aff33a2a3752d57e410a..04c4002b971255e313b7ce7185816b3a20db5582 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Search/Adapter/Mysql/Builder/Query/MatchTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Search/Adapter/Mysql/Builder/Query/MatchTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Search\Adapter\Mysql\Builder\Query;
 
-use Magento\Framework\App\Resource\Config;
+use Magento\Framework\App\ResourceConnection\Config;
 use Magento\Framework\Search\Request\Query\BoolExpression;
 use Magento\Framework\Search\Adapter\Mysql\ScoreBuilder;
 use Magento\TestFramework\Helper\Bootstrap;
@@ -52,8 +52,8 @@ class MatchTest extends \PHPUnit_Framework_TestCase
                 ]
             ]
         );
-        /** @var \Magento\Framework\App\Resource $resource */
-        $resource = $this->objectManager->create('Magento\Framework\App\Resource');
+        /** @var \Magento\Framework\App\ResourceConnection $resource */
+        $resource = $this->objectManager->create('Magento\Framework\App\ResourceConnection');
         /** @var \Magento\Framework\DB\Select $select */
         $select = $resource->getConnection()->select();
         $select->from('someTable');
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Search/_files/filterable_attribute.php b/dev/tests/integration/testsuite/Magento/Framework/Search/_files/filterable_attribute.php
index 993eb2d8c9756e568476d1cda850d776f248f864..c11eee4adee0a278247985e531e0dee84e2c510b 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Search/_files/filterable_attribute.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Search/_files/filterable_attribute.php
@@ -10,9 +10,9 @@ $installer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create
     'Magento\Catalog\Setup\CategorySetup',
     ['resourceName' => 'catalog_setup']
 );
-/** @var $selectAttribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+/** @var $selectAttribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
 $selectAttribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $selectAttribute->setData(
     [
@@ -32,14 +32,14 @@ $selectAttribute->save();
 /* Assign attribute to attribute set */
 $installer->addAttributeToGroup('catalog_product', 'Default', 'General', $selectAttribute->getId());
 
-/** @var $selectOptions \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection */
+/** @var $selectOptions \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection */
 $selectOptions = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection'
+    'Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection'
 );
 $selectOptions->setAttributeFilter($selectAttribute->getId());
 
 $multiselectAttribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $multiselectAttribute->setData(
     [
@@ -59,9 +59,9 @@ $multiselectAttribute->save();
 /* Assign attribute to attribute set */
 $installer->addAttributeToGroup('catalog_product', 'Default', 'General', $multiselectAttribute->getId());
 
-/** @var $multiselectOptions \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection */
+/** @var $multiselectOptions \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection */
 $multiselectOptions = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection'
+    'Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection'
 );
 $multiselectOptions->setAttributeFilter($multiselectAttribute->getId());
 
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Search/_files/filterable_attribute_rollback.php b/dev/tests/integration/testsuite/Magento/Framework/Search/_files/filterable_attribute_rollback.php
index 24cf533ddf5ca4517b325491545b4a0026bb9561..ea17817ed73efd5f99d089aa843b2ede3cb41924 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Search/_files/filterable_attribute_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Search/_files/filterable_attribute_rollback.php
@@ -10,15 +10,15 @@ $installer = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create
     'Magento\Catalog\Setup\CategorySetup',
     ['resourceName' => 'catalog_setup']
 );
-/** @var $attribute \Magento\Catalog\Model\Resource\Eav\Attribute */
+/** @var $attribute \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $attribute->loadByCode(\Magento\Catalog\Model\Product::ENTITY, 'select_attribute');
 
-/** @var $selectOptions \Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection */
+/** @var $selectOptions \Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection */
 $selectOptions = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Eav\Model\Resource\Entity\Attribute\Option\Collection'
+    'Magento\Eav\Model\ResourceModel\Entity\Attribute\Option\Collection'
 );
 $registry = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get('Magento\Framework\Registry');
 
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Search/_files/products_rollback.php b/dev/tests/integration/testsuite/Magento/Framework/Search/_files/products_rollback.php
index f77bb75d4cc2d86e575af5bf4ef617f0aca5266c..da1b4a3f693b3ce75517a081ea76b989187adce4 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Search/_files/products_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Search/_files/products_rollback.php
@@ -10,8 +10,8 @@ $registry = $objectManager->get('Magento\Framework\Registry');
 $registry->unregister('isSecureArea');
 $registry->register('isSecureArea', true);
 
-/** @var \Magento\Catalog\Model\Resource\Product\Collection $collection */
-$collection = $objectManager->create('Magento\Catalog\Model\Resource\Product\Collection');
+/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $collection */
+$collection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
 $collection->addAttributeToSelect('id')->load();
 if ($collection->count() > 0) {
     $collection->delete();
diff --git a/dev/tests/integration/testsuite/Magento/Framework/Session/SaveHandler/DbTableTest.php b/dev/tests/integration/testsuite/Magento/Framework/Session/SaveHandler/DbTableTest.php
index ab25097dbf05e98b058ab0e5b2bd38823792b3a5..7329ddc0ea9a319c1b5f3cf68310edf2e862a551 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/Session/SaveHandler/DbTableTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/Session/SaveHandler/DbTableTest.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Session\SaveHandler;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class DbTableTest extends \PHPUnit_Framework_TestCase
 {
@@ -85,8 +85,8 @@ class DbTableTest extends \PHPUnit_Framework_TestCase
         $this->_objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
         $this->_model = $this->_objectManager->get('Magento\Framework\Session\SaveHandler\DbTable');
 
-        /** @var $resource \Magento\Framework\App\Resource */
-        $resource = $this->_objectManager->get('Magento\Framework\App\Resource');
+        /** @var $resource \Magento\Framework\App\ResourceConnection */
+        $resource = $this->_objectManager->get('Magento\Framework\App\ResourceConnection');
         $this->_connection = $resource->getConnection();
         $this->_sessionTable = $resource->getTableName('session');
 
diff --git a/dev/tests/integration/testsuite/Magento/Framework/TranslateCachingTest.php b/dev/tests/integration/testsuite/Magento/Framework/TranslateCachingTest.php
index b8d5d9ee78e7210f5bdcf32a43341797ea83fb06..26e69fe344b42cb4b8104940ff871e51de36e1d5 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/TranslateCachingTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/TranslateCachingTest.php
@@ -47,8 +47,8 @@ class TranslateCachingTest extends \PHPUnit_Framework_TestCase
         $model->loadData(\Magento\Framework\App\Area::AREA_FRONTEND); // this is supposed to cache the fixture
         $this->assertEquals('Fixture Db Translation', new Phrase('Fixture String'));
 
-        /** @var \Magento\Translation\Model\Resource\StringUtils $translateString */
-        $translateString = $this->objectManager->create('Magento\Translation\Model\Resource\StringUtils');
+        /** @var \Magento\Translation\Model\ResourceModel\StringUtils $translateString */
+        $translateString = $this->objectManager->create('Magento\Translation\Model\ResourceModel\StringUtils');
         $translateString->saveTranslate('Fixture String', 'New Db Translation');
 
         $this->assertEquals(
diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/Design/Fallback/RulePoolTest.php b/dev/tests/integration/testsuite/Magento/Framework/View/Design/Fallback/RulePoolTest.php
index cb144a7c2d95654901a2e492eafe831e16e11396..9e96a23a0bf71b9ceaa8474ac42d361a0ea0b3e8 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/View/Design/Fallback/RulePoolTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/View/Design/Fallback/RulePoolTest.php
@@ -37,8 +37,8 @@ class RulePoolTest extends \PHPUnit_Framework_TestCase
         );
         $registration->register();
         $this->model = $objectManager->create('Magento\Framework\View\Design\Fallback\RulePool');
-        /** @var \Magento\Theme\Model\Resource\Theme\Collection $collection */
-        $collection = $objectManager->create('Magento\Theme\Model\Resource\Theme\Collection');
+        /** @var \Magento\Theme\Model\ResourceModel\Theme\Collection $collection */
+        $collection = $objectManager->create('Magento\Theme\Model\ResourceModel\Theme\Collection');
         /** @var \Magento\Theme\Model\Theme $theme */
         $theme = $collection->getThemeByFullPath('frontend/Vendor_ViewTest/custom_theme');
 
diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/Design/Theme/LabelTest.php b/dev/tests/integration/testsuite/Magento/Framework/View/Design/Theme/LabelTest.php
index 64586056f5e694bb1349ab6838fa10affafcdaae..2bb91af1c4873d3d21fb8c4dc1db04895a8ef2f9 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/View/Design/Theme/LabelTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/View/Design/Theme/LabelTest.php
@@ -24,7 +24,7 @@ class LabelTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetLabelsCollection()
     {
-        /** @var $expectedCollection \Magento\Theme\Model\Resource\Theme\Collection */
+        /** @var $expectedCollection \Magento\Theme\Model\ResourceModel\Theme\Collection */
         $expectedCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
             'Magento\Framework\View\Design\Theme\Label\ListInterface'
         );
diff --git a/dev/tests/integration/testsuite/Magento/Framework/View/Layout/MergeTest.php b/dev/tests/integration/testsuite/Magento/Framework/View/Layout/MergeTest.php
index f92b10661e48ac13dd0cebf5b9f2f8b66f1e70a7..95a2873a892324e6509a98dad461f15c04f7f57c 100644
--- a/dev/tests/integration/testsuite/Magento/Framework/View/Layout/MergeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Framework/View/Layout/MergeTest.php
@@ -80,7 +80,7 @@ class MergeTest extends \PHPUnit_Framework_TestCase
         $scopeResolver = $this->getMockForAbstractClass('Magento\Framework\Url\ScopeResolverInterface');
         $scopeResolver->expects($this->once())->method('getScope')->with(null)->will($this->returnValue($this->scope));
 
-        $this->_resource = $this->getMock('Magento\Widget\Model\Resource\Layout\Update', [], [], '', false);
+        $this->_resource = $this->getMock('Magento\Widget\Model\ResourceModel\Layout\Update', [], [], '', false);
 
         $this->_appState = $this->getMock('Magento\Framework\App\State', [], [], '', false);
 
diff --git a/dev/tests/integration/testsuite/Magento/GroupedProduct/Model/Resource/Product/Type/Grouped/AssociatedProductsCollectionTest.php b/dev/tests/integration/testsuite/Magento/GroupedProduct/Model/ResourceModel/Product/Type/Grouped/AssociatedProductsCollectionTest.php
similarity index 78%
rename from dev/tests/integration/testsuite/Magento/GroupedProduct/Model/Resource/Product/Type/Grouped/AssociatedProductsCollectionTest.php
rename to dev/tests/integration/testsuite/Magento/GroupedProduct/Model/ResourceModel/Product/Type/Grouped/AssociatedProductsCollectionTest.php
index bee5e691d76d85b59bedb2c0e8df0b5b8c62368d..3799c1301f5bd151e3ebab50b987a0e630d2d640 100644
--- a/dev/tests/integration/testsuite/Magento/GroupedProduct/Model/Resource/Product/Type/Grouped/AssociatedProductsCollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/GroupedProduct/Model/ResourceModel/Product/Type/Grouped/AssociatedProductsCollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\GroupedProduct\Model\Resource\Product\Type\Grouped;
+namespace Magento\GroupedProduct\Model\ResourceModel\Product\Type\Grouped;
 
 class AssociatedProductsCollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -23,9 +23,8 @@ class AssociatedProductsCollectionTest extends \PHPUnit_Framework_TestCase
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
         $objectManager->get('Magento\Framework\Registry')->register('current_product', $product);
 
-        /** @var \Magento\GroupedProduct\Model\Resource\Product\Type\Grouped\AssociatedProductsCollection $collection */
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\GroupedProduct\Model\Resource\Product\Type\Grouped\AssociatedProductsCollection'
+            'Magento\GroupedProduct\Model\ResourceModel\Product\Type\Grouped\AssociatedProductsCollection'
         );
 
         $this->assertEquals(['simple-1', 'virtual-product'], $collection->getColumnValues('sku'));
diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Export/AbstractStubEntity.php b/dev/tests/integration/testsuite/Magento/ImportExport/Model/Export/AbstractStubEntity.php
index 8cfb1a015e9cb87964c68534dbeda3faaf7d28b6..b49f87da76a84875fbf0caf1648717839d7d52cd 100644
--- a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Export/AbstractStubEntity.php
+++ b/dev/tests/integration/testsuite/Magento/ImportExport/Model/Export/AbstractStubEntity.php
@@ -15,7 +15,7 @@ abstract class AbstractStubEntity extends \Magento\ImportExport\Model\Export\Abs
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\ImportExport\Model\Export\Factory $collectionFactory,
-        \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $resourceColFactory,
+        \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $resourceColFactory,
         array $data = []
     ) {
         parent::__construct($scopeConfig, $storeManager, $collectionFactory, $resourceColFactory, $data);
diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Export/Entity/AbstractEavTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Model/Export/Entity/AbstractEavTest.php
index 0b829ac3bb2f5480019b4079291691681dc8a2e5..9c68d11c96b871509b19f9d60c562069f3b22338 100644
--- a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Export/Entity/AbstractEavTest.php
+++ b/dev/tests/integration/testsuite/Magento/ImportExport/Model/Export/Entity/AbstractEavTest.php
@@ -36,7 +36,7 @@ class AbstractEavTest extends \PHPUnit_Framework_TestCase
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
 
         $customerAttributes = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Attribute\Collection'
+            'Magento\Customer\Model\ResourceModel\Attribute\Collection'
         );
 
         $this->_model = $this->getMockForAbstractClass(
@@ -63,7 +63,7 @@ class AbstractEavTest extends \PHPUnit_Framework_TestCase
             $objectManager->get('Magento\Framework\App\Config\ScopeConfigInterface'),
             $objectManager->get('Magento\Store\Model\StoreManager'),
             $objectManager->get('Magento\ImportExport\Model\Export\Factory'),
-            $objectManager->get('Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory'),
+            $objectManager->get('Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory'),
             $objectManager->get('Magento\Framework\Stdlib\DateTime\TimezoneInterface'),
             $objectManager->get('Magento\Eav\Model\Config')
         );
@@ -105,9 +105,9 @@ class AbstractEavTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetAttributeOptions()
     {
-        /** @var $attributeCollection \Magento\Customer\Model\Resource\Attribute\Collection */
+        /** @var $attributeCollection \Magento\Customer\Model\ResourceModel\Attribute\Collection */
         $attributeCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Attribute\Collection'
+            'Magento\Customer\Model\ResourceModel\Attribute\Collection'
         );
         $attributeCollection->addFieldToFilter('attribute_code', 'gender');
         /** @var $attribute \Magento\Customer\Model\Attribute */
@@ -129,9 +129,9 @@ class AbstractEavTest extends \PHPUnit_Framework_TestCase
      */
     protected function _getSkippedAttributes()
     {
-        /** @var $attributeCollection \Magento\Customer\Model\Resource\Attribute\Collection */
+        /** @var $attributeCollection \Magento\Customer\Model\ResourceModel\Attribute\Collection */
         $attributeCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Attribute\Collection'
+            'Magento\Customer\Model\ResourceModel\Attribute\Collection'
         );
         $attributeCollection->addFieldToFilter('attribute_code', ['in' => self::$_skippedAttributes]);
         $skippedAttributes = [];
diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Export/EntityAbstractTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Model/Export/EntityAbstractTest.php
index 0e1fc0fe1b2abe6ff77f936ec20833d2270bfb69..64d5651b2c8cc02ada381f29003abc0b012c70c7 100644
--- a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Export/EntityAbstractTest.php
+++ b/dev/tests/integration/testsuite/Magento/ImportExport/Model/Export/EntityAbstractTest.php
@@ -30,7 +30,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
                 $objectManager->get('Magento\Framework\App\Config\ScopeConfigInterface'),
                 $objectManager->get('Magento\Store\Model\StoreManager'),
                 $objectManager->get('Magento\ImportExport\Model\Export\Factory'),
-                $objectManager->get('Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory')
+                $objectManager->get('Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory')
             ]
         );
     }
@@ -80,7 +80,7 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
     public function testFilterAttributeCollection()
     {
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Attribute\Collection'
+            'Magento\Customer\Model\ResourceModel\Attribute\Collection'
         );
         $collection = $this->_model->filterAttributeCollection($collection);
         /**
@@ -111,7 +111,7 @@ abstract class Stub_Magento_ImportExport_Model_Export_AbstractEntity
         \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
         \Magento\Store\Model\StoreManagerInterface $storeManager,
         \Magento\ImportExport\Model\Export\Factory $collectionFactory,
-        \Magento\ImportExport\Model\Resource\CollectionByPagesIteratorFactory $resourceColFactory,
+        \Magento\ImportExport\Model\ResourceModel\CollectionByPagesIteratorFactory $resourceColFactory,
         array $data = []
     ) {
         parent::__construct($scopeConfig, $storeManager, $collectionFactory, $resourceColFactory, $data);
diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Import/Entity/EavAbstractTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Model/Import/Entity/EavAbstractTest.php
index 27a887c88d2d7a6e0f7f539d8ba065a3260a50fa..4965b63f4658703f69a6619868c26994dfeaca30 100644
--- a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Import/Entity/EavAbstractTest.php
+++ b/dev/tests/integration/testsuite/Magento/ImportExport/Model/Import/Entity/EavAbstractTest.php
@@ -39,9 +39,9 @@ class EavAbstractTest extends \PHPUnit_Framework_TestCase
     {
         $indexAttributeCode = 'gender';
 
-        /** @var $attributeCollection \Magento\Customer\Model\Resource\Attribute\Collection */
+        /** @var $attributeCollection \Magento\Customer\Model\ResourceModel\Attribute\Collection */
         $attributeCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Attribute\Collection'
+            'Magento\Customer\Model\ResourceModel\Attribute\Collection'
         );
         $attributeCollection->addFieldToFilter(
             'attribute_code',
diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Import/EntityAbstractTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Model/Import/EntityAbstractTest.php
index 7098903cb7e8eaa5a51e91c7d71df237093bb336..85ed510bd1df74d6b5d095df99be454f4bbeee9e 100644
--- a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Import/EntityAbstractTest.php
+++ b/dev/tests/integration/testsuite/Magento/ImportExport/Model/Import/EntityAbstractTest.php
@@ -36,8 +36,8 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
                 $objectManager->get('Magento\Framework\Stdlib\StringUtils'),
                 $objectManager->get('Magento\Framework\App\Config\ScopeConfigInterface'),
                 $objectManager->get('Magento\ImportExport\Model\ImportFactory'),
-                $objectManager->get('Magento\ImportExport\Model\Resource\Helper'),
-                $objectManager->get('Magento\Framework\App\Resource'),
+                $objectManager->get('Magento\ImportExport\Model\ResourceModel\Helper'),
+                $objectManager->get('Magento\Framework\App\ResourceConnection'),
                 $objectManager->get(
                     'Magento\ImportExport\Model\Import\ErrorProcessing\ProcessingErrorAggregatorInterface'
                 )
@@ -58,8 +58,8 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
         $method->setAccessible(true);
         $method->invoke($model);
 
-        /** @var $dataSourceModel \Magento\ImportExport\Model\Resource\Import\Data */
-        $dataSourceModel = $objectManager->get('Magento\ImportExport\Model\Resource\Import\Data');
+        /** @var $dataSourceModel \Magento\ImportExport\Model\ResourceModel\Import\Data */
+        $dataSourceModel = $objectManager->get('Magento\ImportExport\Model\ResourceModel\Import\Data');
         $this->assertCount(1, $dataSourceModel->getIterator());
 
         $bunch = $dataSourceModel->getNextBunch();
diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Model/ImportTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Model/ImportTest.php
index cdc7979569f1b9cbe53ce3e9e14a961757a03815..e0123bcdf4b76b4b8d65f65a6213c183d4f03e34 100644
--- a/dev/tests/integration/testsuite/Magento/ImportExport/Model/ImportTest.php
+++ b/dev/tests/integration/testsuite/Magento/ImportExport/Model/ImportTest.php
@@ -80,9 +80,9 @@ class ImportTest extends \PHPUnit_Framework_TestCase
      */
     public function testImportSource()
     {
-        /** @var $customersCollection \Magento\Customer\Model\Resource\Customer\Collection */
+        /** @var $customersCollection \Magento\Customer\Model\ResourceModel\Customer\Collection */
         $customersCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Customer\Model\Resource\Customer\Collection'
+            'Magento\Customer\Model\ResourceModel\Customer\Collection'
         );
 
         $existCustomersCount = count($customersCollection->load());
diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Resource/Import/DataTest.php b/dev/tests/integration/testsuite/Magento/ImportExport/Model/ResourceModel/Import/DataTest.php
similarity index 92%
rename from dev/tests/integration/testsuite/Magento/ImportExport/Model/Resource/Import/DataTest.php
rename to dev/tests/integration/testsuite/Magento/ImportExport/Model/ResourceModel/Import/DataTest.php
index 536953c1baa393134334366004b53c9b45781ff7..f720e17564da65bb456a495465e9d870dc535631 100644
--- a/dev/tests/integration/testsuite/Magento/ImportExport/Model/Resource/Import/DataTest.php
+++ b/dev/tests/integration/testsuite/Magento/ImportExport/Model/ResourceModel/Import/DataTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\ImportExport\Model\Resource\Import;
+namespace Magento\ImportExport\Model\ResourceModel\Import;
 
 /**
  * Test Import Data resource model
@@ -13,7 +13,7 @@ namespace Magento\ImportExport\Model\Resource\Import;
 class DataTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\ImportExport\Model\Resource\Import\Data
+     * @var \Magento\ImportExport\Model\ResourceModel\Import\Data
      */
     protected $_model;
 
@@ -22,7 +22,7 @@ class DataTest extends \PHPUnit_Framework_TestCase
         parent::setUp();
 
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\ImportExport\Model\Resource\Import\Data'
+            'Magento\ImportExport\Model\ResourceModel\Import\Data'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/ImportExport/_files/import_data.php b/dev/tests/integration/testsuite/Magento/ImportExport/_files/import_data.php
index e6a0af52c16680e607f86032a3b59199a59cc808..7243b9101dabb240dbda0f556b29896bd2bbbbbc 100644
--- a/dev/tests/integration/testsuite/Magento/ImportExport/_files/import_data.php
+++ b/dev/tests/integration/testsuite/Magento/ImportExport/_files/import_data.php
@@ -104,7 +104,7 @@ $bunches = [
 ];
 
 $importDataResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\ImportExport\Model\Resource\Import\Data'
+    'Magento\ImportExport\Model\ResourceModel\Import\Data'
 );
 
 foreach ($bunches as $bunch) {
diff --git a/dev/tests/integration/testsuite/Magento/Integration/Model/Resource/IntegrationTest.php b/dev/tests/integration/testsuite/Magento/Integration/Model/ResourceModel/IntegrationTest.php
similarity index 92%
rename from dev/tests/integration/testsuite/Magento/Integration/Model/Resource/IntegrationTest.php
rename to dev/tests/integration/testsuite/Magento/Integration/Model/ResourceModel/IntegrationTest.php
index 1ddce9d8b615802902e9afeaf939c2536542874f..fce48b320a35b7e4662f0da9dc3adc31e6aa7270 100644
--- a/dev/tests/integration/testsuite/Magento/Integration/Model/Resource/IntegrationTest.php
+++ b/dev/tests/integration/testsuite/Magento/Integration/Model/ResourceModel/IntegrationTest.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Integration\Model\Resource;
+namespace Magento\Integration\Model\ResourceModel;
 
 /**
- * Integration test for \Magento\Integration\Model\Resource\Integration
+ * Integration test for \Magento\Integration\Model\ResourceModel\Integration
  */
 class IntegrationTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/dev/tests/integration/testsuite/Magento/Multishipping/Block/Checkout/AddressesTest.php b/dev/tests/integration/testsuite/Magento/Multishipping/Block/Checkout/AddressesTest.php
index 8b6079125f5760362c6a28ae4148639ec25d7c7d..2049341baf3063e81111177feadd8ff03f50b90f 100644
--- a/dev/tests/integration/testsuite/Magento/Multishipping/Block/Checkout/AddressesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Multishipping/Block/Checkout/AddressesTest.php
@@ -37,8 +37,8 @@ class AddressesTest extends \PHPUnit_Framework_TestCase
         $customerSession = $this->_objectManager->get('Magento\Customer\Model\Session');
         $customerSession->setCustomerData($customerData);
 
-        /** @var \Magento\Quote\Model\Resource\Quote\Collection $quoteCollection */
-        $quoteCollection = $this->_objectManager->get('Magento\Quote\Model\Resource\Quote\Collection');
+        /** @var \Magento\Quote\Model\ResourceModel\Quote\Collection $quoteCollection */
+        $quoteCollection = $this->_objectManager->get('Magento\Quote\Model\ResourceModel\Quote\Collection');
         /** @var $quote \Magento\Quote\Model\Quote */
         $quote = $quoteCollection->getLastItem();
 
diff --git a/dev/tests/integration/testsuite/Magento/Newsletter/Model/Resource/Problem/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Newsletter/Model/ResourceModel/Problem/CollectionTest.php
similarity index 89%
rename from dev/tests/integration/testsuite/Magento/Newsletter/Model/Resource/Problem/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Newsletter/Model/ResourceModel/Problem/CollectionTest.php
index 36bfc92c33744a4f3c08251924cac9b326014d9c..66ba92b47b37e07a1343fbbf9648f6e6804a603d 100644
--- a/dev/tests/integration/testsuite/Magento/Newsletter/Model/Resource/Problem/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Newsletter/Model/ResourceModel/Problem/CollectionTest.php
@@ -4,21 +4,21 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Newsletter\Model\Resource\Problem;
+namespace Magento\Newsletter\Model\ResourceModel\Problem;
 
 use Magento\TestFramework\Helper\Bootstrap;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Newsletter\Model\Resource\Problem\Collection
+     * @var \Magento\Newsletter\Model\ResourceModel\Problem\Collection
      */
     protected $_collection;
 
     protected function setUp()
     {
         $this->_collection = Bootstrap::getObjectManager()
-            ->create('Magento\Newsletter\Model\Resource\Problem\Collection');
+            ->create('Magento\Newsletter\Model\ResourceModel\Problem\Collection');
     }
 
     /**
diff --git a/dev/tests/integration/testsuite/Magento/Newsletter/Model/Resource/Subscriber/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Newsletter/Model/ResourceModel/Subscriber/CollectionTest.php
similarity index 84%
rename from dev/tests/integration/testsuite/Magento/Newsletter/Model/Resource/Subscriber/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Newsletter/Model/ResourceModel/Subscriber/CollectionTest.php
index ffc389d1b8ec212904c8798a078b1ccab5f7efdc..a3e6b5d8ff986a4c7ab696850dcc358fa2e83d2d 100644
--- a/dev/tests/integration/testsuite/Magento/Newsletter/Model/Resource/Subscriber/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Newsletter/Model/ResourceModel/Subscriber/CollectionTest.php
@@ -4,19 +4,19 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Newsletter\Model\Resource\Subscriber;
+namespace Magento\Newsletter\Model\ResourceModel\Subscriber;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Newsletter\Model\Resource\Subscriber\Collection
+     * @var \Magento\Newsletter\Model\ResourceModel\Subscriber\Collection
      */
     protected $_collectionModel;
 
     protected function setUp()
     {
         $this->_collectionModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->create('Magento\Newsletter\Model\Resource\Subscriber\Collection');
+            ->create('Magento\Newsletter\Model\ResourceModel\Subscriber\Collection');
     }
 
     /**
diff --git a/dev/tests/integration/testsuite/Magento/Newsletter/Model/Resource/SubscriberTest.php b/dev/tests/integration/testsuite/Magento/Newsletter/Model/ResourceModel/SubscriberTest.php
similarity index 90%
rename from dev/tests/integration/testsuite/Magento/Newsletter/Model/Resource/SubscriberTest.php
rename to dev/tests/integration/testsuite/Magento/Newsletter/Model/ResourceModel/SubscriberTest.php
index 7da705304e59761ffb9d46e2c4477e781817a468..77e8427aed65901f0c50b3f38a7194f553db61fd 100644
--- a/dev/tests/integration/testsuite/Magento/Newsletter/Model/Resource/SubscriberTest.php
+++ b/dev/tests/integration/testsuite/Magento/Newsletter/Model/ResourceModel/SubscriberTest.php
@@ -4,21 +4,21 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Newsletter\Model\Resource;
+namespace Magento\Newsletter\Model\ResourceModel;
 
 use Magento\TestFramework\Helper\Bootstrap;
 
 class SubscriberTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Newsletter\Model\Resource\Subscriber
+     * @var \Magento\Newsletter\Model\ResourceModel\Subscriber
      */
     protected $_resourceModel;
 
     protected function setUp()
     {
         $this->_resourceModel = Bootstrap::getObjectManager()
-            ->create('Magento\Newsletter\Model\Resource\Subscriber');
+            ->create('Magento\Newsletter\Model\ResourceModel\Subscriber');
     }
 
     /**
diff --git a/dev/tests/integration/testsuite/Magento/Newsletter/_files/subscribers_rollback.php b/dev/tests/integration/testsuite/Magento/Newsletter/_files/subscribers_rollback.php
index 3d46e8e781a4280b1ded836a904fb61fd2e570c3..aa65946b04d0ad6194be0644011bea8d0c48c34a 100644
--- a/dev/tests/integration/testsuite/Magento/Newsletter/_files/subscribers_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Newsletter/_files/subscribers_rollback.php
@@ -12,7 +12,7 @@ $registry->unregister('isSecureArea');
 $registry->register('isSecureArea', true);
 
 /** @var Collection $collection */
-$subscriberCollection =  $objectManager->get(\Magento\Newsletter\Model\Resource\Subscriber\Collection::class);
+$subscriberCollection =  $objectManager->get(\Magento\Newsletter\Model\ResourceModel\Subscriber\Collection::class);
 foreach ($subscriberCollection as $subscriber) {
     /** @var Magento\Newsletter\Model\Subscriber $subscriber */
     $subscriber->delete();
diff --git a/dev/tests/integration/testsuite/Magento/Payment/Observer/UpdateOrderStatusForPaymentMethodsObserverTest.php b/dev/tests/integration/testsuite/Magento/Payment/Observer/UpdateOrderStatusForPaymentMethodsObserverTest.php
index 64103c7649af52b1b05e58ebe65f10239915260d..b6687eaeb973c8d6f81b644cfdb0e570daa26b11 100644
--- a/dev/tests/integration/testsuite/Magento/Payment/Observer/UpdateOrderStatusForPaymentMethodsObserverTest.php
+++ b/dev/tests/integration/testsuite/Magento/Payment/Observer/UpdateOrderStatusForPaymentMethodsObserverTest.php
@@ -65,8 +65,8 @@ class UpdateOrderStatusForPaymentMethodsObserverTest extends \PHPUnit_Framework_
             \Magento\Store\Model\ScopeInterface::SCOPE_STORE
         );
 
-        /** @var \Magento\Config\Model\Resource\Config $config */
-        $config = $this->_objectManager->get('Magento\Config\Model\Resource\Config');
+        /** @var \Magento\Config\Model\ResourceModel\Config $config */
+        $config = $this->_objectManager->get('Magento\Config\Model\ResourceModel\Config');
         $config->saveConfig(
             'payment/checkmo/order_status',
             $statusCode,
@@ -103,8 +103,8 @@ class UpdateOrderStatusForPaymentMethodsObserverTest extends \PHPUnit_Framework_
     {
         $statusCode = 'custom_new_status';
 
-        /** @var \Magento\Config\Model\Resource\Config $config */
-        $config = $this->_objectManager->get('Magento\Config\Model\Resource\Config');
+        /** @var \Magento\Config\Model\ResourceModel\Config $config */
+        $config = $this->_objectManager->get('Magento\Config\Model\ResourceModel\Config');
         $config->saveConfig('payment/checkmo/order_status', $statusCode, 'default', 0);
 
         $this->_resetConfig();
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Block/Adminhtml/Billing/Agreement/View/Tab/InfoTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Block/Adminhtml/Billing/Agreement/View/Tab/InfoTest.php
index 3ba767a303e7d1d14f90ac118ed5d424cd1fe95d..1535031841a66672c074bc1dd7c967dfeb3272c5 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/Block/Adminhtml/Billing/Agreement/View/Tab/InfoTest.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/Block/Adminhtml/Billing/Agreement/View/Tab/InfoTest.php
@@ -13,9 +13,9 @@ class InfoTest extends \Magento\TestFramework\TestCase\AbstractBackendController
      */
     public function testCustomerGridAction()
     {
-        /** @var \Magento\Paypal\Model\Resource\Billing\Agreement\Collection $billingAgreementCollection */
+        /** @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection $billingAgreementCollection */
         $billingAgreementCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Paypal\Model\Resource\Billing\Agreement\Collection'
+            'Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection'
         )->load();
         $agreementId = $billingAgreementCollection->getFirstItem()->getId();
         $this->dispatch('backend/paypal/billing_agreement/view/agreement/' . $agreementId);
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Block/Billing/Agreement/ViewTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Block/Billing/Agreement/ViewTest.php
index 8de01efa29b17c4bf1c449941b60480dd8db7167..bd1615770fe29049b14b43d7142bc96f2517c0b4 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/Block/Billing/Agreement/ViewTest.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/Block/Billing/Agreement/ViewTest.php
@@ -60,9 +60,9 @@ class ViewTest extends \Magento\TestFramework\TestCase\AbstractBackendController
         $customerSession = Bootstrap::getObjectManager()->create('Magento\Customer\Model\Session');
         $customerSession->setCustomerId($customerId);
 
-        /** @var \Magento\Paypal\Model\Resource\Billing\Agreement\Collection $billingAgreementCollection */
+        /** @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection $billingAgreementCollection */
         $billingAgreementCollection = Bootstrap::getObjectManager()->create(
-            'Magento\Paypal\Model\Resource\Billing\Agreement\Collection'
+            'Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection'
         );
         /** @var \Magento\Paypal\Model\Billing\Agreement $billingAgreement */
         $billingAgreement = $billingAgreementCollection->getFirstItem();
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Block/Payment/Form/Billing/AgreementTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Block/Payment/Form/Billing/AgreementTest.php
index 97b2e5e7e6119dc66a5ce81a5a12f85c0e5b41ed..4f10586971d06e459d7a27e1481232f41c9b09b3 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/Block/Payment/Form/Billing/AgreementTest.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/Block/Payment/Form/Billing/AgreementTest.php
@@ -15,7 +15,7 @@ class AgreementTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $quote = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Quote\Model\Resource\Quote\Collection'
+            'Magento\Quote\Model\ResourceModel\Quote\Collection'
         )->getFirstItem();
         /** @var \Magento\Framework\View\LayoutInterface $layout */
         $layout = $this->getMockBuilder('Magento\Framework\View\LayoutInterface')
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/ViewTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/ViewTest.php
index bfa57e97cf3ac2e34749182cd0affd12d4f3908b..cfbd3c9284750375c4ec7f23f19fcf9379d23eae 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/ViewTest.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/Controller/Adminhtml/Billing/Agreement/ViewTest.php
@@ -25,9 +25,9 @@ class ViewTest extends \Magento\TestFramework\TestCase\AbstractBackendController
      */
     public function testAclHasAccess()
     {
-        /** @var \Magento\Paypal\Model\Resource\Billing\Agreement\Collection $billingAgreementCollection */
+        /** @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection $billingAgreementCollection */
         $billingAgreementCollection = Bootstrap::getObjectManager()->create(
-            'Magento\Paypal\Model\Resource\Billing\Agreement\Collection'
+            'Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection'
         );
         $agreementId = $billingAgreementCollection->getFirstItem()->getId();
         $this->uri = $this->uri . '/agreement/' . $agreementId;
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Controller/Billing/AgreementTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Controller/Billing/AgreementTest.php
index 11d6deb5180aaf8c10c058384558906cac83d82c..4a606bea53b3769508525f3314b38937e6b3ca69 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/Controller/Billing/AgreementTest.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/Controller/Billing/AgreementTest.php
@@ -109,9 +109,9 @@ class AgreementTest extends \Magento\TestFramework\TestCase\AbstractController
         $billingAgreementController->execute();
 
         /** Ensure that billing agreement record was created in the DB */
-        /** @var \Magento\Paypal\Model\Resource\Billing\Agreement\Collection $billingAgreementCollection */
+        /** @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection $billingAgreementCollection */
         $billingAgreementCollection = $objectManager->create(
-            'Magento\Paypal\Model\Resource\Billing\Agreement\Collection'
+            'Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection'
         );
         /** @var \Magento\Paypal\Model\Billing\Agreement $createdBillingAgreement */
         $createdBillingAgreement = $billingAgreementCollection->getLastItem();
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Controller/ExpressTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Controller/ExpressTest.php
index 59b3cca4eaa66375c6fdf35ddbb71c8e8d29f739..5320205fdbbff3345ef124690f6a13846c7f504a 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/Controller/ExpressTest.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/Controller/ExpressTest.php
@@ -51,7 +51,7 @@ class ExpressTest extends \Magento\TestFramework\TestCase\AbstractController
             $order->getQuoteId()
         );
         /** @var $paypalSession \Magento\Framework\Session\Generic */
-        $paypalSession = $this->_objectManager->get('Magento\Framework\Session\Generic');
+        $paypalSession = $this->_objectManager->get('Magento\Paypal\Model\Session');
         $paypalSession->setExpressCheckoutToken('token');
 
         $this->dispatch('paypal/express/cancel');
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Model/Express/CheckoutTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Model/Express/CheckoutTest.php
index bcf4a4ef8bec419fdb7123874b01740a4c8264bf..e33b87137264dbd576f2db87a2268833ffc55057 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/Model/Express/CheckoutTest.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/Model/Express/CheckoutTest.php
@@ -255,8 +255,8 @@ class CheckoutTest extends \PHPUnit_Framework_TestCase
      */
     protected function _getFixtureQuote()
     {
-        /** @var \Magento\Quote\Model\Resource\Quote\Collection $quoteCollection */
-        $quoteCollection = $this->_objectManager->create('Magento\Quote\Model\Resource\Quote\Collection');
+        /** @var \Magento\Quote\Model\ResourceModel\Quote\Collection $quoteCollection */
+        $quoteCollection = $this->_objectManager->create('Magento\Quote\Model\ResourceModel\Quote\Collection');
 
         return $quoteCollection->getLastItem();
     }
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreementTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreementTest.php
index 4838597ff832da9ebb67acb254fd60d86e8d925b..01463b6f892bf63af8644db7bcf199df6f9f0760 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreementTest.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/Model/Payment/Method/Billing/AbstractAgreementTest.php
@@ -30,7 +30,7 @@ class AbstractAgreementTest extends \PHPUnit_Framework_TestCase
     public function testIsActive()
     {
         $quote = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Quote\Model\Resource\Quote\Collection'
+            'Magento\Quote\Model\ResourceModel\Quote\Collection'
         )->getFirstItem();
         $this->assertTrue($this->_model->isAvailable($quote));
     }
@@ -41,9 +41,9 @@ class AbstractAgreementTest extends \PHPUnit_Framework_TestCase
      */
     public function testAssignData()
     {
-        /** @var \Magento\Quote\Model\Resource\Quote\Collection $collection */
+        /** @var \Magento\Quote\Model\ResourceModel\Quote\Collection $collection */
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Quote\Model\Resource\Quote\Collection'
+            'Magento\Quote\Model\ResourceModel\Quote\Collection'
         );
         /** @var \Magento\Quote\Model\Quote $quote */
         $quote = $collection->getFirstItem();
@@ -56,7 +56,7 @@ class AbstractAgreementTest extends \PHPUnit_Framework_TestCase
         );
         $this->_model->setData('info_instance', $info);
         $billingAgreement = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Paypal\Model\Resource\Billing\Agreement\Collection'
+            'Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection'
         )->getFirstItem();
         $data = [AbstractAgreement::TRANSPORT_BILLING_AGREEMENT_ID => $billingAgreement->getId()];
         $this->_model->assignData($data);
diff --git a/dev/tests/integration/testsuite/Magento/Paypal/Model/Resource/Billing/Agreement/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Paypal/Model/ResourceModel/Billing/Agreement/CollectionTest.php
similarity index 85%
rename from dev/tests/integration/testsuite/Magento/Paypal/Model/Resource/Billing/Agreement/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Paypal/Model/ResourceModel/Billing/Agreement/CollectionTest.php
index 270b9b2534cd04c77d0b30630574c4b8e41fab3c..220770bcd4f4bade4ec832e2ab148e19e9cefc51 100644
--- a/dev/tests/integration/testsuite/Magento/Paypal/Model/Resource/Billing/Agreement/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Paypal/Model/ResourceModel/Billing/Agreement/CollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Paypal\Model\Resource\Billing\Agreement;
+namespace Magento\Paypal\Model\ResourceModel\Billing\Agreement;
 
 use Magento\TestFramework\Helper\Bootstrap;
 
@@ -15,9 +15,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
      */
     public function testAddCustomerDetails()
     {
-        /** @var \Magento\Paypal\Model\Resource\Billing\Agreement\Collection $billingAgreementCollection */
+        /** @var \Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection $billingAgreementCollection */
         $billingAgreementCollection = Bootstrap::getObjectManager()->create(
-            'Magento\Paypal\Model\Resource\Billing\Agreement\Collection'
+            'Magento\Paypal\Model\ResourceModel\Billing\Agreement\Collection'
         );
 
         $billingAgreementCollection->addCustomerDetails();
diff --git a/dev/tests/integration/testsuite/Magento/Reports/Model/Resource/Report/Product/Viewed/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Reports/Model/ResourceModel/Report/Product/Viewed/CollectionTest.php
similarity index 96%
rename from dev/tests/integration/testsuite/Magento/Reports/Model/Resource/Report/Product/Viewed/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Reports/Model/ResourceModel/Report/Product/Viewed/CollectionTest.php
index c0dd230f922cd0e9d63111f17d5a3a1fafc92f43..ba45d1c0ba1e1430aa53503e8a7a0212004cb91e 100644
--- a/dev/tests/integration/testsuite/Magento/Reports/Model/Resource/Report/Product/Viewed/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Reports/Model/ResourceModel/Report/Product/Viewed/CollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Reports\Model\Resource\Report\Product\Viewed;
+namespace Magento\Reports\Model\ResourceModel\Report\Product\Viewed;
 
 /**
  * @magentoAppArea adminhtml
@@ -11,14 +11,14 @@ namespace Magento\Reports\Model\Resource\Report\Product\Viewed;
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Reports\Model\Resource\Report\Product\Viewed\Collection
+     * @var \Magento\Reports\Model\ResourceModel\Report\Product\Viewed\Collection
      */
     private $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Reports\Model\Resource\Report\Product\Viewed\Collection'
+            'Magento\Reports\Model\ResourceModel\Report\Product\Viewed\Collection'
         );
         $this->_collection->setPeriod('day')
             ->setDateRange(null, null)
diff --git a/dev/tests/integration/testsuite/Magento/Reports/_files/orders.php b/dev/tests/integration/testsuite/Magento/Reports/_files/orders.php
index 0bad490f4512049a56c5f5847c6d99b115760fe4..8e26dd74ff9e8735a589fd2a903279e7e3e02c36 100644
--- a/dev/tests/integration/testsuite/Magento/Reports/_files/orders.php
+++ b/dev/tests/integration/testsuite/Magento/Reports/_files/orders.php
@@ -7,8 +7,8 @@
 require __DIR__ . '/../../../Magento/Sales/_files/order.php';
 
 // refresh report statistics
-/** @var \Magento\Sales\Model\Resource\Report\Order $reportResource */
+/** @var \Magento\Sales\Model\ResourceModel\Report\Order $reportResource */
 $reportResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Sales\Model\Resource\Report\Order'
+    'Magento\Sales\Model\ResourceModel\Report\Order'
 );
 $reportResource->aggregate();
diff --git a/dev/tests/integration/testsuite/Magento/Reports/_files/viewed_products.php b/dev/tests/integration/testsuite/Magento/Reports/_files/viewed_products.php
index c5658f8f4eab94be9b9db2ce4a4b4fc27e8c06e5..d163a8591ddfb2054ed26338c8a03cb8ae01da94 100644
--- a/dev/tests/integration/testsuite/Magento/Reports/_files/viewed_products.php
+++ b/dev/tests/integration/testsuite/Magento/Reports/_files/viewed_products.php
@@ -34,9 +34,9 @@ foreach ([1, 2, 1, 21, 1, 21] as $productId) {
 }
 
 // refresh report statistics
-/** @var \Magento\Reports\Model\Resource\Report\Product\Viewed $reportResource */
+/** @var \Magento\Reports\Model\ResourceModel\Report\Product\Viewed $reportResource */
 $reportResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Reports\Model\Resource\Report\Product\Viewed'
+    'Magento\Reports\Model\ResourceModel\Report\Product\Viewed'
 );
 $reportResource->beginTransaction();
 // prevent table truncation by incrementing the transaction nesting level counter
diff --git a/dev/tests/integration/testsuite/Magento/Review/Model/Resource/Rating/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/Rating/CollectionTest.php
similarity index 88%
rename from dev/tests/integration/testsuite/Magento/Review/Model/Resource/Rating/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/Rating/CollectionTest.php
index d5a9161cb41840d93de427af58f29e894b253b68..019fc607ef0a9b2d9105201f0d034c02d46e7ee2 100644
--- a/dev/tests/integration/testsuite/Magento/Review/Model/Resource/Rating/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/Rating/CollectionTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Rating;
+namespace Magento\Review\Model\ResourceModel\Rating;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Review\Model\Resource\Rating\Collection
+     * @var \Magento\Review\Model\ResourceModel\Rating\Collection
      */
     protected $collection;
 
     protected function setUp()
     {
         $this->collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Review\Model\Resource\Rating\Collection'
+            'Magento\Review\Model\ResourceModel\Rating\Collection'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Review/Model/Resource/RatingTest.php b/dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/RatingTest.php
similarity index 98%
rename from dev/tests/integration/testsuite/Magento/Review/Model/Resource/RatingTest.php
rename to dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/RatingTest.php
index 910fb6b0c42ef03c3b9ec25ac13462c3dbdcbbab..d47a7f3d9750ca32472639688591d69400b6c790 100644
--- a/dev/tests/integration/testsuite/Magento/Review/Model/Resource/RatingTest.php
+++ b/dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/RatingTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource;
+namespace Magento\Review\Model\ResourceModel;
 
 /**
  * Class RatingTest
diff --git a/dev/tests/integration/testsuite/Magento/Review/Model/Resource/Review/Product/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/Review/Product/CollectionTest.php
similarity index 81%
rename from dev/tests/integration/testsuite/Magento/Review/Model/Resource/Review/Product/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/Review/Product/CollectionTest.php
index 66251d610da3306dbef0906616aad2d6857dbff5..2886d4e2f88f54d1a8c9fc6ec7aa9cbe9da92383 100644
--- a/dev/tests/integration/testsuite/Magento/Review/Model/Resource/Review/Product/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/Review/Product/CollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Review\Product;
+namespace Magento\Review\Model\ResourceModel\Review\Product;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -13,7 +13,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     public function testGetResultingIds()
     {
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Review\Model\Resource\Review\Product\Collection'
+            'Magento\Review\Model\ResourceModel\Review\Product\Collection'
         );
         $collection->addStatusFilter(\Magento\Review\Model\Review::STATUS_APPROVED);
         $actual = $collection->getResultingIds();
diff --git a/dev/tests/integration/testsuite/Magento/Review/Model/Resource/Review/ReviewTest.php b/dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/Review/ReviewTest.php
similarity index 78%
rename from dev/tests/integration/testsuite/Magento/Review/Model/Resource/Review/ReviewTest.php
rename to dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/Review/ReviewTest.php
index bd78243f1989aae9a9089dd49b79b7e95a8678d2..9513e07eb1798d1f43dfafb5a9292e5c1215098a 100644
--- a/dev/tests/integration/testsuite/Magento/Review/Model/Resource/Review/ReviewTest.php
+++ b/dev/tests/integration/testsuite/Magento/Review/Model/ResourceModel/Review/ReviewTest.php
@@ -3,9 +3,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Review\Model\Resource\Review;
+namespace Magento\Review\Model\ResourceModel\Review;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Class ReviewTest
@@ -18,17 +18,17 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
     protected $objectManager;
 
     /**
-     * @var \Magento\Review\Model\Resource\Review
+     * @var \Magento\Review\Model\ResourceModel\Review
      */
     protected $reviewResource;
 
     /**
-     * @var \Magento\Review\Model\Resource\Review\Collection
+     * @var \Magento\Review\Model\ResourceModel\Review\Collection
      */
     protected $reviewCollection;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $resource;
 
@@ -43,10 +43,10 @@ class ReviewTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
-        $this->resource = $this->objectManager->get('Magento\Framework\App\Resource');
+        $this->resource = $this->objectManager->get('Magento\Framework\App\ResourceConnection');
         $this->connection = $this->resource->getConnection();
-        $this->reviewCollection = $this->objectManager->create('Magento\Review\Model\Resource\Review\Collection');
-        $this->reviewResource =  $this->objectManager->create('Magento\Review\Model\Resource\Review');
+        $this->reviewCollection = $this->objectManager->create('Magento\Review\Model\ResourceModel\Review\Collection');
+        $this->reviewResource =  $this->objectManager->create('Magento\Review\Model\ResourceModel\Review');
     }
 
     /**
diff --git a/dev/tests/integration/testsuite/Magento/Review/_files/customer_review_with_rating.php b/dev/tests/integration/testsuite/Magento/Review/_files/customer_review_with_rating.php
index 9de0a3b0a52aefe31c6fcc14c247537a81afb363..487076f7be20d7cd39bcd35115d26cda837940cb 100644
--- a/dev/tests/integration/testsuite/Magento/Review/_files/customer_review_with_rating.php
+++ b/dev/tests/integration/testsuite/Magento/Review/_files/customer_review_with_rating.php
@@ -37,7 +37,7 @@ $review
     $review
 );
 
-/** @var \Magento\Review\Model\Resource\Review\Collection $ratingCollection */
+/** @var \Magento\Review\Model\ResourceModel\Review\Collection $ratingCollection */
 $ratingCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
     '\Magento\Review\Model\Rating'
 )->getCollection()
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/CommentsTest.php b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/CommentsTest.php
index f8d049f1c69e4fb48862af0a550b10fcaf1bf1ee..50143140e775b75d2b7552c90f43290f4dce6ab9 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Block/Order/CommentsTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Block/Order/CommentsTest.php
@@ -42,15 +42,15 @@ class CommentsTest extends \PHPUnit_Framework_TestCase
         return [
             [
                 'Magento\Sales\Model\Order\Invoice',
-                'Magento\Sales\Model\Resource\Order\Invoice\Comment\Collection',
+                'Magento\Sales\Model\ResourceModel\Order\Invoice\Comment\Collection',
             ],
             [
                 'Magento\Sales\Model\Order\Creditmemo',
-                'Magento\Sales\Model\Resource\Order\Creditmemo\Comment\Collection'
+                'Magento\Sales\Model\ResourceModel\Order\Creditmemo\Comment\Collection'
             ],
             [
                 'Magento\Sales\Model\Order\Shipment',
-                'Magento\Sales\Model\Resource\Order\Shipment\Comment\Collection'
+                'Magento\Sales\Model\ResourceModel\Order\Shipment\Comment\Collection'
             ]
         ];
     }
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Observer/CleanExpiredOrdersTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/CronJob/CleanExpiredOrdersTest.php
similarity index 91%
rename from dev/tests/integration/testsuite/Magento/Sales/Model/Observer/CleanExpiredOrdersTest.php
rename to dev/tests/integration/testsuite/Magento/Sales/Model/CronJob/CleanExpiredOrdersTest.php
index c175e6a19cb09dd843116e136a006af9bcfa43a0..8923e3d31eb1ac6e7865e630d7dc67f20c48e3c7 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Observer/CleanExpiredOrdersTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/CronJob/CleanExpiredOrdersTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer;
+namespace Magento\Sales\Model\CronJob;
 
 use Magento\TestFramework\Helper\Bootstrap;
 use \Magento\Sales\Model\Order;
@@ -18,7 +18,7 @@ class CleanExpiredOrdersTest extends \PHPUnit_Framework_TestCase
     public function testExecute()
     {
         /** @var CleanExpiredOrders $job */
-        $job = Bootstrap::getObjectManager()->create('Magento\Sales\Model\Observer\CleanExpiredOrders');
+        $job = Bootstrap::getObjectManager()->create('Magento\Sales\Model\CronJob\CleanExpiredOrders');
         $job->execute();
 
         /** @var Order $order */
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/InvoiceTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/InvoiceTest.php
index f1b20b3c6b0245ba14be803d2db5a6200c22ff96..430b89b0446a235c53936dd84a442bff793d9bfd 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Order/InvoiceTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/Order/InvoiceTest.php
@@ -8,14 +8,14 @@ namespace Magento\Sales\Model\Order;
 class InvoiceTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Collection
+     * @var \Magento\Sales\Model\ResourceModel\Order\Collection
      */
     private $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Sales\Model\Resource\Order\Collection'
+            'Magento\Sales\Model\ResourceModel\Order\Collection'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Order/StatusTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Order/StatusTest.php
similarity index 87%
rename from dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Order/StatusTest.php
rename to dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Order/StatusTest.php
index d9ca84c39723454f66e1197751aaabb1bff86336..0b589122d21f1fba40675a0bd193c2cd8547abdb 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Order/StatusTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Order/StatusTest.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Sales\Model\Resource\Order;
+namespace Magento\Sales\Model\ResourceModel\Order;
 
 use Magento\TestFramework\Helper\Bootstrap;
 
@@ -16,7 +16,7 @@ use Magento\TestFramework\Helper\Bootstrap;
 class StatusTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order\Status
+     * @var \Magento\Sales\Model\ResourceModel\Order\Status
      */
     protected $resourceModel;
 
@@ -27,7 +27,7 @@ class StatusTest extends \PHPUnit_Framework_TestCase
     {
         $this->resourceModel = Bootstrap::getObjectManager()
             ->create(
-                'Magento\Sales\Model\Resource\Order\Status',
+                'Magento\Sales\Model\ResourceModel\Order\Status',
                 [
                     'data' => ['status' => 'fake_status']
                 ]
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/OrderTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/OrderTest.php
similarity index 96%
rename from dev/tests/integration/testsuite/Magento/Sales/Model/Resource/OrderTest.php
rename to dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/OrderTest.php
index 21592c5930598784c5ecf8fd762e2324006caf44..f5416c01f8d4b41eac864716153dd265eee9e88c 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/OrderTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/OrderTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource;
+namespace Magento\Sales\Model\ResourceModel;
 
 class OrderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Order
+     * @var \Magento\Sales\Model\ResourceModel\Order
      */
     protected $resourceModel;
 
@@ -25,7 +25,7 @@ class OrderTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
-        $this->resourceModel = $this->objectManager->create('Magento\Sales\Model\Resource\Order');
+        $this->resourceModel = $this->objectManager->create('Magento\Sales\Model\ResourceModel\Order');
         $this->orderIncrementId = '100000001';
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Bestsellers/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Bestsellers/CollectionTest.php
similarity index 94%
rename from dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Bestsellers/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Bestsellers/CollectionTest.php
index 3b7beb120d7ffc5401956ddc2a6edc32e8857cac..040c54d25bd2f9050728a354e6e7a62993801525 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Bestsellers/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Bestsellers/CollectionTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Bestsellers;
+namespace Magento\Sales\Model\ResourceModel\Report\Bestsellers;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Report\Bestsellers\Collection
+     * @var \Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection
      */
     private $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Sales\Model\Resource\Report\Bestsellers\Collection'
+            'Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection'
         );
         $this->_collection->setPeriod('day')->setDateRange(null, null)->addStoreFilter([1]);
     }
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Invoiced/Collection/InvoicedTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Invoiced/Collection/InvoicedTest.php
similarity index 82%
rename from dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Invoiced/Collection/InvoicedTest.php
rename to dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Invoiced/Collection/InvoicedTest.php
index d1f09bbda240ece8690bf24d9120f9a4f21bd8c9..ebb3721ccda48d5323168beccce6ae231e437aed 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Invoiced/Collection/InvoicedTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Invoiced/Collection/InvoicedTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Invoiced\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Invoiced\Collection;
 
 class InvoicedTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Report\Invoiced\Collection\Invoiced
+     * @var \Magento\Sales\Model\ResourceModel\Report\Invoiced\Collection\Invoiced
      */
     private $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Sales\Model\Resource\Report\Invoiced\Collection\Invoiced'
+            'Magento\Sales\Model\ResourceModel\Report\Invoiced\Collection\Invoiced'
         );
         $this->_collection->setPeriod('day')->setDateRange(null, null)->addStoreFilter([1]);
     }
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Invoiced/Collection/OrderTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Invoiced/Collection/OrderTest.php
similarity index 83%
rename from dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Invoiced/Collection/OrderTest.php
rename to dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Invoiced/Collection/OrderTest.php
index 5875127c77dadaa84bea4f5e4799a42682b576c0..aa9d55a953333151f93e360e86f0e3bafb58bdfc 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Invoiced/Collection/OrderTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Invoiced/Collection/OrderTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Invoiced\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Invoiced\Collection;
 
 class OrderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Report\Invoiced\Collection\Order
+     * @var \Magento\Sales\Model\ResourceModel\Report\Invoiced\Collection\Order
      */
     private $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Sales\Model\Resource\Report\Invoiced\Collection\Order'
+            'Magento\Sales\Model\ResourceModel\Report\Invoiced\Collection\Order'
         );
         $this->_collection->setPeriod('day')->setDateRange(null, null)->addStoreFilter([1]);
     }
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Refunded/Collection/OrderTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Refunded/Collection/OrderTest.php
similarity index 82%
rename from dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Refunded/Collection/OrderTest.php
rename to dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Refunded/Collection/OrderTest.php
index c7b31564022e9944f6ddf2b1b6d125a2a86f703f..38d1d3e8a5b7be65965fb2880bc6f91abe09c6cc 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Refunded/Collection/OrderTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Refunded/Collection/OrderTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Refunded\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Refunded\Collection;
 
 class OrderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Report\Refunded\Collection\Order
+     * @var \Magento\Sales\Model\ResourceModel\Report\Refunded\Collection\Order
      */
     private $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Sales\Model\Resource\Report\Refunded\Collection\Order'
+            'Magento\Sales\Model\ResourceModel\Report\Refunded\Collection\Order'
         );
         $this->_collection->setPeriod('day')->setDateRange(null, null)->addStoreFilter([1]);
     }
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Refunded/Collection/RefundedTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Refunded/Collection/RefundedTest.php
similarity index 82%
rename from dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Refunded/Collection/RefundedTest.php
rename to dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Refunded/Collection/RefundedTest.php
index 67fb876d85e991475f434814f4b88c513621d401..ff760e61f53b8555ca824130c8386861f7792082 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Refunded/Collection/RefundedTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Refunded/Collection/RefundedTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Refunded\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Refunded\Collection;
 
 class RefundedTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Report\Refunded\Collection\Refunded
+     * @var \Magento\Sales\Model\ResourceModel\Report\Refunded\Collection\Refunded
      */
     private $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Sales\Model\Resource\Report\Refunded\Collection\Refunded'
+            'Magento\Sales\Model\ResourceModel\Report\Refunded\Collection\Refunded'
         );
         $this->_collection->setPeriod('day')->setDateRange(null, null)->addStoreFilter([1]);
     }
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Shipping/Collection/OrderTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Shipping/Collection/OrderTest.php
similarity index 82%
rename from dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Shipping/Collection/OrderTest.php
rename to dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Shipping/Collection/OrderTest.php
index a195608cc44046ee3347baf5025eadb385b2c20f..4d931eaf9c683b7b5dd6c542ba6985967b47b521 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Shipping/Collection/OrderTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Shipping/Collection/OrderTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Shipping\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Shipping\Collection;
 
 class OrderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Report\Shipping\Collection\Order
+     * @var \Magento\Sales\Model\ResourceModel\Report\Shipping\Collection\Order
      */
     private $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Sales\Model\Resource\Report\Shipping\Collection\Order'
+            'Magento\Sales\Model\ResourceModel\Report\Shipping\Collection\Order'
         );
         $this->_collection->setPeriod('day')->setDateRange(null, null)->addStoreFilter([1]);
     }
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Shipping/Collection/ShipmentTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Shipping/Collection/ShipmentTest.php
similarity index 81%
rename from dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Shipping/Collection/ShipmentTest.php
rename to dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Shipping/Collection/ShipmentTest.php
index fd33cc97b86d8660ad7eeceb9b66f9b916a8eed6..4dacc8febc46e3dc027761d0460b7c92e9e89d68 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Report/Shipping/Collection/ShipmentTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Report/Shipping/Collection/ShipmentTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Report\Shipping\Collection;
+namespace Magento\Sales\Model\ResourceModel\Report\Shipping\Collection;
 
 class ShipmentTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Sales\Model\Resource\Report\Shipping\Collection\Shipment
+     * @var \Magento\Sales\Model\ResourceModel\Report\Shipping\Collection\Shipment
      */
     private $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Sales\Model\Resource\Report\Shipping\Collection\Shipment'
+            'Magento\Sales\Model\ResourceModel\Report\Shipping\Collection\Shipment'
         );
         $this->_collection->setPeriod('day')->setDateRange(null, null)->addStoreFilter([1]);
     }
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Sale/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Sale/CollectionTest.php
similarity index 80%
rename from dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Sale/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Sale/CollectionTest.php
index 4f20c30120d9c12a18046da2b4e6134c48b4e069..4a2a2d07a61d056540745930f9dce455c19c92e4 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Resource/Sale/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Model/ResourceModel/Sale/CollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Resource\Sale;
+namespace Magento\Sales\Model\ResourceModel\Sale;
 
 use Magento\TestFramework\Helper\Bootstrap;
 
@@ -14,9 +14,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
      */
     public function testSetCustomerFilter()
     {
-        $collectionModel = Bootstrap::getObjectManager()->create('Magento\Sales\Model\Resource\Sale\Collection');
+        $collectionModel = Bootstrap::getObjectManager()->create('Magento\Sales\Model\ResourceModel\Sale\Collection');
         $this->assertEquals(1, $collectionModel->setCustomerIdFilter(1)->count());
-        $collectionModel = Bootstrap::getObjectManager()->create('Magento\Sales\Model\Resource\Sale\Collection');
+        $collectionModel = Bootstrap::getObjectManager()->create('Magento\Sales\Model\ResourceModel\Sale\Collection');
         $this->assertEquals(0, $collectionModel->setCustomerIdFilter(2)->count());
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Sales/Model/Observer/Backend/CustomerQuoteTest.php b/dev/tests/integration/testsuite/Magento/Sales/Observer/Backend/CustomerQuoteTest.php
similarity index 84%
rename from dev/tests/integration/testsuite/Magento/Sales/Model/Observer/Backend/CustomerQuoteTest.php
rename to dev/tests/integration/testsuite/Magento/Sales/Observer/Backend/CustomerQuoteTest.php
index a0ea4bf40f7d17fe77f8c1f500f297a0f678c383..bbe7730b002620a44166d8c17bea36bfde937d59 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/Model/Observer/Backend/CustomerQuoteTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/Observer/Backend/CustomerQuoteTest.php
@@ -3,8 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sales\Model\Observer\Backend;
+namespace Magento\Sales\Observer\Backend;
 
+use Magento\Customer\Api\CustomerRepositoryInterface;
+use Magento\Customer\Api\Data\CustomerInterface;
+use Magento\Customer\Model\CustomerRegistry;
+use Magento\Quote\Model\Quote;
 use Magento\TestFramework\Helper\Bootstrap;
 
 /**
@@ -20,14 +24,14 @@ class CustomerQuoteTest extends \PHPUnit_Framework_TestCase
      */
     public function testCustomerSaveQuoteObserver()
     {
-        /** @var \Magento\Customer\Api\Data\CustomerInterface $customer */
-        /** @var \Magento\Customer\Api\CustomerRepositoryInterface $repository */
+        /** @var CustomerInterface $customer */
+        /** @var CustomerRepositoryInterface $repository */
         $repository = Bootstrap::getObjectManager()->create('Magento\Customer\Api\CustomerRepositoryInterface');
-        /** @var \Magento\Customer\Model\CustomerRegistry $registry */
+        /** @var CustomerRegistry $registry */
         $registry = Bootstrap::getObjectManager()->create('Magento\Customer\Model\CustomerRegistry');
         $customer = $repository->getById($registry->retrieveByEmail('customer@example.com')->getId());
 
-        /** @var \Magento\Quote\Model\Quote $quote */
+        /** @var Quote $quote */
         $quote = Bootstrap::getObjectManager()->create('Magento\Quote\Model\Quote');
         $quote->load('test01', 'reserved_order_id');
         $quote->setCustomerIsGuest(false)->setCustomerId($customer->getId())
diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/default_rollback.php b/dev/tests/integration/testsuite/Magento/Sales/_files/default_rollback.php
index a8880f8d5eef5738bdd4912f2e2779b9aba2f114..2795b0e87955f7caa9f86e4d23c9a0d0f318fe92 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/_files/default_rollback.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/_files/default_rollback.php
@@ -12,13 +12,13 @@ $registry->unregister('isSecureArea');
 $registry->register('isSecureArea', true);
 
 /** @var $order \Magento\Sales\Model\Order */
-$orderCollection = Bootstrap::getObjectManager()->create('Magento\Sales\Model\Resource\Order\Collection');
+$orderCollection = Bootstrap::getObjectManager()->create('Magento\Sales\Model\ResourceModel\Order\Collection');
 foreach ($orderCollection as $order) {
     $order->delete();
 }
 
 /** @var $product \Magento\Catalog\Model\Product */
-$productCollection = Bootstrap::getObjectManager()->create('Magento\Catalog\Model\Resource\Product\Collection');
+$productCollection = Bootstrap::getObjectManager()->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
 foreach ($productCollection as $product) {
     $product->delete();
 }
diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/report_bestsellers.php b/dev/tests/integration/testsuite/Magento/Sales/_files/report_bestsellers.php
index 7b08339eeb9bd597647bc36929ca9dba4fc22e60..5bb892052600bb2db7dec8afc94fa98ae3374063 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/_files/report_bestsellers.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/_files/report_bestsellers.php
@@ -5,9 +5,9 @@
  */
 
 // refresh report statistics
-/** @var \Magento\Sales\Model\Resource\Report\Bestsellers $reportResource */
+/** @var \Magento\Sales\Model\ResourceModel\Report\Bestsellers $reportResource */
 $reportResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Sales\Model\Resource\Report\Bestsellers'
+    'Magento\Sales\Model\ResourceModel\Report\Bestsellers'
 );
 $reportResource->beginTransaction();
 // prevent table truncation by incrementing the transaction nesting level counter
diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/report_invoiced.php b/dev/tests/integration/testsuite/Magento/Sales/_files/report_invoiced.php
index 3ad69423423211f922ef432517ec3f96660e8b75..00962715c5383bb81678842f77087377d5979322 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/_files/report_invoiced.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/_files/report_invoiced.php
@@ -5,9 +5,9 @@
  */
 
 // refresh report statistics
-/** @var \Magento\Sales\Model\Resource\Report\Invoiced $reportResource */
+/** @var \Magento\Sales\Model\ResourceModel\Report\Invoiced $reportResource */
 $reportResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Sales\Model\Resource\Report\Invoiced'
+    'Magento\Sales\Model\ResourceModel\Report\Invoiced'
 );
 $reportResource->beginTransaction();
 // prevent table truncation by incrementing the transaction nesting level counter
diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/report_refunded.php b/dev/tests/integration/testsuite/Magento/Sales/_files/report_refunded.php
index 3bbafa6323e973b5f66e14b610d55c3457a22bf1..929743b243b57459232dd833cf3d3c59fbf8ac4a 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/_files/report_refunded.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/_files/report_refunded.php
@@ -5,9 +5,9 @@
  */
 
 // refresh report statistics
-/** @var \Magento\Sales\Model\Resource\Report\Refunded $reportResource */
+/** @var \Magento\Sales\Model\ResourceModel\Report\Refunded $reportResource */
 $reportResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Sales\Model\Resource\Report\Refunded'
+    'Magento\Sales\Model\ResourceModel\Report\Refunded'
 );
 $reportResource->beginTransaction();
 // prevent table truncation by incrementing the transaction nesting level counter
diff --git a/dev/tests/integration/testsuite/Magento/Sales/_files/report_shipping.php b/dev/tests/integration/testsuite/Magento/Sales/_files/report_shipping.php
index d2bb7c4025d190a19324f03a9df446457bcaff1f..e09eaa72e78eb08095e3ad3430732909816e42b6 100644
--- a/dev/tests/integration/testsuite/Magento/Sales/_files/report_shipping.php
+++ b/dev/tests/integration/testsuite/Magento/Sales/_files/report_shipping.php
@@ -5,9 +5,9 @@
  */
 
 // refresh report statistics
-/** @var \Magento\Sales\Model\Resource\Report\Shipping $reportResource */
+/** @var \Magento\Sales\Model\ResourceModel\Report\Shipping $reportResource */
 $reportResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Sales\Model\Resource\Report\Shipping'
+    'Magento\Sales\Model\ResourceModel\Report\Shipping'
 );
 $reportResource->beginTransaction();
 // prevent table truncation by incrementing the transaction nesting level counter
diff --git a/dev/tests/integration/testsuite/Magento/SalesRule/Model/Resource/Report/Rule/CreatedatTest.php b/dev/tests/integration/testsuite/Magento/SalesRule/Model/ResourceModel/Report/Rule/CreatedatTest.php
similarity index 88%
rename from dev/tests/integration/testsuite/Magento/SalesRule/Model/Resource/Report/Rule/CreatedatTest.php
rename to dev/tests/integration/testsuite/Magento/SalesRule/Model/ResourceModel/Report/Rule/CreatedatTest.php
index 272e53c85cc111fd051c059b531e83716aa8340f..ca6cd33cc77b5ca472c33118d683f15123070aa0 100644
--- a/dev/tests/integration/testsuite/Magento/SalesRule/Model/Resource/Report/Rule/CreatedatTest.php
+++ b/dev/tests/integration/testsuite/Magento/SalesRule/Model/ResourceModel/Report/Rule/CreatedatTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource\Report\Rule;
+namespace Magento\SalesRule\Model\ResourceModel\Report\Rule;
 
 /**
  * Createdat test for check report totals calculate
@@ -35,14 +35,14 @@ class CreatedatTest extends \PHPUnit_Framework_TestCase
             ->setCreatedAt('2014-10-25 10:10:10')
             ->save();
         // refresh report statistics
-        /** @var \Magento\SalesRule\Model\Resource\Report\Rule $reportResource */
+        /** @var \Magento\SalesRule\Model\ResourceModel\Report\Rule $reportResource */
         $reportResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\SalesRule\Model\Resource\Report\Rule'
+            'Magento\SalesRule\Model\ResourceModel\Report\Rule'
         );
         $reportResource->aggregate();
-        /** @var \Magento\SalesRule\Model\Resource\Report\Collection $reportCollection */
+        /** @var \Magento\SalesRule\Model\ResourceModel\Report\Collection $reportCollection */
         $reportCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\SalesRule\Model\Resource\Report\Collection'
+            'Magento\SalesRule\Model\ResourceModel\Report\Collection'
         );
         $salesRuleReportItem = $reportCollection->getFirstItem();
         $this->assertEquals($this->getTotalAmount($order), $salesRuleReportItem['total_amount']);
@@ -50,7 +50,7 @@ class CreatedatTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * Repeat sql formula from \Magento\SalesRule\Model\Resource\Report\Rule\Createdat::_aggregateByOrder
+     * Repeat sql formula from \Magento\SalesRule\Model\ResourceModel\Report\Rule\Createdat::_aggregateByOrder
      *
      * @param \Magento\Sales\Model\Order $order
      * @return float
@@ -65,7 +65,7 @@ class CreatedatTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * Repeat sql formula from \Magento\SalesRule\Model\Resource\Report\Rule\Createdat::_aggregateByOrder
+     * Repeat sql formula from \Magento\SalesRule\Model\ResourceModel\Report\Rule\Createdat::_aggregateByOrder
      *
      * @param \Magento\Sales\Model\Order $order
      * @return float
diff --git a/dev/tests/integration/testsuite/Magento/SalesRule/Model/Resource/Rule/CollectionTest.php b/dev/tests/integration/testsuite/Magento/SalesRule/Model/ResourceModel/Rule/CollectionTest.php
similarity index 93%
rename from dev/tests/integration/testsuite/Magento/SalesRule/Model/Resource/Rule/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/SalesRule/Model/ResourceModel/Rule/CollectionTest.php
index d6c4a8bbcf22258547180e3f544d7d551141f6a9..784f2fd864791894f8b7f4a9bef72a16fb32e06d 100644
--- a/dev/tests/integration/testsuite/Magento/SalesRule/Model/Resource/Rule/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/SalesRule/Model/ResourceModel/Rule/CollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\SalesRule\Model\Resource\Rule;
+namespace Magento\SalesRule\Model\ResourceModel\Rule;
 
 /**
  * @magentoDataFixture Magento/SalesRule/_files/rules.php
@@ -19,7 +19,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     public function testSetValidationFilter($couponCode, $expectedItems)
     {
         $collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\SalesRule\Model\Resource\Rule\Collection'
+            'Magento\SalesRule\Model\ResourceModel\Rule\Collection'
         );
         $items = array_values($collection->setValidationFilter(1, 0, $couponCode)->getItems());
 
diff --git a/dev/tests/integration/testsuite/Magento/SalesRule/_files/coupons.php b/dev/tests/integration/testsuite/Magento/SalesRule/_files/coupons.php
index 1753e3a2377db4dc951cf984c8cf4eaeb34a3ec5..41a710473380e5fce4a6c61190a07a03ebb09299 100644
--- a/dev/tests/integration/testsuite/Magento/SalesRule/_files/coupons.php
+++ b/dev/tests/integration/testsuite/Magento/SalesRule/_files/coupons.php
@@ -5,7 +5,7 @@
  */
 
 $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\SalesRule\Model\Resource\Rule\Collection'
+    'Magento\SalesRule\Model\ResourceModel\Rule\Collection'
 );
 $items = array_values($this->_collection->getItems());
 
diff --git a/dev/tests/integration/testsuite/Magento/SalesRule/_files/report_coupons.php b/dev/tests/integration/testsuite/Magento/SalesRule/_files/report_coupons.php
index 1c81ed5414896e0552a6a57085fa530c0cafefb5..c515be77f4219bd3e30b7db25168300f950a1f53 100644
--- a/dev/tests/integration/testsuite/Magento/SalesRule/_files/report_coupons.php
+++ b/dev/tests/integration/testsuite/Magento/SalesRule/_files/report_coupons.php
@@ -5,9 +5,9 @@
  */
 
 // refresh report statistics
-/** @var \Magento\SalesRule\Model\Resource\Report\Rule $reportResource */
+/** @var \Magento\SalesRule\Model\ResourceModel\Report\Rule $reportResource */
 $reportResource = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\SalesRule\Model\Resource\Report\Rule'
+    'Magento\SalesRule\Model\ResourceModel\Report\Rule'
 );
 $reportResource->beginTransaction();
 // prevent table truncation by incrementing the transaction nesting level counter
diff --git a/dev/tests/integration/testsuite/Magento/Setup/Controller/ComponentGridTest.php b/dev/tests/integration/testsuite/Magento/Setup/Controller/ComponentGridTest.php
index 6ef1ef48c7f9abcd89461e505ab77f32807c6863..e62ef2df8f2f3a367e06fd7151cab7e0a72aad0b 100644
--- a/dev/tests/integration/testsuite/Magento/Setup/Controller/ComponentGridTest.php
+++ b/dev/tests/integration/testsuite/Magento/Setup/Controller/ComponentGridTest.php
@@ -70,13 +70,13 @@ class ComponentGridTest extends \PHPUnit_Framework_TestCase
      */
     private $lastSyncData = [];
 
-    public function __construct()
+    public function setUp()
     {
         $this->lastSyncData = [
             "lastSyncDate" => "2015/08/10 21:05:34",
             "packages" => [
-                'magento/sample-module1' => [
-                    'name' => 'magento/sample-module1',
+                'magento/sample-module-one' => [
+                    'name' => 'magento/sample-module-one',
                     'type' => 'magento2-module',
                     'version' => '1.0.0'
                 ]
@@ -85,13 +85,20 @@ class ComponentGridTest extends \PHPUnit_Framework_TestCase
             'countOfUpdate' => 1
         ];
         $this->componentData = [
-            'magento/sample-module1' => [
-                'name' => 'magento/sample-module1',
+            'magento/sample-module-one' => [
+                'name' => 'magento/sample-module-one',
                 'type' => 'magento2-module',
                 'version' => '1.0.0'
             ]
         ];
-
+        $allComponentData = [
+            'magento/sample-module-two' => [
+                'name' => 'magento/sample-module-two',
+                'type' => 'magento2-module',
+                'version' => '1.0.0'
+            ]
+        ];
+        $allComponentData = array_merge($allComponentData, $this->componentData);
         $this->composerInformationMock = $this->getMock(
             'Magento\Framework\Composer\ComposerInformation',
             [],
@@ -101,36 +108,26 @@ class ComponentGridTest extends \PHPUnit_Framework_TestCase
         );
         $objectManagerProvider = $this->getMock('Magento\Setup\Model\ObjectManagerProvider', [], [], '', false);
         $objectManager = $this->getMock('Magento\Framework\ObjectManagerInterface', [], [], '', false);
+        $objectManagerProvider->expects($this->once())
+            ->method('get')
+            ->willReturn($objectManager);
+        $this->packageInfoFactoryMock = $this
+            ->getMock('Magento\Framework\Module\PackageInfoFactory', [], [], '', false);
         $this->enabledModuleListMock = $this->getMock('Magento\Framework\Module\ModuleList', [], [], '', false);
+        $this->enabledModuleListMock->expects($this->any())->method('has')->willReturn(true);
         $this->fullModuleListMock = $this->getMock('Magento\Framework\Module\FullModuleList', [], [], '', false);
-        $this->packageInfoFactoryMock = $this->getMock(
-            'Magento\Framework\Module\PackageInfoFactory',
-            [],
-            [],
-            '',
-            false
-        );
+        $this->fullModuleListMock->expects($this->any())->method('getNames')->willReturn($allComponentData);
+        $objectManager->expects($this->exactly(3))
+            ->method('get')
+            ->willReturnMap([
+                ['Magento\Framework\Module\PackageInfoFactory', $this->packageInfoFactoryMock],
+                ['Magento\Framework\Module\FullModuleList', $this->fullModuleListMock],
+                ['Magento\Framework\Module\ModuleList', $this->enabledModuleListMock]
+            ]);
         $this->packageInfo = $this->getMock('Magento\Framework\Module\PackageInfo', [], [], '', false);
         $this->updatePackagesCacheMock = $this->getMock('Magento\Setup\Model\UpdatePackagesCache', [], [], '', false);
-
-        $objectManagerProvider->expects($this->any())->method('get')->willReturn($objectManager);
-
-        $objectManager->expects($this->at(0))->method('get')->willReturn($this->enabledModuleListMock);
-
-        $objectManager->expects($this->at(1))->method('get')->willReturn($this->fullModuleListMock);
-
-        $objectManager->expects($this->at(2))->method('get')->willReturn($this->packageInfoFactoryMock);
-
+        $this->connectManagerMock = $this->getMock('Magento\Setup\Model\ConnectManager', [], [], '', false);
         $this->packageInfoFactoryMock->expects($this->once())->method('create')->willReturn($this->packageInfo);
-
-        $this->connectManagerMock = $this->getMock(
-            'Magento\Setup\Model\ConnectManager',
-            [],
-            [],
-            '',
-            false
-        );
-
         $this->controller = new ComponentGrid(
             $this->composerInformationMock,
             $objectManagerProvider,
@@ -154,12 +151,12 @@ class ComponentGridTest extends \PHPUnit_Framework_TestCase
         $this->packageInfo->expects($this->once())
             ->method('getModuleName')
             ->willReturn('Sample_Module');
-        $this->packageInfo->expects($this->once())
+        $this->packageInfo->expects($this->exactly(2))
             ->method('getPackageName')
-            ->willReturn('magento/sample-module1');
-        $this->packageInfo->expects($this->once())
+            ->willReturn($this->componentData['magento/sample-module-one']['name']);
+        $this->packageInfo->expects($this->exactly(2))
             ->method('getVersion')
-            ->willReturn('1.0.0');
+            ->willReturn($this->componentData['magento/sample-module-one']['version']);
         $this->enabledModuleListMock->expects($this->once())
             ->method('has')
             ->willReturn(true);
@@ -178,7 +175,7 @@ class ComponentGridTest extends \PHPUnit_Framework_TestCase
         $this->assertArrayHasKey('success', $variables);
         $this->assertTrue($variables['success']);
         $expected = [[
-            'name' => 'magento/sample-module1',
+            'name' => 'magento/sample-module-one',
             'type' => 'magento2-module',
             'version' => '1.0.0',
             'update' => false,
diff --git a/dev/tests/integration/testsuite/Magento/Sitemap/Model/Resource/Catalog/ProductTest.php b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ResourceModel/Catalog/ProductTest.php
similarity index 95%
rename from dev/tests/integration/testsuite/Magento/Sitemap/Model/Resource/Catalog/ProductTest.php
rename to dev/tests/integration/testsuite/Magento/Sitemap/Model/ResourceModel/Catalog/ProductTest.php
index a6da395dc342c016d5540b81d819e8f68f1586af..aa8817a77c36b2f220ff6111ed67050384150378 100644
--- a/dev/tests/integration/testsuite/Magento/Sitemap/Model/Resource/Catalog/ProductTest.php
+++ b/dev/tests/integration/testsuite/Magento/Sitemap/Model/ResourceModel/Catalog/ProductTest.php
@@ -3,10 +3,10 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Sitemap\Model\Resource\Catalog;
+namespace Magento\Sitemap\Model\ResourceModel\Catalog;
 
 /**
- * Test class for \Magento\Sitemap\Model\Resource\Catalog\Product.
+ * Test class for \Magento\Sitemap\Model\ResourceModel\Catalog\Product.
  * - test products collection generation for sitemap
  *
  * @magentoDataFixtureBeforeTransaction Magento/CatalogSearch/_files/full_reindex.php
@@ -24,7 +24,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     public function testGetCollectionNone()
     {
         $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Sitemap\Model\Resource\Catalog\Product'
+            'Magento\Sitemap\Model\ResourceModel\Catalog\Product'
         );
         $products = $model->getCollection(\Magento\Store\Model\Store::DISTRO_STORE_ID);
 
@@ -51,7 +51,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     public function testGetCollectionAll()
     {
         $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Sitemap\Model\Resource\Catalog\Product'
+            'Magento\Sitemap\Model\ResourceModel\Catalog\Product'
         );
         $products = $model->getCollection(\Magento\Store\Model\Store::DISTRO_STORE_ID);
 
@@ -119,7 +119,7 @@ class ProductTest extends \PHPUnit_Framework_TestCase
     public function testGetCollectionBase()
     {
         $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Sitemap\Model\Resource\Catalog\Product'
+            'Magento\Sitemap\Model\ResourceModel\Catalog\Product'
         );
         $products = $model->getCollection(\Magento\Store\Model\Store::DISTRO_STORE_ID);
 
diff --git a/dev/tests/integration/testsuite/Magento/Store/App/Request/PathInfoProcessorTest.php b/dev/tests/integration/testsuite/Magento/Store/App/Request/PathInfoProcessorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8470436c8bd3e75a78306af4cd2897c0705ddeac
--- /dev/null
+++ b/dev/tests/integration/testsuite/Magento/Store/App/Request/PathInfoProcessorTest.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Store\App\Request;
+
+use \Magento\TestFramework\Helper\Bootstrap;
+use \Magento\Store\Model\ScopeInterface;
+use \Magento\Store\Model\Store;
+
+class PathInfoProcessorTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Store\App\Request\PathInfoProcessor
+     */
+    protected $pathProcessor;
+
+    protected function setUp()
+    {
+        $this->pathProcessor = Bootstrap::getObjectManager()->create('Magento\Store\App\Request\PathInfoProcessor');
+    }
+
+    /**
+     * @covers \Magento\Store\App\Request\PathInfoProcessor::process
+     * @dataProvider notValidStoreCodeDataProvider
+     */
+    public function testProcessNotValidStoreCode($pathInfo)
+    {
+        /** @var \Magento\Framework\App\RequestInterface $request */
+        $request = Bootstrap::getObjectManager()->create('Magento\Framework\App\RequestInterface');
+        $this->assertEquals($pathInfo, $this->pathProcessor->process($request, $pathInfo));
+    }
+
+    public function notValidStoreCodeDataProvider()
+    {
+        return [
+            ['not_valid_store_code_int' => '/100500/m/c/a'],
+            ['not_valid_store_code_str' => '/test_string/m/c/a'],
+        ];
+    }
+
+    /**
+     * @covers \Magento\Store\App\Request\PathInfoProcessor::process
+     * @magentoDataFixture Magento/Store/_files/core_fixturestore.php
+     */
+    public function testProcessValidStoreCodeCase1()
+    {
+        /** @var \Magento\Store\Model\Store $store */
+        $store = Bootstrap::getObjectManager()->get('Magento\Store\Model\Store');
+        $store->load('fixturestore', 'code');
+
+        /** @var \Magento\Framework\App\RequestInterface $request */
+        $request = Bootstrap::getObjectManager()->create('Magento\Framework\App\RequestInterface');
+
+        /** @var \Magento\Framework\App\Config\ReinitableConfigInterface $config */
+        $config = Bootstrap::getObjectManager()->get('\Magento\Framework\App\Config\ReinitableConfigInterface');
+        $config->setValue(Store::XML_PATH_STORE_IN_URL, false, ScopeInterface::SCOPE_STORE, $store->getCode());
+        $pathInfo = sprintf('/%s/m/c/a', $store->getCode());
+        $this->assertEquals($pathInfo, $this->pathProcessor->process($request, $pathInfo));
+    }
+
+    /**
+     * @covers \Magento\Store\App\Request\PathInfoProcessor::process
+     * @magentoDataFixture Magento/Store/_files/core_fixturestore.php
+     */
+    public function testProcessValidStoreCodeCase2()
+    {
+        /** @var \Magento\Store\Model\Store $store */
+        $store = Bootstrap::getObjectManager()->get('Magento\Store\Model\Store');
+        $store->load('fixturestore', 'code');
+
+        /** @var \Magento\Framework\App\RequestInterface $request */
+        $request = Bootstrap::getObjectManager()->create('Magento\Framework\App\RequestInterface');
+
+        /** @var \Magento\Framework\App\Config\ReinitableConfigInterface $config */
+        $config = Bootstrap::getObjectManager()->get('\Magento\Framework\App\Config\ReinitableConfigInterface');
+        $config->setValue(Store::XML_PATH_STORE_IN_URL, true, ScopeInterface::SCOPE_STORE, $store->getCode());
+        $pathInfo = sprintf('/%s/m/c/a', $store->getCode());
+        $this->assertEquals('/m/c/a', $this->pathProcessor->process($request, $pathInfo));
+    }
+
+    /**
+     * @covers \Magento\Store\App\Request\PathInfoProcessor::process
+     * @magentoDataFixture Magento/Store/_files/core_fixturestore.php
+     */
+    public function testProcessValidStoreCodeCase3()
+    {
+        /** @var \Magento\Store\Model\Store $store */
+        $store = Bootstrap::getObjectManager()->get('Magento\Store\Model\Store');
+        $store->load('fixturestore', 'code');
+
+        /** @var \Magento\Framework\App\RequestInterface $request */
+        $request = Bootstrap::getObjectManager()->create(
+            'Magento\Framework\App\RequestInterface',
+            ['directFrontNames' => [$store->getCode() => true]]
+        );
+
+        /** @var \Magento\Framework\App\Config\ReinitableConfigInterface $config */
+        $config = Bootstrap::getObjectManager()->get('\Magento\Framework\App\Config\ReinitableConfigInterface');
+        $config->setValue(Store::XML_PATH_STORE_IN_URL, true, ScopeInterface::SCOPE_STORE, $store->getCode());
+        $pathInfo = sprintf('/%s/m/c/a', $store->getCode());
+        $this->assertEquals($pathInfo, $this->pathProcessor->process($request, $pathInfo));
+        $this->assertEquals('noroute', $request->getActionName());
+    }
+}
diff --git a/dev/tests/integration/testsuite/Magento/Store/Model/Resource/Store/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/Store/CollectionTest.php
similarity index 78%
rename from dev/tests/integration/testsuite/Magento/Store/Model/Resource/Store/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/Store/CollectionTest.php
index e020b7ac6363261350fe97d948c90265334a81b7..a7ccac4bbaf0e251d87ab9d297c4892bd0542681 100644
--- a/dev/tests/integration/testsuite/Magento/Store/Model/Resource/Store/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/Store/CollectionTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Store\Model\Resource\Store;
+namespace Magento\Store\Model\ResourceModel\Store;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Store\Model\Resource\Store\Collection
+     * @var \Magento\Store\Model\ResourceModel\Store\Collection
      */
     protected $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Store\Model\Resource\Store\Collection'
+            'Magento\Store\Model\ResourceModel\Store\Collection'
         );
     }
 
@@ -39,10 +39,10 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Store\Model\Resource\Store\Collection::addGroupFilter
-     * @covers \Magento\Store\Model\Resource\Store\Collection::addIdFilter
-     * @covers \Magento\Store\Model\Resource\Store\Collection::addWebsiteFilter
-     * @covers \Magento\Store\Model\Resource\Store\Collection::addCategoryFilter
+     * @covers \Magento\Store\Model\ResourceModel\Store\Collection::addGroupFilter
+     * @covers \Magento\Store\Model\ResourceModel\Store\Collection::addIdFilter
+     * @covers \Magento\Store\Model\ResourceModel\Store\Collection::addWebsiteFilter
+     * @covers \Magento\Store\Model\ResourceModel\Store\Collection::addCategoryFilter
      */
     public function testAddFilters()
     {
@@ -88,8 +88,8 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection::addFieldToSelect
-     * @covers \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection::removeFieldFromSelect
+     * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::addFieldToSelect
+     * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::removeFieldFromSelect
      */
     public function testAddRemoveFieldToSelect()
     {
@@ -108,7 +108,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection::addExpressionFieldToSelect
+     * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::addExpressionFieldToSelect
      */
     public function testAddExpressionFieldToSelect()
     {
@@ -118,7 +118,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection::getAllIds
+     * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::getAllIds
      */
     public function testGetAllIds()
     {
@@ -126,7 +126,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection::getData
+     * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::getData
      */
     public function testGetData()
     {
@@ -134,7 +134,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection::join
+     * @covers \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection::join
      */
     public function testJoin()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Store/Model/Resource/StoreTest.php b/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/StoreTest.php
similarity index 73%
rename from dev/tests/integration/testsuite/Magento/Store/Model/Resource/StoreTest.php
rename to dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/StoreTest.php
index c2785d6b1de4b3a010356bebc8bb769ef008da73..5fa9b671825cd14e4d0e7d6dc71a3c756f30da8e 100644
--- a/dev/tests/integration/testsuite/Magento/Store/Model/Resource/StoreTest.php
+++ b/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/StoreTest.php
@@ -3,15 +3,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Store\Model\Resource;
+namespace Magento\Store\Model\ResourceModel;
 
 class StoreTest extends \PHPUnit_Framework_TestCase
 {
     public function testCountAll()
     {
-        /** @var $model \Magento\Store\Model\Resource\Store */
+        /** @var $model \Magento\Store\Model\ResourceModel\Store */
         $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Store\Model\Resource\Store'
+            'Magento\Store\Model\ResourceModel\Store'
         );
         $this->assertEquals(1, $model->countAll());
         $this->assertEquals(1, $model->countAll(false));
diff --git a/dev/tests/integration/testsuite/Magento/Store/Model/Resource/WebsiteTest.php b/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/WebsiteTest.php
similarity index 73%
rename from dev/tests/integration/testsuite/Magento/Store/Model/Resource/WebsiteTest.php
rename to dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/WebsiteTest.php
index 274f1fb69b025c42dad7580536bf9d4d591bd6b5..57affbd82a85cce27e9e665af587460a41001aa6 100644
--- a/dev/tests/integration/testsuite/Magento/Store/Model/Resource/WebsiteTest.php
+++ b/dev/tests/integration/testsuite/Magento/Store/Model/ResourceModel/WebsiteTest.php
@@ -3,15 +3,15 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Store\Model\Resource;
+namespace Magento\Store\Model\ResourceModel;
 
 class WebsiteTest extends \PHPUnit_Framework_TestCase
 {
     public function testCountAll()
     {
-        /** @var $model \Magento\Store\Model\Resource\Website */
+        /** @var $model \Magento\Store\Model\ResourceModel\Website */
         $model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Store\Model\Resource\Website'
+            'Magento\Store\Model\ResourceModel\Website'
         );
         $this->assertEquals(1, $model->countAll());
         $this->assertEquals(1, $model->countAll(false));
diff --git a/dev/tests/integration/testsuite/Magento/Store/Model/StoreTest.php b/dev/tests/integration/testsuite/Magento/Store/Model/StoreTest.php
index be4be4bce212468bb48714a827055cbe9ff6b221..a39102767e4fc7f7168a46f8a84cbf626eaea029 100644
--- a/dev/tests/integration/testsuite/Magento/Store/Model/StoreTest.php
+++ b/dev/tests/integration/testsuite/Magento/Store/Model/StoreTest.php
@@ -41,12 +41,12 @@ class StoreTest extends \PHPUnit_Framework_TestCase
             'registry' => $objectManager->get('Magento\Framework\Registry'),
             'extensionFactory' => $objectManager->get('Magento\Framework\Api\ExtensionAttributesFactory'),
             'customAttributeFactory' => $objectManager->get('Magento\Framework\Api\AttributeValueFactory'),
-            'resource' => $objectManager->get('Magento\Store\Model\Resource\Store'),
+            'resource' => $objectManager->get('Magento\Store\Model\ResourceModel\Store'),
             'coreFileStorageDatabase' => $objectManager->get('Magento\MediaStorage\Helper\File\Storage\Database'),
             'configCacheType' => $objectManager->get('Magento\Framework\App\Cache\Type\Config'),
             'url' => $objectManager->get('Magento\Framework\Url'),
             'request' => $objectManager->get('Magento\Framework\App\RequestInterface'),
-            'configDataResource' => $objectManager->get('Magento\Config\Model\Resource\Config\Data'),
+            'configDataResource' => $objectManager->get('Magento\Config\Model\ResourceModel\Config\Data'),
             'filesystem' => $objectManager->get('Magento\Framework\Filesystem'),
             'config' => $objectManager->get('Magento\Framework\App\Config\ReinitableConfigInterface'),
             'storeManager' => $objectManager->get('Magento\Store\Model\StoreManager'),
diff --git a/dev/tests/integration/testsuite/Magento/Tax/Model/Rate/SourceTest.php b/dev/tests/integration/testsuite/Magento/Tax/Model/Rate/SourceTest.php
index 5dca9b62f6079448ea85f7f76e476db383797c80..7a6fd6bab4c6320217b164e681d403ba5d56bc1b 100644
--- a/dev/tests/integration/testsuite/Magento/Tax/Model/Rate/SourceTest.php
+++ b/dev/tests/integration/testsuite/Magento/Tax/Model/Rate/SourceTest.php
@@ -12,8 +12,8 @@ class SourceTest extends \PHPUnit_Framework_TestCase
 {
     public function testToOptionArray()
     {
-        /** @var \Magento\Tax\Model\Resource\Calculation\Rate\Collection $collection */
-        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\Resource\Calculation\Rate\Collection');
+        /** @var \Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection $collection */
+        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection');
         $expectedResult = [];
         /** @var $taxRate \Magento\Tax\Model\Calculation\Rate */
         foreach ($collection as $taxRate) {
diff --git a/dev/tests/integration/testsuite/Magento/Tax/Model/Resource/Calculation/Rule/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Tax/Model/ResourceModel/Calculation/Rule/CollectionTest.php
similarity index 91%
rename from dev/tests/integration/testsuite/Magento/Tax/Model/Resource/Calculation/Rule/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Tax/Model/ResourceModel/Calculation/Rule/CollectionTest.php
index d0ad2cb4d12c8ea439713fa354c866b0be472bc5..96f9d49652b250c75ab55cf3a416424ae22c0fe7 100644
--- a/dev/tests/integration/testsuite/Magento/Tax/Model/Resource/Calculation/Rule/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Tax/Model/ResourceModel/Calculation/Rule/CollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tax\Model\Resource\Calculation\Rule;
+namespace Magento\Tax\Model\ResourceModel\Calculation\Rule;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
@@ -28,7 +28,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
      */
     public function testSetClassTypeFilter($classType, $elementId, $expected)
     {
-        $collection = $this->_objectManager->create('Magento\Tax\Model\Resource\Calculation\Rule\Collection');
+        $collection = $this->_objectManager->create('Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection');
         $collection->setClassTypeFilter($classType, $elementId);
         $this->assertRegExp($expected, (string)$collection->getSelect());
     }
@@ -56,7 +56,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
      */
     public function testSetClassTypeFilterWithWrongType()
     {
-        $collection = $this->_objectManager->create('Magento\Tax\Model\Resource\Calculation\Rule\Collection');
+        $collection = $this->_objectManager->create('Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection');
         $collection->setClassTypeFilter('WrongType', 1);
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Tax/Model/Resource/CalculationTest.php b/dev/tests/integration/testsuite/Magento/Tax/Model/ResourceModel/CalculationTest.php
similarity index 95%
rename from dev/tests/integration/testsuite/Magento/Tax/Model/Resource/CalculationTest.php
rename to dev/tests/integration/testsuite/Magento/Tax/Model/ResourceModel/CalculationTest.php
index e58f74a57e393c92ab49042a4b6c0efc68e9c926..5be204c831a780262bf784d97e175fe93702252c 100644
--- a/dev/tests/integration/testsuite/Magento/Tax/Model/Resource/CalculationTest.php
+++ b/dev/tests/integration/testsuite/Magento/Tax/Model/ResourceModel/CalculationTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tax\Model\Resource;
+namespace Magento\Tax\Model\ResourceModel;
 
 class CalculationTest extends \PHPUnit_Framework_TestCase
 {
@@ -34,7 +34,7 @@ class CalculationTest extends \PHPUnit_Framework_TestCase
                 'product_class_id' => $productTaxClasses[0],
             ]
         );
-        $taxCalculation = $objectManager->get('Magento\Tax\Model\Resource\Calculation');
+        $taxCalculation = $objectManager->get('Magento\Tax\Model\ResourceModel\Calculation');
         $this->assertEquals($taxRate->getRateIds(), $taxCalculation->getRate($data));
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Tax/Model/Resource/Report/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Tax/Model/ResourceModel/Report/CollectionTest.php
similarity index 88%
rename from dev/tests/integration/testsuite/Magento/Tax/Model/Resource/Report/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Tax/Model/ResourceModel/Report/CollectionTest.php
index cb0f8e025d47f83a7c901c4403fe9772002badbf..328f7a4abca328b49ba5a5e66545f55b455c22e2 100644
--- a/dev/tests/integration/testsuite/Magento/Tax/Model/Resource/Report/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Tax/Model/ResourceModel/Report/CollectionTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Tax\Model\Resource\Report;
+namespace Magento\Tax\Model\ResourceModel\Report;
 
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Tax\Model\Resource\Report\Collection
+     * @var \Magento\Tax\Model\ResourceModel\Report\Collection
      */
     private $_collection;
 
     protected function setUp()
     {
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
-        $this->_collection = $objectManager->create('Magento\Tax\Model\Resource\Report\Collection');
+        $this->_collection = $objectManager->create('Magento\Tax\Model\ResourceModel\Report\Collection');
         $this->_collection->setPeriod('day')->setDateRange(null, null)->addStoreFilter([1]);
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Tax/Model/Sales/Total/Quote/SetupUtil.php b/dev/tests/integration/testsuite/Magento/Tax/Model/Sales/Total/Quote/SetupUtil.php
index 331bfebab31ad4078259e912e982010cb44302e6..852c87246fd2806e123b63342ffaff815c6d1e2d 100644
--- a/dev/tests/integration/testsuite/Magento/Tax/Model/Sales/Total/Quote/SetupUtil.php
+++ b/dev/tests/integration/testsuite/Magento/Tax/Model/Sales/Total/Quote/SetupUtil.php
@@ -213,8 +213,8 @@ class SetupUtil
      */
     protected function setConfig($configData)
     {
-        /** @var \Magento\Config\Model\Resource\Config $config */
-        $config = $this->objectManager->get('Magento\Config\Model\Resource\Config');
+        /** @var \Magento\Config\Model\ResourceModel\Config $config */
+        $config = $this->objectManager->get('Magento\Config\Model\ResourceModel\Config');
         foreach ($configData as $path => $value) {
             if ($path == Config::CONFIG_XML_PATH_SHIPPING_TAX_CLASS) {
                 $value = $this->productTaxClasses[$value];
diff --git a/dev/tests/integration/testsuite/Magento/Tax/Model/TaxClass/Source/CustomerTest.php b/dev/tests/integration/testsuite/Magento/Tax/Model/TaxClass/Source/CustomerTest.php
index a51d1516ebd36a58a60255ad4ca334311222d390..edccd15df5a46b6ada34e3797815cb463cb3baf9 100644
--- a/dev/tests/integration/testsuite/Magento/Tax/Model/TaxClass/Source/CustomerTest.php
+++ b/dev/tests/integration/testsuite/Magento/Tax/Model/TaxClass/Source/CustomerTest.php
@@ -12,8 +12,8 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
 {
     public function testGetAllOptions()
     {
-        /** @var \Magento\Tax\Model\Resource\TaxClass\Collection $collection */
-        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\Resource\TaxClass\Collection');
+        /** @var \Magento\Tax\Model\ResourceModel\TaxClass\Collection $collection */
+        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\ResourceModel\TaxClass\Collection');
         $expectedResult = [];
         /** @var \Magento\Tax\Model\ClassModel $taxClass */
         foreach ($collection as $taxClass) {
@@ -35,8 +35,8 @@ class CustomerTest extends \PHPUnit_Framework_TestCase
 
     public function testGetAllOptionsWithDefaultValues()
     {
-        /** @var \Magento\Tax\Model\Resource\TaxClass\Collection $collection */
-        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\Resource\TaxClass\Collection');
+        /** @var \Magento\Tax\Model\ResourceModel\TaxClass\Collection $collection */
+        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\ResourceModel\TaxClass\Collection');
         $expectedResult = [];
         /** @var \Magento\Tax\Model\ClassModel $taxClass */
         foreach ($collection as $taxClass) {
diff --git a/dev/tests/integration/testsuite/Magento/Tax/Model/TaxClass/Source/ProductTest.php b/dev/tests/integration/testsuite/Magento/Tax/Model/TaxClass/Source/ProductTest.php
index 68fe521192127245dfa2ac9deba07289afbae16f..78501683898e6baa18ddf24c0eda4f658858d97a 100644
--- a/dev/tests/integration/testsuite/Magento/Tax/Model/TaxClass/Source/ProductTest.php
+++ b/dev/tests/integration/testsuite/Magento/Tax/Model/TaxClass/Source/ProductTest.php
@@ -12,8 +12,8 @@ class ProductTest extends \PHPUnit_Framework_TestCase
 {
     public function testGetAllOptions()
     {
-        /** @var \Magento\Tax\Model\Resource\TaxClass\Collection $collection */
-        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\Resource\TaxClass\Collection');
+        /** @var \Magento\Tax\Model\ResourceModel\TaxClass\Collection $collection */
+        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\ResourceModel\TaxClass\Collection');
         $expectedResult = [];
         /** @var \Magento\Tax\Model\ClassModel $taxClass */
         foreach ($collection as $taxClass) {
@@ -35,8 +35,8 @@ class ProductTest extends \PHPUnit_Framework_TestCase
 
     public function testGetAllOptionsWithDefaultValues()
     {
-        /** @var \Magento\Tax\Model\Resource\TaxClass\Collection $collection */
-        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\Resource\TaxClass\Collection');
+        /** @var \Magento\Tax\Model\ResourceModel\TaxClass\Collection $collection */
+        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\ResourceModel\TaxClass\Collection');
         $expectedResult = [];
         /** @var \Magento\Tax\Model\ClassModel $taxClass */
         foreach ($collection as $taxClass) {
diff --git a/dev/tests/integration/testsuite/Magento/Tax/Model/TaxRateCollectionTest.php b/dev/tests/integration/testsuite/Magento/Tax/Model/TaxRateCollectionTest.php
index bc918cefada838479902966c6d9c469e74dfeb9c..97626ac96cf1fd61a488686d61128036a280a566 100644
--- a/dev/tests/integration/testsuite/Magento/Tax/Model/TaxRateCollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Tax/Model/TaxRateCollectionTest.php
@@ -12,8 +12,8 @@ class TaxRateCollectionTest extends \PHPUnit_Framework_TestCase
 {
     public function testCreateTaxRateCollectionItem()
     {
-        /** @var \Magento\Tax\Model\Resource\Calculation\Rate\Collection $collection */
-        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\Resource\Calculation\Rate\Collection');
+        /** @var \Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection $collection */
+        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection');
         $dbTaxRatesQty = $collection->count();
         if (($dbTaxRatesQty == 0) || ($collection->getFirstItem()->getId() != 1)) {
             $this->fail("Preconditions failed.");
diff --git a/dev/tests/integration/testsuite/Magento/Tax/Model/TaxRuleCollectionTest.php b/dev/tests/integration/testsuite/Magento/Tax/Model/TaxRuleCollectionTest.php
index 874d182472090fc5c59c2a32977d9dd84f8f8e76..1b7b4e70ddadca1ca2f823bd33ca584f7c7741b9 100644
--- a/dev/tests/integration/testsuite/Magento/Tax/Model/TaxRuleCollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Tax/Model/TaxRuleCollectionTest.php
@@ -16,8 +16,8 @@ class TaxRuleCollectionTest extends \PHPUnit_Framework_TestCase
      */
     public function testCreateTaxRuleCollectionItem()
     {
-        /** @var \Magento\Tax\Model\Resource\Calculation\Rule\Collection $collection */
-        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\Resource\Calculation\Rule\Collection');
+        /** @var \Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection $collection */
+        $collection = Bootstrap::getObjectManager()->get('Magento\Tax\Model\ResourceModel\Calculation\Rule\Collection');
         $dbTaxRulesQty = $collection->count();
 
         /** @var \Magento\Tax\Model\Calculation\Rule $firstTaxRuleFixture */
diff --git a/dev/tests/integration/testsuite/Magento/Tax/_files/report_tax.php b/dev/tests/integration/testsuite/Magento/Tax/_files/report_tax.php
index e67bfdaf96c8ed2d74f07abc7c3955317ac42b9b..8b64d9dc18bcade8ffddab87c47218fc770f42d9 100644
--- a/dev/tests/integration/testsuite/Magento/Tax/_files/report_tax.php
+++ b/dev/tests/integration/testsuite/Magento/Tax/_files/report_tax.php
@@ -6,8 +6,8 @@
 
 // refresh report statistics
 $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
-/** @var \Magento\Tax\Model\Resource\Report\Tax $reportResource */
-$reportResource = $objectManager->create('Magento\Tax\Model\Resource\Report\Tax');
+/** @var \Magento\Tax\Model\ResourceModel\Report\Tax $reportResource */
+$reportResource = $objectManager->create('Magento\Tax\Model\ResourceModel\Report\Tax');
 $reportResource->beginTransaction();
 // prevent table truncation by incrementing the transaction nesting level counter
 try {
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php
index 7863c4201bd73d77dc7ab1ff4bbc1eb3cefb2c12..c998094fc963a3b525515d662743fbea282d8e82 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/AclConfigFilesTest.php
@@ -5,7 +5,6 @@
  */
 namespace Magento\Test\Integrity\Modular;
 
-use Magento\Framework\App\Filesystem\DirectoryList;
 
 class AclConfigFilesTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php
index 79b69588428780b553ff4bc8513e573aacc7bc81..42b6a74d7e06d84479dcb2fc13326905dedaf2c1 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/DiConfigFilesTest.php
@@ -92,7 +92,7 @@ class DiConfigFilesTest extends \PHPUnit_Framework_TestCase
 
         $output = [];
         foreach ($common as $path => $file) {
-            $output[$path] = [$file];
+            $output[substr($path, strlen(BP))] = [$file];
         }
 
         return $output;
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php
index 5a330a83dbe836640ece9461625fc7b04f26792e..f12917f9c456deeea853cda63ec8005182bec8ee 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/IndexerConfigFilesTest.php
@@ -5,7 +5,6 @@
  */
 namespace Magento\Test\Integrity\Modular;
 
-use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\Filesystem;
 
 class IndexerConfigFilesTest extends \PHPUnit_Framework_TestCase
@@ -51,13 +50,6 @@ class IndexerConfigFilesTest extends \PHPUnit_Framework_TestCase
      */
     public function indexerConfigFileDataProvider()
     {
-        /** @var Filesystem $filesystem */
-        $utilityFiles = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
-            ->get('\Magento\Framework\App\Utility\Files');
-
-        $utilityFiles->getConfigFiles('indexer.xml');
-
-        $dataProviderResult = $utilityFiles->getConfigFiles('indexer.xml');
-        return $dataProviderResult;
+        return \Magento\Framework\App\Utility\Files::init()->getConfigFiles('indexer.xml');
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/LayoutFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/LayoutFilesTest.php
index 1c8ed4acb2d3bd9359147653798f0177f5d60379..38b2e3cf039e7f9879d1cc6d0518e05b1c9afb7f 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/LayoutFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/LayoutFilesTest.php
@@ -83,20 +83,21 @@ class LayoutFilesTest extends \PHPUnit_Framework_TestCase
 
         // Arguments, evaluation of which causes a run-time error, because of unsafe assumptions to the environment
         $typeAttr = \Magento\Framework\View\Model\Layout\Merge::TYPE_ATTRIBUTE;
+        $prCollection = 'Magento\GroupedProduct\Model\ResourceModel\Product\Type\Grouped\AssociatedProductsCollection';
         $ignoredArguments = [
             [
                 $typeAttr => 'object',
-                'value' => 'Magento\GroupedProduct\Model\Resource\Product\Type\Grouped\AssociatedProductsCollection',
+                'value' => $prCollection,
             ],
-            [$typeAttr => 'object', 'value' => 'Magento\Solr\Model\Resource\Search\Grid\Collection'],
-            [$typeAttr => 'object', 'value' => 'Magento\Wishlist\Model\Resource\Item\Collection\Grid'],
+            [$typeAttr => 'object', 'value' => 'Magento\Solr\Model\ResourceModel\Search\Grid\Collection'],
+            [$typeAttr => 'object', 'value' => 'Magento\Wishlist\Model\ResourceModel\Item\Collection\Grid'],
             [
                 $typeAttr => 'object',
-                'value' => 'Magento\CustomerSegment\Model\Resource\Segment\Report\Detail\Collection'
+                'value' => 'Magento\CustomerSegment\Model\ResourceModel\Segment\Report\Detail\Collection'
             ],
             [$typeAttr => 'options', 'model' => 'Magento\Solr\Model\Adminhtml\Search\Grid\Options'],
-            [$typeAttr => 'options', 'model' => 'Magento\Logging\Model\Resource\Grid\ActionsGroup'],
-            [$typeAttr => 'options', 'model' => 'Magento\Logging\Model\Resource\Grid\Actions'],
+            [$typeAttr => 'options', 'model' => 'Magento\Logging\Model\ResourceModel\Grid\ActionsGroup'],
+            [$typeAttr => 'options', 'model' => 'Magento\Logging\Model\ResourceModel\Grid\Actions'],
         ];
         $isIgnoredArgument = in_array($argumentData, $ignoredArguments, true);
 
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ResourcesConfigFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ResourcesConfigFilesTest.php
index b687b6a9207d9637926c0753386eb52ef8b0feb5..044605bcc3b05fb32ee6330fbd5c37f6b8e46daf 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ResourcesConfigFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Modular/ResourcesConfigFilesTest.php
@@ -10,7 +10,7 @@ use Magento\Framework\Component\ComponentRegistrar;
 class ResourcesConfigFilesTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\App\Resource\Config\Reader
+     * @var \Magento\Framework\App\ResourceConnection\Config\Reader
      */
     protected $_model;
 
@@ -32,7 +32,7 @@ class ResourcesConfigFilesTest extends \PHPUnit_Framework_TestCase
         $deploymentConfigMock->expects($this->any())->method('getConfiguration')->will($this->returnValue([]));
         $objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
         $this->_model = $objectManager->create(
-            'Magento\Framework\App\Resource\Config\Reader',
+            'Magento\Framework\App\ResourceConnection\Config\Reader',
             [
                 'fileResolver' => $fileResolverMock,
                 'validationState' => $validationStateMock,
diff --git a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php
index ca81ea4973a098eadb1bc87d8bbcb0eca2fa70e1..95a9bb0d8cb7babcddd36aa3413363ee761ac021 100644
--- a/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php
+++ b/dev/tests/integration/testsuite/Magento/Test/Integrity/Theme/XmlFilesTest.php
@@ -36,7 +36,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase
             ->get('Magento\Framework\Component\DirSearch');
         $files = $componentDirSearch->collectFiles(ComponentRegistrar::THEME, 'etc/view.xml');
         foreach ($files as $file) {
-            $result[$file] = [$file];
+            $result[substr($file, strlen(BP))] = [$file];
         }
         return $result;
     }
@@ -60,7 +60,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase
         $componentRegistrar = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()
             ->get('\Magento\Framework\Component\ComponentRegistrar');
         foreach ($componentRegistrar->getPaths(ComponentRegistrar::THEME) as $themeDir) {
-            $result[$themeDir] = [$themeDir];
+            $result[substr($themeDir, strlen(BP))] = [$themeDir];
         }
         return $result;
     }
@@ -102,7 +102,7 @@ class XmlFilesTest extends \PHPUnit_Framework_TestCase
             ->get('Magento\Framework\Component\DirSearch');
         $files = $componentDirSearch->collectFiles(ComponentRegistrar::THEME, 'theme.xml');
         foreach ($files as $file) {
-            $result[$file] = [$file];
+            $result[substr($file, strlen(BP))] = [$file];
         }
         return $result;
     }
diff --git a/dev/tests/integration/testsuite/Magento/Theme/Model/Resource/Theme/CollectionTest.php b/dev/tests/integration/testsuite/Magento/Theme/Model/ResourceModel/Theme/CollectionTest.php
similarity index 91%
rename from dev/tests/integration/testsuite/Magento/Theme/Model/Resource/Theme/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/Theme/Model/ResourceModel/Theme/CollectionTest.php
index fba3925eeec8c0cf7361002557dff9b590501e96..72ef76b8beb02426f43ea3bd2771bfdbcb02ac03 100644
--- a/dev/tests/integration/testsuite/Magento/Theme/Model/Resource/Theme/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Theme/Model/ResourceModel/Theme/CollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Theme\Model\Resource\Theme;
+namespace Magento\Theme\Model\ResourceModel\Theme;
 
 use Magento\Framework\View\Design\ThemeInterface;
 
@@ -17,12 +17,12 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @return \Magento\Theme\Model\Resource\Theme\Collection
+     * @return \Magento\Theme\Model\ResourceModel\Theme\Collection
      */
     protected static function _getThemesCollection()
     {
         return \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Theme\Model\Resource\Theme\Collection'
+            'Magento\Theme\Model\ResourceModel\Theme\Collection'
         );
     }
 
@@ -89,9 +89,9 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
      */
     public function testAddAreaFilter($area, $themeCount)
     {
-        /** @var $themeCollection \Magento\Theme\Model\Resource\Theme\Collection */
+        /** @var $themeCollection \Magento\Theme\Model\ResourceModel\Theme\Collection */
         $themeCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Theme\Model\Resource\Theme\Collection'
+            'Magento\Theme\Model\ResourceModel\Theme\Collection'
         );
         $themeCollection->addAreaFilter($area);
         $this->assertCount($themeCount, $themeCollection);
@@ -113,13 +113,13 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
      * @magentoDataFixture setThemeFixture
      * @magentoDbIsolation enabled
      * @dataProvider addTypeFilterDataProvider
-     * @covers \Magento\Theme\Model\Resource\Theme\Collection::addAreaFilter
+     * @covers \Magento\Theme\Model\ResourceModel\Theme\Collection::addAreaFilter
      */
     public function testAddTypeFilter($themeType, $themeCount)
     {
-        /** @var $themeCollection \Magento\Theme\Model\Resource\Theme\Collection */
+        /** @var $themeCollection \Magento\Theme\Model\ResourceModel\Theme\Collection */
         $themeCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Theme\Model\Resource\Theme\Collection'
+            'Magento\Theme\Model\ResourceModel\Theme\Collection'
         );
         $themeCollection->addAreaFilter('test_area3');
         if ($themeType !== false) {
@@ -144,13 +144,13 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     /**
      * @magentoDataFixture setThemeFixture
      * @magentoDbIsolation enabled
-     * @covers \Magento\Theme\Model\Resource\Theme\Collection::filterVisibleThemes
+     * @covers \Magento\Theme\Model\ResourceModel\Theme\Collection::filterVisibleThemes
      */
     public function testFilterVisibleThemes()
     {
-        /** @var $themeCollection \Magento\Theme\Model\Resource\Theme\Collection */
+        /** @var $themeCollection \Magento\Theme\Model\ResourceModel\Theme\Collection */
         $themeCollection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Theme\Model\Resource\Theme\Collection'
+            'Magento\Theme\Model\ResourceModel\Theme\Collection'
         );
         $themeCollection->addAreaFilter('test_area3')->filterVisibleThemes();
         $this->assertCount(2, $themeCollection);
@@ -194,7 +194,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     /**
      * Set themes fixtures
      *
-     * @return \Magento\Theme\Model\Resource\Theme\Collection
+     * @return \Magento\Theme\Model\ResourceModel\Theme\Collection
      */
     public static function setThemeFixture()
     {
@@ -345,15 +345,15 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Theme\Model\Resource\Theme\Collection::filterPhysicalThemes
+     * @covers \Magento\Theme\Model\ResourceModel\Theme\Collection::filterPhysicalThemes
      */
     public function testFilterPhysicalThemesPerPage()
     {
         $collection = $this->_getThemesCollection();
-        $collection->filterPhysicalThemes(1, \Magento\Theme\Model\Resource\Theme\Collection::DEFAULT_PAGE_SIZE);
+        $collection->filterPhysicalThemes(1, \Magento\Theme\Model\ResourceModel\Theme\Collection::DEFAULT_PAGE_SIZE);
 
         $this->assertLessThanOrEqual(
-            \Magento\Theme\Model\Resource\Theme\Collection::DEFAULT_PAGE_SIZE,
+            \Magento\Theme\Model\ResourceModel\Theme\Collection::DEFAULT_PAGE_SIZE,
             $collection->count()
         );
 
@@ -365,7 +365,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Theme\Model\Resource\Theme\Collection::filterPhysicalThemes
+     * @covers \Magento\Theme\Model\ResourceModel\Theme\Collection::filterPhysicalThemes
      */
     public function testFilterPhysicalThemes()
     {
diff --git a/dev/tests/integration/testsuite/Magento/Theme/Model/Theme/Source/ThemeTest.php b/dev/tests/integration/testsuite/Magento/Theme/Model/Theme/Source/ThemeTest.php
index 4d60b8745124a0c86303de26905e22926e89440a..5dccbfdaf912cb741f1edf44a4b6e4f019fd438d 100644
--- a/dev/tests/integration/testsuite/Magento/Theme/Model/Theme/Source/ThemeTest.php
+++ b/dev/tests/integration/testsuite/Magento/Theme/Model/Theme/Source/ThemeTest.php
@@ -19,7 +19,8 @@ class ThemeTest extends \PHPUnit_Framework_TestCase
         $model = Bootstrap::getObjectManager()->create('Magento\Theme\Model\Theme\Source\Theme');
 
         /** @var $expectedCollection \Magento\Theme\Model\Theme\Collection */
-        $expectedCollection = Bootstrap::getObjectManager()->create('Magento\Theme\Model\Resource\Theme\Collection');
+        $expectedCollection = Bootstrap::getObjectManager()
+            ->create('Magento\Theme\Model\ResourceModel\Theme\Collection');
         $expectedCollection->addFilter('area', 'frontend');
 
         $expectedItemsCount = count($expectedCollection);
diff --git a/dev/tests/integration/testsuite/Magento/Theme/Observer/ThemeRegistrationObserverTest.php b/dev/tests/integration/testsuite/Magento/Theme/Observer/ThemeRegistrationObserverTest.php
index 7598cfb6b2d7082921a817e190440d5952cc6ee0..d4f7b8f2a8a2674ce92068153648d8fe9070504e 100644
--- a/dev/tests/integration/testsuite/Magento/Theme/Observer/ThemeRegistrationObserverTest.php
+++ b/dev/tests/integration/testsuite/Magento/Theme/Observer/ThemeRegistrationObserverTest.php
@@ -39,7 +39,7 @@ class ThemeRegistrationObserverTest extends \PHPUnit_Framework_TestCase
             'Magento\Theme\Model\Theme\Registration',
             ['register'],
             [
-                $this->_objectManager->create('Magento\Theme\Model\Resource\Theme\Data\CollectionFactory'),
+                $this->_objectManager->create('Magento\Theme\Model\ResourceModel\Theme\Data\CollectionFactory'),
                 $this->_objectManager->create('Magento\Theme\Model\Theme\Data\Collection'),
                 $this->_objectManager->create('Magento\Framework\Filesystem')
             ]
diff --git a/dev/tests/integration/testsuite/Magento/Translation/Model/StringTest.php b/dev/tests/integration/testsuite/Magento/Translation/Model/StringTest.php
index 0dbc805c3f982af928f7f8a21cf53f9cd99e6f53..0948030d1464d569409985196b3ce88d19ad56fa 100644
--- a/dev/tests/integration/testsuite/Magento/Translation/Model/StringTest.php
+++ b/dev/tests/integration/testsuite/Magento/Translation/Model/StringTest.php
@@ -22,7 +22,7 @@ class StringTest extends \PHPUnit_Framework_TestCase
 
     public function testConstructor()
     {
-        $this->assertInstanceOf('Magento\Translation\Model\Resource\StringUtils', $this->_model->getResource());
+        $this->assertInstanceOf('Magento\Translation\Model\ResourceModel\StringUtils', $this->_model->getResource());
     }
 
     public function testSetGetString()
diff --git a/dev/tests/integration/testsuite/Magento/Translation/_files/db_translate.php b/dev/tests/integration/testsuite/Magento/Translation/_files/db_translate.php
index 50032424af0c5081152e4b0d67de796d6bab735e..951c1b68f91790ada241f37482905818c5a1c1f9 100644
--- a/dev/tests/integration/testsuite/Magento/Translation/_files/db_translate.php
+++ b/dev/tests/integration/testsuite/Magento/Translation/_files/db_translate.php
@@ -4,8 +4,8 @@
  * See COPYING.txt for license details.
  */
 
-/** @var \Magento\Translation\Model\Resource\StringUtils $translateString */
+/** @var \Magento\Translation\Model\ResourceModel\StringUtils $translateString */
 $translateString = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Translation\Model\Resource\StringUtils'
+    'Magento\Translation\Model\ResourceModel\StringUtils'
 );
 $translateString->saveTranslate('Fixture String', 'Fixture Db Translation');
diff --git a/dev/tests/integration/testsuite/Magento/Translation/_files/db_translate_admin_store.php b/dev/tests/integration/testsuite/Magento/Translation/_files/db_translate_admin_store.php
index 64c21e770d64759476f963177b8fbc39e724a1a4..51c00108189f12ebf9b9492961f7255500945499 100644
--- a/dev/tests/integration/testsuite/Magento/Translation/_files/db_translate_admin_store.php
+++ b/dev/tests/integration/testsuite/Magento/Translation/_files/db_translate_admin_store.php
@@ -11,8 +11,8 @@
 )->load(
     \Magento\Framework\App\Area::PART_CONFIG
 );
-/** @var \Magento\Translation\Model\Resource\StringUtils $translateString */
+/** @var \Magento\Translation\Model\ResourceModel\StringUtils $translateString */
 $translateString = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Translation\Model\Resource\StringUtils'
+    'Magento\Translation\Model\ResourceModel\StringUtils'
 );
 $translateString->saveTranslate('string to translate', 'predefined string translation', null);
diff --git a/dev/tests/integration/testsuite/Magento/UrlRewrite/Block/Catalog/Category/TreeTest.php b/dev/tests/integration/testsuite/Magento/UrlRewrite/Block/Catalog/Category/TreeTest.php
index 0e8789c24cf99a9b4a072db929fea5b86b515197..1052c19fa07edecc2f534c47776f2f355bca7444 100644
--- a/dev/tests/integration/testsuite/Magento/UrlRewrite/Block/Catalog/Category/TreeTest.php
+++ b/dev/tests/integration/testsuite/Magento/UrlRewrite/Block/Catalog/Category/TreeTest.php
@@ -63,6 +63,6 @@ class TreeTest extends \PHPUnit_Framework_TestCase
     public function testGetCategoryCollection()
     {
         $collection = $this->_treeBlock->getCategoryCollection();
-        $this->assertInstanceOf('Magento\Catalog\Model\Resource\Category\Collection', $collection);
+        $this->assertInstanceOf('Magento\Catalog\Model\ResourceModel\Category\Collection', $collection);
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/UrlRewrite/Block/Cms/Page/Edit/FormTest.php b/dev/tests/integration/testsuite/Magento/UrlRewrite/Block/Cms/Page/Edit/FormTest.php
index f84835366f0cfcc9f70a2c1e09c00ee2394783da..f3b71d3dce6c5af7fee50a4fb8f1047c19e9ad34 100644
--- a/dev/tests/integration/testsuite/Magento/UrlRewrite/Block/Cms/Page/Edit/FormTest.php
+++ b/dev/tests/integration/testsuite/Magento/UrlRewrite/Block/Cms/Page/Edit/FormTest.php
@@ -132,7 +132,7 @@ class FormTest extends \PHPUnit_Framework_TestCase
     protected function _getCmsPageWithStoresMock($stores)
     {
         $resourceMock = $this->getMockBuilder(
-            'Magento\Cms\Model\Resource\Page'
+            'Magento\Cms\Model\ResourceModel\Page'
         )->setMethods(
             ['lookupStoreIds']
         )->disableOriginalConstructor()->getMock();
diff --git a/dev/tests/integration/testsuite/Magento/User/Block/Role/Grid/UserTest.php b/dev/tests/integration/testsuite/Magento/User/Block/Role/Grid/UserTest.php
index aca6a5d33f3fab115a62900de918846927d33493..2a63a2b2c802041549929977b886c808f3709cd6 100644
--- a/dev/tests/integration/testsuite/Magento/User/Block/Role/Grid/UserTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Block/Role/Grid/UserTest.php
@@ -26,6 +26,9 @@ class UserTest extends \PHPUnit_Framework_TestCase
     public function testPreparedCollection()
     {
         $this->_block->toHtml();
-        $this->assertInstanceOf('Magento\User\Model\Resource\Role\User\Collection', $this->_block->getCollection());
+        $this->assertInstanceOf(
+            'Magento\User\Model\ResourceModel\Role\User\Collection',
+            $this->_block->getCollection()
+        );
     }
 }
diff --git a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/InvalidateTokenTest.php b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/InvalidateTokenTest.php
index 58f4fc2dabea0bfdb31047a52dceb25460a16076..dcce783b9a521183d729591ee260c33b91f2f340 100644
--- a/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/InvalidateTokenTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Controller/Adminhtml/User/InvalidateTokenTest.php
@@ -50,9 +50,9 @@ class InvalidateTokenTest extends \Magento\TestFramework\TestCase\AbstractBacken
         /** @var \Magento\Integration\Api\AdminTokenServiceInterface $tokenService */
         $tokenService = Bootstrap::getObjectManager()->get('Magento\Integration\Api\AdminTokenServiceInterface');
 
-        /** @var \Magento\Integration\Model\Resource\Oauth\Token\CollectionFactory $tokenModelCollectionFactory */
+        /** @var \Magento\Integration\Model\ResourceModel\Oauth\Token\CollectionFactory $tokenModelCollectionFactory */
         $tokenModelCollectionFactory = Bootstrap::getObjectManager()->get(
-            'Magento\Integration\Model\Resource\Oauth\Token\CollectionFactory'
+            'Magento\Integration\Model\ResourceModel\Oauth\Token\CollectionFactory'
         );
 
         /** @var \Magento\User\Model\User $userModel */
diff --git a/dev/tests/integration/testsuite/Magento/User/Model/Resource/Role/User/CollectionTest.php b/dev/tests/integration/testsuite/Magento/User/Model/ResourceModel/Role/User/CollectionTest.php
similarity index 75%
rename from dev/tests/integration/testsuite/Magento/User/Model/Resource/Role/User/CollectionTest.php
rename to dev/tests/integration/testsuite/Magento/User/Model/ResourceModel/Role/User/CollectionTest.php
index dcc30353b3d9b6a196d8dbc8cb3887c1ad1019ba..4fceb1a19246d4c547714eee56f4ec7e4bc7946c 100644
--- a/dev/tests/integration/testsuite/Magento/User/Model/Resource/Role/User/CollectionTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Model/ResourceModel/Role/User/CollectionTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\User\Model\Resource\Role\User;
+namespace Magento\User\Model\ResourceModel\Role\User;
 
 /**
  * Role user collection test
@@ -12,14 +12,14 @@ namespace Magento\User\Model\Resource\Role\User;
 class CollectionTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\User\Model\Resource\Role\User\Collection
+     * @var \Magento\User\Model\ResourceModel\Role\User\Collection
      */
     protected $_collection;
 
     protected function setUp()
     {
         $this->_collection = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\User\Model\Resource\Role\User\Collection'
+            'Magento\User\Model\ResourceModel\Role\User\Collection'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/User/Model/Resource/UserTest.php b/dev/tests/integration/testsuite/Magento/User/Model/ResourceModel/UserTest.php
similarity index 81%
rename from dev/tests/integration/testsuite/Magento/User/Model/Resource/UserTest.php
rename to dev/tests/integration/testsuite/Magento/User/Model/ResourceModel/UserTest.php
index c443af46f377745436c07de11945e4e9f6f1ea2b..32d9ba94b66b6282f4148351d3cae1244bc9dc6b 100644
--- a/dev/tests/integration/testsuite/Magento/User/Model/Resource/UserTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Model/ResourceModel/UserTest.php
@@ -3,20 +3,20 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\User\Model\Resource;
+namespace Magento\User\Model\ResourceModel;
 
 /**
  * @magentoAppArea adminhtml
  */
 class UserTest extends \PHPUnit_Framework_TestCase
 {
-    /** @var \Magento\User\Model\Resource\User */
+    /** @var \Magento\User\Model\ResourceModel\User */
     protected $_model;
 
     protected function setUp()
     {
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->get(
-            'Magento\User\Model\Resource\User'
+            'Magento\User\Model\ResourceModel\User'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php b/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php
index 1da20e195ac5ae4f2080f7d75032a919912a776b..854a38cd66016e52b973ebce23845471e3392a66 100644
--- a/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php
+++ b/dev/tests/integration/testsuite/Magento/User/Model/UserTest.php
@@ -166,7 +166,7 @@ class UserTest extends \PHPUnit_Framework_TestCase
 
     public function testGetCollection()
     {
-        $this->assertInstanceOf('Magento\Framework\Model\Resource\Db\Collection\AbstractCollection',
+        $this->assertInstanceOf('Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
             $this->_model->getCollection());
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/User/_files/locked_users.php b/dev/tests/integration/testsuite/Magento/User/_files/locked_users.php
index 51a2f82c3687397d529c7f7d6ddb3f7bd875e1e6..c97799e53142c3aee4aff8c33c216dd348252ac4 100644
--- a/dev/tests/integration/testsuite/Magento/User/_files/locked_users.php
+++ b/dev/tests/integration/testsuite/Magento/User/_files/locked_users.php
@@ -46,6 +46,6 @@ $userIds[] = $model->getDataByKey('user_id');
 $defaultAdminUserId = 1;
 $lockLifetime = 86400;
 
-/** @var $modelLockedUsers \Magento\User\Model\Resource\User */
-$modelLockedUsers = $objectManager->create('Magento\User\Model\Resource\User');
+/** @var $modelLockedUsers \Magento\User\Model\ResourceModel\User */
+$modelLockedUsers = $objectManager->create('Magento\User\Model\ResourceModel\User');
 $modelLockedUsers->lock($userIds, $defaultAdminUserId, $lockLifetime);
diff --git a/dev/tests/integration/testsuite/Magento/Weee/_files/product_with_fpt.php b/dev/tests/integration/testsuite/Magento/Weee/_files/product_with_fpt.php
index 642fb51d596f7ab91c93958c5fddb208b124a518..9b235de2cf724bddd8820065c2194e7ba2fb7fa0 100644
--- a/dev/tests/integration/testsuite/Magento/Weee/_files/product_with_fpt.php
+++ b/dev/tests/integration/testsuite/Magento/Weee/_files/product_with_fpt.php
@@ -12,7 +12,7 @@ $entityTypeId = $entityModel->setType(\Magento\Catalog\Model\Product::ENTITY)->g
 $groupId = $installer->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
 
 $attribute = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-    'Magento\Catalog\Model\Resource\Eav\Attribute'
+    'Magento\Catalog\Model\ResourceModel\Eav\Attribute'
 );
 $attribute->setAttributeCode(
     'fpt_for_all'
diff --git a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/DesignAbstractionTest.php b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/DesignAbstractionTest.php
index 8d4ba2edcaa64e7b293c24e0c16bc579560d9583..427377534ed1e77094502bbf20b1f75bdfb69a07 100644
--- a/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/DesignAbstractionTest.php
+++ b/dev/tests/integration/testsuite/Magento/Widget/Block/Adminhtml/Widget/Instance/Edit/Chooser/DesignAbstractionTest.php
@@ -58,7 +58,7 @@ class DesignAbstractionTest extends \PHPUnit_Framework_TestCase
         $this->_block = new DesignAbstraction(
             $objectManager->get('Magento\Framework\View\Element\Template\Context'),
             $processorFactoryMock,
-            $objectManager->get('Magento\Theme\Model\Resource\Theme\CollectionFactory'),
+            $objectManager->get('Magento\Theme\Model\ResourceModel\Theme\CollectionFactory'),
             $appState,
             [
                 'name' => 'design_abstractions',
diff --git a/dev/tests/integration/testsuite/Magento/Widget/Model/Layout/UpdateTest.php b/dev/tests/integration/testsuite/Magento/Widget/Model/Layout/UpdateTest.php
index c422c8a6ed262884fde794f4a32e7392bddb8ab6..8a1cb6600a94f0a62407cb81b8b0cf35fe9cd372 100644
--- a/dev/tests/integration/testsuite/Magento/Widget/Model/Layout/UpdateTest.php
+++ b/dev/tests/integration/testsuite/Magento/Widget/Model/Layout/UpdateTest.php
@@ -24,7 +24,7 @@ class UpdateTest extends \PHPUnit_Framework_TestCase
         $this->_model = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
             'Magento\Widget\Model\Layout\Update'
         );
-        $this->assertInstanceOf('Magento\Widget\Model\Resource\Layout\Update', $this->_model->getResource());
+        $this->assertInstanceOf('Magento\Widget\Model\ResourceModel\Layout\Update', $this->_model->getResource());
     }
 
     /**
diff --git a/dev/tests/integration/testsuite/Magento/Widget/Model/Resource/Layout/UpdateTest.php b/dev/tests/integration/testsuite/Magento/Widget/Model/ResourceModel/Layout/UpdateTest.php
similarity index 93%
rename from dev/tests/integration/testsuite/Magento/Widget/Model/Resource/Layout/UpdateTest.php
rename to dev/tests/integration/testsuite/Magento/Widget/Model/ResourceModel/Layout/UpdateTest.php
index 258dd874ce6063ba5db1a8680cd64fa0146ed8f8..9819c2d9884d44c8e64e38b19faa850c581a5b2e 100644
--- a/dev/tests/integration/testsuite/Magento/Widget/Model/Resource/Layout/UpdateTest.php
+++ b/dev/tests/integration/testsuite/Magento/Widget/Model/ResourceModel/Layout/UpdateTest.php
@@ -3,19 +3,19 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Widget\Model\Resource\Layout;
+namespace Magento\Widget\Model\ResourceModel\Layout;
 
 class UpdateTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Widget\Model\Resource\Layout\Update
+     * @var \Magento\Widget\Model\ResourceModel\Layout\Update
      */
     protected $_resourceModel;
 
     protected function setUp()
     {
         $this->_resourceModel = \Magento\TestFramework\Helper\Bootstrap::getObjectManager()->create(
-            'Magento\Widget\Model\Resource\Layout\Update'
+            'Magento\Widget\Model\ResourceModel\Layout\Update'
         );
     }
 
diff --git a/dev/tests/integration/testsuite/Magento/Wishlist/Controller/IndexTest.php b/dev/tests/integration/testsuite/Magento/Wishlist/Controller/IndexTest.php
index 6bd3b050748eac7052b5c063a72d42afbafc5341..1f17a766c424f8a7c0e4cb70b08abc8372e6d85f 100644
--- a/dev/tests/integration/testsuite/Magento/Wishlist/Controller/IndexTest.php
+++ b/dev/tests/integration/testsuite/Magento/Wishlist/Controller/IndexTest.php
@@ -57,7 +57,7 @@ class IndexTest extends \Magento\TestFramework\TestCase\AbstractController
      * Verify wishlist view action
      *
      * The following is verified:
-     * - \Magento\Wishlist\Model\Resource\Item\Collection
+     * - \Magento\Wishlist\Model\ResourceModel\Item\Collection
      * - \Magento\Wishlist\Block\Customer\Wishlist
      * - \Magento\Wishlist\Block\Customer\Wishlist\Items
      * - \Magento\Wishlist\Block\Customer\Wishlist\Item\Column
diff --git a/dev/tests/js/JsTestDriver/jsTestDriverOrder.php b/dev/tests/js/JsTestDriver/jsTestDriverOrder.php
index b12aef10f57a3c4eea9993b1fa2092e7c5848e56..6314b1dbd16f5bda8d499c7b4e2a02b2fd85ccbe 100644
--- a/dev/tests/js/JsTestDriver/jsTestDriverOrder.php
+++ b/dev/tests/js/JsTestDriver/jsTestDriverOrder.php
@@ -21,6 +21,5 @@ return [
     '/lib/web/mage/decorate.js',
     '/lib/web/jquery/jquery.validate.js',
     '/lib/web/jquery/jquery.metadata.js',
-    '/lib/web/mage/translate.js',
-    '/lib/web/mage/requirejs/plugin/id-normalizer.js',
+    '/lib/web/mage/translate.js'
 ];
diff --git a/dev/tests/js/JsTestDriver/testsuite/mage/requirejs/plugin/id-normalizer-test.js b/dev/tests/js/JsTestDriver/testsuite/mage/requirejs/plugin/id-normalizer-test.js
deleted file mode 100644
index a52466bda124dec6a16b15e2ba7df362abf90408..0000000000000000000000000000000000000000
--- a/dev/tests/js/JsTestDriver/testsuite/mage/requirejs/plugin/id-normalizer-test.js
+++ /dev/null
@@ -1,42 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint globalstrict: true*/
-
-"use strict";
-
-/*jshint undef: false, newcap: false*/
-var IdNormalizerTest = TestCase('IdNormalizerTest');
-
-IdNormalizerTest.prototype.setUp = function() {
-    var defineArgs = jsunit.requirejsUtil.getDefineArgsInScript('lib/web/mage/requirejs/plugin/id-normalizer.js');
-    assertNotUndefined('There expected to be a define() call', defineArgs);
-    assertEquals('Wrong number of arguments in the define() call', 1, defineArgs.length);
-
-    this.normalizer = defineArgs[0];
-    assertObject(this.normalizer);
-    assertFunction(this.normalizer.normalize);
-    assertFunction(this.normalizer.load);
-};
-
-IdNormalizerTest.prototype.testNormalize = function () {
-    var actual = this.normalizer.normalize('Magento_Catalog::foo/bar.js');
-    assertEquals('Magento_Catalog/foo/bar.js', actual);
-};
-
-IdNormalizerTest.prototype.testLoad = function () {
-    // Check that load() is just a proxy
-    var modulePassed, onloadPassed;
-    var parentRequire = function (moduleIn, onloadIn) {
-        modulePassed = moduleIn;
-        onloadPassed = onloadIn;
-    };
-    var onload = function (){};
-
-    this.normalizer.load('module', parentRequire, onload);
-
-    assertEquals('module', modulePassed);
-    assertSame(onload, onloadPassed);
-};
-
diff --git a/dev/tests/js/jasmine/assets/gallery/config.json b/dev/tests/js/jasmine/assets/gallery/config.json
index b3c8b8bc0b38dd3e1669cb933ee8e6812ac1157e..d1d8e94d7f220a0b83321acaeebea6aaa86f9929 100644
--- a/dev/tests/js/jasmine/assets/gallery/config.json
+++ b/dev/tests/js/jasmine/assets/gallery/config.json
@@ -59,12 +59,17 @@
         "arrows": "false",
         "thumbwidth": "90",
         "thumbheight": "90",
-        "ratio": "1"
+        "ratio": "1",
+        "allowfullscreen": true
+    },
+    "fullscreen": {
+        "nav": false
     },
     "breakpoints": {
         "alias": {
             "conditions": {
-                "min-width": "0px"
+                "min-width": "0px",
+                "max-width": "1px"
             },
             "options": {
                 "options": {
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/core/layout.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/core/layout.test.js
index a39203675c280520e4f5d457537697bca38e7c9a..f2edf7f7065c3efda6c93cd7b903e7fbfabcb3c5 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/core/layout.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/core/layout.test.js
@@ -4,7 +4,7 @@
  */
 define([
     'underscore',
-    'Magento_Ui/js/core/renderer/layout'
+    'uiLayout'
 ], function (_, layout) {
     'use strict';
 
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js
index ce954310178c078b18b213f4c5415e82556b8f2e..3d1e7dcfe0dbe416b13b13bdc796fa5ba99b6290 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/columns/column.test.js
@@ -24,17 +24,17 @@ define([
         describe('sort method', function () {
             it('apply sorting first time', function () {
                 column.sort(true);
-                expect(column.sorting()).toBe('asc');
+                expect(column.sorting).toBe('asc');
             });
 
             it('apply sorting in other direction', function () {
                 column.sort(true).sort(true);
-                expect(column.sorting()).toBe('desc');
+                expect(column.sorting).toBe('desc');
             });
 
             it('remove sorting', function () {
                 column.sort(false);
-                expect(column.sorting()).toBeFalsy();
+                expect(column.sorting).toBeFalsy();
             });
         });
 
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/group.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js
similarity index 95%
rename from dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/group.test.js
rename to dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js
index 59e46e213d7c783c7332fe9a408da5e42c49419c..29267c110c52e82574e35789775526fa251bd918 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/group.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js
@@ -5,11 +5,11 @@
 
 define([
     'underscore',
-    'Magento_Ui/js/grid/filters/group'
+    'Magento_Ui/js/grid/filters/range'
 ], function (_, Group) {
     'use strict';
 
-    describe('ui/js/grid/filters/filters', function () {
+    describe('ui/js/grid/filters/range', function () {
         var group;
 
         beforeEach(function () {
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js
index 43df680002775664e8cdc4bcd344368ca253f63f..ef72deab470d0456fc9019d2b68b533d049c5132 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js
@@ -17,7 +17,7 @@ define([
             paging = new Paging({
                 pageSize: 2
             });
-            paging.totalRecords(7);
+            paging.totalRecords = 7;
         });
 
         describe('Normalize method', function () {
@@ -42,73 +42,73 @@ define([
         describe('countPages method', function () {
             it('correct number of pages', function () {
                 paging.countPages();
-                expect(paging.pages()).toBe(4);
+                expect(paging.pages).toBe(4);
             });
 
             it('if no records', function () {
-                paging.totalRecords(0);
+                paging.totalRecords = 0;
                 paging.countPages();
-                expect(paging.pages()).toBe(1);
+                expect(paging.pages).toBe(1);
             });
         });
 
         describe('page manipualations', function () {
             it('setPage method', function () {
                 paging.setPage(2);
-                expect(paging.current()).toBe(2);
+                expect(paging.current).toBe(2);
             });
 
             it('next', function () {
-                paging.current(1);
+                paging.current = 1;
                 paging.next();
-                expect(paging.current()).toBe(2);
+                expect(paging.current).toBe(2);
             });
 
             it('next out of boundary', function () {
-                paging.current(4);
+                paging.current = 4;
                 paging.next();
-                expect(paging.current()).toBe(4);
+                expect(paging.current).toBe(4);
             });
 
             it('prev', function () {
-                paging.current(4);
+                paging.current = 4;
                 paging.prev();
-                expect(paging.current()).toBe(3);
+                expect(paging.current).toBe(3);
             });
 
             it('prev out of boundary', function () {
-                paging.current(1);
+                paging.current = 1;
                 paging.prev();
-                expect(paging.current()).toBe(1);
+                expect(paging.current).toBe(1);
             });
 
             it('goFirst', function () {
                 paging.goFirst();
-                expect(paging.current()).toBe(1);
+                expect(paging.current).toBe(1);
             });
 
             it('goLast', function () {
                 paging.goLast();
-                expect(paging.current()).toBe(4);
+                expect(paging.current).toBe(4);
             });
 
             it('isFirst for 1st page', function () {
-                paging.current(1);
+                paging.current = 1;
                 expect(paging.isFirst()).toBeTruthy();
             });
 
             it('isFirst for 2nd page', function () {
-                paging.current(2);
+                paging.current = 2;
                 expect(paging.isFirst()).toBeFalsy();
             });
 
             it('isLast for last page', function () {
-                paging.current(4);
+                paging.current = 4;
                 expect(paging.isLast()).toBeTruthy();
             });
 
             it('isLast for first page', function () {
-                paging.current(1);
+                paging.current = 1;
                 expect(paging.isLast()).toBeFalsy();
             });
         });
@@ -116,22 +116,22 @@ define([
         describe('countPages method', function () {
             it('correct number of pages', function () {
                 paging.countPages();
-                expect(paging.pages()).toBe(4);
+                expect(paging.pages).toBe(4);
             });
 
             it('if no records', function () {
-                paging.totalRecords(0);
+                paging.totalRecords = 0;
                 paging.countPages();
-                expect(paging.pages()).toBe(1);
+                expect(paging.pages).toBe(1);
             });
         });
 
         describe('onPagesChange method', function () {
             it('pages amount became less than current', function () {
-                paging.current(4);
-                expect(paging.current()).toBe(4);
+                paging.current = 4;
+                expect(paging.current).toBe(4);
                 paging.onPagesChange(2);
-                expect(paging.current()).toBe(2);
+                expect(paging.current).toBe(2);
             });
         });
 
@@ -141,7 +141,7 @@ define([
             });
 
             it('read from _current', function () {
-                paging.current(2);
+                paging.current = 2;
                 expect(paging._current()).toBe(2);
             });
 
@@ -149,7 +149,7 @@ define([
                 spyOn(paging, 'normalize').and.callThrough();
                 spyOn(paging._current, 'notifySubscribers');
                 paging._current(4);
-                expect(paging.current()).toBe(4);
+                expect(paging.current).toBe(4);
                 expect(paging._current.notifySubscribers).toHaveBeenCalledWith(4);
             });
         });
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js
index 04b7f0ebe5a7ed09b3b422ccaa2f2cd1349171df..90e17a46a65e1af4be488992e1d788f28b362301 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/component/links.test.js
@@ -3,11 +3,11 @@
  * See COPYING.txt for license details.
  */
 define([
-    'Magento_Ui/js/lib/component/links'
+    'Magento_Ui/js/lib/core/element/links'
 ], function (links) {
     'use strict';
 
-    describe('Magento_Ui/js/lib/component/links', function () {
+    describe('Magento_Ui/js/lib/core/element/links', function () {
         var linksObj,
             returnedValue;
 
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js
index bc2f08748f45e25f476cd2b0494f988b9f2bf41f..4ae9b2121426e0f82c9bc785a455064ccaadd976 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/events.test.js
@@ -4,13 +4,13 @@
  */
 
 define([
-    'Magento_Ui/js/lib/events'
+    'Magento_Ui/js/lib/core/events'
 ], function (EventBus) {
     'use strict';
 
     var EVENT = 'testEvent';
 
-    describe('Magento_Ui/js/lib/events', function () {
+    describe('Magento_Ui/js/lib/core/events', function () {
         describe('"on" method', function () {
             afterEach(function () {
                 EventBus.off(EVENT);
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js
index 196bdd121dcf32495dbe471af8087bb4349969f7..ac02100dffa90c995e1a10a000576c52c2b165e8 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/lib/registry/registry.test.js
@@ -6,7 +6,7 @@
 /*eslint max-nested-callbacks: 0*/
 
 define([
-    'Magento_Ui/js/lib/registry/registry'
+    'uiRegistry'
 ], function (registry) {
     'use strict';
 
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..548d093942f5833332661788add865065f5acd40
--- /dev/null
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/alert.test.js
@@ -0,0 +1,27 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'jquery',
+    'Magento_Ui/js/modal/alert'
+], function ($) {
+    'use strict';
+
+    describe('ui/js/modal/alert', function () {
+        var element = $('<div>some element</div>'),
+            alert = element.alert({});
+
+        it('Check for modal definition', function () {
+            expect(alert).toBeDefined();
+        });
+        it('Show/hide function check', function () {
+            expect(element.trigger('openModal')).toBe(element);
+            expect(element.trigger('closeModal')).toBe(element);
+        });
+        it('Integration: modal created on page', function () {
+            expect(alert.length).toEqual(1);
+        });
+    });
+});
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..922a14f54f924827829a2f1a77c65053b2da5795
--- /dev/null
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/confirm.test.js
@@ -0,0 +1,27 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'jquery',
+    'Magento_Ui/js/modal/confirm'
+], function ($) {
+    'use strict';
+
+    describe('ui/js/modal/confirm', function () {
+        var element = $('<div>some element</div>'),
+            confirm = element.confirm({});
+
+        it('Check for modal definition', function () {
+            expect(confirm).toBeDefined();
+        });
+        it('Show/hide function check', function () {
+            expect(element.trigger('openModal')).toBe(element);
+            expect(element.trigger('closeModal')).toBe(element);
+        });
+        it('Integration: modal created on page', function () {
+            expect(confirm.length).toEqual(1);
+        });
+    });
+});
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js
index 2b1496d56e270fc471db20303cbea7582f748550..a8f4a13979d06a6ffdc5ebd05425a61cb5762c0a 100644
--- a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/modal.test.js
@@ -17,8 +17,11 @@ define([
             expect(modal).toBeDefined();
         });
         it('Show/hide function check', function () {
-            expect(element.trigger('openDialog')).toBe(element);
-            expect(element.trigger('closeDialog')).toBe(element);
+            expect(element.trigger('openModal')).toBe(element);
+            expect(element.trigger('closeModal')).toBe(element);
+        });
+        it('Integration: modal created on page', function () {
+            expect($(modal).length).toEqual(1);
         });
     });
 });
diff --git a/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js
new file mode 100644
index 0000000000000000000000000000000000000000..1d61f4c7354049cad1e61c73093ddfd90cce7eb8
--- /dev/null
+++ b/dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/modal/prompt.test.js
@@ -0,0 +1,27 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([
+    'jquery',
+    'Magento_Ui/js/modal/prompt'
+], function ($) {
+    'use strict';
+
+    describe('ui/js/modal/prompt', function () {
+        var element = $('<div>some element</div>'),
+            prompt = element.prompt({});
+
+        it('Check for modal definition', function () {
+            expect(prompt).toBeDefined();
+        });
+        it('Show/hide function check', function () {
+            expect(element.trigger('openModal')).toBe(element);
+            expect(element.trigger('closeModal')).toBe(element);
+        });
+        it('Integration: modal created on page', function () {
+            expect(prompt.length).toEqual(1);
+        });
+    });
+});
diff --git a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
index f198fee51b045e6a270758eda15d49e788531b3d..ffcd3abf327c80f299700a1a75b11a3b3abffad6 100644
--- a/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
+++ b/dev/tests/js/jasmine/tests/lib/mage/gallery.test.js
@@ -19,6 +19,7 @@ define([
         stageSelector = '[data-gallery-role="stage-shaft"]',
         navSelector = '[data-gallery-role="nav-frame"]',
         dotSelector = '[data-nav-type="dot"]',
+        navWrap = '[data-gallery-role="nav-wrap"]',
         dataToUpdate = [
             {
                 img: 'data:image/png;base64,' +
@@ -33,7 +34,16 @@ define([
                 img: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAw' +
                 'CAAAAC0lEQVR42mP4Xw8AAoABf5/NhYYAAAAASUVORK5CYII='
             }
-        ];
+        ],
+        waitsFor = function (test, fn) {
+            if (test()) {
+                fn();
+            } else {
+                setTimeout(function () {
+                    waitsFor(test, fn);
+                }, 10);
+            }
+        };
 
     gallery(magnifier(conf, body), body);
 
@@ -115,5 +125,30 @@ define([
         it('breakpoints override configs', function () {
             expect($('.fotorama__arr').css('display')).toBe('block');
         });
+
+        it('fullscreen enter', function (done) {
+            expect($(navWrap).css('display') === 'block').toBeTruthy();
+            galleryAPI.fotorama.requestFullScreen();
+
+            waitsFor(function () {
+                return $(navWrap).css('display') !== 'block';
+            }, function () {
+                expect($(navWrap).css('display') === 'none').toBeTruthy();
+                done();
+            });
+        });
+
+        it('fullscreen exit', function (done) {
+            expect($(navWrap).css('display') === 'none').toBeTruthy();
+            galleryAPI.fotorama.cancelFullScreen();
+
+            waitsFor(function () {
+                return $(navWrap).css('display') !== 'none';
+            }, function () {
+                expect($(navWrap).css('display') === 'block').toBeTruthy();
+                done();
+            });
+        });
+
     });
 });
diff --git a/dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php b/dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php
new file mode 100644
index 0000000000000000000000000000000000000000..e33309f46d88f44200092017f489f76005ecde26
--- /dev/null
+++ b/dev/tests/static/framework/Magento/Sniffs/NamingConventions/ReservedWordsSniff.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Sniffs\NamingConventions;
+
+use PHP_CodeSniffer_File;
+use PHP_CodeSniffer_Sniff;
+
+class ReservedWordsSniff implements PHP_CodeSniffer_Sniff
+{
+    /**
+     * source: http://php.net/manual/en/reserved.other-reserved-words.php
+     *
+     * @var array PHP 7 reserved words for name spaces
+     */
+    protected $reservedWords = [
+        'int',
+        'float',
+        'bool',
+        'string',
+        'true',
+        'false',
+        'null',
+        'resource',
+        'object',
+        'mixed',
+        'numeric',
+    ];
+
+    /**
+     * {@inheritdoc}
+     */
+    public function register()
+    {
+        return [T_NAMESPACE, T_CLASS];
+    }
+
+    /**
+     * Check all namespace parts
+     *
+     * @param PHP_CodeSniffer_File $sourceFile
+     * @param int $stackPtr
+     * @return void
+     */
+    protected function validateNameSpace(PHP_CodeSniffer_File $sourceFile, $stackPtr)
+    {
+        $skippedTokens = ['T_NS_SEPARATOR', 'T_WHITESPACE'];
+        //skip "namespace" and whitespace
+        $stackPtr += 2;
+        $tokens = $sourceFile->getTokens();
+        while ('T_SEMICOLON' != $tokens[$stackPtr]['type']) {
+            if (in_array($tokens[$stackPtr]['type'], $skippedTokens)) {
+                $stackPtr++;
+                continue;
+            }
+            $nameSpacePart = strtolower($tokens[$stackPtr]['content']);
+            if (in_array($nameSpacePart, $this->reservedWords)) {
+                $sourceFile->addError('\'' . $nameSpacePart . '\' is a reserved word in PHP 7.', $stackPtr);
+            }
+            $stackPtr++;
+        }
+    }
+
+    /**
+     * Check class name not having reserved words
+     *
+     * @param PHP_CodeSniffer_File $sourceFile
+     * @param int $stackPtr
+     * @return void
+     */
+    protected function validateClass(PHP_CodeSniffer_File $sourceFile, $stackPtr)
+    {
+        $tokens = $sourceFile->getTokens();
+        //skipped "class" and whitespace
+        $stackPtr += 2;
+        $className = strtolower($tokens[$stackPtr]['content']);
+
+        if (in_array($className, $this->reservedWords)) {
+            $sourceFile->addError('Class name \'' . $className . '\' is a reserved word in PHP 7', $stackPtr);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function process(PHP_CodeSniffer_File $sourceFile, $stackPtr)
+    {
+        $tokens = $sourceFile->getTokens();
+        switch ($tokens[$stackPtr]['type']) {
+            case "T_CLASS":
+                $this->validateClass($sourceFile, $stackPtr);
+                break;
+            case "T_NAMESPACE":
+                $this->validateNameSpace($sourceFile, $stackPtr);
+                break;
+        }
+    }
+}
diff --git a/dev/tests/static/framework/Magento/TestFramework/CodingStandard/Tool/CodeMessDetector.php b/dev/tests/static/framework/Magento/TestFramework/CodingStandard/Tool/CodeMessDetector.php
index 6c2f84aeec5397f93b0936fdef595512a44e2718..6349d18bdced4120969be3672cd54cb77c49ddcd 100644
--- a/dev/tests/static/framework/Magento/TestFramework/CodingStandard/Tool/CodeMessDetector.php
+++ b/dev/tests/static/framework/Magento/TestFramework/CodingStandard/Tool/CodeMessDetector.php
@@ -47,11 +47,7 @@ class CodeMessDetector implements ToolInterface
     public function canRun()
     {
         /** TODO: Remove provided check after PHPMD will support PHP version 7 */
-        $isPhpVersionSupported = version_compare(
-            '7.0.0',
-            preg_replace('#^([^~+-]+).*$#', '$1', PHP_VERSION),
-            '>'
-        );
+        $isPhpVersionSupported = PHP_VERSION_ID < 70000;
         return class_exists('PHPMD\TextUI\Command') && $isPhpVersionSupported;
     }
 
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php
index 9142d815ab7d2dde502bdfe78958155efa3a9737..bae290d83ff8eac3e732c6dbfb6ff3b0ce75e864 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/ClassesTest.php
@@ -95,7 +95,7 @@ class ClassesTest extends \PHPUnit_Framework_TestCase
         $regex = '/(?:\:\:|\->)getResourceHelper\(\s*\'([a-z\d\\\\]+)\'\s*\)/ix';
         $matches = Classes::getAllMatches($contents, $regex);
         foreach ($matches as $moduleName) {
-            $classes[] = "{$moduleName}\\Model\\Resource\\Helper\\Mysql4";
+            $classes[] = "{$moduleName}\\Model\\ResourceModel\\Helper\\Mysql4";
         }
     }
 
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php
index 815ce953c3176818c24dfd27314e49d5e8e497de..530d99c68dcdfbfa1feeaaee620ba570a10deb2e 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/ComposerTest.php
@@ -194,7 +194,7 @@ class ComposerTest extends \PHPUnit_Framework_TestCase
         $error = 'There must be an "autoload->files" node in composer.json of each Magento component.';
         $this->assertObjectHasAttribute('autoload', $json, $error);
         $this->assertObjectHasAttribute('files', $json->autoload, $error);
-        $this->assertEquals([ "registration.php" ], $json->autoload->files, $error);
+        $this->assertTrue(in_array("registration.php", $json->autoload->files), $error);
         $this->assertFileExists("$dir/registration.php");
     }
 
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/ObserverImplementationTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/ObserverImplementationTest.php
index ebc9a96b5cc6d1a9d838a982f5ace696935f1072..008cb2e5ad83ec4f8dc0b19e04b143cfcea07ed7 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/ObserverImplementationTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/ObserverImplementationTest.php
@@ -27,10 +27,10 @@ class ObserverImplementationTest extends \PHPUnit_Framework_TestCase
      */
     protected static $blackList = [
         // not support of virtual types
-        'SalesOrderIndexGridAsyncInsert',
-        'SalesInvoiceIndexGridAsyncInsert',
-        'SalesShipmentIndexGridAsyncInsert',
-        'SalesCreditmemoIndexGridAsyncInsert',
+        'SalesOrderIndexGridAsyncInsertObserver',
+        'SalesInvoiceIndexGridAsyncInsertObserver',
+        'SalesShipmentIndexGridAsyncInsertObserver',
+        'SalesCreditmemoIndexGridAsyncInsertObserver',
         'SalesOrderIndexGridSyncInsert',
         'SalesInvoiceIndexGridSyncInsert',
         'SalesShipmentIndexGridSyncInsert',
@@ -39,25 +39,10 @@ class ObserverImplementationTest extends \PHPUnit_Framework_TestCase
         'SalesInvoiceIndexGridSyncRemove',
         'SalesShipmentIndexGridSyncRemove',
         'SalesCreditmemoIndexGridSyncRemove',
-        'Magento\Sales\Model\Observer\Order\SendEmails',
-        'Magento\Sales\Model\Observer\Order\Invoice\SendEmails',
-        'Magento\Sales\Model\Observer\Order\Shipment\SendEmails',
-        'Magento\Sales\Model\Observer\Order\Creditmemo\SendEmails',
-        'Magento\Sales\Model\Observer\AggregateSalesReportShipmentData',
-        'Magento\SalesRule\Model\Observer',
-        'Magento\Sales\Model\Observer\Backend\CatalogProductQuote',
-        'Magento\Sales\Model\Observer\CleanExpiredQuotes',
-        'Magento\Sales\Model\Observer\Backend\CatalogPriceRule',
-        'Magento\Sales\Model\Observer\Frontend\Quote\AddVatRequestParamsOrderComment',
-        'Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId',
-        'Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid',
-        'Magento\Sales\Model\Observer\Order\IndexGrid',
-        'Magento\Sales\Model\Observer\Order\Invoice\IndexGrid',
-        'Magento\Sales\Model\Observer\Order\Shipment\IndexGrid',
-        'Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId',
-        'Magento\User\Model\Backend\Observer\AuthObserver',
-        'Magento\User\Model\Backend\Observer\PasswordObserver',
-        'Magento\ProductVideo\Model\Observer',
+        'SalesOrderSendEmailsObserver',
+        'SalesOrderInvoiceSendEmailsObserver',
+        'SalesOrderShipmentSendEmailsObserver',
+        'SalesOrderCreditmemoSendEmailsObserver',
     ];
 
     public static function setUpBeforeClass()
@@ -133,12 +118,7 @@ class ObserverImplementationTest extends \PHPUnit_Framework_TestCase
         }
         return array_diff(
             array_unique($observerClasses),
-            self::$blackList,
-            // MAGETWO-43598
-            [
-                'Magento\Versi' . 'onsCms\Model\Backend\Observer',
-                'Magento\Versi' . 'onsCms\Model\Backend\PrepareFormObserver'
-            ]
+            self::$blackList
         );
     }
 }
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/AbstractTestCase.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/AbstractTestCase.php
index fdd1a38c2753d971e4bfa460f7943d413eb10cb0..6d062cc46bc49b086b4e6a4b1594eb2f76a5db61 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/AbstractTestCase.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/AbstractTestCase.php
@@ -22,6 +22,15 @@ class AbstractTestCase extends \PHPUnit_Framework_TestCase
         return "\nPhrase: {$phrase['phrase']} \nFile: {$phrase['file']} \nLine: {$phrase['line']}";
     }
 
+    /**
+     * @param array $phrase
+     * @return string
+     */
+    protected function _createMissedPhraseError($phrase)
+    {
+        return "\nMissed Phrase: File: {$phrase['file']} \nLine: {$phrase['line']}";
+    }
+
     /**
      * @return \RegexIterator
      */
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/ArgumentsTest.php b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/ArgumentsTest.php
index cd17f1ec7baf4d90bafcc9eb73cb1004de2e8503..1f7565858b60e10914c4d87a3d47bd583c82717b 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/ArgumentsTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/Phrase/ArgumentsTest.php
@@ -44,27 +44,39 @@ class ArgumentsTest extends \Magento\Test\Integrity\Phrase\AbstractTestCase
 
     public function testArguments()
     {
-        $errors = [];
+        $incorrectNumberOfArgumentsErrors = [];
+        $missedPhraseErrors = [];
         foreach ($this->_getFiles() as $file) {
             if (in_array($file, $this->blackList)) {
                 continue;
             }
             $this->_phraseCollector->parse($file);
             foreach ($this->_phraseCollector->getPhrases() as $phrase) {
+                if (empty(trim($phrase['phrase'], "'\"\t\n\r\0\x0B"))) {
+                    $missedPhraseErrors[] = $this->_createMissedPhraseError($phrase);
+                }
                 if (preg_match_all('/%(\d+)/', $phrase['phrase'], $matches) || $phrase['arguments']) {
                     $placeholdersInPhrase = array_unique($matches[1]);
                     if (count($placeholdersInPhrase) != $phrase['arguments']) {
-                        $errors[] = $this->_createPhraseError($phrase);
+                        $incorrectNumberOfArgumentsErrors[] = $this->_createPhraseError($phrase);
                     }
                 }
             }
         }
         $this->assertEmpty(
-            $errors,
+            $missedPhraseErrors,
+            sprintf(
+                "\n%d missed phrases were discovered: \n%s",
+                count($missedPhraseErrors),
+                implode("\n\n", $missedPhraseErrors)
+            )
+        );
+        $this->assertEmpty(
+            $incorrectNumberOfArgumentsErrors,
             sprintf(
                 "\n%d usages of inconsistency the number of arguments and placeholders were discovered: \n%s",
-                count($errors),
-                implode("\n\n", $errors)
+                count($incorrectNumberOfArgumentsErrors),
+                implode("\n\n", $incorrectNumberOfArgumentsErrors)
             )
         );
     }
diff --git a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/reference.txt b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/reference.txt
index 48f50c108ecc774a8bf512f3189e17ee25f678b4..cafac52cd5afe1b98a4e4ea3810e951e2ef9a09b 100644
--- a/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/reference.txt
+++ b/dev/tests/static/testsuite/Magento/Test/Integrity/_files/blacklist/reference.txt
@@ -70,7 +70,7 @@ Model3
 \Magento\Mtf\Data\Argument\Interpreter\ArrayType
 \Magento\Mtf\Data\Argument\InterpreterInterface
 \Magento\Mtf\Util\Generate\GenerateResult
-\Magento\Mtf\Util\Generate\Repository\Resource
+\Magento\Mtf\Util\Generate\Repository\RepositoryResource
 \Magento\Mtf\Client\Element
 \Magento\Mtf\TestSuite\AppState
 \Magento\Framework\A
diff --git a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
index 30b6cb91bf29ad8b67664146a90f519880cbf892..70168b63a4efb5f06f978a00c9896b0c1a6d5f12 100644
--- a/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
+++ b/dev/tests/static/testsuite/Magento/Test/Js/_files/blacklist/magento.txt
@@ -173,10 +173,10 @@ app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/steps/summ
 app/code/Magento/ConfigurableProduct/view/adminhtml/web/js/variations/variations.js
 app/code/Magento/ConfigurableProduct/view/frontend/requirejs-config.js
 app/code/Magento/ConfigurableProduct/view/frontend/web/js/configurable.js
-app/code/Magento/Cookie/View/adminhtml/requirejs-config.js
-app/code/Magento/Cookie/View/frontend/requirejs-config.js
-app/code/Magento/Cookie/View/frontend/web/js/notices.js
-app/code/Magento/Cookie/View/frontend/web/js/require-cookie.js
+app/code/Magento/Cookie/view/adminhtml/requirejs-config.js
+app/code/Magento/Cookie/view/frontend/requirejs-config.js
+app/code/Magento/Cookie/view/frontend/web/js/notices.js
+app/code/Magento/Cookie/view/frontend/web/js/require-cookie.js
 app/code/Magento/Customer/view/adminhtml/requirejs-config.js
 app/code/Magento/Customer/view/adminhtml/web/edit/tab/js/addresses.js
 app/code/Magento/Customer/view/frontend/requirejs-config.js
@@ -384,99 +384,37 @@ app/code/Magento/Ui/view/base/web/js/core/renderer/layout.js
 app/code/Magento/Ui/view/base/web/js/core/renderer/types.js
 app/code/Magento/Ui/view/base/web/js/form/adapter.js
 app/code/Magento/Ui/view/base/web/js/form/client.js
-app/code/Magento/Ui/view/base/web/js/form/components/area.js
 app/code/Magento/Ui/view/base/web/js/form/components/collection.js
-app/code/Magento/Ui/view/base/web/js/form/components/collection/item.js
-app/code/Magento/Ui/view/base/web/js/form/components/fieldset.js
-app/code/Magento/Ui/view/base/web/js/form/components/group.js
 app/code/Magento/Ui/view/base/web/js/form/components/html.js
-app/code/Magento/Ui/view/base/web/js/form/components/tab_group.js
 app/code/Magento/Ui/view/base/web/js/form/components/tab.js
 app/code/Magento/Ui/view/base/web/js/form/element/abstract.js
-app/code/Magento/Ui/view/base/web/js/form/element/boolean.js
-app/code/Magento/Ui/view/base/web/js/form/element/date.js
 app/code/Magento/Ui/view/base/web/js/form/element/helpers/options.js
-app/code/Magento/Ui/view/base/web/js/form/element/multiselect.js
 app/code/Magento/Ui/view/base/web/js/form/element/post-code.js
 app/code/Magento/Ui/view/base/web/js/form/element/region.js
 app/code/Magento/Ui/view/base/web/js/form/element/select.js
-app/code/Magento/Ui/view/base/web/js/form/element/textarea.js
 app/code/Magento/Ui/view/base/web/js/form/element/ui-select.js
 app/code/Magento/Ui/view/base/web/js/form/form.js
 app/code/Magento/Ui/view/base/web/js/form/provider.js
-app/code/Magento/Ui/view/base/web/js/grid/columns/actions.js
-app/code/Magento/Ui/view/base/web/js/grid/columns/column.js
-app/code/Magento/Ui/view/base/web/js/grid/columns/date.js
-app/code/Magento/Ui/view/base/web/js/grid/columns/multiselect.js
-app/code/Magento/Ui/view/base/web/js/grid/columns/select.js
 app/code/Magento/Ui/view/base/web/js/grid/columns/thumbnail.js
-app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/bookmarks.js
 app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/storage.js
-app/code/Magento/Ui/view/base/web/js/grid/controls/bookmarks/view.js
-app/code/Magento/Ui/view/base/web/js/grid/controls/columns.js
-app/code/Magento/Ui/view/base/web/js/grid/dnd.js
-app/code/Magento/Ui/view/base/web/js/grid/editing/bulk.js
-app/code/Magento/Ui/view/base/web/js/grid/editing/client.js
-app/code/Magento/Ui/view/base/web/js/grid/editing/editor-view.js
-app/code/Magento/Ui/view/base/web/js/grid/editing/editor.js
-app/code/Magento/Ui/view/base/web/js/grid/editing/record.js
 app/code/Magento/Ui/view/base/web/js/grid/export.js
-app/code/Magento/Ui/view/base/web/js/grid/filters/chips.js
-app/code/Magento/Ui/view/base/web/js/grid/filters/filters.js
-app/code/Magento/Ui/view/base/web/js/grid/filters/group.js
-app/code/Magento/Ui/view/base/web/js/grid/massactions.js
-app/code/Magento/Ui/view/base/web/js/grid/paging/paging.js
-app/code/Magento/Ui/view/base/web/js/grid/paging/sizes.js
-app/code/Magento/Ui/view/base/web/js/grid/provider.js
 app/code/Magento/Ui/view/base/web/js/grid/resize.js
-app/code/Magento/Ui/view/base/web/js/grid/search/search.js
 app/code/Magento/Ui/view/base/web/js/grid/sticky/sticky.js
-app/code/Magento/Ui/view/base/web/js/grid/tree-massactions.js
-app/code/Magento/Ui/view/base/web/js/lib/class.js
-app/code/Magento/Ui/view/base/web/js/lib/collapsible.js
-app/code/Magento/Ui/view/base/web/js/lib/component/core.js
-app/code/Magento/Ui/view/base/web/js/lib/component/links.js
-app/code/Magento/Ui/view/base/web/js/lib/component/main.js
-app/code/Magento/Ui/view/base/web/js/lib/component/manip.js
-app/code/Magento/Ui/view/base/web/js/lib/component/provider.js
-app/code/Magento/Ui/view/base/web/js/lib/component/traversal.js
-app/code/Magento/Ui/view/base/web/js/lib/events.js
+app/code/Magento/Ui/view/base/web/js/lib/core/element/links.js
 app/code/Magento/Ui/view/base/web/js/lib/key-codes.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/bind/after-render.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/bind/class.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/bind/collapsible.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/datepicker.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/fadeVisible.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/i18n.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/keyboard.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/mage-init.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/bind/optgroup.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/bind/outer_click.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/bind/scope.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/bind/stop_propagation.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/extender/bound-nodes.js
 app/code/Magento/Ui/view/base/web/js/lib/ko/extender/observable_array.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/initialize.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/template/engine.js
-app/code/Magento/Ui/view/base/web/js/lib/ko/template/observable_source.js
-app/code/Magento/Ui/view/base/web/js/lib/loader.js
-app/code/Magento/Ui/view/base/web/js/lib/registry/events.js
-app/code/Magento/Ui/view/base/web/js/lib/registry/registry.js
-app/code/Magento/Ui/view/base/web/js/lib/registry/storage.js
-app/code/Magento/Ui/view/base/web/js/lib/renderer/renderer.js
 app/code/Magento/Ui/view/base/web/js/lib/spinner.js
 app/code/Magento/Ui/view/base/web/js/lib/step-wizard.js
-app/code/Magento/Ui/view/base/web/js/lib/storage.js
 app/code/Magento/Ui/view/base/web/js/lib/validation/rules.js
 app/code/Magento/Ui/view/base/web/js/lib/validation/utils.js
 app/code/Magento/Ui/view/base/web/js/lib/validation/validator.js
-app/code/Magento/Ui/view/base/web/js/lib/view/utils/async.js
-app/code/Magento/Ui/view/base/web/js/lib/view/utils/bindings.js
-app/code/Magento/Ui/view/base/web/js/lib/view/utils/dom-observer.js
 app/code/Magento/Ui/view/base/web/js/lib/view/utils/raf.js
-app/code/Magento/Ui/view/base/web/js/modal/alert.js
-app/code/Magento/Ui/view/base/web/js/modal/confirm.js
-app/code/Magento/Ui/view/base/web/js/modal/modal.js
 app/code/Magento/Ui/view/base/web/js/modal/modalToggle.js
 app/code/Magento/Ui/view/frontend/web/js/model/messageList.js
 app/code/Magento/Ui/view/frontend/web/js/model/messages.js
@@ -543,7 +481,7 @@ dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/controls/bookmarks/v
 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/controls/columns.test.js
 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/editing/bulk.test.js
 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/filters.test.js
-dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/group.test.js
+dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/filters/range.test.js
 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/paging/paging.test.js
 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/resize.test.js
 dev/tests/js/jasmine/tests/app/code/Magento/Ui/base/js/grid/search/search.test.js
@@ -623,10 +561,7 @@ lib/web/mage/mage.js
 lib/web/mage/menu.js
 lib/web/mage/popup-window.js
 lib/web/mage/redirect-url.js
-lib/web/mage/requirejs/mixins.js
-lib/web/mage/requirejs/plugin/id-normalizer.js
 lib/web/mage/requirejs/resolver.js
-lib/web/mage/requirejs/static.js
 lib/web/mage/smart-keyboard-handler.js
 lib/web/mage/sticky.js
 lib/web/mage/storage.js
@@ -640,13 +575,7 @@ lib/web/mage/translate-inline.js
 lib/web/mage/translate.js
 lib/web/mage/url.js
 lib/web/mage/utils/arrays.js
-lib/web/mage/utils/compare.js
-lib/web/mage/utils/main.js
 lib/web/mage/utils/misc.js
-lib/web/mage/utils/objects.js
-lib/web/mage/utils/strings.js
-lib/web/mage/utils/template.js
-lib/web/mage/utils/wrapper.js
 lib/web/mage/validation.js
 lib/web/mage/validation/validation.js
 lib/web/mage/view/composite.js
@@ -1153,4 +1082,4 @@ vendor/magento/module-wishlist/view/frontend/web/wishlist.js
 vendor/magento/theme-adminhtml-backend/web/js/theme.js
 vendor/magento/theme-frontend-blank/web/js/navigation-menu.js
 vendor/magento/theme-frontend-blank/web/js/responsive.js
-vendor/magento/theme-frontend-blank/web/js/theme.js
\ No newline at end of file
+vendor/magento/theme-frontend-blank/web/js/theme.js
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php b/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
index de26ad30530193f0d3b0c830297e4885a1f9d94b..813aababf3b6b393e739692e1c2f8f211256c4cd 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/ObsoleteCodeTest.php
@@ -14,6 +14,9 @@ use Magento\Framework\App\Utility\Files;
 use Magento\Framework\App\Utility\AggregateInvoker;
 use Magento\TestFramework\Utility\ChangedFiles;
 
+/**
+ * @SuppressWarnings(PHPMD.ExcessiveClassComplexity)
+ */
 class ObsoleteCodeTest extends \PHPUnit_Framework_TestCase
 {
     /**@#+
@@ -871,7 +874,7 @@ class ObsoleteCodeTest extends \PHPUnit_Framework_TestCase
 
     public function testMageMethodsObsolete()
     {
-        $ignored = $this->getBlacklistFiles();
+        $ignored = $this->getBlacklistFiles(true);
         $files = Files::init()->getPhpFiles(
             Files::INCLUDE_APP_CODE
             | Files::INCLUDE_TESTS
@@ -900,18 +903,43 @@ class ObsoleteCodeTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    /**
+     * @param string $appPath
+     * @param string $pattern
+     * @return array
+     * @throws \Exception
+     */
+    private function processPattern($appPath, $pattern)
+    {
+        $files = [];
+        $relativePathStart = strlen($appPath);
+
+        $fileSet = glob($appPath . DIRECTORY_SEPARATOR . $pattern, GLOB_NOSORT);
+        foreach ($fileSet as $file) {
+            $files[] = substr($file, $relativePathStart);
+        }
+
+        return $files;
+    }
+
     /**
      * Reads list of blacklisted files
      *
+     * @param bool $absolutePath
      * @return array
+     * @throws \Exception
      */
-    private function getBlacklistFiles()
+    private function getBlacklistFiles($absolutePath = false)
     {
         $blackList = include __DIR__ . '/_files/blacklist/obsolete_mage.php';
         $ignored = [];
         $appPath = Files::init()->getPathToSource();
         foreach ($blackList as $file) {
-            $ignored = array_merge($ignored, glob($appPath . '/' . $file, GLOB_NOSORT));
+            if ($absolutePath) {
+                $ignored = array_merge($ignored, glob($appPath . DIRECTORY_SEPARATOR . $file, GLOB_NOSORT));
+            } else {
+                $ignored = array_merge($ignored, $this->processPattern($appPath, $file));
+            }
         }
         return $ignored;
     }
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 c1f0aa745785498d148afb7b7105f4df4b270ffa..cf42cd0950a7a806535e76d213079ad68a03a6ee 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
@@ -11,40 +11,40 @@ return [
     ['Mage_Admin_Helper_Data', 'Magento\Backend\Helper\Data'],
     ['Mage_Admin_Model_Acl', 'Magento_Acl'],
     ['Mage_Admin_Model_Acl_Role'],
-    ['Mage_Admin_Model_Acl_Resource', 'Magento\Framework\Acl\Resource'],
+    ['Mage_Admin_Model_Acl_Resource', 'Magento\Framework\Acl\AclResource'],
     ['Mage_Admin_Model_Acl_Role_Registry', 'Magento\Framework\Acl\Role\Registry'],
     ['Mage_Admin_Model_Acl_Role_Generic', 'Magento\Authorization\Model\Acl\Role\Generic'],
     ['Mage_Admin_Model_Acl_Role_Group', 'Magento\Authorization\Model\Acl\Role\Group'],
     ['Mage_Admin_Model_Acl_Role_User', 'Magento\Authorization\Model\Acl\Role\User'],
-    ['Mage_Admin_Model_Resource_Acl', 'Magento\User\Model\Resource\Acl'],
+    ['Mage_Admin_Model_Resource_Acl', 'Magento\User\Model\ResourceModel\Acl'],
     ['Mage_Admin_Model_Observer'],
     ['Mage_Admin_Model_Session', 'Magento\Backend\Model\Auth\Session'],
     ['Mage_Admin_Model_Resource_Acl_Role'],
     ['Mage_Admin_Model_Resource_Acl_Role_Collection'],
     ['Mage_Admin_Model_User', 'Magento\User\Model\User'],
     ['Mage_Admin_Model_Config'],
-    ['Mage_Admin_Model_Resource_User', 'Magento\User\Model\Resource\User'],
-    ['Mage_Admin_Model_Resource_User_Collection', 'Magento\User\Model\Resource\User\Collection'],
+    ['Mage_Admin_Model_Resource_User', 'Magento\User\Model\ResourceModel\User'],
+    ['Mage_Admin_Model_Resource_User_Collection', 'Magento\User\Model\ResourceModel\User\Collection'],
     ['Mage_Admin_Model_Role', 'Magento\Authorization\Model\Role'],
     ['Mage_Admin_Model_Roles', 'Magento\Authorization\Model\Roles'],
     ['Mage_Admin_Model_Rules', 'Magento\Authorization\Model\Rules'],
-    ['Mage_Admin_Model_Resource_Role', 'Magento\Authorization\Model\Resource\Role'],
-    ['Mage_Admin_Model_Resource_Roles', 'Magento\User\Model\Resource\Roles'],
-    ['Mage_Admin_Model_Resource_Rules', 'Magento\Authorization\Model\Resource\Rules'],
-    ['Mage_Admin_Model_Resource_Role_Collection', 'Magento\Authorization\Model\Resource\Role\Collection'],
-    ['Mage_Admin_Model_Resource_Roles_Collection', 'Magento\User\Model\Resource\Roles\Collection'],
-    ['Mage_Admin_Model_Resource_Roles_User_Collection', 'Magento\User\Model\Resource\Roles\User\Collection'],
-    ['Mage_Admin_Model_Resource_Rules_Collection', 'Magento\Authorization\Model\Resource\Rules\Collection'],
+    ['Mage_Admin_Model_Resource_Role', 'Magento\Authorization\Model\ResourceModel\Role'],
+    ['Mage_Admin_Model_Resource_Roles', 'Magento\User\Model\ResourceModel\Roles'],
+    ['Mage_Admin_Model_Resource_Rules', 'Magento\Authorization\Model\ResourceModel\Rules'],
+    ['Mage_Admin_Model_Resource_Role_Collection', 'Magento\Authorization\Model\ResourceModel\Role\Collection'],
+    ['Mage_Admin_Model_Resource_Roles_Collection', 'Magento\User\Model\ResourceModel\Roles\Collection'],
+    ['Mage_Admin_Model_Resource_Roles_User_Collection', 'Magento\User\Model\ResourceModel\Roles\User\Collection'],
+    ['Mage_Admin_Model_Resource_Rules_Collection', 'Magento\Authorization\Model\ResourceModel\Rules\Collection'],
     [
         'Mage_Admin_Model_Resource_Permissions_Collection',
-        'Magento\Authorization\Model\Resource\Permissions\Collection',
+        'Magento\Authorization\Model\ResourceModel\Permissions\Collection',
     ],
     ['Mage_Adminhtml_Block_Abstract', 'Magento\Backend\Block\AbstractBlock'],
     ['Mage_Adminhtml_Block_Backup_Grid'],
     ['Mage_Adminhtml_Block_Cache_Grid'],
     ['Mage_Adminhtml_Block_Catalog'],
     [
-        'Magento\Catalog\Model\Resource\Category\Attribute\Source\Mode',
+        'Magento\Catalog\Model\ResourceModel\Category\Attribute\Source\Mode',
         'Magento\Catalog\Model\Category\Attribute\Source\Mode',
     ],
     ['Mage_Adminhtml_Block_Catalog_Product_Attribute_Set_Grid'],
@@ -737,24 +737,24 @@ return [
         'Magento\ConfigurableProduct\Model\Product\Type\Configurable',
     ],
     [
-        'Magento\Catalog\Model\Resource\Product\Type\Configurable\Attribute',
-        'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute',
+        'Magento\Catalog\Model\ResourceModel\Product\Type\Configurable\Attribute',
+        'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute',
     ],
     [
-        'Magento\Catalog\Model\Resource\Product\Type\Configurable\Product\Collection',
-        'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Product\Collection',
+        'Magento\Catalog\Model\ResourceModel\Product\Type\Configurable\Product\Collection',
+        'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Product\Collection',
     ],
     [
-        'Magento\Catalog\Model\Resource\Product\Type\Configurable\Attribute\Collection',
-        'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\Collection',
+        'Magento\Catalog\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection',
+        'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection',
     ],
     [
-        'Magento\Catalog\Model\Resource\Product\Type\Configurable',
-        'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable',
+        'Magento\Catalog\Model\ResourceModel\Product\Type\Configurable',
+        'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable',
     ],
     [
-        'Magento\Catalog\Model\Resource\Product\Indexer\Price\Configurable',
-        'Magento\ConfigurableProduct\Model\Resource\Product\Indexer\Price\Configurable',
+        'Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\Configurable',
+        'Magento\ConfigurableProduct\Model\ResourceModel\Product\Indexer\Price\Configurable',
     ],
     [
         'Magento\Catalog\Model\Product\Type\Configurable\Price',
@@ -773,7 +773,7 @@ return [
         'Magento\Checkout\Block\Cart\Item\Renderer\Configurable',
         'Magento\ConfigurableProduct\Block\Cart\Item\Renderer\Configurable',
     ],
-    ['Magento\Catalog\Model\Resource\Product\Flat\Indexer'],
+    ['Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer'],
     ['Magento\Catalog\Model\System\Config\Backend\Catalog\Product\Flat'],
     ['Mage_Checkout_Block_Links'],
     ['Mage_Core_Block_Flush'],
@@ -803,23 +803,47 @@ return [
     ['Magento\Core\Model\Email\Info', 'Magento\Framework\Mail\MessageInterface'],
     ['Magento\Core\Model\Email\Sender', 'Magento\Framework\Mail\Template\TransportBuilder'],
     ['Magento\Core\Model\Email\Template\Mailer', 'Magento\Framework\Mail\Template\TransportBuilder'],
-    ['Magento\Core\Model\Resource\AbstractResource', 'Magento\Framework\Model\Resource\AbstractResource'],
-    ['Magento\Core\Model\Resource\Db\AbstractDb', 'Magento\Framework\Model\Resource\Db\AbstractDb'],
-    ['Magento\Core\Model\Resource\Db\Profiler', 'Magento\Framework\Model\Resource\Db\Profiler'],
+    ['Magento\Core\Model\Resource\AbstractResource', 'Magento\Framework\Model\ResourceModel\AbstractResource'],
+    [
+        'Magento\Framework\Model\ModelResource\AbstractResource',
+        'Magento\Framework\Model\ResourceModel\AbstractResource'
+    ],
+    ['Magento\Core\Model\Resource\Db\AbstractDb', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'],
+    ['Magento\Core\Model\Resource\Db\Profiler', 'Magento\Framework\Model\ResourceModel\Db\Profiler'],
+    ['Magento\Framework\Model\ModelResource\Db\Profiler', 'Magento\Framework\Model\ResourceModel\Db\Profiler'],
     [
         'Magento\Core\Model\Resource\Entity\AbstractEntity',
-        'Magento\Framework\Model\Resource\Entity\AbstractEntity',
+        'Magento\Framework\Model\ResourceModel\Entity\AbstractEntity',
+    ],
+    [
+        'Magento\Framework\Model\ModelResource\Entity\AbstractEntity',
+        'Magento\Framework\Model\ResourceModel\Entity\AbstractEntity',
+    ],
+    ['Magento\Core\Model\Resource\Entity\Table', 'Magento\Framework\Model\ResourceModel\Entity\Table'],
+    ['Magento\Framework\Model\ModelResource\Entity\Table', 'Magento\Framework\Model\ResourceModel\Entity\Table'],
+    ['Magento\Core\Model\Resource\Flag', 'Magento\Framework\Flag\FlagResource'],
+    ['Magento\Core\Model\Resource\Iterator', 'Magento\Framework\Model\ResourceModel\Iterator'],
+    ['Magento\Framework\Model\ModelResource\Iterator', 'Magento\Framework\Model\ResourceModel\Iterator'],
+    ['Magento\Core\Model\Resource\Resource', 'Magento\Framework\Module\ModuleResource'],
+    ['Magento\Core\Model\Resource\Type\AbstractType', 'Magento\Framework\Model\ResourceModel\Type\AbstractType'],
+    [
+        'Magento\Framework\Model\ModelResource\Type\AbstractType',
+        'Magento\Framework\Model\ResourceModel\Type\AbstractType'
+    ],
+    ['Magento\Core\Model\Resource\Type\Db', 'Magento\Framework\Model\ResourceModel\Type\Db'],
+    ['Magento\Framework\Model\ModelResource\Type\Db', 'Magento\Framework\Model\ResourceModel\Type\Db'],
+    ['Magento\Core\Model\Resource\Type\Db\Pdo\Mysql', 'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql'],
+    [
+        'Magento\Framework\Model\ModelResource\Type\Db\Pdo\Mysql',
+        'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql'
     ],
-    ['Magento\Core\Model\Resource\Entity\Table', 'Magento\Framework\Model\Resource\Entity\Table'],
-    ['Magento\Core\Model\Resource\Flag', 'Magento\Framework\Flag\Resource'],
-    ['Magento\Core\Model\Resource\Iterator', 'Magento\Framework\Model\Resource\Iterator'],
-    ['Magento\Core\Model\Resource\Resource', 'Magento\Framework\Module\Resource'],
-    ['Magento\Core\Model\Resource\Type\AbstractType', 'Magento\Framework\Model\Resource\Type\AbstractType'],
-    ['Magento\Core\Model\Resource\Type\Db', 'Magento\Framework\Model\Resource\Type\Db'],
-    ['Magento\Core\Model\Resource\Type\Db\Pdo\Mysql', 'Magento\Framework\Model\Resource\Type\Db\Pdo\Mysql'],
     [
         'Magento\Core\Model\Resource\Db\Collection\AbstractCollection',
-        'Magento\Framework\Model\Resource\Db\Collection\AbstractCollection',
+        'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
+    ],
+    [
+        'Magento\Framework\Model\ModelResource\Db\Collection\AbstractCollection',
+        'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
     ],
     ['Magento\Email\Model\Info', 'Magento\Framework\Mail\MessageInterface'],
     ['Magento\Email\Model\Sender', 'Magento\Framework\Mail\Template\TransportBuilder'],
@@ -831,8 +855,8 @@ return [
     ['Magento\Core\Model\Email\Template\Config\Converter', 'Magento\Email\Model\Template\Config\Converter'],
     ['Magento\Core\Model\Template\Config\Data', 'Magento\Email\Model\Template\Config\Data'],
     ['Magento\Core\Model\Template\Config\SchemaLocator', 'Magento\Email\Model\Template\Config\SchemaLocator'],
-    ['Magento\Core\Model\Resource\Email\Template', 'Magento\Email\Model\Resource\Template'],
-    ['Magento\Core\Model\Resource\Email\Template\Collection', 'Magento\Email\Model\Resource\Template\Collection'],
+    ['Magento\Core\Model\Resource\Email\Template', 'Magento\Email\Model\ResourceModel\Template'],
+    ['Magento\Core\Model\Resource\Email\Template\Collection', 'Magento\Email\Model\ResourceModel\Template\Collection'],
     ['Mage_Core_Model_Resource_Language'],
     ['Mage_Core_Model_Resource_Language_Collection'],
     ['Mage_Core_Model_Resource_Setup_Query_Modifier'],
@@ -889,7 +913,7 @@ return [
     ['Mage_Reports_Model_Resource_Product_Ordered_Collection'],
     [
         'Mage_Reports_Model_Resource_Product_Viewed_Collection',
-        'Magento\Reports\Model\Resource\Report\Product\Viewed\Collection',
+        'Magento\Reports\Model\ResourceModel\Report\Product\Viewed\Collection',
     ],
     ['Mage_Reports_Model_Resource_Refunded_Collection'],
     ['Mage_Reports_Model_Resource_Shipping_Collection'],
@@ -1265,29 +1289,32 @@ return [
     ['Magento\Customer\Model\Attribute\Data'],
     ['Magento\Eav\Model\Attribute\Data'],
     ['Magento\Log\Model\Resource\Helper\Mysql4', 'Magento\Log\Model\Resource\Helper'],
-    ['Magento\CatalogSearch\Model\Resource\Helper\Mysql4', 'Magento\CatalogSearch\Model\Resource\Helper'],
-    ['Magento\ImportExport\Model\Resource\Helper\Mysql4', 'Magento\ImportExport\Model\Resource\Helper'],
-    ['Magento\Reports\Model\Resource\Helper\Mysql4', 'Magento\Reports\Model\Resource\Helper'],
-    ['Magento\Backup\Model\Resource\Helper\Mysql4', 'Magento\Backup\Model\Resource\Helper'],
+    ['Magento\CatalogSearch\Model\ResourceModel\Helper\Mysql4', 'Magento\CatalogSearch\Model\ResourceModel\Helper'],
+    ['Magento\ImportExport\Model\ResourceModel\Helper\Mysql4', 'Magento\ImportExport\Model\ResourceModel\Helper'],
+    ['Magento\Reports\Model\ResourceModel\Helper\Mysql4', 'Magento\Reports\Model\ResourceModel\Helper'],
+    ['Magento\Backup\Model\ResourceModel\Helper\Mysql4', 'Magento\Backup\Model\ResourceModel\Helper'],
     ['Magento\Sales\Model\CarrierFactory', 'Magento\Shipping\Model\CarrierFactory'],
     ['Magento\Sales\Model\Order\Pdf\Shipment\Packaging', 'Magento\Shipping\Model\Order\Pdf\Packaging'],
     ['Magento\Sales\Model\ResourceFactory'],
-    ['Magento\Sales\Model\Resource\Helper\Mysql4', 'Magento\Sales\Model\Resource\Helper'],
+    ['Magento\Sales\Model\ResourceModel\Helper\Mysql4', 'Magento\Sales\Model\ResourceModel\Helper'],
     ['Magento\Core\Model\Resource\Helper\Mysql4', 'Magento\Framework\DB\Helper'],
     ['Magento\Core\Model\Resource\Helper', 'Magento\Framework\DB\Helper'],
     ['Magento\Core\Model\Resource\Helper\AbstractHelper', 'Magento\Framework\DB\Helper\AbstractHelper'],
     ['Magento\Core\Model\Resource\HelperFactory'],
     ['Magento\Core\Model\Resource\HelperPool'],
     ['Magento\Core\Model\Resource\Transaction', 'Magento\Framework\DB\Transaction'],
-    ['Magento\Catalog\Model\Resource\Helper\Mysql4', 'Magento\Catalog\Model\Resource\Helper'],
+    ['Magento\Catalog\Model\ResourceModel\Helper\Mysql4', 'Magento\Catalog\Model\ResourceModel\Helper'],
     ['Magento\Cron\Exception', 'Magento\Framework\Exception\CronException'],
-    ['Magento\Eav\Model\Resource\Helper\Mysql4', 'Magento\Eav\Model\Resource\Helper'],
+    ['Magento\Eav\Model\ResourceModel\Helper\Mysql4', 'Magento\Eav\Model\ResourceModel\Helper'],
     [
         'Magento\Eav\Model\Entity\Attribute\Backend\Array',
         'Magento\Eav\Model\Entity\Attribute\Backend\ArrayBackend',
     ],
-    ['Magento\Sales\Model\Resource\Helper\HelperInterface', 'Magento\Sales\Model\Resource\HelperInterface'],
-    ['Magento\Reports\Model\Resource\Helper\HelperInterface', 'Magento\Reports\Model\Resource\HelperInterface'],
+    ['Magento\Sales\Model\ResourceModel\Helper\HelperInterface', 'Magento\Sales\Model\ResourceModel\HelperInterface'],
+    [
+        'Magento\Reports\Model\ResourceModel\Helper\HelperInterface',
+        'Magento\Reports\Model\ResourceModel\HelperInterface'
+    ],
     ['Magento\Payment\Block\Form\Banktransfer', 'Magento\OfflinePayments\Block\Form\Banktransfer'],
     ['Magento\Payment\Block\Form\Cashondelivery', 'Magento\OfflinePayments\Block\Form\Cashondelivery'],
     ['Magento\Payment\Block\Form\Ccsave', 'Magento\OfflinePayments\Block\Form\Ccsave'],
@@ -1379,11 +1406,11 @@ return [
     ['Magento\Core\Model\UrlInterface'],
     ['Magento\Sales\Model\AdminOrder'],
     ['Magento\Sales\Model\AdminOrder\Random'],
-    ['Magento\Sales\Model\Resource\Order\Attribute\Backend\Parent'],
-    ['Magento\Sales\Model\Resource\Order\Creditmemo\Attribute\Backend\Parent'],
-    ['Magento\Sales\Model\Resource\Order\Invoice\Attribute\Backend\Parent'],
-    ['Magento\Sales\Model\Resource\Order\Shipment\Attribute\Backend\Parent'],
-    ['Magento\Quote\Model\Resource\Quote\Address\Attribute\Backend\Parent'],
+    ['Magento\Sales\Model\ResourceModel\Order\Attribute\Backend\Parent'],
+    ['Magento\Sales\Model\ResourceModel\Order\Creditmemo\Attribute\Backend\Parent'],
+    ['Magento\Sales\Model\ResourceModel\Order\Invoice\Attribute\Backend\Parent'],
+    ['Magento\Sales\Model\ResourceModel\Order\Shipment\Attribute\Backend\Parent'],
+    ['Magento\Quote\Model\ResourceModel\Quote\Address\Attribute\Backend\Parent'],
     ['Magento\Core\Helper\Http'],
     ['Magento\Core\Helper\Theme', 'Magento\Theme\Helper\Theme'],
     ['Magento\Core\Helper\Url', 'Magento\Framework\Url\Helper\Data'],
@@ -1459,7 +1486,7 @@ return [
     ['Magento\Core\Model\TemplateEngine\Factory', 'Magento\Framework\View\TemplateEngineFactory'],
     ['Magento\Core\Model\TemplateEngine\Php', 'Magento\Framework\View\TemplateEngine\Php'],
     ['Magento\Core\Model\TemplateEngine\Pool', 'Magento\Framework\View\TemplateEnginePool'],
-    ['Magento\Core\Model\Resource\Config', 'Magento\Config\Model\Resource\Config'],
+    ['Magento\Core\Model\Resource\Config', 'Magento\Config\Model\ResourceModel\Config'],
     ['Magento\Media\Model\File\Image'],
     ['Magento\Media\Model\Image'],
     ['Magento\Media\Helper\Data'],
@@ -1670,7 +1697,7 @@ return [
     ['Magento\Core\Block\Text\TextList\Link', 'Magento\Framework\View\Element\Text\TextList\Link'],
     ['Magento\Core\Block\Messages', 'Magento\Framework\View\Element\Messages'],
     ['Magento\Core\Model\Message', 'Magento\Framework\Message\Factory'],
-    ['Magento\Core\Model\Resource\Setup', 'Magento\Theme\Model\Resource\Setup'],
+    ['Magento\Core\Model\Resource\Setup', 'Magento\Theme\Model\ResourceModel\Setup'],
     ['Magento\Core\Model\Message\AbstractMessage', 'Magento\Framework\Message\AbstractMessage'],
     ['Magento\Core\Model\Message\Collection', 'Magento\Framework\Message\Collection'],
     ['Magento\Core\Model\Message\CollectionFactory', 'Magento\Framework\Message\CollectionFactory'],
@@ -1903,7 +1930,7 @@ return [
     ['Magento\Core\Model\Session\Exception', 'Magento\Framework\Session\Exception'],
     ['Magento\Core\Model\Session\Context'],
     ['Magento\Core\Model\Session\AbstractSession', 'Magento\Framework\Session\SessionManager'],
-    ['Magento\Catalog\Model\Resource\Convert'],
+    ['Magento\Catalog\Model\ResourceModel\Convert'],
     ['Magento\Reminder\Model\Resource\HelperFactory'],
     ['Magento\Reminder\Model\Resource\Helper'],
     ['Magento\Core\Model\ConfigInterface', 'Magento\Framework\App\Config\ScopeConfigInterface'],
@@ -1917,12 +1944,12 @@ return [
         'Magento\GroupedProduct\Model\Product\Type\Grouped\Price',
     ],
     [
-        'Magento\Catalog\Model\Resource\Product\Indexer\Price\Grouped',
-        'Magento\GroupedProduct\Model\Resource\Product\Indexer\Price\Grouped',
+        'Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\Grouped',
+        'Magento\GroupedProduct\Model\ResourceModel\Product\Indexer\Price\Grouped',
     ],
     [
-        'Magento\Catalog\Model\Resource\Product\Type\Grouped\AssociatedProductsCollection',
-        'Magento\GroupedProduct\Model\Resource\Product\Type\Grouped\AssociatedProductsCollection',
+        'Magento\Catalog\Model\ResourceModel\Product\Type\Grouped\AssociatedProductsCollection',
+        'Magento\GroupedProduct\Model\ResourceModel\Product\Type\Grouped\AssociatedProductsCollection',
     ],
     ['Magento\Catalog\Model\Product\Type\Grouped', 'Magento\GroupedProduct\Model\Product\Type\Grouped'],
     [
@@ -1988,7 +2015,7 @@ return [
     ['Magento\Catalog\Helper\Category\Flat'],
     ['Magento\Catalog\Model\Category\Indexer\Flat'],
     ['Magento\Framework\Config\Dom\Converter\ArrayConverter'],
-    ['Magento\Framework\Acl\Resource\Config\Dom'],
+    ['Magento\Framework\Acl\AclResource\Config\Dom'],
     ['Magento\Validator\Composite\VarienObject', 'Magento\Framework\Validator\DataObject'],
     ['Magento\GoogleShopping\Helper\Price', 'Magento\Catalog\Model\Product\CatalogPrice'],
     [
@@ -2050,17 +2077,17 @@ return [
     ],
     ['Magento\Framework\Phrase\Renderer\Factory'],
     ['Magento\Catalog\Model\Category\Indexer\Product'],
-    ['Magento\Catalog\Model\Resource\Category\Indexer\Product'],
+    ['Magento\Catalog\Model\ResourceModel\Category\Indexer\Product'],
     ['Magento\Catalog\Model\Index'],
     ['Magento\Catalog\Model\Product\Status', 'Magento\Catalog\Model\Product\Attribute\Source\Status'],
-    ['Magento\Catalog\Model\Resource\Product\Status'],
+    ['Magento\Catalog\Model\ResourceModel\Product\Status'],
     [
         'Magento\CatalogInventory\Block\Stockqty\Type\Configurable',
         'Magento\ConfigurableProduct\Block\Stockqty\Type\Configurable',
     ],
     [
-        'Magento\CatalogInventory\Model\Resource\Indexer\Stock\Configurable',
-        'Magento\ConfigurableProduct\Model\Resource\Indexer\Stock\Configurable',
+        'Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock\Configurable',
+        'Magento\ConfigurableProduct\Model\ResourceModel\Indexer\Stock\Configurable',
     ],
     [
         'Magento\ImportExport\Model\Export\Entity\Product\Type\Configurable',
@@ -2080,10 +2107,10 @@ return [
     ],
     ['Magento\Sales\Block\Adminhtml\Items\Renderer\Configurable'],
     [
-        'Magento\Catalog\Model\Resource\Product\Collection\AssociatedProduct',
-        'Magento\ConfigurableProduct\Model\Resource\Product\Collection\AssociatedProduct',
+        'Magento\Catalog\Model\ResourceModel\Product\Collection\AssociatedProduct',
+        'Magento\ConfigurableProduct\Model\ResourceModel\Product\Collection\AssociatedProduct',
     ],
-    ['Magento\Catalog\Model\Resource\Product\Collection\AssociatedProductUpdater'],
+    ['Magento\Catalog\Model\ResourceModel\Product\Collection\AssociatedProductUpdater'],
     ['Magento\Core\Model\Image\Adapter\Config', 'Magento\Framework\Image\Adapter\Config'],
     ['Magento\Core\Model\AbstractShell', 'Magento\Framework\App\AbstractShell'],
     ['Magento\Core\Model\Calculator', 'Magento\Framework\Math\Calculator'],
@@ -2205,7 +2232,7 @@ return [
     ],
     ['Magento\Catalog\Helper\Product\Url', 'Magento\Framework\Filter\Translit'],
     ['Magento\Catalog\Model\Product\Indexer\Price'],
-    ['Magento\Catalog\Model\Resource\Product\Indexer\Price'],
+    ['Magento\Catalog\Model\ResourceModel\Product\Indexer\Price'],
     ['Magento\PubSub'], // unused library code which was removed
     ['Magento\Outbound'], // unused library code which was removed
     ['Magento\Indexer\Model\Processor\CacheInvalidate', 'Magento\Indexer\Model\Processor\InvalidateCache'],
@@ -2233,8 +2260,8 @@ return [
     ['Magento\Core\Helper\Translate', 'Magento\Translation\Helper\Data'],
     ['Magento\Core\Model\Translate\Inline\Config', 'Magento\Translation\Model\Inline\Config'],
     ['Magento\Core\Model\Translate\Inline\Parser', 'Magento\Translation\Model\Inline\Parser'],
-    ['Magento\Core\Model\Resource\Translate\String', 'Magento\Translation\Model\Resource\StringUtils'],
-    ['Magento\Core\Model\Resource\Translate', 'Magento\Translation\Model\Resource\Translate'],
+    ['Magento\Core\Model\Resource\Translate\String', 'Magento\Translation\Model\ResourceModel\StringUtils'],
+    ['Magento\Core\Model\Resource\Translate', 'Magento\Translation\Model\ResourceModel\Translate'],
     ['Magento\Core\Model\Translate\String', 'Magento\Translation\Model\StringUtils'],
     ['Magento\Translation\Helper\Data'],
     ['Magento\Framework\Translate\Factory'],
@@ -2242,17 +2269,17 @@ return [
     ['Magento\Backend\Model\Translate\Inline\ConfigFactory'],
     ['Magento\Framework\Translate\Inline\ConfigFactory'],
     ['Magento\Bundle\Model\Price\Index'],
-    ['Magento\Bundle\Model\Resource\Price\Index'],
+    ['Magento\Bundle\Model\ResourceModel\Price\Index'],
     ['Magento\Core\Model\Template', 'Magento\Email\Model\AbstractTemplate'],
     ['Magento\Core\Helper\Js'],
     ['Magento\Backend\Helper\Media\Js'],
     [
         'Magento\Core\Model\Resource\Url\Rewrite\Collection',
-        'Magento\UrlRewrite\Model\Resource\UrlRewriteCollection',
+        'Magento\UrlRewrite\Model\ResourceModel\UrlRewriteCollection',
     ],
     [
         'Magento\Core\Model\Resource\Url\Rewrite',
-        'Magento\UrlRewrite\Model\Resource\UrlRewrite',
+        'Magento\UrlRewrite\Model\ResourceModel\UrlRewrite',
     ],
     [
         'Magento\Core\Model\Url\Rewrite',
@@ -2303,13 +2330,16 @@ return [
     ['Magento\Core\Model\Config\Scope\Reader\Store', 'Magento\Store\Model\Config\Reader\Store'],
     ['Magento\Core\Model\Config\Scope\Reader\Website', 'Magento\Store\Model\Config\Reader\Website'],
     ['Magento\Core\Model\Config\Scope\ReaderPool', 'Magento\Store\Model\Config\Reader\ReaderPool'],
-    ['Magento\Core\Model\Resource\Store', 'Magento\Store\Model\Resource\Store'],
-    ['Magento\Core\Model\Resource\Store\Collection', 'Magento\Store\Model\Resource\Store\Collection'],
-    ['Magento\Core\Model\Resource\Store\Group', 'Magento\Store\Model\Resource\Group'],
-    ['Magento\Core\Model\Resource\Store\Group\Collection', 'Magento\Store\Model\Resource\Group\Collection'],
-    ['Magento\Core\Model\Resource\Website', 'Magento\Store\Model\Resource\Website'],
-    ['Magento\Core\Model\Resource\Website\Collection', 'Magento\Store\Model\Resource\Website\Collection'],
-    ['Magento\Core\Model\Resource\Website\Grid\Collection', 'Magento\Store\Model\Resource\Website\Grid\Collection'],
+    ['Magento\Core\Model\Resource\Store', 'Magento\Store\Model\ResourceModel\Store'],
+    ['Magento\Core\Model\Resource\Store\Collection', 'Magento\Store\Model\ResourceModel\Store\Collection'],
+    ['Magento\Core\Model\Resource\Store\Group', 'Magento\Store\Model\ResourceModel\Group'],
+    ['Magento\Core\Model\Resource\Store\Group\Collection', 'Magento\Store\Model\ResourceModel\Group\Collection'],
+    ['Magento\Core\Model\Resource\Website', 'Magento\Store\Model\ResourceModel\Website'],
+    ['Magento\Core\Model\Resource\Website\Collection', 'Magento\Store\Model\ResourceModel\Website\Collection'],
+    [
+        'Magento\Core\Model\Resource\Website\Grid\Collection',
+        'Magento\Store\Model\ResourceModel\Website\Grid\Collection'
+    ],
     ['Magento\Core\Model\ScopeInterface', 'Magento\Store\Model\ScopeInterface'],
     ['Magento\Core\Model\Store', 'Magento\Store\Model\Store'],
     [
@@ -2336,8 +2366,8 @@ return [
     ['Magento\Core\Model\Resource\Setup\Context', 'Magento\Framework\Module\Setup\Context'],
     ['Magento\Core\Model\Resource\Setup\Migration', 'Magento\Framework\Module\Setup\Migration'],
     ['Magento\Core\Model\Resource\Setup\Generic'],
-    ['Magento\Newsletter\Model\Resource\Setup'],
-    ['Magento\SalesRule\Model\Resource\Setup'],
+    ['Magento\Newsletter\Model\ResourceModel\Setup'],
+    ['Magento\SalesRule\Model\ResourceModel\Setup'],
     ['Magento\Core\Model\Session', 'Magento\Framework\Session\Generic'],
     ['Magento\Core\Model\Session\Config', 'Magento\Framework\Session\Config'],
     ['Magento\Core\Model\Session\SidResolver', 'Magento\Framework\Session\SidResolver'],
@@ -2355,28 +2385,31 @@ return [
     ['Magento\Rating\Model\Rating', 'Magento\Review\Model\Rating'],
     [
         'Magento\Rating\Model\Resource\Rating\Option\Vote\Collection',
-        'Magento\Review\Model\Resource\Rating\Option\Vote\Collection',
+        'Magento\Review\Model\ResourceModel\Rating\Option\Vote\Collection',
     ],
     [
         'Magento\Rating\Model\Resource\Rating\Option\Collection',
-        'Magento\Review\Model\Resource\Rating\Option\Collection',
+        'Magento\Review\Model\ResourceModel\Rating\Option\Collection',
     ],
-    ['Magento\Rating\Model\Resource\Rating\Grid\Collection', 'Magento\Review\Model\Resource\Rating\Grid\Collection'],
-    ['Magento\Rating\Model\Resource\Rating\Collection', 'Magento\Review\Model\Resource\Rating\Collection'],
-    ['Magento\Rating\Model\Resource\Rating\Option\Vote', 'Magento\Review\Model\Resource\Rating\Option\Vote'],
+    [
+        'Magento\Rating\Model\Resource\Rating\Grid\Collection',
+        'Magento\Review\Model\ResourceModel\Rating\Grid\Collection'
+    ],
+    ['Magento\Rating\Model\Resource\Rating\Collection', 'Magento\Review\Model\ResourceModel\Rating\Collection'],
+    ['Magento\Rating\Model\Resource\Rating\Option\Vote', 'Magento\Review\Model\ResourceModel\Rating\Option\Vote'],
     ['Magento\Rating\Model\Rating\Option\Vote', 'Magento\Review\Model\Rating\Option\Vote'],
-    ['Magento\Rating\Model\Resource\Rating\Option', 'Magento\Review\Model\Resource\Rating\Option'],
-    ['Magento\Rating\Model\Resource\Rating\Entity', 'Magento\Review\Model\Resource\Rating\Entity'],
+    ['Magento\Rating\Model\Resource\Rating\Option', 'Magento\Review\Model\ResourceModel\Rating\Option'],
+    ['Magento\Rating\Model\Resource\Rating\Entity', 'Magento\Review\Model\ResourceModel\Rating\Entity'],
     ['Magento\Rating\Model\Rating\Entity', 'Magento\Review\Model\Rating\Entity'],
-    ['Magento\Rating\Model\Resource\Rating', 'Magento\Review\Model\Resource\Rating'],
+    ['Magento\Rating\Model\Resource\Rating', 'Magento\Review\Model\ResourceModel\Rating'],
     ['Magento\Rating\Model\Rating\Option', 'Magento\Review\Model\Rating\Option'],
     ['Magento\Rating\Model\Observer'],
     ['Magento\Core\Model\App\Area\CacheIdentifierPlugin', 'Magento\PageCache\App\CacheIdentifierPlugin'],
     ['Magento\Core\Model\App\Area', 'Magento\Framework\App\Area'],
     ['Magento\Core\Model\App\Area\DesignExceptions', 'Magento\Framework\View\DesignExceptions'],
     ['Magento\Core\App\Action\FormKeyValidator', 'Magento\Framework\Data\Form\FormKey\Validator'],
-    ['Magento\Core\Model\Resource\Variable', 'Magento\Variable\Model\Resource\Variable'],
-    ['Magento\Core\Model\Resource\Variable\Collection', 'Magento\Variable\Model\Resource\Variable\Collection'],
+    ['Magento\Core\Model\Resource\Variable', 'Magento\Variable\Model\ResourceModel\Variable'],
+    ['Magento\Core\Model\Resource\Variable\Collection', 'Magento\Variable\Model\ResourceModel\Variable\Collection'],
     ['Magento\Core\Model\Variable', 'Magento\Variable\Model\Variable'],
     ['Magento\Core\Model\Variable\Config', 'Magento\Variable\Model\Variable\Config'],
     ['Magento\Checkout\Block\Adminhtml\Agreement', 'Magento\CheckoutAgreements\Block\Adminhtml\Agreement'],
@@ -2388,10 +2421,10 @@ return [
     ['Magento\Checkout\Block\Adminhtml\Agreement\Grid', 'Magento\CheckoutAgreements\Block\Adminhtml\Agreement\Grid'],
     ['Magento\Checkout\Block\Agreements', 'Magento\CheckoutAgreements\Block\Agreements'],
     ['Magento\Checkout\Controller\Adminhtml\Agreement', 'Magento\CheckoutAgreements\Controller\Adminhtml\Agreement'],
-    ['Magento\Checkout\Model\Resource\Agreement', 'Magento\CheckoutAgreements\Model\Resource\Agreement'],
+    ['Magento\Checkout\Model\ResourceModel\Agreement', 'Magento\CheckoutAgreements\Model\ResourceModel\Agreement'],
     [
-        'Magento\Checkout\Model\Resource\Agreement\Collection',
-        'Magento\CheckoutAgreements\Model\Resource\Agreement\Collection',
+        'Magento\Checkout\Model\ResourceModel\Agreement\Collection',
+        'Magento\CheckoutAgreements\Model\ResourceModel\Agreement\Collection',
     ],
     ['Magento\Sales\Block\Adminhtml\Invoice\Grid'],
     ['Magento\Sales\Block\Adminhtml\Shipment\Grid'],
@@ -2404,8 +2437,11 @@ return [
         'X-Frame-Options HTTP header setting moved to server configuration',
     ],
     ['Magento\Backend\Model\Translate\Inline', 'Magento\Framework\Translate\Inline'],
-    ['Magento\Backend\Model\Resource\Translate', 'Magento\Translation\Model\Resource\Translate'],
-    ['Magento\Backend\Model\Resource\Translate\StringUtils', 'Magento\Translation\Model\Resource\StringUtils'],
+    ['Magento\Backend\Model\ResourceModel\Translate', 'Magento\Translation\Model\ResourceModel\Translate'],
+    [
+        'Magento\Backend\Model\ResourceModel\Translate\StringUtils',
+        'Magento\Translation\Model\ResourceModel\StringUtils'
+    ],
     ['Magento\Core\Model\Layout', 'Magento\Framework\View\Layout'],
     ['Magento\Catalog\Block\Product\Price\Template'],
     ['Magento\Bundle\Block\Catalog\Product\View'],
@@ -2496,28 +2532,12 @@ return [
     ],
     [
         'Magento\ImportExport\Model\Import\Proxy\Product\Resource',
-        'Magento\CatalogImportExport\Model\Import\Proxy\Product\Resource',
+        'Magento\CatalogImportExport\Model\Import\Proxy\Product\ResourceModel',
     ],
     [
         'Magento\ImportExport\Model\Import\Uploader',
         'Magento\CatalogImportExport\Model\Import\Uploader',
     ],
-    [
-        'Magento\ImportExport\Model\Export\Entity\Customer\Finance',
-        'Magento\CustomerFinance\Model\Export\Customer\Finance',
-    ],
-    [
-        'Magento\ImportExport\Model\Import\Entity\Eav\Customer\Finance',
-        'Magento\CustomerFinance\Model\Import\Entity\Eav\Customer\Finance',
-    ],
-    [
-        'Magento\ImportExport\Model\Resource\Customer\Attribute\Finance\Collection',
-        'Magento\CustomerFinance\Model\Resource\Customer\Attribute\Finance\Collection',
-    ],
-    [
-        'Magento\ImportExport\Model\Resource\Customer\Collection',
-        'Magento\CustomerFinance\Model\Resource\Customer\Collection',
-    ],
     ['Magento\Profiler', 'Magento\Framework\Profiler'],
     ['Magento\Shell', 'Magento\Framework\Shell'],
     ['Magento\Url', 'Magento\Framework\Url'],
@@ -2687,11 +2707,11 @@ return [
     ['Magento\Rule\Helper\Data'],
     ['Magento\Theme\Helper\Data'],
     ['Magento\Widget\Helper\Data'],
-    ['Magento\Tax\Model\Resource\Calculation\Grid\Collection'],
-    ['Magento\Tax\Model\Resource\Rule\Grid\Collection'],
-    ['Magento\Tax\Model\Resource\Rule\Grid\Options\CustomerTaxClass'],
-    ['Magento\Tax\Model\Resource\Rule\Grid\Options\HashOptimized'],
-    ['Magento\Tax\Model\Resource\Rule\Grid\Options\ProductTaxClass'],
+    ['Magento\Tax\Model\ResourceModel\Calculation\Grid\Collection'],
+    ['Magento\Tax\Model\ResourceModel\Rule\Grid\Collection'],
+    ['Magento\Tax\Model\ResourceModel\Rule\Grid\Options\CustomerTaxClass'],
+    ['Magento\Tax\Model\ResourceModel\Rule\Grid\Options\HashOptimized'],
+    ['Magento\Tax\Model\ResourceModel\Rule\Grid\Options\ProductTaxClass'],
     ['Magento\SalesArchive\Block\Adminhtml\Sales\Order\Grid\Massaction'],
     ['Magento\Framework\System\Args'],
     ['Magento\Framework\Autoload\Simple'],
@@ -2722,7 +2742,7 @@ return [
     ],
     ['Magento\Catalog\Model\Observer\Reindex'],
     ['Magento\CatalogSearch\Model\Fulltext\Observer'],
-    ['Magento\CatalogSearch\Model\Resource\Indexer\Fulltext'],
+    ['Magento\CatalogSearch\Model\ResourceModel\Indexer\Fulltext'],
     [
         'Magento\Tax\Block\Adminhtml\Rate\Grid\Renderer\Country',
         'Magento\TaxImportExport\Block\Adminhtml\Rate\Grid\Renderer\Country',
@@ -2784,7 +2804,7 @@ return [
     ['Magento\Framework\Error\Handler', 'Magento\Framework\App\ErrorHandler'],
     ['Magento\Framework\Error\HandlerInterface', 'Magento\Framework\App\ErrorHandler'],
     ['Magento\Index'],
-    ['Magento\Catalog\Model\Resource\Product\Indexer\Eav'],
+    ['Magento\Catalog\Model\ResourceModel\Product\Indexer\Eav'],
     ['\Magento\Framework\Api\Eav\AbstractObject', 'Magento\Framework\Api\AbstractExtensibleObject'],
     ['\Magento\Framework\Api\AbstractObject', 'Magento\Framework\Api\AbstractSimpleObject'],
     [
@@ -2808,7 +2828,7 @@ return [
     ['Magento\Rss\Controller\Order\Status'],
     ['Magento\Rss\Helper\Order'],
     ['Magento\Rss\Block\Order\Details', 'Magento\Sales\Block\Order\Details'],
-    ['Magento\Rss\Model\Resource\Order', 'Magento\Sales\Model\Resource\Order\Rss\OrderStatus'],
+    ['Magento\Rss\Model\Resource\Order', 'Magento\Sales\Model\ResourceModel\Order\Rss\OrderStatus'],
     ['Magento\Rss\Block\Catalog\AbstractCatalog'],
     ['Magento\Rss\Block\Catalog\NewCatalog'],
     ['Magento\Rss\Block\Catalog\Review'],
@@ -2834,7 +2854,7 @@ return [
     ['Magento\Framework\Filesystem\WrapperFactory'],
     ['Magento\Framework\Filesystem\WrapperInterface'],
     ['Magento\Install'],
-    ['Magento\Install\Model\Resource\Resource', 'Magento\Framework\Module\Resource'],
+    ['Magento\Install\Model\Resource\Resource', 'Magento\Framework\Module\ModuleResource'],
     ['Magento\Framework\App\View\Deployment\Version\Generator\Timestamp', 'Magento\Framework\Stdlib\DateTime'],
     ['Magento\Framework\App\View\Deployment\Version\GeneratorInterface'],
     ['Magento\Framework\Authorization\RoleLocator', 'Magento\Framework\Authorization\RoleLocatorInterface'],
@@ -2929,7 +2949,8 @@ return [
         'Magento\Bundle\Api\ProductOptionTypeListInterface',
     ],
     ['Magento\Sales\Controller\Adminhtml\Order\InvoiceLoader'],
-    ['Magento\Sales\Model\Resource\AbstractResource', 'Magento\Framework\Model\Resource\Db\AbstractDb'],
+    ['Magento\Sales\Model\ResourceModel\AbstractResource', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'],
+    ['Magento\Framework\Model\ModelResource\Db\AbstractDb', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb'],
     ['Magento\Backend\Block\System\Config\Switcher'],
     ['Magento\VersionsCms\Block\Adminhtml\Scope\Switcher'],
     ['Magento\Backend\Block\Widget\View\Container'],
@@ -2947,25 +2968,25 @@ return [
         'Magento\Framework\Interception\ObjectManager\Config\Developer',
     ],
     ['Magento\Core\Model\Design', 'Magento\Theme\Model\Design'],
-    ['Magento\Core\Model\Resource\Design', 'Magento\Theme\Model\Resource\Design'],
-    ['Magento\Core\Model\Resource\Design\Collection', 'Magento\Theme\Model\Resource\Design\Collection'],
+    ['Magento\Core\Model\Resource\Design', 'Magento\Theme\Model\ResourceModel\Design'],
+    ['Magento\Core\Model\Resource\Design\Collection', 'Magento\Theme\Model\ResourceModel\Design\Collection'],
     ['Magento\Core\Model\View\Design', 'Magento\Theme\Model\View\Design'],
     ['Magento\Core\Model\Design\Backend\Theme', 'Magento\Theme\Model\Design\Backend\Theme'],
     ['Magento\Core\Model\Design\Backend\Exceptions', 'Magento\Theme\Model\Design\Backend\Exceptions'],
-    ['Magento\Core\Model\Resource\Theme', 'Magento\Theme\Model\Resource\Theme'],
+    ['Magento\Core\Model\Resource\Theme', 'Magento\Theme\Model\ResourceModel\Theme'],
     [
         'Magento\Core\Model\Resource\Theme\Customization\Update',
-        'Magento\Theme\Model\Resource\Theme\Customization\Update',
+        'Magento\Theme\Model\ResourceModel\Theme\Customization\Update',
     ],
-    ['Magento\Core\Model\Resource\Theme\Data\Collection', 'Magento\Theme\Model\Resource\Theme\Data\Collection'],
-    ['Magento\Core\Model\Resource\Theme\File\Collection', 'Magento\Theme\Model\Resource\Theme\File\Collection'],
-    ['Magento\Core\Model\Resource\Theme\Grid\Collection', 'Magento\Theme\Model\Resource\Theme\Grid\Collection'],
-    ['Magento\Core\Model\Resource\Theme\Collection', 'Magento\Theme\Model\Resource\Theme\Collection'],
+    ['Magento\Core\Model\Resource\Theme\Data\Collection', 'Magento\Theme\Model\ResourceModel\Theme\Data\Collection'],
+    ['Magento\Core\Model\Resource\Theme\File\Collection', 'Magento\Theme\Model\ResourceModel\Theme\File\Collection'],
+    ['Magento\Core\Model\Resource\Theme\Grid\Collection', 'Magento\Theme\Model\ResourceModel\Theme\Grid\Collection'],
+    ['Magento\Core\Model\Resource\Theme\Collection', 'Magento\Theme\Model\ResourceModel\Theme\Collection'],
     ['Magento\Core\Model\Resource\Theme\File', 'Magento\Core\Model\Resource\Theme\File'],
     ['Magento\Framework\ObjectManager\Config\ProxyConfig'],
     ['Magento\Catalog\Block\Product\Send'],
     ['Magento\Catalog\Helper\Product\Options'],
-    ['Magento\Cms\Model\Resource\Page\Service'],
+    ['Magento\Cms\Model\ResourceModel\Page\Service'],
     [
         'Magento\Core\Model\TemplateEngine\Decorator\DebugHints',
         'Magento\Developer\Model\TemplateEngine\Decorator\DebugHints',
@@ -2982,7 +3003,7 @@ return [
     ['Magento\Paypal\Model\System\Config\Source\AuthorizationAmounts'],
     ['Magento\Paypal\Exception'],
     ['Magento\Paypal\UnavailableException'],
-    ['Magento\Paypal\Model\Resource\Setup', 'Magento\Paypal\Setup\InstallData'],
+    ['Magento\Paypal\Model\ResourceModel\Setup', 'Magento\Paypal\Setup\InstallData'],
     ['Magento\Paypal\Block\Standard\Form'],
     ['Magento\Paypal\Block\Standard\Redirect'],
     ['Magento\Paypal\Controller\Standard\Cancel'],
@@ -3045,10 +3066,13 @@ return [
     ['Magento\Core\Model\Layout\DepersonalizePlugin', 'Magento\PageCache\Model\Layout\DepersonalizePlugin'],
     ['Magento\Core\Model\Layout\Link', 'Magento\Widget\Model\Layout\Link'],
     ['Magento\Core\Model\Layout\Update', 'Magento\Widget\Model\Layout\Update'],
-    ['Magento\Core\Model\Resource\Layout\Link', 'Magento\Widget\Model\Resource\Layout\Link'],
-    ['Magento\Core\Model\Resource\Layout\Link\Collection', 'Magento\Widget\Model\Resource\Layout\Link\Collection'],
-    ['Magento\Core\Model\Resource\Layout\Update', 'Magento\Widget\Model\Resource\Layout\Update'],
-    ['Magento\Core\Model\Resource\Layout\Update\Collection', 'Magento\Widget\Model\Resource\Layout\Update\Collection'],
+    ['Magento\Core\Model\Resource\Layout\Link', 'Magento\Widget\Model\ResourceModel\Layout\Link'],
+    ['Magento\Core\Model\Resource\Layout\Link\Collection', 'Magento\Widget\Model\ResourceModel\Layout\Link\Collection'],
+    ['Magento\Core\Model\Resource\Layout\Update', 'Magento\Widget\Model\ResourceModel\Layout\Update'],
+    [
+        'Magento\Core\Model\Resource\Layout\Update\Collection',
+        'Magento\Widget\Model\ResourceModel\Layout\Update\Collection'
+    ],
     ['Magento\Backend\Model\View', 'Magento\Framework\App\View'],
     ['Zend_Controller_Router_Route'],
     ['Zend_Controller_Router_Route_Interface'],
@@ -3117,22 +3141,22 @@ return [
     ['Magento\Webapi\Model\Plugin\Setup', 'Magento\Integration\Model\Plugin\Setup'],
     ['Magento\Webapi\Model\Cache\Type', 'Magento\Framework\App\Cache\Type\Webapi'],
     ['Magento\Framework\Module\DataSetup', 'Magento\Setup\Module\DataSetup'],
-    ['Magento\Authorization\Model\Resource\Setup', 'Magento\Authorization\Setup\AuthorizationFactory'],
-    ['Magento\Catalog\Model\Resource\Setup', 'Magento\Catalog\Setup\CategorySetup'],
-    ['Magento\Checkout\Model\Resource\Setup', 'Magento\Checkout\Setup\InstallData'],
-    ['Magento\Cms\Model\Resource\Setup', 'Magento\Cms\Setup\InstallData'],
-    ['Magento\Customer\Model\Resource\Setup', 'Magento\Customer\Setup\CustomerSetup'],
+    ['Magento\Authorization\Model\ResourceModel\Setup', 'Magento\Authorization\Setup\AuthorizationFactory'],
+    ['Magento\Catalog\Model\ResourceModel\Setup', 'Magento\Catalog\Setup\CategorySetup'],
+    ['Magento\Checkout\Model\ResourceModel\Setup', 'Magento\Checkout\Setup\InstallData'],
+    ['Magento\Cms\Model\ResourceModel\Setup', 'Magento\Cms\Setup\InstallData'],
+    ['Magento\Customer\Model\ResourceModel\Setup', 'Magento\Customer\Setup\CustomerSetup'],
     ['Magento\Dhl\Model\Resource\Setup', 'Magento\Dhl\Setup\InstallData'],
-    ['Magento\Directory\Model\Resource\Setup', 'Magento\Directory\Setup\InstallData'],
+    ['Magento\Directory\Model\ResourceModel\Setup', 'Magento\Directory\Setup\InstallData'],
     ['Magento\Eav\Model\Entity\Setup', 'Magento\Eav\Setup\EavSetup'],
-    ['Magento\GiftMessage\Model\Resource\Setup', 'Magento\GiftMessage\Setup\InstallData'],
+    ['Magento\GiftMessage\Model\ResourceModel\Setup', 'Magento\GiftMessage\Setup\InstallData'],
     ['Magento\GoogleShopping\Model\Resource\Setup', 'Magento\GoogleShopping\Setup\InstallData'],
-    ['Magento\Reports\Model\Resource\Setup', 'Magento\Reports\Setup\InstallData'],
-    ['Magento\Sales\Model\Resource\Setup', 'Magento\Sales\Setup\SalesSetup'],
-    ['Magento\Tax\Model\Resource\Setup', 'Magento\Tax\Setup\TaxSetup'],
-    ['Magento\Theme\Model\Resource\Setup', 'Magento\Theme\Setup\InstallData'],
-    ['Magento\Weee\Model\Resource\Setup', 'Magento\Weee\Setup\InstallData'],
-    ['Magento\Integration\Model\Resource\Setup'],
+    ['Magento\Reports\Model\ResourceModel\Setup', 'Magento\Reports\Setup\InstallData'],
+    ['Magento\Sales\Model\ResourceModel\Setup', 'Magento\Sales\Setup\SalesSetup'],
+    ['Magento\Tax\Model\ResourceModel\Setup', 'Magento\Tax\Setup\TaxSetup'],
+    ['Magento\Theme\Model\ResourceModel\Setup', 'Magento\Theme\Setup\InstallData'],
+    ['Magento\Weee\Model\ResourceModel\Setup', 'Magento\Weee\Setup\InstallData'],
+    ['Magento\Integration\Model\ResourceModel\Setup'],
     ['Magento\Framework\Module\ResourceResolver'],
     ['Magento\Framework\Module\ResourceResolverInterface'],
     ['Magento\Setup\Module\SetupModule'],
@@ -3141,7 +3165,7 @@ return [
     ['Magento\Framework\Module\Updater\SetupFactory'],
     ['Magento\Log\Block\Adminhtml\Customer\Edit\Tab\View\Status'],
     ['Magento\Backend\Model\Config\Source\Yesno', 'Magento\Config\Model\Config\Source\Yesno'],
-    ['Magento\Reports\Model\Resource\Shopcart\Product\Collection'],
+    ['Magento\Reports\Model\ResourceModel\Shopcart\Product\Collection'],
     ['Zend_Locale', '\Locale, \ResourceBundle'],
     ['Zend_Locale_Data', '\Locale, \ResourceBundle'],
     ['Zend_Locale_Content', '\Locale, \ResourceBundle'],
@@ -3193,8 +3217,8 @@ return [
     ['Magento\Framework\Exception\File\ValidatorException'],
     ['Magento\Framework\Filesystem\FilesystemException', 'Magento\Framework\Exception\FileSystemException'],
     ['Magento\Shipping\Exception'],
-    ['Magento\Tax\Model\Resource\Sales\Order\Tax\Item\Collection'],
-    ['Magento\Tax\Model\Resource\Sales\Order\Tax\Item', 'Magento\Sales\Model\Resource\Order\Tax\Item'],
+    ['Magento\Tax\Model\ResourceModel\Sales\Order\Tax\Item\Collection'],
+    ['Magento\Tax\Model\ResourceModel\Sales\Order\Tax\Item', 'Magento\Sales\Model\ResourceModel\Order\Tax\Item'],
     ['Magento\Tax\Model\Sales\Order\Tax\Item', 'Magento\Sales\Model\Order\Tax\Item'],
     ['Magento\Reports\Block\Adminhtml\Product\Grid'],
     ['Magento\Reports\Model\Totals'],
@@ -3391,7 +3415,7 @@ return [
     ['Magento\Integration\Service\V1\Integration', 'Magento\Integration\Model\IntegrationService'],
     ['Magento\Integration\Service\V1\Oauth', 'Magento\Integration\Model\OauthService'],
     ['Magento\Integration\Model\Plugin\Service\V1\Integration', 'Magento\Integration\Model\Plugin\Integration'],
-    ['Magento\Search\Model\Resource\Helper'],
+    ['Magento\Search\Model\ResourceModel\Helper'],
     ['Magento\Tools\Layout\Reference'],
     ['Magento\Tools\Layout\Formatter', 'Magento\Developer\Model\Tools\Formatter'],
     ['Magento\Tools\Dependency\Circular', 'Magento\Setup\Module\Dependency\Circular'],
@@ -3692,12 +3716,12 @@ return [
         'Magento\Authorizenet\Model\Debug'
     ],
     [
-        'Magento\Authorizenet\Model\Resource\Authorizenet\Debug\Collection',
-        'Magento\Authorizenet\Model\Resource\Debug\Collection'
+        'Magento\Authorizenet\Model\ResourceModel\Authorizenet\Debug\Collection',
+        'Magento\Authorizenet\Model\ResourceModel\Debug\Collection'
     ],
     [
-        'Magento\Authorizenet\Model\Resource\Authorizenet\Debug',
-        'Magento\Authorizenet\Model\Resource\Debug'
+        'Magento\Authorizenet\Model\ResourceModel\Authorizenet\Debug',
+        'Magento\Authorizenet\Model\ResourceModel\Debug'
     ],
     ['Magento\GoogleShopping\Block\SiteVerification'],
     ['Magento\GoogleShopping\Block\Adminhtml\Items\Renderer\Id'],
@@ -3792,7 +3816,7 @@ return [
     ['Magento\Framework\Code\Minifier\Adapter\Js\JSMin'],
     ['Magento\Framework\Code\Minifier\Adapter\Css\CssMinifier'],
     ['Magento\Framework\View\Asset\ModuleNotation\Resolver', 'Magento\Framework\View\Asset\NotationResolver\Module'],
-    ['Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\Price\Data'],
+    ['Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Price\Data'],
     ['Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\Tab\Super\Settings'],
     ['Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\Tabs\Configurable'],
     [
@@ -3828,7 +3852,7 @@ return [
     ['Magento\CatalogSearch\Model\Layer\Advanced\CollectionFilter'],
     ['Magento\CatalogSearch\Model\Layer\Advanced\Context'],
     ['Magento\CatalogSearch\Model\Layer\Advanced\FilterableAttributeList'],
-    ['Magento\Customer\Model\Resource\Customer\CustomersTypeOptions'],
+    ['Magento\Customer\Model\ResourceModel\Customer\CustomersTypeOptions'],
     ['Magento\Framework\Gdata\Gshopping\Content'],
     ['Magento\Framework\Gdata\Gshopping\Entry'],
     ['Magento\Framework\Gdata\Gshopping\HttpException'],
@@ -3918,10 +3942,12 @@ return [
     ['Magento\Quote\Model\Quote\Address\Total\Custbalance'],
     ['Magento\Quote\Model\Quote\Address\Total\Tax'],
     ['Magento\ConfigurableProduct\Block\Product\Configurable\AssociatedSelector\Backend\Grid\ColumnSet'],
-    ['Magento\ConfigurableProduct\Model\Resource\Product\Collection\AssociatedProduct'],
+    ['Magento\ConfigurableProduct\Model\ResourceModel\Product\Collection\AssociatedProduct'],
     ['Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\Tab\Super\Config\Grid\Renderer\Inventory'],
     ['Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\Tab\Super\Config\Grid\Renderer\Checkbox'],
     ['Magento\ConfigurableProduct\Block\Adminhtml\Product\Edit\Tab\Super\Config\Grid\Filter\Inventory'],
+    ['Magento\Catalog\Ui\Component\Listing\Filters'],
+    ['Magento\Customer\Ui\Component\Listing\Filters'],
     ['Magento\Catalog\Block\Product\TemplateSelector'],
     ['Magento\Downloadable\Controller\Adminhtml\Downloadable\Product\Edit\SuggestProductTemplates'],
     ['Magento\Bundle\Controller\Adminhtml\Bundle\Product\Edit\SuggestProductTemplates'],
@@ -3939,8 +3965,141 @@ return [
     ['Magento\Catalog\Model\Product\Attribute\Backend\GroupPrice'],
     ['Magento\Catalog\Model\Product\GroupPrice'],
     ['Magento\Catalog\Model\Product\GroupPriceManagement'],
-    ['Magento\Catalog\Model\Resource\Product\Attribute\Backend\GroupPrice'],
+    ['Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\GroupPrice'],
     ['Magento\Catalog\Pricing\Price\GroupPrice'],
     ['Magento\CatalogImportExport\Model\Import\Product\Validator\GroupPrice'],
     ['Magento\Catalog\Model\App\Action\ContextPlugin'],
+    [
+        'Magento\CmsUrlRewrite\Plugin\Cms\Model\Resource\Page',
+        'Magento\CmsUrlRewrite\Plugin\Cms\Model\ResourceModel\Page'
+    ],
+    [
+        'Magento\CmsUrlRewrite\Test\Unit\Plugin\Cms\Model\Resource\PageTest',
+        'Magento\CmsUrlRewrite\Test\Unit\Plugin\Cms\Model\ResourceModel\PageTest'
+    ],
+    [
+        'Magento\ConfigurableProduct\Plugin\Model\Resource\Product',
+        'Magento\ConfigurableProduct\Plugin\Model\ResourceModel\Product'
+    ],
+    [
+        'Magento\ConfigurableProduct\Test\Unit\Plugin\Model\Resource\ProductTest',
+        'Magento\ConfigurableProduct\Test\Unit\Plugin\Model\ResourceModel\ProductTest'
+    ],
+    [
+        '\Magento\SalesRule\Model\Plugin\Resource\Rule',
+        '\Magento\SalesRule\Model\Plugin\ResourceModel\Rule'
+    ],
+    [
+        '\Magento\SalesRule\Test\Unit\Model\Plugin\Resource\RuleTest',
+        '\Magento\SalesRule\Test\Unit\Model\Plugin\ResourceModel\RuleTest'
+    ],
+    ['Magento\Eav\Model\Entity\Increment\Numeric', 'Magento\Eav\Model\Entity\Increment\NumericValue'],
+    ['Magento\Framework\Pricing\Object\SaleableInterface', 'Magento\Framework\Pricing\SaleableInterface'],
+    ['Magento\Framework\Acl\Resource', 'Magento\Framework\Acl\AclResource'],
+    ['Magento\Framework\Acl\ResourceFactory', 'Magento\Framework\Acl\AclResourceFactory'],
+    ['Magento\Framework\App\Resource', 'Magento\Framework\App\ResourceConnection'],
+    ['Magento\Framework\Flag\Resource', 'Magento\Framework\Flag\FlagResource'],
+    ['Magento\Framework\Module\Resource', 'Magento\Framework\Module\ModuleResource'],
+    ['Magento\OfflineShipping\Model\Observer\SalesRule\ActionsTab', 'Magento\OfflineShipping\Observer\*'],
+    ['Magento\Theme\Model\Observer', 'Magento\Theme\Observer\*'],
+    ['Magento\Catalog\Observer\AddCatalogToTopmenuItems', 'Magento\Catalog\Observer\*'],
+    ['Magento\Catalog\Observer\CatalogCheckIsUsingStaticUrlsAllowed', 'Magento\Catalog\Observer\*'],
+    [
+        'Magento\LayeredNavigation\Block\Adminhtml\Product\Attribute\Edit\Tab\Front\Observer',
+        'Magento\LayeredNavigation\Observer\*'
+    ],
+    [
+        'Magento\LayeredNavigation\Block\Adminhtml\Product\Attribute\Grid\Observer',
+        'Magento\LayeredNavigation\Observer\*'
+    ],
+    ['Magento\Authorizenet\Model\Directpost\Observer', 'Magento\Authorizenet\Observer\*'],
+    ['Magento\Downloadable\Model\Observer', 'Magento\Downloadable\Observer\*'],
+    ['Magento\Msrp\Model\Observer\Frontend\Quote\SetCanApplyMsrp', 'Magento\Msrp\Observer\*'],
+    ['Magento\Customer\Model\Observer\Log', 'Magento\Customer\Observer\*'],
+    ['Magento\Customer\Model\Observer', 'Magento\Customer\Observer\*'],
+    ['Magento\Paypal\Model\Observer\RestrictAdminBillingAgreementUsage', 'Magento\Paypal\Observer\*'],
+    ['Magento\GiftMessage\Model\Observer', 'Magento\GiftMessage\Observer\*'],
+    ['Magento\Quote\Model\Observer\Webapi\Submit', 'Magento\Quote\Observer\*'],
+    ['Magento\Quote\Model\Observer\Backend\CustomerQuote', 'Magento\Quote\Observer\*'],
+    ['Magento\CatalogRule\Observer\ProcessAdminFinalPrice', 'Magento\CatalogRule\Observer\*'],
+    ['Magento\CatalogRule\Observer\ProcessFrontFinalPrice', 'Magento\CatalogRule\Observer\*'],
+    ['Magento\CatalogRule\Observer\PrepareCatalogProductCollectionPrices', 'Magento\CatalogRule\Observer\*'],
+    ['Magento\Review\Model\Observer', 'Magento\Review\Observer\*'],
+    ['Magento\Reports\Model\Event\Observer', 'Magento\Reports\Observer\*'],
+    ['Magento\GoogleAnalytics\Model\Observer', 'Magento\GoogleAnalytics\Observer\*'],
+    ['Magento\Braintree\Model\Observer', 'Magento\Braintree\Observer\*'],
+    ['Magento\Sales\Model\Observer\Frontend\Quote\RestoreCustomerGroupId', 'Magento\Sales\Observer\*'],
+    ['Magento\Sales\Model\Observer\Backend\CatalogProductQuote', 'Magento\Sales\Observer\*'],
+    ['Magento\Sales\Model\Observer\Backend\CatalogPriceRule', 'Magento\Sales\Observer\*'],
+    ['Magento\ProductVideo\Model\Observer', 'Magento\ProductVideo\Observer\*'],
+    ['Magento\Checkout\Observer\LoadCustomerQuote', 'Magento\Checkout\Observer\*'],
+    ['Magento\Checkout\Observer\UnsetAll', 'Magento\Checkout\Observer\*'],
+    ['Magento\AdminNotification\Model\Observer', 'Magento\AdminNotification\Observer\*'],
+    ['Magento\Cron\Model\Observer', 'Magento\Cron\Observer\*'],
+    ['Magento\User\Model\Backend\Observer\AuthObserver', 'Magento\User\Observer\*'],
+    ['Magento\User\Model\Backend\Observer\PasswordObserver', 'Magento\User\Observer\Backend\*'],
+    ['Magento\SalesRule\Model\Observer', 'Magento\SalesRule\Observer\*'],
+    ['Magento\CatalogUrlRewrite\Observer\CategorySaveRewritesHistorySetter', 'Magento\CatalogUrlRewrite\Observer\*'],
+    ['Magento\CatalogUrlRewrite\Observer\CategoryUrlPathAutogenerator', 'Magento\CatalogUrlRewrite\Observer\*'],
+    ['Magento\CatalogUrlRewrite\Model\Product\Observer', 'Magento\CatalogUrlRewrite\Observer\*'],
+    ['Magento\CatalogUrlRewrite\Model\Category\Observer', 'Magento\CatalogUrlRewrite\Observer\*'],
+    ['Magento\CatalogUrlRewrite\Observer\ProductUrlKeyAutogenerator', 'Magento\CatalogUrlRewrite\Observer\*'],
+    ['Magento\Weee\Model\Total\Observer\Webapi\Item', 'Magento\Weee\Observer\*'],
+    ['Magento\Captcha\Model\Observer', 'Magento\Captcha\Observer\*'],
+    ['Magento\GoogleAdwords\Model\Observer', 'Magento\GoogleAdwords\Observer\*'],
+    ['Magento\Bundle\Observer\AppendUpsellProducts', 'Magento\Bundle\Observer\*'],
+    ['Magento\Bundle\Observer\LoadProductOptions', 'Magento\Bundle\Observer\*'],
+    ['Magento\Bundle\Observer\InitOptionRenderer', 'Magento\Bundle\Observer\*'],
+    ['Magento\Bundle\Observer\SetAttributeTabBlock', 'Magento\Bundle\Observer\*'],
+    ['Magento\Config\Model\Config\Backend\Admin\Observer', 'Magento\Config\Observer\*'],
+    ['Magento\Persistent\Model\Observer\Session', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\ApplyPersistentData', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\DisableGuestCheckout', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\CustomerAuthenticatedEvent', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\SetQuotePersistentData', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\SetLoadPersistentQuote', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\RemovePersistentCookie', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\ApplyBlockPersistentData', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\UpdateCustomerCookies', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\EmulateQuote', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\CheckExpirePersistentQuote', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\EmulateCustomer', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\PreventExpressCheckout', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\PreventClearCheckoutSession', 'Magento\Persistent\Observer\*'],
+    ['Magento\Persistent\Model\Observer\MakePersistentQuoteGuest', 'Magento\Persistent\Observer\*'],
+    ['Magento\CmsUrlRewrite\Model\Observer', 'Magento\CmsUrlRewrite\Observer\*'],
+    ['Magento\Cms\Model\Observer', 'Magento\Cms\Observer\*'],
+    ['Magento\OfflinePayments\Model\Observer', 'Magento\OfflinePayments\Observer\*'],
+    ['Magento\Quote\Model\Observer\Frontend\Quote\Address\CollectTotals', 'Magento\Quote\Observer\*'],
+    ['Magento\Backend\Model\Observer', 'Magento\Backend\Observer\*'],
+    ['Magento\Sales\Model\Observer\Frontend\Quote\AddVatRequestParamsOrderComment', 'Magento\Sales\Observer\*'],
+    ['Magento\Sales\Model\Observer\Order\IndexGrid', 'Magento\Sales\Observer\*'],
+    ['Magento\Sales\Model\Observer\Order\Invoice\IndexGrid', 'Magento\Sales\Observer\*'],
+    ['Magento\Sales\Model\Observer\Order\Shipment\IndexGrid', 'Magento\Sales\Observer\*'],
+    ['Magento\Sales\Model\Observer\Order\Creditmemo\IndexGrid', 'Magento\Sales\Observer\*'],
+    ['Magento\Sales\Model\Observer\Order\SendEmails', 'Magento\Sales\Observer\*'],
+    ['Magento\Sales\Model\Observer\Order\Invoice\SendEmails', 'Magento\Sales\Observer\*'],
+    ['Magento\Sales\Model\Observer\Order\Shipment\SendEmails', 'Magento\Sales\Observer\*'],
+    ['Magento\Sales\Model\Observer\Order\Creditmemo\SendEmails', 'Magento\Sales\Observer\*'],
+    ['Magento\SalesSequence\Model\Observer', 'Magento\SalesSequence\Observer\*'],
+    ['Magento\Checkout\Observer\SalesQuoteSaveAfter', 'Magento\Checkout\Observer\*'],
+    ['Magento\CatalogUrlRewrite\Model\Product\Plugin\Import', 'Magento\CatalogUrlRewrite\Observer\*'],
+    ['Magento\CacheInvalidate\Observer\InvalidateVarnish', 'Magento\CacheInvalidate\Observer\*'],
+    ['Magento\CacheInvalidate\Observer\FlushAllCache', 'Magento\CacheInvalidate\Observer\*'],
+    ['Magento\PageCache\Model\Observer\ProcessLayoutRenderElement', 'Magento\PageCache\Observer\*'],
+    ['Magento\PageCache\Model\Observer\FlushCacheByTags', 'Magento\PageCache\Observer\*'],
+    ['Magento\PageCache\Model\Observer\InvalidateCacheIfChanged', 'Magento\PageCache\Observer\*'],
+    ['Magento\PageCache\Model\Observer\FlushAllCache', 'Magento\PageCache\Observer\*'],
+    ['Magento\PageCache\Model\Observer\InvalidateCache', 'Magento\PageCache\Observer\*'],
+    ['Magento\PageCache\Model\Observer\RegisterFormKeyFromCookie', 'Magento\PageCache\Observer\*'],
+    ['Magento\PageCache\Model\Observer\FlushFormKeyOnLogout', 'Magento\PageCache\Observer\*'],
+    ['Magento\GoogleOptimizer\Model\Observer\Product\Save', 'Magento\GoogleOptimizer\Observer\*'],
+    ['Magento\GoogleOptimizer\Model\Observer\Product\Delete', 'Magento\GoogleOptimizer\Observer\*'],
+    ['Magento\GoogleOptimizer\Model\Observer\Category\Save', 'Magento\GoogleOptimizer\Observer\*'],
+    ['Magento\GoogleOptimizer\Model\Observer\Category\Delete', 'Magento\GoogleOptimizer\Observer\*'],
+    ['Magento\GoogleOptimizer\Model\Observer\CmsPage\Save', 'Magento\GoogleOptimizer\Observer\*'],
+    ['Magento\GoogleOptimizer\Model\Observer\CmsPage\Delete', 'Magento\GoogleOptimizer\Observer\*'],
+    ['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'],
 ];
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_config_nodes.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_config_nodes.php
index 5e29eb028e2490edf39fe60b40e0818e0a6c11e9..f2055b59e642e14a8e4d2eb6d44eba6165d4f7c6 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_config_nodes.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_config_nodes.php
@@ -55,8 +55,8 @@ return [
     '/config/global/cms' => 'This configuration moved to Di configuration of \Magento\Cms\Model\Wysiwyg\Images\Storage' .
     ' and \Magento\Cms\Model\Wysiwyg\Config',
     '/config/global/widget' => 'This configuration moved to Di configuration of \Magento\Cms\Model\Template\FilterProvider',
-    '/config/global/catalog/product/flat/max_index_count' => 'This configuration moved to Di configuration of \Magento\Catalog\Model\Resource\Product\Flat\Indexer',
-    '/config/global/catalog/product/flat/attribute_groups' => 'This configuration moved to Di configuration of \Magento\Catalog\Model\Resource\Product\Flat\Indexer',
+    '/config/global/catalog/product/flat/max_index_count' => 'This configuration moved to Di configuration of \Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer',
+    '/config/global/catalog/product/flat/attribute_groups' => 'This configuration moved to Di configuration of \Magento\Catalog\Model\ResourceModel\Product\Flat\Indexer',
     '/config/global/catalog/product/flat/add_filterable_attributes' => 'This configuration moved to Di configuration of \Magento\Catalog\Helper\Product\Flat\Indexer',
     '/config/global/catalog/product/flat/add_child_data' => 'This configuration moved to Di configuration of \Magento\Catalog\Helper\Product\Flat\Indexer',
     '/config/global/catalog/content/template_filter' => 'This configuration moved to Di configuration of \Magento\Catalog\Helper\Data',
@@ -67,8 +67,8 @@ return [
     '/config/global/catalog/product/attributes' => 'This configuration moved catalog_attributes.xml',
     '/config/global/eav_frontendclasses' => 'This configuration was removed. ' .
     'Please pluginize \Magento\Eav\Helper\Data::getFrontendClasses to extend frontend classes list',
-    '/config/global/resources' => 'This configuration moved to Di configuration of \Magento\Framework\App\Resource',
-    '/config/global/resource' => 'This configuration moved to Di configuration of \Magento\Framework\App\Resource',
+    '/config/global/resources' => 'This configuration moved to Di configuration of \Magento\Framework\App\ResourceConnection',
+    '/config/global/resource' => 'This configuration moved to Di configuration of \Magento\Framework\App\ResourceConnection',
     '/config/*/events/core_block_abstract_to_html_after' => 'Event has been replaced with "core_layout_render_element"',
     '/config/*/events/catalog_controller_product_delete' => '',
     '/config//observers/*/args' => 'This was an undocumented and unused feature in event subscribers',
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php
index 4d236fa739eadb0203e69d41ac1c5204de49b7ec..1a0a6503809d5e2717bac49bcf46d39e750a23da 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_constants.php
@@ -19,7 +19,7 @@ return [
     ['CACHE_TAG', 'Magento\Framework\AppInterface'],
     [
         'CACHE_TAG',
-        'Magento\Framework\Model\Resource\Db\Collection\AbstractCollection',
+        'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection',
         'Magento_Core_Model_Cache_Type_Collection::CACHE_TAG',
     ],
     ['CACHE_TAG', 'Magento\Framework\Translate', 'Magento_Core_Model_Cache_Type_Translate::CACHE_TAG'],
@@ -56,18 +56,18 @@ return [
     ],
     [
         'DEFAULT_READ_RESOURCE',
-        'Magento\Framework\App\Resource',
+        'Magento\Framework\App\ResourceConnection',
     ],
     [
         'DEFAULT_WRITE_RESOURCE',
-        'Magento\Framework\App\Resource',
+        'Magento\Framework\App\ResourceConnection',
     ],
     [
         'DEFAULT_SETUP_CONNECTION',
-        '\Magento\Framework\App\Resource\Config',
+        '\Magento\Framework\App\ResourceConnection\Config',
     ],
-    ['DEFAULT_READ_CONNECTION', 'Magento\Framework\App\Resource\Config'],
-    ['DEFAULT_WRITE_CONNECTION', 'Magento\Framework\App\Resource\Config'],
+    ['DEFAULT_READ_CONNECTION', 'Magento\Framework\App\ResourceConnection\Config'],
+    ['DEFAULT_WRITE_CONNECTION', 'Magento\Framework\App\ResourceConnection\Config'],
     ['DEFAULT_ERROR_HANDLER', 'Mage'],
     ['DEFAULT_THEME_NAME', 'Magento\Core\Model\Design\PackageInterface'],
     ['DEFAULT_THEME_NAME', 'Magento\Core\Model\Design\Package'],
@@ -78,7 +78,7 @@ return [
     ['ENTITY_PRODUCT', 'Magento\Review\Model\Review'],
     ['EXCEPTION_CODE_IS_GROUPED_PRODUCT'],
     ['FALLBACK_MAP_DIR', 'Magento\Core\Model\Design\PackageInterface'],
-    ['GALLERY_IMAGE_TABLE', 'Magento\Catalog\Model\Resource\Product\Attribute\Backend\Media'],
+    ['GALLERY_IMAGE_TABLE', 'Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Media'],
     ['HASH_ALGO'],
     ['INIT_OPTION_DIRS', 'Magento\Core\Model\App', 'Magento_Core_Model_App::PARAM_APP_DIRS'],
     ['INIT_OPTION_REQUEST', 'Magento\Core\Model\App'],
@@ -148,11 +148,6 @@ return [
     ['XML_CHARSET_NODE', 'Magento\SalesRule\Helper\Coupon'],
     ['XML_CHARSET_SEPARATOR', 'Magento\SalesRule\Helper\Coupon'],
     ['XML_NODE_RELATED_CACHE', 'Magento\CatalogRule\Model\Rule'],
-    [
-        'XML_NODE_ATTRIBUTE_NODES',
-        'Magento\Catalog\Model\Resource\Product\Flat\Indexer',
-        'XML_NODE_ATTRIBUTE_GROUPS',
-    ],
     [
         'XML_PATH_ALLOW_DUPLICATION',
         'Magento\Core\Model\Design\PackageInterface',
@@ -162,7 +157,7 @@ return [
     ['XML_PATH_BACKEND_FRONTNAME', 'Mage_Backend_Helper_Data'],
     ['XML_PATH_CACHE_BETA_TYPES'],
     ['XML_PATH_CHECK_EXTENSIONS', 'Magento\Install\Model\Config'],
-    ['XML_PATH_CONNECTION_TYPE', 'Magento\Framework\App\Resource\Config'],
+    ['XML_PATH_CONNECTION_TYPE', 'Magento\Framework\App\ResourceConnection\Config'],
     ['XML_PATH_CONNECTION_TYPE', 'Magento\Core\Helper\Data'],
     ['XML_PATH_COUNTRY_DEFAULT', 'Magento\Paypal\Model\System\Config\Backend\MerchantCountry'],
     [
@@ -310,8 +305,6 @@ return [
     ['XML_NODE_ADD_FILTERABLE_ATTRIBUTES', 'Magento\Catalog\Helper\Product\Flat'],
     ['XML_NODE_ADD_CHILD_DATA', 'Magento\Catalog\Helper\Product\Flat'],
     ['XML_PATH_CONTENT_TEMPLATE_FILTER', 'Magento\Catalog\Helper\Data'],
-    ['XML_NODE_MAX_INDEX_COUNT', 'Magento\Catalog\Model\Resource\Product\Flat\Indexer'],
-    ['XML_NODE_ATTRIBUTE_GROUPS', 'Magento\Catalog\Model\Resource\Product\Flat\Indexer'],
     ['XML_PATH_UNASSIGNABLE_ATTRIBUTES', 'Magento\Catalog\Helper\Product'],
     ['XML_PATH_ATTRIBUTES_USED_IN_AUTOGENERATION', 'Magento\Catalog\Helper\Product'],
     ['XML_PATH_PRODUCT_TYPE_SWITCHER_LABEL', 'Magento\Catalog\Helper\Product'],
@@ -527,12 +520,12 @@ return [
     [
         'LINK_TYPE_GROUPED',
         '\Magento\Catalog\Model\Product\Link',
-        '\Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED',
+        '\Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED',
     ],
     [
         'TYPE_GROUPED',
         '\Magento\Catalog\Model\Product\Type',
-        '\Magento\GroupedProduct\Model\Resource\Product\Link::LINK_TYPE_GROUPED',
+        '\Magento\GroupedProduct\Model\ResourceModel\Product\Link::LINK_TYPE_GROUPED',
     ],
     ['PARAM_APP_URIS', 'Magento\Framework\Filesystem'],
     ['ROOT_DIR', '\Magento\Framework\App\Filesystem', '\Magento\Framework\App\Filesystem\DirectoryList::ROOT'],
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 ccc3f8fb9641b47b6c3ad36d257c56d526197005..ca7f4471723dc3df3850a1e2941c1adab9aa08fd 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
@@ -13,14 +13,14 @@ return [
     ['__set', 'Magento\Framework\DataObject'],
     ['_addItem', 'Magento\Theme\Block\Html\Head'],
     ['_addLink', 'Magento\Customer\Block\Account\Link'],
-    ['_addMinimalPrice', 'Magento\Catalog\Model\Resource\Product\Collection'],
-    ['_addTaxPercents', 'Magento\Catalog\Model\Resource\Product\Collection'],
+    ['_addMinimalPrice', 'Magento\Catalog\Model\ResourceModel\Product\Collection'],
+    ['_addTaxPercents', 'Magento\Catalog\Model\ResourceModel\Product\Collection'],
     ['_afterSaveCommit', 'Magento\Framework\Model\AbstractModel'],
     ['_afterSetConfig', 'Magento\Eav\Model\Entity\AbstractEntity'],
     ['getAttributeCodes', 'Magento\Eav\Model\Entity\Type'],
-    ['_loadTypeAttributes', 'Magento\Eav\Model\Resource\Entity\Attribute'],
+    ['_loadTypeAttributes', 'Magento\Eav\Model\ResourceModel\Entity\Attribute'],
     ['preloadAttributes', 'Magento\Eav\Model\Entity\Type\Config'],
-    ['_aggregateByOrderCreatedAt', 'Magento\SalesRule\Model\Resource\Report\Rule'],
+    ['_aggregateByOrderCreatedAt', 'Magento\SalesRule\Model\ResourceModel\Report\Rule'],
     ['_amountByCookies', 'Magento\Sendfriend\Model\Sendfriend'],
     ['setCookie', 'Magento\Sendfriend\Model\Sendfriend'],
     ['getCookie', 'Magento\Sendfriend\Model\Sendfriend'],
@@ -35,9 +35,9 @@ return [
     ['_applyDesignRecursively', 'Magento\Catalog\Model\Design'],
     ['_avoidDoubleTransactionProcessing'],
     ['_beforeChildToHtml'],
-    ['_beforeMove', 'Magento\Catalog\Model\Resource\Category\Tree'],
-    ['_getIsActiveAttributeId', 'Magento\Catalog\Model\Resource\Category\Tree', 'Magento\Catalog\Model\Resource\Category::getIsActiveAttributeId'],
-    ['_getIsActiveAttributeId', 'Magento\Catalog\Model\Resource\Category', 'Magento\Catalog\Model\Resource\Category::getIsActiveAttributeId'],
+    ['_beforeMove', 'Magento\Catalog\Model\ResourceModel\Category\Tree'],
+    ['_getIsActiveAttributeId', 'Magento\Catalog\Model\ResourceModel\Category\Tree', 'Magento\Catalog\Model\ResourceModel\Category::getIsActiveAttributeId'],
+    ['_getIsActiveAttributeId', 'Magento\Catalog\Model\ResourceModel\Category', 'Magento\Catalog\Model\ResourceModel\Category::getIsActiveAttributeId'],
     ['_bytesToMbytes', 'Magento\Catalog\Model\Product\Option\Type\File'],
     ['_calculatePrice', 'Magento\Quote\Model\Quote\Item\AbstractItem'],
     ['_canBeStoreCodeInUrl', 'Magento\Framework\App\Request\Http'],
@@ -57,7 +57,7 @@ return [
         'Magento\Store\Model\StorageFactory::_checkRequestStore',
     ],
     ['_checkUrlSettings', 'Magento\Backend\Controller\Adminhtml\Action'],
-    ['_collectOrigData', 'Magento\Catalog\Model\Resource\AbstractResource'],
+    ['_collectOrigData', 'Magento\Catalog\Model\ResourceModel\AbstractResource'],
     ['_decodeFilter', 'Magento\Backend\Block\Widget\Grid'],
     ['_decodeInput', 'Magento\Catalog\Controller\Adminhtml\Product'],
     ['_emailOrderConfirmation', 'Magento\Checkout\Model\Type\AbstractType'],
@@ -80,14 +80,14 @@ return [
     ['_getConfig', 'Magento\Theme\Helper\Layout'],
     ['_getCollapseState', 'Magento\Backend\Block\System\Config\Form\Fieldset', '_isCollapseState'],
     ['_getCollectionNames', 'Magento\Backend\Controller\Report\Sales'],
-    ['_getConnectionAdapterClassName', 'Magento\Framework\App\Resource'],
+    ['_getConnectionAdapterClassName', 'Magento\Framework\App\ResourceConnection'],
     ['_getConnenctionType', 'Magento\Install\Model\Installer\Db'],
     ['_getDateFromToHtml', 'Magento\ImportExport\Block\Adminhtml\Export\Filter'],
     ['_getDeclaredModuleFiles', 'Magento\Core\Model\Config'],
     ['_getDesignChange', 'Magento\Framework\App\Area'],
     ['_getDom', 'Magento\Backend\Model\Menu\Config'],
     ['_getExistingBasePopularity'],
-    ['_getFieldTableAlias', 'Magento\Newsletter\Model\Resource\Subscriber\Collection'],
+    ['_getFieldTableAlias', 'Magento\Newsletter\Model\ResourceModel\Subscriber\Collection'],
     ['_getForeignKeyName', 'Magento\Framework\DB\Adapter\Pdo\Mysql'],
     ['_getGiftmessageSaveModel', 'Magento\Sales\Block\Adminhtml\Order\Create\Search\Grid'],
     ['_getGlobalAggregation'],
@@ -97,7 +97,7 @@ return [
     ['_getInputHtml', 'Magento\ImportExport\Block\Adminhtml\Export\Filter'],
     ['_getItemPriceBlock', 'Magento\Wishlist\Block\AbstractBlock'],
     ['getIsActive', 'Magento\Store\Model\Store', 'isActive'],
-    ['_getLabelForStore', 'Magento\Catalog\Model\Resource\Eav\Attribute'],
+    ['_getLabelForStore', 'Magento\Catalog\Model\ResourceModel\Eav\Attribute'],
     ['_getMultiSelectHtml', 'Magento\ImportExport\Block\Adminhtml\Export\Filter'],
     ['_getNumberFromToHtml', 'Magento\ImportExport\Block\Adminhtml\Export\Filter'],
     ['_getPathInScope', 'Magento\Core\Model\Config'],
@@ -138,14 +138,14 @@ return [
     ['_inludeControllerClass', '', '_includeControllerClass'],
     ['_isApplyDesign', 'Magento\Catalog\Model\Design'],
     ['_isApplyFor', 'Magento\Catalog\Model\Design'],
-    ['_isPositiveDecimalNumber', 'Magento\OfflineShipping\Model\Resource\Carrier\Tablerate'],
+    ['_isPositiveDecimalNumber', 'Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate'],
     ['_isRuntimeValidated', 'Magento\Framework\ObjectManager\Config\Reader\Dom'],
     ['_loadCache', 'Magento\Backend\Model\Menu\Config'],
     ['_loadCache', 'Magento\Core\Model\Config'],
     ['_loadDeclaredModules', 'Magento\Core\Model\Config'],
     ['_loadInstallDate', 'Magento\Core\Model\Config'],
     ['_loadLocalConfig', 'Magento\Core\Model\Config'],
-    ['_loadOldRates', 'Magento\Tax\Model\Resource\Setup'],
+    ['_loadOldRates', 'Magento\Tax\Model\ResourceModel\Setup'],
     ['_loadSectionCache', 'Magento\Core\Model\Config'],
     ['_needSubtractShippingTax'],
     ['_needSubtractTax'],
@@ -167,7 +167,7 @@ return [
     ['_processShippingAmount'],
     ['_processValidateCustomer', 'Magento\Checkout\Model\Type\Onepage'],
     ['_putCustomerIntoQuote', 'Magento\Sales\Model\AdminOrder\Create'],
-    ['_quoteRow', 'Magento\Backup\Model\Resource\Db'],
+    ['_quoteRow', 'Magento\Backup\Model\ResourceModel\Db'],
     ['_recollectItem', 'Magento\Tax\Model\Sales\Total\Quote\Subtotal'],
     ['_removeCache', 'Magento\Core\Model\Config'],
     ['_removeLink', 'Magento\Customer\Block\Account\Link'],
@@ -259,7 +259,7 @@ return [
         '',
         '$collection->setVisibility(\Magento\Catalog\Model\Product\Visibility->getVisibleInSiteIds());',
     ],
-    ['addWishListSortOrder', 'Magento\Wishlist\Model\Resource\Item\Collection'],
+    ['addWishListSortOrder', 'Magento\Wishlist\Model\ResourceModel\Item\Collection'],
     [
         'aggregateSalesReportShipmentData',
         '\Magento\Sales\Model\Observer',
@@ -278,7 +278,7 @@ return [
     ['bundlesAction', 'Magento\Catalog\Controller\Adminhtml\Product'],
     ['calcTaxAmount', 'Magento\Quote\Model\Quote\Item\AbstractItem'],
     ['callbackQueryHook', 'Magento\Core\Model\Resource\Setup'],
-    ['canCreateUser', 'Magento\User\Model\Resource\User'],
+    ['canCreateUser', 'Magento\User\Model\ResourceModel\User'],
     ['canPrint', 'Magento\Checkout\Block\Onepage\Success'],
     [
         'canTestHeaders',
@@ -290,13 +290,13 @@ return [
     ['catalogProductCompareClean', 'Magento\Catalog\Model\Observer'],
     ['changeLocaleAction', 'Magento\Backend\Controller\Adminhtml\Index'],
     ['chechAllowedExtension'],
-    ['checkConfigurableProducts', 'Magento\Eav\Model\Resource\Entity\Attribute\Collection'],
+    ['checkConfigurableProducts', 'Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection'],
     ['checkDatabase', 'Magento\Install\Model\Installer\Db'],
     ['checkDateTime', 'Magento\Framework\Stdlib\DateTime\DateTime'],
     ['chooseTemplate', 'Magento\Checkout\Block\Cart'],
     ['cleanCache', 'Magento\Core\Model\Config'],
     ['cleanCache', '\Magento\Core\Model\Observer', '\Magento\Backend\Model\Observer'],
-    ['cleanDbRow', 'Magento\Framework\App\Resource'],
+    ['cleanDbRow', 'Magento\Framework\App\ResourceConnection'],
     ['cleanMergedJsCss', 'Magento\Core\Model\Design\Package', 'Magento\Framework\View\Asset\MergeService'],
     ['cleanMergedJsCss', 'Magento\Core\Model\Design\Package\Proxy', 'Magento\Framework\View\Asset\MergeService'],
     [
@@ -313,7 +313,7 @@ return [
     ['collectRoutes', 'Magento\Backend\App\Router'],
     ['collectRoutes', 'Magento\Core\App\Router\Base'],
     ['composeLocaleHierarchy', 'Magento\Translation\Helper\Data'],
-    ['convertOldTaxData', 'Magento\Tax\Model\Resource\Setup'],
+    ['convertOldTaxData', 'Magento\Tax\Model\ResourceModel\Setup'],
     ['copyFieldset', 'Magento\Core\Helper\Data', 'copyFieldsetToTarget'],
     ['copyQuoteFilesToOrderFiles', 'Magento\Catalog\Model\Product\Option\Observer'],
     ['countChildren', 'Magento\Core\Block\AbstractBlock'],
@@ -326,7 +326,7 @@ return [
     ['decorateArray', 'Magento\Core\Helper\Data', 'Magento\Framework\Stdlib\ArrayUtils::decorateArray'],
     ['deleteAction', 'Magento\Catalog\Controller\Adminhtml\Product'],
     ['deleteConfig', 'Magento\Core\Model\Config'],
-    ['deleteProductPrices', 'Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice'],
+    ['deleteProductPrices', 'Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice'],
     ['display', 'Magento\Framework\Image\Adapter\AbstractAdapter', 'getImage()'],
     ['displayFullSummary', 'Magento\Tax\Model\Config'],
     ['displayZeroTax', 'Magento\Tax\Model\Config'],
@@ -347,9 +347,9 @@ return [
     ['eventClean', 'Magento\Reports\Model\Event\Observer'],
     ['exportOrderedCsvAction'],
     ['exportOrderedExcelAction'],
-    ['fetchItemsCount', 'Magento\Wishlist\Model\Resource\Wishlist'],
+    ['fetchItemsCount', 'Magento\Wishlist\Model\ResourceModel\Wishlist'],
     ['fetchRuleRatesForCustomerTaxClass'],
-    ['fetchUpdatesByHandle', 'Magento\Core\Model\Resource\Layout', 'Magento\Widget\Model\Resource\Layout\Update'],
+    ['fetchUpdatesByHandle', 'Magento\Core\Model\Resource\Layout', 'Magento\Widget\Model\ResourceModel\Layout\Update'],
     ['flush', 'Magento\Framework\App\Cache', 'Magento_Cache_FrontendInterface::clean()'],
     ['flush', 'Magento\Framework\App\Cache\Proxy', 'Magento_Cache_FrontendInterface::clean()'],
     ['flush', 'Magento\Framework\App\CacheInterface', 'Magento_Cache_FrontendInterface::clean()'],
@@ -415,7 +415,7 @@ return [
     ['getConfigAsXml', 'Magento\Widget\Model\Widget'],
     ['getConfigData', 'Magento\Cms\Model\Wysiwyg\Images\Storage'],
     ['getConfigDataModel', 'Magento\Core\Model\Config'],
-    ['getConnectionTypeInstance', 'Magento\Framework\App\Resource'],
+    ['getConnectionTypeInstance', 'Magento\Framework\App\ResourceConnection'],
     ['getContainers', 'Magento\Core\Model\Layout\Update', 'Magento\Framework\View\Model\Layout\Merge'],
     ['getCurrentUrl', 'Magento\Core\Helper\Url', 'Magento\Framework\Url'],
     ['getHomeUrl', 'Magento\Core\Helper\Url'],
@@ -491,7 +491,7 @@ return [
     ['getMenuItemLabel', 'Magento\Admin\Model\Config'],
     ['getMergedCssUrl'],
     ['getMergedJsUrl'],
-    ['getMessageUserCreationProhibited', 'Magento\User\Model\Resource\User'],
+    ['getMessageUserCreationProhibited', 'Magento\User\Model\ResourceModel\User'],
     ['getMinQueryLenght'],
     ['getModelClassName', 'Magento\Core\Model\Config'],
     ['getModuleByName', 'Magento\Core\App\Router\Base'],
@@ -531,7 +531,7 @@ return [
     ['getPathAsArray', '', 'direct explode by /'],
     ['getPathFromArray', '', 'direct usage of /'],
     ['getPathVars', 'Magento\Core\Model\Config'],
-    ['getParentProductIds', 'Magento\Catalog\Model\Resource\Product'],
+    ['getParentProductIds', 'Magento\Catalog\Model\ResourceModel\Product'],
     ['getPostMaxSize', 'Magento\Backend\Block\Media\Uploader', 'Magento_File_Size::getPostMaxSize()'],
     ['getPriceFormatted', 'Magento\Customer\Block\Adminhtml\Edit\Tab\View\Sales'],
     ['getPrices', 'Magento\Bundle\Model\Product\Price', 'getTotalPrices()'],
@@ -696,11 +696,11 @@ return [
     ['_checkCookieStore', 'Magento\Store\Model\Storage\Db'],
     ['_getStoreByGroup', 'Magento\Store\Model\Storage\Db'],
     ['_getStoreByWebsite', 'Magento\Store\Model\Storage\Db'],
-    ['initLabels', 'Magento\Catalog\Model\Resource\Eav\Attribute'],
+    ['initLabels', 'Magento\Catalog\Model\ResourceModel\Eav\Attribute'],
     ['initLayoutMessages', 'Magento\Framework\App\Action\Action'],
     ['initSerializerBlock', 'Magento\Backend\Block\Catalog\Product\Edit\Tab\Ajax\Serializer'],
     ['initSerializerBlock', 'Magento\Backend\Block\Widget\Grid\Serializer'],
-    ['insertProductPrice', 'Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice'],
+    ['insertProductPrice', 'Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice'],
     ['isAbsolutePath'],
     ['isAdmin', 'Magento\Store\Model\Store'],
     ['isAllowedGuestCheckout', 'Magento\Quote\Model\Quote'],
@@ -717,7 +717,7 @@ return [
     ['isStaticFilesSigned', 'Magento\Core\Helper\Data'],
     ['isTemplateAllowedForApplication'],
     ['isThemeCompatible', 'Magento\Core\Model\Design\Package', 'Magento_Core_Model_Theme::isThemeCompatible'],
-    ['isUserSavingAllowed', 'Magento\User\Model\Resource\User'],
+    ['isUserSavingAllowed', 'Magento\User\Model\ResourceModel\User'],
     ['isVerbose', 'Magento\Framework\Shell'],
     ['isWindowsOs', 'Magento\TestFramework\Helper\Memory'],
     ['joinTaxClass', 'Magento\Tax\Helper\Data'],
@@ -726,17 +726,17 @@ return [
     ['load', 'Magento\Core\Model\Layout\Update', 'Magento\Framework\View\Model\Layout\Merge'],
     ['loadBaseContents', 'Magento\Email\Model\Template'],
     ['loadBase', 'Magento\Core\Model\Config'],
-    ['loadByCustomer', 'Magento\Newsletter\Model\Resource\Subscriber', 'loadByCustomerData'],
+    ['loadByCustomer', 'Magento\Newsletter\Model\ResourceModel\Subscriber', 'loadByCustomerData'],
     ['loadDb', 'Magento\Core\Model\Config'],
     ['loadDiConfiguration', 'Magento\Core\Model\Config'],
     ['loadEventObservers', 'Magento\Core\Model\Config'],
-    ['loadLabel', 'Magento\Catalog\Model\Resource\Product\Type\Configurable\Attribute'],
+    ['loadLabel', 'Magento\Catalog\Model\ResourceModel\Product\Type\Configurable\Attribute'],
     ['loadModules', 'Magento\Core\Model\Config'],
     ['loadModulesCache', 'Magento\Core\Model\Config'],
     ['loadModulesConfiguration', 'Magento\Core\Model\Config'],
     ['loadParentProductIds', 'Magento\Catalog\Model\Product'],
-    ['loadPrices', 'Magento\Catalog\Model\Resource\Product\Type\Configurable\Attribute'],
-    ['loadProductPrices', 'Magento\Catalog\Model\Resource\Product\Attribute\Backend\Tierprice'],
+    ['loadPrices', 'Magento\Catalog\Model\ResourceModel\Product\Type\Configurable\Attribute'],
+    ['loadProductPrices', 'Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Tierprice'],
     ['logEncryptionKeySave'],
     ['logI' . 'nvitationSave'],
     [
@@ -813,10 +813,10 @@ return [
     ['setAnonSuffix'],
     ['setApplyFilters'],
     ['setAttributeDataModelFactory', 'Magento\Eav\Model\Validator\Attribute\Data'],
-    ['setAttributeSetExcludeFilter', 'Magento\Eav\Model\Resource\Entity\Attribute\Collection'],
+    ['setAttributeSetExcludeFilter', 'Magento\Eav\Model\ResourceModel\Entity\Attribute\Collection'],
     ['setBlockAlias'],
     ['setConfig', 'Magento\Captcha\Helper\Data'],
-    ['setCustomerId', 'Magento\Customer\Model\Resource\Address'],
+    ['setCustomerId', 'Magento\Customer\Model\ResourceModel\Address'],
     ['setDirectOutput', 'Magento\Framework\View\Layout'],
     ['setInstance', 'Magento\TestFramework\Bootstrap', 'Magento_TestFramework_Helper_Bootstrap::setInstance'],
     ['setIsAjaxRequest', 'Magento\Framework\Translate\Inline'],
@@ -828,7 +828,7 @@ return [
     ['setParentBlock'],
     ['setProduct', 'Magento\Catalog\Model\Product\Type\AbstractType'],
     ['setProfile', 'Magento\Framework\Convert\Container\AbstractContainer'],
-    ['setResourceConfig', 'Magento\Framework\App\Resource'],
+    ['setResourceConfig', 'Magento\Framework\App\ResourceConnection'],
     ['setSaveTemplateFlag', 'Magento\Newsletter\Model\Queue'],
     ['setScriptPath'],
     ['setScriptPath', 'Magento\Framework\View\Element\Template'],
@@ -852,7 +852,7 @@ return [
     ['getProductAttributes', 'Magento\Checkout\Block\Cart\Item\Renderer\Configurable'],
     ['substDistroServerVars', 'Magento\Core\Model\Config'],
     ['superGroupGridOnlyAction', 'Magento\Catalog\Controller\Adminhtml\Product'],
-    ['toOptionArray', 'Magento\Cms\Model\Resource\Page\Collection'],
+    ['toOptionArray', 'Magento\Cms\Model\ResourceModel\Page\Collection'],
     ['toOptionArray', 'Magento\Sendfriend\Model\Sendfriend'],
     ['truncate', 'Magento\Framework\DB\Adapter\Pdo\Mysql'],
     ['unsetBlock'],
@@ -866,7 +866,7 @@ return [
     ['validateDataArray', 'Magento\Framework\Convert\Container\AbstractContainer'],
     ['validateFile', 'Magento\Core\Model\Design\Package'],
     ['validateOrder', 'Magento\Checkout\Model\Type\Onepage'],
-    ['viewTrackAction', 'Magento\Sales\Controller\Adminhtml\Order\Shipment'],
+    ['viewTrackAction', 'Magento\Shipping\Controller\Adminhtml\Order\Shipment'],
     ['_prepareOptionValues', 'Magento\Eav\Block\Adminhtml\Attribute\Edit\Options\AbstractOptions'],
     ['_getOptionValuesCollection', 'Magento\Eav\Block\Adminhtml\Attribute\Edit\Options\AbstractOptions'],
     [
@@ -951,20 +951,20 @@ return [
     ['_getUsers', 'Magento\User\Block\Role\Grid\User', 'getUsers'],
     ['_getGridHtml', 'Magento\User\Block\Role\Tab\Users', 'getGridHtml'],
     ['_getSelectedRoles', 'Magento\User\Block\User\Edit\Tab\Roles', 'getSelectedRoles'],
-    ['_prepareSelect', 'Magento\Framework\Model\Resource\Db\Collection\AbstractCollection'],
+    ['_prepareSelect', 'Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection'],
     ['_prepareSelect', 'Magento\Framework\Data\Collection\AbstractDb'],
     ['_createOrderFromAddress', 'Magento\Checkout\Model\Type\AbstractType'],
-    ['_addLoadAttributesSelectFields', 'Magento\Catalog\Model\Resource\AbstractResource'],
-    ['attributeSelectFields', 'Magento\Catalog\Model\Resource\Helper'],
+    ['_addLoadAttributesSelectFields', 'Magento\Catalog\Model\ResourceModel\AbstractResource'],
+    ['attributeSelectFields', 'Magento\Catalog\Model\ResourceModel\Helper'],
     ['_addLoadAttributesSelectFields', 'Magento\Eav\Model\Entity\AbstractEntity'],
-    ['attributeSelectFields', 'Magento\Eav\Model\Resource\Helper'],
-    ['prepareEavAttributeValue', 'Magento\Eav\Model\Resource\Helper'],
-    ['prepareColumn', 'Magento\Eav\Model\Resource\Helper'],
-    ['getInsertFromSelectUsingAnalytic', 'Magento\Eav\Model\Resource\Helper'],
-    ['setOneRowLimit', 'Magento\Eav\Model\Resource\Helper'],
+    ['attributeSelectFields', 'Magento\Eav\Model\ResourceModel\Helper'],
+    ['prepareEavAttributeValue', 'Magento\Eav\Model\ResourceModel\Helper'],
+    ['prepareColumn', 'Magento\Eav\Model\ResourceModel\Helper'],
+    ['getInsertFromSelectUsingAnalytic', 'Magento\Eav\Model\ResourceModel\Helper'],
+    ['setOneRowLimit', 'Magento\Eav\Model\ResourceModel\Helper'],
     ['getCarrierByCode', 'Magento\Shipping\Model\Config', 'Magento\Shipping\Model\CarrierFactory::create||get'],
     ['getCarrierInstance', 'Magento\Shipping\Model\Config', 'Magento\Shipping\Model\CarrierFactory::create||get'],
-    ['getCastToIntExpression', 'Magento\Eav\Model\Resource\Helper'],
+    ['getCastToIntExpression', 'Magento\Eav\Model\ResourceModel\Helper'],
     ['_initMetaTags', 'Magento\Theme\Block\Html\Head'],
     ['addMetaTag', 'Magento\Theme\Block\Html\Head'],
     ['getDefaultMetaTags', 'Magento\Theme\Block\Html\Head'],
@@ -985,7 +985,7 @@ return [
     ['getValidateHttpUserAgentSkip', 'Magento\Core\Model\Session\AbstractSession'],
     ['addProductAttributes', 'Magento\SalesRule\Model\Observer'],
     ['_helper', 'Magento\Catalog\Model\Product\Type\AbstractType'],
-    ['getHelper', 'Magento\Catalog\Model\Resource\Product\Type\Configurable\Attribute\Collection'],
+    ['getHelper', 'Magento\Catalog\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection'],
     ['getHelper', 'Magento\Cms\Model\Wysiwyg\Images\Storage'],
     ['getCatalogHelper', 'Magento\Backend\Block\Catalog\Category\Tabs'],
     ['_getSession', 'Magento\Centinel\Model\Service'],
@@ -1010,9 +1010,9 @@ return [
     ['_getSession', 'Magento\Sales\Model\AdminOrder'],
     ['setIsSerializable', 'Magento\Framework\App\State'],
     ['getIsSerializable', 'Magento\Framework\App\State'],
-    ['_getInventoryItemResource', 'Magento\Reports\Model\Resource\Product\Lowstock\Collection'],
-    ['turnOnReadCommittedMode', 'Magento\Backup\Model\Resource\Db'],
-    ['turnOnSerializableMode', 'Magento\Backup\Model\Resource\Db', 'prepareTransactionIsolationLevel'],
+    ['_getInventoryItemResource', 'Magento\Reports\Model\ResourceModel\Product\Lowstock\Collection'],
+    ['turnOnReadCommittedMode', 'Magento\Backup\Model\ResourceModel\Db'],
+    ['turnOnSerializableMode', 'Magento\Backup\Model\ResourceModel\Db', 'prepareTransactionIsolationLevel'],
     ['turnOnMaintenanceMode', 'Magento\Backup\Helper\Data', 'Magento\Framework\App\MaintenanceMode::set'],
     ['turnOffMaintenanceMode', 'Magento\Backup\Helper\Data', 'Magento\Framework\App\MaintenanceMode::set'],
     ['getMaintenanceFlagFilePath', 'Magento\Backup\Helper\Data'],
@@ -1116,12 +1116,12 @@ return [
     ],
     [
         'formatDate',
-        'Magento\Framework\Model\Resource\AbstractResource',
+        'Magento\Framework\Model\ResourceModel\AbstractResource',
         '\Magento\Framework\Stdlib\DateTime::formatDate',
     ],
     [
         'mktime',
-        'Magento\Framework\Model\Resource\AbstractResource',
+        'Magento\Framework\Model\ResourceModel\AbstractResource',
         '\Magento\Framework\Stdlib\DateTime::toTimestamp',
     ],
     ['getPlainTemplateMode', '\Magento\Email\Model\Template\Filter'],
@@ -1333,7 +1333,7 @@ return [
     ['helper', 'Magento\Framework\View\Element\AbstractBlock'],
     ['getDataHelperName', 'Magento\Backend\Block\Dashboard\AbstractDashboard'],
     ['setDataHelperName', 'Magento\Backend\Block\Dashboard\AbstractDashboard'],
-    ['addStoresToCollection', '\Magento\Review\Model\Resource\Rating\Collection'],
+    ['addStoresToCollection', '\Magento\Review\Model\ResourceModel\Rating\Collection'],
     ['getSessionSaveMethod', '\Magento\Core\Model\Session\AbstractSession', '\Magento\Core\Model\Session\Config'],
     ['setSessionName', '\Magento\Core\Model\Session\AbstractSession', 'setName'],
     ['getCode', '\Magento\Framework\Message\AbstractMessage', 'getText'],
@@ -1456,21 +1456,21 @@ return [
     ['getFlag', 'Magento\Catalog\Helper\Product\Flat'],
     ['isBuilt', 'Magento\Catalog\Helper\Product\Flat'],
     ['getIndexerIds', 'Magento\Indexer\Model\Config'],
-    ['refreshEnabledIndex', 'Magento\Catalog\Model\Resource\Product'],
-    ['refreshIndex', 'Magento\Catalog\Model\Resource\Product'],
+    ['refreshEnabledIndex', 'Magento\Catalog\Model\ResourceModel\Product'],
+    ['refreshIndex', 'Magento\Catalog\Model\ResourceModel\Product'],
     ['getProductStatusEnabled', 'Magento\CatalogInventory\Model\Stock\Status'],
     ['getProductStatus', 'Magento\CatalogInventory\Model\Stock\Status', 'getProductStockStatus'],
     [
         'getProductStatus',
-        'Magento\Catalog\Model\Resource\Product\Status',
-        'Magento\CatalogInventory\Model\Resource\Stock\Status',
+        'Magento\Catalog\Model\ResourceModel\Product\Status',
+        'Magento\CatalogInventory\Model\ResourceModel\Stock\Status',
     ],
     ['updateProductStatus', 'Magento\Catalog\Model\Product\Status'],
     ['getProductStatus', 'Magento\Catalog\Model\Product\Status'],
     [
         'addValueSortToCollection',
         'Magento\Catalog\Model\Product\Status',
-        'Magento\CatalogInventory\Model\Resource\Stock\Status',
+        'Magento\CatalogInventory\Model\ResourceModel\Stock\Status',
     ],
     ['catalogProductStatusUpdate', 'Magento\Sales\Model\Observer\Backend\CatalogProductQuote'],
     ['applyPermissionsAfterReindex', 'Magento\CatalogPermissions\Model\Adminhtml\Observer'],
@@ -1486,7 +1486,7 @@ return [
     ],
     [
         'isUsedBySuperProducts',
-        'Magento\Catalog\Model\Resource\Attribute',
+        'Magento\Catalog\Model\ResourceModel\Attribute',
         'Magento\ConfigurableProduct\Model\Attribute\LockValidator::validate',
     ],
     ['_detectMimeType', 'Magento\Framework\File\Transfer\Adapter\Http', '\Magento\Framework\File\Mime::getMimeType()'],
@@ -1566,12 +1566,11 @@ return [
         '\Magento\Framework\View\Element\Context::getScopeConfig',
     ],
     ['setConfig', 'Magento\Store\Model\Store'],
-    ['getConfig', 'Magento\Store\Model\Store'],
     ['_compareSortOrder', 'Magento\Sales\Model\Config\Ordered'],
     [
         '_toOptionHashOptimized',
         'Magento\Framework\Data\Collection\AbstractDb',
-        'Magento\Tax\Model\Resource\Calculation\Rate\Collection::toOptionHashOptimized',
+        'Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection::toOptionHashOptimized',
     ],
     ['getSwitchCurrencyUrl', 'Magento\Directory\Block\Currency'],
     ['getPageVarName', 'Magento\Catalog\Block\Product\ProductList\Toolbar'],
@@ -1608,9 +1607,9 @@ return [
     ['_stripInlineTranslations', 'Magento\Framework\Translate\Inline', 'stripInlineTranslations'],
     ['isAllowed', 'Magento\Framework\Translate'],
     ['translate', 'Magento\Framework\Translate'],
-    ['_getStoreId', 'Magento\Translation\Model\Resource\Translate', 'getScope'],
-    ['_getStoreId', 'Magento\Translation\Model\Resource\String', 'getScope'],
-    ['filterByCustomer', 'Magento\Wishlist\Model\Resource\Wishlist\Collection'],
+    ['_getStoreId', 'Magento\Translation\Model\ResourceModel\Translate', 'getScope'],
+    ['_getStoreId', 'Magento\Translation\Model\ResourceModel\String', 'getScope'],
+    ['filterByCustomer', 'Magento\Wishlist\Model\ResourceModel\Wishlist\Collection'],
     ['setConfigData', 'Magento\Framework\Module\Setup'],
     ['deleteConfigData', 'Magento\Framework\Module\Setup'],
     ['getReservedAttributes', 'Magento\Catalog\Model\Product'],
@@ -1627,8 +1626,8 @@ return [
     ['getAnyStoreView', 'Magento\Store\Model\StoreManagerInterface'],
     ['throwStoreException', 'Magento\Store\Model\StoreManagerInterface'],
     ['getCustomer', 'Magento\ProductAlert\Helper\Data'],
-    ['addCustomerFilter', 'Magento\ProductAlert\Model\Resource\Stock\Collection'],
-    ['addCustomerFilter', 'Magento\ProductAlert\Model\Resource\Price\Collection'],
+    ['addCustomerFilter', 'Magento\ProductAlert\Model\ResourceModel\Stock\Collection'],
+    ['addCustomerFilter', 'Magento\ProductAlert\Model\ResourceModel\Price\Collection'],
     ['setCustomer', 'Magento\ProductAlert\Model\Email'],
     ['getCustomer', 'Magento\Persistent\Helper\Session'],
     ['_getThemeInstance', 'Magento\Framework\View\Layout'],
@@ -1664,10 +1663,10 @@ return [
     ['getInvisibleOnFrontStates', 'Magento\Sales\Model\Order\Config', 'getInvisibleOnFrontStatuses'],
     ['_authorize', 'Magento\Sales\Model\Order\Payment'],
     ['registerPaymentReviewAction', 'Magento\Sales\Model\Order\Payment'],
-    ['_shouldBeConverted', 'Magento\Sales\Model\Resource\AbstractResource'],
-    ['_beforeSave', 'Magento\Sales\Model\Resource\AbstractResource'],
-    ['_afterSave', 'Magento\Sales\Model\Resource\AbstractResource'],
-    ['_afterLoad', 'Magento\Sales\Model\Resource\AbstractResource'],
+    ['_shouldBeConverted', 'Magento\Sales\Model\ResourceModel\AbstractResource'],
+    ['_beforeSave', 'Magento\Sales\Model\ResourceModel\AbstractResource'],
+    ['_afterSave', 'Magento\Sales\Model\ResourceModel\AbstractResource'],
+    ['_afterLoad', 'Magento\Sales\Model\ResourceModel\AbstractResource'],
     ['getAllMethods', 'Magento\Payment\Model\Config'],
     ['_getMethod', 'Magento\Payment\Model\Config'],
     ['getViewFileUrl', 'Magento\Framework\View\Url', 'Magento\Framework\View\Asset\Repository::getUrl'],
@@ -1727,7 +1726,7 @@ return [
     ['changeItemStatus', 'Magento\CatalogInventory\Model\Stock\Status'],
     ['getWebsiteDefaultStoreId', 'Magento\CatalogInventory\Model\Stock\Status'],
     ['getProductData', 'Magento\CatalogInventory\Model\Stock\Status'],
-    ['getProductData', 'Magento\CatalogInventory\Model\Resource\Stock\Status'],
+    ['getProductData', 'Magento\CatalogInventory\Model\ResourceModel\Stock\Status'],
     ['getProduct', 'Magento\CatalogInventory\Model\Stock\Item'],
     ['reset', 'Magento\CatalogInventory\Model\Stock\Item'],
     ['prepareValueForDuplicate', 'Magento\Catalog\Model\Product\Option\Value'],
@@ -1743,7 +1742,7 @@ return [
     ['getRatesForAllProductTaxClasses', 'Magento\Tax\Model\Calculation'],
     ['getRatesForAllCustomerTaxClasses', 'Magento\Tax\Model\Calculation'],
     ['getMaxRecipients', 'Magento\Catalog\Block\Product\Send'],
-    ['prepareCatalogProductIndexSelect', 'Magento\CatalogInventory\Model\Resource\Stock\Status'],
+    ['prepareCatalogProductIndexSelect', 'Magento\CatalogInventory\Model\ResourceModel\Stock\Status'],
     ['prepareCatalogProductIndexSelect', 'Magento\CatalogInventory\Model\Stock\Status'],
     [
         'getWebsites',
@@ -1775,91 +1774,91 @@ return [
     ['updateCategoryIndex', 'Magento\CatalogSearch\Model\Fulltext'],
     [
         'rebuildIndex',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::rebuildIndex',
     ],
     [
         '_rebuildStoreIndex',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::rebuildStoreIndex',
     ],
     [
         '_getSearchableProducts',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::getSearchableProducts',
     ],
     [
         'cleanIndex',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::cleanIndex',
     ],
     [
         'getEavConfig',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::getEavConfig',
     ],
     [
         '_getSearchableAttributes',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::getSearchableAttributes',
     ],
     [
         '_getSearchableAttribute',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::getSearchableAttribute',
     ],
     [
         '_unifyField',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::unifyField',
     ],
     [
         '_getProductAttributes',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::getProductAttributes',
     ],
     [
         '_getProductTypeInstance',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::getProductTypeInstance',
     ],
     [
         '_getProductChildIds',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::getProductChildIds',
     ],
     [
         '_getProductEmulator',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::getProductEmulator',
     ],
     [
         '_prepareProductIndex',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::prepareProductIndex',
     ],
     [
         '_getAttributeValue',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::getAttributeValue',
     ],
     [
         '_saveProductIndex',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
     ],
     [
         '_saveProductIndexes',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::saveProductIndexes',
     ],
     [
         '_getStoreDate',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
         'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full::getStoreDate',
     ],
     [
         'updateCategoryIndex',
-        'Magento\CatalogSearch\Model\Resource\Fulltext',
+        'Magento\CatalogSearch\Model\ResourceModel\Fulltext',
     ],
     ['_getRestrictedStoresList', 'Magento\UrlRewrite\Block\Edit\Form'],
     ['removeTag', 'Magento\UrlRewrite\Model\UrlRewrite'],
@@ -1935,8 +1934,8 @@ return [
     ['getCategoryIndexer', 'Magento\Catalog\Model\Product\Action'],
     ['getIndexer', 'Magento\CatalogSearch\Model\Indexer\Fulltext\Plugin\AbstractPlugin'],
     ['getRemoteResource', 'Magento\Framework\Filesystem', 'Magento\Framework\Filesystem\File\ReadFactory::create'],
-    ['setCache', 'Magento\Framework\App\Magento\Framework\App\Resource'],
-    ['setTablePrefix', 'Magento\Framework\App\Magento\Framework\App\Resource', 'Can be passed through constructor only'],
+    ['setCache', 'Magento\Framework\App\Magento\Framework\App\ResourceConnection'],
+    ['setTablePrefix', 'Magento\Framework\App\Magento\Framework\App\ResourceConnection', 'Can be passed through constructor only'],
     ['_debugTimer', 'Magento\Framework\DB\Adapter\Pdo\Mysql', 'Magento\Framework\DB\Logger\LoggerAbstract::startTimer'],
     ['_debugStat', 'Magento\Framework\DB\Adapter\Pdo\Mysql', 'Magento\Framework\DB\Logger\File::logStats'],
     ['_debugException', 'Magento\Framework\DB\Adapter\Pdo\Mysql', 'Magento\Framework\DB\Logger\File::critical'],
@@ -1971,7 +1970,7 @@ return [
         'Magento\Tax\Api\TaxRateManagementInterface::getRatesByCustomerAndProductTaxClassId',
     ],
     ['getProduct', 'Magento\Catalog\Helper\Product'],
-    ['getCategoryModel', 'Magento\Catalog\Model\Resource\Url'],
+    ['getCategoryModel', 'Magento\Catalog\Model\ResourceModel\Url'],
     ['getTaxConfig', 'Magento\ConfigurableProduct\Pricing\Price\AttributePrice'],
     ['prepareAdjustmentConfig', 'Magento\ConfigurableProduct\Pricing\Price\AttributePrice'],
     ['_escapeDefaultValue', 'Magento\Framework\Code\Generator\EntityAbstract'],
@@ -1989,15 +1988,15 @@ return [
     ['_getWebsiteRates', 'Magento\Catalog\Model\Product\Attribute\Backend\Tierprice'],
     ['toString', 'Magento\CatalogRule\Model\Rule'],
     ['toArray', 'Magento\CatalogRule\Model\Rule'],
-    ['addStoreFilter', 'Magento\Cms\Model\Resource\AbstractCollection'],
+    ['addStoreFilter', 'Magento\Cms\Model\ResourceModel\AbstractCollection'],
     ['asString', 'Magento\Rule\Model\AbstractModel'],
     ['asHtml', 'Magento\Rule\Model\AbstractModel'],
     ['asArray', 'Magento\Rule\Model\AbstractModel'],
     ['_prepareWebsiteIds', 'Magento\Rule\Model\AbstractModel'],
-    ['setEnv', 'Magento\Rule\Model\Resource\Rule\Collection\AbstractCollection'],
-    ['getEnv', 'Magento\Rule\Model\Resource\Rule\Collection\AbstractCollection'],
-    ['setActiveFilter', 'Magento\Rule\Model\Resource\Rule\Collection\AbstractCollection'],
-    ['process', 'Magento\Rule\Model\Resource\Rule\Collection\AbstractCollection'],
+    ['setEnv', 'Magento\Rule\Model\ResourceModel\Rule\Collection\AbstractCollection'],
+    ['getEnv', 'Magento\Rule\Model\ResourceModel\Rule\Collection\AbstractCollection'],
+    ['setActiveFilter', 'Magento\Rule\Model\ResourceModel\Rule\Collection\AbstractCollection'],
+    ['process', 'Magento\Rule\Model\ResourceModel\Rule\Collection\AbstractCollection'],
     [
         'isAutomaticCleaningAvailable',
         'Magento\Framework\Cache\Backend\Decorator\AbstractDecorator',
@@ -2011,21 +2010,21 @@ return [
     ['getLinksConfig', 'Magento\Downloadable\Block\Catalog\Product\Links'],
     ['getAuthorizationAmounts', 'Magento\Paypal\Model\Config'],
     ['getSkinImagePlaceholderUrl', 'Magento\Cms\Model\Wysiwyg\Config'],
-    ['compareIndexColumnProperties', 'Magento\Catalog\Model\Resource\Helper'],
-    ['getIsNullNotNullCondition', 'Magento\Catalog\Model\Resource\Helper'],
+    ['compareIndexColumnProperties', 'Magento\Catalog\Model\ResourceModel\Helper'],
+    ['getIsNullNotNullCondition', 'Magento\Catalog\Model\ResourceModel\Helper'],
     ['getAllNonNominalItems', 'Magento\Sales\Model\Quote\Address'],
     ['getAllNominalItems', 'Magento\Sales\Model\Quote\Address'],
     ['isNominal', 'Magento\Sales\Model\Order\Item'],
     ['getIsConfigurable', 'Magento\Catalog\Api\Data\EavAttributeInterface'],
     ['getIsConfigurable', 'Magento\Catalog\Model\Category\Attribute'],
-    ['getIsConfigurable', 'Magento\Catalog\Model\Resource\Eav\Attribute'],
+    ['getIsConfigurable', 'Magento\Catalog\Model\ResourceModel\Eav\Attribute'],
     ['getIsNominal', 'Magento\Sales\Model\Quote\Item\AbbstractItem'],
     ['checkQuoteAmount', 'Magento\Sales\Helper\Data'],
     ['getEntityTypeId', 'Magento\Customer\Model\Customer'],
-    ['getResource', 'Magento\CatalogSearch\Model\Resource\EngineInterface'],
-    ['getResourceCollection', 'Magento\CatalogSearch\Model\Resource\EngineInterface'],
-    ['getResultCollection', 'Magento\CatalogSearch\Model\Resource\EngineInterface'],
-    ['getAdvancedResultCollection', 'Magento\CatalogSearch\Model\Resource\EngineInterface'],
+    ['getResource', 'Magento\CatalogSearch\Model\ResourceModel\EngineInterface'],
+    ['getResourceCollection', 'Magento\CatalogSearch\Model\ResourceModel\EngineInterface'],
+    ['getResultCollection', 'Magento\CatalogSearch\Model\ResourceModel\EngineInterface'],
+    ['getAdvancedResultCollection', 'Magento\CatalogSearch\Model\ResourceModel\EngineInterface'],
     ['_getSendfriendModel', 'Magento\Sendfriend\Block\Send'],
     ['_initSendToFriendModel', 'Magento\Sendfriend\Controller\Product'],
     ['register', 'Magento\Sendfriend\Model\Sendfriend'],
@@ -2124,8 +2123,8 @@ return [
     ['count', 'Magento\Review\Block\Customer\Recent'],
     ['_getCollection', 'Magento\Review\Block\Customer\Recent'],
     ['getCollection', 'Magento\Review\Block\Customer\Recent', 'Magento\Review\Block\Customer\Recent::getReviews'],
-    ['getProductEntityTypeId', 'Magento\Reports\Model\Resource\Product\Collection'],
-    ['setProductEntityTypeId', 'Magento\Reports\Model\Resource\Product\Collection'],
+    ['getProductEntityTypeId', 'Magento\Reports\Model\ResourceModel\Product\Collection'],
+    ['setProductEntityTypeId', 'Magento\Reports\Model\ResourceModel\Product\Collection'],
     ['bindLocale', 'Magento\Backend\Model\Observer'],
     ['getLocaleLists', 'Magento\Dhl\Model\Resource\Setup', 'getLocaleResolver'],
     ['getTranslationList', 'Magento\Framework\Locale\Lists', '\ResourceBundle'],
@@ -2148,14 +2147,14 @@ return [
     ['_isCacheEnabled', 'Magento\Eav\Model\Config'],
     ['_createCustomerAttribute', '\Magento\Customer\Model\Customer'],
     ['prepareCatalogProductPriceIndexTable', 'Magento\CatalogRule\Model\Observer'],
-    ['joinOrders', 'Magento\Reports\Model\Resource\Customer\Collection'],
-    ['addOrdersCount', 'Magento\Reports\Model\Resource\Customer\Collection'],
-    ['addSumAvgTotals', 'Magento\Reports\Model\Resource\Customer\Collection'],
-    ['orderByTotalAmount', 'Magento\Reports\Model\Resource\Customer\Collection'],
-    ['addOrderedQty', 'Magento\Reports\Model\Resource\Product\Collection'],
-    ['prepareForProductsInCarts', 'Magento\Reports\Model\Resource\Quote\Collection'],
-    ['getOrdersSubSelect', 'Magento\Reports\Model\Resource\Quote\Collection'],
-    ['isOrderIncrementIdUsed', 'Magento\Quote\Model\Resource\Quote'],
+    ['joinOrders', 'Magento\Reports\Model\ResourceModel\Customer\Collection'],
+    ['addOrdersCount', 'Magento\Reports\Model\ResourceModel\Customer\Collection'],
+    ['addSumAvgTotals', 'Magento\Reports\Model\ResourceModel\Customer\Collection'],
+    ['orderByTotalAmount', 'Magento\Reports\Model\ResourceModel\Customer\Collection'],
+    ['addOrderedQty', 'Magento\Reports\Model\ResourceModel\Product\Collection'],
+    ['prepareForProductsInCarts', 'Magento\Reports\Model\ResourceModel\Quote\Collection'],
+    ['getOrdersSubSelect', 'Magento\Reports\Model\ResourceModel\Quote\Collection'],
+    ['isOrderIncrementIdUsed', 'Magento\Quote\Model\ResourceModel\Quote'],
     ['isStateProtected', 'Magento\Sales\Model\Order'],
     ['_getBundleOptions', 'Magento\Bundle\Block\Checkout\Cart\Item\Renderer'],
     ['_getSelectionFinalPrice', 'Magento\Bundle\Block\Checkout\Cart\Item\Renderer'],
@@ -2220,10 +2219,10 @@ return [
     ],
     ['getIdentities', 'Magento\Sales\Block\Reorder\Sidebar'],
     ['assignData', 'Magento\OfflinePayments\Model\Checkmo'],
-    ['timeShift', 'Magento\Reports\Model\Resource\Report\Collection'],
+    ['timeShift', 'Magento\Reports\Model\ResourceModel\Report\Collection'],
     ['getFilePath', 'Magento\MediaStorage\Model\File\Storage\Request'],
-    ['_getStoreTimezoneUtcOffset', 'Magento\Reports\Model\Resource\Report\AbstractReport'],
-    ['_dateToUtc', 'Magento\Reports\Model\Resource\Report\AbstractReport'],
+    ['_getStoreTimezoneUtcOffset', 'Magento\Reports\Model\ResourceModel\Report\AbstractReport'],
+    ['_dateToUtc', 'Magento\Reports\Model\ResourceModel\Report\AbstractReport'],
     ['getDataSetDefault', 'Magento\Framework\DataObject'],
     ['isDeleted', 'Magento\Framework\DataObject', 'Moved to Magento\Framework\Model\AbstractModel'],
     ['hasDataChanges', 'Magento\Framework\DataObject', 'Moved to Magento\Framework\Model\AbstractModel'],
@@ -2256,7 +2255,7 @@ return [
     ['_implodeStreetField', 'Magento\Customer\Model\Address\AbstractAddress', '_implodeArrayField',],
     ['_applyDesignConfig', 'Magento\Email\Model\AbstractTemplate', 'applyDesignConfig'],
     ['_cancelDesignConfig', 'Magento\Email\Model\AbstractTemplate', 'cancelDesignConfig'],
-    ['loadByCode', 'Magento\Newsletter\Model\Resource'],
+    ['loadByCode', 'Magento\Newsletter\Model\ResourceModel'],
     ['_getIncludeParameters', 'Magento\Framework\Filter\Template', '_getParameters'],
     ['setIncludeProcessor', 'Magento\Framework\Filter\Template'],
     ['includeDirective', 'Magento\Framework\Filter\Template'],
@@ -2314,7 +2313,7 @@ return [
     ['prepareIndexdata', 'Magento\Search\Helper\Data'],
     ['isAssetMinification', 'Magento\Framework\View\Asset\ConfigInterface', 'Magento\Framework\View\Asset\Minification::isEnabled'],
     ['isAssetMinification', 'Magento\Framework\View\Asset\Config', 'Magento\Framework\View\Asset\Minification::isEnabled'],
-    ['getPriceValues', 'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute\Collection'],
+    ['getPriceValues', 'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute\Collection'],
     ['getPricingValue', 'Magento\ConfigurableProduct\Model\Product\Type\Configurable\OptionValue'],
     ['getIsPercent', 'Magento\ConfigurableProduct\Model\Product\Type\Configurable\OptionValue'],
     ['addPrice', 'Magento\ConfigurableProduct\Model\Product\Type\Configurable\Attribute'],
@@ -2322,10 +2321,10 @@ return [
     ['setPricingValue', 'Magento\ConfigurableProduct\Api\Data\OptionValueInterface'],
     ['getIsPercent', 'Magento\ConfigurableProduct\Api\Data\OptionValueInterface'],
     ['setIsPercent', 'Magento\ConfigurableProduct\Api\Data\OptionValueInterface'],
-    ['_loadPrices', 'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute'],
-    ['getPriceValues', 'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable\Attribute'],
-    ['savePrices', 'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable'],
-    ['loadPrices', 'Magento\ConfigurableProduct\Model\Resource\Product\Type\Configurable'],
+    ['_loadPrices', 'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute'],
+    ['getPriceValues', 'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable\Attribute'],
+    ['savePrices', 'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable'],
+    ['loadPrices', 'Magento\ConfigurableProduct\Model\ResourceModel\Product\Type\Configurable'],
     ['_parseVariationPrices', '\Magento\ConfigurableImportExport\Model\Import\Product\Type\Configurable'],
     ['_collectSuperDataPrice', '\Magento\ConfigurableImportExport\Model\Import\Product\Type\Configurable'],
     [
@@ -2343,18 +2342,18 @@ return [
     ['_getReadAdapter', 'Magento\Framework\DB\Helper\AbstractHelper', 'getConnection'],
     ['_getWriteAdapter', 'Magento\Framework\DB\Helper\AbstractHelper', 'getConnection'],
     ['_getConnection', 'Magento\Framework\DB\Helper\AbstractHelper', 'getConnection'],
-    ['_getReadAdapter', 'Magento\Framework\Model\Resource\AbstractResource', 'getConnection'],
-    ['_getWriteAdapter', 'Magento\Framework\Model\Resource\AbstractResource', 'getConnection'],
-    ['_getReadAdapter', 'Magento\Framework\Model\Resource\Db\AbstractDb', 'getConnection'],
-    ['_getWriteAdapter', 'Magento\Framework\Model\Resource\Db\AbstractDb', 'getConnection'],
-    ['getReadConnection', 'Magento\Framework\Model\Resource\Db\AbstractDb', 'getConnection'],
+    ['_getReadAdapter', 'Magento\Framework\Model\ResourceModel\AbstractResource', 'getConnection'],
+    ['_getWriteAdapter', 'Magento\Framework\Model\ResourceModel\AbstractResource', 'getConnection'],
+    ['_getReadAdapter', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', 'getConnection'],
+    ['_getWriteAdapter', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', 'getConnection'],
+    ['getReadConnection', 'Magento\Framework\Model\ResourceModel\Db\AbstractDb', 'getConnection'],
     ['getReadAdapter', 'Magento\Catalog\Model\Indexer\Category\Flat\AbstractAction'],
     ['getWriteAdapter', 'Magento\Catalog\Model\Indexer\Category\Flat\AbstractAction'],
     ['getReadAdapter', 'Magento\Catalog\Model\Indexer\Category\Product\AbstractAction'],
     ['getWriteAdapter', 'Magento\Catalog\Model\Indexer\Category\Product\AbstractAction'],
     ['_getWriteConnection', 'Magento\Catalog\Model\Indexer\Product\Price\Observer'],
-    ['getWriteConnection', 'Magento\Catalog\Model\Resource\Product\Indexer\Price\DefaultPrice'],
-    ['prepareReadAdapter', 'Magento\Catalog\Model\Resource\Url', 'prepareAdapter'],
+    ['getWriteConnection', 'Magento\Catalog\Model\ResourceModel\Product\Indexer\Price\DefaultPrice'],
+    ['prepareReadAdapter', 'Magento\Catalog\Model\ResourceModel\Url', 'prepareAdapter'],
     ['getReadAdapter', 'Magento\CatalogRule\Model\Indexer\IndexBuilder'],
     ['getWriteAdapter', 'Magento\CatalogRule\Model\Indexer\IndexBuilder'],
     ['getReadAdapter', 'Magento\CatalogSearch\Model\Indexer\Fulltext\Action\Full'],
@@ -2368,8 +2367,8 @@ return [
     ['getWriteConnection', 'Magento\Eav\Model\Entity\AbstractEntity'],
     ['getAdapter', 'Magento\Indexer\Model\IndexStructure'],
     ['getAdapter', 'Magento\Indexer\Model\SaveHandler\IndexerHandler'],
-    ['_getReadAdapter', 'Magento\MediaStorage\Model\Resource\File\Storage\AbstractStorage'],
-    ['_getWriteAdapter', 'Magento\MediaStorage\Model\Resource\File\Storage\AbstractStorage'],
+    ['_getReadAdapter', 'Magento\MediaStorage\Model\ResourceModel\File\Storage\AbstractStorage'],
+    ['_getWriteAdapter', 'Magento\MediaStorage\Model\ResourceModel\File\Storage\AbstractStorage'],
     ['getAdapter', 'Magento\Search\Model\SearchEngine'],
     ['getAdapter', 'Magento\Framework\DB\Select'],
     ['getStoreCodeFromCookie', '\Magento\Store\Model\Store'],
@@ -2394,7 +2393,7 @@ return [
     ['salesEventConvertQuoteAddressToOrder', 'Magento\Tax\Model\Observer'],
     ['aggregateSalesReportTaxData', 'Magento\Tax\Model\Observer', 'Magento\Tax\Observer\AggregateSalesReportTaxData::invoke'],
     ['quoteCollectTotalsBefore', 'Magento\Tax\Model\Observer', 'Magento\Tax\Observer\QuoteCollectTotalsBefore::invoke'],
-    ['updateProductOptions', 'Magento\Tax\Model\Observer', 'Magento\Tax\Observer\UpdateProductOptions::invoke'],
+    ['updateProductOptions', 'Magento\Tax\Model\Observer', 'Magento\Tax\Observer\UpdateProductOptionsObserver::invoke'],
     ['invalidateVarnish', 'Magento\CacheInvalidate\Model\Observer', 'Magento\CacheInvalidate\Observer\InvalidateVarnish::invoke'],
     ['flushAllCache', 'Magento\CacheInvalidate\Model\Observer', 'Magento\CacheInvalidate\Observer\FlushAllCache::invoke'],
     ['sendPurgeRequest', 'Magento\CacheInvalidate\Model\Observer', 'Magento\CacheInvalidate\Model\PurgeCache::sendPurgeRequest'],
@@ -2476,4 +2475,14 @@ return [
     ['getTypeSwitcherControlLabel', 'Magento\Catalog\Helper\Product'],
     ['addStockStatusToSelect', 'Magento\CatalogInventory\Helper\Stock'],
     ['getUrlInstance', 'Magento\Catalog\Model\Product\Url'],
+    ['getCcOwner', 'Magento\Quote\Api\Data\PaymentInterface'],
+    ['setCcOwner', 'Magento\Quote\Api\Data\PaymentInterface'],
+    ['getCcNumber', 'Magento\Quote\Api\Data\PaymentInterface'],
+    ['setCcNumber', 'Magento\Quote\Api\Data\PaymentInterface'],
+    ['getCcType', 'Magento\Quote\Api\Data\PaymentInterface'],
+    ['setCcType', 'Magento\Quote\Api\Data\PaymentInterface'],
+    ['getCcExpYear', 'Magento\Quote\Api\Data\PaymentInterface'],
+    ['setCcExpYear', 'Magento\Quote\Api\Data\PaymentInterface'],
+    ['getCcExpMonth', 'Magento\Quote\Api\Data\PaymentInterface'],
+    ['setCcExpMonth', 'Magento\Quote\Api\Data\PaymentInterface'],
 ];
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php
index 32b0b5ce05641f5bffcadfbee72543aa401df1f6..2419014c40dc875bd0d539cf87f3479a9500690c 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_namespaces.php
@@ -70,9 +70,9 @@ return [
     ['Magento\RecurringPayment'],
     ['Magento\PayPalRecurringPayment'],
     ['Magento\ConfigurableProduct\Service'],
-    ['Magento\Core\Model\Resource\Variable', 'Magento\Variable\Model\Resource\Variable'],
+    ['Magento\Core\Model\Resource\Variable', 'Magento\Variable\Model\ResourceModel\Variable'],
     ['Magento\Core\Model\TemplateEngine\Decorator', 'Magento\Developer\Model\TemplateEngine\Decorator'],
-    ['Magento\Core\Model\Resource\Config', 'Magento\Config\Model\Resource\Config'],
+    ['Magento\Core\Model\Resource\Config', 'Magento\Config\Model\ResourceModel\Config'],
     ['Magento\Backend\Block\System\Config', 'Magento\Config\Block\System\Config'],
     ['Magento\Backend\Controller\Adminhtml\System\Config', 'Magento\Config\Controller\Adminhtml\System\Config'],
     ['Magento\Backend\Model\Config', 'Magento\Config\Model\Config'],
@@ -89,4 +89,109 @@ return [
     ['Magento\Framework\View\Asset\ModuleNotation'],
     ['Magento\Framework\Object', 'Magento\Framework\DataObject'],
     ['Magento\DesignEditor'],
+    ['Magento\Variable\Model\Resource', 'Magento\Variable\Model\ResourceModel'],
+    ['Magento\AdminNotification\Model\Resource', 'Magento\AdminNotification\Model\ResourceModel'],
+    ['Magento\Authorization\Model\Resource', 'Magento\Authorization\Model\ResourceModel'],
+    ['Magento\Authorizenet\Model\Resource', 'Magento\Authorizenet\Model\ResourceModel'],
+    ['Magento\Backend\Model\Resource', 'Magento\Backend\Model\ResourceModel'],
+    ['Magento\Backup\Model\Resource', 'Magento\Backup\Model\ResourceModel'],
+    ['Magento\Bundle\Model\Resource', 'Magento\Bundle\Model\ResourceModel'],
+    ['Magento\Captcha\Model\Resource', 'Magento\Captcha\Model\ResourceModel'],
+    ['Magento\CatalogInventory\Model\Resource', 'Magento\CatalogInventory\Model\ResourceModel'],
+    ['Magento\Catalog\Model\Resource', 'Magento\Catalog\Model\ResourceModel'],
+    ['Magento\CatalogRule\Model\Resource', 'Magento\CatalogRule\Model\ResourceModel'],
+    ['Magento\CatalogSearch\Model\Resource', 'Magento\CatalogSearch\Model\ResourceModel'],
+    ['Magento\CatalogUrlRewrite\Model\Resource', 'Magento\CatalogUrlRewrite\Model\ResourceModel'],
+    ['Magento\CheckoutAgreements\Model\Resource', 'Magento\CheckoutAgreements\Model\ResourceModel'],
+    ['Magento\Checkout\Model\Resource', 'Magento\Checkout\Model\ResourceModel'],
+    ['Magento\Cms\Model\Resource', 'Magento\Cms\Model\ResourceModel'],
+    ['Magento\Config\Model\Resource', 'Magento\Config\Model\ResourceModel'],
+    ['Magento\ConfigurableProduct\Model\Resource', 'Magento\ConfigurableProduct\Model\ResourceModel'],
+    ['Magento\Cron\Model\Resource', 'Magento\Cron\Model\ResourceModel'],
+    ['Magento\CustomerImportExport\Model\Resource', 'Magento\CustomerImportExport\Model\ResourceModel'],
+    ['Magento\Customer\Model\Resource', 'Magento\Customer\Model\ResourceModel'],
+    ['Magento\Directory\Model\Resource', 'Magento\Directory\Model\ResourceModel'],
+    ['Magento\Downloadable\Model\Resource', 'Magento\Downloadable\Model\ResourceModel'],
+    ['Magento\Eav\Model\Resource', 'Magento\Eav\Model\ResourceModel'],
+    ['Magento\Email\Model\Resource', 'Magento\Email\Model\ResourceModel'],
+    ['Magento\EncryptionKey\Model\Resource', 'Magento\EncryptionKey\Model\ResourceModel'],
+    ['Magento\GiftMessage\Model\Resource', 'Magento\GiftMessage\Model\ResourceModel'],
+    ['Magento\GoogleOptimizer\Model\Resource', 'Magento\GoogleOptimizer\Model\ResourceModel'],
+    ['Magento\GroupedProduct\Model\Resource', 'Magento\GroupedProduct\Model\ResourceModel'],
+    ['Magento\ImportExport\Model\Resource', 'Magento\ImportExport\Model\ResourceModel'],
+    ['Magento\Indexer\Model\Resource', 'Magento\Indexer\Model\ResourceModel'],
+    ['Magento\Integration\Model\Resource', 'Magento\Integration\Model\ResourceModel'],
+    ['Magento\MediaStorage\Model\Resource', 'Magento\MediaStorage\Model\ResourceModel'],
+    ['Magento\NewRelicReporting\Model\Resource', 'Magento\NewRelicReporting\Model\ResourceModel'],
+    ['Magento\Newsletter\Model\Resource', 'Magento\Newsletter\Model\ResourceModel'],
+    ['Magento\OfflineShipping\Model\Resource', 'Magento\OfflineShipping\Model\ResourceModel'],
+    ['Magento\Payment\Model\Resource', 'Magento\Payment\Model\ResourceModel'],
+    ['Magento\Paypal\Model\Resource', 'Magento\Paypal\Model\ResourceModel'],
+    ['Magento\Persistent\Model\Resource', 'Magento\Persistent\Model\ResourceModel'],
+    ['Magento\ProductAlert\Model\Resource', 'Magento\ProductAlert\Model\ResourceModel'],
+    ['Magento\Quote\Model\Resource', 'Magento\Quote\Model\ResourceModel'],
+    ['Magento\Reports\Model\Resource', 'Magento\Reports\Model\ResourceModel'],
+    ['Magento\Review\Model\Resource', 'Magento\Review\Model\ResourceModel'],
+    ['Magento\Rule\Model\Resource', 'Magento\Rule\Model\ResourceModel'],
+    ['Magento\Sales\Model\Resource', 'Magento\Sales\Model\ResourceModel'],
+    ['Magento\SalesRule\Model\Resource', 'Magento\SalesRule\Model\ResourceModel'],
+    ['Magento\SalesSequence\Model\Resource', 'Magento\SalesSequence\Model\ResourceModel'],
+    ['Magento\Search\Model\Resource', 'Magento\Search\Model\ResourceModel'],
+    ['Magento\SendFriend\Model\Resource', 'Magento\SendFriend\Model\ResourceModel'],
+    ['Magento\Shipping\Model\Resource', 'Magento\Shipping\Model\ResourceModel'],
+    ['Magento\Sitemap\Model\Resource', 'Magento\Sitemap\Model\ResourceModel'],
+    ['Magento\Store\Model\Resource', 'Magento\Store\Model\ResourceModel'],
+    ['Magento\Swatches\Model\Resource', 'Magento\Swatches\Model\ResourceModel'],
+    ['Magento\Tax\Model\Resource', 'Magento\Tax\Model\ResourceModel'],
+    ['Magento\Theme\Model\Resource', 'Magento\Theme\Model\ResourceModel'],
+    ['Magento\Translation\Model\Resource', 'Magento\Translation\Model\ResourceModel'],
+    ['Magento\Ui\Model\Resource', 'Magento\Ui\Model\ResourceModel'],
+    ['Magento\UrlRewrite\Model\Resource', 'Magento\UrlRewrite\Model\ResourceModel'],
+    ['Magento\User\Model\Resource', 'Magento\User\Model\ResourceModel'],
+    ['Magento\CatalogSearch\Test\Unit\Model\Resource', 'Magento\CatalogSearch\Test\Unit\Model\ResourceModel'],
+    ['Magento\Catalog\Test\Unit\Model\Resource', 'Magento\Catalog\Test\Unit\Model\ResourceModel'],
+    ['Magento\Cms\Test\Unit\Model\Resource', 'Magento\Cms\Test\Unit\Model\ResourceModel'],
+    [
+        'Magento\ConfigurableProduct\Test\Unit\Model\Resource',
+        'Magento\ConfigurableProduct\Test\Unit\Model\ResourceModel'
+    ],
+    [
+        'Magento\CustomerImportExport\Test\Unit\Model\Resource',
+        'Magento\CustomerImportExport\Test\Unit\Model\ResourceModel'
+    ],
+    ['Magento\Customer\Test\Unit\Model\Resource', 'Magento\Customer\Test\Unit\Model\ResourceModel'],
+    ['Magento\Directory\Test\Unit\Model\Resource', 'Magento\Directory\Test\Unit\Model\ResourceModel'],
+    ['Magento\Eav\Test\Unit\Model\Resource', 'Magento\Eav\Test\Unit\Model\ResourceModel'],
+    ['Magento\EncryptionKey\Test\Unit\Model\Resource', 'Magento\EncryptionKey\Test\Unit\Model\ResourceModel'],
+    ['Magento\ImportExport\Test\Unit\Model\Resource', 'Magento\ImportExport\Test\Unit\Model\ResourceModel'],
+    ['Magento\Indexer\Test\Unit\Model\Resource', 'Magento\Indexer\Test\Unit\Model\ResourceModel'],
+    ['Magento\Integration\Test\Unit\Model\Resource', 'Magento\Integration\Test\Unit\Model\ResourceModel'],
+    ['Magento\MediaStorage\Test\Unit\Model\Resource', 'Magento\MediaStorage\Test\Unit\Model\ResourceModel'],
+    ['Magento\Payment\Test\Unit\Model\Resource', 'Magento\Payment\Test\Unit\Model\ResourceModel'],
+    ['Magento\Quote\Test\Unit\Model\Resource', 'Magento\Quote\Test\Unit\Model\ResourceModel'],
+    ['Magento\Reports\Test\Unit\Model\Resource', 'Magento\Reports\Test\Unit\Model\ResourceModel'],
+    ['Magento\Review\Test\Unit\Model\Resource', 'Magento\Review\Test\Unit\Model\ResourceModel'],
+    ['Magento\Rule\Test\Unit\Model\Resource', 'Magento\Rule\Test\Unit\Model\ResourceModel'],
+    ['Magento\SalesRule\Test\Unit\Model\Resource', 'Magento\SalesRule\Test\Unit\Model\ResourceModel'],
+    ['Magento\SalesSequence\Test\Unit\Model\Resource', 'Magento\SalesSequence\Test\Unit\Model\ResourceModel'],
+    ['Magento\Sales\Test\Unit\Model\Resource', 'Magento\Sales\Test\Unit\Model\ResourceModel'],
+    ['Magento\Search\Test\Unit\Model\Resource', 'Magento\Search\Test\Unit\Model\ResourceModel'],
+    ['Magento\Tax\Test\Unit\Model\Resource', 'Magento\Tax\Test\Unit\Model\ResourceModel'],
+    ['Magento\Ui\Test\Unit\Model\Resource', 'Magento\Ui\Test\Unit\Model\ResourceModel'],
+    ['Magento\UrlRewrite\Test\Unit\Model\Resource', 'Magento\UrlRewrite\Test\Unit\Model\ResourceModel'],
+    ['Magento\User\Test\Unit\Model\Resource', 'Magento\User\Test\Unit\Model\ResourceModel'],
+    ['Magento\Weee\Model\Resource', 'Magento\Weee\Model\ResourceModel'],
+    ['Magento\Weee\Test\Unit\Model\Resource', 'Magento\Weee\Test\Unit\Model\ResourceModel'],
+    ['Magento\Widget\Model\Resource', 'Magento\Widget\Model\ResourceModel'],
+    ['Magento\Widget\Test\Unit\Model\Resource', 'Magento\Widget\Test\Unit\Model\ResourceModel'],
+    ['Magento\Wishlist\Model\Resource', 'Magento\Wishlist\Model\ResourceModel'],
+    ['Magento\Wishlist\Test\Unit\Model\Resource', 'Magento\Wishlist\Test\Unit\Model\ResourceModel'],
+    ['Magento\Catalog\Plugin\Model\Resource', 'Magento\Catalog\Plugin\Model\ResourceModel'],
+    ['Magento\Catalog\Test\Unit\Plugin\Model\Resource', 'Magento\Catalog\Test\Unit\Plugin\Model\ResourceModel'],
+    ['Magento\Framework\Acl\Resource', 'Magento\Framework\Acl\AclResource'],
+    ['Magento\Framework\App\Resource', 'Magento\Framework\App\ResourceConnection'],
+    ['Magento\Framework\Model\Resource', 'Magento\Framework\Model\ResourceModel'],
+    ['Magento\Framework\Model\ModelResource', 'Magento\Framework\Model\ResourceModel'],
+    ['Magento\Framework\Model\Test\Unit\Resource', 'Magento\Framework\Model\Test\Unit\ResourceModel'],
+    ['Magento\Framework\Model\Test\Unit\ModelResource', 'Magento\Framework\Model\Test\Unit\ResourceModel'],
 ];
diff --git a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php
index 1cce36c0dcb7ac49c28bf59dedf75d810dd8a4f3..43ec07e30fda487f0beff952cfe8b666b149aec3 100644
--- a/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php
+++ b/dev/tests/static/testsuite/Magento/Test/Legacy/_files/obsolete_properties.php
@@ -12,7 +12,7 @@
 
 return [
     ['_addresses', 'Magento\Customer\Model\Customer'],
-    ['_addMinimalPrice', 'Magento\Catalog\Model\Resource\Product\Collection'],
+    ['_addMinimalPrice', 'Magento\Catalog\Model\ResourceModel\Product\Collection'],
     ['_alias', 'Magento\Core\Block\AbstractBlock'],
     ['_anonSuffix'],
     ['_appMode', 'Magento\Framework\App\ObjectManager\ConfigLoader'],
@@ -29,7 +29,7 @@ return [
     ['_config', 'Magento\Core\Model\Resource\Setup'],
     ['_configModel', 'Magento\Backend\Model\Menu\AbstractDirector'],
     ['_connectionConfig', 'Magento\Core\Model\Resource\Setup'],
-    ['_connectionTypes', 'Magento\Framework\App\Resource'],
+    ['_connectionTypes', 'Magento\Framework\App\ResourceConnection'],
     ['_currencyNameTable'],
     ['_customEtcDir', 'Magento\Core\Model\Config'],
     ['_customerFactory ', '\Magento\Sales\Block\Adminhtml\Billing\Agreement\View\Tab\Info'],
@@ -38,11 +38,11 @@ return [
     ['_defaultTemplates', 'Magento\Email\Model\Template'],
     ['_designProductSettingsApplied'],
     ['_directOutput', 'Magento\Framework\View\Layout'],
-    ['_dirs', 'Magento\Framework\App\Resource'],
+    ['_dirs', 'Magento\Framework\App\ResourceConnection'],
     ['_entityInvalidatedIndexes', 'Magento\ImportExport\Model\Import'],
     ['_distroServerVars'],
     ['_entityIdsToIncrementIds'],
-    ['entities', 'Magento\Framework\App\Resource'],
+    ['entities', 'Magento\Framework\App\ResourceConnection'],
     ['_entityTypeIdsToTypes'],
     ['_factory', 'Magento\Backend\Model\Menu\Config'],
     ['_factory', 'Magento\Backend\Model\Menu\AbstractDirector', '_commandFactory'],
@@ -51,9 +51,9 @@ return [
     ['_isGoogleCheckoutLinkAdded', 'Magento\GoogleAnalytics\Model\Observer'],
     ['_isRuntimeValidated', 'Magento\Framework\ObjectManager\Config\Reader\Dom'],
     ['_itemPriceBlockTypes'],
-    ['_loadDefault', 'Magento\Store\Model\Resource\Store\Collection'],
-    ['_loadDefault', 'Magento\Store\Model\Resource\Group\Collection'],
-    ['_loadDefault', 'Magento\Store\Model\Resource\Website\Collection'],
+    ['_loadDefault', 'Magento\Store\Model\ResourceModel\Store\Collection'],
+    ['_loadDefault', 'Magento\Store\Model\ResourceModel\Group\Collection'],
+    ['_loadDefault', 'Magento\Store\Model\ResourceModel\Website\Collection'],
     ['_mapper', 'Magento\Framework\ObjectManager\Config\Reader\Dom'],
     ['_menu', 'Magento\Backend\Model\Menu\Builder'],
     ['_modulesReader', 'Magento\Framework\App\ObjectManager\ConfigLoader'],
@@ -68,7 +68,7 @@ return [
     ['_persistentCustomerGroupId'],
     ['_queriesHooked', 'Magento\Core\Model\Resource\Setup'],
     ['_quoteImporter', 'Magento\Paypal\Model\Express\Checkout'],
-    ['_ratingOptionTable', 'Magento\Review\Model\Resource\Rating\Option\Collection'],
+    ['_ratingOptionTable', 'Magento\Review\Model\ResourceModel\Rating\Option\Collection'],
     ['_readerFactory', 'Magento\Framework\App\ObjectManager\ConfigLoader'],
     ['_resourceConfig', 'Magento\Core\Model\Resource\Setup'],
     ['_saveTemplateFlag', 'Magento\Newsletter\Model\Queue'],
@@ -76,7 +76,7 @@ return [
     ['_setAttributes', 'Magento\Catalog\Model\Product\Type\AbstractType'],
     ['_skipFieldsByModel'],
     ['_ship_id'],
-    ['_shipTable', 'Magento\OfflineShipping\Model\Resource\Carrier\Tablerate\Collection'],
+    ['_shipTable', 'Magento\OfflineShipping\Model\ResourceModel\Carrier\Tablerate\Collection'],
     [
         '_showTemplateHints',
         'Magento\Framework\View\Element\Template',
@@ -102,8 +102,8 @@ return [
     ['_addressForm', 'Magento\Sales\Block\Adminhtml\Order\Create\Form\Address'],
     ['_adminhtmlAddresses', 'Magento\Sales\Block\Adminhtml\Order\Create\Form\Address'],
     ['_useAnalyticFunction'],
-    ['_defaultIndexer', 'Magento\CatalogInventory\Model\Resource\Indexer\Stock'],
-    ['_engine', 'Magento\CatalogSearch\Model\Resource\Fulltext'],
+    ['_defaultIndexer', 'Magento\CatalogInventory\Model\ResourceModel\Indexer\Stock'],
+    ['_engine', 'Magento\CatalogSearch\Model\ResourceModel\Fulltext'],
     ['_allowedAreas', 'Magento\Core\Model\Config'],
     ['_app', 'Magento\Core\Block\AbstractBlock'],
     ['_app', 'Magento\Framework\View\Element\Template'],
@@ -164,22 +164,22 @@ return [
     ['_dir', 'Magento\Core\Model\Resource\Setup\Migration'],
     ['_filesystem', 'Magento\Core\Model\Resource\Setup\Migration', '_directory'],
     ['_filesystem', 'Magento\Core\Model\Theme\Collection', '_directory'],
-    ['_mediaBaseDirectory', 'Magento\MediaStorage\Model\Resource\File\Storage\File'],
+    ['_mediaBaseDirectory', 'Magento\MediaStorage\Model\ResourceModel\File\Storage\File'],
     ['_mediaBaseDirectory', 'Magento\MediaStorage\Model\File\Storage\Database\AbstractDatabase'],
-    ['_dbHelper', 'Magento\MediaStorage\Model\Resource\File\Storage\File'],
+    ['_dbHelper', 'Magento\MediaStorage\Model\ResourceModel\File\Storage\File'],
     ['_filesystem', 'Magento\Core\Model\Theme\CopyService', '_directory'],
     ['_baseDir', 'Magento\Core\Model\Theme\Collection'],
     ['_filesystem', 'Magento\Downloadable\Controller\Adminhtml\Downloadable\File'],
     ['_dirModel', 'Magento\Downloadable\Controller\Adminhtml\Downloadable\File'],
     ['_dirModel', 'Magento\Downloadable\Model\Link'],
     ['_dirModel', 'Magento\Downloadable\Model\Sample'],
-    ['_dir', 'Magento\Framework\App\Dir'],
+    ['_dir', 'Magento\Framework\Filesystem'],
     ['_baseDir', 'Magento\Backup\Model\Fs\Collection'],
     ['_filesystem', 'Magento\Backup\Model\Fs\Collection'],
     ['_dir', 'Magento\Backup\Model\Fs\Collection'],
     ['_dir', 'Magento\Cms\Model\Wysiwyg\Images\Storage'],
     ['_dirs', 'Magento\Core\Helper\Theme'],
-    ['_dirs', 'Magento\Framework\Model\Resource\Type\Db\Pdo\Mysql'],
+    ['_dirs', 'Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql'],
     ['_filesystem', 'Magento\GiftWrapping\Model\Wrapping'],
     ['_customer', 'Magento\Backend\Model\Session\Quote'],
     ['_customerFactory', 'Magento\Backend\Model\Session\Quote'],
@@ -197,11 +197,10 @@ return [
     ['_dir', 'Magento\Install\App\Action\Plugin\Dir'],
     ['_dirs', 'Magento\Framework\View\Block\Template\Context'],
     ['_coreDir', 'Magento\Sales\Model\Order\Pdf\AbstractItems', '_rootDirectory'],
-    ['_dir', 'Magento\AdvancedCheckout\Model\Import', '_filesystem'],
     ['_dir', 'Magento\Backup\Helper\Data'],
     ['_dir', 'Magento\Backup\Model\Observer', '_filesystem'],
     ['_dir', 'Magento\Catalog\Model\Category\Attribute\Backend\Image', '_filesystem'],
-    ['_dir', 'Magento\Catalog\Model\Resource\Product\Attribute\Backend\Image', '_filesystem'],
+    ['_dir', 'Magento\Catalog\Model\ResourceModel\Product\Attribute\Backend\Image', '_filesystem'],
     ['_dir', 'Magento\CatalogEvent\ModelEvent', '_filesystem'],
     ['_dir', 'Magento\Cms\Helper\Wyiswig\Images'],
     ['_dir', 'Magento\Email\Model\Template'],
@@ -259,14 +258,14 @@ return [
     ['_catalogCategoryFlat', 'Magento\Catalog\Model\Observer'],
     ['_catalogCategoryFlat', 'Magento\Catalog\Block\Navigation'],
     ['_catalogCategoryFlat', 'Magento\Catalog\Model\Category'],
-    ['_storesRootCategories', 'Magento\Catalog\Model\Resource\Category\Flat'],
-    ['_resourceHelper', 'Magento\Catalog\Model\Resource\Category\Flat'],
-    ['_catalogCategory', 'Magento\Catalog\Model\Resource\Category\Flat'],
-    ['_isRebuilt', 'Magento\Catalog\Model\Resource\Category\Flat'],
-    ['_isBuilt', 'Magento\Catalog\Model\Resource\Category\Flat'],
-    ['_attributeCodes', 'Magento\Catalog\Model\Resource\Category\Flat'],
-    ['_columnsSql', 'Magento\Catalog\Model\Resource\Category\Flat'],
-    ['_columns', 'Magento\Catalog\Model\Resource\Category\Flat'],
+    ['_storesRootCategories', 'Magento\Catalog\Model\ResourceModel\Category\Flat'],
+    ['_resourceHelper', 'Magento\Catalog\Model\ResourceModel\Category\Flat'],
+    ['_catalogCategory', 'Magento\Catalog\Model\ResourceModel\Category\Flat'],
+    ['_isRebuilt', 'Magento\Catalog\Model\ResourceModel\Category\Flat'],
+    ['_isBuilt', 'Magento\Catalog\Model\ResourceModel\Category\Flat'],
+    ['_attributeCodes', 'Magento\Catalog\Model\ResourceModel\Category\Flat'],
+    ['_columnsSql', 'Magento\Catalog\Model\ResourceModel\Category\Flat'],
+    ['_columns', 'Magento\Catalog\Model\ResourceModel\Category\Flat'],
     ['fileIteratorFactory', 'Magento\Core\Model\Theme\Collection'],
     ['_allowDuplication', 'Magento\Framework\View\Publisher'],
     ['_modulesReader', 'Magento\Framework\View\Publisher'],
@@ -288,8 +287,8 @@ return [
     ['_eventManager', 'Magento\Framework\Translate'],
     ['_inlineFactory', 'Magento\Framework\App\Helper\Context', 'translateInline'],
     ['_inlineFactory', 'Magento\Framework\App\Helper\AbstractHelper', 'translateInline'],
-    ['_storeManager', 'Magento\Translation\Model\Resource\Translate'],
-    ['_storeManager', 'Magento\Translation\Model\Resource\StringUtils'],
+    ['_storeManager', 'Magento\Translation\Model\ResourceModel\Translate'],
+    ['_storeManager', 'Magento\Translation\Model\ResourceModel\StringUtils'],
     ['_translator', 'Magento\Framework\Phrase\Renderer\Translate', 'translator'],
     ['_translator', 'Magento\Core\Model\Validator\Factory'],
     ['_configFactory', 'Magento\Core\Model\App\Emulation', 'inlineConfig'],
@@ -313,7 +312,6 @@ return [
     ['_tierPriceDefaultTemplate', 'Magento\Catalog\Block\Product\AbstractProduct'],
     ['_mimeTypes', 'Magento\Framework\File\Transfer\Adapter\Http', '\Magento\Framework\File\Mime::$mimeTypes'],
     ['_viewFileResolution', 'Magento\Framework\View\FileSystem', '_fileResolution, _localeFileResolution'],
-    ['_inventoryModel', 'Magento\AdvancedCheckout\Model\Resource\Sku\Errors\Grid\Collection'],
     ['_productInstance', 'Magento\CatalogInventory\Model\Stock\Item'],
     ['_scopeConfig', 'Magento\CatalogInventory\Helper\Minsaleqty', 'scopeConfig'],
     ['_stopFurtherRules', 'Magento\SalesRule\Model\Validator'],
@@ -341,7 +339,7 @@ return [
     ['_formKeyValidator', 'Magento\Customer\Controller\Account\LoginPost', 'Magento\Customer\Controller\Account\LoginPost::formKeyValidator'],
     ['_openActions', 'Magento\Customer\Controller\Account', 'Magento\Customer\Controller\Account::openActions'],
     ['_session', 'Magento\Customer\Controller\Account', 'Magento\Customer\Controller\Account::session'],
-    ['_cache', 'Magento\Framework\App\Magento\Framework\App\Resource', 'Magento\Framework\App\Resource\ConnectionFactory'],
+    ['_cache', 'Magento\Framework\App\Magento\Framework\App\ResourceConnection', 'Magento\Framework\App\ResourceConnection\ConnectionFactory'],
     ['_debug', 'Magento\Framework\DB\Adapter\Pdo\Mysql', 'logger'],
     ['_logQueryTime', 'Magento\Framework\DB\Adapter\Pdo\Mysql', 'Magento\Framework\DB\Logger\LoggerAbstract'],
     ['_logAllQueries', 'Magento\Framework\DB\Adapter\Pdo\Mysql', 'Magento\Framework\DB\Logger\LoggerAbstract'],
@@ -364,7 +362,7 @@ return [
     ['_conditionModels', 'Magento\Rule\Model\Condition\Combine'],
     ['_lables', 'Magento\SalesRule\Model\Rule'],
     ['_catalogData', 'Magento\Catalog\Block\Product\AbstractProduct'],
-    ['_env', 'Magento\Rule\Model\Resource\Rule\Collection\AbstractCollection'],
+    ['_env', 'Magento\Rule\Model\ResourceModel\Rule\Collection\AbstractCollection'],
     ['_catalogImage', 'Magento\Catalog\Model\Product'],
     ['_view', 'Magento\Cms\Helper\Page'],
     ['aclFilter', 'Magento\Backend\Model\View\Layout\Builder'],
diff --git a/lib/internal/Magento/Framework/Acl/Resource.php b/lib/internal/Magento/Framework/Acl/AclResource.php
similarity index 78%
rename from lib/internal/Magento/Framework/Acl/Resource.php
rename to lib/internal/Magento/Framework/Acl/AclResource.php
index 08a53e0c22fe9b9ea944b3acdd44a5d6a62f8424..8ae272bc1944a0de19d4cf04334baab8f8bfee3b 100644
--- a/lib/internal/Magento/Framework/Acl/Resource.php
+++ b/lib/internal/Magento/Framework/Acl/AclResource.php
@@ -9,6 +9,6 @@
  */
 namespace Magento\Framework\Acl;
 
-class Resource extends \Zend_Acl_Resource
+class AclResource extends \Zend_Acl_Resource
 {
 }
diff --git a/lib/internal/Magento/Framework/Acl/Resource/Config/Converter/Dom.php b/lib/internal/Magento/Framework/Acl/AclResource/Config/Converter/Dom.php
similarity index 97%
rename from lib/internal/Magento/Framework/Acl/Resource/Config/Converter/Dom.php
rename to lib/internal/Magento/Framework/Acl/AclResource/Config/Converter/Dom.php
index 69bc94912026e3e70a7c1b9de60bbad6c46dcbe0..8a3a2f54b970516d8975e7fa186dc5ad9e271f91 100644
--- a/lib/internal/Magento/Framework/Acl/Resource/Config/Converter/Dom.php
+++ b/lib/internal/Magento/Framework/Acl/AclResource/Config/Converter/Dom.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Acl\Resource\Config\Converter;
+namespace Magento\Framework\Acl\AclResource\Config\Converter;
 
 class Dom implements \Magento\Framework\Config\ConverterInterface
 {
diff --git a/lib/internal/Magento/Framework/Acl/Resource/Config/Reader/Filesystem.php b/lib/internal/Magento/Framework/Acl/AclResource/Config/Reader/Filesystem.php
similarity index 86%
rename from lib/internal/Magento/Framework/Acl/Resource/Config/Reader/Filesystem.php
rename to lib/internal/Magento/Framework/Acl/AclResource/Config/Reader/Filesystem.php
index d13161fb3ce3d0912f8dba62f697dcd3808d4dd9..9c61d0ac2128ba857f249e810b0a77a4451cd335 100644
--- a/lib/internal/Magento/Framework/Acl/Resource/Config/Reader/Filesystem.php
+++ b/lib/internal/Magento/Framework/Acl/AclResource/Config/Reader/Filesystem.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Acl\Resource\Config\Reader;
+namespace Magento\Framework\Acl\AclResource\Config\Reader;
 
 class Filesystem extends \Magento\Framework\Config\Reader\Filesystem
 {
@@ -17,7 +17,7 @@ class Filesystem extends \Magento\Framework\Config\Reader\Filesystem
     /**
      * @param \Magento\Framework\Config\FileResolverInterface $fileResolver
      * @param \Magento\Framework\Config\ConverterInterface $converter
-     * @param \Magento\Framework\Acl\Resource\Config\SchemaLocator $schemaLocator
+     * @param \Magento\Framework\Acl\AclResource\Config\SchemaLocator $schemaLocator
      * @param \Magento\Framework\Config\ValidationStateInterface $validationState
      * @param string $fileName
      * @param array $idAttributes
@@ -27,7 +27,7 @@ class Filesystem extends \Magento\Framework\Config\Reader\Filesystem
     public function __construct(
         \Magento\Framework\Config\FileResolverInterface $fileResolver,
         \Magento\Framework\Config\ConverterInterface $converter,
-        \Magento\Framework\Acl\Resource\Config\SchemaLocator $schemaLocator,
+        \Magento\Framework\Acl\AclResource\Config\SchemaLocator $schemaLocator,
         \Magento\Framework\Config\ValidationStateInterface $validationState,
         $fileName = 'acl.xml',
         $idAttributes = [],
diff --git a/lib/internal/Magento/Framework/Acl/Resource/Config/SchemaLocator.php b/lib/internal/Magento/Framework/Acl/AclResource/Config/SchemaLocator.php
similarity index 94%
rename from lib/internal/Magento/Framework/Acl/Resource/Config/SchemaLocator.php
rename to lib/internal/Magento/Framework/Acl/AclResource/Config/SchemaLocator.php
index b431fc1c8159ff56faaa9c24dce4d48b15753805..372f82d71d29ddc8e3ce465e3036c7dae6f814a4 100644
--- a/lib/internal/Magento/Framework/Acl/Resource/Config/SchemaLocator.php
+++ b/lib/internal/Magento/Framework/Acl/AclResource/Config/SchemaLocator.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Acl\Resource\Config;
+namespace Magento\Framework\Acl\AclResource\Config;
 
 class SchemaLocator implements \Magento\Framework\Config\SchemaLocatorInterface
 {
diff --git a/lib/internal/Magento/Framework/Acl/Resource/Provider.php b/lib/internal/Magento/Framework/Acl/AclResource/Provider.php
similarity index 96%
rename from lib/internal/Magento/Framework/Acl/Resource/Provider.php
rename to lib/internal/Magento/Framework/Acl/AclResource/Provider.php
index c85b13805249a09920baacc9f81b394d09324074..446cecc8fe8f683699acfc6ba7f37d954591f07e 100644
--- a/lib/internal/Magento/Framework/Acl/Resource/Provider.php
+++ b/lib/internal/Magento/Framework/Acl/AclResource/Provider.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Acl\Resource;
+namespace Magento\Framework\Acl\AclResource;
 
 class Provider implements ProviderInterface
 {
diff --git a/lib/internal/Magento/Framework/Acl/Resource/ProviderInterface.php b/lib/internal/Magento/Framework/Acl/AclResource/ProviderInterface.php
similarity index 87%
rename from lib/internal/Magento/Framework/Acl/Resource/ProviderInterface.php
rename to lib/internal/Magento/Framework/Acl/AclResource/ProviderInterface.php
index 3a13f86551c8b172972cfe530984c0d82e53b344..1fdc34bf7df30305f123e0f63ba86f409df1ddfd 100644
--- a/lib/internal/Magento/Framework/Acl/Resource/ProviderInterface.php
+++ b/lib/internal/Magento/Framework/Acl/AclResource/ProviderInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Acl\Resource;
+namespace Magento\Framework\Acl\AclResource;
 
 /**
  * Acl resources provider interface
diff --git a/lib/internal/Magento/Framework/Acl/Resource/TreeBuilder.php b/lib/internal/Magento/Framework/Acl/AclResource/TreeBuilder.php
similarity index 95%
rename from lib/internal/Magento/Framework/Acl/Resource/TreeBuilder.php
rename to lib/internal/Magento/Framework/Acl/AclResource/TreeBuilder.php
index 09fc92c3359e6dc65d91d8a694576b2a82fe8847..ed4e75d7b663a2035d23a0950a8fd84bf9c521f5 100644
--- a/lib/internal/Magento/Framework/Acl/Resource/TreeBuilder.php
+++ b/lib/internal/Magento/Framework/Acl/AclResource/TreeBuilder.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Acl\Resource;
+namespace Magento\Framework\Acl\AclResource;
 
 class TreeBuilder
 {
diff --git a/lib/internal/Magento/Framework/Acl/ResourceFactory.php b/lib/internal/Magento/Framework/Acl/AclResourceFactory.php
similarity index 86%
rename from lib/internal/Magento/Framework/Acl/ResourceFactory.php
rename to lib/internal/Magento/Framework/Acl/AclResourceFactory.php
index 2cbc28591d7433b4e3a15597e73fdbe5def2417a..bd8d1d476e1abc90b9ba59a4995d3697b45459d2 100644
--- a/lib/internal/Magento/Framework/Acl/ResourceFactory.php
+++ b/lib/internal/Magento/Framework/Acl/AclResourceFactory.php
@@ -9,9 +9,9 @@ namespace Magento\Framework\Acl;
 
 use Magento\Framework\ObjectManagerInterface;
 
-class ResourceFactory
+class AclResourceFactory
 {
-    const RESOURCE_CLASS_NAME = 'Magento\Framework\Acl\Resource';
+    const RESOURCE_CLASS_NAME = 'Magento\Framework\Acl\AclResource';
 
     /**
      * @var ObjectManagerInterface
@@ -30,7 +30,7 @@ class ResourceFactory
      * Return new ACL resource model
      *
      * @param array $arguments
-     * @return Resource
+     * @return AclResource
      */
     public function createResource(array $arguments = [])
     {
diff --git a/lib/internal/Magento/Framework/Acl/Loader/Resource.php b/lib/internal/Magento/Framework/Acl/Loader/ResourceLoader.php
similarity index 83%
rename from lib/internal/Magento/Framework/Acl/Loader/Resource.php
rename to lib/internal/Magento/Framework/Acl/Loader/ResourceLoader.php
index dcdfe97ca41eb2f185827969a9be08a8f92b3d02..577f2698fd3ea38d5a1f8256842300c1fc4f6ff3 100644
--- a/lib/internal/Magento/Framework/Acl/Loader/Resource.php
+++ b/lib/internal/Magento/Framework/Acl/Loader/ResourceLoader.php
@@ -8,11 +8,11 @@
 namespace Magento\Framework\Acl\Loader;
 
 use Magento\Framework\Acl;
-use Magento\Framework\Acl\Resource as AclResource;
-use Magento\Framework\Acl\Resource\ProviderInterface;
-use Magento\Framework\Acl\ResourceFactory;
+use Magento\Framework\Acl\AclResource as AclResource;
+use Magento\Framework\Acl\AclResource\ProviderInterface;
+use Magento\Framework\Acl\AclResourceFactory;
 
-class Resource implements \Magento\Framework\Acl\LoaderInterface
+class ResourceLoader implements \Magento\Framework\Acl\LoaderInterface
 {
     /**
      * Acl resource config
@@ -24,15 +24,15 @@ class Resource implements \Magento\Framework\Acl\LoaderInterface
     /**
      * Resource factory
      *
-     * @var ResourceFactory
+     * @var AclResourceFactory
      */
     protected $_resourceFactory;
 
     /**
      * @param ProviderInterface $resourceProvider
-     * @param ResourceFactory $resourceFactory
+     * @param AclResourceFactory $resourceFactory
      */
-    public function __construct(ProviderInterface $resourceProvider, ResourceFactory $resourceFactory)
+    public function __construct(ProviderInterface $resourceProvider, AclResourceFactory $resourceFactory)
     {
         $this->_resourceProvider = $resourceProvider;
         $this->_resourceFactory = $resourceFactory;
diff --git a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/Converter/DomTest.php b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/Converter/DomTest.php
similarity index 86%
rename from lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/Converter/DomTest.php
rename to lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/Converter/DomTest.php
index 4198fdfac3365b0926dbde3db82957bb30899823..140a650f06a228d8eb00d01ab8b2a330f8921353 100644
--- a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/Converter/DomTest.php
+++ b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/Converter/DomTest.php
@@ -3,18 +3,18 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Acl\Test\Unit\Resource\Config\Converter;
+namespace Magento\Framework\Acl\Test\Unit\AclResource\Config\Converter;
 
 class DomTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Acl\Resource\Config\Converter\Dom
+     * @var \Magento\Framework\Acl\AclResource\Config\Converter\Dom
      */
     protected $_converter;
 
     protected function setUp()
     {
-        $this->_converter = new \Magento\Framework\Acl\Resource\Config\Converter\Dom();
+        $this->_converter = new \Magento\Framework\Acl\AclResource\Config\Converter\Dom();
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/Converter/_files/converted_valid_acl.php b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/Converter/_files/converted_valid_acl.php
similarity index 100%
rename from lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/Converter/_files/converted_valid_acl.php
rename to lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/Converter/_files/converted_valid_acl.php
diff --git a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/Converter/_files/valid_acl.xml b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/Converter/_files/valid_acl.xml
similarity index 100%
rename from lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/Converter/_files/valid_acl.xml
rename to lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/Converter/_files/valid_acl.xml
diff --git a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/SchemaLocatorTest.php b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/SchemaLocatorTest.php
similarity index 84%
rename from lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/SchemaLocatorTest.php
rename to lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/SchemaLocatorTest.php
index 04194883e292efafc0e3da9122d610d7a013fd17..7f6df961314b401d7ff0cb7a6e1134c3a8209ebc 100644
--- a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/SchemaLocatorTest.php
+++ b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/SchemaLocatorTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Acl\Test\Unit\Resource\Config;
+namespace Magento\Framework\Acl\Test\Unit\AclResource\Config;
 
 class SchemaLocatorTest extends \PHPUnit_Framework_TestCase
 {
@@ -16,7 +16,7 @@ class SchemaLocatorTest extends \PHPUnit_Framework_TestCase
             ->method('getRealPath')
             ->with('urn:magento:framework:Acl/etc/acl.xsd')
             ->willReturn($urnResolver->getRealPath('urn:magento:framework:Acl/etc/acl.xsd'));
-        $schemaLocator = new \Magento\Framework\Acl\Resource\Config\SchemaLocator($urnResolverMock);
+        $schemaLocator = new \Magento\Framework\Acl\AclResource\Config\SchemaLocator($urnResolverMock);
         $this->assertEquals(
             $urnResolver->getRealPath('urn:magento:framework:Acl/etc/acl.xsd'),
             $schemaLocator->getSchema()
diff --git a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/XsdTest.php b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/XsdTest.php
similarity index 87%
rename from lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/XsdTest.php
rename to lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/XsdTest.php
index 13d8ee4e086eb7da4592e761606614fe6b1bba05..03bf1458842874f89d7a292468ced2271b6189a6 100644
--- a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/XsdTest.php
+++ b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/XsdTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Acl\Test\Unit\Resource\Config;
+namespace Magento\Framework\Acl\Test\Unit\AclResource\Config;
 
 class XsdTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Acl\Resource\Config\SchemaLocator
+     * @var \Magento\Framework\Acl\AclResource\Config\SchemaLocator
      */
     protected $_schemaLocator;
 
@@ -25,7 +25,7 @@ class XsdTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_schemaLocator = new \Magento\Framework\Acl\Resource\Config\SchemaLocator(
+        $this->_schemaLocator = new \Magento\Framework\Acl\AclResource\Config\SchemaLocator(
             new \Magento\Framework\Config\Dom\UrnResolver()
         );
         $this->_xsdSchema = $this->_schemaLocator->getSchema();
diff --git a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/_files/invalidAclXmlArray.php b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/_files/invalidAclXmlArray.php
similarity index 100%
rename from lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/_files/invalidAclXmlArray.php
rename to lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/_files/invalidAclXmlArray.php
diff --git a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/_files/valid_acl.xml b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/_files/valid_acl.xml
similarity index 100%
rename from lib/internal/Magento/Framework/Acl/Test/Unit/Resource/Config/_files/valid_acl.xml
rename to lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/Config/_files/valid_acl.xml
diff --git a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/ProviderTest.php b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/ProviderTest.php
similarity index 81%
rename from lib/internal/Magento/Framework/Acl/Test/Unit/Resource/ProviderTest.php
rename to lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/ProviderTest.php
index 2274f27c5c03c277b33687d3419dbee2ca02f277..d50e3ad0f50e96e68202724cce3bd4f0b1dd781c 100644
--- a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/ProviderTest.php
+++ b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/ProviderTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Acl\Test\Unit\Resource;
+namespace Magento\Framework\Acl\Test\Unit\AclResource;
 
 class ProviderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Acl\Resource\Provider
+     * @var \Magento\Framework\Acl\AclResource\Provider
      */
     protected $_model;
 
@@ -26,13 +26,16 @@ class ProviderTest extends \PHPUnit_Framework_TestCase
     {
         $this->_configReaderMock = $this->getMock('Magento\Framework\Config\ReaderInterface');
         $this->_treeBuilderMock = $this->getMock(
-            'Magento\Framework\Acl\Resource\TreeBuilder',
+            'Magento\Framework\Acl\AclResource\TreeBuilder',
             [],
             [],
             '',
             false
         );
-        $this->_model = new \Magento\Framework\Acl\Resource\Provider($this->_configReaderMock, $this->_treeBuilderMock);
+        $this->_model = new \Magento\Framework\Acl\AclResource\Provider(
+            $this->_configReaderMock,
+            $this->_treeBuilderMock
+        );
     }
 
     public function testGetIfAclResourcesExist()
diff --git a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/TreeBuilderTest.php b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/TreeBuilderTest.php
similarity index 78%
rename from lib/internal/Magento/Framework/Acl/Test/Unit/Resource/TreeBuilderTest.php
rename to lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/TreeBuilderTest.php
index 967ef2b9014f5b8891200ac32c5f42fd81a08c04..4c3f176766a566d3c5e447e2ce362d93e33bfae4 100644
--- a/lib/internal/Magento/Framework/Acl/Test/Unit/Resource/TreeBuilderTest.php
+++ b/lib/internal/Magento/Framework/Acl/Test/Unit/AclResource/TreeBuilderTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Acl\Test\Unit\Resource;
+namespace Magento\Framework\Acl\Test\Unit\AclResource;
 
 class TreeBuilderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Acl\Resource\TreeBuilder
+     * @var \Magento\Framework\Acl\AclResource\TreeBuilder
      */
     protected $_model;
 
@@ -21,7 +21,7 @@ class TreeBuilderTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->_model = new \Magento\Framework\Acl\Resource\TreeBuilder();
+        $this->_model = new \Magento\Framework\Acl\AclResource\TreeBuilder();
         $this->_fixturePath = realpath(__DIR__ . '/../') . '/_files/';
     }
 
diff --git a/lib/internal/Magento/Framework/Acl/Test/Unit/Loader/ResourceTest.php b/lib/internal/Magento/Framework/Acl/Test/Unit/Loader/ResourceLoaderTest.php
similarity index 77%
rename from lib/internal/Magento/Framework/Acl/Test/Unit/Loader/ResourceTest.php
rename to lib/internal/Magento/Framework/Acl/Test/Unit/Loader/ResourceLoaderTest.php
index 14551a7194e42c016184462ec0e8d9a0c88ace10..acfe0eedb24fcfa6cdf76a2c1f32ad8557aa1807 100644
--- a/lib/internal/Magento/Framework/Acl/Test/Unit/Loader/ResourceTest.php
+++ b/lib/internal/Magento/Framework/Acl/Test/Unit/Loader/ResourceLoaderTest.php
@@ -1,21 +1,21 @@
 <?php
 /**
- * Test for \Magento\Framework\Acl\Loader\Resource
+ * Test for \Magento\Framework\Acl\Loader\ResourceLoader
  *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
 namespace Magento\Framework\Acl\Test\Unit\Loader;
 
-class ResourceTest extends \PHPUnit_Framework_TestCase
+class ResourceLoaderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * Test for \Magento\Framework\Acl\Loader\Resource::populateAcl
+     * Test for \Magento\Framework\Acl\Loader\ResourceLoader::populateAcl
      */
     public function testPopulateAclOnValidObjects()
     {
-        /** @var $aclResource \Magento\Framework\Acl\Resource */
-        $aclResource = $this->getMock('Magento\Framework\Acl\Resource', [], [], '', false);
+        /** @var $aclResource \Magento\Framework\Acl\AclResource */
+        $aclResource = $this->getMock('Magento\Framework\Acl\AclResource', [], [], '', false);
 
         /** @var $acl \Magento\Framework\Acl */
         $acl = $this->getMock('Magento\Framework\Acl', ['addResource'], [], '', false);
@@ -24,7 +24,7 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
         $acl->expects($this->at(1))->method('addResource')->with($aclResource, $aclResource)->will($this->returnSelf());
 
         $factoryObject = $this->getMock(
-            'Magento\Framework\Acl\ResourceFactory',
+            'Magento\Framework\Acl\AclResourceFactory',
             ['createResource'],
             [],
             '',
@@ -32,8 +32,8 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
         );
         $factoryObject->expects($this->any())->method('createResource')->will($this->returnValue($aclResource));
 
-        /** @var $resourceProvider \Magento\Framework\Acl\Resource\ProviderInterface */
-        $resourceProvider = $this->getMock('Magento\Framework\Acl\Resource\ProviderInterface');
+        /** @var $resourceProvider \Magento\Framework\Acl\AclResource\ProviderInterface */
+        $resourceProvider = $this->getMock('Magento\Framework\Acl\AclResource\ProviderInterface');
         $resourceProvider->expects($this->once())
             ->method('getAclResources')
             ->will(
@@ -56,32 +56,32 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
                 )
             );
 
-        /** @var $loaderResource \Magento\Framework\Acl\Loader\Resource */
-        $loaderResource = new \Magento\Framework\Acl\Loader\Resource($resourceProvider, $factoryObject);
+        /** @var $loaderResource \Magento\Framework\Acl\Loader\ResourceLoader */
+        $loaderResource = new \Magento\Framework\Acl\Loader\ResourceLoader($resourceProvider, $factoryObject);
 
         $loaderResource->populateAcl($acl);
     }
 
     /**
-     * Test for \Magento\Framework\Acl\Loader\Resource::populateAcl
+     * Test for \Magento\Framework\Acl\Loader\ResourceLoader::populateAcl
      *
      * @expectedException \InvalidArgumentException
      * @expectedExceptionMessage Missing ACL resource identifier
      */
     public function testPopulateAclWithException()
     {
-        /** @var $aclResource \Magento\Framework\Acl\Resource */
-        $aclResource = $this->getMock('Magento\Framework\Acl\Resource', [], [], '', false);
+        /** @var $aclResource \Magento\Framework\Acl\AclResource */
+        $aclResource = $this->getMock('Magento\Framework\Acl\AclResource', [], [], '', false);
 
-        $factoryObject = $this->getMockBuilder('Magento\Framework\Acl\ResourceFactory')
+        $factoryObject = $this->getMockBuilder('Magento\Framework\Acl\AclResourceFactory')
             ->setMethods(['createResource'])
             ->disableOriginalConstructor()
             ->getMock();
 
         $factoryObject->expects($this->any())->method('createResource')->will($this->returnValue($aclResource));
 
-        /** @var $resourceProvider \Magento\Framework\Acl\Resource\ProviderInterface */
-        $resourceProvider = $this->getMock('Magento\Framework\Acl\Resource\ProviderInterface');
+        /** @var $resourceProvider \Magento\Framework\Acl\AclResource\ProviderInterface */
+        $resourceProvider = $this->getMock('Magento\Framework\Acl\AclResource\ProviderInterface');
         $resourceProvider->expects($this->once())
             ->method('getAclResources')
             ->will(
@@ -106,8 +106,8 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
         /** @var $acl \Magento\Framework\Acl */
         $acl = $this->getMock('Magento\Framework\Acl', ['addResource'], [], '', false);
 
-        /** @var $loaderResource \Magento\Framework\Acl\Loader\Resource */
-        $loaderResource = new \Magento\Framework\Acl\Loader\Resource($resourceProvider, $factoryObject);
+        /** @var $loaderResource \Magento\Framework\Acl\Loader\ResourceLoader */
+        $loaderResource = new \Magento\Framework\Acl\Loader\ResourceLoader($resourceProvider, $factoryObject);
 
         $loaderResource->populateAcl($acl);
     }
diff --git a/lib/internal/Magento/Framework/Acl/Test/Unit/ResourceFactoryTest.php b/lib/internal/Magento/Framework/Acl/Test/Unit/ResourceFactoryTest.php
index 43330df8b202bc65b697ed4196c76643ae53c5a6..6f54b63390f82fbf868d2db2bc28d16b3726fd22 100644
--- a/lib/internal/Magento/Framework/Acl/Test/Unit/ResourceFactoryTest.php
+++ b/lib/internal/Magento/Framework/Acl/Test/Unit/ResourceFactoryTest.php
@@ -1,6 +1,6 @@
 <?php
 /**
- * Test class for \Magento\Framework\Acl\ResourceFactory
+ * Test class for \Magento\Framework\Acl\AclResourceFactory
  *
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
@@ -10,7 +10,7 @@ namespace Magento\Framework\Acl\Test\Unit;
 class ResourceFactoryTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Acl\ResourceFactory
+     * @var \Magento\Framework\Acl\AclResourceFactory
      */
     protected $_model;
 
@@ -20,7 +20,7 @@ class ResourceFactoryTest extends \PHPUnit_Framework_TestCase
     protected $_objectManager;
 
     /**
-     * @var \Magento\Framework\Acl\Resource
+     * @var \Magento\Framework\Acl\AclResource
      */
     protected $_expectedObject;
 
@@ -30,10 +30,10 @@ class ResourceFactoryTest extends \PHPUnit_Framework_TestCase
 
         $this->_objectManager = $this->getMock('Magento\Framework\ObjectManagerInterface');
 
-        $this->_expectedObject = $this->getMock('Magento\Framework\Acl\Resource', [], [], '', false);
+        $this->_expectedObject = $this->getMock('Magento\Framework\Acl\AclResource', [], [], '', false);
 
         $this->_model = $helper->getObject(
-            'Magento\Framework\Acl\ResourceFactory',
+            'Magento\Framework\Acl\AclResourceFactory',
             ['objectManager' => $this->_objectManager]
         );
     }
@@ -46,7 +46,7 @@ class ResourceFactoryTest extends \PHPUnit_Framework_TestCase
         )->method(
             'create'
         )->with(
-            'Magento\Framework\Acl\Resource',
+            'Magento\Framework\Acl\AclResource',
             $arguments
         )->will(
             $this->returnValue($this->_expectedObject)
diff --git a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php
index 0265b6342ab449fac95a9037e1b2a06d7901e4ee..acbc463380d5292bab9de0851a1328ef4cebe3d3 100644
--- a/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php
+++ b/lib/internal/Magento/Framework/Api/Test/Unit/Code/Generator/EntityChildTestAbstract.php
@@ -126,7 +126,7 @@ abstract class EntityChildTestAbstract extends \PHPUnit_Framework_TestCase
     protected function mockDefinedClassesCall()
     {
         $this->definedClassesMock->expects($this->at(0))
-            ->method('classLoadable')
+            ->method('isClassLoadable')
             ->with($this->getSourceClassName())
             ->willReturn(true);
     }
diff --git a/lib/internal/Magento/Framework/App/Cache/Frontend/Factory.php b/lib/internal/Magento/Framework/App/Cache/Frontend/Factory.php
index 5f48c269ec9a889d2a3ff0fcd72c0fef788baccb..110ca909562097749817a7241ef3243a3241c35e 100644
--- a/lib/internal/Magento/Framework/App/Cache/Frontend/Factory.php
+++ b/lib/internal/Magento/Framework/App/Cache/Frontend/Factory.php
@@ -10,7 +10,7 @@
 namespace Magento\Framework\App\Cache\Frontend;
 
 use Magento\Framework\App\Filesystem\DirectoryList;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Filesystem;
 use Magento\Framework\Filesystem\DriverInterface;
 
@@ -74,21 +74,21 @@ class Factory
     /**
      * Resource
      *
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
     /**
      * @param \Magento\Framework\ObjectManagerInterface $objectManager
      * @param Filesystem $filesystem
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param array $enforcedOptions
      * @param array $decorators
      */
     public function __construct(
         \Magento\Framework\ObjectManagerInterface $objectManager,
         Filesystem $filesystem,
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         array $enforcedOptions = [],
         array $decorators = []
     ) {
diff --git a/lib/internal/Magento/Framework/App/Config/Resource/ConfigInterface.php b/lib/internal/Magento/Framework/App/Config/ConfigResource/ConfigInterface.php
similarity index 92%
rename from lib/internal/Magento/Framework/App/Config/Resource/ConfigInterface.php
rename to lib/internal/Magento/Framework/App/Config/ConfigResource/ConfigInterface.php
index 8084c21ab0d9cd26be2319dd9cfad4e00992dae7..eac15a5e8fff2a9dac20c0bcbfa95577f3de0354 100644
--- a/lib/internal/Magento/Framework/App/Config/Resource/ConfigInterface.php
+++ b/lib/internal/Magento/Framework/App/Config/ConfigResource/ConfigInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Config\Resource;
+namespace Magento\Framework\App\Config\ConfigResource;
 
 /**
  * Resource for storing store configuration values
diff --git a/lib/internal/Magento/Framework/App/Config/Storage/Writer.php b/lib/internal/Magento/Framework/App/Config/Storage/Writer.php
index 63b5ae83dfec68c85f61ebf17ae11396b485373e..b3f66fb6f403bbabc9d6aa90068e4df30ead9676 100644
--- a/lib/internal/Magento/Framework/App/Config/Storage/Writer.php
+++ b/lib/internal/Magento/Framework/App/Config/Storage/Writer.php
@@ -14,14 +14,14 @@ class Writer implements \Magento\Framework\App\Config\Storage\WriterInterface
     /**
      * Resource model of config data
      *
-     * @var \Magento\Framework\App\Config\Resource\ConfigInterface
+     * @var \Magento\Framework\App\Config\ConfigResource\ConfigInterface
      */
     protected $_resource;
 
     /**
-     * @param \Magento\Framework\App\Config\Resource\ConfigInterface $resource
+     * @param \Magento\Framework\App\Config\ConfigResource\ConfigInterface $resource
      */
-    public function __construct(\Magento\Framework\App\Config\Resource\ConfigInterface $resource)
+    public function __construct(\Magento\Framework\App\Config\ConfigResource\ConfigInterface $resource)
     {
         $this->_resource = $resource;
     }
diff --git a/lib/internal/Magento/Framework/App/Config/Value.php b/lib/internal/Magento/Framework/App/Config/Value.php
index 3794adae384f4a5e101d2aab75f64ecc6e355c66..ddfb123d637f099d8215a2e5f698e910de1016a6 100644
--- a/lib/internal/Magento/Framework/App/Config/Value.php
+++ b/lib/internal/Magento/Framework/App/Config/Value.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\App\Config;
 /**
  * Config data model
  *
- * @method \Magento\Framework\Model\Resource\Db\AbstractDb getResource()
+ * @method \Magento\Framework\Model\ResourceModel\Db\AbstractDb getResource()
  * @method string getScope()
  * @method \Magento\Framework\App\Config\ValueInterface setScope(string $value)
  * @method int getScopeId()
@@ -46,7 +46,7 @@ class Value extends \Magento\Framework\Model\AbstractModel implements \Magento\F
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\App\Config\ScopeConfigInterface $config
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -54,7 +54,7 @@ class Value extends \Magento\Framework\Model\AbstractModel implements \Magento\F
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
         \Magento\Framework\App\Config\ScopeConfigInterface $config,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/lib/internal/Magento/Framework/App/Resource.php b/lib/internal/Magento/Framework/App/ResourceConnection.php
similarity index 97%
rename from lib/internal/Magento/Framework/App/Resource.php
rename to lib/internal/Magento/Framework/App/ResourceConnection.php
index ffa6d2af4781e4b7e63ebf71547f9f84836d7df7..56d220ebb57f48d0b45f8fa60fd40801c83c01e7 100644
--- a/lib/internal/Magento/Framework/App/Resource.php
+++ b/lib/internal/Magento/Framework/App/ResourceConnection.php
@@ -8,11 +8,11 @@
 namespace Magento\Framework\App;
 
 use Magento\Framework\App\DeploymentConfig;
-use Magento\Framework\App\Resource\ConfigInterface as ResourceConfigInterface;
-use Magento\Framework\Model\Resource\Type\Db\ConnectionFactoryInterface;
+use Magento\Framework\App\ResourceConnection\ConfigInterface as ResourceConfigInterface;
+use Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactoryInterface;
 use Magento\Framework\Config\ConfigOptionsListConstants;
 
-class Resource
+class ResourceConnection
 {
     const AUTO_UPDATE_ONCE = 0;
 
diff --git a/lib/internal/Magento/Framework/App/Resource/Config.php b/lib/internal/Magento/Framework/App/ResourceConnection/Config.php
similarity index 95%
rename from lib/internal/Magento/Framework/App/Resource/Config.php
rename to lib/internal/Magento/Framework/App/ResourceConnection/Config.php
index 561718c5a664360544782d7a94321f509aca9ffe..8a2683ff57f6d33abce89db87510fcdcc5c18573 100644
--- a/lib/internal/Magento/Framework/App/Resource/Config.php
+++ b/lib/internal/Magento/Framework/App/ResourceConnection/Config.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Resource;
+namespace Magento\Framework\App\ResourceConnection;
 
 use Magento\Framework\Config\ConfigOptionsListConstants;
 
@@ -52,7 +52,7 @@ class Config extends \Magento\Framework\Config\Data\Scoped implements ConfigInte
      */
     public function getConnectionName($resourceName)
     {
-        $connectionName = \Magento\Framework\App\Resource::DEFAULT_CONNECTION;
+        $connectionName = \Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION;
 
         $resourceName = preg_replace("/_setup$/", '', $resourceName);
 
diff --git a/lib/internal/Magento/Framework/App/Resource/Config/Converter.php b/lib/internal/Magento/Framework/App/ResourceConnection/Config/Converter.php
similarity index 94%
rename from lib/internal/Magento/Framework/App/Resource/Config/Converter.php
rename to lib/internal/Magento/Framework/App/ResourceConnection/Config/Converter.php
index 8341ed7c50ace34952594051ad81251415505052..b2bc6e7101c5c62cfcb30d31100ae62b5bb2d163 100644
--- a/lib/internal/Magento/Framework/App/Resource/Config/Converter.php
+++ b/lib/internal/Magento/Framework/App/ResourceConnection/Config/Converter.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Resource\Config;
+namespace Magento\Framework\App\ResourceConnection\Config;
 
 class Converter implements \Magento\Framework\Config\ConverterInterface
 {
diff --git a/lib/internal/Magento/Framework/App/Resource/Config/Reader.php b/lib/internal/Magento/Framework/App/ResourceConnection/Config/Reader.php
similarity index 96%
rename from lib/internal/Magento/Framework/App/Resource/Config/Reader.php
rename to lib/internal/Magento/Framework/App/ResourceConnection/Config/Reader.php
index d3b9dba00a11f560b32ce79720e75140eb753e16..094af55c19d665dbc5fb6cc404f7a67ad159ea58 100644
--- a/lib/internal/Magento/Framework/App/Resource/Config/Reader.php
+++ b/lib/internal/Magento/Framework/App/ResourceConnection/Config/Reader.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Resource\Config;
+namespace Magento\Framework\App\ResourceConnection\Config;
 
 class Reader extends \Magento\Framework\Config\Reader\Filesystem
 {
diff --git a/lib/internal/Magento/Framework/App/Resource/Config/SchemaLocator.php b/lib/internal/Magento/Framework/App/ResourceConnection/Config/SchemaLocator.php
similarity index 93%
rename from lib/internal/Magento/Framework/App/Resource/Config/SchemaLocator.php
rename to lib/internal/Magento/Framework/App/ResourceConnection/Config/SchemaLocator.php
index ee5b713769a1c55a3ec46114a51a72e7d5aff4fa..59143708fae7097b83fc2eb555f87a4d7c8ecd51 100644
--- a/lib/internal/Magento/Framework/App/Resource/Config/SchemaLocator.php
+++ b/lib/internal/Magento/Framework/App/ResourceConnection/Config/SchemaLocator.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Resource\Config;
+namespace Magento\Framework\App\ResourceConnection\Config;
 
 class SchemaLocator implements \Magento\Framework\Config\SchemaLocatorInterface
 {
diff --git a/lib/internal/Magento/Framework/App/Resource/ConfigInterface.php b/lib/internal/Magento/Framework/App/ResourceConnection/ConfigInterface.php
similarity index 87%
rename from lib/internal/Magento/Framework/App/Resource/ConfigInterface.php
rename to lib/internal/Magento/Framework/App/ResourceConnection/ConfigInterface.php
index f2d8caeb957d685f767f660d19e8d1dcadff9724..82823c3fd60c9bcfd73c608179d83c945e09c6e6 100644
--- a/lib/internal/Magento/Framework/App/Resource/ConfigInterface.php
+++ b/lib/internal/Magento/Framework/App/ResourceConnection/ConfigInterface.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Resource;
+namespace Magento\Framework\App\ResourceConnection;
 
 interface ConfigInterface
 {
diff --git a/lib/internal/Magento/Framework/App/Resource/ConnectionAdapterInterface.php b/lib/internal/Magento/Framework/App/ResourceConnection/ConnectionAdapterInterface.php
similarity index 90%
rename from lib/internal/Magento/Framework/App/Resource/ConnectionAdapterInterface.php
rename to lib/internal/Magento/Framework/App/ResourceConnection/ConnectionAdapterInterface.php
index 7138f421b0743bba60320fffafd08ee53e2fa9a8..8c25852d48723895e3c1940d3f939fd6a0eef9b6 100644
--- a/lib/internal/Magento/Framework/App/Resource/ConnectionAdapterInterface.php
+++ b/lib/internal/Magento/Framework/App/ResourceConnection/ConnectionAdapterInterface.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Resource;
+namespace Magento\Framework\App\ResourceConnection;
 
 use Magento\Framework\DB\LoggerInterface;
 
diff --git a/lib/internal/Magento/Framework/App/Resource/ConnectionFactory.php b/lib/internal/Magento/Framework/App/ResourceConnection/ConnectionFactory.php
similarity index 85%
rename from lib/internal/Magento/Framework/App/Resource/ConnectionFactory.php
rename to lib/internal/Magento/Framework/App/ResourceConnection/ConnectionFactory.php
index 31993be24dc2ebf0479196aa24ee676eb827d872..7924f4babdac95420d54fdd34cf25d0032ae22cf 100644
--- a/lib/internal/Magento/Framework/App/Resource/ConnectionFactory.php
+++ b/lib/internal/Magento/Framework/App/ResourceConnection/ConnectionFactory.php
@@ -5,9 +5,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Resource;
+namespace Magento\Framework\App\ResourceConnection;
 
-use Magento\Framework\Model\Resource\Type\Db\ConnectionFactory as ModelConnectionFactory;
+use Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactory as ModelConnectionFactory;
 use Magento\Framework\DB\Adapter\DdlCache;
 
 class ConnectionFactory extends ModelConnectionFactory
diff --git a/lib/internal/Magento/Framework/App/Resource/SourceFactory.php b/lib/internal/Magento/Framework/App/ResourceConnection/SourceFactory.php
similarity index 90%
rename from lib/internal/Magento/Framework/App/Resource/SourceFactory.php
rename to lib/internal/Magento/Framework/App/ResourceConnection/SourceFactory.php
index bfc9da15dcb8e690dd42fd175d448c39421a8541..4964258bb974d6a2e620758bebab8f4f39d8cf87 100644
--- a/lib/internal/Magento/Framework/App/Resource/SourceFactory.php
+++ b/lib/internal/Magento/Framework/App/ResourceConnection/SourceFactory.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Resource;
+namespace Magento\Framework\App\ResourceConnection;
 
 class SourceFactory
 {
@@ -32,7 +32,7 @@ class SourceFactory
         $source = $this->objectManager->create($className);
         if (!$source instanceof SourceProviderInterface) {
             throw new \InvalidArgumentException(
-                $className . ' doesn\'t implement \Magento\Framework\App\Resource\SourceProviderInterface'
+                $className . ' doesn\'t implement \Magento\Framework\App\ResourceConnection\SourceProviderInterface'
             );
         }
 
diff --git a/lib/internal/Magento/Framework/App/Resource/SourceProviderInterface.php b/lib/internal/Magento/Framework/App/ResourceConnection/SourceProviderInterface.php
similarity index 95%
rename from lib/internal/Magento/Framework/App/Resource/SourceProviderInterface.php
rename to lib/internal/Magento/Framework/App/ResourceConnection/SourceProviderInterface.php
index b03b4687eaa7cdbe1a3fefe143433eb878a2a041..56e07e8bb7bbb9eaf748bd40fa9e00594c8553f5 100644
--- a/lib/internal/Magento/Framework/App/Resource/SourceProviderInterface.php
+++ b/lib/internal/Magento/Framework/App/ResourceConnection/SourceProviderInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Resource;
+namespace Magento\Framework\App\ResourceConnection;
 
 interface SourceProviderInterface extends \Traversable
 {
diff --git a/lib/internal/Magento/Framework/App/Route/ConfigInterface/Proxy.php b/lib/internal/Magento/Framework/App/Route/ConfigInterface/Proxy.php
index 11557a60cbcfb3130f9689a988236fc404f768a2..50a02c458595a30cb7644ff87df8a735886b953c 100644
--- a/lib/internal/Magento/Framework/App/Route/ConfigInterface/Proxy.php
+++ b/lib/internal/Magento/Framework/App/Route/ConfigInterface/Proxy.php
@@ -8,7 +8,7 @@
 namespace Magento\Framework\App\Route\ConfigInterface;
 
 /**
- * Proxy class for \Magento\Framework\App\Resource
+ * Proxy class for \Magento\Framework\App\ResourceConnection
  */
 class Proxy implements \Magento\Framework\App\Route\ConfigInterface
 {
@@ -29,7 +29,7 @@ class Proxy implements \Magento\Framework\App\Route\ConfigInterface
     /**
      * Proxied instance
      *
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_subject = null;
 
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/ResourceTest.php b/lib/internal/Magento/Framework/App/Test/Unit/AclResourceTest.php
similarity index 93%
rename from lib/internal/Magento/Framework/App/Test/Unit/ResourceTest.php
rename to lib/internal/Magento/Framework/App/Test/Unit/AclResourceTest.php
index f48b84c57b5b47885b85cde37c9cbf7e8ca403cf..265ca6f2964e4370e733d395f23a2848c4c66666 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/ResourceTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/AclResourceTest.php
@@ -6,18 +6,18 @@
 
 namespace Magento\Framework\App\Test\Unit;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Config\ConfigOptionsListConstants;
-use Magento\Framework\Model\Resource\Type\Db\ConnectionFactoryInterface;
+use Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactoryInterface;
 
-class ResourceTest extends \PHPUnit_Framework_TestCase
+class AclResourceTest extends \PHPUnit_Framework_TestCase
 {
-    const RESOURCE_NAME = \Magento\Framework\App\Resource::DEFAULT_CONNECTION;
+    const RESOURCE_NAME = \Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION;
     const CONNECTION_NAME = 'connection-name';
     const TABLE_PREFIX = 'prefix_';
 
     /**
-     * @var \Magento\Framework\App\Resource\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $config;
 
@@ -32,7 +32,7 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
     private $deploymentConfig;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $resource;
 
@@ -46,7 +46,7 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
         $this->connectionFactory = $this->getMockBuilder(ConnectionFactoryInterface::class)
             ->setMethods(['create'])
             ->getMockForAbstractClass();
-        $this->config = $this->getMockBuilder('Magento\Framework\App\Resource\ConfigInterface')
+        $this->config = $this->getMockBuilder('Magento\Framework\App\ResourceConnection\ConfigInterface')
             ->disableOriginalConstructor()
             ->setMethods(['getConnectionName'])
             ->getMock();
@@ -83,7 +83,7 @@ class ResourceTest extends \PHPUnit_Framework_TestCase
             ->method('getTableName')
             ->will($this->returnArgument(0));
 
-        $this->resource = new Resource(
+        $this->resource = new ResourceConnection(
             $this->config,
             $this->connectionFactory,
             $this->deploymentConfig
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Frontend/FactoryTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Frontend/FactoryTest.php
index 893a65e5ccc0834497382ad2e8f1c41482feb67d..dadd6fe072df3a6867bfb276dd71058734f39132 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Cache/Frontend/FactoryTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Cache/Frontend/FactoryTest.php
@@ -107,7 +107,10 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
         );
         $result = $model->create(['backend' => 'Zend_Cache_Backend_BlackHole']);
 
-        $this->assertInstanceOf('Magento\Framework\App\Test\Unit\Cache\Frontend\FactoryTest\CacheDecoratorDummy', $result);
+        $this->assertInstanceOf(
+            'Magento\Framework\App\Test\Unit\Cache\Frontend\FactoryTest\CacheDecoratorDummy',
+            $result
+        );
 
         $params = $result->getParams();
         $this->assertArrayHasKey('param', $params);
@@ -148,7 +151,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
         $filesystem->expects($this->any())->method('getDirectoryRead')->will($this->returnValue($dirMock));
         $filesystem->expects($this->any())->method('getDirectoryWrite')->will($this->returnValue($dirMock));
 
-        $resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
 
         $model = new \Magento\Framework\App\Cache\Frontend\Factory(
             $objectManager,
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Config/Storage/WriterTest.php b/lib/internal/Magento/Framework/App/Test/Unit/Config/Storage/WriterTest.php
index 887a1cf477663f00253816aed0bfdd273cd6fe5f..72aa66690d5bd8366b56b2acfd29f1f22f6ee2b5 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Config/Storage/WriterTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/Config/Storage/WriterTest.php
@@ -21,14 +21,14 @@ class WriterTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \Magento\Framework\App\Config\Resource\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\Config\ConfigResource\ConfigInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
     protected function setUp()
     {
         $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->resource = $this->getMockBuilder('Magento\Framework\App\Config\Resource\ConfigInterface')
+        $this->resource = $this->getMockBuilder('Magento\Framework\App\Config\ConfigResource\ConfigInterface')
             ->disableOriginalConstructor()
             ->getMock();
         $this->model = $this->objectManager->getObject(
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/ConverterTest.php b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/ConverterTest.php
similarity index 76%
rename from lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/ConverterTest.php
rename to lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/ConverterTest.php
index 82f031b14957be63bb2dc18fa0ff73ca8129c4b9..69539a65f4e43bfe6b2bcca8d35810527a7b5a1d 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/ConverterTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/ConverterTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Test\Unit\Resource\Config;
+namespace Magento\Framework\App\Test\Unit\ResourceConnection\Config;
 
 class ConverterTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\App\Resource\Config\Converter
+     * @var \Magento\Framework\App\ResourceConnection\Config\Converter
      */
     protected $_model;
 
@@ -26,7 +26,7 @@ class ConverterTest extends \PHPUnit_Framework_TestCase
     {
         $this->_filePath = __DIR__ . '/_files/';
         $this->_source = new \DOMDocument();
-        $this->_model = new \Magento\Framework\App\Resource\Config\Converter();
+        $this->_model = new \Magento\Framework\App\ResourceConnection\Config\Converter();
     }
 
     public function testConvert()
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/ReaderTest.php b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/ReaderTest.php
similarity index 85%
rename from lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/ReaderTest.php
rename to lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/ReaderTest.php
index 15917e6b2c3832931bc362a51035f5ada61478ea..33168d1d01af8b64230ef2db7321c7c72613798c 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/ReaderTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/ReaderTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Test\Unit\Resource\Config;
+namespace Magento\Framework\App\Test\Unit\ResourceConnection\Config;
 
 class ReaderTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\App\Resource\Config\Reader
+     * @var \Magento\Framework\App\ResourceConnection\Config\Reader
      */
     protected $_model;
 
@@ -49,7 +49,7 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
         $this->_fileResolverMock = $this->getMock('Magento\Framework\Config\FileResolverInterface');
         $this->_validationStateMock = $this->getMock('Magento\Framework\Config\ValidationStateInterface');
         $this->_schemaLocatorMock = $this->getMock(
-            'Magento\Framework\App\Resource\Config\SchemaLocator',
+            'Magento\Framework\App\ResourceConnection\Config\SchemaLocator',
             [],
             [],
             '',
@@ -57,11 +57,11 @@ class ReaderTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->_converterMock =
-            $this->getMock('Magento\Framework\App\Resource\Config\Converter', [], [], '', false);
+            $this->getMock('Magento\Framework\App\ResourceConnection\Config\Converter', [], [], '', false);
 
         $this->_configLocalMock = $this->getMock('Magento\Framework\App\DeploymentConfig', [], [], '', false);
 
-        $this->_model = new \Magento\Framework\App\Resource\Config\Reader(
+        $this->_model = new \Magento\Framework\App\ResourceConnection\Config\Reader(
             $this->_fileResolverMock,
             $this->_converterMock,
             $this->_schemaLocatorMock,
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/SchemaLocatorTest.php b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/SchemaLocatorTest.php
similarity index 84%
rename from lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/SchemaLocatorTest.php
rename to lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/SchemaLocatorTest.php
index 9f786c9904d5e0b84b7930585aea808c66573f98..dbdf21d828d9904ccc79f7fb2ccbf57e0f4ed732 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/SchemaLocatorTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/SchemaLocatorTest.php
@@ -3,13 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Test\Unit\Resource\Config;
+namespace Magento\Framework\App\Test\Unit\ResourceConnection\Config;
 
 class SchemaLocatorTest extends \PHPUnit_Framework_TestCase
 {
 
     /**
-     * @var \Magento\Framework\App\Resource\Config\SchemaLocator
+     * @var \Magento\Framework\App\ResourceConnection\Config\SchemaLocator
      */
     protected $model;
 
@@ -27,7 +27,7 @@ class SchemaLocatorTest extends \PHPUnit_Framework_TestCase
             ->willReturn(
                 $this->urnResolver->getRealPath('urn:magento:framework:App/etc/resources.xsd')
             );
-        $this->model = new \Magento\Framework\App\Resource\Config\SchemaLocator($urnResolverMock);
+        $this->model = new \Magento\Framework\App\ResourceConnection\Config\SchemaLocator($urnResolverMock);
     }
 
     public function testGetSchema()
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/XsdTest.php b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/XsdTest.php
similarity index 95%
rename from lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/XsdTest.php
rename to lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/XsdTest.php
index a9214b9b60e61991e01682fcf5fbe35d05fa78a8..709ed7183589f9e7ef951cf3c978840dea846d0f 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/XsdTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/XsdTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Test\Unit\Resource\Config;
+namespace Magento\Framework\App\Test\Unit\ResourceConnection\Config;
 
 class XsdTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/_files/invalidResourcesXmlArray.php b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/_files/invalidResourcesXmlArray.php
similarity index 100%
rename from lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/_files/invalidResourcesXmlArray.php
rename to lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/_files/invalidResourcesXmlArray.php
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/_files/resources.php b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/_files/resources.php
similarity index 100%
rename from lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/_files/resources.php
rename to lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/_files/resources.php
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/_files/resources.xml b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/_files/resources.xml
similarity index 100%
rename from lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/_files/resources.xml
rename to lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/_files/resources.xml
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/_files/valid_resources.xml b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/_files/valid_resources.xml
similarity index 100%
rename from lib/internal/Magento/Framework/App/Test/Unit/Resource/Config/_files/valid_resources.xml
rename to lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/Config/_files/valid_resources.xml
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Resource/ConfigTest.php b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/ConfigTest.php
similarity index 90%
rename from lib/internal/Magento/Framework/App/Test/Unit/Resource/ConfigTest.php
rename to lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/ConfigTest.php
index fd9a0f46107e6f602ff43b5fca72d76cf6a9af00..bf6b3f5ba54098eb0dcea2455917f0c446c2fbb9 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Resource/ConfigTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/ConfigTest.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Test\Unit\Resource;
+namespace Magento\Framework\App\Test\Unit\ResourceConnection;
 
 class ConfigTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\App\Resource\Config
+     * @var \Magento\Framework\App\\Config
      */
     protected $_model;
 
@@ -43,7 +43,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
         $this->_cacheMock = $this->getMock('Magento\Framework\Config\CacheInterface');
 
         $this->_readerMock =
-            $this->getMock('Magento\Framework\App\Resource\Config\Reader', [], [], '', false);
+            $this->getMock('Magento\Framework\App\ResourceConnection\Config\Reader', [], [], '', false);
 
         $this->_resourcesConfig = [
             'mainResourceName' => ['name' => 'mainResourceName', 'extends' => 'anotherResourceName'],
@@ -71,7 +71,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
             ->with('resource')
             ->willReturn($this->_initialResources);
 
-        $this->_model = new \Magento\Framework\App\Resource\Config(
+        $this->_model = new \Magento\Framework\App\ResourceConnection\Config(
             $this->_readerMock,
             $this->_scopeMock,
             $this->_cacheMock,
@@ -101,7 +101,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
             ->with('resource')
             ->willReturn(['validResource' => ['somekey' => 'validConnectionName']]);
 
-        new \Magento\Framework\App\Resource\Config(
+        new \Magento\Framework\App\ResourceConnection\Config(
             $this->_readerMock,
             $this->_scopeMock,
             $this->_cacheMock,
@@ -120,7 +120,7 @@ class ConfigTest extends \PHPUnit_Framework_TestCase
             ['resourceName' => 'mainResourceName', 'connectionName' => 'anotherConnection'],
             [
                 'resourceName' => 'brokenResourceName',
-                'connectionName' => \Magento\Framework\App\Resource::DEFAULT_CONNECTION
+                'connectionName' => \Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION
             ],
             ['resourceName' => 'extendedResourceName', 'connectionName' => 'validConnectionName'],
             ['resourceName' => 'validResource', 'connectionName' => 'validConnectionName']
diff --git a/lib/internal/Magento/Framework/App/Test/Unit/Resource/ConnectionFactoryTest.php b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/ConnectionFactoryTest.php
similarity index 85%
rename from lib/internal/Magento/Framework/App/Test/Unit/Resource/ConnectionFactoryTest.php
rename to lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/ConnectionFactoryTest.php
index b5f6b699bc49fb7295cfe1b9373e42278a6857dc..8a1b7296bbff18ac876f6edfdfafb1c7d8bcfe02 100644
--- a/lib/internal/Magento/Framework/App/Test/Unit/Resource/ConnectionFactoryTest.php
+++ b/lib/internal/Magento/Framework/App/Test/Unit/ResourceConnection/ConnectionFactoryTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\App\Test\Unit\Resource;
+namespace Magento\Framework\App\Test\Unit\ResourceConnection;
 
 use Magento\Framework\DB\Adapter\DdlCache;
 
@@ -15,7 +15,7 @@ class ConnectionFactoryTest extends \PHPUnit_Framework_TestCase
     protected $objectManager;
 
     /**
-     * @var \Magento\Framework\App\Resource\ConnectionFactory
+     * @var \Magento\Framework\App\ResourceConnection\ConnectionFactory
      */
     protected $model;
 
@@ -31,7 +31,7 @@ class ConnectionFactoryTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
         $this->model = $this->objectManager->getObject(
-            'Magento\Framework\App\Resource\ConnectionFactory',
+            'Magento\Framework\App\ResourceConnection\ConnectionFactory',
             ['objectManager' => $this->objectManagerMock]
         );
     }
@@ -44,7 +44,8 @@ class ConnectionFactoryTest extends \PHPUnit_Framework_TestCase
         $loggerMock = $this->getMockBuilder('Magento\Framework\DB\LoggerInterface')
             ->disableOriginalConstructor()
             ->getMock();
-        $connectionAdapterMock = $this->getMockBuilder('Magento\Framework\App\Resource\ConnectionAdapterInterface')
+        $adapterClass = 'Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface';
+        $connectionAdapterMock = $this->getMockBuilder($adapterClass)
             ->disableOriginalConstructor()
             ->getMock();
         $connectionMock = $this->getMockBuilder('Magento\Framework\DB\Adapter\AdapterInterface')
@@ -60,7 +61,7 @@ class ConnectionFactoryTest extends \PHPUnit_Framework_TestCase
             ->will($this->returnValue($connectionMock));
         $this->objectManagerMock->expects($this->once())
             ->method('create')
-            ->with('Magento\Framework\App\Resource\ConnectionAdapterInterface')
+            ->with('Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface')
             ->will($this->returnValue($connectionAdapterMock));
         $poolMock = $this->getMockBuilder('Magento\Framework\App\Cache\Type\FrontendPool')
             ->disableOriginalConstructor()
diff --git a/lib/internal/Magento/Framework/App/Utility/Files.php b/lib/internal/Magento/Framework/App/Utility/Files.php
index f5255ea78fe902f590ec14699731d027b5f60094..7802320f6fc32b2bf77b106237f35ddde8699f43 100644
--- a/lib/internal/Magento/Framework/App/Utility/Files.php
+++ b/lib/internal/Magento/Framework/App/Utility/Files.php
@@ -106,7 +106,7 @@ class Files
     {
         $result = [];
         foreach ($files as $file) {
-            $result[$file] = [$file];
+            $result[substr($file, strlen(BP))] = [$file];
         }
         return $result;
     }
@@ -273,6 +273,7 @@ class Files
             } else {
                 foreach ($this->componentRegistrar->getPaths(ComponentRegistrar::MODULE) as $moduleDir) {
                     $excludePaths[] = str_replace('\\', '/', '#' . $moduleDir . '/registration.php#');
+                    $excludePaths[] = str_replace('\\', '/', '#' . $moduleDir . '/cli_commands.php#');
                 }
             }
             return $this->getFilesSubset(
diff --git a/lib/internal/Magento/Framework/Autoload/AutoloaderInterface.php b/lib/internal/Magento/Framework/Autoload/AutoloaderInterface.php
index 6349cbbafcb566e148ccabc229ab88a85ac813a5..dad4426c96bf8ba03d016abcf36c286fc2252517 100644
--- a/lib/internal/Magento/Framework/Autoload/AutoloaderInterface.php
+++ b/lib/internal/Magento/Framework/Autoload/AutoloaderInterface.php
@@ -55,4 +55,12 @@ interface AutoloaderInterface
      * @return bool
      */
     public function loadClass($className);
+
+    /**
+     * Get filepath of class on system or false if it does not exist
+     *
+     * @param string $className
+     * @return string|bool
+     */
+    public function findFile($className);
 }
diff --git a/lib/internal/Magento/Framework/Autoload/ClassLoaderWrapper.php b/lib/internal/Magento/Framework/Autoload/ClassLoaderWrapper.php
index f96162b350052e6c94d716757fdf95e01dabe563..c1f2f5d15a12857e5c6ba0e850a832d6541fc72d 100644
--- a/lib/internal/Magento/Framework/Autoload/ClassLoaderWrapper.php
+++ b/lib/internal/Magento/Framework/Autoload/ClassLoaderWrapper.php
@@ -28,12 +28,7 @@ class ClassLoaderWrapper implements AutoloaderInterface
     }
 
     /**
-     * Adds a PSR-4 mapping from a namespace prefix to directories to search in for the corresponding class
-     *
-     * @param string $nsPrefix The namespace prefix of the PSR-4 mapping
-     * @param string|array $paths The path or paths to look in for the given prefix
-     * @param bool $prepend Whether to append the given path or paths to the paths already associated with the prefix
-     * @return void
+     * {@inheritdoc}
      */
     public function addPsr4($nsPrefix, $paths, $prepend = false)
     {
@@ -41,12 +36,7 @@ class ClassLoaderWrapper implements AutoloaderInterface
     }
 
     /**
-     * Adds a PSR-0 mapping from a namespace prefix to directories to search in for the corresponding class
-     *
-     * @param string $nsPrefix The namespace prefix of the PSR-0 mapping
-     * @param string|array $paths The path or paths to look in for the given prefix
-     * @param bool $prepend Whether to append the given path or paths to the paths already associated with the prefix
-     * @return void
+     * {@inheritdoc}
      */
     public function addPsr0($nsPrefix, $paths, $prepend = false)
     {
@@ -54,11 +44,7 @@ class ClassLoaderWrapper implements AutoloaderInterface
     }
 
     /**
-     * Creates new PSR-0 mappings from the given prefix to the given set of paths, eliminating previous mappings
-     *
-     * @param string $nsPrefix The namespace prefix of the PSR-0 mapping
-     * @param string|array $paths The path or paths to look in for the given prefix
-     * @return void
+     * {@inheritdoc}
      */
     public function setPsr0($nsPrefix, $paths)
     {
@@ -66,11 +52,7 @@ class ClassLoaderWrapper implements AutoloaderInterface
     }
 
     /**
-     * Creates new PSR-4 mappings from the given prefix to the given set of paths, eliminating previous mappings
-     *
-     * @param string $nsPrefix The namespace prefix of the PSR-0 mapping
-     * @param string|array $paths The path or paths to look in for the given prefix
-     * @return void
+     * {@inheritdoc}
      */
     public function setPsr4($nsPrefix, $paths)
     {
@@ -78,13 +60,28 @@ class ClassLoaderWrapper implements AutoloaderInterface
     }
 
     /**
-     * Attempts to load a class and returns true if successful.
-     *
-     * @param string $className
-     * @return bool
+     * {@inheritdoc}
+     * @codeCoverageIgnore
      */
     public function loadClass($className)
     {
         return $this->autoloader->loadClass($className) === true;
     }
+
+    /**
+     * {@inheritdoc}
+     * @codeCoverageIgnore
+     */
+    public function findFile($className)
+    {
+        /**
+         * Composer remembers that files don't exist even after they are generated. This clears the entry for
+         * $className so we can check the filesystem again for class existence.
+         */
+        if ($className[0] === '\\') {
+            $className = substr($className, 1);
+        }
+        $this->autoloader->addClassMap([$className => null]);
+        return $this->autoloader->findFile($className);
+    }
 }
diff --git a/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Fs.php b/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Fs.php
index 16219421a64b104b8cef0fa7a6c8428f62e8df9b..1f85f53090e9453084b30db03f1f4f2626c4ca5b 100644
--- a/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Fs.php
+++ b/lib/internal/Magento/Framework/Backup/Filesystem/Rollback/Fs.php
@@ -54,7 +54,7 @@ class Fs extends AbstractRollback
         new \Magento\Framework\Archive\Gz();
         new \Magento\Framework\Archive\Helper\File('');
         new \Magento\Framework\Archive\Helper\File\Gz('');
-        new \Magento\Framework\Exception\LocalizedException(new \Magento\Framework\Phrase(''));
+        new \Magento\Framework\Exception\LocalizedException(new \Magento\Framework\Phrase('dummy'));
 
         $fsHelper->rm($this->_snapshot->getRootDir(), $this->_snapshot->getIgnorePaths());
         $archiver->unpack($snapshotPath, $this->_snapshot->getRootDir());
diff --git a/lib/internal/Magento/Framework/Code/Generator.php b/lib/internal/Magento/Framework/Code/Generator.php
index da6d60b14ed9bff46b34410eba6c2c0bb4136926..edd02f6c2049282b6af2fa7f3b8e7d2559492857 100644
--- a/lib/internal/Magento/Framework/Code/Generator.php
+++ b/lib/internal/Magento/Framework/Code/Generator.php
@@ -74,31 +74,28 @@ class Generator
      */
     public function generateClass($className)
     {
-        // check if source class a generated entity
-        $entity = null;
-        $entityName = null;
+        $resultEntityType = null;
+        $sourceClassName = null;
         foreach ($this->_generatedEntities as $entityType => $generatorClass) {
             $entitySuffix = ucfirst($entityType);
-            // if $className string ends on $entitySuffix substring
+            // If $className string ends with $entitySuffix substring
             if (strrpos($className, $entitySuffix) === strlen($className) - strlen($entitySuffix)) {
-                $entity = $entityType;
-                $entityName = rtrim(
+                $resultEntityType = $entityType;
+                $sourceClassName = rtrim(
                     substr($className, 0, -1 * strlen($entitySuffix)),
                     '\\'
                 );
                 break;
             }
         }
-        if (!$entity || !$entityName) {
-            return self::GENERATION_ERROR;
-        } else if ($this->definedClasses->classLoadable($className)) {
-            return self::GENERATION_SKIP;
-        } else if (!isset($this->_generatedEntities[$entity])) {
-            throw new \InvalidArgumentException('Unknown generation entity.');
+
+        if ($skipReason = $this->shouldSkipGeneration($resultEntityType, $sourceClassName, $className)) {
+            return $skipReason;
         }
-        $generatorClass = $this->_generatedEntities[$entity];
+
+        $generatorClass = $this->_generatedEntities[$resultEntityType];
         /** @var EntityAbstract $generator */
-        $generator = $this->createGeneratorInstance($generatorClass, $entityName, $className);
+        $generator = $this->createGeneratorInstance($generatorClass, $sourceClassName, $className);
         if ($generator !== null) {
             $this->tryToLoadSourceClass($className, $generator);
             if (!($file = $generator->generate())) {
@@ -107,18 +104,23 @@ class Generator
                     new \Magento\Framework\Phrase(implode(' ', $errors))
                 );
             }
-            $this->includeFile($file);
+            $this->tryToIncludeFile($file, $className);
             return self::GENERATION_SUCCESS;
         }
     }
 
     /**
+     * Include file only if the class is not already defined in memory
+     *
      * @param string $fileName
+     * @param string $className
      * @return void
      */
-    public function includeFile($fileName)
+    public function tryToIncludeFile($fileName, $className)
     {
-        include $fileName;
+        if (!$this->definedClasses->isClassLoadableFromMemory($className)) {
+            include $fileName;
+        }
     }
 
     /**
@@ -176,7 +178,7 @@ class Generator
     protected function tryToLoadSourceClass($className, $generator)
     {
         $sourceClassName = $generator->getSourceClassName();
-        if (!$this->definedClasses->classLoadable($sourceClassName)) {
+        if (!$this->definedClasses->isClassLoadable($sourceClassName)) {
             if ($this->generateClass($sourceClassName) !== self::GENERATION_SUCCESS) {
                 throw new \Magento\Framework\Exception\LocalizedException(
                     new \Magento\Framework\Phrase(
@@ -187,4 +189,24 @@ class Generator
             }
         }
     }
+
+    /**
+     * Perform validation surrounding source and result classes and entity type
+     *
+     * @param string $resultEntityType
+     * @param string $sourceClassName
+     * @param string $resultClass
+     * @return string|bool
+     */
+    protected function shouldSkipGeneration($resultEntityType, $sourceClassName, $resultClass)
+    {
+        if (!$resultEntityType || !$sourceClassName) {
+            return self::GENERATION_ERROR;
+        } else if ($this->definedClasses->isClassLoadableFromDisc($resultClass)) {
+            return self::GENERATION_SKIP;
+        } else if (!isset($this->_generatedEntities[$resultEntityType])) {
+            throw new \InvalidArgumentException('Unknown generation entity.');
+        }
+        return false;
+    }
 }
diff --git a/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php b/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php
index 20621b72ee3c8c25cae84c0717370bdc09ea21c1..d0babb79f2f562fdefb486ac70f12397dc373af7 100644
--- a/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php
+++ b/lib/internal/Magento/Framework/Code/Generator/DefinedClasses.php
@@ -14,40 +14,37 @@ use Magento\Framework\Autoload\AutoloaderRegistry;
 class DefinedClasses
 {
     /**
-     * Determine if a class can be loaded without using the Code\Generator\Autoloader.
+     * Determine if a class can be loaded without using Code\Generator\Autoloader.
      *
      * @param string $className
      * @return bool
      */
-    public function classLoadable($className)
+    public function isClassLoadable($className)
     {
-        if ($this->isAlreadyDefined($className)) {
-            return true;
-        }
-        return $this->performAutoload($className);
+        return $this->isClassLoadableFromMemory($className) || $this->isClassLoadableFromDisc($className);
     }
 
     /**
-     * Checks whether class is already defined
+     * Determine if a class exists in memory
      *
      * @param string $className
      * @return bool
      */
-    protected function isAlreadyDefined($className)
+    public function isClassLoadableFromMemory($className)
     {
         return class_exists($className, false) || interface_exists($className, false);
     }
 
     /**
-     * Performs autoload for given class name
+     * Determine if a class exists on disc
      *
      * @param string $className
      * @return bool
      */
-    protected function performAutoload($className)
+    public function isClassLoadableFromDisc($className)
     {
         try {
-            return AutoloaderRegistry::getAutoloader()->loadClass($className);
+            return (bool)AutoloaderRegistry::getAutoloader()->findFile($className);
         } catch (\Exception $e) {
             // Couldn't get access to the autoloader so we need to allow class_exists to call autoloader chain
             return (class_exists($className) || interface_exists($className));
diff --git a/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php b/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
index 82c7a210c0f11e79597e3b7939b7e50730d19077..fee367f49ca8046d5088bdbda5167bbcab90f82f 100644
--- a/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
+++ b/lib/internal/Magento/Framework/Code/Generator/EntityAbstract.php
@@ -249,10 +249,10 @@ abstract class EntityAbstract
         $resultClassName = $this->_getResultClassName();
         $resultDir = $this->_ioObject->getResultFileDirectory($resultClassName);
 
-        if (!$this->definedClasses->classLoadable($sourceClassName)) {
+        if (!$this->definedClasses->isClassLoadable($sourceClassName)) {
             $this->_addError('Source class ' . $sourceClassName . ' doesn\'t exist.');
             return false;
-        } elseif ($this->definedClasses->classLoadable($resultClassName)) {
+        } elseif ($this->definedClasses->isClassLoadableFromDisc($resultClassName)) {
             $this->_addError('Result class ' . $resultClassName . ' already exists.');
             return false;
         } elseif (
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/DefinedClassesTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/DefinedClassesTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..e0f13bab0b3733f36d8d3b613f2068cf3ecf5f08
--- /dev/null
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/DefinedClassesTest.php
@@ -0,0 +1,74 @@
+<?php
+/***
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+// @codingStandardsIgnoreStart
+namespace Magento\Framework\Code\Generator {
+    use Magento\Framework\Code\Test\Unit\Generator\DefinedClassesTest;
+
+    function class_exists($className)
+    {
+        return DefinedClassesTest::$definedClassesTestActive
+            ? $className === DefinedClassesTest::$classInMemory
+            : \class_exists($className);
+    }
+}
+
+namespace Magento\Framework\Code\Test\Unit\Generator {
+    use Magento\Framework\Autoload\AutoloaderInterface;
+    use Magento\Framework\Autoload\AutoloaderRegistry;
+    use Magento\Framework\Code\Generator\DefinedClasses;
+
+    // @codingStandardsIgnoreEnd
+
+    class DefinedClassesTest extends \PHPUnit_Framework_TestCase
+    {
+        /** @var bool  */
+        public static $definedClassesTestActive = false;
+
+        public static $classInMemory = 'Class\That\Exists\In\Memory';
+
+        /** @var  DefinedClasses */
+        private $model;
+
+        /** @var  AutoloaderInterface */
+        private $initAutoloader;
+
+        public function setUp()
+        {
+            $this->model = new DefinedClasses();
+            self::$definedClassesTestActive = true;
+            $this->initAutoloader = AutoloaderRegistry::getAutoloader();
+        }
+
+        public function tearDown()
+        {
+            self::$definedClassesTestActive = false;
+            AutoloaderRegistry::registerAutoloader($this->initAutoloader);
+        }
+
+        public function testClassLoadableFromMemory()
+        {
+            $this->assertTrue($this->model->isClassLoadable(self::$classInMemory));
+        }
+
+        public function testClassLoadableFromDisc()
+        {
+            $classOnDisc = 'Class\That\Exists\On\Disc';
+            /**
+             * @var AutoloaderInterface | \PHPUnit_Framework_MockObject_MockObject $autoloaderMock
+             */
+            $autoloaderMock = $this->getMock('\Magento\Framework\Autoload\AutoloaderInterface');
+            $autoloaderMock->expects($this->once())->method('findFile')->with($classOnDisc)->willReturn(true);
+            AutoloaderRegistry::registerAutoloader($autoloaderMock);
+            $this->assertTrue($this->model->isClassLoadable($classOnDisc));
+        }
+
+        public function testClassNotLoadable()
+        {
+            $this->assertFalse($this->model->isClassLoadable('Class\Does\Not\Exist'));
+        }
+    }
+}
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
index 8ed735e0af5a5309574a42bafa520f9b90019367..cf74e8a67f1573a8eb9ce202c35014f9ca6e263b 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/Generator/EntityAbstractTest.php
@@ -225,13 +225,13 @@ class EntityAbstractTest extends \PHPUnit_Framework_TestCase
     ) {
         // Configure DefinedClasses mock
         $definedClassesMock = $this->getMock('Magento\Framework\Code\Generator\DefinedClasses');
-        $definedClassesMock->expects($this->at(0))
-            ->method('classLoadable')
+        $definedClassesMock->expects($this->once())
+            ->method('isClassLoadable')
             ->with(self::SOURCE_CLASS)
             ->willReturn($sourceClassExists);
         if ($resultClassExists) {
-            $definedClassesMock->expects($this->at(1))
-                ->method('classLoadable')
+            $definedClassesMock->expects($this->once())
+                ->method('isClassLoadableFromDisc')
                 ->with(self::RESULT_CLASS)
                 ->willReturn($resultClassExists);
         }
diff --git a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
index e01f4c529c8274aaa48bc8b37b409da7037a4191..88a043753daa73776e941541651e7cc3b237e555 100644
--- a/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
+++ b/lib/internal/Magento/Framework/Code/Test/Unit/GeneratorTest.php
@@ -75,7 +75,9 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         );
         $objectManagerMock = $this->getMock('Magento\Framework\ObjectManagerInterface');
         $fullClassName = $className . $entityType;
-        $entityGeneratorMock = $this->getMockBuilder($fullClassName)->disableOriginalConstructor()->getMock();
+        $entityGeneratorMock = $this->getMockBuilder('\Magento\Framework\Code\Generator\EntityAbstract')
+            ->disableOriginalConstructor()
+            ->getMock();
         $objectManagerMock->expects($this->once())->method('create')->willReturn($entityGeneratorMock);
         $this->model->setObjectManager($objectManagerMock);
         $this->model->generateClass($fullClassName);
@@ -88,7 +90,7 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
     {
         $definedClassesMock = $this->getMock('Magento\Framework\Code\Generator\DefinedClasses');
         $definedClassesMock->expects($this->any())
-            ->method('classLoadable')
+            ->method('isClassLoadableFromDisc')
             ->willReturn(true);
         $this->model = new \Magento\Framework\Code\Generator(
             $this->ioObjectMock,
@@ -133,7 +135,9 @@ class GeneratorTest extends \PHPUnit_Framework_TestCase
         $expectedEntities = array_values($this->expectedEntities);
         $resultClassName = self::SOURCE_CLASS . ucfirst(array_shift($expectedEntities));
         $objectManagerMock = $this->getMock('Magento\Framework\ObjectManagerInterface');
-        $entityGeneratorMock = $this->getMockBuilder($resultClassName)->disableOriginalConstructor()->getMock();
+        $entityGeneratorMock = $this->getMockBuilder('\Magento\Framework\Code\Generator\EntityAbstract')
+            ->disableOriginalConstructor()
+            ->getMock();
         $objectManagerMock->expects($this->once())->method('create')->willReturn($entityGeneratorMock);
         $this->model->setObjectManager($objectManagerMock);
         $this->model->generateClass($resultClassName);
diff --git a/lib/internal/Magento/Framework/Composer/ComposerInformation.php b/lib/internal/Magento/Framework/Composer/ComposerInformation.php
index f03865e53024b49344c36d140ea5041db0a7fcb4..2b216df65c1877771735b8ab04d54a35c0abc160 100755
--- a/lib/internal/Magento/Framework/Composer/ComposerInformation.php
+++ b/lib/internal/Magento/Framework/Composer/ComposerInformation.php
@@ -159,6 +159,24 @@ class ComposerInformation
         return array_unique($requiredExtensions);
     }
 
+    /**
+     * Retrieve list of suggested extensions
+     *
+     * Collect suggests from composer.lock file and modules composer.json files
+     *
+     * @return array
+     */
+    public function getSuggestedPackages()
+    {
+        $suggests = [];
+        /** @var \Composer\Package\CompletePackage $package */
+        foreach ($this->locker->getLockedRepository()->getPackages() as $package) {
+            $suggests += $package->getSuggests();
+        }
+
+        return array_unique($suggests);
+    }
+
     /**
      * Collect required packages from root composer.lock file
      *
@@ -257,4 +275,15 @@ class ComposerInformation
     {
         return self::$packageTypes;
     }
+
+    /**
+     * @param string $name
+     * @param string $version
+     * @return array
+     */
+    public function getPackageRequirements($name, $version)
+    {
+        $package = $this->composer->getRepositoryManager()->findPackage($name, $version);
+        return $package->getRequires();
+    }
 }
diff --git a/lib/internal/Magento/Framework/Config/View.php b/lib/internal/Magento/Framework/Config/View.php
index 00aab9b33e2e3feffe76c3b908c9deb33e628e24..98a9614018816622d915ab5f10522ba88751ee83 100644
--- a/lib/internal/Magento/Framework/Config/View.php
+++ b/lib/internal/Magento/Framework/Config/View.php
@@ -80,12 +80,7 @@ class View extends \Magento\Framework\Config\AbstractXml
             switch ($childNode->tagName) {
                 case 'vars':
                     $moduleName = $childNode->getAttribute('module');
-                    /** @var $varNode \DOMElement */
-                    foreach ($childNode->getElementsByTagName('var') as $varNode) {
-                        $varName = $varNode->getAttribute('name');
-                        $varValue = $varNode->nodeValue;
-                        $result[$childNode->tagName][$moduleName][$varName] = $varValue;
-                    }
+                    $result[$childNode->tagName][$moduleName] = $this->parseVarElement($childNode);
                     break;
                 case 'exclude':
                     /** @var $itemNode \DOMElement */
@@ -111,6 +106,27 @@ class View extends \Magento\Framework\Config\AbstractXml
         return $result;
     }
 
+    /**
+     * Recursive parser for <var> nodes
+     *
+     * @param \DOMElement $node
+     * @return string|boolean|number|null|[]
+     */
+    protected function parseVarElement(\DOMElement $node)
+    {
+        $result = [];
+        for ($varNode = $node->firstChild; $varNode !== null; $varNode = $varNode->nextSibling) {
+            if ($varNode instanceof \DOMElement && $varNode->tagName == "var") {
+                $varName = $varNode->getAttribute('name');
+                $result[$varName] = $this->parseVarElement($varNode);
+            }
+        }
+        if (!count($result)) {
+            $result = $node->nodeValue;
+        }
+        return $result;
+    }
+
     /**
      * Get a list of variables in scope of specified module
      *
@@ -129,11 +145,24 @@ class View extends \Magento\Framework\Config\AbstractXml
      *
      * @param string $module
      * @param string $var
-     * @return string|false
+     * @return string|false|array
      */
     public function getVarValue($module, $var)
     {
-        return isset($this->_data['vars'][$module][$var]) ? $this->_data['vars'][$module][$var] : false;
+        if (!isset($this->_data['vars'][$module])) {
+            return false;
+        }
+
+        $value = $this->_data['vars'][$module];
+        foreach (explode('/', $var) as $node) {
+            if (is_array($value) && isset($value[$node])) {
+                $value = $value[$node];
+            } else {
+                return false;
+            }
+        }
+
+        return $value;
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Config/etc/view.xsd b/lib/internal/Magento/Framework/Config/etc/view.xsd
index 21a371d863342b874b4bc6a7c4c41d487b2fff57..1ded09402a6b0f999dbd24c2bfefa599bd012d72 100644
--- a/lib/internal/Magento/Framework/Config/etc/view.xsd
+++ b/lib/internal/Magento/Framework/Config/etc/view.xsd
@@ -12,15 +12,7 @@
                 <xs:element name="vars" maxOccurs="unbounded">
                     <xs:complexType>
                         <xs:sequence>
-                            <xs:element name="var" maxOccurs="unbounded">
-                                <xs:complexType>
-                                    <xs:simpleContent>
-                                        <xs:extension base="xs:string">
-                                            <xs:attribute name="name" type="xs:string" use="required"/>
-                                        </xs:extension>
-                                    </xs:simpleContent>
-                                </xs:complexType>
-                            </xs:element>
+                            <xs:element name="var" type="varType" maxOccurs="unbounded"/>
                         </xs:sequence>
                         <xs:attribute name="module" type="xs:string" use="required"/>
                     </xs:complexType>
@@ -38,6 +30,13 @@
             <xs:field xpath="@module"/>
         </xs:unique>
     </xs:element>
+    <xs:complexType name="varType" mixed="true">
+        <xs:sequence minOccurs="0" maxOccurs="unbounded">
+            <xs:element name="var" type="varType"/>
+        </xs:sequence>
+        <xs:attribute name="name" type="xs:string" use="required"/>
+        <xs:attribute name="value" type="xs:string"/>
+    </xs:complexType>
     <xs:complexType name="mediaType" mixed="true">
         <xs:all />
     </xs:complexType>
diff --git a/lib/internal/Magento/Framework/Console/Cli.php b/lib/internal/Magento/Framework/Console/Cli.php
index 72ca214b1fbcfd170cd769b5f2ab9548d55abda5..786a658b7e9ac92ed945aab9a7719a1e03ad1788 100644
--- a/lib/internal/Magento/Framework/Console/Cli.php
+++ b/lib/internal/Magento/Framework/Console/Cli.php
@@ -62,11 +62,34 @@ class Cli extends SymfonyApplication
             $modulesCommands = $commandList->getCommands();
         }
 
+        $vendorCommands = $this->getVendorCommands($objectManager);
+
         $commandsList = array_merge(
             $setupCommands,
-            $modulesCommands
+            $modulesCommands,
+            $vendorCommands
         );
 
         return $commandsList;
     }
+
+    /**
+     * Gets vendor commands
+     *
+     * @param \Magento\Framework\ObjectManagerInterface $objectManager
+     * @return array
+     */
+    protected function getVendorCommands($objectManager)
+    {
+        $commands = [];
+        foreach (CommandLocator::getCommands() as $commandListClass) {
+            if (class_exists($commandListClass)) {
+                $commands = array_merge(
+                    $commands,
+                    $objectManager->create($commandListClass)->getCommands()
+                );
+            }
+        }
+        return $commands;
+    }
 }
diff --git a/lib/internal/Magento/Framework/Console/CommandList.php b/lib/internal/Magento/Framework/Console/CommandList.php
index 99519a396d16b66eeaa68481d31514fc85da65e1..b754a637f4bb83986613c414658c8d484460bb1c 100644
--- a/lib/internal/Magento/Framework/Console/CommandList.php
+++ b/lib/internal/Magento/Framework/Console/CommandList.php
@@ -9,7 +9,7 @@ namespace Magento\Framework\Console;
 /**
  * Class CommandList has a list of commands, which can be extended via DI configuration.
  */
-class CommandList
+class CommandList implements CommandListInterface
 {
     /**
      * @var string[]
@@ -27,9 +27,7 @@ class CommandList
     }
 
     /**
-     * Gets list of command instances
-     *
-     * @return \Symfony\Component\Console\Command\Command[]
+     * {@inheritdoc}
      */
     public function getCommands()
     {
diff --git a/lib/internal/Magento/Framework/Console/CommandListInterface.php b/lib/internal/Magento/Framework/Console/CommandListInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..b15780716381a7b6ee3617b71f128a0e6b38f547
--- /dev/null
+++ b/lib/internal/Magento/Framework/Console/CommandListInterface.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Console;
+
+/**
+ * Contains a list of Console commands
+ */
+interface CommandListInterface
+{
+    /**
+     * Gets list of command instances
+     *
+     * @return \Symfony\Component\Console\Command\Command[]
+     */
+    public function getCommands();
+}
diff --git a/lib/internal/Magento/Framework/Console/CommandLocator.php b/lib/internal/Magento/Framework/Console/CommandLocator.php
new file mode 100644
index 0000000000000000000000000000000000000000..587f3cfd3c801c4ff0a1379e3cce3da42dcea18a
--- /dev/null
+++ b/lib/internal/Magento/Framework/Console/CommandLocator.php
@@ -0,0 +1,34 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Console;
+
+/**
+ * Locator for Console commands
+ */
+class CommandLocator
+{
+    /**
+     * @var string[]
+     */
+    private static $commands = [];
+
+    /**
+     * @param string $commandListClass
+     * @return void
+     */
+    public static function register($commandListClass)
+    {
+        self::$commands[] = $commandListClass;
+    }
+
+    /**
+     * @return string[]
+     */
+    public static function getCommands()
+    {
+        return self::$commands;
+    }
+}
diff --git a/lib/internal/Magento/Framework/DB/AbstractMapper.php b/lib/internal/Magento/Framework/DB/AbstractMapper.php
index 44eb9d8b5427d8a9f77738158d98e81bf1a2d260..630e3ceb0ae3be2cd9ce9ee671cd49abb962569b 100644
--- a/lib/internal/Magento/Framework/DB/AbstractMapper.php
+++ b/lib/internal/Magento/Framework/DB/AbstractMapper.php
@@ -29,7 +29,7 @@ abstract class AbstractMapper implements MapperInterface
     /**
      * Resource instance
      *
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $resource;
 
@@ -206,7 +206,7 @@ abstract class AbstractMapper implements MapperInterface
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource()
     {
diff --git a/lib/internal/Magento/Framework/DB/Helper/AbstractHelper.php b/lib/internal/Magento/Framework/DB/Helper/AbstractHelper.php
index bd927416663bc0209e0905b6a1b4ecfb608768fc..b6643cbe614b01f3147c041aa8397e70815ffa49 100644
--- a/lib/internal/Magento/Framework/DB/Helper/AbstractHelper.php
+++ b/lib/internal/Magento/Framework/DB/Helper/AbstractHelper.php
@@ -17,17 +17,17 @@ abstract class AbstractHelper
     protected $_modulePrefix;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resource;
 
     /**
      * Initialize resource helper instance
      *
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param string $modulePrefix
      */
-    public function __construct(\Magento\Framework\App\Resource $resource, $modulePrefix)
+    public function __construct(\Magento\Framework\App\ResourceConnection $resource, $modulePrefix)
     {
         $this->_resource = $resource;
         $this->_modulePrefix = (string)$modulePrefix;
diff --git a/lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php b/lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php
index 15ddbc4465a85a38bf24f154ce27e297eadcc5be..931939a7899e5125ef4babf0525751245279249d 100644
--- a/lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php
+++ b/lib/internal/Magento/Framework/DB/Helper/Mysql/Fulltext.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\DB\Helper\Mysql;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class Fulltext
 {
@@ -45,9 +45,9 @@ class Fulltext
     private $connection;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      */
-    public function __construct(Resource $resource)
+    public function __construct(ResourceConnection $resource)
     {
         $this->connection = $resource->getConnection();
     }
diff --git a/lib/internal/Magento/Framework/DB/MapperInterface.php b/lib/internal/Magento/Framework/DB/MapperInterface.php
index 67cb7d0ac6be3b48e0cae440485ff238aef29ea3..4bf1e3be23c26cbaae0e54c801248ef9b49a7955 100644
--- a/lib/internal/Magento/Framework/DB/MapperInterface.php
+++ b/lib/internal/Magento/Framework/DB/MapperInterface.php
@@ -25,7 +25,7 @@ interface MapperInterface
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource();
 
diff --git a/lib/internal/Magento/Framework/DB/Query.php b/lib/internal/Magento/Framework/DB/Query.php
index 21a93b74de1604366c63e67049e731544adaa431..203a5158f644f2765e6ecf40bb38be69576cf8e4 100644
--- a/lib/internal/Magento/Framework/DB/Query.php
+++ b/lib/internal/Magento/Framework/DB/Query.php
@@ -27,7 +27,7 @@ class Query implements QueryInterface
     /**
      * Resource instance
      *
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $resource;
 
@@ -78,13 +78,13 @@ class Query implements QueryInterface
     /**
      * @param \Magento\Framework\DB\Select $select
      * @param \Magento\Framework\Api\CriteriaInterface $criteria
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      */
     public function __construct(
         \Magento\Framework\DB\Select $select,
         \Magento\Framework\Api\CriteriaInterface $criteria,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource,
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource,
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
     ) {
         $this->select = $select;
@@ -224,7 +224,7 @@ class Query implements QueryInterface
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource()
     {
diff --git a/lib/internal/Magento/Framework/DB/QueryBuilder.php b/lib/internal/Magento/Framework/DB/QueryBuilder.php
index c764157be4ca43481b7ace33312b5580ed147496..c1e25ed0981eba0e1a1c12be4c2f49df75b55283 100644
--- a/lib/internal/Magento/Framework/DB/QueryBuilder.php
+++ b/lib/internal/Magento/Framework/DB/QueryBuilder.php
@@ -25,7 +25,7 @@ class QueryBuilder
     /**
      * Resource instance
      *
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $resource;
 
@@ -65,10 +65,10 @@ class QueryBuilder
     /**
      * Set Resource
      *
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @return void
      */
-    public function setResource(\Magento\Framework\Model\Resource\Db\AbstractDb $resource)
+    public function setResource(\Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource)
     {
         $this->resource = $resource;
     }
diff --git a/lib/internal/Magento/Framework/DB/QueryInterface.php b/lib/internal/Magento/Framework/DB/QueryInterface.php
index 847c9931ee6a8792dd05d2c567714a0f638c6fb7..e24290315926bda65d79eb0e57eac5b964d33d56 100644
--- a/lib/internal/Magento/Framework/DB/QueryInterface.php
+++ b/lib/internal/Magento/Framework/DB/QueryInterface.php
@@ -86,7 +86,7 @@ interface QueryInterface
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource();
 
diff --git a/lib/internal/Magento/Framework/DB/Sql/ConcatExpression.php b/lib/internal/Magento/Framework/DB/Sql/ConcatExpression.php
index 09c1d2a36aa4582b714b32d078ef5732cda8a6aa..44fa19da75814f917aadb2e448d1c6743e254b1b 100644
--- a/lib/internal/Magento/Framework/DB/Sql/ConcatExpression.php
+++ b/lib/internal/Magento/Framework/DB/Sql/ConcatExpression.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\DB\Sql;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 
 /**
@@ -29,12 +29,12 @@ class ConcatExpression extends \Zend_Db_Expr
     protected $separator;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param array $columns
      * @param string $separator
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         array $columns,
         $separator = ' '
     ) {
diff --git a/lib/internal/Magento/Framework/DB/Sql/LookupExpression.php b/lib/internal/Magento/Framework/DB/Sql/LookupExpression.php
index 30e208e3fcff09580eb627aafebe4aa03e978956..d2468bb192cb277d5c86f29f42e37bd4f72e356f 100644
--- a/lib/internal/Magento/Framework/DB/Sql/LookupExpression.php
+++ b/lib/internal/Magento/Framework/DB/Sql/LookupExpression.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\DB\Sql;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\DB\Select;
 
@@ -46,14 +46,14 @@ class LookupExpression extends \Zend_Db_Expr
     protected $sortOrder;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param string $targetColumn
      * @param string $targetTable
      * @param array $referenceColumns
      * @param array $sortOrder
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         $targetColumn,
         $targetTable,
         array $referenceColumns = [],
diff --git a/lib/internal/Magento/Framework/DB/SubSelect.php b/lib/internal/Magento/Framework/DB/SubSelect.php
index 7f23f9eb4a368147bda0ebcc57ce80d3b6293f9e..a83cce21a9e3fb60f5f345600791cfa8603f34e3 100644
--- a/lib/internal/Magento/Framework/DB/SubSelect.php
+++ b/lib/internal/Magento/Framework/DB/SubSelect.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\DB;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 
 /**
@@ -34,7 +34,7 @@ class SubSelect extends \Zend_Db_Expr
     protected $targetColumn;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $resource;
 
@@ -49,7 +49,7 @@ class SubSelect extends \Zend_Db_Expr
     protected $connection;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param string $connectionName
      * @param string $table
      * @param string[] $columns
@@ -57,12 +57,12 @@ class SubSelect extends \Zend_Db_Expr
      * @param string $targetColumn
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         $table,
         array $columns,
         $originColumn,
         $targetColumn,
-        $connectionName = Resource::DEFAULT_CONNECTION
+        $connectionName = ResourceConnection::DEFAULT_CONNECTION
     ) {
         $this->resource = $resource;
         $this->connectionName = $connectionName;
diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/AbstractMapperTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/AbstractMapperTest.php
index 11fafec0d0fc49a7eaa41e5bbebb70d97713365d..deec1825b9ef6000d9aed189b24830d8c6a417f1 100644
--- a/lib/internal/Magento/Framework/DB/Test/Unit/AbstractMapperTest.php
+++ b/lib/internal/Magento/Framework/DB/Test/Unit/AbstractMapperTest.php
@@ -16,7 +16,7 @@ use Magento\Framework\DB\Select;
 class AbstractMapperTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -63,7 +63,7 @@ class AbstractMapperTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/Helper/AbstractHelperTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/Helper/AbstractHelperTest.php
index 8dd9e81cb268b6d18685163f785f37a2ff19452c..7e24158cb77f544bd3cd1aa23d9f825ccbfc8a6e 100644
--- a/lib/internal/Magento/Framework/DB/Test/Unit/Helper/AbstractHelperTest.php
+++ b/lib/internal/Magento/Framework/DB/Test/Unit/Helper/AbstractHelperTest.php
@@ -15,7 +15,7 @@ class AbstractHelperTest extends \PHPUnit_Framework_TestCase
     protected $_model;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_resourceMock;
 
@@ -28,7 +28,7 @@ class AbstractHelperTest extends \PHPUnit_Framework_TestCase
     {
         $this->_adapterMock = $this->getMock('Magento\Framework\DB\Adapter\AdapterInterface');
 
-        $this->_resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $this->_resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->_resourceMock->expects($this->any())
             ->method('getConnection')
             ->with('prefix')
diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/Helper/Mysql/FulltextTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/Helper/Mysql/FulltextTest.php
index e86de567189b2a55b144da0014a04b36afcd0685..6d346c0ba697dbbbabb38b806e7ea80574241170 100644
--- a/lib/internal/Magento/Framework/DB/Test/Unit/Helper/Mysql/FulltextTest.php
+++ b/lib/internal/Magento/Framework/DB/Test/Unit/Helper/Mysql/FulltextTest.php
@@ -82,7 +82,7 @@ class FulltextTest extends \PHPUnit_Framework_TestCase
             ->with($this->equalTo('some searchable text'))
             ->will($this->returnValue("'some searchable text'"));
 
-        $resource = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $resource->expects($this->any())
diff --git a/lib/internal/Magento/Framework/DB/Test/Unit/QueryTest.php b/lib/internal/Magento/Framework/DB/Test/Unit/QueryTest.php
index 41a9a6002f788d87ec028de4513bfa5b6991f895..d466786094ba8309672e545c8aa9cb301975b71c 100644
--- a/lib/internal/Magento/Framework/DB/Test/Unit/QueryTest.php
+++ b/lib/internal/Magento/Framework/DB/Test/Unit/QueryTest.php
@@ -21,7 +21,7 @@ class QueryTest extends \PHPUnit_Framework_TestCase
     protected $criteriaMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -71,7 +71,7 @@ class QueryTest extends \PHPUnit_Framework_TestCase
             []
         );
         $this->resourceMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [],
             '',
             false,
diff --git a/lib/internal/Magento/Framework/Data/Collection/AbstractDb.php b/lib/internal/Magento/Framework/Data/Collection/AbstractDb.php
index 675593cf53b5e36b8bf04c60949f5e7a2ffe18a4..339c76f06c25b140c0331bdf4ac1bc3778f8254b 100644
--- a/lib/internal/Magento/Framework/Data/Collection/AbstractDb.php
+++ b/lib/internal/Magento/Framework/Data/Collection/AbstractDb.php
@@ -117,7 +117,7 @@ abstract class AbstractDb extends \Magento\Framework\Data\Collection
     /**
      * Get resource instance.
      *
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     abstract public function getResource();
 
diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php b/lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php
index 1eb259438a5b2c39b1a9d82fc544ebc4fe828a52..c4f88313fc33915e8c80f76fe9e2b02567e2484a 100644
--- a/lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php
+++ b/lib/internal/Magento/Framework/Data/Form/Element/Checkboxes.php
@@ -194,10 +194,10 @@ class Checkboxes extends AbstractElement
     {
         $id = $this->getHtmlId() . '_' . $this->_escape($option['value']);
 
-        $html = '<div class="field choice"><input id="' . $id . '"';
+        $html = '<div class="field choice admin__field admin__field-option"><input id="' . $id . '"';
         foreach ($this->getHtmlAttributes() as $attribute) {
             if ($value = $this->getDataUsingMethod($attribute, $option['value'])) {
-                $html .= ' ' . $attribute . '="' . $value . '"';
+                $html .= ' ' . $attribute . '="' . $value . '" class="admin__control-checkbox"';
             }
         }
         $html .= ' value="' .
@@ -205,9 +205,9 @@ class Checkboxes extends AbstractElement
             '" />' .
             ' <label for="' .
             $id .
-            '">' .
+            '" class="admin__field-label"><span>' .
             $option['label'] .
-            '</label></div>' .
+            '</span></label></div>' .
             "\n";
         return $html;
     }
diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Editor.php b/lib/internal/Magento/Framework/Data/Form/Element/Editor.php
index 730f5c2810f87bf898337c574dbede96cb439020..9b33d71b7ca3bd79ed917ccabd7a53578f57df9f 100644
--- a/lib/internal/Magento/Framework/Data/Form/Element/Editor.php
+++ b/lib/internal/Magento/Framework/Data/Form/Element/Editor.php
@@ -252,7 +252,7 @@ class Editor extends Textarea
         if ($this->getConfig('add_widgets')) {
             $buttonsHtml .= $this->_getButtonHtml(
                 [
-                    'title' => $this->translate('Insert Frontend App...'),
+                    'title' => $this->translate('Insert Widget...'),
                     'onclick' => "widgetTools.openDialog('" . $this->getConfig(
                         'widget_window_url'
                     ) . "widget_target_id/" . $this->getHtmlId() . "')",
@@ -385,14 +385,14 @@ class Editor extends Textarea
     protected function _wrapIntoContainer($html)
     {
         if (!$this->getConfig('use_container')) {
-            return $html;
+            return '<div class="admin__control-wysiwig">' .$html . '</div>';
         }
 
         $html = '<div id="editor' . $this->getHtmlId() . '"' . ($this->getConfig(
             'no_display'
         ) ? ' style="display:none;"' : '') . ($this->getConfig(
             'container_class'
-        ) ? ' class="' . $this->getConfig(
+        ) ? ' class="admin__control-wysiwig ' . $this->getConfig(
             'container_class'
         ) . '"' : '') . '>' . $html . '</div>';
 
diff --git a/lib/internal/Magento/Framework/Data/Form/Element/Note.php b/lib/internal/Magento/Framework/Data/Form/Element/Note.php
index be04c5e2bea4300a1680c3088ca129299b77226e..06cad0f195e18a94ca19fb6a75983c6e676f19f0 100644
--- a/lib/internal/Magento/Framework/Data/Form/Element/Note.php
+++ b/lib/internal/Magento/Framework/Data/Form/Element/Note.php
@@ -39,7 +39,7 @@ class Note extends AbstractElement
         $html = $this->getBeforeElementHtml()
             . '<div id="'
             . $this->getHtmlId()
-            . '" class="control-value">'
+            . '" class="control-value admin__field-value">'
             . $this->getText()
             . '</div>'
             . $this->getAfterElementHtml();
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbCollection.php b/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbCollection.php
index 180a1858a7be91a6e3359cb9af65c73e5e7940e3..144ef6fe20dfcbd000dc41088b85c6f4b43fe244 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbCollection.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Collection/DbCollection.php
@@ -11,17 +11,17 @@ namespace Magento\Framework\Data\Test\Unit\Collection;
 class DbCollection extends \Magento\Framework\Data\Collection\AbstractDb
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     private $resource;
 
     /**
      * Set DB resource for testing purposes.
      *
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      * @return $this
      */
-    public function setResource(\Magento\Framework\Model\Resource\Db\AbstractDb $resource)
+    public function setResource(\Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource)
     {
         $this->resource = $resource;
         return $this;
@@ -30,7 +30,7 @@ class DbCollection extends \Magento\Framework\Data\Collection\AbstractDb
     /**
      * Get resource instance.
      *
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource()
     {
diff --git a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php
index 23e07bf7fb26c29d437b783bfe41b1d51c72340d..a76a244f1cebc86e3bb10264dead36fe8bdd7a4b 100644
--- a/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php
+++ b/lib/internal/Magento/Framework/Data/Test/Unit/Form/Element/NoteTest.php
@@ -63,7 +63,7 @@ class NoteTest extends \PHPUnit_Framework_TestCase
         $this->_model->setValue('Note Text');
         $html = $this->_model->getElementHtml();
         $this->assertEquals(
-            "note_before<div id=\"note_id\" class=\"control-value\"></div>note_after",
+            "note_before<div id=\"note_id\" class=\"control-value admin__field-value\"></div>note_after",
             $html
         );
     }
diff --git a/lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php b/lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php
index ede5035b9f945c5daaed59661a8afbd23f69b1a0..e6857ab67bbf396511aac0670cf9e36007e08322 100644
--- a/lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php
+++ b/lib/internal/Magento/Framework/Event/Invoker/InvokerDefault.php
@@ -58,24 +58,27 @@ class InvokerDefault implements \Magento\Framework\Event\InvokerInterface
         } else {
             $object = $this->_observerFactory->get($configuration['instance']);
         }
-        $this->_callObserverMethod($object, $configuration['method'], $observer);
+        $this->_callObserverMethod($object, $observer);
     }
 
     /**
-     * Performs non-existent observer method calls protection
-     *
-     * @param object $object
-     * @param string $method
+     * @param \Magento\Framework\Event\ObserverInterface $object
      * @param Observer $observer
      * @return $this
      * @throws \LogicException
      */
-    protected function _callObserverMethod($object, $method, $observer)
+    protected function _callObserverMethod($object, $observer)
     {
-        if (method_exists($object, $method) && is_callable([$object, $method])) {
-            $object->{$method}($observer);
+        if ($object instanceof \Magento\Framework\Event\ObserverInterface) {
+            $object->execute($observer);
         } elseif ($this->_appState->getMode() == \Magento\Framework\App\State::MODE_DEVELOPER) {
-            throw new \LogicException('Method "' . $method . '" is not defined in "' . get_class($object) . '"');
+            throw new \LogicException(
+                sprintf(
+                    'Observer "%s" must implement interface "%s"',
+                    get_class($object),
+                    'Magento\Framework\Event\ObserverInterface'
+                )
+            );
         }
         return $this;
     }
diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Config/SchemaLocatorTest.php b/lib/internal/Magento/Framework/Event/Test/Unit/Config/SchemaLocatorTest.php
index c57385fbf69f450b9bc78a846a7c722a8f790e21..f4f1136fb7f2368b75e54b438f239c6f655377de 100644
--- a/lib/internal/Magento/Framework/Event/Test/Unit/Config/SchemaLocatorTest.php
+++ b/lib/internal/Magento/Framework/Event/Test/Unit/Config/SchemaLocatorTest.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\Event\Test\Unit\Config;
 class SchemaLocatorTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\App\Resource\Config\SchemaLocator
+     * @var \Magento\Framework\App\ResourceConnection\Config\SchemaLocator
      */
     protected $model;
 
diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.php b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.php
index 8551d739e833b5ef74770445c831142a95f45ad2..141b0b4b927db70ce66719f71a761bc8f228abce 100644
--- a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.php
+++ b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.php
@@ -5,13 +5,12 @@
  */
 return [
     'event_1' => [
-        'observer_1' => ['instance' => 'instance_1', 'method' => 'method_name_1', 'name' => 'observer_1'],
-        'observer_5' => ['instance' => 'instance_5', 'method' => 'method_name_5', 'name' => 'observer_5'],
+        'observer_1' => ['instance' => 'instance_1', 'name' => 'observer_1'],
+        'observer_5' => ['instance' => 'instance_5', 'name' => 'observer_5'],
     ],
     'event_2' => [
         'observer_2' => [
             'instance' => 'instance_2',
-            'method' => 'method_name_2',
             'disabled' => true,
             'shared' => false,
             'name' => 'observer_2',
diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.xml b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.xml
index 35aaf442c1512d280c42f0fe8f19b00f91adfea6..87dcbc0d45972af1c811ce8daebbfccbd1de3d8a 100644
--- a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.xml
+++ b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/event_config.xml
@@ -7,10 +7,10 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="event_1">
-        <observer name="observer_1" instance="instance_1" method="method_name_1" />
-        <observer name="observer_5" instance="instance_5" method="method_name_5" disabled="false" shared="true" />
+        <observer name="observer_1" instance="instance_1" />
+        <observer name="observer_5" instance="instance_5" disabled="false" shared="true" />
     </event>
     <event name="event_2">
-        <observer name="observer_2" instance="instance_2" method="method_name_2" disabled="true" shared="false" />
+        <observer name="observer_2" instance="instance_2" disabled="true" shared="false" />
     </event>
 </config>
\ No newline at end of file
diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/invalidEventsXmlArray.php b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/invalidEventsXmlArray.php
index 0c243dc6ca3afd305f296aca6476c44fbc87bb4a..e74c0ddd8c76df31d7f477a03a07379c5d1a52c0 100644
--- a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/invalidEventsXmlArray.php
+++ b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/invalidEventsXmlArray.php
@@ -61,10 +61,7 @@ return [
         '<?xml version="1.0"?><config><event name="some_name"><observer ' .
         'name="observer_name" method="_wrong name"/></event></config>',
         [
-            "Element 'observer', attribute 'method': [facet 'pattern'] The value '_wrong name' is not accepted by" .
-            " the pattern '[a-zA-Z]+'.\nLine: 1\n",
-            "Element 'observer', attribute 'method': '_wrong name' is not a valid value of the atomic type " .
-            "'methodName'.\nLine: 1\n"
+            "Element 'observer', attribute 'method': The attribute 'method' is not allowed.\nLine: 1\n"
         ],
     ]
 ];
diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/valid_events.xml b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/valid_events.xml
index 88d806d805f38a711dd534075da09e23b9526e41..59f2c2a23c5c46f36533ba49f16ceb52bb783a4d 100644
--- a/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/valid_events.xml
+++ b/lib/internal/Magento/Framework/Event/Test/Unit/Config/_files/valid_events.xml
@@ -7,9 +7,9 @@
 -->
 <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Event/etc/events.xsd">
     <event name="authorization_roles_load_after">
-        <observer name="observer_name" instance="Some_Test_Value" method="addDataAfterRoleLoad" disabled="false" shared="true"/>
+        <observer name="observer_name" instance="Some_Test_Value" disabled="false" shared="true"/>
     </event>
     <event name="authorization_roles_save_before">
-        <observer name="second_name" instance="Some_Test_Value_Two" method="setDataBeforeRoleSave" />
+        <observer name="second_name" instance="Some_Test_Value_Two" />
     </event>
 </config>
diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/InvokerDefaultTest.php b/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/InvokerDefaultTest.php
index 92755a558a47772af20bbc3cd9d24396d6acfc7a..848ff601f825b8b469f7b4d5f7685ce673c8ab69 100644
--- a/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/InvokerDefaultTest.php
+++ b/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/InvokerDefaultTest.php
@@ -43,8 +43,8 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase
         );
         $this->_observerMock = $this->getMock('Magento\Framework\Event\Observer', [], [], '', false);
         $this->_listenerMock = $this->getMock(
-            'Magento_Some_Model_Observer_Some',
-            ['method_name'],
+            'Magento\Framework\Event\Test\Unit\Invoker\ObserverExample',
+            ['execute'],
             [],
             '',
             false
@@ -67,7 +67,7 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase
 
     public function testDispatchWithNonSharedInstance()
     {
-        $this->_listenerMock->expects($this->once())->method('method_name');
+        $this->_listenerMock->expects($this->once())->method('execute');
         $this->_observerFactoryMock->expects($this->never())->method('get');
         $this->_observerFactoryMock->expects(
             $this->once()
@@ -80,14 +80,14 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->_invokerDefault->dispatch(
-            ['shared' => false, 'instance' => 'class_name', 'method' => 'method_name', 'name' => 'observer'],
+            ['shared' => false, 'instance' => 'class_name', 'name' => 'observer'],
             $this->_observerMock
         );
     }
 
     public function testDispatchWithSharedInstance()
     {
-        $this->_listenerMock->expects($this->once())->method('method_name');
+        $this->_listenerMock->expects($this->once())->method('execute');
         $this->_observerFactoryMock->expects($this->never())->method('create');
         $this->_observerFactoryMock->expects(
             $this->once()
@@ -110,8 +110,9 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase
      * @dataProvider dataProviderForMethodIsNotDefined
      * @expectedException \LogicException
      */
-    public function testMethodIsNotDefinedExceptionWithEnabledDeveloperMode($shared)
+    public function testWrongInterfaceCallWithEnabledDeveloperMode($shared)
     {
+        $notObserver = $this->getMock('NotObserver');
         $this->_observerFactoryMock->expects(
             $this->any()
         )->method(
@@ -119,7 +120,7 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase
         )->with(
             'class_name'
         )->will(
-            $this->returnValue($this->_listenerMock)
+            $this->returnValue($notObserver)
         );
         $this->_observerFactoryMock->expects(
             $this->any()
@@ -128,7 +129,7 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase
         )->with(
             'class_name'
         )->will(
-            $this->returnValue($this->_listenerMock)
+            $this->returnValue($notObserver)
         );
         $this->_appStateMock->expects(
             $this->once()
@@ -142,7 +143,6 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase
             [
                 'shared' => $shared,
                 'instance' => 'class_name',
-                'method' => 'unknown_method_name',
                 'name' => 'observer',
             ],
             $this->_observerMock
@@ -153,8 +153,9 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase
      * @param string $shared
      * @dataProvider dataProviderForMethodIsNotDefined
      */
-    public function testMethodIsNotDefinedWithDisabledDeveloperMode($shared)
+    public function testWrongInterfaceCallWithDisabledDeveloperMode($shared)
     {
+        $notObserver = $this->getMock('NotObserver');
         $this->_observerFactoryMock->expects(
             $this->any()
         )->method(
@@ -162,7 +163,7 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase
         )->with(
             'class_name'
         )->will(
-            $this->returnValue($this->_listenerMock)
+            $this->returnValue($notObserver)
         );
         $this->_observerFactoryMock->expects(
             $this->any()
@@ -171,7 +172,7 @@ class InvokerDefaultTest extends \PHPUnit_Framework_TestCase
         )->with(
             'class_name'
         )->will(
-            $this->returnValue($this->_listenerMock)
+            $this->returnValue($notObserver)
         );
         $this->_appStateMock->expects(
             $this->once()
diff --git a/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/ObserverExample.php b/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/ObserverExample.php
new file mode 100644
index 0000000000000000000000000000000000000000..07ec3130da714a6eba23f6dcb65c561db0b703bd
--- /dev/null
+++ b/lib/internal/Magento/Framework/Event/Test/Unit/Invoker/ObserverExample.php
@@ -0,0 +1,21 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Event\Test\Unit\Invoker;
+
+use Magento\Framework\Event\Observer;
+use Magento\Framework\Event\ObserverInterface;
+
+class ObserverExample implements ObserverInterface
+{
+    /**
+     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     * @param Observer $observer
+     */
+    public function execute(Observer $observer)
+    {
+        //do nothing
+    }
+}
diff --git a/lib/internal/Magento/Framework/Event/etc/events.xsd b/lib/internal/Magento/Framework/Event/etc/events.xsd
index e5ba0aa6b2624762508710084b5c78aa93fd2b9f..aa75798b1080fbbe083a37dcd64dd4d7d6b67273 100644
--- a/lib/internal/Magento/Framework/Event/etc/events.xsd
+++ b/lib/internal/Magento/Framework/Event/etc/events.xsd
@@ -53,22 +53,10 @@
         </xs:annotation>
         <xs:attribute name="name" type="xs:string" use="required" />
         <xs:attribute name="instance" type="xs:string" use="optional" />
-        <xs:attribute name="method" type="methodName" use="optional" />
         <xs:attribute name="disabled" type="xs:boolean" use="optional" />
         <xs:attribute name="shared" type="xs:boolean" use="optional" />
     </xs:complexType>
 
-    <xs:simpleType name="methodName">
-        <xs:annotation>
-            <xs:documentation>
-                Method name can contain only English letters.
-            </xs:documentation>
-        </xs:annotation>
-        <xs:restriction base="xs:string">
-            <xs:pattern value="[a-zA-Z]+" />
-        </xs:restriction>
-    </xs:simpleType>
-
     <xs:simpleType name="eventName">
         <xs:annotation>
             <xs:documentation>
diff --git a/lib/internal/Magento/Framework/File/Uploader.php b/lib/internal/Magento/Framework/File/Uploader.php
index 9d41363799e1a562aac17bf16a2b63b2bc39914b..2eb6566f74f99ec5ef4b5f64e97ea0e302179303 100644
--- a/lib/internal/Magento/Framework/File/Uploader.php
+++ b/lib/internal/Magento/Framework/File/Uploader.php
@@ -223,7 +223,7 @@ class Uploader
         $this->_result = $this->_moveFile($this->_file['tmp_name'], $destinationFile);
 
         if ($this->_result) {
-            chmod($destinationFile, DriverInterface::WRITEABLE_DIRECTORY_MODE);
+            $this->chmod($destinationFile);
             if ($this->_enableFilesDispersion) {
                 $fileName = str_replace('\\', '/', self::_addDirSeparator($this->_dispretionPath)) . $fileName;
             }
@@ -239,6 +239,15 @@ class Uploader
         return $this->_result;
     }
 
+    /**
+     * @param string $file
+     * @return void
+     */
+    protected function chmod($file)
+    {
+        chmod($file, DriverInterface::WRITEABLE_DIRECTORY_MODE);
+    }
+
     /**
      * Move files from TMP folder into destination folder
      *
diff --git a/lib/internal/Magento/Framework/Filter/Test/Unit/Object/GridTest.php b/lib/internal/Magento/Framework/Filter/Test/Unit/DataObject/GridTest.php
similarity index 97%
rename from lib/internal/Magento/Framework/Filter/Test/Unit/Object/GridTest.php
rename to lib/internal/Magento/Framework/Filter/Test/Unit/DataObject/GridTest.php
index 7c312da712e624f2951738263df50b47d473459f..dda2fc47cc134588532d8ba41f82bd9d33fab86c 100644
--- a/lib/internal/Magento/Framework/Filter/Test/Unit/Object/GridTest.php
+++ b/lib/internal/Magento/Framework/Filter/Test/Unit/DataObject/GridTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Filter\Test\Unit\Object;
+namespace Magento\Framework\Filter\Test\Unit\DataObject;
 
 use \Magento\Framework\Filter\DataObject\Grid;
 
diff --git a/lib/internal/Magento/Framework/Flag.php b/lib/internal/Magento/Framework/Flag.php
index f620084efb7c57597de47a11d62d76ed8e0b2e8b..0f3a8b31b2bd9d5ca81a80ed97f5a6784de4a67f 100644
--- a/lib/internal/Magento/Framework/Flag.php
+++ b/lib/internal/Magento/Framework/Flag.php
@@ -8,8 +8,8 @@ namespace Magento\Framework;
 /**
  * Flag model
  *
- * @method \Magento\Framework\Flag\Resource _getResource()
- * @method \Magento\Framework\Flag\Resource getResource()
+ * @method \Magento\Framework\Flag\FlagResource _getResource()
+ * @method \Magento\Framework\Flag\FlagResource getResource()
  * @method string getFlagCode()
  * @method \Magento\Framework\Flag setFlagCode(string $value)
  * @method int getState()
@@ -37,7 +37,7 @@ class Flag extends Model\AbstractModel
         if ($this->hasData('flag_code')) {
             $this->_flagCode = $this->getData('flag_code');
         }
-        $this->_init('Magento\Framework\Flag\Resource');
+        $this->_init('Magento\Framework\Flag\FlagResource');
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Flag/Resource.php b/lib/internal/Magento/Framework/Flag/FlagResource.php
similarity index 80%
rename from lib/internal/Magento/Framework/Flag/Resource.php
rename to lib/internal/Magento/Framework/Flag/FlagResource.php
index c1f4a1079841be17b74d6b85aa99d0001bea2436..730fee2e5d28652201bd6bd5311e978a61e21567 100644
--- a/lib/internal/Magento/Framework/Flag/Resource.php
+++ b/lib/internal/Magento/Framework/Flag/FlagResource.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\Flag;
 /**
  * Flag Resource model
  */
-class Resource extends \Magento\Framework\Model\Resource\Db\AbstractDb
+class FlagResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * Define main table
diff --git a/lib/internal/Magento/Framework/HTTP/Client.php b/lib/internal/Magento/Framework/HTTP/Client.php
deleted file mode 100644
index c22798849280cfb1baa4e9d0064f66403675af65..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/HTTP/Client.php
+++ /dev/null
@@ -1,58 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-
-/**
- * Factory for HTTP client classes
- *
- * @author      Magento Core Team <core@magentocommerce.com>
- */
-namespace Magento\Framework\HTTP;
-
-class Client
-{
-    /**
-     * Disallow to instantiate - pvt constructor
-     */
-    private function __construct()
-    {
-    }
-
-    /**
-     * Factory for HTTP client
-     * @param string/false $frontend  'curl'/'socket' or false for auto-detect
-     * @return \Magento\Framework\HTTP\ClientInterface
-     */
-    public static function getInstance($frontend = false)
-    {
-        if (false === $frontend) {
-            $frontend = self::detectFrontend();
-        }
-        if (false === $frontend) {
-            throw new \Exception("Cannot find frontend automatically, set it manually");
-        }
-
-        $class = __CLASS__ . "_" . str_replace(' ', '/', ucwords(str_replace('_', ' ', $frontend)));
-        $obj = new $class();
-        return $obj;
-    }
-
-    /**
-     * Detects frontend type.
-     * Priority is given to CURL
-     *
-     * @return string/bool
-     */
-    protected static function detectFrontend()
-    {
-        if (function_exists("curl_init")) {
-            return "curl";
-        }
-        if (function_exists("fsockopen")) {
-            return "socket";
-        }
-        return false;
-    }
-}
diff --git a/lib/internal/Magento/Framework/HTTP/ClientFactory.php b/lib/internal/Magento/Framework/HTTP/ClientFactory.php
new file mode 100644
index 0000000000000000000000000000000000000000..6ececf68bd17893a1ae1c2d083643d8dac176944
--- /dev/null
+++ b/lib/internal/Magento/Framework/HTTP/ClientFactory.php
@@ -0,0 +1,54 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+namespace Magento\Framework\HTTP;
+
+/**
+ * Factory for HTTP client classes
+ *
+ * @author      Magento Core Team <core@magentocommerce.com>
+ */
+class ClientFactory
+{
+    /**
+     * Object Manager instance
+     *
+     * @var \Magento\Framework\ObjectManagerInterface
+     */
+    protected $_objectManager = null;
+
+    /**
+     * Instance name to create
+     *
+     * @var string
+     */
+    protected $_instanceName = null;
+
+    /**
+     * Factory constructor (default creates Curl client)
+     *
+     * @param \Magento\Framework\ObjectManagerInterface $objectManager
+     * @param string $instanceName
+     */
+    public function __construct(
+        \Magento\Framework\ObjectManagerInterface $objectManager,
+        $instanceName = 'Magento\Framework\HTTP\Client\Curl'
+    ) {
+        $this->_objectManager = $objectManager;
+        $this->_instanceName = $instanceName;
+    }
+
+    /**
+     * Create class instance with specified parameters
+     *
+     * @param array $data
+     * @return \Magento\Framework\Flag
+     */
+    public function create(array $data = [])
+    {
+        return $this->_objectManager->create($this->_instanceName, $data);
+    }
+}
diff --git a/lib/internal/Magento/Framework/Indexer/Action/Base.php b/lib/internal/Magento/Framework/Indexer/Action/Base.php
index 44628589c4c5b58be93bce1b472896d9856297ee..b92eb3bbf589f68f24b8d46ecfaa6c382f91b9eb 100644
--- a/lib/internal/Magento/Framework/Indexer/Action/Base.php
+++ b/lib/internal/Magento/Framework/Indexer/Action/Base.php
@@ -5,8 +5,8 @@
  */
 namespace Magento\Framework\Indexer\Action;
 
-use Magento\Framework\App\Resource as AppResource;
-use Magento\Framework\App\Resource\SourceProviderInterface;
+use Magento\Framework\App\ResourceConnection as AppResource;
+use Magento\Framework\App\ResourceConnection\SourceProviderInterface;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\DB\Ddl\Table;
 use Magento\Framework\Indexer\SaveHandler\IndexerInterface;
@@ -16,7 +16,7 @@ use Magento\Framework\Indexer\FieldsetPool;
 use Magento\Framework\Indexer\HandlerPool;
 use Magento\Framework\Indexer\IndexStructureInterface;
 use Magento\Framework\Indexer\SaveHandlerFactory;
-use Magento\Framework\App\Resource\SourceFactory;
+use Magento\Framework\App\ResourceConnection\SourceFactory;
 use Magento\Framework\Indexer\HandlerInterface;
 
 /**
diff --git a/lib/internal/Magento/Framework/Indexer/Action/Entity.php b/lib/internal/Magento/Framework/Indexer/Action/Entity.php
index fb415fc0164c692e5630c60db41aaf2f96c7a941..5c0bd21d6ae5b53103c5a11daeaa6d4437515c38 100644
--- a/lib/internal/Magento/Framework/Indexer/Action/Entity.php
+++ b/lib/internal/Magento/Framework/Indexer/Action/Entity.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Indexer\Action;
 
-use Magento\Framework\App\Resource\SourceProviderInterface;
+use Magento\Framework\App\ResourceConnection\SourceProviderInterface;
 
 class Entity extends Base
 {
diff --git a/lib/internal/Magento/Framework/Indexer/GridStructure.php b/lib/internal/Magento/Framework/Indexer/GridStructure.php
index bdc321752fb08bfa4d6366882d52685fb5d1f83c..d40dc7743a0c58d595daf7b3d143ddde0b27903c 100644
--- a/lib/internal/Magento/Framework/Indexer/GridStructure.php
+++ b/lib/internal/Magento/Framework/Indexer/GridStructure.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Indexer;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Ddl\Table;
 use Magento\Framework\Search\Request\Dimension;
 use Magento\Framework\DB\Adapter\AdapterInterface;
@@ -36,12 +36,12 @@ class GridStructure implements IndexStructureInterface
     ];
 
     /**
-     * @param Resource|Resource $resource
+     * @param ResourceConnection $resource
      * @param FlatScopeResolver $flatScopeResolver
      * @param array $columnTypesMap
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         FlatScopeResolver $flatScopeResolver,
         array $columnTypesMap = []
     ) {
diff --git a/lib/internal/Magento/Framework/Indexer/Handler/AttributeHandler.php b/lib/internal/Magento/Framework/Indexer/Handler/AttributeHandler.php
index 602c264ad7a1da61a3559fccfe5ca2eef4b6990e..85271945ed0441173e14a01986e1a658d9c9be05 100644
--- a/lib/internal/Magento/Framework/Indexer/Handler/AttributeHandler.php
+++ b/lib/internal/Magento/Framework/Indexer/Handler/AttributeHandler.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Indexer\Handler;
 
-use Magento\Framework\App\Resource\SourceProviderInterface;
+use Magento\Framework\App\ResourceConnection\SourceProviderInterface;
 use Magento\Framework\Indexer\HandlerInterface;
 
 class AttributeHandler implements HandlerInterface
diff --git a/lib/internal/Magento/Framework/Indexer/Handler/ConcatHandler.php b/lib/internal/Magento/Framework/Indexer/Handler/ConcatHandler.php
index 18f1db4d7663d40af7068fa12bfdae29bf7bb866..0bc235872f03fb50906a184fb11ace9c5613e0cf 100644
--- a/lib/internal/Magento/Framework/Indexer/Handler/ConcatHandler.php
+++ b/lib/internal/Magento/Framework/Indexer/Handler/ConcatHandler.php
@@ -6,7 +6,7 @@
 namespace Magento\Framework\Indexer\Handler;
 
 use Magento\Framework\Indexer\HandlerInterface;
-use Magento\Framework\App\Resource\SourceProviderInterface;
+use Magento\Framework\App\ResourceConnection\SourceProviderInterface;
 
 class ConcatHandler implements HandlerInterface
 {
diff --git a/lib/internal/Magento/Framework/Indexer/Handler/DefaultHandler.php b/lib/internal/Magento/Framework/Indexer/Handler/DefaultHandler.php
index a053db4bef817cf4ebc1f26c5dbc9532ba3bcdb2..37513c60c40aa4701b7426292e414d431ae66131 100644
--- a/lib/internal/Magento/Framework/Indexer/Handler/DefaultHandler.php
+++ b/lib/internal/Magento/Framework/Indexer/Handler/DefaultHandler.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Indexer\Handler;
 
-use Magento\Framework\App\Resource\SourceProviderInterface;
+use Magento\Framework\App\ResourceConnection\SourceProviderInterface;
 use Magento\Framework\Indexer\HandlerInterface;
 
 class DefaultHandler implements HandlerInterface
diff --git a/lib/internal/Magento/Framework/Indexer/HandlerInterface.php b/lib/internal/Magento/Framework/Indexer/HandlerInterface.php
index 05a334c788f589a49f65e0c8903a1a6bbd9666e2..50c07c3a8ad5dd245423557ac048b467a9f02f10 100644
--- a/lib/internal/Magento/Framework/Indexer/HandlerInterface.php
+++ b/lib/internal/Magento/Framework/Indexer/HandlerInterface.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Indexer;
 
-use Magento\Framework\App\Resource\SourceProviderInterface;
+use Magento\Framework\App\ResourceConnection\SourceProviderInterface;
 
 interface HandlerInterface
 {
diff --git a/lib/internal/Magento/Framework/Indexer/IndexStructure.php b/lib/internal/Magento/Framework/Indexer/IndexStructure.php
index f07090e5e821a888f2d9c1d22eeb3d4a9e34abd7..ee7ad762d2e280737de04da479c4cf88c596e8c0 100644
--- a/lib/internal/Magento/Framework/Indexer/IndexStructure.php
+++ b/lib/internal/Magento/Framework/Indexer/IndexStructure.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\Indexer;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\DB\Ddl\Table;
 use Magento\Framework\Search\Request\Dimension;
@@ -38,13 +38,13 @@ class IndexStructure implements IndexStructureInterface
     ];
 
     /**
-     * @param Resource|Resource $resource
+     * @param ResourceConnection $resource
      * @param IndexScopeResolver $indexScopeResolver
      * @param \Magento\Framework\Indexer\ScopeResolver\FlatScopeResolver $flatScopeResolver
      * @param array $columnTypesMap
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         IndexScopeResolver $indexScopeResolver,
         FlatScopeResolver $flatScopeResolver,
         array $columnTypesMap = []
diff --git a/lib/internal/Magento/Framework/Indexer/SaveHandler/IndexerHandler.php b/lib/internal/Magento/Framework/Indexer/SaveHandler/IndexerHandler.php
index cabda6c830c61373cc752a7f72d7e345521909ed..8f6409ebcd8929577d03f452b03dc294c18040ae 100644
--- a/lib/internal/Magento/Framework/Indexer/SaveHandler/IndexerHandler.php
+++ b/lib/internal/Magento/Framework/Indexer/SaveHandler/IndexerHandler.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Indexer\SaveHandler;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\Search\Request\Dimension;
 use Magento\Framework\Search\Request\IndexScopeResolverInterface;
@@ -64,7 +64,7 @@ class IndexerHandler implements IndexerInterface
 
     /**
      * @param IndexStructureInterface $indexStructure
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param Batch $batch
      * @param \Magento\Framework\Indexer\ScopeResolver\IndexScopeResolver $indexScopeResolver
      * @param \Magento\Framework\Indexer\ScopeResolver\FlatScopeResolver $flatScopeResolver
@@ -73,7 +73,7 @@ class IndexerHandler implements IndexerInterface
      */
     public function __construct(
         IndexStructureInterface $indexStructure,
-        Resource $resource,
+        ResourceConnection $resource,
         Batch $batch,
         IndexScopeResolver $indexScopeResolver,
         FlatScopeResolver $flatScopeResolver,
diff --git a/lib/internal/Magento/Framework/Indexer/ScopeResolver/IndexScopeResolver.php b/lib/internal/Magento/Framework/Indexer/ScopeResolver/IndexScopeResolver.php
index a5f1a4657670b3f6ed265b9b4d29388bcb09d1e6..40e669b6d4871f6f9c9013a011d8ae947660a19f 100644
--- a/lib/internal/Magento/Framework/Indexer/ScopeResolver/IndexScopeResolver.php
+++ b/lib/internal/Magento/Framework/Indexer/ScopeResolver/IndexScopeResolver.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\Indexer\ScopeResolver;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\App\ScopeResolverInterface;
 use Magento\Framework\Search\Request\Dimension;
 use Magento\Framework\Search\Request\IndexScopeResolverInterface;
@@ -24,11 +24,11 @@ class IndexScopeResolver implements IndexScopeResolverInterface
     private $scopeResolver;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param ScopeResolverInterface $scopeResolver
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         ScopeResolverInterface $scopeResolver
     ) {
         $this->resource = $resource;
diff --git a/lib/internal/Magento/Framework/Indexer/Table/Strategy.php b/lib/internal/Magento/Framework/Indexer/Table/Strategy.php
index 6abcfb1c6afdcecacd8df418fa1162ea829b16fa..b83dacd951abb1a60be369ce9b37d092b43f01d6 100644
--- a/lib/internal/Magento/Framework/Indexer/Table/Strategy.php
+++ b/lib/internal/Magento/Framework/Indexer/Table/Strategy.php
@@ -14,17 +14,17 @@ class Strategy implements StrategyInterface
     /**
      * Application resource
      *
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $resource;
 
     /**
      * Constructor
      *
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource
+        \Magento\Framework\App\ResourceConnection $resource
     ) {
         $this->resource = $resource;
     }
diff --git a/lib/internal/Magento/Framework/Indexer/Test/Unit/Config/SchemaLocatorTest.php b/lib/internal/Magento/Framework/Indexer/Test/Unit/Config/SchemaLocatorTest.php
index cc112a7f0a83e4432fca872165790690dcb5cb69..67c8e74c8bea46b711d47118eb7b65c04f099a95 100644
--- a/lib/internal/Magento/Framework/Indexer/Test/Unit/Config/SchemaLocatorTest.php
+++ b/lib/internal/Magento/Framework/Indexer/Test/Unit/Config/SchemaLocatorTest.php
@@ -9,7 +9,7 @@ class SchemaLocatorTest extends \PHPUnit_Framework_TestCase
 {
 
     /**
-     * @var \Magento\Framework\App\Resource\Config\SchemaLocator
+     * @var \Magento\Framework\App\ResourceConnection\Config\SchemaLocator
      */
     protected $model;
 
diff --git a/lib/internal/Magento/Framework/Indexer/Test/Unit/GridStructureTest.php b/lib/internal/Magento/Framework/Indexer/Test/Unit/GridStructureTest.php
index cd69aa0160573648247f2020c29b8309f2e329a4..4851704cf863887ed3a6035ec5a0e061705590e4 100644
--- a/lib/internal/Magento/Framework/Indexer/Test/Unit/GridStructureTest.php
+++ b/lib/internal/Magento/Framework/Indexer/Test/Unit/GridStructureTest.php
@@ -12,7 +12,7 @@ use Magento\Framework\DB\Ddl\Table;
 class GridStructureTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resource;
 
@@ -35,7 +35,7 @@ class GridStructureTest extends \PHPUnit_Framework_TestCase
     {
         $this->connection = $this->getMockBuilder('Magento\Framework\DB\Adapter\AdapterInterface')
             ->getMock();
-        $this->resource = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->flatScopeResolver = $this->getMockBuilder('Magento\Framework\Indexer\ScopeResolver\FlatScopeResolver')
diff --git a/lib/internal/Magento/Framework/Indexer/Test/Unit/IndexStructureTest.php b/lib/internal/Magento/Framework/Indexer/Test/Unit/IndexStructureTest.php
index 2325db5c326f2a4f5d0ab720222485aa643935d9..c5aaf49b81cd97779d4161ceaaff831ea65d062d 100644
--- a/lib/internal/Magento/Framework/Indexer/Test/Unit/IndexStructureTest.php
+++ b/lib/internal/Magento/Framework/Indexer/Test/Unit/IndexStructureTest.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\Indexer\Test\Unit;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\DB\Ddl\Table;
 use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
@@ -27,7 +27,7 @@ class IndexStructureTest extends \PHPUnit_Framework_TestCase
     private $flatScopeResolver;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
 
@@ -46,7 +46,7 @@ class IndexStructureTest extends \PHPUnit_Framework_TestCase
         $this->connectionInterface = $this->getMockBuilder('\Magento\Framework\DB\Adapter\AdapterInterface')
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
-        $this->resource = $this->getMockBuilder('\Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('\Magento\Framework\App\ResourceConnection')
             ->setMethods(['getConnection'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/lib/internal/Magento/Framework/Indexer/Test/Unit/ScopeResolver/IndexScopeResolverTest.php b/lib/internal/Magento/Framework/Indexer/Test/Unit/ScopeResolver/IndexScopeResolverTest.php
index b34a4e1bd47f7518da898af536ca75fbdcad51f6..2370ab42c73ba150d2c120b81701d2c08f677368 100644
--- a/lib/internal/Magento/Framework/Indexer/Test/Unit/ScopeResolver/IndexScopeResolverTest.php
+++ b/lib/internal/Magento/Framework/Indexer/Test/Unit/ScopeResolver/IndexScopeResolverTest.php
@@ -20,7 +20,7 @@ class IndexScopeResolverTest extends \PHPUnit_Framework_TestCase
     protected $scopeResolver;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
 
@@ -31,7 +31,7 @@ class IndexScopeResolverTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->resource = $this->getMockBuilder('\Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('\Magento\Framework\App\ResourceConnection')
             ->setMethods(['getTableName'])
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
diff --git a/lib/internal/Magento/Framework/Indexer/Test/Unit/StrategyTest.php b/lib/internal/Magento/Framework/Indexer/Test/Unit/StrategyTest.php
index fd4f9a1da1300d135f681edd4e766669e35b86d0..80b42a8f5ea86fc8143c9a2b9a188fda8b7d079a 100644
--- a/lib/internal/Magento/Framework/Indexer/Test/Unit/StrategyTest.php
+++ b/lib/internal/Magento/Framework/Indexer/Test/Unit/StrategyTest.php
@@ -21,7 +21,7 @@ class StrategyTest extends \PHPUnit_Framework_TestCase
     /**
      * Resource mock
      *
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $_resourceMock;
 
@@ -31,7 +31,7 @@ class StrategyTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->_resourceMock = $this->getMock(
-            '\Magento\Framework\App\Resource',
+            '\Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
diff --git a/lib/internal/Magento/Framework/Model/AbstractExtensibleModel.php b/lib/internal/Magento/Framework/Model/AbstractExtensibleModel.php
index 4e0efcdcd0d9bb49ca19661abe806453b65b30a5..24802ef1ac110d72e91c1af0e40c527843dce481 100644
--- a/lib/internal/Magento/Framework/Model/AbstractExtensibleModel.php
+++ b/lib/internal/Magento/Framework/Model/AbstractExtensibleModel.php
@@ -48,7 +48,7 @@ abstract class AbstractExtensibleModel extends AbstractModel implements
      * @param \Magento\Framework\Registry $registry
      * @param \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory
      * @param AttributeValueFactory $customAttributeFactory
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
@@ -57,7 +57,7 @@ abstract class AbstractExtensibleModel extends AbstractModel implements
         \Magento\Framework\Registry $registry,
         \Magento\Framework\Api\ExtensionAttributesFactory $extensionFactory,
         AttributeValueFactory $customAttributeFactory,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
diff --git a/lib/internal/Magento/Framework/Model/AbstractModel.php b/lib/internal/Magento/Framework/Model/AbstractModel.php
index 22c94a0fa18f988ead8ad8bf34cddb21466e4755..f72c455daf860caec4e77dbf71c901832015dec7 100644
--- a/lib/internal/Magento/Framework/Model/AbstractModel.php
+++ b/lib/internal/Magento/Framework/Model/AbstractModel.php
@@ -62,14 +62,14 @@ abstract class AbstractModel extends \Magento\Framework\DataObject
     /**
      * Resource model instance
      *
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $_resource;
 
     /**
      * Resource collection
      *
-     * @var \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @var \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     protected $_resourceCollection;
 
@@ -163,14 +163,14 @@ abstract class AbstractModel extends \Magento\Framework\DataObject
     /**
      * @param \Magento\Framework\Model\Context $context
      * @param \Magento\Framework\Registry $registry
-     * @param \Magento\Framework\Model\Resource\AbstractResource $resource
+     * @param \Magento\Framework\Model\ResourceModel\AbstractResource $resource
      * @param \Magento\Framework\Data\Collection\AbstractDb $resourceCollection
      * @param array $data
      */
     public function __construct(
         \Magento\Framework\Model\Context $context,
         \Magento\Framework\Registry $registry,
-        \Magento\Framework\Model\Resource\AbstractResource $resource = null,
+        \Magento\Framework\Model\ResourceModel\AbstractResource $resource = null,
         \Magento\Framework\Data\Collection\AbstractDb $resourceCollection = null,
         array $data = []
     ) {
@@ -448,7 +448,7 @@ abstract class AbstractModel extends \Magento\Framework\DataObject
      * Get resource instance
      *
      * @throws \Magento\Framework\Exception\LocalizedException
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected function _getResource()
     {
@@ -476,7 +476,7 @@ abstract class AbstractModel extends \Magento\Framework\DataObject
      *
      * @TODO MAGETWO-23541: Incorrect dependencies between Model\AbstractModel and Data\Collection\Db from Framework
      * @throws \Magento\Framework\Exception\LocalizedException
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getResourceCollection()
     {
@@ -496,7 +496,7 @@ abstract class AbstractModel extends \Magento\Framework\DataObject
      * Retrieve collection instance
      *
      * @TODO MAGETWO-23541: Incorrect dependencies between Model\AbstractModel and Data\Collection\Db from Framework
-     * @return \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+     * @return \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
      */
     public function getCollection()
     {
@@ -849,7 +849,7 @@ abstract class AbstractModel extends \Magento\Framework\DataObject
     /**
      * Retrieve model resource
      *
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource()
     {
diff --git a/lib/internal/Magento/Framework/Model/Resource/Type/Db.php b/lib/internal/Magento/Framework/Model/Resource/Type/Db.php
deleted file mode 100644
index aa1b722d6a2f8c4435c093bb0419a19cd7aaf6fb..0000000000000000000000000000000000000000
--- a/lib/internal/Magento/Framework/Model/Resource/Type/Db.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-namespace Magento\Framework\Model\Resource\Type;
-
-abstract class Db extends \Magento\Framework\Model\Resource\Type\AbstractType
-{
-    /**
-     * Constructor
-     */
-    public function __construct()
-    {
-        $this->_entityClass = 'Magento\Framework\Model\Resource\Entity\Table';
-    }
-}
diff --git a/lib/internal/Magento/Framework/Model/Resource/AbstractResource.php b/lib/internal/Magento/Framework/Model/ResourceModel/AbstractResource.php
similarity index 99%
rename from lib/internal/Magento/Framework/Model/Resource/AbstractResource.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/AbstractResource.php
index f9b4a011a461038f970a8cb79dc2c468af4512c0..ccd2131de93d839b1436678611b9919ca9f7b1b5 100644
--- a/lib/internal/Magento/Framework/Model/Resource/AbstractResource.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/AbstractResource.php
@@ -6,7 +6,7 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Model\Resource;
+namespace Magento\Framework\Model\ResourceModel;
 
 /**
  * Abstract resource model
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/AbstractDb.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/AbstractDb.php
similarity index 97%
rename from lib/internal/Magento/Framework/Model/Resource/Db/AbstractDb.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/AbstractDb.php
index 204f868d442bf5dc7375bb24ba2397ce60f97762..6f25689747e99f16b3cc6502a655cf165f29228e 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/AbstractDb.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/AbstractDb.php
@@ -4,12 +4,12 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\Resource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Exception\AlreadyExistsException;
 use Magento\Framework\Exception\LocalizedException;
-use Magento\Framework\Model\Resource\AbstractResource;
+use Magento\Framework\Model\ResourceModel\AbstractResource;
 
 /**
  * Abstract resource model class
@@ -22,7 +22,7 @@ abstract class AbstractDb extends AbstractResource
     /**
      * Cached resources singleton
      *
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resources;
 
@@ -31,7 +31,7 @@ abstract class AbstractDb extends AbstractResource
      *
      * @var string
      */
-    protected $connectionName = \Magento\Framework\App\Resource::DEFAULT_CONNECTION;
+    protected $connectionName = \Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION;
 
     /**
      * Connections cache for this resource model
@@ -133,10 +133,10 @@ abstract class AbstractDb extends AbstractResource
     /**
      * Class constructor
      *
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param string $connectionName
      */
-    public function __construct(\Magento\Framework\Model\Resource\Db\Context $context, $connectionName = null)
+    public function __construct(\Magento\Framework\Model\ResourceModel\Db\Context $context, $connectionName = null)
     {
         $this->transactionManager = $context->getTransactionManager();
         $this->_resources = $context->getResources();
@@ -166,7 +166,8 @@ abstract class AbstractDb extends AbstractResource
      */
     public function __wakeup()
     {
-        $this->_resources = \Magento\Framework\App\ObjectManager::getInstance()->get('Magento\Framework\App\Resource');
+        $this->_resources = \Magento\Framework\App\ObjectManager::getInstance()
+            ->get('Magento\Framework\App\ResourceConnection');
     }
 
     /**
@@ -317,7 +318,7 @@ abstract class AbstractDb extends AbstractResource
      */
     public function getConnection()
     {
-        $fullResourceName = ($this->connectionName ? $this->connectionName : Resource::DEFAULT_CONNECTION);
+        $fullResourceName = ($this->connectionName ? $this->connectionName : ResourceConnection::DEFAULT_CONNECTION);
         return $this->_resources->getConnection($fullResourceName);
     }
 
@@ -768,7 +769,9 @@ abstract class AbstractDb extends AbstractResource
         }
         $this->getConnection()->insert($this->getMainTable(), $bind);
 
-        $object->setId($this->getConnection()->lastInsertId($this->getMainTable()));
+        if ($this->_isPkAutoIncrement) {
+            $object->setId($this->getConnection()->lastInsertId($this->getMainTable()));
+        }
 
         if ($this->_useIsObjectNew) {
             $object->isObjectNew(false);
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/Collection/AbstractCollection.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractCollection.php
similarity index 97%
rename from lib/internal/Magento/Framework/Model/Resource/Db/Collection/AbstractCollection.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractCollection.php
index 5fc3c8428ffac4d1aad60b1beb8603e0d4c98771..582d6c79f64e0fc40b86f02477b61ceabc81c209 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/Collection/AbstractCollection.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Collection/AbstractCollection.php
@@ -6,8 +6,8 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Model\Resource\Db\Collection;
-use Magento\Framework\App\Resource\SourceProviderInterface;
+namespace Magento\Framework\Model\ResourceModel\Db\Collection;
+use Magento\Framework\App\ResourceConnection\SourceProviderInterface;
 
 /**
  * Abstract Resource Collection
@@ -33,7 +33,7 @@ abstract class AbstractCollection extends \Magento\Framework\Data\Collection\Abs
     /**
      * Resource instance
      *
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $_resource;
 
@@ -106,7 +106,7 @@ abstract class AbstractCollection extends \Magento\Framework\Data\Collection\Abs
      * @param \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
@@ -114,7 +114,7 @@ abstract class AbstractCollection extends \Magento\Framework\Data\Collection\Abs
         \Magento\Framework\Data\Collection\Db\FetchStrategyInterface $fetchStrategy,
         \Magento\Framework\Event\ManagerInterface $eventManager,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->_eventManager = $eventManager;
         parent::__construct($entityFactory, $logger, $fetchStrategy, $connection);
@@ -455,7 +455,7 @@ abstract class AbstractCollection extends \Magento\Framework\Data\Collection\Abs
     /**
      * Get resource instance
      *
-     * @return \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @return \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     public function getResource()
     {
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/Context.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Context.php
similarity index 82%
rename from lib/internal/Magento/Framework/Model/Resource/Db/Context.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/Context.php
index 916fefdec796698be5e2da6a1671a6a49febf191..13877e882e989e667213c71c86a8c4cc8b9f8651 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/Context.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Context.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
  
-namespace Magento\Framework\Model\Resource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 /**
  * @codeCoverageIgnore
@@ -12,7 +12,7 @@ namespace Magento\Framework\Model\Resource\Db;
 class Context implements \Magento\Framework\ObjectManager\ContextInterface
 {
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $resources;
 
@@ -27,12 +27,12 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     protected $objectRelationProcessor;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param TransactionManagerInterface $transactionManager
      * @param ObjectRelationProcessor $objectRelationProcessor
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         TransactionManagerInterface $transactionManager,
         ObjectRelationProcessor $objectRelationProcessor
     ) {
@@ -42,7 +42,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     }
 
     /**
-     * @return \Magento\Framework\App\Resource
+     * @return \Magento\Framework\App\ResourceConnection
      */
     public function getResources()
     {
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/ObjectRelationProcessor.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/ObjectRelationProcessor.php
similarity index 95%
rename from lib/internal/Magento/Framework/Model/Resource/Db/ObjectRelationProcessor.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/ObjectRelationProcessor.php
index 5b3f620d9606b4f2b5d0146509966eed99f25ed7..89ec37c6bf0f9d0ed9d56f857377cfa507d206cb 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/ObjectRelationProcessor.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/ObjectRelationProcessor.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\Resource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 use Magento\Framework\DB\Adapter\AdapterInterface as Connection;
 
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/Profiler.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Profiler.php
similarity index 92%
rename from lib/internal/Magento/Framework/Model/Resource/Db/Profiler.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/Profiler.php
index 9215d81aff3e6e68b1d76939ef9956a9fe324d33..0ae0f5ea4c37398311e1aeee2df11d36c465a98f 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/Profiler.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/Profiler.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 class Profiler extends \Magento\Framework\DB\Profiler
 {
@@ -33,7 +33,7 @@ class Profiler extends \Magento\Framework\DB\Profiler
     protected function _getTimerName($operation)
     {
         // default name of connection type
-        $timerName = \Magento\Framework\Model\Resource\Db\Profiler::DEFAULT_CONNECTION_TYPE;
+        $timerName = \Magento\Framework\Model\ResourceModel\Db\Profiler::DEFAULT_CONNECTION_TYPE;
 
         // connection type to database
         if (!empty($this->_type)) {
@@ -48,7 +48,7 @@ class Profiler extends \Magento\Framework\DB\Profiler
             $timerName .= '_' . $this->_host;
         }
 
-        return \Magento\Framework\Model\Resource\Db\Profiler::TIMER_PREFIX . ':' . $timerName;
+        return \Magento\Framework\Model\ResourceModel\Db\Profiler::TIMER_PREFIX . ':' . $timerName;
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/TransactionManager.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManager.php
similarity index 96%
rename from lib/internal/Magento/Framework/Model/Resource/Db/TransactionManager.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManager.php
index b25178ef0dc385c788df0f437d5318525b3896d8..920eca7e94155779cd7b9784c832ec1ff28c3279 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/TransactionManager.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManager.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\Resource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 use Magento\Framework\DB\Adapter\AdapterInterface as Connection;
 
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/TransactionManagerInterface.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManagerInterface.php
similarity index 91%
rename from lib/internal/Magento/Framework/Model/Resource/Db/TransactionManagerInterface.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManagerInterface.php
index 60dfc736f532edf47b6752e813f38fed9c714d92..e4e72c8999a474228bb8cd1562d1e74737e3fcf4 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/TransactionManagerInterface.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/TransactionManagerInterface.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\Resource\Db;
+namespace Magento\Framework\Model\ResourceModel\Db;
 
 use Magento\Framework\DB\Adapter\AdapterInterface as Connection;
 
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/AbstractDb.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/AbstractDb.php
similarity index 89%
rename from lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/AbstractDb.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/AbstractDb.php
index 39964c571eabe9ef6368572ed5ac2d56f3cb39a4..b6da084e2b7710736fa5579b5466a67c448c77bd 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/AbstractDb.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/AbstractDb.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Db\VersionControl;
+namespace Magento\Framework\Model\ResourceModel\Db\VersionControl;
 
 /**
  * Class AbstractDb with snapshot saving and relation save processing
  */
-abstract class AbstractDb extends \Magento\Framework\Model\Resource\Db\AbstractDb
+abstract class AbstractDb extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb
 {
     /**
      * @var Snapshot
@@ -23,11 +23,11 @@ abstract class AbstractDb extends \Magento\Framework\Model\Resource\Db\AbstractD
     /**
      * @param Snapshot $entitySnapshot
      * @param RelationComposite $entityRelationComposite
-     * @param \Magento\Framework\Model\Resource\Db\Context $context
+     * @param \Magento\Framework\Model\ResourceModel\Db\Context $context
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\Model\Resource\Db\Context $context,
+        \Magento\Framework\Model\ResourceModel\Db\Context $context,
         Snapshot $entitySnapshot,
         RelationComposite $entityRelationComposite,
         $connectionName = null
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/Collection.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Collection.php
similarity index 87%
rename from lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/Collection.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Collection.php
index eed3c2eca70314948cca9abc1a0008b48e1bf78a..3591c1a2c07b8f52eda656f909808559ab31f165 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/Collection.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Collection.php
@@ -3,12 +3,12 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Db\VersionControl;
+namespace Magento\Framework\Model\ResourceModel\Db\VersionControl;
 
 /**
  * Class Collection
  */
-abstract class Collection extends \Magento\Framework\Model\Resource\Db\Collection\AbstractCollection
+abstract class Collection extends \Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection
 {
     /**
      * @var Snapshot
@@ -22,7 +22,7 @@ abstract class Collection extends \Magento\Framework\Model\Resource\Db\Collectio
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
      * @param Snapshot $entitySnapshot
      * @param \Magento\Framework\DB\Adapter\AdapterInterface $connection
-     * @param \Magento\Framework\Model\Resource\Db\AbstractDb $resource
+     * @param \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource
      */
     public function __construct(
         \Magento\Framework\Data\Collection\EntityFactoryInterface $entityFactory,
@@ -31,7 +31,7 @@ abstract class Collection extends \Magento\Framework\Model\Resource\Db\Collectio
         \Magento\Framework\Event\ManagerInterface $eventManager,
         Snapshot $entitySnapshot,
         \Magento\Framework\DB\Adapter\AdapterInterface $connection = null,
-        \Magento\Framework\Model\Resource\Db\AbstractDb $resource = null
+        \Magento\Framework\Model\ResourceModel\Db\AbstractDb $resource = null
     ) {
         $this->entitySnapshot = $entitySnapshot;
         parent::__construct(
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/Metadata.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Metadata.php
similarity index 94%
rename from lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/Metadata.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Metadata.php
index 82e6e1580068470e9547e2bcb050cc8a9f76757a..bfab1304282e71ed702a22e90b80b1d4b1aac908 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/Metadata.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Metadata.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Db\VersionControl;
+namespace Magento\Framework\Model\ResourceModel\Db\VersionControl;
 
 /**
  * Class Metadata represents a list of entity fields that are applicable for persistence operations
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/RelationComposite.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationComposite.php
similarity index 95%
rename from lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/RelationComposite.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationComposite.php
index 42a2496f284447fd7dcec95dda0507c8987df2fc..23626faa7bf660eb5ed98f0ae9afc132b2555bd5 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/RelationComposite.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationComposite.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Db\VersionControl;
+namespace Magento\Framework\Model\ResourceModel\Db\VersionControl;
 
 use Magento\Framework\Model\AbstractModel;
 use Magento\Framework\Event\ManagerInterface as EventManager;
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/RelationInterface.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationInterface.php
similarity index 85%
rename from lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/RelationInterface.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationInterface.php
index b16d44509381ae2231c707610f51e6df26daa998..257b9652b316c5268f6d531737692495af624a30 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/RelationInterface.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/RelationInterface.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Db\VersionControl;
+namespace Magento\Framework\Model\ResourceModel\Db\VersionControl;
 
 /**
  * Interface RelationInterface
diff --git a/lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/Snapshot.php b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Snapshot.php
similarity index 96%
rename from lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/Snapshot.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Snapshot.php
index 86377a0e30ab27ff2a7a7671b5eb9222379a5294..c2de9047c4ed4507b02972b55519d58f95dff31e 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Db/VersionControl/Snapshot.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Db/VersionControl/Snapshot.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Db\VersionControl;
+namespace Magento\Framework\Model\ResourceModel\Db\VersionControl;
 
 /**
  * Class Snapshot register snapshot of entity data, for tracking changes
diff --git a/lib/internal/Magento/Framework/Model/Resource/Entity/AbstractEntity.php b/lib/internal/Magento/Framework/Model/ResourceModel/Entity/AbstractEntity.php
similarity index 94%
rename from lib/internal/Magento/Framework/Model/Resource/Entity/AbstractEntity.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Entity/AbstractEntity.php
index b3140c777fd907f9b50bfeb89839565dedca7476..6b323bf323c2861e7d942c9f7ce1f3a7962708dd 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Entity/AbstractEntity.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Entity/AbstractEntity.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Entity;
+namespace Magento\Framework\Model\ResourceModel\Entity;
 
 abstract class AbstractEntity
 {
diff --git a/lib/internal/Magento/Framework/Model/Resource/Entity/Table.php b/lib/internal/Magento/Framework/Model/ResourceModel/Entity/Table.php
similarity index 69%
rename from lib/internal/Magento/Framework/Model/Resource/Entity/Table.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Entity/Table.php
index b3e27e1e122b991137d022a3871a01a6ec3e71fb..f6eac910f3ea4c595d1ef401be7f30ffc435eee8 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Entity/Table.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Entity/Table.php
@@ -3,13 +3,13 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Entity;
+namespace Magento\Framework\Model\ResourceModel\Entity;
 
 /**
  * Class describing db table resource entity
  *
  */
-class Table extends \Magento\Framework\Model\Resource\Entity\AbstractEntity
+class Table extends \Magento\Framework\Model\ResourceModel\Entity\AbstractEntity
 {
     /**
      * Get table
diff --git a/lib/internal/Magento/Framework/Model/Resource/Iterator.php b/lib/internal/Magento/Framework/Model/ResourceModel/Iterator.php
similarity index 94%
rename from lib/internal/Magento/Framework/Model/Resource/Iterator.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Iterator.php
index e901760d141eadea42ec85b64915970525d22b88..c165dec4e7a5fdaee58a7a966974edbb6c2f0f54 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Iterator.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Iterator.php
@@ -7,7 +7,7 @@
 /**
  * Active record implementation
  */
-namespace Magento\Framework\Model\Resource;
+namespace Magento\Framework\Model\ResourceModel;
 
 use Magento\Framework\DB\Adapter\AdapterInterface;
 use Magento\Framework\Exception\LocalizedException;
@@ -22,7 +22,7 @@ class Iterator extends \Magento\Framework\DataObject
      * @param array|string $callbacks
      * @param array $args
      * @param AdapterInterface $connection
-     * @return \Magento\Framework\Model\Resource\Iterator
+     * @return \Magento\Framework\Model\ResourceModel\Iterator
      */
     public function walk($query, array $callbacks, array $args = [], $connection = null)
     {
diff --git a/lib/internal/Magento/Framework/Model/Resource/Type/AbstractType.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/AbstractType.php
similarity index 83%
rename from lib/internal/Magento/Framework/Model/Resource/Type/AbstractType.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/AbstractType.php
index c8308e7e29e164ba021e7323281116e643ec55f6..172434f5d56b24b910c3838f9055f9a758d0a365 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Type/AbstractType.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/AbstractType.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Type;
+namespace Magento\Framework\Model\ResourceModel\Type;
 
 abstract class AbstractType
 {
@@ -19,7 +19,7 @@ abstract class AbstractType
      *
      * @var String
      */
-    protected $_entityClass = 'Magento\Framework\Model\Resource\Entity\AbstractEntity';
+    protected $_entityClass = 'Magento\Framework\Model\ResourceModel\Entity\AbstractEntity';
 
     /**
      * Retrieve entity type
diff --git a/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db.php
new file mode 100644
index 0000000000000000000000000000000000000000..db4737b9923c34cdab98b5022e7585227565af73
--- /dev/null
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db.php
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Model\ResourceModel\Type;
+
+abstract class Db extends \Magento\Framework\Model\ResourceModel\Type\AbstractType
+{
+    /**
+     * Constructor
+     */
+    public function __construct()
+    {
+        $this->_entityClass = 'Magento\Framework\Model\ResourceModel\Entity\Table';
+    }
+}
diff --git a/lib/internal/Magento/Framework/Model/Resource/Type/Db/ConnectionFactory.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactory.php
similarity index 78%
rename from lib/internal/Magento/Framework/Model/Resource/Type/Db/ConnectionFactory.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactory.php
index 3a404d045eacb959619cbd18d4f2c943ef09162a..ed253a64539aa46fbfbbc8a0c7e6ead601283ecc 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Type/Db/ConnectionFactory.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactory.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Type\Db;
+namespace Magento\Framework\Model\ResourceModel\Type\Db;
 
 use Magento\Framework\ObjectManagerInterface;
 
@@ -31,9 +31,9 @@ class ConnectionFactory implements ConnectionFactoryInterface
      */
     public function create(array $connectionConfig)
     {
-        /** @var \Magento\Framework\App\Resource\ConnectionAdapterInterface $adapterInstance */
+        /** @var \Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface $adapterInstance */
         $adapterInstance = $this->objectManager->create(
-            \Magento\Framework\App\Resource\ConnectionAdapterInterface::class,
+            \Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface::class,
             ['config' => $connectionConfig]
         );
 
diff --git a/lib/internal/Magento/Framework/Model/Resource/Type/Db/ConnectionFactoryInterface.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryInterface.php
similarity index 88%
rename from lib/internal/Magento/Framework/Model/Resource/Type/Db/ConnectionFactoryInterface.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryInterface.php
index 5ac783678320a37484fb43cdbda75cb610fc7c00..02a9dd0bce60d44a9ab71ea694671bc6aa12f718 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Type/Db/ConnectionFactoryInterface.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/ConnectionFactoryInterface.php
@@ -5,7 +5,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Resource\Type\Db;
+namespace Magento\Framework\Model\ResourceModel\Type\Db;
 
 interface ConnectionFactoryInterface
 {
diff --git a/lib/internal/Magento/Framework/Model/Resource/Type/Db/Pdo/Mysql.php b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/Mysql.php
similarity index 92%
rename from lib/internal/Magento/Framework/Model/Resource/Type/Db/Pdo/Mysql.php
rename to lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/Mysql.php
index ba4da20cbbb097b7a0360431a2931d29055f914f..e28f3109687dba9787db2326d6ec8d3c2e66f5e8 100644
--- a/lib/internal/Magento/Framework/Model/Resource/Type/Db/Pdo/Mysql.php
+++ b/lib/internal/Magento/Framework/Model/ResourceModel/Type/Db/Pdo/Mysql.php
@@ -6,13 +6,13 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Model\Resource\Type\Db\Pdo;
+namespace Magento\Framework\Model\ResourceModel\Type\Db\Pdo;
 
-use Magento\Framework\App\Resource\ConnectionAdapterInterface;
+use Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface;
 use Magento\Framework\DB;
 use Magento\Framework\Stdlib;
 
-class Mysql extends \Magento\Framework\Model\Resource\Type\Db implements ConnectionAdapterInterface
+class Mysql extends \Magento\Framework\Model\ResourceModel\Type\Db implements ConnectionAdapterInterface
 {
     /**
      * @var Stdlib\StringUtils
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/AbstractExtensibleModelTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/AbstractExtensibleModelTest.php
index e46959c3e662ffd3e33f5996c0bac64df4386db1..84959d0952390266da61aa045244bb262df76ef3 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/AbstractExtensibleModelTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/AbstractExtensibleModelTest.php
@@ -29,7 +29,7 @@ class AbstractExtensibleModelTest extends \PHPUnit_Framework_TestCase
     protected $registryMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -72,7 +72,7 @@ class AbstractExtensibleModelTest extends \PHPUnit_Framework_TestCase
         );
         $this->registryMock = $this->getMock('Magento\Framework\Registry', [], [], '', false);
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [
                 '_construct',
                 'getConnection',
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/AbstractModelTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/AbstractModelTest.php
index f1cd257595fe160ae63498544681ca751bb7358a..e0674f8a882a8913c577303c4930e4b61f3e2d29 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/AbstractModelTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/AbstractModelTest.php
@@ -25,7 +25,7 @@ class AbstractModelTest extends \PHPUnit_Framework_TestCase
     protected $registryMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $resourceMock;
 
@@ -62,7 +62,7 @@ class AbstractModelTest extends \PHPUnit_Framework_TestCase
         );
         $this->registryMock = $this->getMock('Magento\Framework\Registry', [], [], '', false);
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [
                 '_construct',
                 'getConnection',
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/AbstractDbTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php
similarity index 78%
rename from lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/AbstractDbTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php
index 44a367a3df5b10c1db5f4ecb057f1cc1f0f7d775..b6ec3d9a68f27188fb9fb38e421eb772bf541afc 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/AbstractDbTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/AbstractDbTest.php
@@ -6,17 +6,17 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Model\Test\Unit\Resource\Db;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db;
 
 class AbstractDbTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $_model;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resourcesMock;
 
@@ -33,7 +33,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->_resourcesMock = $this->getMock(
-            '\Magento\Framework\App\Resource',
+            '\Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -41,16 +41,16 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->relationProcessorMock = $this->getMock(
-            '\Magento\Framework\Model\Resource\Db\ObjectRelationProcessor',
+            '\Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
             [],
             [],
             '',
             false
         );
         $this->transactionManagerMock = $this->getMock(
-            '\Magento\Framework\Model\Resource\Db\TransactionManagerInterface'
+            '\Magento\Framework\Model\ResourceModel\Db\TransactionManagerInterface'
         );
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $contextMock->expects($this->once())->method('getResources')->willReturn($this->_resourcesMock);
         $contextMock->expects($this->once())
             ->method('getObjectRelationProcessor')
@@ -60,7 +60,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
             ->willReturn($this->transactionManagerMock);
 
         $this->_model = $this->getMockForAbstractClass(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$contextMock],
             '',
             true,
@@ -113,7 +113,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
     public function testAddUniqueFieldArray()
     {
         $this->assertInstanceOf(
-            '\Magento\Framework\Model\Resource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             $this->_model->addUniqueField(['someField'])
         );
     }
@@ -131,7 +131,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
     {
         $data = 'MainTableName';
         $idFieldNameProperty = new \ReflectionProperty(
-            'Magento\Framework\Model\Resource\Db\AbstractDb', '_idFieldName'
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_idFieldName'
         );
         $idFieldNameProperty->setAccessible(true);
         $idFieldNameProperty->setValue($this->_model, $data);
@@ -154,7 +154,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetMainTable($tableName, $expectedResult)
     {
-        $mainTableProperty = new \ReflectionProperty('Magento\Framework\Model\Resource\Db\AbstractDb', '_mainTable');
+        $mainTableProperty = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_mainTable');
         $mainTableProperty->setAccessible(true);
         $mainTableProperty->setValue($this->_model, $tableName);
         $this->_resourcesMock->expects($this->once())
@@ -188,7 +188,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         $this->_resourcesMock->expects($this->once())->method('getTableName')->with($data)->will(
             $this->returnValue('tableName')
         );
-        $tablesProperty = new \ReflectionProperty('Magento\Framework\Model\Resource\Db\AbstractDb', '_tables');
+        $tablesProperty = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_tables');
         $tablesProperty->setAccessible(true);
         $tablesProperty->setValue($this->_model, [$data]);
         $this->assertEquals($data, $this->_model->getTable($data));
@@ -232,7 +232,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
 
     public function testResetUniqueField()
     {
-        $uniqueFields = new \ReflectionProperty('Magento\Framework\Model\Resource\Db\AbstractDb', '_uniqueFields');
+        $uniqueFields = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_uniqueFields');
         $uniqueFields->setAccessible(true);
         $uniqueFields->setValue($this->_model, ['uniqueField1', 'uniqueField2']);
         $this->_model->resetUniqueField();
@@ -242,7 +242,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
     public function testGetUniqueFields()
     {
         $uniqueFieldsReflection = new \ReflectionProperty(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             '_uniqueFields'
         );
         $uniqueFieldsReflection->setAccessible(true);
@@ -270,12 +270,12 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         );
 
         $value = 'some_value';
-        $idFieldName = new \ReflectionProperty('Magento\Framework\Model\Resource\Db\AbstractDb', '_idFieldName');
+        $idFieldName = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_idFieldName');
         $idFieldName->setAccessible(true);
         $idFieldName->setValue($this->_model, 'field_value');
 
         $this->assertInstanceOf(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             $this->_model->load($abstractModelMock, $value, $idFieldName)
         );
     }
@@ -323,13 +323,13 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
             $this->returnValue('tableName')
         );
         $mainTableReflection = new \ReflectionProperty(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             '_mainTable'
         );
         $mainTableReflection->setAccessible(true);
         $mainTableReflection->setValue($this->_model, 'tableName');
         $idFieldNameReflection = new \ReflectionProperty(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             '_idFieldName'
         );
         $idFieldNameReflection->setAccessible(true);
@@ -340,7 +340,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         $abstractModelMock->expects($this->once())->method('afterDelete');
         $abstractModelMock->expects($this->once())->method('afterDeleteCommit');
         $this->assertInstanceOf(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             $this->_model->delete($abstractModelMock)
         );
     }
@@ -384,7 +384,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
             true,
             ['__wakeup', 'getOrigData', 'getData']
         );
-        $mainTableProperty = new \ReflectionProperty('Magento\Framework\Model\Resource\Db\AbstractDb', '_mainTable');
+        $mainTableProperty = new \ReflectionProperty('Magento\Framework\Model\ResourceModel\Db\AbstractDb', '_mainTable');
         $mainTableProperty->setAccessible(true);
         $mainTableProperty->setValue($this->_model, 'table');
 
@@ -417,7 +417,7 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
         );
         $registryMock = $this->getMock('\Magento\Framework\Registry', [], [], '', false);
         $resourceMock = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [
                 '_construct',
                 'getConnection',
@@ -448,13 +448,13 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
             $this->returnValue('tableName')
         );
         $mainTableReflection = new \ReflectionProperty(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             '_mainTable'
         );
         $mainTableReflection->setAccessible(true);
         $mainTableReflection->setValue($this->_model, 'tableName');
         $idFieldNameReflection = new \ReflectionProperty(
-            'Magento\Framework\Model\Resource\Db\AbstractDb',
+            'Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             '_idFieldName'
         );
         $idFieldNameReflection->setAccessible(true);
@@ -487,4 +487,72 @@ class AbstractDbTest extends \PHPUnit_Framework_TestCase
 
         $this->_model->save($abstractModelMock);
     }
+
+    /**
+     * Test that we only set/override id on object if PK autoincrement is enabled
+     * @param bool $pkIncrement
+     * @dataProvider saveNewObjectDataProvider
+     * @SuppressWarnings(PHPMD.NPathComplexity)
+     */
+    public function testSaveNewObject($pkIncrement)
+    {
+        /**
+         * Mock SUT so as not to test extraneous logic
+         */
+        $model = $this->getMockBuilder('Magento\Framework\Model\ResourceModel\Db\AbstractDb')
+            ->disableOriginalConstructor()
+            ->setMethods(['_prepareDataForSave', 'getIdFieldName', 'getConnection', 'getMainTable'])
+            ->getMockForAbstractClass();
+        /**
+         * Only testing the logic in a protected method and property, must use reflection to avoid dealing with large
+         * amounts of unrelated logic in save function
+         *
+         * make saveNewObject and _isPkAutoIncrement public
+         */
+        $reflectionMethod = new \ReflectionMethod($model, 'saveNewObject');
+        $reflectionMethod->setAccessible(true);
+        $reflectionProperty = new \ReflectionProperty($model, '_isPkAutoIncrement');
+        $reflectionProperty->setAccessible(true);
+        $reflectionProperty->setValue($model, $pkIncrement);
+
+        // Mocked behavior
+        $connectionMock = $this->getMockBuilder('\Magento\Framework\DB\Adapter\AdapterInterface')
+            ->disableOriginalConstructor()
+            ->setMethods(['lastInsertId'])
+            ->getMockForAbstractClass();
+        $getConnectionInvokedCount = $pkIncrement ? 2 : 1;
+        $model->expects($this->exactly($getConnectionInvokedCount))
+            ->method('getConnection')
+            ->willReturn($connectionMock);
+
+        $idFieldName = 'id_field_name';
+        $model->expects($this->once())->method('_prepareDataForSave')->willReturn([$idFieldName => 'id',]);
+
+
+        // Test expectations
+        //      Only get object's id field name if not PK autoincrement
+        $getIdFieldNameInvokedCount = $pkIncrement ? 1 : 0;
+        $model->expects($this->exactly($getIdFieldNameInvokedCount))
+            ->method('getIdFieldName')
+            ->willReturn($idFieldName);
+
+        //      Only set object id if not PK autoincrement
+        $setIdInvokedCount = $pkIncrement ? 1 : 0;
+        $inputObject = $this->getMockBuilder('\Magento\Framework\Model\AbstractModel')
+            ->disableOriginalConstructor()
+            ->getMock();
+        $inputObject->expects($this->exactly($setIdInvokedCount))->method('setId');
+
+        //      Only call lastInsertId if not PK autoincrement
+        $lastInsertIdInvokedCount = $pkIncrement ? 1 : 0;
+        $connectionMock->expects($this->exactly($lastInsertIdInvokedCount))->method('lastInsertId');
+
+        $reflectionMethod->invokeArgs($model, [$inputObject]);
+    }
+
+    public function saveNewObjectDataProvider()
+    {
+        return [[true], [false]];
+    }
+
 }
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/Collection/AbstractCollectionTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/Collection/AbstractCollectionTest.php
similarity index 96%
rename from lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/Collection/AbstractCollectionTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/Collection/AbstractCollectionTest.php
index f6f2da8b04376c666ebe96ed062915bf0c2daa16..8e9abd11fef865cd8f2bf9187284423df4fd8fcf 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/Collection/AbstractCollectionTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/Collection/AbstractCollectionTest.php
@@ -6,10 +6,10 @@
 
 // @codingStandardsIgnoreFile
 
-namespace Magento\Framework\Model\Test\Unit\Resource\Db\Collection;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db\Collection;
 
 use Magento\Framework\DB\Select;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Framework\DataObject as MagentoObject;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
 
@@ -38,7 +38,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject */
     protected $managerMock;
 
-    /** @var \Magento\Framework\Model\Resource\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject  */
+    /** @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject  */
     protected $resourceMock;
 
     /** @var \Magento\Framework\DB\Adapter\Pdo\Mysql|\PHPUnit_Framework_MockObject_MockObject */
@@ -62,7 +62,7 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
         $this->fetchStrategyMock = $this->getMock('Magento\Framework\Data\Collection\Db\FetchStrategyInterface');
         $this->managerMock = $this->getMock('Magento\Framework\Event\ManagerInterface');
         $this->connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
-        $this->resourceMock = $this->getMock('Magento\Framework\Flag\Resource', [], [], '', false);
+        $this->resourceMock = $this->getMock('Magento\Framework\Flag\FlagResource', [], [], '', false);
 
         $this->resourceMock
             ->expects($this->any())
@@ -103,14 +103,14 @@ class AbstractCollectionTest extends \PHPUnit_Framework_TestCase
     protected function getUut()
     {
         return $this->objectManagerHelper->getObject(
-            'Magento\Framework\Model\Test\Unit\Resource\Db\Collection\Uut',
+            'Magento\Framework\Model\Test\Unit\ResourceModel\Db\Collection\Uut',
             [
                 'entityFactory' => $this->entityFactoryMock,
                 'logger' => $this->loggerMock,
                 'fetchStrategy' => $this->fetchStrategyMock,
                 'eventManager' => $this->managerMock,
                 'connection' => $this->connectionMock,
-                // Magento\Framework\Flag\Resource extends Magento\Framework\Model\Resource\Db\AbstractDb
+                // Magento\Framework\Flag\FlagResource extends Magento\Framework\Model\ResourceModel\Db\AbstractDb
                 'resource' => $this->resourceMock,
             ]
         );
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/VersionControl/MetadataTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/MetadataTest.php
similarity index 89%
rename from lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/VersionControl/MetadataTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/MetadataTest.php
index c231fa1e507fd9cb930f3d509127d6f36280bea5..014909543bc5668a9ca8c4e920024d48a3a55878 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/VersionControl/MetadataTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/MetadataTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Test\Unit\Resource\Db\VersionControl;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db\VersionControl;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
@@ -13,7 +13,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class MetadataTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Metadata
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata
      */
     protected $entityMetadata;
 
@@ -23,7 +23,7 @@ class MetadataTest extends \PHPUnit_Framework_TestCase
     protected $model;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\Resource\Db\AbstractDb
+     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ResourceModel\Db\AbstractDb
      */
     protected $resource;
 
@@ -64,7 +64,7 @@ class MetadataTest extends \PHPUnit_Framework_TestCase
         $this->model->expects($this->any())->method('getResource')->willReturn($this->resource);
         $this->resource->expects($this->any())->method('getConnection')->willReturn($this->connection);
         $this->entityMetadata = $objectManager->getObject(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Metadata'
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata'
         );
     }
 
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/VersionControl/RelationCompositeTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/RelationCompositeTest.php
similarity index 85%
rename from lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/VersionControl/RelationCompositeTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/RelationCompositeTest.php
index 942b5bd8c59238101fa0b3b3ef0255772a878d36..428e9bef37de4254cc911430ade3c7e72d7e4bb7 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/VersionControl/RelationCompositeTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/RelationCompositeTest.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\Test\Unit\Resource\Db\VersionControl;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db\VersionControl;
 
 /**
  * Class RelationCompositeTest
@@ -12,7 +12,7 @@ namespace Magento\Framework\Model\Test\Unit\Resource\Db\VersionControl;
 class RelationCompositeTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite
      */
     protected $entityRelationComposite;
 
@@ -22,7 +22,7 @@ class RelationCompositeTest extends \PHPUnit_Framework_TestCase
     protected $modelMock;
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\RelationInterface
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface
      */
     protected $relationProcessorMock;
 
@@ -48,10 +48,10 @@ class RelationCompositeTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
         $this->relationProcessorMock = $this->getMockBuilder(
-            'Magento\Framework\Model\Resource\Db\VersionControl\RelationInterface'
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationInterface'
         )->disableOriginalConstructor()->getMockForAbstractClass();
 
-        $this->entityRelationComposite = new \Magento\Framework\Model\Resource\Db\VersionControl\RelationComposite(
+        $this->entityRelationComposite = new \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite(
             $this->eventManagerMock,
             [
                 'default' => $this->relationProcessorMock
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/VersionControl/SnapshotTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/SnapshotTest.php
similarity index 88%
rename from lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/VersionControl/SnapshotTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/SnapshotTest.php
index 34aa803dae17641c5c679a9adb9078f869e9da31..a228106db6487ff9cff8acff3afa0ed5017dabcf 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Db/VersionControl/SnapshotTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Db/VersionControl/SnapshotTest.php
@@ -3,7 +3,7 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Test\Unit\Resource\Db\VersionControl;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Db\VersionControl;
 
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
@@ -13,12 +13,12 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class SnapshotTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\Model\Resource\Db\VersionControl\Snapshot
+     * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot
      */
     protected $entitySnapshot;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\Resource\Db\VersionControl\Metadata
+     * @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata
      */
     protected $entityMetadata;
 
@@ -42,7 +42,7 @@ class SnapshotTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->entityMetadata = $this->getMock(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Metadata',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Metadata',
             ['getFields'],
             [],
             '',
@@ -50,7 +50,7 @@ class SnapshotTest extends \PHPUnit_Framework_TestCase
         );
 
         $this->entitySnapshot = $objectManager->getObject(
-            'Magento\Framework\Model\Resource\Db\VersionControl\Snapshot',
+            'Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot',
             ['metadata' => $this->entityMetadata]
         );
     }
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Type/Db/ConnectionFactoryTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/ConnectionFactoryTest.php
similarity index 89%
rename from lib/internal/Magento/Framework/Model/Test/Unit/Resource/Type/Db/ConnectionFactoryTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/ConnectionFactoryTest.php
index 5e248ac096e45fbbd9e63014db777a8ae5da3940..011530e544ec5bd5ccff941954deb3d1469a9e83 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Type/Db/ConnectionFactoryTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/ConnectionFactoryTest.php
@@ -3,11 +3,11 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-namespace Magento\Framework\Model\Test\Unit\Resource\Type\Db;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Type\Db;
 
-use Magento\Framework\App\Resource\ConnectionAdapterInterface;
+use Magento\Framework\App\ResourceConnection\ConnectionAdapterInterface;
 use Magento\Framework\DB\LoggerInterface;
-use Magento\Framework\Model\Resource\Type\Db\ConnectionFactory;
+use Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactory;
 use Magento\Framework\ObjectManagerInterface;
 
 class ConnectionFactoryTest extends \PHPUnit_Framework_TestCase
diff --git a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Type/Db/Pdo/MysqlTest.php b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/Pdo/MysqlTest.php
similarity index 96%
rename from lib/internal/Magento/Framework/Model/Test/Unit/Resource/Type/Db/Pdo/MysqlTest.php
rename to lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/Pdo/MysqlTest.php
index 7c56afbd5b0cc8c9efd4ea4b90f1d9ced9541d6b..05c7a39503104ea6b694bc2338fc536fea762f6f 100644
--- a/lib/internal/Magento/Framework/Model/Test/Unit/Resource/Type/Db/Pdo/MysqlTest.php
+++ b/lib/internal/Magento/Framework/Model/Test/Unit/ResourceModel/Type/Db/Pdo/MysqlTest.php
@@ -4,9 +4,9 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Model\Test\Unit\Resource\Type\Db\Pdo;
+namespace Magento\Framework\Model\Test\Unit\ResourceModel\Type\Db\Pdo;
 
-use \Magento\Framework\Model\Resource\Type\Db\Pdo\Mysql;
+use \Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql;
 
 class MysqlTest extends \PHPUnit_Framework_TestCase
 {
diff --git a/lib/internal/Magento/Framework/Module/Resource.php b/lib/internal/Magento/Framework/Module/ModuleResource.php
similarity index 96%
rename from lib/internal/Magento/Framework/Module/Resource.php
rename to lib/internal/Magento/Framework/Module/ModuleResource.php
index 3ac0c95242cfb1845644314919c3c4809484969f..10b49c469e5948ff78d18a4a500425a98750a948 100644
--- a/lib/internal/Magento/Framework/Module/Resource.php
+++ b/lib/internal/Magento/Framework/Module/ModuleResource.php
@@ -8,11 +8,10 @@
 
 namespace Magento\Framework\Module;
 
-
 /**
  * Resource Model
  */
-class Resource extends \Magento\Framework\Model\Resource\Db\AbstractDb implements \Magento\Framework\Module\ResourceInterface
+class ModuleResource extends \Magento\Framework\Model\ResourceModel\Db\AbstractDb implements \Magento\Framework\Module\ResourceInterface
 {
     /**
      * Database versions
diff --git a/lib/internal/Magento/Framework/Module/Setup.php b/lib/internal/Magento/Framework/Module/Setup.php
index 387164d25817dd2cbc9433757fe4ca931a5b736c..3a3d6049074d2a123ce48b19e2aca3a035cf2b33 100644
--- a/lib/internal/Magento/Framework/Module/Setup.php
+++ b/lib/internal/Magento/Framework/Module/Setup.php
@@ -29,7 +29,7 @@ class Setup implements SetupInterface
     /**
      * Modules configuration
      *
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     private $resourceModel;
 
@@ -43,11 +43,11 @@ class Setup implements SetupInterface
     /**
      * Init
      *
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      * @param string $connectionName
      */
     public function __construct(
-        \Magento\Framework\App\Resource $resource,
+        \Magento\Framework\App\ResourceConnection $resource,
         $connectionName = ModuleDataSetupInterface::DEFAULT_SETUP_CONNECTION
     ) {
         $this->resourceModel = $resource;
diff --git a/lib/internal/Magento/Framework/Module/Setup/Context.php b/lib/internal/Magento/Framework/Module/Setup/Context.php
index 90a4e04e6a234ace86d79a8ef2ae0432f6af261c..554b320b78581fae37109583c3e34c13887c074c 100644
--- a/lib/internal/Magento/Framework/Module/Setup/Context.php
+++ b/lib/internal/Magento/Framework/Module/Setup/Context.php
@@ -18,7 +18,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     protected $_eventManager;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $_resourceModel;
 
@@ -57,7 +57,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
      *
      * @param \Psr\Log\LoggerInterface $logger
      * @param \Magento\Framework\Event\ManagerInterface $eventManager
-     * @param \Magento\Framework\App\Resource $appResource
+     * @param \Magento\Framework\App\ResourceConnection $appResource
      * @param \Magento\Framework\Module\Dir\Reader $modulesReader
      * @param \Magento\Framework\Module\ModuleListInterface $moduleList
      * @param \Magento\Framework\Module\ResourceInterface $resource
@@ -68,7 +68,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     public function __construct(
         \Psr\Log\LoggerInterface $logger,
         \Magento\Framework\Event\ManagerInterface $eventManager,
-        \Magento\Framework\App\Resource $appResource,
+        \Magento\Framework\App\ResourceConnection $appResource,
         \Magento\Framework\Module\Dir\Reader $modulesReader,
         \Magento\Framework\Module\ModuleListInterface $moduleList,
         \Magento\Framework\Module\ResourceInterface $resource,
@@ -120,7 +120,7 @@ class Context implements \Magento\Framework\ObjectManager\ContextInterface
     }
 
     /**
-     * @return \Magento\Framework\App\Resource
+     * @return \Magento\Framework\App\ResourceConnection
      */
     public function getResourceModel()
     {
diff --git a/lib/internal/Magento/Framework/Module/Test/Unit/Setup/_files/data_content_plain_pk_fields.php b/lib/internal/Magento/Framework/Module/Test/Unit/Setup/_files/data_content_plain_pk_fields.php
index 63ef6b29303cab62dace29a8713c4cf1bc872dae..e67d5b2d20ac2b272371a57439bebee67fd89c04 100644
--- a/lib/internal/Magento/Framework/Module/Test/Unit/Setup/_files/data_content_plain_pk_fields.php
+++ b/lib/internal/Magento/Framework/Module/Test/Unit/Setup/_files/data_content_plain_pk_fields.php
@@ -22,13 +22,13 @@ return [
             [
                 'table' => 'table',
                 'field' => 'collection',
-                'to' => 'Magento\Customer\Model\Resource\Attribute\Collection',
+                'to' => 'Magento\Customer\Model\ResourceModel\Attribute\Collection',
                 'from' => ['`pk_field1` = ?' => 'pk_value1', '`pk_field2` = ?' => 'pk_value2'],
             ],
         ],
         'aliases_map' => [
             \Magento\Framework\Module\Setup\Migration::ENTITY_TYPE_RESOURCE => [
-                'customer/attribute_collection' => 'Magento\Customer\Model\Resource\Attribute\Collection',
+                'customer/attribute_collection' => 'Magento\Customer\Model\ResourceModel\Attribute\Collection',
             ],
         ],
     ]
diff --git a/lib/internal/Magento/Framework/Module/Test/Unit/Setup/_files/data_content_plain_resource.php b/lib/internal/Magento/Framework/Module/Test/Unit/Setup/_files/data_content_plain_resource.php
index 7150d9e789b6277cdaaa1face2fdedf57f11c93d..8dd7d7b4e00f510df264ca2ea0e40bd11fb2282e 100644
--- a/lib/internal/Magento/Framework/Module/Test/Unit/Setup/_files/data_content_plain_resource.php
+++ b/lib/internal/Magento/Framework/Module/Test/Unit/Setup/_files/data_content_plain_resource.php
@@ -21,14 +21,14 @@ return [
             [
                 'table' => 'table',
                 'field' => 'collection',
-                'to' => 'Magento\Customer\Model\Resource\Attribute\Collection',
+                'to' => 'Magento\Customer\Model\ResourceModel\Attribute\Collection',
                 'from' => ['`collection` = ?' => 'customer/attribute_collection'],
             ],
         ],
         'where' => ['flag = 1'],
         'aliases_map' => [
             \Magento\Framework\Module\Setup\Migration::ENTITY_TYPE_RESOURCE => [
-                'customer/attribute_collection' => 'Magento\Customer\Model\Resource\Attribute\Collection',
+                'customer/attribute_collection' => 'Magento\Customer\Model\ResourceModel\Attribute\Collection',
             ],
         ],
     ]
diff --git a/lib/internal/Magento/Framework/Module/Test/Unit/SetupTest.php b/lib/internal/Magento/Framework/Module/Test/Unit/SetupTest.php
index c2be490444b4fdf2f4b1a128bb630cbd418d71d1..71f1d147d2ffd15778568a6c9008396a32e36d82 100644
--- a/lib/internal/Magento/Framework/Module/Test/Unit/SetupTest.php
+++ b/lib/internal/Magento/Framework/Module/Test/Unit/SetupTest.php
@@ -13,7 +13,7 @@ class SetupTest extends \PHPUnit_Framework_TestCase
     const CONNECTION_NAME = 'connection';
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resourceModel;
 
@@ -29,7 +29,7 @@ class SetupTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $this->resourceModel = $this->getMock('\Magento\Framework\App\Resource', [], [], '', false);
+        $this->resourceModel = $this->getMock('\Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->connection = $this->getMockForAbstractClass('\Magento\Framework\DB\Adapter\AdapterInterface');
         $this->resourceModel->expects($this->any())
             ->method('getConnection')
diff --git a/lib/internal/Magento/Framework/Mview/Test/Unit/View/ChangelogTest.php b/lib/internal/Magento/Framework/Mview/Test/Unit/View/ChangelogTest.php
index aadc2df696d6cd766e96b3077bc9d1d692630782..f43289b4492d095cb77347f7daddcbfb0ff25b1d 100644
--- a/lib/internal/Magento/Framework/Mview/Test/Unit/View/ChangelogTest.php
+++ b/lib/internal/Magento/Framework/Mview/Test/Unit/View/ChangelogTest.php
@@ -20,7 +20,7 @@ class ChangelogTest extends \PHPUnit_Framework_TestCase
     protected $connectionMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\Resource
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\ResourceConnection
      */
     protected $resourceMock;
 
@@ -29,7 +29,7 @@ class ChangelogTest extends \PHPUnit_Framework_TestCase
         $this->connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
 
         $this->resourceMock = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -44,7 +44,7 @@ class ChangelogTest extends \PHPUnit_Framework_TestCase
     public function testInstanceOf()
     {
         $resourceMock =
-            $this->getMock('Magento\Framework\App\Resource', [], [], '', false, false);
+            $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false, false);
         $resourceMock->expects($this->once())->method('getConnection')->will($this->returnValue(true));
         $model = new \Magento\Framework\Mview\View\Changelog($resourceMock);
         $this->assertInstanceOf('\Magento\Framework\Mview\View\ChangelogInterface', $model);
@@ -57,7 +57,7 @@ class ChangelogTest extends \PHPUnit_Framework_TestCase
     public function testCheckConnectionException()
     {
         $resourceMock =
-            $this->getMock('Magento\Framework\App\Resource', [], [], '', false, false);
+            $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false, false);
         $resourceMock->expects($this->once())->method('getConnection')->will($this->returnValue(null));
         $model = new \Magento\Framework\Mview\View\Changelog($resourceMock);
         $model->setViewId('ViewIdTest');
diff --git a/lib/internal/Magento/Framework/Mview/Test/Unit/View/SubscriptionTest.php b/lib/internal/Magento/Framework/Mview/Test/Unit/View/SubscriptionTest.php
index f9b642136422dd229deebd9762f183742646c698..4c2e88da09f5d40bceabc176d6c40c5e60161cca 100644
--- a/lib/internal/Magento/Framework/Mview/Test/Unit/View/SubscriptionTest.php
+++ b/lib/internal/Magento/Framework/Mview/Test/Unit/View/SubscriptionTest.php
@@ -22,7 +22,7 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase
     /** @var \Magento\Framework\Mview\View\Subscription */
     protected $model;
 
-    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\Resource */
+    /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\App\ResourceConnection */
     protected $resourceMock;
 
     /** @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\DB\Ddl\TriggerFactory */
@@ -40,7 +40,7 @@ class SubscriptionTest extends \PHPUnit_Framework_TestCase
     protected function setUp()
     {
         $this->connectionMock = $this->getMock('Magento\Framework\DB\Adapter\Pdo\Mysql', [], [], '', false);
-        $this->resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false, false);
+        $this->resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false, false);
 
         $this->connectionMock->expects($this->any())
             ->method('quoteIdentifier')
diff --git a/lib/internal/Magento/Framework/Mview/View/Changelog.php b/lib/internal/Magento/Framework/Mview/View/Changelog.php
index 6b08e3e36be123ba0db1865a5fc5152b0ad53809..af1a49beb6cfd319c1a963b9351279d9d305b9a0 100644
--- a/lib/internal/Magento/Framework/Mview/View/Changelog.php
+++ b/lib/internal/Magento/Framework/Mview/View/Changelog.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Mview\View;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 class Changelog implements ChangelogInterface
 {
@@ -34,14 +34,14 @@ class Changelog implements ChangelogInterface
     protected $viewId;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     protected $resource;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
-    public function __construct(\Magento\Framework\App\Resource $resource)
+    public function __construct(\Magento\Framework\App\ResourceConnection $resource)
     {
         $this->connection = $resource->getConnection();
         $this->resource = $resource;
diff --git a/lib/internal/Magento/Framework/Mview/View/Subscription.php b/lib/internal/Magento/Framework/Mview/View/Subscription.php
index d347ec49c44ed8c2a33c354a62b148f2b907798d..2dea70e597b85d038916286be1f1e3d727d0c01b 100644
--- a/lib/internal/Magento/Framework/Mview/View/Subscription.php
+++ b/lib/internal/Magento/Framework/Mview/View/Subscription.php
@@ -8,7 +8,7 @@
 
 namespace Magento\Framework\Mview\View;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Ddl\Trigger;
 
 class Subscription implements SubscriptionInterface
@@ -58,7 +58,7 @@ class Subscription implements SubscriptionInterface
     protected $resource;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param \Magento\Framework\DB\Ddl\TriggerFactory $triggerFactory
      * @param \Magento\Framework\Mview\View\CollectionInterface $viewCollection
      * @param \Magento\Framework\Mview\ViewInterface $view
@@ -66,7 +66,7 @@ class Subscription implements SubscriptionInterface
      * @param string $columnName
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         \Magento\Framework\DB\Ddl\TriggerFactory $triggerFactory,
         \Magento\Framework\Mview\View\CollectionInterface $viewCollection,
         \Magento\Framework\Mview\ViewInterface $view,
diff --git a/lib/internal/Magento/Framework/ObjectManager/Code/Generator/Persistor.php b/lib/internal/Magento/Framework/ObjectManager/Code/Generator/Persistor.php
index 34b318a45b210b0d1b9a5ce2c0c7de669dd8eb44..d7e65bbb560e4ced4d9d5c1530b413c4174fea66 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Code/Generator/Persistor.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Code/Generator/Persistor.php
@@ -60,7 +60,7 @@ class Persistor extends \Magento\Framework\Code\Generator\EntityAbstract
                     'tags' => [
                         [
                             'name' => 'var',
-                            'description' => '\Magento\Framework\App\Resource',
+                            'description' => '\Magento\Framework\App\ResourceConnection',
                         ],
                     ],
                 ]
@@ -182,7 +182,7 @@ class Persistor extends \Magento\Framework\Code\Generator\EntityAbstract
                 ],
                 [
                     'name' => 'resource',
-                    'type' => '\Magento\Framework\App\Resource'
+                    'type' => '\Magento\Framework\App\ResourceConnection'
                 ],
             ],
             'body' => "\$this->"
@@ -208,7 +208,7 @@ class Persistor extends \Magento\Framework\Code\Generator\EntityAbstract
                     ],
                     [
                         'name' => 'param',
-                        'description' => '\Magento\Framework\App\Resource $resource'
+                        'description' => '\Magento\Framework\App\ResourceConnection $resource'
                     ],
                 ],
             ]
@@ -222,7 +222,7 @@ class Persistor extends \Magento\Framework\Code\Generator\EntityAbstract
     {
         $body = "if (!\$this->connection) {\n"
         . "    \$this->connection = \$this->resource->getConnection("
-        . "\\Magento\\Framework\\App\\Resource::DEFAULT_CONNECTION);\n"
+        . "\\Magento\\Framework\\App\\ResourceConnection::DEFAULT_CONNECTION);\n"
         . "}\n"
         . "return \$this->connection;";
 
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php
index c03b20e274c6ce5eb9fc11a7129153a94320b38a..10bafa24672ad8ed72d942d6de81262d8f2434e8 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/ConverterTest.php
@@ -77,7 +77,7 @@ class ConverterTest extends \PHPUnit_Framework_TestCase
 
         //Mocking _validateData call
         $this->definedClassesMock->expects($this->at(0))
-            ->method('classLoadable')
+            ->method('isClassLoadable')
             ->will($this->returnValue(true));
 
         $this->ioObjectMock->expects($this->once())
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/RepositoryTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/RepositoryTest.php
index 08c9586b45de328a218ea0685d9ba32972b50e1f..1be208085ab052389b20c1bc1980818724cac2c8 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/RepositoryTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Code/Generator/RepositoryTest.php
@@ -41,7 +41,7 @@ class RepositoryTest extends EntityChildTestAbstract
     protected function mockDefinedClassesCall()
     {
         $this->definedClassesMock->expects($this->at(0))
-            ->method('classLoadable')
+            ->method('isClassLoadable')
             ->with($this->getSourceClassName() . 'Interface')
             ->willReturn(true);
     }
diff --git a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Config/SchemaLocatorTest.php b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Config/SchemaLocatorTest.php
index 7771efa8cfef97db8aecb276d7a55e7aafecbd6d..3bce440feb5279cc995178fa37d7fc33148585f0 100644
--- a/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Config/SchemaLocatorTest.php
+++ b/lib/internal/Magento/Framework/ObjectManager/Test/Unit/Config/SchemaLocatorTest.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\ObjectManager\Test\Unit\Config;
 class SchemaLocatorTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\App\Resource\Config\SchemaLocator
+     * @var \Magento\Framework\App\ResourceConnection\Config\SchemaLocator
      */
     protected $model;
 
diff --git a/lib/internal/Magento/Framework/Pricing/Adjustment/AdjustmentInterface.php b/lib/internal/Magento/Framework/Pricing/Adjustment/AdjustmentInterface.php
index b988ac0019d002bf27b29769139293271e3537b3..41011efe4e0ea13eed430ce9ea146b2e11c24e5d 100644
--- a/lib/internal/Magento/Framework/Pricing/Adjustment/AdjustmentInterface.php
+++ b/lib/internal/Magento/Framework/Pricing/Adjustment/AdjustmentInterface.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\Pricing\Adjustment;
 
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 
 /**
  * Interface AdjustmentInterface
diff --git a/lib/internal/Magento/Framework/Pricing/Adjustment/Calculator.php b/lib/internal/Magento/Framework/Pricing/Adjustment/Calculator.php
index fdd3c051726f22821cb7e01fc9f44adbdac30e1c..cf7e2eda9be1d2ec37872b965d42ada8f75e6dbe 100644
--- a/lib/internal/Magento/Framework/Pricing/Adjustment/Calculator.php
+++ b/lib/internal/Magento/Framework/Pricing/Adjustment/Calculator.php
@@ -7,7 +7,7 @@
 namespace Magento\Framework\Pricing\Adjustment;
 
 use Magento\Framework\Pricing\Amount\AmountFactory;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 
 /**
  * Class Calculator
diff --git a/lib/internal/Magento/Framework/Pricing/Adjustment/CalculatorInterface.php b/lib/internal/Magento/Framework/Pricing/Adjustment/CalculatorInterface.php
index d9f95da235f07bb2ebab079cdb75cbe159906d45..9c1ad38b62968850fc7058df79241f0629a97f27 100644
--- a/lib/internal/Magento/Framework/Pricing/Adjustment/CalculatorInterface.php
+++ b/lib/internal/Magento/Framework/Pricing/Adjustment/CalculatorInterface.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\Pricing\Adjustment;
 
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 
 /**
  * Calculator interface
diff --git a/lib/internal/Magento/Framework/Pricing/Price/AbstractPrice.php b/lib/internal/Magento/Framework/Pricing/Price/AbstractPrice.php
index dcf40d8560c04fdfb66d2e1de53ddecf503142c8..b505608a6f461741c7df9e1cdccfd92b77f1d6f2 100644
--- a/lib/internal/Magento/Framework/Pricing/Price/AbstractPrice.php
+++ b/lib/internal/Magento/Framework/Pricing/Price/AbstractPrice.php
@@ -8,7 +8,7 @@ namespace Magento\Framework\Pricing\Price;
 
 use Magento\Framework\Pricing\Adjustment\CalculatorInterface;
 use Magento\Framework\Pricing\Amount\AmountInterface;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\PriceInfoInterface;
 
 /**
diff --git a/lib/internal/Magento/Framework/Pricing/Price/Collection.php b/lib/internal/Magento/Framework/Pricing/Price/Collection.php
index d9bd5730df654a221f4cf22e835394111a08dad5..11250e4792d32c38041e0f1c93971d18651ae3a0 100644
--- a/lib/internal/Magento/Framework/Pricing/Price/Collection.php
+++ b/lib/internal/Magento/Framework/Pricing/Price/Collection.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\Pricing\Price;
 
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 
 /**
  * Class Collection
@@ -19,7 +19,7 @@ class Collection implements \Iterator
     protected $pool;
 
     /**
-     * @var \Magento\Framework\Pricing\Object\SaleableInterface
+     * @var \Magento\Framework\Pricing\SaleableInterface
      */
     protected $saleableItem;
 
diff --git a/lib/internal/Magento/Framework/Pricing/Price/Factory.php b/lib/internal/Magento/Framework/Pricing/Price/Factory.php
index c224f3fb82a678d50152545dffb89e93492ce2ce..dd9175f5b0c6001dff20787fc6b70851eee51473 100644
--- a/lib/internal/Magento/Framework/Pricing/Price/Factory.php
+++ b/lib/internal/Magento/Framework/Pricing/Price/Factory.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\Pricing\Price;
 
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 
 /**
  * Price factory
diff --git a/lib/internal/Magento/Framework/Pricing/PriceComposite.php b/lib/internal/Magento/Framework/Pricing/PriceComposite.php
index b173ccbbbb588d0e663b6e1016485c9caf584a44..9447992165ea8d6c861b29493432fbcccc3ef3e3 100644
--- a/lib/internal/Magento/Framework/Pricing/PriceComposite.php
+++ b/lib/internal/Magento/Framework/Pricing/PriceComposite.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\Pricing;
 
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Price\Factory as PriceFactory;
 use Magento\Framework\Pricing\Price\PriceInterface;
 
diff --git a/lib/internal/Magento/Framework/Pricing/PriceInfo/Factory.php b/lib/internal/Magento/Framework/Pricing/PriceInfo/Factory.php
index f214b96b5f80eecfd5c420d0f75b3447c331165a..bbeb9734cbce3fba55eacf77ae81d908f7048d3f 100644
--- a/lib/internal/Magento/Framework/Pricing/PriceInfo/Factory.php
+++ b/lib/internal/Magento/Framework/Pricing/PriceInfo/Factory.php
@@ -10,7 +10,7 @@
 namespace Magento\Framework\Pricing\PriceInfo;
 
 use Magento\Framework\ObjectManagerInterface;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 
 /**
  * Price info model factory
diff --git a/lib/internal/Magento/Framework/Pricing/Render.php b/lib/internal/Magento/Framework/Pricing/Render.php
index 81f085064d08cfe31f47ed5eec60e8bcc9cda294..68f4808d13ba0110780bc466d5186a13cd6d9bc8 100644
--- a/lib/internal/Magento/Framework/Pricing/Render.php
+++ b/lib/internal/Magento/Framework/Pricing/Render.php
@@ -7,7 +7,7 @@
 namespace Magento\Framework\Pricing;
 
 use Magento\Framework\Pricing\Amount\AmountInterface;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Price\PriceInterface;
 use Magento\Framework\Pricing\Render\Layout;
 use Magento\Framework\View\Element\AbstractBlock;
diff --git a/lib/internal/Magento/Framework/Pricing/Render/AbstractAdjustment.php b/lib/internal/Magento/Framework/Pricing/Render/AbstractAdjustment.php
index a986e09e448040e1ac16474f66d72cdd24f6e6b7..3ad38d177d5742f7b0bcf96decfb2afc4a999a72 100644
--- a/lib/internal/Magento/Framework/Pricing/Render/AbstractAdjustment.php
+++ b/lib/internal/Magento/Framework/Pricing/Render/AbstractAdjustment.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\Pricing\Render;
 
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Price\PriceInterface;
 use Magento\Framework\Pricing\PriceCurrencyInterface;
 use Magento\Framework\View\Element\Template;
diff --git a/lib/internal/Magento/Framework/Pricing/Render/AdjustmentRenderInterface.php b/lib/internal/Magento/Framework/Pricing/Render/AdjustmentRenderInterface.php
index 6efeb6b64f9c8f475c449344e3085f67ea12aeae..7f4025a156c061317471b1076107e811578358c3 100644
--- a/lib/internal/Magento/Framework/Pricing/Render/AdjustmentRenderInterface.php
+++ b/lib/internal/Magento/Framework/Pricing/Render/AdjustmentRenderInterface.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\Pricing\Render;
 
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Price\PriceInterface;
 
 /**
diff --git a/lib/internal/Magento/Framework/Pricing/Render/Amount.php b/lib/internal/Magento/Framework/Pricing/Render/Amount.php
index 0f91eedf9850bffcc37719f1cb34cece06ef5726..6e676f8a6f754cac09301a373149be2208ffc552 100644
--- a/lib/internal/Magento/Framework/Pricing/Render/Amount.php
+++ b/lib/internal/Magento/Framework/Pricing/Render/Amount.php
@@ -7,7 +7,7 @@
 namespace Magento\Framework\Pricing\Render;
 
 use Magento\Framework\Pricing\Amount\AmountInterface;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Price\PriceInterface;
 use Magento\Framework\Pricing\PriceCurrencyInterface;
 use Magento\Framework\View\Element\Template;
diff --git a/lib/internal/Magento/Framework/Pricing/Render/AmountRenderInterface.php b/lib/internal/Magento/Framework/Pricing/Render/AmountRenderInterface.php
index 0df0962300bbc6082dae874e919620e059119acc..0638df33d5d56f2ec15f7bec2d977885ee99ddb7 100644
--- a/lib/internal/Magento/Framework/Pricing/Render/AmountRenderInterface.php
+++ b/lib/internal/Magento/Framework/Pricing/Render/AmountRenderInterface.php
@@ -7,7 +7,7 @@
 namespace Magento\Framework\Pricing\Render;
 
 use Magento\Framework\Pricing\Amount\AmountInterface;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Price\PriceInterface;
 
 /**
diff --git a/lib/internal/Magento/Framework/Pricing/Render/PriceBox.php b/lib/internal/Magento/Framework/Pricing/Render/PriceBox.php
index e39898323456862f8c029db596adc5fcfd65cc8f..45181680b33ec8ec1767df9c8b720713e5f576e1 100644
--- a/lib/internal/Magento/Framework/Pricing/Render/PriceBox.php
+++ b/lib/internal/Magento/Framework/Pricing/Render/PriceBox.php
@@ -7,7 +7,7 @@
 namespace Magento\Framework\Pricing\Render;
 
 use Magento\Framework\Pricing\Amount\AmountInterface;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Price\PriceInterface;
 use Magento\Framework\View\Element\Template;
 
diff --git a/lib/internal/Magento/Framework/Pricing/Render/PriceBoxRenderInterface.php b/lib/internal/Magento/Framework/Pricing/Render/PriceBoxRenderInterface.php
index f97286f2a1590251155408dbc087a18d1a542cd9..fc90b207fdefc54ea1252385ec6493c3d8b0d7bb 100644
--- a/lib/internal/Magento/Framework/Pricing/Render/PriceBoxRenderInterface.php
+++ b/lib/internal/Magento/Framework/Pricing/Render/PriceBoxRenderInterface.php
@@ -7,7 +7,7 @@
 namespace Magento\Framework\Pricing\Render;
 
 use Magento\Framework\Pricing\Amount\AmountInterface;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Price\PriceInterface;
 
 /**
diff --git a/lib/internal/Magento/Framework/Pricing/Render/RendererPool.php b/lib/internal/Magento/Framework/Pricing/Render/RendererPool.php
index c501e4adf70fdc644f682fc69a0347313efb5eb0..5f00a19283244113dff314622325d74308e2f577 100644
--- a/lib/internal/Magento/Framework/Pricing/Render/RendererPool.php
+++ b/lib/internal/Magento/Framework/Pricing/Render/RendererPool.php
@@ -9,7 +9,7 @@
 namespace Magento\Framework\Pricing\Render;
 
 use Magento\Framework\Pricing\Amount\AmountInterface;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Price\PriceInterface;
 use Magento\Framework\View\Element\AbstractBlock;
 
diff --git a/lib/internal/Magento/Framework/Pricing/Object/SaleableInterface.php b/lib/internal/Magento/Framework/Pricing/SaleableInterface.php
similarity index 94%
rename from lib/internal/Magento/Framework/Pricing/Object/SaleableInterface.php
rename to lib/internal/Magento/Framework/Pricing/SaleableInterface.php
index 214ac4140f18efe7dbe84640231d96f201a7f7e4..82bc5360a6933a3fb73edd187b2bbce66bc87c9b 100644
--- a/lib/internal/Magento/Framework/Pricing/Object/SaleableInterface.php
+++ b/lib/internal/Magento/Framework/Pricing/SaleableInterface.php
@@ -4,7 +4,7 @@
  * See COPYING.txt for license details.
  */
 
-namespace Magento\Framework\Pricing\Object;
+namespace Magento\Framework\Pricing;
 
 /**
  * Interface SaleableInterface
diff --git a/lib/internal/Magento/Framework/Pricing/Test/Unit/Price/AbstractPriceTest.php b/lib/internal/Magento/Framework/Pricing/Test/Unit/Price/AbstractPriceTest.php
index bd483f31260b885115a37a7babc63608bdeacba8..a099ee2cacc2be312a79a5a84eb3e8db9eb39c38 100644
--- a/lib/internal/Magento/Framework/Pricing/Test/Unit/Price/AbstractPriceTest.php
+++ b/lib/internal/Magento/Framework/Pricing/Test/Unit/Price/AbstractPriceTest.php
@@ -29,7 +29,7 @@ class AbstractPriceTest extends \PHPUnit_Framework_TestCase
     protected $amountMock;
 
     /**
-     * @var \Magento\Framework\Pricing\Object\SaleableInterface |\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Pricing\SaleableInterface |\PHPUnit_Framework_MockObject_MockObject
      */
     protected $saleableItemMock;
 
diff --git a/lib/internal/Magento/Framework/Pricing/Test/Unit/Price/CollectionTest.php b/lib/internal/Magento/Framework/Pricing/Test/Unit/Price/CollectionTest.php
index 3b6a28728b87667edb37649366efbf8adb368b71..b39017487dec6d85df56be7f4443ca7ffbaf6fdf 100644
--- a/lib/internal/Magento/Framework/Pricing/Test/Unit/Price/CollectionTest.php
+++ b/lib/internal/Magento/Framework/Pricing/Test/Unit/Price/CollectionTest.php
@@ -30,7 +30,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
     protected $priceMock;
 
     /**
-     * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $saleableItemMock;
 
@@ -56,7 +56,7 @@ class CollectionTest extends \PHPUnit_Framework_TestCase
             ]
         );
 
-        $this->saleableItemMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface');
+        $this->saleableItemMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\SaleableInterface');
         $this->priceMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\Price\PriceInterface');
         $this->factoryMock = $this->getMock('Magento\Framework\Pricing\Price\Factory', [], [], '', false);
 
diff --git a/lib/internal/Magento/Framework/Pricing/Test/Unit/Price/FactoryTest.php b/lib/internal/Magento/Framework/Pricing/Test/Unit/Price/FactoryTest.php
index e5494c9b43e3957313fef3aa0cfb8205d902bdfc..69973716bb4d0f0bad2a6a745eb01097f94c4a06 100644
--- a/lib/internal/Magento/Framework/Pricing/Test/Unit/Price/FactoryTest.php
+++ b/lib/internal/Magento/Framework/Pricing/Test/Unit/Price/FactoryTest.php
@@ -38,7 +38,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
         $quantity = 2.2;
         $className = 'Magento\Framework\Pricing\Price\PriceInterface';
         $priceMock = $this->getMock($className);
-        $saleableItem = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface');
+        $saleableItem = $this->getMock('Magento\Framework\Pricing\SaleableInterface');
         $arguments = [];
 
         $argumentsResult = array_merge($arguments, ['saleableItem' => $saleableItem, 'quantity' => $quantity]);
@@ -62,7 +62,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
         $quantity = 2.2;
         $className = 'Magento\Framework\Pricing\PriceInfo\Base';
         $priceMock = $this->getMockBuilder($className)->disableOriginalConstructor()->getMock();
-        $saleableItem = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface');
+        $saleableItem = $this->getMock('Magento\Framework\Pricing\SaleableInterface');
         $arguments = [];
 
         $argumentsResult = array_merge($arguments, ['saleableItem' => $saleableItem, 'quantity' => $quantity]);
diff --git a/lib/internal/Magento/Framework/Pricing/Test/Unit/PriceInfo/FactoryTest.php b/lib/internal/Magento/Framework/Pricing/Test/Unit/PriceInfo/FactoryTest.php
index dd2c3a439b25a13b32b284d606ed9d165831c4f5..e765f9c037221c8be6829f918fcf7c369458de62 100644
--- a/lib/internal/Magento/Framework/Pricing/Test/Unit/PriceInfo/FactoryTest.php
+++ b/lib/internal/Magento/Framework/Pricing/Test/Unit/PriceInfo/FactoryTest.php
@@ -5,8 +5,7 @@
  */
 namespace Magento\Framework\Pricing\Test\Unit\PriceInfo;
 
-use \Magento\Framework\Pricing\PriceInfo\Factory;
-
+use Magento\Framework\Pricing\PriceInfo\Factory;
 
 /**
  * Test class for \Magento\Framework\Pricing\PriceInfo\Factory
@@ -34,7 +33,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
     protected $pricesMock;
 
     /**
-     * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $saleableItemMock;
 
@@ -63,7 +62,7 @@ class FactoryTest extends \PHPUnit_Framework_TestCase
             false
         );
         $this->saleableItemMock = $this->getMockForAbstractClass(
-            'Magento\Framework\Pricing\Object\SaleableInterface',
+            'Magento\Framework\Pricing\SaleableInterface',
             [],
             '',
             false,
diff --git a/lib/internal/Magento/Framework/Pricing/Test/Unit/Render/AbstractAdjustmentTest.php b/lib/internal/Magento/Framework/Pricing/Test/Unit/Render/AbstractAdjustmentTest.php
index 8a94af2093f81db47fa0f3c1f78fc9152ddf7b1c..f9cede7a6164516bf9cdfeac092e3ba0d411bb6c 100644
--- a/lib/internal/Magento/Framework/Pricing/Test/Unit/Render/AbstractAdjustmentTest.php
+++ b/lib/internal/Magento/Framework/Pricing/Test/Unit/Render/AbstractAdjustmentTest.php
@@ -100,7 +100,7 @@ class AbstractAdjustmentTest extends \PHPUnit_Framework_TestCase
     {
         $amountRender = $this->getMock('Magento\Framework\Pricing\Render\Amount', [], [], '', false);
         $price = $this->getMockForAbstractClass('Magento\Framework\Pricing\Price\PriceInterface');
-        $sealableItem = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface');
+        $sealableItem = $this->getMockForAbstractClass('Magento\Framework\Pricing\SaleableInterface');
         $priceInfo = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false);
         $priceCode = 'regular_price';
 
@@ -140,7 +140,7 @@ class AbstractAdjustmentTest extends \PHPUnit_Framework_TestCase
 
     public function testGetSealableItem()
     {
-        $sealableItem = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface');
+        $sealableItem = $this->getMockForAbstractClass('Magento\Framework\Pricing\SaleableInterface');
         $amountRender = $this->getMock('Magento\Framework\Pricing\Render\Amount', [], [], '', false);
         $amountRender->expects($this->once())
             ->method('getSaleableItem')
@@ -158,7 +158,7 @@ class AbstractAdjustmentTest extends \PHPUnit_Framework_TestCase
     {
         $amountRender = $this->getMock('Magento\Framework\Pricing\Render\Amount', [], [], '', false);
         $adjustment = $this->getMockForAbstractClass('Magento\Framework\Pricing\Adjustment\AdjustmentInterface');
-        $sealableItem = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface');
+        $sealableItem = $this->getMockForAbstractClass('Magento\Framework\Pricing\SaleableInterface');
         $priceInfo = $this->getMock('Magento\Framework\Pricing\PriceInfo\Base', [], [], '', false);
         $adjustmentCode = 'tax';
 
diff --git a/lib/internal/Magento/Framework/Pricing/Test/Unit/Render/AmountTest.php b/lib/internal/Magento/Framework/Pricing/Test/Unit/Render/AmountTest.php
index 75d87e1f96ca407accaf39af97ce353f02d86228..3820b5a3312751a194103b54e082df2653cd6297 100644
--- a/lib/internal/Magento/Framework/Pricing/Test/Unit/Render/AmountTest.php
+++ b/lib/internal/Magento/Framework/Pricing/Test/Unit/Render/AmountTest.php
@@ -7,7 +7,7 @@ namespace Magento\Framework\Pricing\Test\Unit\Render;
 
 use Magento\Framework\Pricing\Render\RendererPool;
 use Magento\Framework\Pricing\Render\Amount;
-use Magento\Framework\Pricing\Object\SaleableInterface;
+use Magento\Framework\Pricing\SaleableInterface;
 use Magento\Framework\Pricing\Price\PriceInterface;
 
 /**
@@ -77,7 +77,7 @@ class AmountTest extends \PHPUnit_Framework_TestCase
 
         $this->layout = $this->getMock('Magento\Framework\View\Layout', [], [], '', false);
         $this->amount = $this->getMockForAbstractClass('Magento\Framework\Pricing\Amount\AmountInterface');
-        $this->saleableItemMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\Object\SaleableInterface');
+        $this->saleableItemMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\SaleableInterface');
         $this->priceMock = $this->getMockForAbstractClass('Magento\Framework\Pricing\Price\PriceInterface');
 
         $eventManager = $this->getMock('Magento\Framework\Event\Test\Unit\ManagerStub', [], [], '', false);
diff --git a/lib/internal/Magento/Framework/Pricing/Test/Unit/Render/PriceBoxTest.php b/lib/internal/Magento/Framework/Pricing/Test/Unit/Render/PriceBoxTest.php
index 85c0f76c427bf04b42a370b0c6051c3480a097dc..8ffa2d1749f62a234c97f6da15f573d4e3a00995 100644
--- a/lib/internal/Magento/Framework/Pricing/Test/Unit/Render/PriceBoxTest.php
+++ b/lib/internal/Magento/Framework/Pricing/Test/Unit/Render/PriceBoxTest.php
@@ -33,7 +33,7 @@ class PriceBoxTest extends \PHPUnit_Framework_TestCase
     protected $rendererPool;
 
     /**
-     * @var \Magento\Framework\Pricing\Object\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Pricing\SaleableInterface|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $saleable;
 
@@ -73,7 +73,7 @@ class PriceBoxTest extends \PHPUnit_Framework_TestCase
             ->method('getScopeConfig')
             ->will($this->returnValue($scopeConfigMock));
 
-        $this->saleable = $this->getMock('Magento\Framework\Pricing\Object\SaleableInterface');
+        $this->saleable = $this->getMock('Magento\Framework\Pricing\SaleableInterface');
 
         $this->price = $this->getMock('Magento\Framework\Pricing\Price\PriceInterface');
 
diff --git a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Adapter.php b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Adapter.php
index b2b2955e371e8c6065f6409dfe74862eb04270ef..19e5b69d441a450305ab6738611622af69cba94d 100644
--- a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Adapter.php
+++ b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Adapter.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Search\Adapter\Mysql;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Ddl\Table;
 use Magento\Framework\DB\Select;
 use Magento\Framework\Search\Adapter\Mysql\Aggregation\Builder as AggregationBuilder;
@@ -32,7 +32,7 @@ class Adapter implements AdapterInterface
     protected $responseFactory;
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     private $resource;
 
@@ -49,14 +49,14 @@ class Adapter implements AdapterInterface
     /**
      * @param Mapper $mapper
      * @param ResponseFactory $responseFactory
-     * @param Resource|Resource $resource
+     * @param ResourceConnection $resource
      * @param AggregationBuilder $aggregationBuilder
      * @param TemporaryStorageFactory $temporaryStorageFactory
      */
     public function __construct(
         Mapper $mapper,
         ResponseFactory $responseFactory,
-        Resource $resource,
+        ResourceConnection $resource,
         AggregationBuilder $aggregationBuilder,
         TemporaryStorageFactory $temporaryStorageFactory
     ) {
diff --git a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Aggregation/Builder.php b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Aggregation/Builder.php
index 3ec6e6af47a5eb4f522bf8413d85dd5fc70349b0..2d98fe27146385ba7e317046579ab8d7ca65dc3b 100644
--- a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Aggregation/Builder.php
+++ b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Aggregation/Builder.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Search\Adapter\Mysql\Aggregation;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Ddl\Table;
 use Magento\Framework\DB\Select;
 use Magento\Framework\Search\Adapter\Mysql\Aggregation\Builder\Container as AggregationContainer;
@@ -35,13 +35,13 @@ class Builder
     private $resource;
 
     /**
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      * @param DataProviderContainer $dataProviderContainer
      * @param AggregationContainer $aggregationContainer
      * @param EntityMetadata $entityMetadata
      */
     public function __construct(
-        Resource $resource,
+        ResourceConnection $resource,
         DataProviderContainer $dataProviderContainer,
         AggregationContainer $aggregationContainer,
         EntityMetadata $entityMetadata
diff --git a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Aggregation/Builder/Range.php b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Aggregation/Builder/Range.php
index af26af0fcc99a19dcdf245df2b309124e64a63df..43cc4dfd810af2c606d658b62d0655f48df679d4 100644
--- a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Aggregation/Builder/Range.php
+++ b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Aggregation/Builder/Range.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Search\Adapter\Mysql\Aggregation\Builder;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Ddl\Table;
 use Magento\Framework\DB\Select;
 use Magento\Framework\Search\Adapter\Mysql\Aggregation\DataProviderInterface;
@@ -36,9 +36,9 @@ class Range implements BucketInterface
 
     /**
      * @param Metrics $metricsBuilder
-     * @param Resource $resource
+     * @param ResourceConnection $resource
      */
-    public function __construct(Metrics $metricsBuilder, Resource $resource)
+    public function __construct(Metrics $metricsBuilder, ResourceConnection $resource)
     {
         $this->metricsBuilder = $metricsBuilder;
         $this->resource = $resource;
diff --git a/lib/internal/Magento/Framework/Search/Adapter/Mysql/ConditionManager.php b/lib/internal/Magento/Framework/Search/Adapter/Mysql/ConditionManager.php
index f236d47652de0c431b401c7549aaa216cee53052..b7d64c1725e70e1ae1abe62ee385daa769274383 100644
--- a/lib/internal/Magento/Framework/Search/Adapter/Mysql/ConditionManager.php
+++ b/lib/internal/Magento/Framework/Search/Adapter/Mysql/ConditionManager.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Search\Adapter\Mysql;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Adapter\AdapterInterface;
 
 class ConditionManager
@@ -18,9 +18,9 @@ class ConditionManager
     private $connection;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
-    public function __construct(Resource $resource)
+    public function __construct(ResourceConnection $resource)
     {
         $this->connection = $resource->getConnection();
     }
diff --git a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Mapper.php b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Mapper.php
index a5a43007e75a1a64c2a9261a05a00254a839f6a6..c6474213855023d2fb80fbfc1006d7017241b73c 100644
--- a/lib/internal/Magento/Framework/Search/Adapter/Mysql/Mapper.php
+++ b/lib/internal/Magento/Framework/Search/Adapter/Mysql/Mapper.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Search\Adapter\Mysql;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\DB\Ddl\Table;
 use Magento\Framework\DB\Select;
 use Magento\Framework\Search\Adapter\Mysql\Filter\Builder;
@@ -75,7 +75,7 @@ class Mapper
      * @param ScoreBuilderFactory $scoreBuilderFactory
      * @param Builder $filterBuilder
      * @param ConditionManager $conditionManager
-     * @param Resource|Resource $resource
+     * @param ResourceConnection $resource
      * @param EntityMetadata $entityMetadata
      * @param QueryContainerFactory $queryContainerFactory
      * @param Query\Builder\Match $matchBuilder
@@ -86,7 +86,7 @@ class Mapper
         ScoreBuilderFactory $scoreBuilderFactory,
         Builder $filterBuilder,
         ConditionManager $conditionManager,
-        Resource $resource,
+        ResourceConnection $resource,
         EntityMetadata $entityMetadata,
         QueryContainerFactory $queryContainerFactory,
         Match $matchBuilder,
diff --git a/lib/internal/Magento/Framework/Search/Adapter/Mysql/TemporaryStorage.php b/lib/internal/Magento/Framework/Search/Adapter/Mysql/TemporaryStorage.php
index d9308ddb4f10d888a5795e451f94603fefb5461f..a01690cf580d03ec7824301412913a75cfc161ed 100644
--- a/lib/internal/Magento/Framework/Search/Adapter/Mysql/TemporaryStorage.php
+++ b/lib/internal/Magento/Framework/Search/Adapter/Mysql/TemporaryStorage.php
@@ -18,14 +18,14 @@ class TemporaryStorage
     const FIELD_SCORE = 'score';
 
     /**
-     * @var \Magento\Framework\App\Resource
+     * @var \Magento\Framework\App\ResourceConnection
      */
     private $resource;
 
     /**
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
-    public function __construct(\Magento\Framework\App\Resource $resource)
+    public function __construct(\Magento\Framework\App\ResourceConnection $resource)
     {
         $this->resource = $resource;
     }
diff --git a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/AdapterTest.php b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/AdapterTest.php
index 967f06b8f46414bdf23304d08ab04aa1c98fcf2b..2ef84c05681fb1b0c18d8d68450132e85bb0e163 100644
--- a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/AdapterTest.php
+++ b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/AdapterTest.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\Search\Test\Unit\Adapter\Mysql;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Search\Request\BucketInterface;
 use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 
@@ -48,7 +48,7 @@ class AdapterTest extends \PHPUnit_Framework_TestCase
     private $select;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
 
@@ -76,7 +76,7 @@ class AdapterTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
 
-        $this->resource = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->setMethods(['getConnection'])
             ->disableOriginalConstructor()
             ->getMock();
diff --git a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/Aggregation/Builder/RangeTest.php b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/Aggregation/Builder/RangeTest.php
index eb59fd978a8f215ab5b6e3dca16eb94edd6f59b5..916000196d9794f65660322e22592672477c6ef5 100644
--- a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/Aggregation/Builder/RangeTest.php
+++ b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/Aggregation/Builder/RangeTest.php
@@ -17,7 +17,7 @@ class RangeTest extends \PHPUnit_Framework_TestCase
     private $metricsBuilder;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
 
@@ -77,7 +77,7 @@ class RangeTest extends \PHPUnit_Framework_TestCase
             ->method('select')
             ->willReturn($this->select);
 
-        $this->resource = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->resource->expects($this->any())
diff --git a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/Aggregation/BuilderTest.php b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/Aggregation/BuilderTest.php
index 8fbd9b09d89141828cd816054d36688656dd4034..f29050b92fbc45fb057ee8b9c058cc740560da4e 100644
--- a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/Aggregation/BuilderTest.php
+++ b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/Aggregation/BuilderTest.php
@@ -18,7 +18,7 @@ class BuilderTest extends \PHPUnit_Framework_TestCase
     private $entityMetadata;
 
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
 
@@ -128,7 +128,7 @@ class BuilderTest extends \PHPUnit_Framework_TestCase
             ->getMock();
         $this->dataProviderContainer->expects($this->any())->method('get')->willReturn($this->dataProvider);
 
-        $this->resource = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->resource->expects($this->any())->method('getConnection')->willReturn($this->connectionMock);
diff --git a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/ConditionManagerTest.php b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/ConditionManagerTest.php
index b74842cfff843d58f481b4d5e17c434958d15fd6..6bf45ad69370a557aaa7cac296145f8d27590e23 100644
--- a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/ConditionManagerTest.php
+++ b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/ConditionManagerTest.php
@@ -11,7 +11,7 @@ use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
 class ConditionManagerTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\App\Resource|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
      */
     private $resource;
 
@@ -50,7 +50,7 @@ class ConditionManagerTest extends \PHPUnit_Framework_TestCase
                 )
             );
 
-        $this->resource = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->resource->expects($this->once())
diff --git a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/MapperTest.php b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/MapperTest.php
index c952c3b53962b2837ed1cb571434f18144f7fc44..5395ae5f8113c880eeb723028649b461c9696bcc 100644
--- a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/MapperTest.php
+++ b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/MapperTest.php
@@ -11,7 +11,7 @@ use \Magento\Framework\Search\Adapter\Mysql\Mapper;
 use Magento\Framework\Search\Adapter\Mysql\Query\Builder\Match;
 use Magento\Framework\Search\Adapter\Mysql\TemporaryStorage;
 use PHPUnit_Framework_MockObject_MockObject as MockObject;
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Search\Request\Query\BoolExpression;
 use Magento\Framework\Search\Request\Query\Filter;
 use Magento\Framework\Search\Request\QueryInterface;
@@ -62,7 +62,7 @@ class MapperTest extends \PHPUnit_Framework_TestCase
     private $scoreBuilderFactory;
 
     /**
-     * @var \Magento\Framework\App\Resource|MockObject
+     * @var \Magento\Framework\App\ResourceConnection|MockObject
      */
     private $resource;
 
@@ -88,7 +88,7 @@ class MapperTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
 
-        $this->resource = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $this->resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $this->resource->expects($this->any())->method('getConnection')
diff --git a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/TemporaryStorageTest.php b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/TemporaryStorageTest.php
index f7ea0d748ab9f44e7b64bcbe9bf429e570bdafb2..cdbcd2e2c47fbcf3ccfa38fd3bb93b49bd03d21c 100644
--- a/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/TemporaryStorageTest.php
+++ b/lib/internal/Magento/Framework/Search/Test/Unit/Adapter/Mysql/TemporaryStorageTest.php
@@ -34,7 +34,7 @@ class TemporaryStorageTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMockForAbstractClass();
 
-        $resource = $this->getMockBuilder('Magento\Framework\App\Resource')
+        $resource = $this->getMockBuilder('Magento\Framework\App\ResourceConnection')
             ->disableOriginalConstructor()
             ->getMock();
         $resource->expects($this->any())
diff --git a/lib/internal/Magento/Framework/Session/SaveHandler/DbTable.php b/lib/internal/Magento/Framework/Session/SaveHandler/DbTable.php
index d90d5efc22ceb2a889e3680d0c844c08ed850c49..301caf9a8270b85dd0a4f469935286e6e6963bfe 100644
--- a/lib/internal/Magento/Framework/Session/SaveHandler/DbTable.php
+++ b/lib/internal/Magento/Framework/Session/SaveHandler/DbTable.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\Session\SaveHandler;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Framework\Exception\SessionException;
 use Magento\Framework\Phrase;
 
@@ -31,9 +31,9 @@ class DbTable extends \SessionHandler
     /**
      * Constructor
      *
-     * @param \Magento\Framework\App\Resource $resource
+     * @param \Magento\Framework\App\ResourceConnection $resource
      */
-    public function __construct(\Magento\Framework\App\Resource $resource)
+    public function __construct(\Magento\Framework\App\ResourceConnection $resource)
     {
         $this->_sessionTable = $resource->getTableName('session');
         $this->connection = $resource->getConnection();
diff --git a/lib/internal/Magento/Framework/Session/Test/Unit/SaveHandler/DbTableTest.php b/lib/internal/Magento/Framework/Session/Test/Unit/SaveHandler/DbTableTest.php
index 89efdac63f84246370f00225a167f1b9c976e1d7..632187b19885293a7716c4175d94570f75c6c162 100644
--- a/lib/internal/Magento/Framework/Session/Test/Unit/SaveHandler/DbTableTest.php
+++ b/lib/internal/Magento/Framework/Session/Test/Unit/SaveHandler/DbTableTest.php
@@ -82,7 +82,7 @@ class DbTableTest extends \PHPUnit_Framework_TestCase
         );
 
         $resource = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -106,7 +106,7 @@ class DbTableTest extends \PHPUnit_Framework_TestCase
     public function testCheckConnectionNoConnection()
     {
         $resource = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -147,7 +147,7 @@ class DbTableTest extends \PHPUnit_Framework_TestCase
         );
 
         $resource = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -184,7 +184,7 @@ class DbTableTest extends \PHPUnit_Framework_TestCase
     protected function _prepareResourceMock($connection)
     {
         $resource = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
diff --git a/lib/internal/Magento/Framework/Setup/BackupRollback.php b/lib/internal/Magento/Framework/Setup/BackupRollback.php
index b992827bff9b5404f65ae84dd2052fa39a0047c5..bf2327d2145d4e91fd305f9d95c741f71418c97d 100644
--- a/lib/internal/Magento/Framework/Setup/BackupRollback.php
+++ b/lib/internal/Magento/Framework/Setup/BackupRollback.php
@@ -246,7 +246,7 @@ class BackupRollback
         }
         $dbRollback->setTime($time[0]);
         $this->log->log('DB rollback is starting...');
-        $dbRollback->setResourceModel($this->objectManager->create('Magento\Backup\Model\Resource\Db'));
+        $dbRollback->setResourceModel($this->objectManager->create('Magento\Backup\Model\ResourceModel\Db'));
         $dbRollback->rollback();
         $this->log->log('DB rollback filename: ' . $dbRollback->getBackupFilename());
         $this->log->log('DB rollback path: ' . $dbRollback->getBackupPath());
diff --git a/lib/internal/Magento/Framework/Setup/SampleData/Context.php b/lib/internal/Magento/Framework/Setup/SampleData/Context.php
new file mode 100644
index 0000000000000000000000000000000000000000..2624bfb20bea099aecb5cbf414c581611d07149e
--- /dev/null
+++ b/lib/internal/Magento/Framework/Setup/SampleData/Context.php
@@ -0,0 +1,50 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Setup\SampleData;
+
+use \Magento\Framework\File\Csv;
+
+/**
+ * Class Context
+ */
+class Context
+{
+    /**
+     * @var FixtureManager
+     */
+    private $fixtureManager;
+
+    /**
+     * @var Csv
+     */
+    private $csvReader;
+
+    /**
+     * @param FixtureManager $fixtureManager
+     * @param Csv $csvReader
+     */
+    public function __construct(FixtureManager $fixtureManager, Csv $csvReader)
+    {
+        $this->fixtureManager = $fixtureManager;
+        $this->csvReader = $csvReader;
+    }
+
+    /**
+     * @return FixtureManager
+     */
+    public function getFixtureManager()
+    {
+        return $this->fixtureManager;
+    }
+
+    /**
+     * @return Csv
+     */
+    public function getCsvReader()
+    {
+        return $this->csvReader;
+    }
+}
diff --git a/lib/internal/Magento/Framework/Setup/SampleData/Executor.php b/lib/internal/Magento/Framework/Setup/SampleData/Executor.php
new file mode 100644
index 0000000000000000000000000000000000000000..4f2d966099d964e8fdcf644095549632ee2fc10e
--- /dev/null
+++ b/lib/internal/Magento/Framework/Setup/SampleData/Executor.php
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Setup\SampleData;
+
+class Executor
+{
+    /**
+     * @var State
+     */
+    private $state;
+
+    /**
+     * @var \Psr\Log\LoggerInterface
+     */
+    private $logger;
+
+    /**
+     * @var \Magento\Framework\App\State
+     */
+    private $appState;
+
+    /**
+     * @param \Psr\Log\LoggerInterface $logger
+     * @param State $state
+     * @param \Magento\Framework\App\State $appState
+     */
+    public function __construct(
+        \Psr\Log\LoggerInterface $logger,
+        \Magento\Framework\Setup\SampleData\State $state,
+        \Magento\Framework\App\State $appState
+    ) {
+        $this->logger = $logger;
+        $this->state = $state;
+        $this->appState = $appState;
+    }
+
+    /**
+     * Execute SampleData module installation.
+     * Catch exception if it appeared and continue installation
+     *
+     * @param InstallerInterface $installer
+     * @return void
+     */
+    public function exec(InstallerInterface $installer)
+    {
+        try {
+            $this->appState->emulateAreaCode('setup', [$installer, 'install']);
+            $this->state->setInstalled();
+        } catch (\Exception $e) {
+            $this->state->setError();
+            $this->logger->error('Sample Data error: ' . $e->getMessage());
+        }
+    }
+}
diff --git a/lib/internal/Magento/Framework/Setup/SampleData/FixtureManager.php b/lib/internal/Magento/Framework/Setup/SampleData/FixtureManager.php
new file mode 100644
index 0000000000000000000000000000000000000000..5746d4029961d021ba83110ba6ffc4d9c6633cea
--- /dev/null
+++ b/lib/internal/Magento/Framework/Setup/SampleData/FixtureManager.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Setup\SampleData;
+
+use Magento\Framework\Component\ComponentRegistrar;
+use Magento\Framework\Filesystem;
+use Magento\Framework\Filesystem\Directory\ReadInterface;
+
+class FixtureManager
+{
+    /**
+     * @var ComponentRegistrar
+     */
+    private $componentRegistrar;
+
+    /**
+     * Modules root directory
+     *
+     * @var ReadInterface
+     */
+    protected $_modulesDirectory;
+
+    /**
+     * @var \Magento\Framework\Stdlib\StringUtils
+     */
+    protected $_string;
+
+    /**
+     * @param ComponentRegistrar $componentRegistrar
+     * @param \Magento\Framework\Stdlib\StringUtils $string
+     */
+    public function __construct(ComponentRegistrar $componentRegistrar, \Magento\Framework\Stdlib\StringUtils $string)
+    {
+        $this->componentRegistrar = $componentRegistrar;
+        $this->_string = $string;
+    }
+
+    /**
+     * @param string $fileId
+     * @return string
+     * @throws \Magento\Framework\Exception\LocalizedException
+     */
+    public function getFixture($fileId)
+    {
+        list($moduleName, $filePath) = \Magento\Framework\View\Asset\Repository::extractModule(
+            $this->normalizePath($fileId)
+        );
+        return $this->componentRegistrar->getPath(ComponentRegistrar::MODULE, $moduleName) . '/' . $filePath;
+    }
+
+    /**
+     * Remove excessive "." and ".." parts from a path
+     *
+     * For example foo/bar/../file.ext -> foo/file.ext
+     *
+     * @param string $path
+     * @return string
+     */
+    public static function normalizePath($path)
+    {
+        $parts = explode('/', $path);
+        $result = [];
+
+        foreach ($parts as $part) {
+            if ('..' === $part) {
+                if (!count($result) || ($result[count($result) - 1] == '..')) {
+                    $result[] = $part;
+                } else {
+                    array_pop($result);
+                }
+            } elseif ('.' !== $part) {
+                $result[] = $part;
+            }
+        }
+        return implode('/', $result);
+    }
+}
diff --git a/lib/internal/Magento/Framework/Setup/SampleData/InstallerInterface.php b/lib/internal/Magento/Framework/Setup/SampleData/InstallerInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..bb12e9e5719c1d4af4aae7d3d29a8f35f9821d98
--- /dev/null
+++ b/lib/internal/Magento/Framework/Setup/SampleData/InstallerInterface.php
@@ -0,0 +1,19 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Setup\SampleData;
+
+/**
+ * Interface for SampleData modules installation
+ */
+interface InstallerInterface
+{
+    /**
+     * Install SampleData module
+     *
+     * @return void
+     */
+    public function install();
+}
diff --git a/lib/internal/Magento/Framework/Setup/SampleData/State.php b/lib/internal/Magento/Framework/Setup/SampleData/State.php
new file mode 100644
index 0000000000000000000000000000000000000000..fd3b893caf88b56d45d566e834f5f8b68c6ef359
--- /dev/null
+++ b/lib/internal/Magento/Framework/Setup/SampleData/State.php
@@ -0,0 +1,159 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Setup\SampleData;
+
+use Magento\Framework\Filesystem;
+use Magento\Framework\App\Filesystem\DirectoryList;
+
+class State implements StateInterface
+{
+    /**
+     * @var string
+     */
+    protected $fileName = '.sample-data-state.flag';
+
+    /**
+     * @var string|null
+     */
+    protected $filePath;
+
+    /**
+     * @var Filesystem
+     */
+    protected $filesystem;
+
+    /**
+     * @param Filesystem $filesystem
+     */
+    public function __construct(Filesystem $filesystem)
+    {
+        $this->filesystem = $filesystem;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function hasError()
+    {
+        $isError = false;
+        $stream = $this->openStream('r');
+        if (!$stream) {
+            return $isError;
+        } elseif (strpos(trim($stream->read(400)), self::ERROR) !== false) {
+            $isError = true;
+        }
+        $this->closeStream($stream);
+        return $isError;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function setError()
+    {
+        if (!$this->hasError()) {
+            $this->writeStream(self::ERROR);
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function isInstalled()
+    {
+        $isInstalled = false;
+        /**@var $stream \Magento\Framework\Filesystem\File\WriteInterface */
+        $stream = $this->openStream('r');
+        if (!$stream) {
+            return $isInstalled;
+        } else {
+            $state = trim($stream->read(400));
+            if (strpos($state, self::ERROR) !== false || strpos($state, self::INSTALLED) !== false) {
+                $isInstalled = true;
+            }
+        }
+        $this->closeStream($stream);
+        return $isInstalled;
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function setInstalled()
+    {
+        if (!$this->isInstalled()) {
+            $this->writeStream(self::INSTALLED);
+        }
+    }
+
+    /**
+     * @inheritdoc
+     */
+    public function clearState()
+    {
+        if ($this->openStream('w')) {
+            $this->writeStream('');
+        }
+    }
+
+    /**
+     * @return \Magento\Framework\Filesystem\File\WriteInterface
+     */
+    protected function getStream()
+    {
+        if (!$stream = $this->openStream('w')) {
+            $stream = $this->filesystem->getDirectoryWrite(DirectoryList::VAR_DIR)->openFile($this->fileName);
+        }
+        return $stream;
+    }
+
+    /**
+     * @param string $mode
+     * @return bool|\Magento\Framework\Filesystem\File\WriteInterface
+     */
+    protected function openStream($mode = 'w')
+    {
+        $fileName = $this->fileName;
+        $stream = false;
+        $directoryWrite = $this->filesystem->getDirectoryWrite(DirectoryList::VAR_DIR);
+        if ($directoryWrite->isExist($fileName)) {
+            $stream = $directoryWrite->openFile($fileName, $mode);
+        }
+        return $stream;
+
+    }
+
+    /**
+     * @param string $data
+     * @throws \Exception
+     * @return void
+     */
+    protected function writeStream($data)
+    {
+        $stream = $this->getStream();
+        if ($stream === false) {
+            throw new \Exception(
+                'Please, ensure that file ' . $this->fileName
+                . ' inside var directory exists and is writable'
+            );
+        }
+        $stream->write($data);
+        $this->closeStream($stream);
+    }
+
+    /**
+     * Closing file stream
+     *
+     * @param \Magento\Framework\Filesystem\File\WriteInterface $stream
+     * @return void
+     */
+    protected function closeStream($stream)
+    {
+        if ($stream) {
+            $stream->close();
+        }
+    }
+}
diff --git a/lib/internal/Magento/Framework/Setup/SampleData/StateInterface.php b/lib/internal/Magento/Framework/Setup/SampleData/StateInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..89f453025c31f146edc3ad28e320259b4e714f4a
--- /dev/null
+++ b/lib/internal/Magento/Framework/Setup/SampleData/StateInterface.php
@@ -0,0 +1,53 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Setup\SampleData;
+
+/**
+ * Interface for SampleData modules installation
+ */
+interface StateInterface
+{
+    /**
+     * Current state
+     */
+    const ERROR = 'error';
+    const INSTALLED = 'installed';
+
+    /**
+     * Set error flag to Sample Data state
+     *
+     * @return void
+     */
+    public function setError();
+
+    /**
+     * Check if Sample Data state has error
+     *
+     * @return bool
+     */
+    public function hasError();
+
+    /**
+     * Set installed flag to Sample Data state
+     *
+     * @return void
+     */
+    public function setInstalled();
+
+    /**
+     * Check if Sample Data is installed
+     *
+     * @return bool
+     */
+    public function isInstalled();
+
+    /**
+     * Clear Sample Data state
+     *
+     * @return void
+     */
+    public function clearState();
+}
diff --git a/lib/internal/Magento/Framework/Setup/Test/Unit/SampleData/StateTest.php b/lib/internal/Magento/Framework/Setup/Test/Unit/SampleData/StateTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..9f9bb48d76cd6c304faf60e4d838652f57fff460
--- /dev/null
+++ b/lib/internal/Magento/Framework/Setup/Test/Unit/SampleData/StateTest.php
@@ -0,0 +1,89 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\Setup\Test\Unit\SampleData;
+
+/**
+ * Class StateTest
+ */
+class StateTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \Magento\Framework\Setup\SampleData\State|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $state;
+
+    /**
+     * @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $filesystem;
+
+    /**
+     * @var \Magento\Framework\Filesystem\Directory\WriteInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $writeInterface;
+
+    /**
+     * @var string
+     */
+    protected $absolutePath;
+
+    public function setUp()
+    {
+        $this->filesystem = $this->getMockBuilder('Magento\Framework\Filesystem')
+            ->setMethods(['getDirectoryWrite'])
+            ->disableOriginalConstructor()
+            ->getMock();
+        $this->writeInterface = $this->getMockForAbstractClass(
+            'Magento\Framework\Filesystem\Directory\WriteInterface',
+            [],
+            '',
+            false,
+            true,
+            true,
+            ['write', 'close']
+        );
+        $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->state = $objectManager->getObject(
+            'Magento\Framework\Setup\SampleData\State',
+            ['filesystem' => $this->filesystem]
+        );
+    }
+
+    public function testClearState()
+    {
+        $this->filesystem->expects($this->any())->method('getDirectoryWrite')->willReturn($this->writeInterface);
+        $this->writeInterface->expects($this->any())->method('openFile')->willReturnSelf();
+
+        $this->state->clearState();
+    }
+
+    /**
+     * @covers setError()
+     */
+    public function testHasError()
+    {
+        $this->filesystem->expects($this->any())->method('getDirectoryWrite')->willReturn($this->writeInterface);
+        $this->writeInterface->expects($this->any())->method('openFile')->willReturnSelf();
+        $this->writeInterface->expects($this->any())->method('write')->willReturnSelf();
+        $this->writeInterface->expects($this->any())->method('close');
+        $this->writeInterface->expects($this->any())->method('isExist')->willReturn(true);
+        $this->writeInterface->expects($this->any())->method('read')
+            ->willReturn(\Magento\Framework\Setup\SampleData\State::ERROR);
+        $this->state->setError();
+        $this->assertTrue($this->state->hasError());
+    }
+
+    /**
+     * Clear state file
+     */
+    protected function tearDown()
+    {
+        $this->filesystem->expects($this->any())->method('getDirectoryWrite')->willReturn($this->writeInterface);
+        $this->writeInterface->expects($this->any())->method('openFile')->willReturnSelf($this->absolutePath);
+
+        $this->state->clearState();
+    }
+}
diff --git a/lib/internal/Magento/Framework/Test/Unit/FlagTest.php b/lib/internal/Magento/Framework/Test/Unit/FlagTest.php
index 4756528617de02fba8cd514b967323f4757d8b83..4cf45055b9f4326702a5efc881d0aa95ec6e4dc0 100644
--- a/lib/internal/Magento/Framework/Test/Unit/FlagTest.php
+++ b/lib/internal/Magento/Framework/Test/Unit/FlagTest.php
@@ -44,7 +44,7 @@ class FlagTest extends \PHPUnit_Framework_TestCase
             ->method('beginTransaction')
             ->will($this->returnSelf());
         $appResource = $this->getMock(
-            'Magento\Framework\App\Resource',
+            'Magento\Framework\App\ResourceConnection',
             [],
             [],
             '',
@@ -55,10 +55,10 @@ class FlagTest extends \PHPUnit_Framework_TestCase
             ->method('getConnection')
             ->will($this->returnValue($connection));
 
-        $dbContextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $dbContextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $dbContextMock->expects($this->once())->method('getResources')->willReturn($appResource);
         $resource = $this->getMock(
-            '\Magento\Framework\Flag\Resource',
+            '\Magento\Framework\Flag\FlagResource',
             ['__wakeup', 'load', 'save', 'addCommitCallback', 'commit', 'rollBack'],
             ['context' => $dbContextMock],
             '',
diff --git a/lib/internal/Magento/Framework/Test/Unit/TranslateTest.php b/lib/internal/Magento/Framework/Test/Unit/TranslateTest.php
index a6eb38b152e1451061ba59f9943b14ede1092075..9d027237244bbf016d272f9ba45dc58906ecaa70 100644
--- a/lib/internal/Magento/Framework/Test/Unit/TranslateTest.php
+++ b/lib/internal/Magento/Framework/Test/Unit/TranslateTest.php
@@ -68,7 +68,15 @@ class TranslateTest extends \PHPUnit_Framework_TestCase
         $this->resource = $this->getMock('\Magento\Framework\Translate\ResourceInterface', [], [], '', false);
         $this->locale = $this->getMock('\Magento\Framework\Locale\ResolverInterface', [], [], '', false);
         $this->appState = $this->getMock('\Magento\Framework\App\State', [], [], '', false);
-        $this->request = $this->getMock('\Magento\Framework\App\RequestInterface', [], [], '', false);
+        $this->request = $this->getMockForAbstractClass(
+            '\Magento\Framework\App\RequestInterface',
+            [],
+            '',
+            false,
+            false,
+            true,
+            ['getParam', 'getControllerModule']
+        );
         $this->csvParser = $this->getMock('\Magento\Framework\File\Csv', [], [], '', false);
         $this->packDictionary = $this->getMock('\Magento\Framework\App\Language\Dictionary', [], [], '', false);
         $this->directory = $this->getMock('\Magento\Framework\Filesystem\Directory\ReadInterface', [], [], '', false);
diff --git a/lib/internal/Magento/Framework/TestFramework/Unit/Helper/ObjectManager.php b/lib/internal/Magento/Framework/TestFramework/Unit/Helper/ObjectManager.php
index 92fcff6d44196a1e1a8a8d40a81f87da7a44ef2e..aecb780b1087bd5eb4389eff9c0a2c8bb7139b70 100644
--- a/lib/internal/Magento/Framework/TestFramework/Unit/Helper/ObjectManager.php
+++ b/lib/internal/Magento/Framework/TestFramework/Unit/Helper/ObjectManager.php
@@ -17,7 +17,7 @@ class ObjectManager
      * @var array
      */
     protected $_specialCases = [
-        'Magento\Framework\Model\Resource\AbstractResource' => '_getResourceModelMock',
+        'Magento\Framework\Model\ResourceModel\AbstractResource' => '_getResourceModelMock',
         'Magento\Framework\TranslateInterface' => '_getTranslatorMock',
     ];
 
@@ -86,7 +86,7 @@ class ObjectManager
     protected function _getResourceModelMock()
     {
         $resourceMock = $this->_testObject->getMock(
-            'Magento\Framework\Module\Resource',
+            'Magento\Framework\Module\ModuleResource',
             ['getIdFieldName', '__sleep', '__wakeup'],
             [],
             '',
@@ -146,7 +146,7 @@ class ObjectManager
     /**
      * Get class instance
      *
-     * @param $className
+     * @param string $className
      * @param array $arguments
      * @return object
      */
diff --git a/lib/internal/Magento/Framework/Translate.php b/lib/internal/Magento/Framework/Translate.php
index 2a3341bd5e21b936c97f5624de97c0196a73fc41..d88f4686ee9e4f4fb3375580273b9d73708c1de8 100644
--- a/lib/internal/Magento/Framework/Translate.php
+++ b/lib/internal/Magento/Framework/Translate.php
@@ -204,6 +204,9 @@ class Translate implements \Magento\Framework\TranslateInterface
         if (!isset($this->_config['theme'])) {
             $this->_config['theme'] = $this->_viewDesign->getDesignTheme()->getId();
         }
+        if (!isset($this->_config['module'])) {
+            $this->_config['module'] = $this->getControllerModuleName();
+        }
         return $this;
     }
 
@@ -232,6 +235,15 @@ class Translate implements \Magento\Framework\TranslateInterface
         return null;
     }
 
+    /**
+     * Retrieve name of the current module
+     * @return mixed
+     */
+    protected function getControllerModuleName()
+    {
+        return $this->request->getControllerModule();
+    }
+
     /**
      * Load data from module translation files
      *
@@ -239,7 +251,23 @@ class Translate implements \Magento\Framework\TranslateInterface
      */
     protected function _loadModuleTranslation()
     {
-        foreach ($this->_moduleList->getNames() as $module) {
+        $currentModule = $this->getControllerModuleName();
+        $allModulesExceptCurrent = array_diff($this->_moduleList->getNames(), [$currentModule]);
+
+        $this->loadModuleTranslationByModulesList($allModulesExceptCurrent);
+        $this->loadModuleTranslationByModulesList([$currentModule]);
+        return $this;
+    }
+
+    /**
+     * Load data from module translation files by list of modules
+     *
+     * @param array $modules
+     * @return $this
+     */
+    protected function loadModuleTranslationByModulesList(array $modules)
+    {
+        foreach ($modules as $module) {
             $moduleFilePath = $this->_getModuleTranslationFile($module, $this->getLocale());
             $this->_addData($this->_getFileData($moduleFilePath));
         }
@@ -428,6 +456,9 @@ class Translate implements \Magento\Framework\TranslateInterface
             if (isset($this->_config['theme'])) {
                 $this->_cacheId .= '_' . $this->_config['theme'];
             }
+            if (isset($this->_config['module'])) {
+                $this->_cacheId .= '_' . $this->_config['module'];
+            }
         }
         return $this->_cacheId;
     }
diff --git a/lib/internal/Magento/Framework/Ui/etc/ui_components.xsd b/lib/internal/Magento/Framework/Ui/etc/ui_components.xsd
index 3790dec48e07bbcb9d6661d3ce09551e4cc75f19..f57cee5918faf2e1492be91f8c4107c82b619da7 100644
--- a/lib/internal/Magento/Framework/Ui/etc/ui_components.xsd
+++ b/lib/internal/Magento/Framework/Ui/etc/ui_components.xsd
@@ -114,6 +114,25 @@
             <xs:extension base="input"/>
         </xs:complexContent>
     </xs:complexType>
+    <xs:complexType name="component">
+        <xs:complexContent>
+            <xs:extension base="ui_element">
+                <xs:choice minOccurs="0" maxOccurs="unbounded">
+                    <xs:group ref="configurable"/>
+                </xs:choice>
+            </xs:extension>
+        </xs:complexContent>
+    </xs:complexType>
+    <xs:complexType name="actionsColumn">
+        <xs:complexContent>
+           <xs:extension base="column"/>
+        </xs:complexContent>
+    </xs:complexType>
+    <xs:complexType name="selectionsColumn">
+        <xs:complexContent>
+            <xs:extension base="column"/>
+        </xs:complexContent>
+    </xs:complexType>
     <xs:complexType name="container">
         <xs:complexContent>
             <xs:extension base="ui_element">
diff --git a/lib/internal/Magento/Framework/Ui/etc/ui_configuration.xsd b/lib/internal/Magento/Framework/Ui/etc/ui_configuration.xsd
index 2cf581c0e9bb621808dab7569ef9bab3e99cc42d..9cdf10564944662f5ee6cafa29c88c7c3ee28917 100644
--- a/lib/internal/Magento/Framework/Ui/etc/ui_configuration.xsd
+++ b/lib/internal/Magento/Framework/Ui/etc/ui_configuration.xsd
@@ -34,6 +34,9 @@
                     <xs:element type="argumentType" name="argument"/>
                     <xs:element type="bookmark" name="bookmark"/>
                     <xs:element name="filterSearch" type="filterSearch" />
+                    <xs:element name="component" type="component" />
+                    <xs:element name="actionsColumn" type="actionsColumn" />
+                    <xs:element name="selectionsColumn" type="selectionsColumn" />
                     <xs:element type="exportButton" name="exportButton"/>
                 </xs:choice>
             </xs:extension>
@@ -80,6 +83,8 @@
             <xs:extension base="columns">
                 <xs:choice minOccurs="0" maxOccurs="unbounded">
                     <xs:element name="column" type="column" />
+                    <xs:element name="actionsColumn" type="actionsColumn" />
+                    <xs:element name="selectionsColumn" type="selectionsColumn" />
                 </xs:choice>
             </xs:extension>
         </xs:complexContent>
diff --git a/lib/internal/Magento/Framework/Ui/etc/ui_definition.xsd b/lib/internal/Magento/Framework/Ui/etc/ui_definition.xsd
index 75b710a0e8bf406a3d649a5ad6c4be26ff253ef0..78cd48d5f43a23f8cf7cac6ed860108fa330fe3b 100644
--- a/lib/internal/Magento/Framework/Ui/etc/ui_definition.xsd
+++ b/lib/internal/Magento/Framework/Ui/etc/ui_definition.xsd
@@ -48,11 +48,15 @@
             <xs:element type="dataTypeMedia" name="image"/>
             <xs:element type="dataTypeDate" name="date"/>
             <xs:element type="dataTypeEmail" name="email"/>
+            <xs:element type="dataTypeMedia" name="file"/>
             <xs:element type="nav" name="nav"/>
             <xs:element type="actions" name="actions"/>
             <xs:element type="bookmark" name="bookmark"/>
             <xs:element type="exportButton" name="exportButton"/>
             <xs:element type="action" name="action"/>
+            <xs:element name="component" type="component" />
+            <xs:element name="actionsColumn" type="actionsColumn" />
+            <xs:element name="selectionsColumn" type="selectionsColumn" />
         </xs:all>
     </xs:complexType>
     <!-- Custom configuration -->
diff --git a/lib/internal/Magento/Framework/View/Element/Html/Calendar.php b/lib/internal/Magento/Framework/View/Element/Html/Calendar.php
index c2351e2de84123c6fe0a5c74efb96794a056f808..7721e11da10d2270b222fbeee321d0406f18e65a 100644
--- a/lib/internal/Magento/Framework/View/Element/Html/Calendar.php
+++ b/lib/internal/Magento/Framework/View/Element/Html/Calendar.php
@@ -168,6 +168,6 @@ class Calendar extends \Magento\Framework\View\Element\Template
     public function getYearRange()
     {
         return (new \DateTime())->modify('- 100 years')->format('Y')
-            . ':' . (new \DateTime())->format('Y');
+            . ':' . (new \DateTime())->modify('+ 100 years')->format('Y');
     }
 }
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php b/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php
index 1dd81a187c7508f516dbd37f9d77ec239eb6812e..3ea8c49a43d6180decaa0a42ee34f06d2c256566 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/Context.php
@@ -7,6 +7,7 @@ namespace Magento\Framework\View\Element\UiComponent;
 
 use Magento\Framework\UrlInterface;
 use Magento\Framework\App\RequestInterface;
+use Magento\Framework\View\Element\UiComponent\Processor;
 use Magento\Framework\View\Element\UiComponentInterface;
 use Magento\Framework\View\Element\UiComponent\Control\ActionPoolFactory;
 use Magento\Framework\View\Element\UiComponent\Control\ActionPoolInterface;
@@ -84,6 +85,11 @@ class Context implements ContextInterface
      */
     protected $urlBuilder;
 
+    /**
+     * @var Processor
+     */
+    protected $processor;
+
     /**
      * @param PageLayoutInterface $pageLayout
      * @param RequestInterface $request
@@ -91,8 +97,9 @@ class Context implements ContextInterface
      * @param ActionPoolFactory $actionPoolFactory
      * @param ContentTypeFactory $contentTypeFactory
      * @param UrlInterface $urlBuilder
+     * @param Processor $processor
      * @param DataProviderInterface|null $dataProvider
-     * @param string $namespace
+     * @param null $namespace
      */
     public function __construct(
         PageLayoutInterface $pageLayout,
@@ -101,6 +108,7 @@ class Context implements ContextInterface
         ActionPoolFactory $actionPoolFactory,
         ContentTypeFactory $contentTypeFactory,
         UrlInterface $urlBuilder,
+        Processor $processor,
         DataProviderInterface $dataProvider = null,
         $namespace = null
     ) {
@@ -112,7 +120,7 @@ class Context implements ContextInterface
         $this->actionPool = $actionPoolFactory->create(['context' => $this]);
         $this->contentTypeFactory = $contentTypeFactory;
         $this->urlBuilder = $urlBuilder;
-
+        $this->processor = $processor;
         $this->setAcceptType();
     }
 
@@ -362,4 +370,12 @@ class Context implements ContextInterface
         }
         $data = $component->prepareDataSource($data);
     }
+
+    /**
+     * @inheritDoc
+     */
+    public function getProcessor()
+    {
+        return $this->processor;
+    }
 }
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/ContextInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/ContextInterface.php
index 55ed8e0d0657d2a7dc784bdf33f34782d8afe3e9..bd89985dc14905ebdfbec190796dcbd80075fd8f 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/ContextInterface.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/ContextInterface.php
@@ -5,6 +5,7 @@
  */
 namespace Magento\Framework\View\Element\UiComponent;
 
+use Magento\Framework\View\Element\UiComponent\Processor;
 use Magento\Framework\View\Element\UiComponentInterface;
 use Magento\Framework\View\Element\UiComponent\ContentType\ContentTypeInterface;
 use Magento\Framework\View\Element\UiComponent\DataProvider\DataProviderInterface;
@@ -136,4 +137,11 @@ interface ContextInterface
      * @return  string
      */
     public function getUrl($route = '', $params = []);
+
+    /**
+     * Get component processor
+     *
+     * @return Processor
+     */
+    public function getProcessor();
 }
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/CollectionFactory.php b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/CollectionFactory.php
index 19926466e4637222dff05c20e722890ca3d8e914..5adce4658a7d01fc8604d046e0d544352552bfe0 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/CollectionFactory.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/CollectionFactory.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Framework\View\Element\UiComponent\DataProvider;
 
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Framework\ObjectManagerInterface;
 
 /**
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderInterface.php
index 1b7e5c7f841f4676418c6408a39ed615c15e3cf7..b2e3894c00b56c185076a58da850d31b3e7c7816 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderInterface.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/DataProviderInterface.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Framework\View\Element\UiComponent\DataProvider;
 
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 
 /**
  * Interface DataProviderInterface
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/FulltextFilter.php b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/FulltextFilter.php
index c05969298ef80b265378b8e48f69dfaea6a1cd32..f53fbf5d1f4725ffda7c8ac27e8aa300d84362a0 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/FulltextFilter.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/FulltextFilter.php
@@ -7,7 +7,7 @@
 namespace Magento\Framework\View\Element\UiComponent\DataProvider;
 
 use Magento\Framework\Data\Collection\AbstractDb as DbCollection;
-use Magento\Framework\Model\Resource\Db\AbstractDb as DbResource;
+use Magento\Framework\Model\ResourceModel\Db\AbstractDb as DbResource;
 use Magento\Framework\Api\Filter;
 
 /**
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php
index 48f6384aa21170feedb9ae0ac891cb0a11ef48a4..4dd0dab9f343e54621ef52d5e370a371d2062b7e 100644
--- a/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/DataProvider/SearchResult.php
@@ -7,7 +7,7 @@
 namespace Magento\Framework\View\Element\UiComponent\DataProvider;
 
 use Magento\Framework\Api;
-use Magento\Framework\Model\Resource\Db\Collection\AbstractCollection;
+use Magento\Framework\Model\ResourceModel\Db\Collection\AbstractCollection;
 use Magento\Framework\Event\ManagerInterface as EventManager;
 use Magento\Framework\Data\Collection\Db\FetchStrategyInterface as FetchStrategy;
 use Magento\Framework\Data\Collection\EntityFactoryInterface as EntityFactory;
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/ObserverInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/ObserverInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..b9cbce56acb0f35dfe9d63ce0c1f5bb8c818dc66
--- /dev/null
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/ObserverInterface.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\View\Element\UiComponent;
+
+use Magento\Framework\View\Element\UiComponentInterface;
+
+/**
+ * Interface ObserverInterface
+ */
+interface ObserverInterface
+{
+    /**
+     * Update component according to $component
+     *
+     * @param UiComponentInterface $component
+     * @return void
+     */
+    public function update(UiComponentInterface $component);
+}
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/PoolInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/PoolInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c265025925d8e30689571a2c2937b9ecb9b3801c
--- /dev/null
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/PoolInterface.php
@@ -0,0 +1,29 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\View\Element\UiComponent;
+
+use Magento\Framework\View\Element\UiComponentInterface;
+
+/**
+ * Interface PoolInterface
+ */
+interface PoolInterface
+{
+    /**
+     * Register component at pool
+     *
+     * @param UiComponentInterface $component
+     * @return void
+     */
+    public function register(UiComponentInterface $component);
+
+    /**
+     * Retrieve components pool
+     *
+     * @return UiComponentInterface[]
+     */
+    public function getComponents();
+}
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/Processor.php b/lib/internal/Magento/Framework/View/Element/UiComponent/Processor.php
new file mode 100644
index 0000000000000000000000000000000000000000..4e7bb9d9932b0815394b77b0ef0ec3f82ef81422
--- /dev/null
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/Processor.php
@@ -0,0 +1,106 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\View\Element\UiComponent;
+
+use Magento\Framework\View\Element\UiComponentInterface;
+
+/**
+ * Class Processor
+ */
+class Processor implements PoolInterface, SubjectInterface
+{
+    /**
+     * @var UiComponentInterface[]
+     */
+    protected $components = [];
+
+    /**
+     * Array of observers
+     *
+     * [
+     * 'component_type1' => ObserverInterface[],
+     * 'component_type2' => ObserverInterface[],
+     * ]
+     *
+     * @var array
+     */
+    protected $observers = [];
+
+
+    /**
+     * @inheritDoc
+     */
+    public function register(UiComponentInterface $component)
+    {
+        $this->components[] = $component;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function getComponents()
+    {
+        return $this->components;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function attach($type, ObserverInterface $observer)
+    {
+        $this->observers[$type][] = $observer;
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function detach($type, ObserverInterface $observer)
+    {
+        if (!isset($this->observers[$type])) {
+            return;
+        }
+
+        $key = array_search($observer, $this->observers[$type], true);
+        if ($key !== false) {
+            unset($this->observers[$type][$key]);
+        }
+    }
+
+    /**
+     * @inheritDoc
+     */
+    public function notify($type)
+    {
+        $componentType = $this->normalizeType($type);
+        if (!isset($this->observers[$componentType])) {
+            return;
+        }
+
+        /** @var UiComponentInterface $component */
+        foreach ($this->getComponents() as $component) {
+            if ($component->getComponentName() != $type) {
+                continue;
+            }
+
+            /** @var ObserverInterface $observer */
+            foreach ($this->observers[$componentType] as $observer) {
+                $observer->update($component);
+            }
+        }
+    }
+
+    /**
+     * Normalize type to component type
+     *
+     * @param string $type
+     * @return string
+     */
+    protected function normalizeType($type)
+    {
+        $componentType = (strpos($type, '.') !== false) ? substr($type, 0, strpos($type, '.')) : $type;
+        return $componentType;
+    }
+}
diff --git a/lib/internal/Magento/Framework/View/Element/UiComponent/SubjectInterface.php b/lib/internal/Magento/Framework/View/Element/UiComponent/SubjectInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..6b16644405389a649d0bb78df719ec4f7b5ffffa
--- /dev/null
+++ b/lib/internal/Magento/Framework/View/Element/UiComponent/SubjectInterface.php
@@ -0,0 +1,35 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+namespace Magento\Framework\View\Element\UiComponent;
+
+/**
+ * Interface SubjectInterface
+ */
+interface SubjectInterface
+{
+    /**
+     * Attach an observer by type
+     * @param string $type
+     * @param ObserverInterface $observer
+     * @return void
+     */
+    public function attach($type, ObserverInterface $observer);
+
+    /**
+     * Detach an observer by type
+     * @param string $type
+     * @param ObserverInterface $observer
+     * @return void
+     */
+    public function detach($type, ObserverInterface $observer);
+
+    /**
+     * Notify an observer(s) by type
+     * @param string $type
+     * @return void
+     */
+    public function notify($type);
+}
diff --git a/lib/internal/Magento/Framework/View/Layout/GeneratorPool.php b/lib/internal/Magento/Framework/View/Layout/GeneratorPool.php
index f0beae9e7a5f94051c2c76935d98b7327d1522ea..a327e4b41398903f061431eb815cabf938bc6f59 100644
--- a/lib/internal/Magento/Framework/View/Layout/GeneratorPool.php
+++ b/lib/internal/Magento/Framework/View/Layout/GeneratorPool.php
@@ -115,6 +115,9 @@ class GeneratorPool
             $this->helper->scheduleElement($scheduledStructure, $structure, key($scheduledStructure->getStructure()));
         }
         $scheduledStructure->flushPaths();
+        while (false === $scheduledStructure->isListToSortEmpty()) {
+            $this->reorderElements($scheduledStructure, $structure, key($scheduledStructure->getListToSort()));
+        }
         foreach ($scheduledStructure->getListToMove() as $elementToMove) {
             $this->moveElementInStructure($scheduledStructure, $structure, $elementToMove);
         }
@@ -132,6 +135,47 @@ class GeneratorPool
         return $this;
     }
 
+    /**
+     * Reorder a child of a specified element
+     *
+     * @param ScheduledStructure $scheduledStructure,
+     * @param Data\Structure $structure
+     * @param string $elementName
+     * @return void
+     */
+    protected function reorderElements(
+        ScheduledStructure $scheduledStructure,
+        Data\Structure $structure,
+        $elementName
+    ) {
+        $element = $scheduledStructure->getElementToSort($elementName);
+        $scheduledStructure->unsetElementToSort($element[ScheduledStructure::ELEMENT_NAME]);
+
+        if (isset($element[ScheduledStructure::ELEMENT_OFFSET_OR_SIBLING])) {
+            $siblingElement = $scheduledStructure->getElementToSort(
+                $element[ScheduledStructure::ELEMENT_OFFSET_OR_SIBLING]
+            );
+
+            if (
+                isset($siblingElement[ScheduledStructure::ELEMENT_NAME])
+                    && $structure->hasElement($siblingElement[ScheduledStructure::ELEMENT_NAME])
+            ) {
+                $this->reorderElements(
+                    $scheduledStructure,
+                    $structure,
+                    $siblingElement[ScheduledStructure::ELEMENT_NAME]
+                );
+            }
+        }
+
+        $structure->reorderChildElement(
+            $element[ScheduledStructure::ELEMENT_PARENT_NAME],
+            $element[ScheduledStructure::ELEMENT_NAME],
+            $element[ScheduledStructure::ELEMENT_OFFSET_OR_SIBLING],
+            $element[ScheduledStructure::ELEMENT_IS_AFTER]
+        );
+    }
+
     /**
      * Remove scheduled element
      *
diff --git a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure.php b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure.php
index 90ebb4ba60dd2055c9d5917895e60823b1dd35ef..716fd0362ea7e9a0785fb9bf70886369ea976315 100644
--- a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure.php
+++ b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure.php
@@ -10,6 +10,15 @@ namespace Magento\Framework\View\Layout;
  */
 class ScheduledStructure
 {
+    /**#@+
+     * Keys for array of elements to sort
+     */
+    const ELEMENT_NAME = 'elementName';
+    const ELEMENT_PARENT_NAME = 'parentName';
+    const ELEMENT_OFFSET_OR_SIBLING  = 'offsetOrSibling';
+    const ELEMENT_IS_AFTER = 'isAfter';
+    /**#@-*/
+
     /**
      * Information about structural elements, scheduled for creation
      *
@@ -66,6 +75,13 @@ class ScheduledStructure
      */
     protected $brokenParent = [];
 
+    /**
+     * Elements that need to sort
+     *
+     * @var array
+     */
+    protected $elementsToSort = [];
+
     /**
      * @param array $data
      *
@@ -82,6 +98,68 @@ class ScheduledStructure
         $this->scheduledPaths = isset($data['scheduledPaths']) ? $data['scheduledPaths'] : [];
     }
 
+    /**
+     * Set elements to sort
+     *
+     * @param string $parentName
+     * @param string $elementName
+     * @param string|int|null $offsetOrSibling
+     * @param bool $isAfter
+     * @return void
+     */
+    public function setElementToSortList($parentName, $elementName, $offsetOrSibling, $isAfter = true)
+    {
+        $this->elementsToSort[$elementName] = [
+            self::ELEMENT_NAME => $elementName,
+            self::ELEMENT_PARENT_NAME => $parentName,
+            self::ELEMENT_OFFSET_OR_SIBLING => $offsetOrSibling,
+            self::ELEMENT_IS_AFTER => $isAfter
+        ];
+    }
+
+    /**
+     * Check if elements list of sorting is empty
+     *
+     * @return bool
+     */
+    public function isListToSortEmpty()
+    {
+        return empty($this->elementsToSort);
+    }
+
+    /**
+     * Unset specified element from list of sorting
+     *
+     * @param string $elementName
+     * @return void
+     */
+    public function unsetElementToSort($elementName)
+    {
+        unset($this->elementsToSort[$elementName]);
+    }
+
+    /**
+     * Get element to sort by name
+     *
+     * @param string $elementName
+     * @param array $default
+     * @return array
+     */
+    public function getElementToSort($elementName, array $default = [])
+    {
+        return isset($this->elementsToSort[$elementName]) ? $this->elementsToSort[$elementName] : $default;
+    }
+
+    /**
+     * Get elements to sort
+     *
+     * @return array
+     */
+    public function getListToSort()
+    {
+        return $this->elementsToSort;
+    }
+
     /**
      * Get elements to move
      *
diff --git a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php
index 21a1fe765ca6aede50233e8674a3c7524999feae..aaa2e5fe1ecdd33140ff323f20a8906d6c78040b 100644
--- a/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php
+++ b/lib/internal/Magento/Framework/View/Layout/ScheduledStructure/Helper.php
@@ -203,13 +203,10 @@ class Helper
 
         /**
          * Some elements provide info "after" or "before" which sibling they are supposed to go
-         * Make sure to populate these siblings as well and order them correctly
+         * Add element into list of sorting
          */
         if ($siblingName) {
-            if ($scheduledStructure->hasStructureElement($siblingName)) {
-                $this->scheduleElement($scheduledStructure, $structure, $siblingName);
-            }
-            $structure->reorderChildElement($parentName, $name, $siblingName, $isAfter);
+            $scheduledStructure->setElementToSortList($parentName, $name, $siblingName, $isAfter);
         }
     }
 
diff --git a/lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd b/lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd
index a584c5403d9af780b8f791a060d962798be86195..b6ea0390d953df89321b78215de0828368bdf24d 100755
--- a/lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd
+++ b/lib/internal/Magento/Framework/View/Layout/etc/layout_generic.xsd
@@ -16,6 +16,7 @@
             <xs:element ref="referenceBlock" minOccurs="0" maxOccurs="unbounded"/>
             <xs:element ref="update" minOccurs="0" maxOccurs="unbounded"/>
             <xs:element ref="move" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element ref="uiComponent" minOccurs="0" maxOccurs="unbounded"/>
         </xs:sequence>
     </xs:complexType>
 
diff --git a/lib/internal/Magento/Framework/View/Page/Title.php b/lib/internal/Magento/Framework/View/Page/Title.php
index 05540c3607b3f04ba3dd295cbb1da1b7d364e5ae..f420bd34ded141a27f397f9a5aa53791a3ab329e 100644
--- a/lib/internal/Magento/Framework/View/Page/Title.php
+++ b/lib/internal/Magento/Framework/View/Page/Title.php
@@ -77,11 +77,26 @@ class Title
     }
 
     /**
+     * Same as getShort(), but return title without prefix and suffix
+     * @return mixed
+     */
+    public function getShortHeading()
+    {
+        $title = $this->build(false);
+        return reset($title);
+    }
+
+    /**
+     * @param bool $withConfigValues
      * @return array
      */
-    protected function build()
+    protected function build($withConfigValues = true)
     {
-        return array_merge($this->prependedValues, [$this->addConfigValues($this->textValue)], $this->appendedValues);
+        return array_merge(
+            $this->prependedValues,
+            [$withConfigValues ? $this->addConfigValues($this->textValue) : $this->textValue],
+            $this->appendedValues
+        );
     }
 
     /**
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/CustomizationTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/CustomizationTest.php
index e181e2532ad0bdf3931242a9b1a3503193f0f84b..9f2349a0612503d6f66b7fb5f531aea1362b878c 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/CustomizationTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Design/Theme/CustomizationTest.php
@@ -43,7 +43,7 @@ class CustomizationTest extends \PHPUnit_Framework_TestCase
             false
         );
         $collectionFactory = $this->getMock(
-            'Magento\Theme\Model\Resource\Theme\File\CollectionFactory',
+            'Magento\Theme\Model\ResourceModel\Theme\File\CollectionFactory',
             ['create'],
             [],
             '',
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Element/Html/CalendarTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Element/Html/CalendarTest.php
index d995bb91d88eb13e490542792e1362580e3305fb..d722c60827f9032134a9593ee07f0822ef8eb3a3 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Element/Html/CalendarTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Element/Html/CalendarTest.php
@@ -48,6 +48,6 @@ class CalendarTest extends \PHPUnit_Framework_TestCase
     public function testGetYearRange()
     {
         $testCurrentYear = (new \DateTime())->format('Y');
-        $this->assertEquals((int)$testCurrentYear - 100 . ':' . $testCurrentYear, $this->block->getYearRange());
+        $this->assertEquals((int)$testCurrentYear - 100 . ':' . ($testCurrentYear + 100), $this->block->getYearRange());
     }
 }
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Element/UiComponent/ProcessorTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Element/UiComponent/ProcessorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..c10d6fe61c3aa76af239c1afb77f87f12c9d3bff
--- /dev/null
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Element/UiComponent/ProcessorTest.php
@@ -0,0 +1,78 @@
+<?php
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+/**
+ * Test for view Messages model
+ */
+namespace Magento\Framework\View\Test\Unit\Element\UiComponent;
+
+use Magento\Framework\View\Element\UiComponent\Processor;
+use Magento\Framework\View\Element\UiComponentInterface;
+use Magento\Framework\View\Element\UiComponent\ObserverInterface;
+
+class ProcessorTest extends \PHPUnit_Framework_TestCase
+{
+    /**
+     * @var UiComponentInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $component;
+
+    /**
+     * @var ObserverInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $observer;
+
+    /**
+     * @var Processor
+     */
+    protected $processor;
+
+    protected function setUp()
+    {
+        $this->component = $this->getMockBuilder('Magento\Framework\View\Element\UiComponentInterface')
+            ->getMockForAbstractClass();
+        $this->observer = $this->getMockBuilder('Magento\Framework\View\Element\UiComponent\ObserverInterface')
+            ->getMockForAbstractClass();
+        $this->processor = new Processor();
+    }
+
+    public function testRegisterGetComponents()
+    {
+        $this->assertCount(0, $this->processor->getComponents());
+        $this->processor->register($this->component);
+        $this->assertCount(1, $this->processor->getComponents());
+    }
+
+    public function testAttachAndNotify()
+    {
+        $type = 'test_type';
+        $this->component->expects($this->any())
+            ->method('getComponentName')
+            ->willReturn($type);
+        $this->observer->expects($this->any())
+            ->method('update')
+            ->with($this->component);
+        /** @var UiComponentInterface $component2 */
+        $component2 = $this->getMockBuilder('Magento\Framework\View\Element\UiComponentInterface')
+            ->getMockForAbstractClass();
+        $component2->expects($this->any())
+            ->method('getComponentName')
+            ->willReturn('other_type');
+
+        $this->processor->register($this->component);
+        $this->processor->register($component2);
+        $this->processor->attach($type, $this->observer);
+        $this->processor->notify($type);
+    }
+
+    public function testDetach()
+    {
+        $this->processor->detach('unexists_type', $this->observer);
+        $this->processor->attach('some_type', $this->observer);
+        $this->processor->notify('unexists_type');
+        $this->processor->detach('some_type', $this->observer);
+    }
+}
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/GeneratorPoolTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/GeneratorPoolTest.php
index 154ff37e00f0a408aa602dd7cfcac1eaf42c07d6..4ba1c06008b6a14d2e271baa7f2e19ced0b9f21e 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/GeneratorPoolTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/GeneratorPoolTest.php
@@ -11,21 +11,22 @@ namespace Magento\Framework\View\Test\Unit\Layout;
 
 use \Magento\Framework\View\Layout\GeneratorPool;
 use \Magento\Framework\View\Layout\ScheduledStructure;
+use \Magento\Framework\View\Layout\Data\Structure as DataStructure;
 
 class GeneratorPoolTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\View\Layout\ScheduledStructure\Helper|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $helperMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\View\Layout\Reader\Context|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $readerContextMock;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\View\Layout\Generator\Context|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $generatorContextMock;
 
@@ -35,7 +36,7 @@ class GeneratorPoolTest extends \PHPUnit_Framework_TestCase
     protected $scheduledStructure;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\View\Layout\Data\Structure|\PHPUnit_Framework_MockObject_MockObject
      */
     protected $structureMock;
 
@@ -57,7 +58,7 @@ class GeneratorPoolTest extends \PHPUnit_Framework_TestCase
         $this->readerContextMock->expects($this->any())->method('getScheduledStructure')
             ->willReturn($this->scheduledStructure);
 
-        // Data\Structure
+        // DataStructure
         $this->generatorContextMock = $this->getMockBuilder('Magento\Framework\View\Layout\Generator\Context')
             ->disableOriginalConstructor()
             ->getMock();
@@ -72,8 +73,8 @@ class GeneratorPoolTest extends \PHPUnit_Framework_TestCase
             ->disableOriginalConstructor()
             ->getMock();
 
-        $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
-        $this->model = $helper->getObject(
+        $helperObjectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->model = $helperObjectManager->getObject(
             'Magento\Framework\View\Layout\GeneratorPool',
             [
                 'helper' => $this->helperMock,
@@ -109,14 +110,19 @@ class GeneratorPoolTest extends \PHPUnit_Framework_TestCase
             $this->scheduledStructure->setStructureElement($structureElement, []);
         }
 
-        $moveMap = [];
+        $reorderMap = [];
+        foreach ($schedule['sort'] as $elementName => $sort) {
+            list($parentName, $sibling, $isAfter) = $sort;
+            $this->scheduledStructure->setElementToSortList($parentName, $elementName, $sibling, $isAfter);
+            $reorderMap[] = [$parentName, $elementName, $sibling, $isAfter];
+        }
         foreach ($schedule['move'] as $elementName => $move) {
             $this->scheduledStructure->setElementToMove($elementName, $move);
             list($destination, $sibling, $isAfter) = $move;
-            $moveMap[] = [$destination, $elementName, $sibling, $isAfter];
+            $reorderMap[] = [$destination, $elementName, $sibling, $isAfter];
         }
         $invocation = $this->structureMock->expects($this->any())->method('reorderChildElement');
-        call_user_func_array([$invocation, 'withConsecutive'], $moveMap);
+        call_user_func_array([$invocation, 'withConsecutive'], $reorderMap);
 
         foreach ($schedule['remove'] as $remove) {
             $this->scheduledStructure->setElementToRemoveList($remove);
@@ -125,8 +131,10 @@ class GeneratorPoolTest extends \PHPUnit_Framework_TestCase
         $this->helperMock->expects($this->atLeastOnce())->method('scheduleElement')
             ->with($this->scheduledStructure, $this->structureMock, $this->anything())
             ->willReturnCallback(function ($scheduledStructure, $structure, $elementName) use ($schedule) {
-                /** @var $scheduledStructure ScheduledStructure */
-                /** @var $structure Data\Structure */
+                /**
+                 * @var $scheduledStructure ScheduledStructure
+                 * @var $structure DataStructure
+                 */
                 $this->assertContains($elementName, $schedule['structure']);
                 $scheduledStructure->unsetStructureElement($elementName);
                 $scheduledStructure->setElement($elementName, []);
@@ -152,14 +160,18 @@ class GeneratorPoolTest extends \PHPUnit_Framework_TestCase
                         'second.element',
                         'third.element',
                         'remove.element',
+                        'sort.element',
                     ],
                     'move' => [
                         'third.element' => ['second.element', 'sibling', false, 'alias'],
                     ],
                     'remove' => ['remove.element'],
+                    'sort' => [
+                        'sort.element' => ['second.element', 'sibling', false, 'alias'],
+                    ],
                 ],
                 'expectedScheduledElements' => [
-                    'first.element' => [], 'second.element' => [], 'third.element' => [],
+                    'first.element' => [], 'second.element' => [], 'third.element' => [], 'sort.element' => []
                 ],
             ],
         ];
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/BlockTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/BlockTest.php
index b1fe7bd1ddb622ad0c06eb46f0fe720160a15771..9070db3fd1241f36f00afa66b58420a7c2533b5f 100755
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/BlockTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/Reader/BlockTest.php
@@ -11,11 +11,6 @@ namespace Magento\Framework\View\Test\Unit\Layout\Reader;
 
 use Magento\Framework\View\Layout\Reader\Block;
 
-/**
- * Class BlockTest
- *
- * @covers Block
- */
 class BlockTest extends \PHPUnit_Framework_TestCase
 {
     /**
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
index a6198409487a37df9183ce84f46b27340c10e747..4aeff78304d3191d5e6e1ac9569a5955d2a87785 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructure/HelperTest.php
@@ -17,7 +17,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase
     /**
      * @var \Magento\Framework\View\Layout\ScheduledStructure|\PHPUnit_Framework_MockObject_MockObject
      */
-    protected $scheduledStructure;
+    protected $scheduledStructureMock;
 
     /**
      * @var \Magento\Framework\View\Layout\Data\Structure|\PHPUnit_Framework_MockObject_MockObject
@@ -25,13 +25,16 @@ class HelperTest extends \PHPUnit_Framework_TestCase
     protected $dataStructure;
 
     /**
-     * @var Helper
+     * @var \Magento\Framework\View\Layout\ScheduledStructure\Helper
      */
     protected $helper;
 
+    /**
+     * @return void
+     */
     public function setUp()
     {
-        $this->scheduledStructure = $this->getMockBuilder('Magento\Framework\View\Layout\ScheduledStructure')
+        $this->scheduledStructureMock = $this->getMockBuilder('Magento\Framework\View\Layout\ScheduledStructure')
             ->disableOriginalConstructor()
             ->getMock();
 
@@ -48,6 +51,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase
      * @param string $actualNodeName
      * @param int $unsetPathElementCount
      * @param int $unsetStructureElementCount
+     * @return void
      *
      * @dataProvider scheduleStructureDataProvider
      */
@@ -64,25 +68,26 @@ class HelperTest extends \PHPUnit_Framework_TestCase
         $testPath = 'test_path';
         $potentialChild = 'potential_child';
 
-        $this->scheduledStructure->expects($this->once())->method('hasPath')
+        $this->scheduledStructureMock->expects($this->once())->method('hasPath')
             ->with($parentNodeName)
             ->will($this->returnValue(true));
-        $this->scheduledStructure->expects($this->any())->method('hasStructureElement')
+        $this->scheduledStructureMock->expects($this->any())->method('hasStructureElement')
             ->with($actualNodeName)
             ->will($this->returnValue(true));
-        $this->scheduledStructure->expects($this->once())->method('setPathElement')
+        $this->scheduledStructureMock->expects($this->once())->method('setPathElement')
             ->with($actualNodeName, $testPath . '/' . $actualNodeName)
             ->will($this->returnValue(true));
-        $this->scheduledStructure->expects($this->once())->method('setStructureElement')
+        $this->scheduledStructureMock->expects($this->once())->method('setStructureElement')
             ->with($actualNodeName, [$block, $currentNodeAs, $parentNodeName, $after, true]);
-        $this->scheduledStructure->expects($this->once())->method('getPath')
+        $this->scheduledStructureMock->expects($this->once())->method('getPath')
             ->with($parentNodeName)
             ->will($this->returnValue('test_path'));
-        $this->scheduledStructure->expects($this->once())->method('getPaths')
+        $this->scheduledStructureMock->expects($this->once())->method('getPaths')
             ->will($this->returnValue([$potentialChild => $testPath . '/' . $currentNodeName . '/']));
-        $this->scheduledStructure->expects($this->exactly($unsetPathElementCount))->method('unsetPathElement')
+        $this->scheduledStructureMock->expects($this->exactly($unsetPathElementCount))->method('unsetPathElement')
             ->with($potentialChild);
-        $this->scheduledStructure->expects($this->exactly($unsetStructureElementCount))->method('unsetStructureElement')
+        $this->scheduledStructureMock->expects($this->exactly($unsetStructureElementCount))
+            ->method('unsetStructureElement')
             ->with($potentialChild);
 
         $currentNode = new \Magento\Framework\View\Layout\Element(
@@ -90,7 +95,7 @@ class HelperTest extends \PHPUnit_Framework_TestCase
         );
         $parentNode = new \Magento\Framework\View\Layout\Element('<' . $block . ' name="' . $parentNodeName . '"/>');
 
-        $result = $this->helper->scheduleStructure($this->scheduledStructure, $currentNode, $parentNode);
+        $result = $this->helper->scheduleStructure($this->scheduledStructureMock, $currentNode, $parentNode);
         $this->assertEquals($actualNodeName, $result);
     }
 
@@ -105,53 +110,57 @@ class HelperTest extends \PHPUnit_Framework_TestCase
         ];
     }
 
+    /**
+     * @return void
+     */
     public function testScheduleNonExistentElement()
     {
         $key = 'key';
 
-        $this->scheduledStructure->expects($this->once())->method('getStructureElement')->with($key)
+        $this->scheduledStructureMock->expects($this->once())->method('getStructureElement')->with($key)
             ->willReturn([]);
-        $this->scheduledStructure->expects($this->once())->method('unsetPathElement')->with($key);
-        $this->scheduledStructure->expects($this->once())->method('unsetStructureElement')->with($key);
+        $this->scheduledStructureMock->expects($this->once())->method('unsetPathElement')->with($key);
+        $this->scheduledStructureMock->expects($this->once())->method('unsetStructureElement')->with($key);
 
-        $this->helper->scheduleElement($this->scheduledStructure, $this->dataStructure, $key);
+        $this->helper->scheduleElement($this->scheduledStructureMock, $this->dataStructure, $key);
     }
 
     /**
      * @param bool $hasParent
      * @param int $setAsChild
      * @param int $toRemoveList
+     * @param string $siblingName
+     * @param bool $isAfter
+     * @param int $toSortList
+     * @return void
      *
      * @dataProvider scheduleElementDataProvider
      */
-    public function testScheduleElement($hasParent, $setAsChild, $toRemoveList)
+    public function testScheduleElement($hasParent, $setAsChild, $toRemoveList, $siblingName, $isAfter, $toSortList)
     {
         $key = 'key';
         $parentName = 'parent';
-        $siblingName = 'sibling';
         $alias = 'alias';
         $block = 'block';
         $data = ['data'];
 
-        $this->scheduledStructure->expects($this->any())
+        $this->scheduledStructureMock->expects($this->any())
             ->method('getStructureElement')
-            ->willReturnMap(
+            ->willReturnMap([
                 [
+                    $key,
+                    null,
                     [
-                        $key,
-                        null,
-                        [
-                            Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_TYPE => $block,
-                            Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_ALIAS => $alias,
-                            Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_PARENT_NAME => $parentName,
-                            Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_SIBLING_NAME => $siblingName,
-                            Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_IS_AFTER => true,
-                        ],
+                        Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_TYPE => $block,
+                        Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_ALIAS => $alias,
+                        Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_PARENT_NAME => $parentName,
+                        Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_SIBLING_NAME => $siblingName,
+                        Layout\ScheduledStructure\Helper::SCHEDULED_STRUCTURE_INDEX_IS_AFTER => $isAfter,
                     ],
-                    [$parentName, null, []],
-                ]
-            );
-        $this->scheduledStructure->expects($this->any())
+                ],
+                [$parentName, null, []],
+            ]);
+        $this->scheduledStructureMock->expects($this->any())
             ->method('getStructureElementData')
             ->willReturnMap(
                 [
@@ -159,8 +168,8 @@ class HelperTest extends \PHPUnit_Framework_TestCase
                     [$parentName, null, $data],
                 ]
             );
-        $this->scheduledStructure->expects($this->any())->method('hasStructureElement')->willReturn(true);
-        $this->scheduledStructure->expects($this->once())->method('setElement')->with($key, [$block, $data]);
+        $this->scheduledStructureMock->expects($this->any())->method('hasStructureElement')->willReturn(true);
+        $this->scheduledStructureMock->expects($this->once())->method('setElement')->with($key, [$block, $data]);
 
         $this->dataStructure->expects($this->once())->method('createElement')->with($key, ['type' => $block]);
         $this->dataStructure->expects($this->once())->method('hasElement')->with($parentName)->willReturn($hasParent);
@@ -169,11 +178,14 @@ class HelperTest extends \PHPUnit_Framework_TestCase
             ->with($key, $parentName, $alias)
             ->willReturn(true);
 
-        $this->scheduledStructure->expects($this->exactly($toRemoveList))
+        $this->scheduledStructureMock->expects($this->exactly($toRemoveList))
             ->method('setElementToBrokenParentList')
             ->with($key);
+        $this->scheduledStructureMock->expects($this->exactly($toSortList))
+            ->method('setElementToSortList')
+            ->with($parentName, $key, $siblingName, $isAfter);
 
-        $this->helper->scheduleElement($this->scheduledStructure, $this->dataStructure, $key);
+        $this->helper->scheduleElement($this->scheduledStructureMock, $this->dataStructure, $key);
     }
 
     /**
@@ -182,8 +194,22 @@ class HelperTest extends \PHPUnit_Framework_TestCase
     public function scheduleElementDataProvider()
     {
         return [
-            ['hasParent' => true, 'setAsChild' => 1, 'toRemoveList' => 0],
-            ['hasParent' => false, 'setAsChild' => 0, 'toRemoveList' => 1],
+            [
+                'hasParent' => true,
+                'setAsChild' => 1,
+                'toRemoveList' => 0,
+                'siblingName' => 'sibling',
+                'isAfter' => false,
+                'toSortList' => 1,
+            ],
+            [
+                'hasParent' => false,
+                'setAsChild' => 0,
+                'toRemoveList' => 1,
+                'siblingName' => null,
+                'isAfter' => false,
+                'toSortList' => 0,
+            ]
         ];
     }
 }
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructureTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructureTest.php
index 98d8d6a8b19932c99b6ed88c4ad1ab34bce0a96f..5f9c1d1094816f2966378f0ea5860af52ca4f17e 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructureTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Layout/ScheduledStructureTest.php
@@ -5,13 +5,15 @@
  */
 namespace Magento\Framework\View\Test\Unit\Layout;
 
+use \Magento\Framework\View\Layout\ScheduledStructure;
+
 /**
  * Test class for \Magento\Framework\View\Layout\ScheduledStructure
  */
 class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
 {
     /**
-     * @var \Magento\Framework\View\Layout\ScheduledStructure
+     * @var ScheduledStructure
      */
     protected $model;
 
@@ -20,6 +22,9 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
      */
     protected $scheduledData = [];
 
+    /**
+     * @return void
+     */
     protected function setUp()
     {
         $this->scheduledData = [
@@ -62,11 +67,16 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
                 'path4' => 'path 4',
             ],
         ];
-        $this->model = new \Magento\Framework\View\Layout\ScheduledStructure($this->scheduledData);
+
+        $helperObjectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
+        $this->model = $helperObjectManager->getObject(
+            'Magento\Framework\View\Layout\ScheduledStructure',
+            ['data' => $this->scheduledData]
+        );
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getListToMove
+     * @return void
      */
     public function testGetListToMove()
     {
@@ -78,7 +88,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getListToRemove
+     * @return void
      */
     public function testGetListToRemove()
     {
@@ -96,7 +106,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getElements
+     * @return void
      */
     public function testGetElements()
     {
@@ -104,7 +114,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getElement
+     * @return void
      */
     public function testGetElement()
     {
@@ -116,7 +126,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::isElementsEmpty
+     * @return void
      */
     public function testIsElementsEmpty()
     {
@@ -126,7 +136,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::setElement
+     * @return void
      */
     public function testSetElement()
     {
@@ -144,7 +154,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::hasElement
+     * @return void
      */
     public function testHasElement()
     {
@@ -153,7 +163,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::unsetElement
+     * @return void
      */
     public function testUnsetElement()
     {
@@ -163,7 +173,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getElementToMove
+     * @return void
      */
     public function testGetElementToMove()
     {
@@ -175,6 +185,9 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($default, $this->model->getElementToMove('not_existing_element', $default));
     }
 
+    /**
+     * @return void
+     */
     public function getIfconfigElement()
     {
         $this->assertEquals(
@@ -186,7 +199,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::setElementToMove
+     * @return void
      */
     public function testSetElementToMove()
     {
@@ -204,7 +217,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::unsetElementFromListToRemove
+     * @return void
      */
     public function testUnsetElementFromListToRemove()
     {
@@ -214,7 +227,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::setElementToRemoveList
+     * @return void
      */
     public function testSetElementToRemoveList()
     {
@@ -223,6 +236,9 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
         $this->assertContains('element1', $this->model->getListToRemove());
     }
 
+    /**
+     * @return void
+     */
     public function testUnsetElementFromIfconfigList()
     {
         $this->assertContains('element4', $this->model->getIfconfigList());
@@ -230,6 +246,9 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
         $this->assertNotContains('element4', $this->model->getIfconfigList());
     }
 
+    /**
+     * @return void
+     */
     public function testSetElementToIfconfigList()
     {
         $this->assertNotContains('element5', $this->model->getIfconfigList());
@@ -238,7 +257,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getStructure
+     * @return void
      */
     public function testGetStructure()
     {
@@ -246,7 +265,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getStructureElement
+     * @return void
      */
     public function testGetStructureElement()
     {
@@ -258,7 +277,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::isStructureEmpty
+     * @return void
      */
     public function testIsStructureEmpty()
     {
@@ -268,7 +287,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::hasStructureElement
+     * @return void
      */
     public function testHasStructureElement()
     {
@@ -277,7 +296,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::setStructureElement
+     * @return void
      */
     public function testSetStructureElement()
     {
@@ -295,7 +314,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::unsetStructureElement
+     * @return void
      */
     public function testUnsetStructureElement()
     {
@@ -305,7 +324,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getPaths
+     * @return void
      */
     public function testGetPaths()
     {
@@ -313,7 +332,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::getPath
+     * @return void
      */
     public function testGetPath()
     {
@@ -323,7 +342,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::hasPath
+     * @return void
      */
     public function testHasPath()
     {
@@ -332,7 +351,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::setPathElement
+     * @return void
      */
     public function testSetPathElement()
     {
@@ -350,7 +369,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::unsetPathElement
+     * @return void
      */
     public function testUnsetPathElement()
     {
@@ -360,7 +379,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::flushPaths
+     * @return void
      */
     public function testFlushPaths()
     {
@@ -370,7 +389,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @covers \Magento\Framework\View\Layout\ScheduledStructure::flushScheduledStructure
+     * @return void
      */
     public function testFlushScheduledStructure()
     {
@@ -386,8 +405,7 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::setElementToBrokenParentList
-     * covers \Magento\Framework\View\Layout\ScheduledStructure::unsetElementFromBrokenParentList
+     * @return void
      */
     public function testSetElementToBrokenParentList()
     {
@@ -402,4 +420,76 @@ class ScheduledStructureTest extends \PHPUnit_Framework_TestCase
         $this->model->unsetElementFromBrokenParentList($element);
         $this->assertEquals($expectedToRemove, $this->model->getListToRemove());
     }
+
+    /**
+     * @return void
+     */
+    public function testSetElementToSortList()
+    {
+        list($parentName, $name, $sibling, $isAfter, $element) = $this->getDataSort();
+        $elementsList = [$name => $element];
+        $this->assertArrayNotHasKey($name, $this->model->getListToSort());
+        $this->model->setElementToSortList($parentName, $name, $sibling, $isAfter);
+        $this->assertEquals($elementsList, $this->model->getListToSort());
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetElementToSortEmpty()
+    {
+        $this->assertEmpty($this->model->getElementToSort('test'));
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetElementToSort()
+    {
+        list($parentName, $name, $sibling, $isAfter, $element) = $this->getDataSort();
+        $this->model->setElementToSortList($parentName, $name, $sibling, $isAfter);
+        $this->assertEquals($element, $this->model->getElementToSort($name));
+    }
+
+    /**
+     * @return void
+     */
+    public function testUnsetElementToSort()
+    {
+        list($parentName, $name, $sibling, $isAfter) = $this->getDataSort();
+        $this->model->setElementToSortList($parentName, $name, $sibling, $isAfter);
+        $this->assertArrayHasKey($name, $this->model->getListToSort());
+        $this->model->unsetElementToSort($name);
+        $this->assertArrayNotHasKey($name, $this->model->getListToSort());
+    }
+
+    /**
+     * @return void
+     */
+    public function testIsListToSortEmpty()
+    {
+        list($parentName, $name, $sibling, $isAfter) = $this->getDataSort();
+        $this->assertTrue($this->model->isListToSortEmpty());
+        $this->model->setElementToSortList($parentName, $name, $sibling, $isAfter);
+        $this->assertFalse($this->model->isListToSortEmpty());
+    }
+
+    /**
+     * @return array
+     */
+    protected function getDataSort()
+    {
+        return [
+            'parent name',
+            'element name',
+            'sibling',
+            false,
+            [
+                ScheduledStructure::ELEMENT_NAME => 'element name',
+                ScheduledStructure::ELEMENT_PARENT_NAME => 'parent name',
+                ScheduledStructure::ELEMENT_OFFSET_OR_SIBLING => 'sibling',
+                ScheduledStructure::ELEMENT_IS_AFTER => false
+            ]
+        ];
+    }
 }
diff --git a/lib/internal/Magento/Framework/View/Test/Unit/Page/TitleTest.php b/lib/internal/Magento/Framework/View/Test/Unit/Page/TitleTest.php
index ee9e035252dce4fc6d1728b11e6272ca5433df49..cea9a66f29ece0507771d05fe12e14eda16550a0 100644
--- a/lib/internal/Magento/Framework/View/Test/Unit/Page/TitleTest.php
+++ b/lib/internal/Magento/Framework/View/Test/Unit/Page/TitleTest.php
@@ -23,6 +23,9 @@ class TitleTest extends \PHPUnit_Framework_TestCase
      */
     protected $scopeConfigMock;
 
+    /**
+     * @return void
+     */
     public function setUp()
     {
         $this->scopeConfigMock = $this->getMockBuilder('Magento\Framework\App\Config\ScopeConfigInterface')
@@ -36,6 +39,9 @@ class TitleTest extends \PHPUnit_Framework_TestCase
         );
     }
 
+    /**
+     * @return void
+     */
     public function testSet()
     {
         $value = 'test_value';
@@ -43,6 +49,9 @@ class TitleTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($value, $this->title->get());
     }
 
+    /**
+     * @return void
+     */
     public function testUnset()
     {
         $value = 'test';
@@ -52,6 +61,9 @@ class TitleTest extends \PHPUnit_Framework_TestCase
         $this->assertEmpty($this->title->get());
     }
 
+    /**
+     * @return void
+     */
     public function testGet()
     {
         $value = 'test';
@@ -61,16 +73,19 @@ class TitleTest extends \PHPUnit_Framework_TestCase
 
         $this->scopeConfigMock->expects($this->any())
             ->method('getValue')
-            ->will($this->returnValueMap(
+            ->willReturnMap(
                 [
                     ['design/head/title_prefix', ScopeInterface::SCOPE_STORE, null, $prefix],
                     ['design/head/title_suffix', ScopeInterface::SCOPE_STORE, null, $suffix],
                 ]
-            ));
+            );
         $this->title->set($value);
         $this->assertEquals($expected, $this->title->get());
     }
 
+    /**
+     * @return void
+     */
     public function testGetShort()
     {
         $value = 'some_title';
@@ -81,6 +96,46 @@ class TitleTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($value, $this->title->getShort());
     }
 
+    /**
+     * @return void
+     */
+    public function testGetShortWithSuffixAndPrefix()
+    {
+        $value = 'some_title';
+        $prefix = 'prefix';
+        $suffix = 'suffix';
+        $expected = $prefix . ' ' . $value . ' ' . $suffix;
+        $this->title->set($value);
+
+        $this->scopeConfigMock->expects($this->any())
+            ->method('getValue')
+            ->willReturnMap(
+                [
+                    ['design/head/title_prefix', ScopeInterface::SCOPE_STORE, null, $prefix],
+                    ['design/head/title_suffix', ScopeInterface::SCOPE_STORE, null, $suffix],
+                ]
+            );
+
+        $this->assertEquals($expected, $this->title->getShort());
+    }
+
+    /**
+     * @return void
+     */
+    public function testGetShortHeading()
+    {
+        $value = 'some_title';
+        $this->title->set($value);
+
+        $this->scopeConfigMock->expects($this->never())
+            ->method('getValue');
+
+        $this->assertEquals($value, $this->title->getShortHeading());
+    }
+
+    /**
+     * @return void
+     */
     public function testGetDefault()
     {
         $defaultTitle = 'default title';
@@ -90,16 +145,19 @@ class TitleTest extends \PHPUnit_Framework_TestCase
 
         $this->scopeConfigMock->expects($this->any())
             ->method('getValue')
-            ->will($this->returnValueMap(
+            ->willReturnMap(
                 [
                     ['design/head/title_prefix', ScopeInterface::SCOPE_STORE, null, $prefix],
                     ['design/head/title_suffix', ScopeInterface::SCOPE_STORE, null, $suffix],
                     ['design/head/default_title', ScopeInterface::SCOPE_STORE, null, $defaultTitle],
                 ]
-            ));
+            );
         $this->assertEquals($expected, $this->title->getDefault());
     }
 
+    /**
+     * @return void
+     */
     public function testAppendPrepend()
     {
         $value = 'title';
diff --git a/lib/web/css/source/components/_modals.less b/lib/web/css/source/components/_modals.less
index 005b0ff36c95e641b57f6757e2386bd30171d933..7bf5699bbfb405f06e3d38ef6bae693c6a97d94c 100644
--- a/lib/web/css/source/components/_modals.less
+++ b/lib/web/css/source/components/_modals.less
@@ -201,7 +201,7 @@ body {
         .lib-vendor-prefix-flex-shrink(0);
     }
     .modal-header {
-        padding-bottom: @modal-popup__padding;
+        padding-bottom: @modal-popup__padding / 2.5;
         padding-top: @modal-popup__padding;
     }
     .modal-footer {
@@ -212,36 +212,6 @@ body {
     .modal-footer-actions {
         text-align: right;
     }
-    &.confirm {
-        .modal-inner-wrap {
-            left: 50%;
-            margin-left: -(@modal-popup-confirm__width/2);
-            width: @modal-popup-confirm__width;
-        }
-        .modal-footer {
-            text-align: right;
-        }
-    }
-    &._image-box {
-        .modal-inner-wrap {
-            margin: 5rem auto;
-            max-width: @modal-popup-image-box__max-width;
-            position: static;
-        }
-        .thumbnail-preview {
-            padding-bottom: @indent__l;
-            text-align: center;
-            .thumbnail-preview-image-block {
-                border: 1px solid @modal-popup-image-box__border-color;
-                margin: 0 auto @indent__base;
-                max-width: @modal-popup-image-box-preview__max-width;
-                padding: @indent__base;
-            }
-            .thumbnail-preview-image {
-                max-height: @modal-popup-image-box-preview-image__max-height;
-            }
-        }
-    }
 }
 
 //
diff --git a/lib/web/css/source/lib/variables/_popups.less b/lib/web/css/source/lib/variables/_popups.less
index bd574bd093003036538169eb3fbfd7a9afac9c5f..7769ae923a90c66bfbd64a9c2c2951e5089c2130 100644
--- a/lib/web/css/source/lib/variables/_popups.less
+++ b/lib/web/css/source/lib/variables/_popups.less
@@ -7,7 +7,7 @@
 //  Popup variables
 //  _____________________________________________
 
-@popup__width: auto;
+@popup__width: 100%;
 @popup__height: auto;
 @popup__padding: 22px;
 @popup__background: @color-white;
diff --git a/lib/web/fotorama/fotorama.js b/lib/web/fotorama/fotorama.js
index 9d74f253917694f7403270141293df73d07d0a27..445fe7d30c52ce4d576a1aafa426b75276bb9e0d 100644
--- a/lib/web/fotorama/fotorama.js
+++ b/lib/web/fotorama/fotorama.js
@@ -5,7 +5,7 @@ fotoramaVersion = '4.6.4';
 (function (window, document, location, $, undefined) {
     "use strict";
     var _fotoramaClass = 'fotorama',
-        _fullscreenClass = 'fullscreen',
+        _fullscreenClass = 'fotorama__fullscreen',
 
         wrapClass = _fotoramaClass + '__wrap',
         wrapCss2Class = wrapClass + '--css2',
@@ -37,6 +37,9 @@ fotoramaVersion = '4.6.4';
         navClass = _fotoramaClass + '__nav',
         navWrapClass = navClass + '-wrap',
         navShaftClass = navClass + '__shaft',
+        navShaftVerticalClass = navWrapClass + '--vertical',
+        navShaftListClass = navWrapClass + '--list',
+        navShafthorizontalClass = navWrapClass + '--horizontal',
         navDotsClass = navClass + '--dots',
         navThumbsClass = navClass + '--thumbs',
         navFrameClass = navClass + '__frame',
@@ -49,6 +52,8 @@ fotoramaVersion = '4.6.4';
         shadowsClass = shadowClass + 's',
         shadowsLeftClass = shadowsClass + '--left',
         shadowsRightClass = shadowsClass + '--right',
+        shadowsTopClass = shadowsClass + '--top',
+        shadowsBottomClass = shadowsClass + '--bottom',
 
         activeClass = _fotoramaClass + '__active',
         selectClass = _fotoramaClass + '__select',
@@ -70,6 +75,8 @@ fotoramaVersion = '4.6.4';
         imgFullClass = imgClass + '--full',
 
         thumbClass = _fotoramaClass + '__thumb',
+        thumbArrLeft = thumbClass + '__arr--left',
+        thumbArrRight = thumbClass + '__arr--right',
         thumbBorderClass = thumbClass + '-border',
 
         htmlClass = _fotoramaClass + '__html',
@@ -81,7 +88,7 @@ fotoramaVersion = '4.6.4';
 
         spinnerClass = _fotoramaClass + '__spinner',
 
-        horizontalImageClass = _fotoramaClass + '_horisontal_ratio',
+        horizontalImageClass = _fotoramaClass + '_horizontal_ratio',
         verticalImageClass = _fotoramaClass + '_vertical_ratio';
     var JQUERY_VERSION = $ && $.fn.jquery.split('.');
 
@@ -90,7 +97,7 @@ fotoramaVersion = '4.6.4';
         || (JQUERY_VERSION[0] == 1 && JQUERY_VERSION[1] < 8)) {
         throw 'Fotorama requires jQuery 1.8 or later and will not run without it.';
     }
-// My Underscore :-)
+
     var _ = {};
     /* Modernizr 2.8.3 (Custom Build) | MIT & BSD
      * Build: http://modernizr.com/download/#-csstransforms3d-csstransitions-touch-prefixed
@@ -483,7 +490,7 @@ fotoramaVersion = '4.6.4';
                 , n
 
             for (n in prop) el[n] = prop[n]
-            return el;
+            return el
         }
 
         /**
@@ -859,6 +866,7 @@ fotoramaVersion = '4.6.4';
         }
         return encodedFuncName;
     }
+
     var $WINDOW = $(window),
         $DOCUMENT = $(document),
         $HTML,
@@ -899,6 +907,12 @@ fotoramaVersion = '4.6.4';
 
         MAX_WIDTH = 1200,
 
+        /**
+         * Number of thumbnails in slide. Calculated only on setOptions and resize.
+         * @type {number}
+         */
+        thumbsPerSlide = 1,
+
         OPTIONS = {
 
             /**
@@ -978,7 +992,7 @@ fotoramaVersion = '4.6.4';
 
             arrows: true,
             click: true,
-            swipe: true,
+            swipe: false,
             trackpad: false,
 
             shuffle: false,
@@ -987,7 +1001,23 @@ fotoramaVersion = '4.6.4';
 
             shadows: true,
             spinner: null,
-            showcaption: true
+            showcaption: true,
+
+            /**
+             * Set type of thumbnail navigation
+             */
+            navdir: 'horizontal',
+
+            /**
+             * Set configuration to show or hide arrows in thumb navigation
+             */
+            navarrows: true,
+
+            /**
+             * Set type of navigation. Can be thumbs or slides
+             */
+            navtype: 'thumbs'
+
         },
 
         KEYBOARD_OPTIONS = {
@@ -999,6 +1029,7 @@ fotoramaVersion = '4.6.4';
             home: false,
             end: false
         };
+
     function noop() {
     }
 
@@ -1006,24 +1037,39 @@ fotoramaVersion = '4.6.4';
         return Math.max(isNaN(min) ? -Infinity : min, Math.min(isNaN(max) ? Infinity : max, value));
     }
 
-    function readTransform(css) {
-        return css.match(/ma/) && css.match(/-?\d+(?!d)/g)[css.match(/3d/) ? 12 : 4];
+    function readTransform(css, dir) {
+        return css.match(/ma/) && css.match(/-?\d+(?!d)/g)[css.match(/3d/) ?
+                (dir === 'vertical' ? 13 : 12) : (dir === 'vertical' ? 5 : 4)
+                ]
     }
 
-    function readPosition($el) {
+    function readPosition($el, dir) {
         if (CSS3) {
-            return +readTransform($el.css('transform'));
+            return +readTransform($el.css('transform'), dir);
         } else {
-            return +$el.css('left').replace('px', '');
+            return +$el.css(dir === 'vertical' ? 'top' : 'left').replace('px', '');
         }
     }
 
-    function getTranslate(pos/*, _001*/) {
+    function getTranslate(pos, direction) {
         var obj = {};
+
         if (CSS3) {
-            obj.transform = 'translate3d(' + (pos/* + (_001 ? 0.001 : 0)*/) + 'px,0,0)'; // 0.001 to remove Retina artifacts
+
+            switch (direction) {
+                case 'vertical':
+                    obj.transform = 'translate3d(0, ' + (pos) + 'px,0)';
+                    break;
+                case 'list':
+                    break;
+                default :
+                    obj.transform = 'translate3d(' + (pos) + 'px,0,0)';
+                    break;
+            }
         } else {
-            obj.left = pos;
+            direction === 'vertical' ?
+                obj.top = pos :
+                obj.left = pos;
         }
         return obj;
     }
@@ -1104,7 +1150,8 @@ fotoramaVersion = '4.6.4';
     }
 
 
-    function stop($el, left/*, _001*/) {
+    function stop($el, pos/*, _001*/) {
+        var dir = $el.navdir || 'horizontal';
         if ($el.length) {
             var elData = $el.data();
             if (CSS3) {
@@ -1114,12 +1161,12 @@ fotoramaVersion = '4.6.4';
             } else {
                 $el.stop();
             }
-            var lockedLeft = getNumber(left, function () {
-                return readPosition($el);
+            var lockedPos = getNumber(pos, function () {
+                return readPosition($el, dir);
             });
 
-            $el.css(getTranslate(lockedLeft/*, _001*/));//.width(); // `.width()` for reflow
-            return lockedLeft;
+            $el.css(getTranslate(lockedPos, dir/*, _001*/));//.width(); // `.width()` for reflow
+            return lockedPos;
         }
     }
 
@@ -1195,7 +1242,10 @@ fotoramaVersion = '4.6.4';
                 dataType: 'jsonp',
                 success: function (json) {
                     dataFrame.thumbsReady = true;
-                    updateData(data, {img: json[0].thumbnail_large, thumb: json[0].thumbnail_small}, dataFrame.i, fotorama);
+                    updateData(data, {
+                        img: json[0].thumbnail_large,
+                        thumb: json[0].thumbnail_small
+                    }, dataFrame.i, fotorama);
                 }
             });
         } else {
@@ -1354,8 +1404,11 @@ fotoramaVersion = '4.6.4';
         }
     }
 
-    function findShadowEdge(pos, min, max) {
-        return min === max ? false : pos <= min ? 'left' : pos >= max ? 'right' : 'left right';
+    function findShadowEdge(pos, min, max, dir) {
+        return min === max ? false :
+            dir === 'vertical' ?
+                (pos <= min ? 'top' : pos >= max ? 'bottom' : 'top bottom') :
+                (pos <= min ? 'left' : pos >= max ? 'right' : 'left right');
     }
 
     function smartClick($el, fn, _options) {
@@ -1378,7 +1431,6 @@ fotoramaVersion = '4.6.4';
                 onMove: _options.onMove || noop,
                 onTouchEnd: _options.onTouchEnd || noop,
                 onEnd: function (result) {
-                    ////console.log('smartClick → result.moved', result.moved);
                     if (result.moved) return;
                     fn.call(this, startEvent);
                 }
@@ -1468,6 +1520,56 @@ fotoramaVersion = '4.6.4';
         el.addEventListener ? el.addEventListener(e, fn, !!bool) : el.attachEvent('on' + e, fn);
     }
 
+    /**
+     *
+     * @param position guess position for navShaft
+     * @param restriction object contains min and max values for position
+     * @returns {*} filtered value of position
+     */
+    function validateRestrictions(position, restriction) {
+        if (position > restriction.max) {
+            position = restriction.max;
+        } else {
+            if (position < restriction.min) {
+                position = restriction.min;
+            }
+        }
+        return position;
+    }
+
+    function validateSlidePos(opt, navShaftTouchTail, guessIndex, offsetNav, $guessNavFrame, $navWrap, dir) {
+        var position,
+            size,
+            wrapSize;
+        if (dir === 'horizontal') {
+            size = opt.thumbwidth;
+            wrapSize = $navWrap.width();
+        } else {
+            size = opt.thumbheight;
+            wrapSize = $navWrap.height();
+        }
+        if ( (size + opt.margin) * (guessIndex + 1) >= (wrapSize - offsetNav) ) {
+            if (dir === 'horizontal') {
+                position = -$guessNavFrame.position().left;
+            } else {
+                position = -$guessNavFrame.position().top;
+            }
+        } else {
+            if ((size + opt.margin) * (guessIndex) <= Math.abs(offsetNav)) {
+                if (dir === 'horizontal') {
+                    position = -$guessNavFrame.position().left + wrapSize - (size + opt.margin);
+                } else {
+                    position = -$guessNavFrame.position().top + wrapSize - (size + opt.margin);
+                }
+            } else {
+                position = offsetNav;
+            }
+        }
+        position = validateRestrictions(position, navShaftTouchTail);
+
+        return position || 0;
+    }
+
     function elIsDisabled(el) {
         return !!el.getAttribute('disabled');
     }
@@ -1562,6 +1664,7 @@ fotoramaVersion = '4.6.4';
         };
 
     }(UTIL || {}, jQuery));
+
     function slide($el, options) {
         var elData = $el.data(),
             elPos = Math.round(options.pos),
@@ -1574,27 +1677,18 @@ fotoramaVersion = '4.6.4';
 
         if (typeof options.overPos !== 'undefined' && options.overPos !== options.pos) {
             elPos = options.overPos;
-            onEndFn = function () {
-                slide($el, $.extend({}, options, {
-                    overPos: options.pos,
-                    time: Math.max(TRANSITION_DURATION, options.time / 2)
-                }));
-            };
         }
 
-        ////////console.time('var translate = $.extend');
-        var translate = $.extend(getTranslate(elPos/*, options._001*/), options.width && {width: options.width});
-        ////////console.timeEnd('var translate = $.extend');
+        var translate = $.extend(getTranslate(elPos, options.direction), options.width && {width: options.width}, options.height && {height: options.height});
         if (elData && elData.sliding) {
             elData.sliding = true;
         }
 
         if (CSS3) {
             $el.css($.extend(getDuration(options.time), translate));
+
             if (options.time > 10) {
-                ////////console.time('afterTransition');
                 afterTransition($el, 'transform', onEndFn, options.time);
-                ////////console.timeEnd('afterTransition');
             } else {
                 onEndFn();
             }
@@ -1643,10 +1737,12 @@ fotoramaVersion = '4.6.4';
 
         (_$el1 && crossfadeFLAG) || _$el2 || onEndFn();
     }
+
     var lastEvent,
         moveEventType,
         preventEvent,
-        preventEventTimeout;
+        preventEventTimeout,
+        dragDomEl;
 
     function extendEvent(e) {
         var touch = (e.touches || [])[0] || e;
@@ -1720,7 +1816,6 @@ fotoramaVersion = '4.6.4';
                     stopEvent(e);
                 }
             } else {
-                ////console.log('onMove e.preventDefault');
                 stopEvent(e);
                 (options.onMove || noop).call(el, e, {touch: touchFLAG});
             }
@@ -1797,11 +1892,12 @@ fotoramaVersion = '4.6.4';
                 .on('mousemove', onMove)
                 .on('mouseup', onEnd);
         }
-
-        $el.on('click', 'a', function (e) {
-            if (!Modernizr.touch) {
-                e.preventDefault();
-            }
+        if (Modernizr.touch) {
+            dragDomEl = 'a';
+        } else {
+            dragDomEl = 'div';
+        }
+        $el.on('click', dragDomEl, function (e) {
             tail.checked && stopEvent(e);
         });
 
@@ -1823,6 +1919,7 @@ fotoramaVersion = '4.6.4';
             min,
             max,
             snap,
+            dir,
             slowFLAG,
             controlFLAG,
             moved,
@@ -1830,7 +1927,7 @@ fotoramaVersion = '4.6.4';
 
         function startTracking(e, noStop) {
             tracked = true;
-            startCoo = coo = e._x;
+            startCoo = coo = (dir === 'vertical') ? e._y : e._x;
             startTime = e._now;
 
             moveTrack = [
@@ -1845,7 +1942,9 @@ fotoramaVersion = '4.6.4';
         function onStart(e, result) {
             min = tail.min;
             max = tail.max;
-            snap = tail.snap;
+            snap = tail.snap,
+                dir = tail.direction || 'horizontal',
+                $el.navdir = dir;
 
             slowFLAG = e.altKey;
             tracked = moved = false;
@@ -1862,14 +1961,13 @@ fotoramaVersion = '4.6.4';
                 if (!tracked) {
                     startTracking(e);
                 }
-
-                coo = e._x;
+                coo = (dir === 'vertical') ? e._y : e._x;
 
                 moveTrack.push([e._now, coo]);
 
                 moveElPos = startElPos - (startCoo - coo);
 
-                edge = findShadowEdge(moveElPos, min, max);
+                edge = findShadowEdge(moveElPos, min, max, dir);
 
                 if (moveElPos <= min) {
                     moveElPos = edgeResistance(moveElPos, min);
@@ -1878,7 +1976,7 @@ fotoramaVersion = '4.6.4';
                 }
 
                 if (!tail.noMove) {
-                    $el.css(getTranslate(moveElPos/*, options._001*/));
+                    $el.css(getTranslate(moveElPos, dir));
                     if (!moved) {
                         moved = true;
                         // only for mouse
@@ -1891,15 +1989,12 @@ fotoramaVersion = '4.6.4';
         }
 
         function onEnd(result) {
-            //////console.time('moveontouch.js onEnd');
             if (tail.noSwipe && result.moved) return;
 
             if (!tracked) {
                 startTracking(result.startEvent, true);
             }
 
-            ////console.log('onEnd');
-
             result.touch || MS_POINTER || $el.removeClass(grabbingClass);
 
             endTime = $.now();
@@ -1970,7 +2065,8 @@ fotoramaVersion = '4.6.4';
                 pos: moveElPos,
                 newPos: newPos,
                 overPos: overPos,
-                time: time
+                time: time,
+                dir: dir
             }));
         }
 
@@ -1982,6 +2078,7 @@ fotoramaVersion = '4.6.4';
 
         return tail;
     }
+
     function wheel($el, options) {
         var el = $el[0],
             lockFLAG,
@@ -2026,6 +2123,7 @@ fotoramaVersion = '4.6.4';
 
         return tail;
     }
+
     jQuery.Fotorama = function ($fotorama, opts) {
         $HTML = $('html');
         $BODY = $('body');
@@ -2062,6 +2160,8 @@ fotoramaVersion = '4.6.4';
             navShaftData = $navShaft.data(),
 
             $thumbBorder = $fotorama.find(cls(thumbBorderClass)),
+            $thumbArrLeft = $fotorama.find(cls(thumbArrLeft)),
+            $thumbArrRight = $fotorama.find(cls(thumbArrRight)),
 
             $fullscreenIcon = $fotorama.find(cls(fullscreenIconClass)),
             fullscreenIcon = $fullscreenIcon[0],
@@ -2129,7 +2229,11 @@ fotoramaVersion = '4.6.4';
             stageLeft = 0,
 
             fadeStack = [];
-        $wrap[STAGE_FRAME_KEY] = $('<a class="' + stageFrameClass + '" target="_blank"></a>');
+        if (Modernizr.touch) {
+            $wrap[STAGE_FRAME_KEY] = $('<a class="' + stageFrameClass + '" target="_blank"></a>');
+        } else {
+            $wrap[STAGE_FRAME_KEY] = $('<div class="' + stageFrameClass + '"></div>');
+        }
 
         $wrap[NAV_THUMB_FRAME_KEY] = $($.Fotorama.jst.thumb());
 
@@ -2171,11 +2275,34 @@ fotoramaVersion = '4.6.4';
             return o_keyboard[key] || that.fullScreen;
         }
 
+        function setStagePosition() {
+            if ($stage !== undefined) {
+
+                if (opts.navdir == 'vertical') {
+                    var padding = opts.thumbwidth + opts.thumbmargin;
+
+                    $stage.css('left', padding);
+                    $arrNext.css('right', padding);
+                    $fullscreenIcon.css('right', padding);
+                    $wrap.css('width', $wrap.css('width') + padding);
+                    $stageShaft.css('max-width', $wrap.width() - padding);
+                } else {
+                    $stage.css('left', '');
+                    $arrNext.css('right', '');
+                    $fullscreenIcon.css('right', '');
+                    $wrap.css('width', $wrap.css('width') + padding);
+                    $stageShaft.css('max-width', '');
+                }
+            }
+        }
+
         function bindGlobalEvents(FLAG) {
             var keydownCommon = 'keydown.' + _fotoramaClass,
                 localStamp = _fotoramaClass + stamp,
                 keydownLocal = 'keydown.' + localStamp,
-                resizeLocal = 'resize.' + localStamp + ' ' + 'orientationchange.' + localStamp;
+                keyupLocal = 'keyup.' + localStamp,
+                resizeLocal = 'resize.' + localStamp + ' ' + 'orientationchange.' + localStamp,
+                showParams;
 
             if (FLAG) {
                 $DOCUMENT
@@ -2191,20 +2318,37 @@ fotoramaVersion = '4.6.4';
                                 catched = true;
                                 that.cancelFullScreen();
                             } else if ((e.shiftKey && e.keyCode === 32 && allowKey('space')) || (e.keyCode === 37 && allowKey('left')) || (e.keyCode === 38 && allowKey('up'))) {
+                                that.longPress.progress();
                                 index = '<';
                             } else if ((e.keyCode === 32 && allowKey('space')) || (e.keyCode === 39 && allowKey('right')) || (e.keyCode === 40 && allowKey('down'))) {
+                                that.longPress.progress();
                                 index = '>';
                             } else if (e.keyCode === 36 && allowKey('home')) {
+                                that.longPress.progress();
                                 index = '<<';
                             } else if (e.keyCode === 35 && allowKey('end')) {
+                                that.longPress.progress();
                                 index = '>>';
                             }
                         }
 
                         (catched || index) && stopEvent(e);
-                        index && that.show({index: index, slow: e.altKey, user: true});
+                        showParams = {index: index, slow: e.altKey, user: true};
+                        index && (that.longPress.inProgress ?
+                            that.showWhileLongPress(showParams) :
+                            that.show(showParams));
                     });
 
+                if (FLAG) {
+                    $DOCUMENT
+                        .on(keyupLocal, function (e) {
+                            if (that.longPress.inProgress) {
+                                that.showEndLongPress({user:true});
+                            }
+                            that.longPress.reset();
+                        });
+                }
+
                 if (!that.index) {
                     $DOCUMENT
                         .off(keydownCommon)
@@ -2250,7 +2394,7 @@ fotoramaVersion = '4.6.4';
             data = that.data = data || clone(opts.data) || getDataFromHtml($fotorama);
             size = that.size = data.length;
 
-            !ready.ok && opts.shuffle && shuffle(data);
+            ready.ok && opts.shuffle && shuffle(data);
 
             checkForVideo();
 
@@ -2273,11 +2417,31 @@ fotoramaVersion = '4.6.4';
             opts.autoplay = Math.max(+interval || AUTOPLAY_INTERVAL, o_transitionDuration * 1.5);
         }
 
+        function updateThumbArrow(opt) {
+            if (opt.navarrows && opt.nav === 'thumbs') {
+                $thumbArrLeft.show();
+                $thumbArrRight.show();
+            } else {
+                $thumbArrLeft.hide();
+                $thumbArrRight.hide();
+            }
+
+        }
+
+        function getThumbsInSlide($el, opts) {
+            return Math.floor($wrap.width() / (opts.thumbwidth + opts.thumbmargin));
+        }
+
         /**
          * Options on the fly
          * */
         function setOptions() {
+            if (!opts.nav || opts.nav === 'dots') {
+                opts.navdir = 'horizontal'
+            }
+
             that.options = opts = optionsToLowerCase(opts);
+            thumbsPerSlide = getThumbsInSlide($wrap, opts);
 
             o_fade = (opts.transition === 'crossfade' || opts.transition === 'dissolve');
 
@@ -2288,7 +2452,7 @@ fotoramaVersion = '4.6.4';
             o_rtl = opts.direction === 'rtl';
 
             o_keyboard = $.extend({}, opts.keyboard && KEYBOARD_OPTIONS, opts.keyboard);
-
+            updateThumbArrow(opts);
             var classes = {add: [], remove: []};
 
             function addOrRemoveClass(FLAG, value) {
@@ -2300,7 +2464,7 @@ fotoramaVersion = '4.6.4';
                 o_navTop = opts.navposition === 'top';
                 classes.remove.push(selectClass);
 
-                $arrs.toggle(!!opts.arrows);
+                $arrs.toggle(opts.arrows);
             } else {
                 o_nav = false;
                 $arrs.hide();
@@ -2311,7 +2475,7 @@ fotoramaVersion = '4.6.4';
 
             arrsUpdate();
             stageWheelUpdate();
-
+            thumbArrUpdate();
             if (opts.autoplay) setAutoplayInterval(opts.autoplay);
 
             o_thumbSide = numberFromMeasure(opts.thumbwidth) || THUMB_SIZE;
@@ -2332,7 +2496,6 @@ fotoramaVersion = '4.6.4';
                 frameDraw(size, 'navThumb');
 
                 $navFrame = $navThumbFrame;
-                //
                 navFrameKey = NAV_THUMB_FRAME_KEY;
 
                 setStyle($style, $.Fotorama.jst.style({
@@ -2397,6 +2560,7 @@ fotoramaVersion = '4.6.4';
                 .removeClass(classes.remove.join(' '));
 
             lastOptions = $.extend({}, opts);
+            setStagePosition();
         }
 
         function normalizeIndex(index) {
@@ -2426,8 +2590,13 @@ fotoramaVersion = '4.6.4';
         }
 
         function setNavShaftMinMax() {
-            navShaftTouchTail.min = Math.min(0, measures.nw - $navShaft.width());
+
+            var isVerticalDir = (opts.navdir === 'vertical');
+            var param = isVerticalDir ? $navShaft.height() : $navShaft.width();
+            var mainParam = isVerticalDir ? measures.h : measures.nw;
+            navShaftTouchTail.min = Math.min(0, mainParam - param);
             navShaftTouchTail.max = 0;
+            navShaftTouchTail.direction = opts.navdir;
             $navShaft.toggleClass(grabClass, !(navShaftTouchTail.noMove = navShaftTouchTail.min === navShaftTouchTail.max));
         }
 
@@ -2530,10 +2699,10 @@ fotoramaVersion = '4.6.4';
 
                 function loaded() {
                     $.Fotorama.measures[src] = imgData.measures = $.Fotorama.measures[src] || {
-                        width: img.width,
-                        height: img.height,
-                        ratio: img.width / img.height
-                    };
+                            width: img.width,
+                            height: img.height,
+                            ratio: img.width / img.height
+                        };
 
                     setMeasures(imgData.measures.width, imgData.measures.height, imgData.measures.ratio, index);
 
@@ -2547,7 +2716,7 @@ fotoramaVersion = '4.6.4';
                     }
 
                     fit($img, (
-                        $.isFunction(specialMeasures) ? specialMeasures() : specialMeasures) || measures);
+                            $.isFunction(specialMeasures) ? specialMeasures() : specialMeasures) || measures);
 
                     $.Fotorama.cache[src] = frameData.state = 'loaded';
 
@@ -2735,10 +2904,20 @@ fotoramaVersion = '4.6.4';
         }
 
         function thumbsDraw(pos, loadFLAG) {
+            var leftLimit,
+                rightLimit,
+                exceedLimit;
+
+
             if (o_nav !== 'thumbs' || isNaN(pos)) return;
 
-            var leftLimit = -pos,
-                rightLimit = -pos + measures.nw;
+            leftLimit = -pos;
+            rightLimit = -pos + measures.nw;
+
+            if (opts.navdir === 'vertical') {
+                pos = pos - opts.thumbheight;
+                rightLimit = -pos + measures.h;
+            }
 
             $navThumbFrame.each(function () {
                 var $this = $(this),
@@ -2751,12 +2930,12 @@ fotoramaVersion = '4.6.4';
                         }
                     },
                     specialMeasures = getSpecialMeasures(),
-                    dataFrame = data[eq] || {};
-
+                    exceedLimit = opts.navdir === 'vertical' ?
+                    thisData.t > rightLimit : thisData.l > rightLimit;
                 specialMeasures.w = thisData.w;
 
                 if (thisData.l + thisData.w < leftLimit
-                    || thisData.l > rightLimit
+                    || exceedLimit
                     || callFit(thisData.$img, specialMeasures)) return;
 
                 loadFLAG && loadImg([eq], 'navThumb', getSpecialMeasures);
@@ -2767,7 +2946,8 @@ fotoramaVersion = '4.6.4';
             if (!frameAppend[type]) {
 
                 var thumbsFLAG = type === 'nav' && o_navThumbs,
-                    left = 0;
+                    left = 0,
+                    top = 0;
 
                 $shaft.append(
                     $frames
@@ -2798,13 +2978,16 @@ fotoramaVersion = '4.6.4';
 
                             var $this = $(this),
                                 frameData = $this.data(),
-                                thumbwidth = Math.round(o_thumbSide2 * frameData.data.thumbratio) || o_thumbSide;
-
+                                thumbwidth = Math.round(o_thumbSide2 * frameData.data.thumbratio) || o_thumbSide,
+                                thumbheight = Math.round(o_thumbSide / frameData.data.thumbratio) || o_thumbSide2;
+                            frameData.t = top;
+                            frameData.h = thumbheight;
                             frameData.l = left;
                             frameData.w = thumbwidth;
 
                             $this.css({width: thumbwidth});
 
+                            top += thumbheight + opts.thumbmargin;
                             left += thumbwidth + opts.thumbmargin;
                         })
                 );
@@ -2832,6 +3015,26 @@ fotoramaVersion = '4.6.4';
                 .attr(disableAttr(disableNext));
         }
 
+        function thumbArrUpdate() {
+            var isLeftDisable = false,
+                isRightDisable = false;
+            if (opts.navtype === 'thumbs' && !opts.loop) {
+                (activeIndex == 0) ? isLeftDisable = true : isLeftDisable = false;
+                (activeIndex == opts.data.length - 1) ? isRightDisable = true : isRightDisable = false;
+            }
+            if (opts.navtype === 'slides') {
+                var pos = readPosition($navShaft, opts.navdir);
+                pos >= navShaftTouchTail.max ? isLeftDisable = true : isLeftDisable = false;
+                pos <= navShaftTouchTail.min ? isRightDisable = true : isRightDisable = false;
+            }
+            $thumbArrLeft
+                .toggleClass(arrDisabledClass, isLeftDisable)
+                .attr(disableAttr(isLeftDisable));
+            $thumbArrRight
+                .toggleClass(arrDisabledClass, isRightDisable)
+                .attr(disableAttr(isRightDisable));
+        }
+
         function stageWheelUpdate() {
             if (stageWheelTail.ok) {
                 stageWheelTail.prevent = {'<': disableDirrection(0), '>': disableDirrection(1)};
@@ -2841,51 +3044,97 @@ fotoramaVersion = '4.6.4';
         function getNavFrameBounds($navFrame) {
             var navFrameData = $navFrame.data(),
                 left,
-                width;
+                top,
+                width,
+                height;
 
             if (o_navThumbs) {
                 left = navFrameData.l;
+                top = navFrameData.t;
                 width = navFrameData.w;
+                height = navFrameData.h;
             } else {
                 left = $navFrame.position().left;
                 width = $navFrame.width();
             }
 
-            return {
+            var horizontalBounds = {
                 c: left + width / 2,
                 min: -left + opts.thumbmargin * 10,
                 max: -left + measures.w - width - opts.thumbmargin * 10
             };
+
+            var verticalBounds = {
+                c: top + height / 2,
+                min: -top + opts.thumbmargin * 10,
+                max: -top + measures.h - height - opts.thumbmargin * 10
+            };
+
+            return opts.navdir === 'vertical' ? verticalBounds : horizontalBounds;
         }
 
         function slideThumbBorder(time) {
             var navFrameData = activeFrame[navFrameKey].data();
             slide($thumbBorder, {
                 time: time * 1.2,
-                pos: navFrameData.l,
-                width: navFrameData.w
+                pos: (opts.navdir === 'vertical' ? navFrameData.t : navFrameData.l),
+                width: navFrameData.w,
+                height: navFrameData.h,
+                direction: opts.navdir
             });
         }
 
         function slideNavShaft(options) {
-            var $guessNavFrame = data[options.guessIndex][navFrameKey];
+            var $guessNavFrame = data[options.guessIndex][navFrameKey],
+                typeOfAnimation = opts.navtype;
+
+            var overflowFLAG,
+                time,
+                minMax,
+                boundTop,
+                boundLeft,
+                l,
+                pos,
+                x;
+
             if ($guessNavFrame) {
-                var overflowFLAG = navShaftTouchTail.min !== navShaftTouchTail.max,
-                    minMax = options.minMax || overflowFLAG && getNavFrameBounds(activeFrame[navFrameKey]),
-                    l = overflowFLAG && (options.keep && slideNavShaft.l ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max)),
-                    pos = overflowFLAG && minMaxLimit(l, navShaftTouchTail.min, navShaftTouchTail.max),
+                if (typeOfAnimation === 'thumbs') {
+                    overflowFLAG = navShaftTouchTail.min !== navShaftTouchTail.max;
+                    minMax = options.minMax || overflowFLAG && getNavFrameBounds(activeFrame[navFrameKey]);
+                    boundTop = overflowFLAG && (options.keep && slideNavShaft.t ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max));
+                    boundLeft = overflowFLAG && (options.keep && slideNavShaft.l ? slideNavShaft.l : minMaxLimit((options.coo || measures.nw / 2) - getNavFrameBounds($guessNavFrame).c, minMax.min, minMax.max));
+                    l = (opts.navdir === 'vertical' ? boundTop : boundLeft);
+                    pos = overflowFLAG && minMaxLimit(l, navShaftTouchTail.min, navShaftTouchTail.max) || 0;
                     time = options.time * 1.1;
+                    slide($navShaft, {
+                        time: time,
+                        pos: pos,
+                        direction: opts.navdir,
+                        onEnd: function () {
+                            thumbsDraw(pos, true);
+                            thumbArrUpdate();
+                        }
+                    });
 
-                slide($navShaft, {
-                    time: time,
-                    pos: pos || 0,
-                    onEnd: function () {
-                        thumbsDraw(pos, true);
-                    }
-                });
+                    setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir));
+                    slideNavShaft.l = l;
+                } else {
+                    x = readPosition($navShaft, opts.navdir);
+                    time = options.time * 1.11;
+
+                    pos = validateSlidePos(opts, navShaftTouchTail, options.guessIndex, x, $guessNavFrame, $navWrap, opts.navdir);
 
-                setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max));
-                slideNavShaft.l = l;
+                    slide($navShaft, {
+                        time: time,
+                        pos: pos,
+                        direction: opts.navdir,
+                        onEnd: function () {
+                            thumbsDraw(pos, true);
+                            thumbArrUpdate();
+                        }
+                    });
+                    setShadow($nav, findShadowEdge(pos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir));
+                }
             }
         }
 
@@ -2929,13 +3178,19 @@ fotoramaVersion = '4.6.4';
                     $frame.attr('aria-hidden', 'false');
                 }
 
-                skipOnEnd || that.show.onEnd(true);
+                skipOnEnd || that.showStage.onEnd(true);
                 stop($stageShaft, 0, true);
 
                 detachFrames(STAGE_FRAME_KEY);
                 stageFramePosition(activeIndexes);
                 setStageShaftMinmaxAndSnap();
                 setNavShaftMinMax();
+                addEnterUp($stageShaft[0], function () {
+                    if (!$fotorama.hasClass(fullscreenClass)) {
+                        that.requestFullScreen();
+                        $(fullscreenIcon).trigger('focus');
+                    }
+                });
             }
         }
 
@@ -3050,7 +3305,70 @@ fotoramaVersion = '4.6.4';
             return this;
         };
 
-        that.show = function (options) {
+        that.showSlide = function (slideDir) {
+            var currentPosition = readPosition($navShaft, opts.navdir),
+                pos,
+                time = 500 * 1.1,
+                size = opts.navdir === 'horizontal' ? opts.thumbwidth : opts.thumbheight,
+                onEnd = function () {
+                    thumbArrUpdate();
+                };
+            if (slideDir === 'next') {
+                pos = currentPosition - (size + opts.margin) * thumbsPerSlide;
+            }
+            if (slideDir === 'prev') {
+                pos = currentPosition + (size + opts.margin) * thumbsPerSlide;
+            }
+            pos = validateRestrictions(pos, navShaftTouchTail);
+            thumbsDraw(pos, true);
+            slide($navShaft, {
+                time: time,
+                pos: pos,
+                direction: opts.navdir,
+                onEnd: onEnd
+            });
+        };
+
+        that.showWhileLongPress = function (options) {
+            if (that.longPress.singlePressInProgress)
+            {
+                return;
+            }
+
+            var index = calcActiveIndex(options);
+            calcGlobalIndexes(index);
+            var time = calcTime(options)/50;
+            var _activeFrame = activeFrame;
+            that.activeFrame = activeFrame = data[activeIndex];
+            var silent = _activeFrame === activeFrame && !options.user;
+
+            that.showNav(silent, options, time);
+
+            return this;
+        };
+
+        that.showEndLongPress = function (options) {
+            if (that.longPress.singlePressInProgress)
+            {
+                return;
+            }
+
+            var index = calcActiveIndex(options);
+            calcGlobalIndexes(index);
+            var time = calcTime(options)/50;
+            var _activeFrame = activeFrame;
+            that.activeFrame = activeFrame = data[activeIndex];
+
+            var silent = _activeFrame === activeFrame && !options.user;
+
+            that.showStage(silent, options, time);
+
+            showedFLAG = typeof lastActiveIndex !== 'undefined' && lastActiveIndex !== activeIndex;
+            lastActiveIndex = activeIndex;
+            return this;
+        };
+
+        function calcActiveIndex (options) {
             var index;
 
             if (typeof options !== 'object') {
@@ -3064,6 +3382,10 @@ fotoramaVersion = '4.6.4';
             index = isNaN(index) ? undefined : index;
             index = typeof index === 'undefined' ? activeIndex || 0 : index;
 
+            return index;
+        }
+
+        function calcGlobalIndexes (index) {
             that.activeIndex = activeIndex = edgeIndex(index);
             prevIndex = getPrevIndex(activeIndex);
             nextIndex = getNextIndex(activeIndex);
@@ -3071,20 +3393,22 @@ fotoramaVersion = '4.6.4';
             activeIndexes = [activeIndex, prevIndex, nextIndex];
 
             dirtyIndex = o_loop ? index : activeIndex;
+        }
 
+        function calcTime (options) {
             var diffIndex = Math.abs(lastActiveIndex - dirtyIndex),
                 time = getNumber(options.time, function () {
                     return Math.min(o_transitionDuration * (1 + (diffIndex - 1) / 12), o_transitionDuration * 2);
-                }),
-                overPos = options.overPos;
-
-            if (options.slow) time *= 10;
+                });
 
-            var _activeFrame = activeFrame;
-            that.activeFrame = activeFrame = data[activeIndex];
+            if (options.slow) {
+                time *= 10;
+            }
 
-            var silent = _activeFrame === activeFrame && !options.user;
+            return time;
+        }
 
+        that.showStage = function (silent, options, time) {
             unloadVideo($videoPlaying, activeFrame.i !== data[normalizeIndex(repositionIndex)].i);
             frameDraw(activeIndexes, 'stage');
             stageFramePosition(SLOW ? [dirtyIndex] : [dirtyIndex, getPrevIndex(dirtyIndex), getNextIndex(dirtyIndex)]);
@@ -3097,7 +3421,8 @@ fotoramaVersion = '4.6.4';
 
             pausedAutoplayFLAG = true;
 
-            var onEnd = that.show.onEnd = function (skipReposition) {
+            var overPos = options.overPos;
+            var onEnd = that.showStage.onEnd = function (skipReposition) {
                 if (onEnd.ok) return;
                 onEnd.ok = true;
 
@@ -3131,12 +3456,11 @@ fotoramaVersion = '4.6.4';
                     pos: -getPosByIndex(dirtyIndex, measures.w, opts.margin, repositionIndex),
                     overPos: overPos,
                     time: time,
-                    onEnd: onEnd/*,
-                     _001: true*/
+                    onEnd: onEnd
                 });
             } else {
                 var $activeFrame = activeFrame[STAGE_FRAME_KEY],
-                    $prevActiveFrame = activeIndex !== lastActiveIndex ? data[lastActiveIndex][STAGE_FRAME_KEY] : null;
+                    $prevActiveFrame = data[lastActiveIndex] && activeIndex !== lastActiveIndex ? data[lastActiveIndex][STAGE_FRAME_KEY] : null;
 
                 fade($activeFrame, $prevActiveFrame, $stageFrame, {
                     time: time,
@@ -3146,7 +3470,10 @@ fotoramaVersion = '4.6.4';
             }
 
             arrsUpdate();
+        };
 
+        that.showNav = function(silent, options, time){
+            thumbArrUpdate();
             if (o_nav) {
                 navUpdate();
 
@@ -3157,12 +3484,27 @@ fotoramaVersion = '4.6.4';
                     guessIndex: typeof options.coo !== 'undefined' ? guessIndex : activeIndex,
                     keep: silent
                 });
-
                 if (o_navThumbs) slideThumbBorder(time);
             }
+        };
+
+        that.show = function (options) {
+            that.longPress.singlePressInProgress = true;
+
+            var index = calcActiveIndex(options);
+            calcGlobalIndexes(index);
+            var time = calcTime(options);
+            var _activeFrame = activeFrame;
+            that.activeFrame = activeFrame = data[activeIndex];
+
+            var silent = _activeFrame === activeFrame && !options.user;
+
+            that.showStage(silent, options, time);
+            that.showNav(silent, options, time);
 
             showedFLAG = typeof lastActiveIndex !== 'undefined' && lastActiveIndex !== activeIndex;
             lastActiveIndex = activeIndex;
+            that.longPress.singlePressInProgress = false;
 
             return this;
         };
@@ -3258,11 +3600,12 @@ fotoramaVersion = '4.6.4';
             var time = arguments[1] || 0,
                 setFLAG = arguments[2];
 
+            thumbsPerSlide = getThumbsInSlide($wrap, opts);
             extendMeasures(!that.fullScreen ? optionsToLowerCase(options) : {
-                width: '100%',
+                width: $(window).width(),
                 maxwidth: null,
                 minwidth: null,
-                height: '100%',
+                height: $(window).height(),
                 maxheight: null,
                 minheight: null
             }, [measures, setFLAG || that.fullScreen || opts]);
@@ -3273,13 +3616,15 @@ fotoramaVersion = '4.6.4';
                 windowHeight = $WINDOW.height() - (o_nav ? $nav.height() : 0);
 
             if (measureIsValid(width)) {
+                $wrap.css({width: ''});
+                $wrap.css({height: ''});
                 $stage.css({width: ''});
                 $stage.css({height: ''});
+                $stage.css({'line-height': ''});
                 $stageShaft.css({width: ''});
                 $stageShaft.css({height: ''});
                 $nav.css({width: ''});
                 $nav.css({height: ''});
-                $stage.css({'line-height': ''});
                 $wrap.css({minWidth: measures.minwidth || 0, maxWidth: measures.maxwidth || MAX_WIDTH});
 
                 width = measures.W = measures.w = $wrap.width();
@@ -3294,27 +3639,63 @@ fotoramaVersion = '4.6.4';
                 if (height) {
                     width = Math.round(width);
                     height = measures.h = Math.round(minMaxLimit(height, numberFromWhatever(measures.minheight, windowHeight), numberFromWhatever(measures.maxheight, windowHeight)));
-
                     $stage.css({'width': width, 'height': height, 'line-height': height + 'px'});
 
-                    stageShaftReposition();
+                    if (opts.navdir === 'vertical' && !that.fullscreen) {
+                        $nav.width(opts.thumbwidth + opts.thumbmargin * 2);
+                    }
+
+                    if (opts.navdir === 'horizontal' && !that.fullscreen) {
+                        $nav.height(opts.thumbheight + opts.thumbmargin * 2);
+                    }
+
+                    if (opts.navdir === 'vertical' && that.fullScreen) {
+                        $stage.css('height', $(window).height());
+                    }
+
+                    if (opts.navdir === 'horizontal' && that.fullScreen) {
+                        $stage.css('height', $(window).height() - (opts.thumbheight + opts.thumbmargin * 2));
+                    }
 
                     if (o_nav) {
-                        $nav
-                            .stop()
-                            .animate({width: measures.nw}, time);
+                        switch (opts.navdir) {
+                            case 'vertical':
+                                $navWrap.removeClass(navShafthorizontalClass);
+                                $navWrap.removeClass(navShaftListClass);
+                                $navWrap.addClass(navShaftVerticalClass);
+                                $nav
+                                    .stop()
+                                    .animate({height: measures.h, width: opts.thumbwidth}, time);
+                                break;
+                            case 'list':
+                                $navWrap.removeClass(navShaftVerticalClass);
+                                $navWrap.removeClass(navShafthorizontalClass);
+                                $navWrap.addClass(navShaftListClass);
+                                break;
+                            default:
+                                $navWrap.removeClass(navShaftVerticalClass);
+                                $navWrap.removeClass(navShaftListClass);
+                                $navWrap.addClass(navShafthorizontalClass);
+                                $nav
+                                    .stop()
+                                    .animate({width: measures.nw}, time);
+                                break;
+                        }
 
+                        stageShaftReposition();
                         slideNavShaft({guessIndex: activeIndex, time: time, keep: true});
                         if (o_navThumbs && frameAppend.nav) slideThumbBorder(time);
                     }
 
                     measuresSetFLAG = setFLAG || true;
 
+                    ready.ok = true;
                     ready();
                 }
             }
 
             stageLeft = $stage.offset().left;
+            setStagePosition();
 
             return this;
         };
@@ -3333,10 +3714,33 @@ fotoramaVersion = '4.6.4';
         function setShadow($el, edge) {
             if (o_shadows) {
                 $el.removeClass(shadowsLeftClass + ' ' + shadowsRightClass);
+                $el.removeClass(shadowsTopClass + ' ' + shadowsBottomClass);
                 edge && !$videoPlaying && $el.addClass(edge.replace(/^|\s/g, ' ' + shadowsClass + '--'));
             }
         }
 
+        that.longPress = {
+            threshold: 1,
+            count: 0,
+            thumbSlideTime: 20,
+            progress: function(){
+                if (!this.inProgress) {
+                    this.count++;
+                    this.inProgress = this.count > this.threshold;
+                    }
+            },
+            end: function(){
+                if(this.inProgress) {
+                    this.isEnded = true
+                }
+            },
+            reset: function(){
+                this.count = 0;
+                this.inProgress = false;
+                this.isEnded = false;
+            }
+        };
+
         that.destroy = function () {
             that.cancelFullScreen();
             that.stopAutoplay();
@@ -3466,7 +3870,11 @@ fotoramaVersion = '4.6.4';
                     toggleControlsClass();
                 } else if (opts.click) {
 
-                    clickToShow({index: e.shiftKey || getDirectionSign(getDirection(e._x)), slow: e.altKey, user: true});
+                    clickToShow({
+                        index: e.shiftKey || getDirectionSign(getDirection(e._x)),
+                        slow: e.altKey,
+                        user: true
+                    });
                 }
             }
         }
@@ -3503,7 +3911,9 @@ fotoramaVersion = '4.6.4';
             timeHigh: 1,
             friction: 2,
             select: '.' + selectClass + ', .' + selectClass + ' *',
-            $wrap: $stage
+            $wrap: $stage,
+            direction: 'horizontal'
+
         });
 
         navShaftTouchTail = moveOnTouch($navShaft, {
@@ -3519,6 +3929,7 @@ fotoramaVersion = '4.6.4';
                     releaseAutoplay();
                     changeAutoplay();
                     thumbsDraw(result.newPos, true);
+                    thumbArrUpdate();
                 }
 
                 if (!result.moved) {
@@ -3530,10 +3941,11 @@ fotoramaVersion = '4.6.4';
                         time: result.time,
                         pos: result.newPos,
                         overPos: result.overPos,
+                        direction: opts.navdir,
                         onEnd: onEnd
                     });
                     thumbsDraw(result.newPos);
-                    o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max));
+                    o_shadows && setShadow($nav, findShadowEdge(result.newPos, navShaftTouchTail.min, navShaftTouchTail.max, result.dir));
                 } else {
                     onEnd();
                 }
@@ -3541,7 +3953,8 @@ fotoramaVersion = '4.6.4';
             timeLow: .5,
             timeHigh: 2,
             friction: 5,
-            $wrap: $nav
+            $wrap: $nav,
+            direction: opts.navdir
         });
 
         stageWheelTail = wheel($stage, {
@@ -3558,8 +3971,8 @@ fotoramaVersion = '4.6.4';
                 onTouchStart();
                 onTouchEnd();
                 var newPos = stop($navShaft) + direction * .25;
-                $navShaft.css(getTranslate(minMaxLimit(newPos, navShaftTouchTail.min, navShaftTouchTail.max)));
-                o_shadows && setShadow($nav, findShadowEdge(newPos, navShaftTouchTail.min, navShaftTouchTail.max));
+                $navShaft.css(getTranslate(minMaxLimit(newPos, navShaftTouchTail.min, navShaftTouchTail.max), opts.navdir));
+                o_shadows && setShadow($nav, findShadowEdge(newPos, navShaftTouchTail.min, navShaftTouchTail.max, opts.navdir));
                 navWheelTail.prevent = {'<': newPos >= navShaftTouchTail.max, '>': newPos <= navShaftTouchTail.min};
                 clearTimeout(navWheelTail.t);
                 navWheelTail.t = setTimeout(function () {
@@ -3578,7 +3991,6 @@ fotoramaVersion = '4.6.4';
                 }, 0);
             },
             function () {
-                //console.log("click");
                 if (!hoverFLAG) return;
                 toggleControlsClass(!(hoverFLAG = false));
             }
@@ -3586,7 +3998,12 @@ fotoramaVersion = '4.6.4';
 
         function onNavFrameClick(e) {
             var index = $(this).data().eq;
-            clickToShow({index: index, slow: e.altKey, user: true, coo: e._x - $nav.offset().left});
+
+            if (opts.navtype === 'thumbs') {
+                clickToShow({index: index, slow: e.altKey, user: true, coo: e._x - $nav.offset().left});
+            } else {
+                clickToShow({index: index, slow: e.altKey, user: true});
+            }
         }
 
         function onArrClick(e) {
@@ -3604,6 +4021,27 @@ fotoramaVersion = '4.6.4';
             onTouchEnd: onTouchEnd
         });
 
+        smartClick($thumbArrLeft, function (e) {
+            stopEvent(e);
+            if (opts.navtype === 'thumbs') {
+
+                that.show('<');
+            } else {
+                that.showSlide('prev')
+            }
+        });
+
+        smartClick($thumbArrRight, function (e) {
+            stopEvent(e);
+            if (opts.navtype === 'thumbs') {
+                that.show('>');
+            } else {
+                that.showSlide('next')
+            }
+
+        });
+
+
         function addFocusOnControls(el) {
             addFocus(el, function () {
                 setTimeout(function () {
@@ -3620,7 +4058,10 @@ fotoramaVersion = '4.6.4';
             addFocusOnControls(this);
         });
 
-        addEnterUp(fullscreenIcon, that.toggleFullScreen);
+        addEnterUp(fullscreenIcon, function () {
+            that.toggleFullScreen();
+            $(fullscreenIcon).trigger('focus');
+        });
         addFocusOnControls(fullscreenIcon);
 
         function reset() {
@@ -3679,16 +4120,14 @@ fotoramaVersion = '4.6.4';
         });
 
         function ready() {
-            if (!ready.ok) {
-                ready.ok = true;
+            if (ready.ok) {
+                ready.ok = false;
                 triggerEvent('ready');
             }
         }
 
         reset();
     };
-
-
     $.fn.fotorama = function (opts) {
         return this.each(function () {
             var that = this,
@@ -3733,49 +4172,50 @@ fotoramaVersion = '4.6.4';
         $.Fotorama.instances.splice(instance.index, 1);
         calculateIndexes();
     }
+
     $.Fotorama.cache = {};
     $.Fotorama.measures = {};
     $ = $ || {};
     $.Fotorama = $.Fotorama || {};
     $.Fotorama.jst = $.Fotorama.jst || {};
 
-    $.Fotorama.jst.dots = function(v) {
+    $.Fotorama.jst.dots = function (v) {
         var __t, __p = '', __e = _.escape;
-        __p += '<div class="fotorama__nav__frame fotorama__nav__frame--dot" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="dot" aria-label>\r\n    <div class="fotorama__dot"></div>\r\n</div>';
+        __p += '<div class="fotorama__nav__frame fotorama__nav__frame--dot" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="thumb" aria-label>\r\n    <div class="fotorama__dot"></div>\r\n</div>';
         return __p
     };
 
-    $.Fotorama.jst.frameCaption = function(v) {
+    $.Fotorama.jst.frameCaption = function (v) {
         var __t, __p = '', __e = _.escape;
         __p += '<div class="fotorama__caption" aria-hidden="true">\r\n    <div class="fotorama__caption__wrap" id="' +
-        ((__t = ( v.labelledby )) == null ? '' : __t) +
-        '">' +
-        ((__t = ( v.caption )) == null ? '' : __t) +
-        '</div>\r\n</div>\r\n';
+            ((__t = ( v.labelledby )) == null ? '' : __t) +
+            '">' +
+            ((__t = ( v.caption )) == null ? '' : __t) +
+            '</div>\r\n</div>\r\n';
         return __p
     };
 
-    $.Fotorama.jst.style = function(v) {
+    $.Fotorama.jst.style = function (v) {
         var __t, __p = '', __e = _.escape;
         __p += '.fotorama' +
-        ((__t = ( v.s )) == null ? '' : __t) +
-        ' .fotorama__nav--thumbs .fotorama__nav__frame{\r\npadding:' +
-        ((__t = ( v.m )) == null ? '' : __t) +
-        'px;\r\nheight:' +
-        ((__t = ( v.h )) == null ? '' : __t) +
-        'px}\r\n.fotorama' +
-        ((__t = ( v.s )) == null ? '' : __t) +
-        ' .fotorama__thumb-border{\r\nheight:' +
-        ((__t = ( v.h )) == null ? '' : __t) +
-        'px;\r\nborder-width:' +
-        ((__t = ( v.b )) == null ? '' : __t) +
-        'px;\r\nmargin-top:' +
-        ((__t = ( v.m )) == null ? '' : __t) +
-        'px}';
+            ((__t = ( v.s )) == null ? '' : __t) +
+            ' .fotorama__nav--thumbs .fotorama__nav__frame{\r\npadding:' +
+            ((__t = ( v.m )) == null ? '' : __t) +
+            'px;\r\nheight:' +
+            ((__t = ( v.h )) == null ? '' : __t) +
+            'px}\r\n.fotorama' +
+            ((__t = ( v.s )) == null ? '' : __t) +
+            ' .fotorama__thumb-border{\r\nheight:' +
+            ((__t = ( v.h )) == null ? '' : __t) +
+            'px;\r\nborder-width:' +
+            ((__t = ( v.b )) == null ? '' : __t) +
+            'px;\r\nmargin-top:' +
+            ((__t = ( v.m )) == null ? '' : __t) +
+            'px}';
         return __p
     };
 
-    $.Fotorama.jst.thumb = function(v) {
+    $.Fotorama.jst.thumb = function (v) {
         var __t, __p = '', __e = _.escape;
         __p += '<div class="fotorama__nav__frame fotorama__nav__frame--thumb" tabindex="0" role="button" data-gallery-role="nav-frame" data-nav-type="thumb" aria-label>\r\n    <div class="fotorama__thumb">\r\n    </div>\r\n</div>';
         return __p
diff --git a/lib/web/knockoutjs/knockout-es5.js b/lib/web/knockoutjs/knockout-es5.js
new file mode 100644
index 0000000000000000000000000000000000000000..899edd79aa3e30417689ee52c173007ceb0149f4
--- /dev/null
+++ b/lib/web/knockoutjs/knockout-es5.js
@@ -0,0 +1,468 @@
+/*!
+ * Knockout ES5 plugin - https://github.com/SteveSanderson/knockout-es5
+ * Copyright (c) Steve Sanderson
+ * MIT license
+ */
+
+(function(global, undefined) {
+  'use strict';
+
+  var ko;
+
+  // Model tracking
+  // --------------
+  //
+  // This is the central feature of Knockout-ES5. We augment model objects by converting properties
+  // into ES5 getter/setter pairs that read/write an underlying Knockout observable. This means you can
+  // use plain JavaScript syntax to read/write the property while still getting the full benefits of
+  // Knockout's automatic dependency detection and notification triggering.
+  //
+  // For comparison, here's Knockout ES3-compatible syntax:
+  //
+  //     var firstNameLength = myModel.user().firstName().length; // Read
+  //     myModel.user().firstName('Bert'); // Write
+  //
+  // ... versus Knockout-ES5 syntax:
+  //
+  //     var firstNameLength = myModel.user.firstName.length; // Read
+  //     myModel.user.firstName = 'Bert'; // Write
+
+  // `ko.track(model)` converts each property on the given model object into a getter/setter pair that
+  // wraps a Knockout observable. Optionally specify an array of property names to wrap; otherwise we
+  // wrap all properties. If any of the properties are already observables, we replace them with
+  // ES5 getter/setter pairs that wrap your original observable instances. In the case of readonly
+  // ko.computed properties, we simply do not define a setter (so attempted writes will be ignored,
+  // which is how ES5 readonly properties normally behave).
+  //
+  // By design, this does *not* recursively walk child object properties, because making literally
+  // everything everywhere independently observable is usually unhelpful. When you do want to track
+  // child object properties independently, define your own class for those child objects and put
+  // a separate ko.track call into its constructor --- this gives you far more control.
+  /**
+   * @param {object} obj
+   * @param {object|array.<string>} propertyNamesOrSettings
+   * @param {boolean} propertyNamesOrSettings.deep Use deep track.
+   * @param {array.<string>} propertyNamesOrSettings.fields Array of property names to wrap.
+   * todo: @param {array.<string>} propertyNamesOrSettings.exclude Array of exclude property names to wrap.
+   * todo: @param {function(string, *):boolean} propertyNamesOrSettings.filter Function to filter property 
+   *   names to wrap. A function that takes ... params
+   * @return {object}
+   */
+  function track(obj, propertyNamesOrSettings) {
+    if (!obj || typeof obj !== 'object') {
+      throw new Error('When calling ko.track, you must pass an object as the first parameter.');
+    }
+
+    var propertyNames;
+
+    if ( isPlainObject(propertyNamesOrSettings) ) {
+      // defaults
+      propertyNamesOrSettings.deep = propertyNamesOrSettings.deep || false;
+      propertyNamesOrSettings.fields = propertyNamesOrSettings.fields || Object.getOwnPropertyNames(obj);
+      propertyNamesOrSettings.lazy = propertyNamesOrSettings.lazy || false;
+
+      wrap(obj, propertyNamesOrSettings.fields, propertyNamesOrSettings);
+    } else {
+      propertyNames = propertyNamesOrSettings || Object.getOwnPropertyNames(obj);
+      wrap(obj, propertyNames, {});
+    }
+
+    return obj;
+  }
+
+  // fix for ie
+  var rFunctionName = /^function\s*([^\s(]+)/;
+  function getFunctionName( ctor ){
+    if (ctor.name) {
+      return ctor.name;
+    }
+    return (ctor.toString().trim().match( rFunctionName ) || [])[1];
+  }
+
+  function canTrack(obj) {
+    return obj && typeof obj === 'object' && getFunctionName(obj.constructor) === 'Object';
+  }
+
+  function createPropertyDescriptor(originalValue, prop, map) {
+    var isObservable = ko.isObservable(originalValue);
+    var isArray = !isObservable && Array.isArray(originalValue);
+    var observable = isObservable ? originalValue
+        : isArray ? ko.observableArray(originalValue)
+        : ko.observable(originalValue);
+
+    map[prop] = function () { return observable; };
+
+    // add check in case the object is already an observable array
+    if (isArray || (isObservable && 'push' in observable)) {
+      notifyWhenPresentOrFutureArrayValuesMutate(ko, observable);
+    }
+
+    return {
+      configurable: true,
+      enumerable: true,
+      get: observable,
+      set: ko.isWriteableObservable(observable) ? observable : undefined
+    };
+  }
+
+  function createLazyPropertyDescriptor(originalValue, prop, map) {
+    if (ko.isObservable(originalValue)) {
+      // no need to be lazy if we already have an observable
+      return createPropertyDescriptor(originalValue, prop, map);
+    }
+
+    var observable;
+
+    function getOrCreateObservable(value, writing) {
+      if (observable) {
+        return writing ? observable(value) : observable;
+      }
+
+      if (Array.isArray(value)) {
+        observable = ko.observableArray(value);
+        notifyWhenPresentOrFutureArrayValuesMutate(ko, observable);
+        return observable;
+      }
+
+      return (observable = ko.observable(value));
+    }
+
+    map[prop] = function () { return getOrCreateObservable(originalValue); };
+    return {
+      configurable: true,
+      enumerable: true,
+      get: function () { return getOrCreateObservable(originalValue)(); },
+      set: function (value) { getOrCreateObservable(value, true); }
+    };
+  }
+
+  function wrap(obj, props, options) {
+    if (!props.length) {
+      return;
+    }
+
+    var allObservablesForObject = getAllObservablesForObject(obj, true);
+    var descriptors = {};
+
+    props.forEach(function (prop) {
+      // Skip properties that are already tracked
+      if (prop in allObservablesForObject) {
+        return;
+      }
+
+      // Skip properties where descriptor can't be redefined
+      if (Object.getOwnPropertyDescriptor(obj, prop).configurable === false){
+        return;
+      }
+
+      var originalValue = obj[prop];
+      descriptors[prop] = (options.lazy ? createLazyPropertyDescriptor : createPropertyDescriptor)
+        (originalValue, prop, allObservablesForObject);
+
+      if (options.deep && canTrack(originalValue)) {
+        wrap(originalValue, Object.keys(originalValue), options);
+      }
+    });
+
+    Object.defineProperties(obj, descriptors);
+  }
+
+  function isPlainObject( obj ){
+    return !!obj && typeof obj === 'object' && obj.constructor === Object;
+  }
+
+  // Lazily created by `getAllObservablesForObject` below. Has to be created lazily because the
+  // WeakMap factory isn't available until the module has finished loading (may be async).
+  var objectToObservableMap;
+
+  // Gets or creates the hidden internal key-value collection of observables corresponding to
+  // properties on the model object.
+  function getAllObservablesForObject(obj, createIfNotDefined) {
+    if (!objectToObservableMap) {
+      objectToObservableMap = weakMapFactory();
+    }
+
+    var result = objectToObservableMap.get(obj);
+    if (!result && createIfNotDefined) {
+      result = {};
+      objectToObservableMap.set(obj, result);
+    }
+    return result;
+  }
+
+  // Removes the internal references to observables mapped to the specified properties
+  // or the entire object reference if no properties are passed in. This allows the
+  // observables to be replaced and tracked again.
+  function untrack(obj, propertyNames) {
+    if (!objectToObservableMap) {
+      return;
+    }
+
+    if (arguments.length === 1) {
+      objectToObservableMap['delete'](obj);
+    } else {
+      var allObservablesForObject = getAllObservablesForObject(obj, false);
+      if (allObservablesForObject) {
+        propertyNames.forEach(function(propertyName) {
+          delete allObservablesForObject[propertyName];
+        });
+      }
+    }
+  }
+
+  // Computed properties
+  // -------------------
+  //
+  // The preceding code is already sufficient to upgrade ko.computed model properties to ES5
+  // getter/setter pairs (or in the case of readonly ko.computed properties, just a getter).
+  // These then behave like a regular property with a getter function, except they are smarter:
+  // your evaluator is only invoked when one of its dependencies changes. The result is cached
+  // and used for all evaluations until the next time a dependency changes).
+  //
+  // However, instead of forcing developers to declare a ko.computed property explicitly, it's
+  // nice to offer a utility function that declares a computed getter directly.
+
+  // Implements `ko.defineProperty`
+  function defineComputedProperty(obj, propertyName, evaluatorOrOptions) {
+    var ko = this,
+      computedOptions = { owner: obj, deferEvaluation: true };
+
+    if (typeof evaluatorOrOptions === 'function') {
+      computedOptions.read = evaluatorOrOptions;
+    } else {
+      if ('value' in evaluatorOrOptions) {
+        throw new Error('For ko.defineProperty, you must not specify a "value" for the property. ' +
+                        'You must provide a "get" function.');
+      }
+
+      if (typeof evaluatorOrOptions.get !== 'function') {
+        throw new Error('For ko.defineProperty, the third parameter must be either an evaluator function, ' +
+                        'or an options object containing a function called "get".');
+      }
+
+      computedOptions.read = evaluatorOrOptions.get;
+      computedOptions.write = evaluatorOrOptions.set;
+    }
+
+    obj[propertyName] = ko.computed(computedOptions);
+    track.call(ko, obj, [propertyName]);
+    return obj;
+  }
+
+  // Array handling
+  // --------------
+  //
+  // Arrays are special, because unlike other property types, they have standard mutator functions
+  // (`push`/`pop`/`splice`/etc.) and it's desirable to trigger a change notification whenever one of
+  // those mutator functions is invoked.
+  //
+  // Traditionally, Knockout handles this by putting special versions of `push`/`pop`/etc. on observable
+  // arrays that mutate the underlying array and then trigger a notification. That approach doesn't
+  // work for Knockout-ES5 because properties now return the underlying arrays, so the mutator runs
+  // in the context of the underlying array, not any particular observable:
+  //
+  //     // Operates on the underlying array value
+  //     myModel.someCollection.push('New value');
+  //
+  // To solve this, Knockout-ES5 detects array values, and modifies them as follows:
+  //  1. Associates a hidden subscribable with each array instance that it encounters
+  //  2. Intercepts standard mutators (`push`/`pop`/etc.) and makes them trigger the subscribable
+  // Then, for model properties whose values are arrays, the property's underlying observable
+  // subscribes to the array subscribable, so it can trigger a change notification after mutation.
+
+  // Given an observable that underlies a model property, watch for any array value that might
+  // be assigned as the property value, and hook into its change events
+  function notifyWhenPresentOrFutureArrayValuesMutate(ko, observable) {
+    var watchingArraySubscription = null;
+    ko.computed(function () {
+      // Unsubscribe to any earlier array instance
+      if (watchingArraySubscription) {
+        watchingArraySubscription.dispose();
+        watchingArraySubscription = null;
+      }
+
+      // Subscribe to the new array instance
+      var newArrayInstance = observable();
+      if (newArrayInstance instanceof Array) {
+        watchingArraySubscription = startWatchingArrayInstance(ko, observable, newArrayInstance);
+      }
+    });
+  }
+
+  // Listens for array mutations, and when they happen, cause the observable to fire notifications.
+  // This is used to make model properties of type array fire notifications when the array changes.
+  // Returns a subscribable that can later be disposed.
+  function startWatchingArrayInstance(ko, observable, arrayInstance) {
+    var subscribable = getSubscribableForArray(ko, arrayInstance);
+    return subscribable.subscribe(observable);
+  }
+
+  // Lazily created by `getSubscribableForArray` below. Has to be created lazily because the
+  // WeakMap factory isn't available until the module has finished loading (may be async).
+  var arraySubscribablesMap;
+
+  // Gets or creates a subscribable that fires after each array mutation
+  function getSubscribableForArray(ko, arrayInstance) {
+    if (!arraySubscribablesMap) {
+      arraySubscribablesMap = weakMapFactory();
+    }
+
+    var subscribable = arraySubscribablesMap.get(arrayInstance);
+    if (!subscribable) {
+      subscribable = new ko.subscribable();
+      arraySubscribablesMap.set(arrayInstance, subscribable);
+
+      var notificationPauseSignal = {};
+      wrapStandardArrayMutators(arrayInstance, subscribable, notificationPauseSignal);
+      addKnockoutArrayMutators(ko, arrayInstance, subscribable, notificationPauseSignal);
+    }
+
+    return subscribable;
+  }
+
+  // After each array mutation, fires a notification on the given subscribable
+  function wrapStandardArrayMutators(arrayInstance, subscribable, notificationPauseSignal) {
+    ['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'].forEach(function(fnName) {
+      var origMutator = arrayInstance[fnName];
+      arrayInstance[fnName] = function() {
+        var result = origMutator.apply(this, arguments);
+        if (notificationPauseSignal.pause !== true) {
+          subscribable.notifySubscribers(this);
+        }
+        return result;
+      };
+    });
+  }
+
+  // Adds Knockout's additional array mutation functions to the array
+  function addKnockoutArrayMutators(ko, arrayInstance, subscribable, notificationPauseSignal) {
+    ['remove', 'removeAll', 'destroy', 'destroyAll', 'replace'].forEach(function(fnName) {
+      // Make it a non-enumerable property for consistency with standard Array functions
+      Object.defineProperty(arrayInstance, fnName, {
+        enumerable: false,
+        value: function() {
+          var result;
+
+          // These additional array mutators are built using the underlying push/pop/etc.
+          // mutators, which are wrapped to trigger notifications. But we don't want to
+          // trigger multiple notifications, so pause the push/pop/etc. wrappers and
+          // delivery only one notification at the end of the process.
+          notificationPauseSignal.pause = true;
+          try {
+            // Creates a temporary observableArray that can perform the operation.
+            result = ko.observableArray.fn[fnName].apply(ko.observableArray(arrayInstance), arguments);
+          }
+          finally {
+            notificationPauseSignal.pause = false;
+          }
+          subscribable.notifySubscribers(arrayInstance);
+          return result;
+        }
+      });
+    });
+  }
+
+  // Static utility functions
+  // ------------------------
+  //
+  // Since Knockout-ES5 sets up properties that return values, not observables, you can't
+  // trivially subscribe to the underlying observables (e.g., `someProperty.subscribe(...)`),
+  // or tell them that object values have mutated, etc. To handle this, we set up some
+  // extra utility functions that can return or work with the underlying observables.
+
+  // Returns the underlying observable associated with a model property (or `null` if the
+  // model or property doesn't exist, or isn't associated with an observable). This means
+  // you can subscribe to the property, e.g.:
+  //
+  //     ko.getObservable(model, 'propertyName')
+  //       .subscribe(function(newValue) { ... });
+  function getObservable(obj, propertyName) {
+    if (!obj || typeof obj !== 'object') {
+      return null;
+    }
+
+    var allObservablesForObject = getAllObservablesForObject(obj, false);
+    if (allObservablesForObject && propertyName in allObservablesForObject) {
+      return allObservablesForObject[propertyName]();
+    }
+
+    return null;
+  }
+  
+  // Returns a boolean indicating whether the property on the object has an underlying
+  // observables. This does the check in a way not to create an observable if the
+  // object was created with lazily created observables
+  function isTracked(obj, propertyName) {
+    if (!obj || typeof obj !== 'object') {
+      return false;
+    }
+    
+    var allObservablesForObject = getAllObservablesForObject(obj, false);
+    return !!allObservablesForObject && propertyName in allObservablesForObject;
+  }
+
+  // Causes a property's associated observable to fire a change notification. Useful when
+  // the property value is a complex object and you've modified a child property.
+  function valueHasMutated(obj, propertyName) {
+    var observable = getObservable(obj, propertyName);
+
+    if (observable) {
+      observable.valueHasMutated();
+    }
+  }
+
+  // Module initialisation
+  // ---------------------
+  //
+  // When this script is first evaluated, it works out what kind of module loading scenario
+  // it is in (Node.js or a browser `<script>` tag), stashes a reference to its dependencies
+  // (currently that's just the WeakMap shim), and then finally attaches itself to whichever
+  // instance of Knockout.js it can find.
+
+  // A function that returns a new ES6-compatible WeakMap instance (using ES5 shim if needed).
+  // Instantiated by prepareExports, accounting for which module loader is being used.
+  var weakMapFactory;
+
+  // Extends a Knockout instance with Knockout-ES5 functionality
+  function attachToKo(ko) {
+    ko.track = track;
+    ko.untrack = untrack;
+    ko.getObservable = getObservable;
+    ko.valueHasMutated = valueHasMutated;
+    ko.defineProperty = defineComputedProperty;
+
+    // todo: test it, maybe added it to ko. directly
+    ko.es5 = {
+      getAllObservablesForObject: getAllObservablesForObject,
+      notifyWhenPresentOrFutureArrayValuesMutate: notifyWhenPresentOrFutureArrayValuesMutate,
+      isTracked: isTracked
+    };
+  }
+
+  // Determines which module loading scenario we're in, grabs dependencies, and attaches to KO
+  function prepareExports() {
+    if (typeof exports === 'object' && typeof module === 'object') {
+      // Node.js case - load KO and WeakMap modules synchronously
+      ko = require('knockout');
+      var WM = require('../lib/weakmap');
+      attachToKo(ko);
+      weakMapFactory = function() { return new WM(); };
+      module.exports = ko;
+    } else if (typeof define === 'function' && define.amd) {
+      define(['knockout'], function(koModule) {
+        ko = koModule;
+        attachToKo(koModule);
+        weakMapFactory = function() { return new global.WeakMap(); };
+        return koModule;
+      });
+    } else if ('ko' in global) {
+      // Non-module case - attach to the global instance, and assume a global WeakMap constructor
+      ko = global.ko;
+      attachToKo(global.ko);
+      weakMapFactory = function() { return new global.WeakMap(); };
+    }
+  }
+
+  prepareExports();
+
+})(this);
\ No newline at end of file
diff --git a/lib/web/knockoutjs/knockout-fast-foreach.js b/lib/web/knockoutjs/knockout-fast-foreach.js
new file mode 100644
index 0000000000000000000000000000000000000000..7289d46d1c2a6c666748a42c87a340789a2dc73a
--- /dev/null
+++ b/lib/web/knockoutjs/knockout-fast-foreach.js
@@ -0,0 +1,331 @@
+/*!
+  Knockout Fast Foreach v0.4.1 (2015-07-17T14:06:15.974Z)
+  By: Brian M Hunt (C) 2015
+  License: MIT
+
+  Adds `fastForEach` to `ko.bindingHandlers`.
+*/
+(function (root, factory) {
+  if (typeof define === 'function' && define.amd) {
+    define(['knockout'], factory);
+  } else if (typeof exports === 'object') {
+    module.exports = factory(require('knockout'));
+  } else {
+    root.KnockoutFastForeach = factory(root.ko);
+  }
+}(this, function (ko) {
+  "use strict";
+// index.js
+// --------
+// Fast For Each
+//
+// Employing sound techniques to make a faster Knockout foreach binding.
+// --------
+
+//      Utilities
+
+// from https://github.com/jonschlinkert/is-plain-object
+function isPlainObject(o) {
+  return !!o && typeof o === 'object' && o.constructor === Object;
+}
+
+// From knockout/src/virtualElements.js
+var commentNodesHaveTextProperty = document && document.createComment("test").text === "<!--test-->";
+var startCommentRegex = commentNodesHaveTextProperty ? /^<!--\s*ko(?:\s+([\s\S]+))?\s*-->$/ : /^\s*ko(?:\s+([\s\S]+))?\s*$/;
+var supportsDocumentFragment = document && typeof document.createDocumentFragment === "function";
+function isVirtualNode(node) {
+  return (node.nodeType === 8) && startCommentRegex.test(commentNodesHaveTextProperty ? node.text : node.nodeValue);
+}
+
+
+// Get a copy of the (possibly virtual) child nodes of the given element,
+// put them into a container, then empty the given node.
+function makeTemplateNode(sourceNode) {
+  var container = document.createElement("div");
+  var parentNode;
+  if (sourceNode.content) {
+    // For e.g. <template> tags
+    parentNode = sourceNode.content;
+  } else if (sourceNode.tagName === 'SCRIPT') {
+    parentNode = document.createElement("div");
+    parentNode.innerHTML = sourceNode.text;
+  } else {
+    // Anything else e.g. <div>
+    parentNode = sourceNode;
+  }
+  ko.utils.arrayForEach(ko.virtualElements.childNodes(parentNode), function (child) {
+    // FIXME - This cloneNode could be expensive; we may prefer to iterate over the
+    // parentNode children in reverse (so as not to foul the indexes as childNodes are
+    // removed from parentNode when inserted into the container)
+    if (child) {
+      container.insertBefore(child.cloneNode(true), null);
+    }
+  });
+  return container;
+}
+
+function insertAllAfter(containerNode, nodeOrNodeArrayToInsert, insertAfterNode) {
+  var frag, len, i;
+  // poor man's node and array check, should be enough for this
+  if (typeof nodeOrNodeArrayToInsert.nodeType !== "undefined" && typeof nodeOrNodeArrayToInsert.length === "undefined") {
+    throw new Error("Expected a single node or a node array");
+  }
+
+  if (typeof nodeOrNodeArrayToInsert.nodeType !== "undefined") {
+    ko.virtualElements.insertAfter(containerNode, nodeOrNodeArrayToInsert, insertAfterNode);
+    return;
+  }
+
+  if (nodeOrNodeArrayToInsert.length === 1) {
+    ko.virtualElements.insertAfter(containerNode, nodeOrNodeArrayToInsert[0], insertAfterNode);
+    return;
+  }
+
+  if (supportsDocumentFragment) {
+    frag = document.createDocumentFragment();
+
+    for (i = 0, len = nodeOrNodeArrayToInsert.length; i !== len; ++i) {
+      frag.appendChild(nodeOrNodeArrayToInsert[i]);
+    }
+    ko.virtualElements.insertAfter(containerNode, frag, insertAfterNode);
+  } else {
+    // Nodes are inserted in reverse order - pushed down immediately after
+    // the last node for the previous item or as the first node of element.
+    for (i = nodeOrNodeArrayToInsert.length - 1; i >= 0; --i) {
+      var child = nodeOrNodeArrayToInsert[i];
+      if (!child) {
+        return;
+      }
+      ko.virtualElements.insertAfter(containerNode, child, insertAfterNode);
+    }
+  }
+}
+
+// Mimic a KO change item 'add'
+function valueToChangeAddItem(value, index) {
+  return {
+    status: 'added',
+    value: value,
+    index: index
+  };
+}
+
+function isAdditionAdjacentToLast(changeIndex, arrayChanges) {
+  return changeIndex > 0 &&
+    changeIndex < arrayChanges.length &&
+    arrayChanges[changeIndex].status === "added" &&
+    arrayChanges[changeIndex - 1].status === "added" &&
+    arrayChanges[changeIndex - 1].index === arrayChanges[changeIndex].index - 1;
+}
+
+function FastForEach(spec) {
+  this.element = spec.element;
+  this.container = isVirtualNode(this.element) ?
+                   this.element.parentNode : this.element;
+  this.$context = spec.$context;
+  this.data = spec.data;
+  this.as = spec.as;
+  this.noContext = spec.noContext;
+  this.templateNode = makeTemplateNode(
+    spec.name ? document.getElementById(spec.name).cloneNode(true) : spec.element
+  );
+  this.afterQueueFlush = spec.afterQueueFlush;
+  this.beforeQueueFlush = spec.beforeQueueFlush;
+  this.changeQueue = [];
+  this.lastNodesList = [];
+  this.indexesToDelete = [];
+  this.rendering_queued = false;
+
+  // Remove existing content.
+  ko.virtualElements.emptyNode(this.element);
+
+  // Prime content
+  var primeData = ko.unwrap(this.data);
+  if (primeData.map) {
+    this.onArrayChange(primeData.map(valueToChangeAddItem));
+  }
+
+  // Watch for changes
+  if (ko.isObservable(this.data)) {
+    if (!this.data.indexOf) {
+      // Make sure the observable is trackable.
+      this.data = this.data.extend({trackArrayChanges: true});
+    }
+    this.changeSubs = this.data.subscribe(this.onArrayChange, this, 'arrayChange');
+  }
+}
+
+
+FastForEach.animateFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||
+  window.mozRequestAnimationFrame || window.msRequestAnimationFrame ||
+  function(cb) { return window.setTimeout(cb, 1000 / 60); };
+
+
+FastForEach.prototype.dispose = function () {
+  if (this.changeSubs) {
+    this.changeSubs.dispose();
+  }
+};
+
+
+// If the array changes we register the change.
+FastForEach.prototype.onArrayChange = function (changeSet) {
+  var self = this;
+  var changeMap = {
+    added: [],
+    deleted: []
+  };
+  for (var i = 0, len = changeSet.length; i < len; i++) {
+    // the change is appended to a last change info object when both are 'added' and have indexes next to each other
+    // here I presume that ko is sending changes in monotonic order (in index variable) which happens to be true, tested with push and splice with multiple pushed values
+    if (isAdditionAdjacentToLast(i, changeSet)) {
+      var batchValues = changeMap.added[changeMap.added.length - 1].values;
+      if (!batchValues) {
+        // transform the last addition into a batch addition object
+        var lastAddition = changeMap.added.pop();
+        var batchAddition = {
+          isBatch: true,
+          status: 'added',
+          index: lastAddition.index,
+          values: [lastAddition.value]
+        };
+        batchValues = batchAddition.values;
+        changeMap.added.push(batchAddition);
+      }
+      batchValues.push(changeSet[i].value);
+    } else {
+      changeMap[changeSet[i].status].push(changeSet[i]);
+    }
+  }
+  if (changeMap.deleted.length > 0) {
+    this.changeQueue.push.apply(this.changeQueue, changeMap.deleted);
+    this.changeQueue.push({status: 'clearDeletedIndexes'});
+  }
+  this.changeQueue.push.apply(this.changeQueue, changeMap.added);
+  // Once a change is registered, the ticking count-down starts for the processQueue.
+  if (this.changeQueue.length > 0 && !this.rendering_queued) {
+    this.rendering_queued = true;
+    FastForEach.animateFrame.call(window, function () { self.processQueue(); });
+  }
+};
+
+
+// Reflect all the changes in the queue in the DOM, then wipe the queue.
+FastForEach.prototype.processQueue = function () {
+  var self = this;
+
+  // Callback so folks can do things before the queue flush.
+  if (typeof this.beforeQueueFlush === 'function') {
+    this.beforeQueueFlush(this.changeQueue);
+  }
+
+  ko.utils.arrayForEach(this.changeQueue, function (changeItem) {
+    // console.log(self.data(), "CI", JSON.stringify(changeItem, null, 2), JSON.stringify($(self.element).text()))
+    self[changeItem.status](changeItem);
+    // console.log("  ==> ", JSON.stringify($(self.element).text()))
+  });
+  this.rendering_queued = false;
+  // Callback so folks can do things.
+  if (typeof this.afterQueueFlush === 'function') {
+    this.afterQueueFlush(this.changeQueue);
+  }
+  this.changeQueue = [];
+};
+
+
+// Process a changeItem with {status: 'added', ...}
+FastForEach.prototype.added = function (changeItem) {
+  var index = changeItem.index;
+  var valuesToAdd = changeItem.isBatch ? changeItem.values : [changeItem.value];
+  var referenceElement = this.lastNodesList[index - 1] || null;
+  // gather all childnodes for a possible batch insertion
+  var allChildNodes = [];
+
+  for (var i = 0, len = valuesToAdd.length; i < len; ++i) {
+    var templateClone = this.templateNode.cloneNode(true);
+    var childContext;
+
+    if (this.noContext) {
+      childContext = this.$context.extend({
+        '$item': valuesToAdd[i]
+      });
+    } else {
+      childContext = this.$context.createChildContext(valuesToAdd[i], this.as || null);
+    }
+
+    // apply bindings first, and then process child nodes, because bindings can add childnodes
+    ko.applyBindingsToDescendants(childContext, templateClone);
+
+    var childNodes = ko.virtualElements.childNodes(templateClone);
+    // Note discussion at https://github.com/angular/angular.js/issues/7851
+    allChildNodes.push.apply(allChildNodes, Array.prototype.slice.call(childNodes));
+    this.lastNodesList.splice(index + i, 0, childNodes[childNodes.length - 1]);
+  }
+
+  insertAllAfter(this.element, allChildNodes, referenceElement);
+};
+
+
+// Process a changeItem with {status: 'deleted', ...}
+FastForEach.prototype.deleted = function (changeItem) {
+  var index = changeItem.index;
+  var ptr = this.lastNodesList[index],
+      // We use this.element because that will be the last previous node
+      // for virtual element lists.
+      lastNode = this.lastNodesList[index - 1] || this.element;
+  do {
+    ptr = ptr.previousSibling;
+    ko.removeNode((ptr && ptr.nextSibling) || ko.virtualElements.firstChild(this.element));
+  } while (ptr && ptr !== lastNode);
+  // The "last node" in the DOM from which we begin our delets of the next adjacent node is
+  // now the sibling that preceded the first node of this item.
+  this.lastNodesList[index] = this.lastNodesList[index - 1];
+  this.indexesToDelete.push(index);
+};
+
+
+// We batch our deletion of item indexes in our parallel array.
+// See brianmhunt/knockout-fast-foreach#6/#8
+FastForEach.prototype.clearDeletedIndexes = function () {
+  // We iterate in reverse on the presumption (following the unit tests) that KO's diff engine
+  // processes diffs (esp. deletes) monotonically ascending i.e. from index 0 -> N.
+  for (var i = this.indexesToDelete.length - 1; i >= 0; --i) {
+    this.lastNodesList.splice(this.indexesToDelete[i], 1);
+  }
+  this.indexesToDelete = [];
+};
+
+
+ko.bindingHandlers.fastForEach = {
+  // Valid valueAccessors:
+  //    []
+  //    ko.observable([])
+  //    ko.observableArray([])
+  //    ko.computed
+  //    {data: array, name: string, as: string}
+  init: function init(element, valueAccessor, bindings, vm, context) {
+    var value = valueAccessor(),
+        ffe;
+    if (isPlainObject(value)) {
+      value.element = value.element || element;
+      value.$context = context;
+      ffe = new FastForEach(value);
+    } else {
+      ffe = new FastForEach({
+        element: element,
+        data: ko.unwrap(context.$rawData) === value ? context.$rawData : value,
+        $context: context
+      });
+    }
+    ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
+      ffe.dispose();
+    });
+    return {controlsDescendantBindings: true};
+  },
+
+  // Export for testing, debugging, and overloading.
+  FastForEach: FastForEach
+};
+
+ko.virtualElements.allowedBindings.fastForEach = true;
+}));
\ No newline at end of file
diff --git a/lib/web/knockoutjs/knockout-repeat.js b/lib/web/knockoutjs/knockout-repeat.js
new file mode 100644
index 0000000000000000000000000000000000000000..3bebceb9252be4f03dfcf7b73b408fc359e1a1a3
--- /dev/null
+++ b/lib/web/knockoutjs/knockout-repeat.js
@@ -0,0 +1,216 @@
+// REPEAT binding for Knockout http://knockoutjs.com/
+// (c) Michael Best
+// License: MIT (http://www.opensource.org/licenses/mit-license.php)
+// Version 2.1.0
+
+(function(factory) {
+    if (typeof define === 'function' && define.amd) {
+        // [1] AMD anonymous module
+        define(['knockout'], factory);
+    } else if (typeof exports === 'object') {
+        // [2] commonJS
+        factory(require('knockout'));
+    } else {
+        // [3] No module loader (plain <script> tag) - put directly in global namespace
+        factory(window.ko);
+    }
+})(function(ko) {
+
+if (!ko.virtualElements)
+    throw Error('Repeat requires at least Knockout 2.1');
+
+var ko_bindingFlags = ko.bindingFlags || {};
+var ko_unwrap = ko.utils.unwrapObservable;
+
+var koProtoName = '__ko_proto__';
+
+if (ko.version >= "3.0.0") {
+    // In Knockout 3.0.0, use the node preprocessor to replace a node with a repeat binding with a virtual element
+    var provider = ko.bindingProvider.instance, previousPreprocessFn = provider.preprocessNode;
+    provider.preprocessNode = function(node) {
+        var newNodes, nodeBinding;
+        if (!previousPreprocessFn || !(newNodes = previousPreprocessFn.call(this, node))) {
+            if (node.nodeType === 1 && (nodeBinding = node.getAttribute('data-bind'))) {
+                if (/^\s*repeat\s*:/.test(nodeBinding)) {
+                    var leadingComment = node.ownerDocument.createComment('ko ' + nodeBinding),
+                        trailingComment = node.ownerDocument.createComment('/ko');
+                    node.parentNode.insertBefore(leadingComment, node);
+                    node.parentNode.insertBefore(trailingComment, node.nextSibling);
+                    node.removeAttribute('data-bind');
+                    newNodes = [leadingComment, node, trailingComment];
+                }
+            }
+        }
+        return newNodes;
+    };
+}
+
+ko.virtualElements.allowedBindings.repeat = true;
+ko.bindingHandlers.repeat = {
+    flags: ko_bindingFlags.contentBind | ko_bindingFlags.canUseVirtual,
+    init: function(element, valueAccessor, allBindingsAccessor, xxx, bindingContext) {
+
+        // Read and set fixed options--these options cannot be changed
+        var repeatParam = ko_unwrap(valueAccessor());
+        if (repeatParam && typeof repeatParam == 'object' && !('length' in repeatParam)) {
+            var repeatIndex = repeatParam.index,
+                repeatData = repeatParam.item,
+                repeatStep = repeatParam.step,
+                repeatReversed = repeatParam.reverse,
+                repeatBind = repeatParam.bind,
+                repeatInit = repeatParam.init,
+                repeatUpdate = repeatParam.update;
+        }
+        // Set default values for options that need it
+        repeatIndex = repeatIndex || '$index';
+        repeatData = repeatData || ko.bindingHandlers.repeat.itemName || '$item';
+        repeatStep = repeatStep || 1;
+        repeatReversed = repeatReversed || false;
+
+        var parent = element.parentNode, placeholder;
+        if (element.nodeType == 8) {    // virtual element
+            // Extract the "children" and find the single element node
+            var childNodes = ko.utils.arrayFilter(ko.virtualElements.childNodes(element), function(node) { return node.nodeType == 1;});
+            if (childNodes.length !== 1) {
+                throw Error("Repeat binding requires a single element to repeat");
+            }
+            ko.virtualElements.emptyNode(element);
+
+            // The placeholder is the closing comment normally, or the opening comment if reversed
+            placeholder = repeatReversed ? element : element.nextSibling;
+            // The element to repeat is the contained element
+            element = childNodes[0];
+        } else {    // regular element
+            // First clean the element node and remove node's binding
+            var origBindString = element.getAttribute('data-bind');
+            ko.cleanNode(element);
+            element.removeAttribute('data-bind');
+
+            // Original element is no longer needed: delete it and create a placeholder comment
+            placeholder = element.ownerDocument.createComment('ko_repeatplaceholder ' + origBindString);
+            parent.replaceChild(placeholder, element);
+        }
+
+        // extract and remove a data-repeat-bind attribute, if present
+        if (!repeatBind) {
+            repeatBind = element.getAttribute('data-repeat-bind');
+            if (repeatBind) {
+                element.removeAttribute('data-repeat-bind');
+            }
+        }
+
+        // Make a copy of the element node to be copied for each repetition
+        var cleanNode = element.cloneNode(true);
+        if (typeof repeatBind == "string") {
+            cleanNode.setAttribute('data-bind', repeatBind);
+            repeatBind = null;
+        }
+
+        // Set up persistent data
+        var lastRepeatCount = 0,
+            notificationObservable = ko.observable(),
+            repeatArray, arrayObservable;
+
+        if (repeatInit) {
+            repeatInit(parent);
+        }
+
+        var subscribable = ko.computed(function() {
+            function makeArrayItemAccessor(index) {
+                var f = function(newValue) {
+                    var item = repeatArray[index];
+                    // Reading the value of the item
+                    if (!arguments.length) {
+                        notificationObservable();   // for dependency tracking
+                        return ko_unwrap(item);
+                    }
+                    // Writing a value to the item
+                    if (ko.isObservable(item)) {
+                        item(newValue);
+                    } else if (arrayObservable && arrayObservable.splice) {
+                        arrayObservable.splice(index, 1, newValue);
+                    } else {
+                        repeatArray[index] = newValue;
+                    }
+                    return this;
+                };
+                // Pretend that our accessor function is an observable
+                f[koProtoName] = ko.observable;
+                return f;
+            }
+
+            function makeBinding(item, index, context) {
+                return repeatArray
+                    ? function() { return repeatBind.call(bindingContext.$data, item, index, context); }
+                    : function() { return repeatBind.call(bindingContext.$data, index, context); }
+            }
+
+            // Read and set up variable options--these options can change and will update the binding
+            var paramObservable = valueAccessor(), repeatParam = ko_unwrap(paramObservable), repeatCount = 0;
+            if (repeatParam && typeof repeatParam == 'object') {
+                if ('length' in repeatParam) {
+                    repeatArray = repeatParam;
+                    repeatCount = repeatArray.length;
+                } else {
+                    if ('foreach' in repeatParam) {
+                        repeatArray = ko_unwrap(paramObservable = repeatParam.foreach);
+                        if (repeatArray && typeof repeatArray == 'object' && 'length' in repeatArray) {
+                            repeatCount = repeatArray.length || 0;
+                        } else {
+                            repeatCount = repeatArray || 0;
+                            repeatArray = null;
+                        }
+                    }
+                    // If a count value is provided (>0), always output that number of items
+                    if ('count' in repeatParam)
+                        repeatCount = ko_unwrap(repeatParam.count) || repeatCount;
+                    // If a limit is provided, don't output more than the limit
+                    if ('limit' in repeatParam)
+                        repeatCount = Math.min(repeatCount, ko_unwrap(repeatParam.limit)) || repeatCount;
+                }
+                arrayObservable = repeatArray && ko.isObservable(paramObservable) ? paramObservable : null;
+            } else {
+                repeatCount = repeatParam || 0;
+            }
+
+            // Remove nodes from end if array is shorter
+            for (; lastRepeatCount > repeatCount; lastRepeatCount-=repeatStep) {
+                ko.removeNode(repeatReversed ? placeholder.nextSibling : placeholder.previousSibling);
+            }
+
+            // Notify existing nodes of change
+            notificationObservable.notifySubscribers();
+
+            // Add nodes to end if array is longer (also initially populates nodes)
+            for (; lastRepeatCount < repeatCount; lastRepeatCount+=repeatStep) {
+                // Clone node and add to document
+                var newNode = cleanNode.cloneNode(true);
+                parent.insertBefore(newNode, repeatReversed ? placeholder.nextSibling : placeholder);
+                newNode.setAttribute('data-repeat-index', lastRepeatCount);
+
+                // Apply bindings to inserted node
+                if (repeatArray && repeatData == '$data') {
+                    var newContext = bindingContext.createChildContext(makeArrayItemAccessor(lastRepeatCount));
+                } else {
+                    var newContext = bindingContext.extend();
+                    if (repeatArray)
+                        newContext[repeatData] = makeArrayItemAccessor(lastRepeatCount);
+                }
+                newContext[repeatIndex] = lastRepeatCount;
+                if (repeatBind) {
+                    var result = ko.applyBindingsToNode(newNode, makeBinding(newContext[repeatData], lastRepeatCount, newContext), newContext, true),
+                        shouldBindDescendants = result && result.shouldBindDescendants;
+                }
+                if (!repeatBind || (result && shouldBindDescendants !== false)) {
+                    ko.applyBindings(newContext, newNode);
+                }
+            }
+            if (repeatUpdate) {
+                repeatUpdate(parent);
+            }
+        }, null, {disposeWhenNodeIsRemoved: placeholder});
+
+        return { controlsDescendantBindings: true, subscribable: subscribable };
+    }
+};
+});
\ No newline at end of file
diff --git a/lib/web/ko/ko.js b/lib/web/knockoutjs/knockout.js
similarity index 100%
rename from lib/web/ko/ko.js
rename to lib/web/knockoutjs/knockout.js
diff --git a/lib/web/mage/adminhtml/backup.js b/lib/web/mage/adminhtml/backup.js
index f8dde89519d821795d3c530420f833a066c27faf..fece6796d291d96e5a4b2aa0247effbb1d117ee5 100644
--- a/lib/web/mage/adminhtml/backup.js
+++ b/lib/web/mage/adminhtml/backup.js
@@ -4,6 +4,7 @@
  */
 define([
     "jquery",
+    "Magento_Ui/js/modal/modal",
     "mage/mage",
     "prototype"
 ], function(jQuery){
@@ -97,7 +98,6 @@ define([
         },
 
         submitBackup: function () {
-            this.hidePopups();
             var data = {
                 'type': this.type,
                 'maintenance_mode': $('backup_maintenance_mode').checked ? 1 : 0,
@@ -105,6 +105,8 @@ define([
                 'exclude_media': $('exclude_media').checked ? 1 : 0
             };
 
+            this.modal.modal('closeModal');
+
             new Ajax.Request(this.backupUrl, {
                 onSuccess: function(transport) {
                     this.processResponse(transport, 'backup-options');
@@ -160,17 +162,78 @@ define([
             data['type'] = this.type;
             return data;
         },
-
+        backupConfig: {
+            'backup-warning': {
+                title: jQuery.mage.__('Backup options'),
+                content: function () {
+                    return jQuery('#backup-options .popup-content').html();
+                },
+                actionOk: function () {
+                    this.modal.find('#backup-form').validation({
+                        submitHandler: jQuery.proxy(this.submitBackup, this)
+                    });
+                    this.modal.find('#backup-form').submit();
+                },
+                opened: function () {
+                    this.modal.find(':hidden').show();
+                }
+            },
+            'rollback-warning': {
+                title: jQuery.mage.__('Warning'),
+                content: function () {
+                    return jQuery('#rollback-warning .message.message-warning').html();
+                },
+                actionOk: function () {
+                    this.modal.modal('closeModal');
+                    this.requestPassword();
+                }
+            },
+            'rollback-request-password': {
+                title: jQuery.mage.__('Backup options'),
+                content: function () {
+                    return jQuery('#rollback-request-password .popup-content').html();
+                },
+                actionOk: function () {
+                    this.modal.find('#rollback-request-password').validation({
+                        submitHandler: jQuery.proxy(this.submitRollback, this)
+                    });
+                    this.modal.find('#rollback-request-password').submit();
+                },
+                opened: function () {
+                    this.modal.find('*:hidden').show();
+                }
+            }
+        },
         showPopup: function(divId) {
-            $(divId).show().setStyle({
-                'marginTop': -$(divId).getDimensions().height / 2 + 'px'
+            var self = this;
+
+            this.modal = jQuery('<div/>').html(this.backupConfig[divId].content()).modal({
+                modalClass: 'magento',
+                title: this.backupConfig[divId].title,
+                type: 'slide',
+                closed: function(e, modal){
+                    modal.modal.remove();
+                },
+                opened: function () {
+                    if (self.backupConfig[divId].opened) {
+                        self.backupConfig[divId].opened.call(self);
+                    }
+                },
+                buttons: [{
+                    text: jQuery.mage.__('Cancel'),
+                    'class': 'action cancel',
+                    click: function () {
+                        this.closeModal();
+                    }
+                }, {
+                    text: jQuery.mage.__('Ok'),
+                    'class': 'action primary',
+                    click: function () {
+                        self.backupConfig[divId].actionOk.call(self);
+                    }
+                }]
             });
-            var mask = $('popup-window-mask');
-            if (mask) {
-                $('popup-window-mask').setStyle({
-                    height: $('html-body').getHeight() + 'px'
-                }).show();
-            }
+            this.modal.modal('openModal');
         },
 
         hidePopups: function() {
diff --git a/lib/web/mage/adminhtml/browser.js b/lib/web/mage/adminhtml/browser.js
index 2abf3a9b02237b65205001dc9feecaee13fa3e7e..51629ce2e7cfc6f258e5740bcfc197d9bb7773a0 100644
--- a/lib/web/mage/adminhtml/browser.js
+++ b/lib/web/mage/adminhtml/browser.js
@@ -6,10 +6,14 @@
 define([
     "jquery",
     "tinymce",
+    "Magento_Ui/js/modal/prompt",
+    "Magento_Ui/js/modal/confirm",
+    "Magento_Ui/js/modal/alert",
+    "Magento_Ui/js/modal/modal",
     "jquery/ui",
     "jquery/jstree/jquery.jstree",
     "mage/mage"
-], function($, tinyMCE){
+], function($, tinyMCEm, prompt, confirm, alert){
     
     MediabrowserUtility = {
         windowId: 'modal_dialog_message',
@@ -27,44 +31,32 @@ define([
         },
         openDialog: function(url, width, height, title, options) {
             var windowId = this.windowId,
-                content = '<div class="popup-window magento_message" id="' + windowId + '"></div>';
-            $(content).dialog($.extend({
-                autoOpen: true,
-                title: title || 'Insert File...',
-                modal: true,
-                resizable: false,
-                width: width || 1000,
-                height: height || 600,
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function() {
-                    $(this).closest('.ui-dialog').addClass('ui-dialog-active');
+                content = '<div class="popup-window magento_message" "id="' + windowId + '"></div>',
+                self = this;
 
-                    var topMargin = $(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 35;
-                    $(this).closest('.ui-dialog').css('margin-top', topMargin);
+            if (this.modal) {
+                this.modal.html($(content).html());
+            } else {
+                this.modal = $(content).modal({
+                    title:  title || 'Insert File...',
+                    modalClass: 'magento',
+                    type: 'slide',
+                    buttons: []
+                });
+            }
+            this.modal.modal('openModal');
+            $.ajax({
+                url: url,
+                type: 'get',
+                context: $(this),
+                showLoader: true
 
-                    $.ajax({
-                        url: url,
-                        type: 'get',
-                        context: $(this),
-                        showLoader: true
-                    }).done(function(data) {
-                        this.html(data).trigger('contentUpdated');
-                    });
-                },
-                close: function(event, ui) {
-                    $(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                    $(this).dialog('destroy');
-                    $('#' + windowId).remove();
-                }
-            }, options));
+            }).done(function(data) {
+                self.modal.html(data).trigger('contentUpdated');
+            });
         },
-        closeDialog: function(win) {
-            win = win || window;
-            win.jQuery('#' + this.windowId).dialog('close');
+        closeDialog: function() {
+            this.modal.modal('closeModal');
         }
     };
 
@@ -256,71 +248,95 @@ define([
         },
 
         newFolder: function() {
-            var folderName = prompt(this.options.newFolderPrompt, '');
-            if (!folderName) {
-                return false;
-            }
-            return $.ajax({
-                url: this.options.newFolderUrl,
-                dataType: 'json',
-                data: {
-                    name: folderName,
-                    node: this.activeNode.id,
-                    store: this.options.storeId,
-                    form_key: FORM_KEY
-                },
-                context: this.element,
-                showLoader: true
-            }).done($.proxy(function(data) {
-                if (data.error) {
-                    window.alert(data.message);
-                } else {
-                    this.tree.jstree('refresh',  this.element.find('[data-id="' + this.activeNode.id + '"]'));
+            var self = this;
+
+            prompt({
+                title: this.options.newFolderPrompt,
+                actions: {
+                    confirm: function (folderName) {
+                        return $.ajax({
+                            url: self.options.newFolderUrl,
+                            dataType: 'json',
+                            data: {
+                                name: folderName,
+                                node: self.activeNode.id,
+                                store: self.options.storeId,
+                                form_key: FORM_KEY
+                            },
+                            context: self.element,
+                            showLoader: true
+                        }).done($.proxy(function(data) {
+                            if (data.error) {
+                                alert({
+                                    content: data.message
+                                });
+                            } else {
+                                self.tree.jstree('refresh',  self.element.find('[data-id="' + self.activeNode.id + '"]'));
+                            }
+                        }, this));
+                    }
                 }
-            }, this));
+            });
         },
 
         deleteFolder: function() {
-            if (!confirm(this.options.deleteFolderConfirmationMessage)) {
-                return false;
-            }
+            var self = this;
 
-            return $.ajax({
-                url: this.options.deleteFolderUrl,
-                dataType: 'json',
-                data: {
-                    node: this.activeNode.id,
-                    store: this.options.storeId,
-                    form_key: FORM_KEY
-                },
-                context: this.element,
-                showLoader: true
-            }).done($.proxy(function(data) {
-                this.tree.jstree('refresh', this.activeNode.id);
-            }, this));
+            confirm({
+                content: this.options.deleteFolderConfirmationMessage,
+                actions: {
+                    confirm: function () {
+                        return $.ajax({
+                            url: self.options.deleteFolderUrl,
+                            dataType: 'json',
+                            data: {
+                                node: self.activeNode.id,
+                                store: self.options.storeId,
+                                form_key: FORM_KEY
+                            },
+                            context: self.element,
+                            showLoader: true
+                        }).done($.proxy(function(data) {
+                            self.tree.jstree('refresh', self.activeNode.id);
+                        }, this));
+                    },
+                    cancel: function () {
+                        return false;
+                    }
+                }
+            });
         },
 
         deleteFiles: function() {
-            if (!confirm(this.options.deleteFileConfirmationMessage)) {
-                return false;
-            }
-            var selectedFiles = this.element.find('[data-row=file].selected');
-            var ids = selectedFiles.map(function(index, file) {
-                return $(this).attr('id');
-            }).toArray();
+            var self = this;
 
-            return $.ajax({
-                url: this.options.deleteFilesUrl,
-                data: {
-                    files: ids,
-                    store: this.options.storeId,
-                    form_key: FORM_KEY
-                },
-                context: this.element,
-                showLoader: true
-            }).done($.proxy(function(data) {
-                this.reload();
-            }, this));
+            confirm({
+                content: this.options.deleteFileConfirmationMessage,
+                actions: {
+                    confirm: function () {
+                        var selectedFiles = self.element.find('[data-row=file].selected');
+                        var ids = selectedFiles.map(function(index, file) {
+                            return $(this).attr('id');
+                        }).toArray();
+
+                        return $.ajax({
+                            url: self.options.deleteFilesUrl,
+                            data: {
+                                files: ids,
+                                store: self.options.storeId,
+                                form_key: FORM_KEY
+                            },
+                            context: self.element,
+                            showLoader: true
+                        }).done($.proxy(function(data) {
+                            self.reload();
+                        }, this));
+                    },
+                    cancel: function () {
+                        return false;
+                    }
+                }
+            });
         },
 
         drawBreadcrumbs: function(data) {
diff --git a/lib/web/mage/adminhtml/events.js b/lib/web/mage/adminhtml/events.js
index c342714812d55b49676de1ce46845c84b81fe3ff..d64f09f2e97f3433c4e5b234ef6c5112c7a65b57 100644
--- a/lib/web/mage/adminhtml/events.js
+++ b/lib/web/mage/adminhtml/events.js
@@ -3,8 +3,9 @@
  * See COPYING.txt for license details.
  */
 define([
+    'Magento_Ui/js/modal/alert',
     'prototype'
-], function(){
+], function(alert){
 
     // from http://www.someelement.com/2007/03/eventpublisher-custom-events-la-pubsub.html
     varienEvents = Class.create();
@@ -105,10 +106,14 @@ define([
                     }
                     catch (e) {
                         if (this.id){
-                            alert("error: error in " + this.id + ".fireEvent():\n\nevent name: " + eventName + "\n\nerror message: " + e.message);
+                            alert({
+                                content: "error: error in " + this.id + ".fireEvent():\n\nevent name: " + eventName + "\n\nerror message: " + e.message
+                            });
                         }
                         else {
-                            alert("error: error in [unknown object].fireEvent():\n\nevent name: " + eventName + "\n\nerror message: " + e.message);
+                            alert({
+                                content: "error: error in [unknown object].fireEvent():\n\nevent name: " + eventName + "\n\nerror message: " + e.message
+                            });
                         }
                     }
                 }
diff --git a/lib/web/mage/adminhtml/globals.js b/lib/web/mage/adminhtml/globals.js
index de0e06295e05ba3e8f2f4ae7710f9e84067ba95c..1933b73e0c7c44ea74a80c49a4becf0a2b0a2340 100644
--- a/lib/web/mage/adminhtml/globals.js
+++ b/lib/web/mage/adminhtml/globals.js
@@ -2,7 +2,9 @@
  * Copyright © 2015 Magento. All rights reserved.
  * See COPYING.txt for license details.
  */
-define([], function () {
+define([
+    'Magento_Ui/js/modal/confirm'
+], function (confirm) {
     'use strict';
 
     /**
@@ -20,10 +22,23 @@ define([], function () {
      * @returns {boolean}
      */
     window.deleteConfirm = function (message, url) {
-        if (confirm(message)) {
-            setLocation(url);
-        }
+        confirm({
+            content: message,
+            actions: {
+                confirm: function () {
+                    setLocation(url);
+                }
+            }
+        });
 
         return false;
     };
+
+    /**
+     * Helper for onclick action.
+     * @param {String} message
+     * @param {String} url
+     * @returns {boolean}
+     */
+    window.confirmSetLocation = window.deleteConfirm;
 });
diff --git a/lib/web/mage/adminhtml/grid.js b/lib/web/mage/adminhtml/grid.js
index 684f8358df001c09c64c67d5b6565d3d580f7de7..44d61e001aa0a5a2f890ff255602f14771586e55 100644
--- a/lib/web/mage/adminhtml/grid.js
+++ b/lib/web/mage/adminhtml/grid.js
@@ -7,11 +7,13 @@
 define([
     'jquery',
     'mage/template',
+    'Magento_Ui/js/modal/alert',
+    'Magento_Ui/js/modal/confirm',
     'mage/mage',
     'prototype',
     'mage/adminhtml/form',
     'mage/adminhtml/events'
-], function (jQuery, mageTemplate) {
+], function (jQuery, mageTemplate, alert, confirm) {
 
 window.varienGrid = new Class.create();
 
@@ -158,7 +160,9 @@ varienGrid.prototype = {
             if (transport.responseText.isJSON()) {
                 var response = transport.responseText.evalJSON()
                 if (response.error) {
-                    alert(response.message);
+                    alert({
+                        content: response.message
+                    });
                 }
                 if (response.ajaxExpired && response.ajaxRedirect) {
                     setLocation(response.ajaxRedirect);
@@ -641,10 +645,15 @@ varienGridMassaction.prototype = {
         }
     },
     apply: function() {
+        var self = this;
+
         if(varienStringArray.count(this.checkedString) == 0) {
-                alert(this.errorText);
-                return;
-            }
+            alert({
+                content: this.errorText
+            });
+
+            return;
+        }
 
         var item = this.getSelectedItem();
         if(!item) {
@@ -653,12 +662,19 @@ varienGridMassaction.prototype = {
         }
         this.currentItem = item;
         var fieldName = (item.field ? item.field : this.formFieldName);
-        var fieldsHtml = '';
 
-        if(this.currentItem.confirm && !window.confirm(this.currentItem.confirm)) {
-            return;
+        if (this.currentItem.confirm) {
+            confirm({
+                content: this.currentItem.confirm,
+                actions: {
+                    confirm: this.onConfirm.bind(this, fieldName, item)
+                }
+            });
+        } else {
+            this.onConfirm(fieldName, item);
         }
-
+    },
+    onConfirm: function(fieldName, item) {
         this.formHiddens.update('');
         new Insertion.Bottom(this.formHiddens, this.fieldTemplate({
             name: fieldName,
@@ -669,17 +685,17 @@ varienGridMassaction.prototype = {
             value: fieldName
         }));
 
-        if(!jQuery(this.form).valid()) {
+        if (!jQuery(this.form).valid()) {
             return;
         }
 
-        if(this.useAjax && item.url) {
+        if (this.useAjax && item.url) {
             new Ajax.Request(item.url, {
                 'method': 'post',
                 'parameters': this.form.serialize(true),
                 'onComplete': this.onMassactionComplete.bind(this)
             });
-        } else if(item.url) {
+        } else if (item.url) {
             this.form.action = item.url;
             this.form.submit();
         }
diff --git a/lib/web/mage/adminhtml/wysiwyg/tiny_mce/plugins/magentowidget/editor_plugin.js b/lib/web/mage/adminhtml/wysiwyg/tiny_mce/plugins/magentowidget/editor_plugin.js
index 930dc43f88a026fa48c7d6eeff0f76610c378b21..d4d7f460f309a519776d7ead875484bfba5f3bdf 100644
--- a/lib/web/mage/adminhtml/wysiwyg/tiny_mce/plugins/magentowidget/editor_plugin.js
+++ b/lib/web/mage/adminhtml/wysiwyg/tiny_mce/plugins/magentowidget/editor_plugin.js
@@ -5,7 +5,7 @@
 tinyMCE.addI18n({en:{
     magentowidget:
     {
-        insert_widget : "Insert Frontend App"
+        insert_widget : "Insert Widget"
     }
 }});
 
diff --git a/lib/web/mage/adminhtml/wysiwyg/widget.js b/lib/web/mage/adminhtml/wysiwyg/widget.js
index 363da71f2d938a68cd3e2a3ae0181b712e9bc4ad..202124d9a29a8928f237a016ccf64a0e5ed8ad0c 100644
--- a/lib/web/mage/adminhtml/wysiwyg/widget.js
+++ b/lib/web/mage/adminhtml/wysiwyg/widget.js
@@ -6,13 +6,15 @@
 define([
     "jquery",
     "tinymce",
+    'Magento_Ui/js/modal/alert',
     "jquery/ui",
     "mage/translate",
     "mage/mage",
     "mage/validation",
     "mage/adminhtml/events",
-    "prototype"
-], function(jQuery, tinyMCE){
+    "prototype",
+    'Magento_Ui/js/modal/modal'
+], function(jQuery, tinyMCE, alert){
 
     var widgetTools = {
         getDivHtml: function(id, html) {
@@ -51,39 +53,24 @@ define([
                 return
             }
             var oThis = this;
-            this.dialogWindow = jQuery('<div/>').dialog({
-                autoOpen:   false,
-                title:      jQuery.mage.__('Insert Frontend App...'),
-                modal:      true,
-                resizable:  false,
-                width:      '75%',
-                dialogClass: 'popup-window',
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function () {
+            this.dialogWindow = jQuery('<div/>').modal({
+                title: jQuery.mage.__('Insert Widget...'),
+                type: 'slide',
+                buttons: [],
+                opened: function () {
                     var dialog = jQuery(this).addClass('loading magento_message')
                     new Ajax.Updater($(this), widgetUrl, {evalScripts: true, onComplete: function () {
                             dialog.removeClass('loading');
                         }
                     });
-                    jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active');
-
-                    var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() + 35;
-                    jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
-
-                    jQuery(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
                 },
-                close: function(event, ui) {
-                    jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                    jQuery(this).dialog('destroy').remove();
+                closed: function (e, modal) {
+                    modal.modal.remove();
                     oThis.dialogOpened = false;
                 }
             });
             this.dialogOpened = true;
-            this.dialogWindow.dialog('open');
+            this.dialogWindow.modal('openModal');
         }
     };
 
@@ -208,7 +195,9 @@ define([
                                 this.switchOptionsContainer(optionsContainerId);
                             }
                         } catch(e) {
-                            alert(e.message);
+                            alert({
+                                content: e.message
+                            });
                         }
                     }.bind(this)
                 }
@@ -257,7 +246,7 @@ define([
                         onComplete: function(transport) {
                             try {
                                 widgetTools.onAjaxSuccess(transport);
-                                widgetTools.dialogWindow.dialog('close');
+                                widgetTools.dialogWindow.modal('closeModal');
 
                                 if (typeof(tinyMCE) != "undefined" && tinyMCE.activeEditor) {
                                     tinyMCE.activeEditor.focus();
@@ -268,7 +257,9 @@ define([
 
                                 this.updateContent(transport.responseText);
                             } catch(e) {
-                                alert(e.message);
+                                alert({
+                                    content: e.message
+                                });
                             }
                         }.bind(this)
                     });
@@ -369,52 +360,34 @@ define([
                             this.dialogContent = widgetTools.getDivHtml(responseContainerId, transport.responseText);
                             this.openDialogWindow(this.dialogContent);
                         } catch(e) {
-                            alert(e.message);
+                            alert({
+                                content: e.message
+                            });
                         }
                     }.bind(this)
                 }
             );
         },
 
-        openDialogWindow: function(content) {
-            this.dialogWindow = jQuery('<div/>').dialog({
-                autoOpen:   false,
-                title:      this.config.buttons.open,
-                modal:      true,
-                resizable:  false,
-                width:      '75%',
-                dialogClass: 'popup-window',
-                position: {
-                    my: 'left top',
-                    at: 'center top',
-                    of: 'body'
-                },
-                open: function () {
-                    jQuery(this).closest('.ui-dialog').addClass('ui-dialog-active');
+        openDialogWindow: function (content) {
+            this.dialogWindow = jQuery('<div/>').modal({
+                title: this.config.buttons.open,
+                type: 'slide',
+                buttons: [],
+                opened: function () {
                     jQuery(this).addClass('magento_message');
-
-                    var topMargin = jQuery(this).closest('.ui-dialog').children('.ui-dialog-titlebar').outerHeight() - 30;
-                    jQuery(this).closest('.ui-dialog').css('margin-top', topMargin);
-
-                    jQuery(this).addClass('admin__scope-old'); // ToDo UI: remove with old styles removal
                 },
-                close: function(event, ui) {
-                    jQuery(this).closest('.ui-dialog').removeClass('ui-dialog-active');
-                    jQuery(this).dialog('destroy').remove();
+                closed: function (e, modal) {
+                    modal.modal.remove();
+                    this.dialogWindow = null;
                 }
             });
 
-            this.dialogWindow.dialog('open').append(content);
+            this.dialogWindow.modal('openModal').append(content);
         },
 
-        closeDialogWindow: function(dialogWindow) {
-            if (!dialogWindow) {
-                dialogWindow = this.dialogWindow;
-            }
-            if (dialogWindow) {
-                this.dialogWindow.dialog('destroy').remove();
-            }
-            this.dialogWindow = null;
+        closeDialogWindow: function () {
+            this.dialogWindow.modal('closeModal').remove();
         },
 
         getElementValue: function(value) {
diff --git a/lib/web/mage/backend/editablemultiselect.js b/lib/web/mage/backend/editablemultiselect.js
index 6ae8d935ddebc29cc2566c1f40a109eabe997856..ab4679bbe165225c7b7f18b67c25f452812de9ce 100644
--- a/lib/web/mage/backend/editablemultiselect.js
+++ b/lib/web/mage/backend/editablemultiselect.js
@@ -4,9 +4,11 @@
  */
 define([
     "jquery",
+    'Magento_Ui/js/modal/alert',
+    'Magento_Ui/js/modal/confirm',
     "jquery/editableMultiselect/js/jquery.editable",
     "jquery/editableMultiselect/js/jquery.multiselect"
-], function($){
+], function($, alert, confirm){
 
 
     /**
@@ -162,7 +164,9 @@ define([
                             $(this).html(result[entityValueName].escapeHTML());
                         }
                     } else {
-                        alert(result.error_message);
+                        alert({
+                            content: result.error_message
+                        });
                     }
                 }
             });
@@ -223,7 +227,9 @@ define([
                             options.mselectInputClass + '';
                         sectionBlock.find(inputSelector).trigger('blur');
                     } else {
-                        alert(result.error_message);
+                        alert({
+                            content: result.error_message
+                        });
                     }
                 }
             };
@@ -236,33 +242,43 @@ define([
          * @param options
          */
         EditableMultiselect.prototype.deleteEntity = function(options) {
-            if (!confirm(this.deleteConfirmMessage) || !options.delete_button) {
-                return;
-            }
-            // Button that has been clicked
-            var deleteButton = $(options.delete_button),
-                index = deleteButton.parent().index(),
-                select = deleteButton.closest('.mselect-list').prev(),
-                entityId = select.find('option').eq(index).val(),
-                entityInfo = {};
-            entityInfo[this.entityIdName] = entityId;
-            var postData = $.extend(entityInfo, this.submitData);
+            var self = this;
 
-            var ajaxOptions = {
-                type: 'POST',
-                data: postData,
-                dataType: 'json',
-                url: this.deleteUrl,
-                success: function(result, status) {
-                    if (result.success) {
-                        deleteButton.parent().remove();
-                        select.find('option').eq(index).remove();
-                    } else {
-                        alert(result.error_message);
+            if (options.delete_button) {
+                confirm({
+                    content: this.deleteConfirmMessage,
+                    actions: {
+                        confirm: function() {
+                            // Button that has been clicked
+                            var deleteButton = $(options.delete_button),
+                                index = deleteButton.parent().index(),
+                                select = deleteButton.closest('.mselect-list').prev(),
+                                entityId = select.find('option').eq(index).val(),
+                                entityInfo = {};
+                            entityInfo[self.entityIdName] = entityId;
+                            var postData = $.extend(entityInfo, self.submitData);
+
+                            var ajaxOptions = {
+                                type: 'POST',
+                                data: postData,
+                                dataType: 'json',
+                                url: self.deleteUrl,
+                                success: function(result, status) {
+                                    if (result.success) {
+                                        deleteButton.parent().remove();
+                                        select.find('option').eq(index).remove();
+                                    } else {
+                                        alert({
+                                            content: result.error_message
+                                        });
+                                    }
+                                }
+                            };
+                            $.ajax(ajaxOptions);
+                        }
                     }
-                }
-            };
-            $.ajax(ajaxOptions);
+                });
+            }
         };
     };
 });
\ No newline at end of file
diff --git a/lib/web/mage/backend/suggest.js b/lib/web/mage/backend/suggest.js
index f4efd12693997985cdc08232778491db37a74848..cc9184d33dd62a81c0a31f0071eae3fbb9966521 100644
--- a/lib/web/mage/backend/suggest.js
+++ b/lib/web/mage/backend/suggest.js
@@ -235,6 +235,9 @@
                             }
                             break;
                         case keyCode.ESCAPE:
+                            if (this.isDropdownShown()) {
+                                event.stopPropagation();
+                            }
                             this.close(event);
                             this._blurItem();
                             break;
@@ -445,6 +448,7 @@
          */
         open: function (e) {
             if (!this.isDropdownShown()) {
+                this.element.addClass('_suggest-dropdown-open');
                 this.dropdown.show();
                 this._trigger('open', e);
             }
@@ -459,6 +463,7 @@
             this._renderedContext = null;
 
             if (this.dropdown.length) {
+                this.element.removeClass('_suggest-dropdown-open');
                 this.dropdown.hide().empty();
             }
 
diff --git a/lib/web/mage/backend/validation.js b/lib/web/mage/backend/validation.js
index 122a8159f5863a611742e59c50eeb7a3184ae18b..58f14f8cd46a052f391e60edf71759efeb85bfe2 100644
--- a/lib/web/mage/backend/validation.js
+++ b/lib/web/mage/backend/validation.js
@@ -9,6 +9,7 @@
         define([
             "jquery",
             "underscore",
+            'Magento_Ui/js/modal/alert',
             "jquery/ui",
             "jquery/validate",
             "mage/translate",
@@ -17,7 +18,7 @@
     } else {
         factory(jQuery);
     }
-}(function ($, _) {
+}(function ($, _, alert) {
     "use strict";
     
     $.extend(true, $.validator.prototype, {
@@ -247,8 +248,10 @@
                     newFileContainer = elmParent.find('.new-file');
                     if (!alertAlreadyDisplayed && (newFileContainer.empty() || newFileContainer.is(':visible'))) {
                         alertAlreadyDisplayed = true;
-                        alert($.mage.__('There are files that were selected but not uploaded yet. ' +
-                            'Please upload or remove them first'));
+                        alert({
+                            content: $.mage.__('There are files that were selected but not uploaded yet. ' +
+                            'Please upload or remove them first')
+                        });
                     }
                     return false;
                 }
diff --git a/lib/web/mage/cookies.js b/lib/web/mage/cookies.js
index d30b49924a22cf95d230df0b3920e3a60ff45bc1..d4b98a23e641b28023d4eba124c4f0369f86fe09 100644
--- a/lib/web/mage/cookies.js
+++ b/lib/web/mage/cookies.js
@@ -44,7 +44,7 @@
          * @return {Date|null} Calculated cookie expiration date or null if no lifetime provided.
          * @private
          */
-        function lifetimeToExpires(options) {
+        function lifetimeToExpires(options, defaults) {
             var expires,
                 lifetime;
 
@@ -52,6 +52,7 @@
 
             if (lifetime && lifetime > 0) {
                 expires = options.expires || new Date();
+                
                 return new Date(expires.getTime() + lifetime * 1000);
             }
 
@@ -71,7 +72,7 @@
                 secure;
 
             options = $.extend({}, this.defaults, options || {});
-            expires = lifetimeToExpires(options) || options.expires;
+            expires = lifetimeToExpires(options, this.defaults) || options.expires;
             path = options.path;
             domain = options.domain;
             secure = options.secure;
diff --git a/lib/web/mage/gallery/gallery.html b/lib/web/mage/gallery/gallery.html
index 6a9a3cfbe3c3c7572c4eb0e84ea420869d386f71..34d26c812dae49418a80d22347139dedce263614 100644
--- a/lib/web/mage/gallery/gallery.html
+++ b/lib/web/mage/gallery/gallery.html
@@ -4,28 +4,38 @@
  * See COPYING.txt for license details.
  */
 -->
-<div class="fotorama-item" data-gallery-role="gallery">
+<div class="fotorama-item" data-gallery-role="gallery" tabindex="0">
+    <div data-gallery-role="fotorama__focusable-start" tabindex="0"></div>
     <div class="fotorama__wrap fotorama__wrap--css3 fotorama__wrap--slide fotorama__wrap--toggle-arrows">
         <div class="fotorama__stage">
             <div class="fotorama__arr fotorama__arr--prev" tabindex="0" role="button" aria-label="Previos">
-                <div class="fotorama__arr__arr"></div>
+                <div class="fotorama__arr__arr" data-gallery-role="arrow"></div>
             </div>
             <div class="fotorama__stage__shaft" tabindex="0" data-gallery-role="stage-shaft">
             </div>
             <div class="fotorama__arr fotorama__arr--next fotorama__arr--disabled" tabindex="-1" role="button"
                  aria-label="Next">
-                <div class="fotorama__arr__arr"></div>
+                <div class="fotorama__arr__arr" data-gallery-role="arrow"></div>
             </div>
             <div class="fotorama__video-close"></div>
+            <div class="fotorama__zoom-in"></div>
+            <div class="fotorama__zoom-out"></div>
         </div>
         <div class="fotorama__nav-wrap" data-gallery-role="nav-wrap">
             <div class="fotorama__nav fotorama__nav--thumbs">
-                <div class="fotorama__fullscreen-icon" tabindex="0" role="button"></div>
+                <div class="fotorama__fullscreen-icon" data-gallery-role="fotorama__fullscreen-icon" tabindex="0" role="button"></div>
+                <div class="fotorama__thumb__arr--left" tabindex="0" role="button" aria-label="<%= previous %>">
+                    <div class="fotorama__thumb__arr" data-gallery-role="arrow"></div>
+                </div>
                 <div class="fotorama__nav__shaft">
                     <div class="fotorama__thumb-border"></div>
                 </div>
+                <div class="fotorama__thumb__arr--right" tabindex="0" role="button" aria-label="<%= next %>">
+                    <div class="fotorama__thumb__arr" data-gallery-role="arrow"></div>
+                </div>
             </div>
         </div>
     </div>
+    <div data-gallery-role="fotorama__focusable-end" tabindex="0"></div>
 </div>
-<div class="magnifier-preview" id="preview" data-gallery-role="magnifier"></div>
+<div class="magnifier-preview" data-gallery-role="magnifier" id="preview"></div>
diff --git a/lib/web/mage/gallery/gallery.js b/lib/web/mage/gallery/gallery.js
index 9f81daba85bccefd2cf4cf7c71d818d88ad06787..245f08f824bd9cb0ab063778b0b328e1d96a59a2 100644
--- a/lib/web/mage/gallery/gallery.js
+++ b/lib/web/mage/gallery/gallery.js
@@ -7,11 +7,37 @@ define([
     'fotorama/fotorama',
     'underscore',
     'matchMedia',
+    'mage/template',
     'text!mage/gallery/gallery.html',
-    'Magento_Ui/js/lib/class'
-], function ($, fotorama, _, mediaCheck, template, Class) {
+    'uiClass',
+    'mage/translate'
+], function ($, fotorama, _, mediaCheck, template, galleryTpl, Class, $t) {
     'use strict';
 
+    /**
+     * Set main item first in order.
+     * @param {Array.<Object>} data - Set of gallery items to update.
+     */
+    var pushMainFirst = function(data){
+        var mainIndex;
+
+        if(!_.every(data, function(item){
+                return _.isObject(item);
+            }))
+        {
+            return data;
+        }
+
+        mainIndex = _.findIndex(data, function(item){
+            return item.isMain;
+        });
+        if(mainIndex > -1){
+            data.unshift(data.splice(mainIndex, 1)[0]);
+        }
+
+        return data;
+    };
+
     return Class.extend({
 
         defaults: {
@@ -36,6 +62,11 @@ define([
         initialize: function (config, element) {
             this._super();
 
+            _.bindAll(this,
+                '_focusSwitcher'
+            );
+
+            config.options.swipe = true;
             this.config = config;
 
             this.settings = {
@@ -47,12 +78,11 @@ define([
                 activeBreakpoint: {},
                 fotoramaApi: null,
                 isFullscreen: false,
-                api: null
+                api: null,
+                data: _.clone(pushMainFirst(config.data))
             };
-
             config.options.ratio = config.options.width / config.options.height;
             config.options.height = null;
-            config.options.allowfullscreen = false;
 
             $.extend(true, this.startConfig, config);
 
@@ -60,14 +90,35 @@ define([
             this.initApi();
             this.setupBreakpoints();
             this.initFullscreenSettings();
+            this.settings.$element.on('click', '.fotorama__stage__frame', function () {
+                $('[data-gallery-role="gallery"]').data('fotorama').requestFullScreen();
+                $('[data-gallery-role="fotorama__fullscreen-icon"]').css({
+                    opacity: 1,
+                    visibility: 'visible',
+                    display: 'block'
+                });
+            });
         },
 
         /**
          * Gallery fullscreen settings.
          */
         initFullscreenSettings: function () {
-            var settings = this.settings;
-            settings.$element.on('fotorama:fullscreenenter', function () {
+            var settings = this.settings,
+                self = this,
+                items = [];
+
+            settings.$gallery = this.settings.$element.find('[data-gallery-role="gallery"]');
+            settings.$fullscreenIcon = this.settings.$element.find('[data-gallery-role="fotorama__fullscreen-icon"]');
+            settings.focusableStart = this.settings.$element.find('[data-gallery-role="fotorama__focusable-start"]');
+            settings.focusableEnd = this.settings.$element.find('[data-gallery-role="fotorama__focusable-end"]');
+            settings.closeIcon = this.settings.$element.find('[data-gallery-role="fotorama__fullscreen-icon"]');
+            settings.fullscreenConfig.swipe = true;
+
+            settings.$gallery.on('fotorama:fullscreenenter', function () {
+                settings.$gallery.focus();
+                settings.focusableStart.bind('focusin', self._focusSwitcher);
+                settings.focusableEnd.bind('focusin', self._focusSwitcher);
                 settings.api.updateOptions(settings.defaultConfig.options, true);
                 settings.api.updateOptions(settings.fullscreenConfig, true);
 
@@ -77,16 +128,60 @@ define([
                 settings.isFullscreen = true;
             });
 
-            settings.$element.on('fotorama:fullscreenexit', function () {
+            settings.$gallery.on('fotorama:fullscreenexit', function () {
                 settings.api.updateOptions(settings.defaultConfig.options, true);
+                settings.focusableStart.unbind('focusin', this._focusSwitcher);
+                settings.focusableEnd.unbind('focusin', this._focusSwitcher);
 
                 if (!_.isEqual(settings.activeBreakpoint, {})) {
                     settings.api.updateOptions(settings.activeBreakpoint.options, true);
                 }
                 settings.isFullscreen = false;
+                settings.$fullscreenIcon.hide();
             });
         },
 
+        /**
+         * Switcher focus.
+         */
+        _focusSwitcher: function (e) {
+            var target = $(e.target),
+                settings = this.settings;
+
+            if (target.is(settings.focusableStart)) {
+                this._setFocus('start');
+            } else if (target.is(settings.focusableEnd)) {
+                this._setFocus('end');
+            }
+        },
+
+        /**
+         * Set focus to element.
+         * @param {String} position - can be "start" and "end"
+         *      positions.
+         *      If position is "end" - sets focus to first
+         *      focusable element in modal window scope.
+         *      If position is "start" - sets focus to last
+         *      focusable element in modal window scope
+         *
+         *  @param {String} type - can be "opened" or false
+         *      If type is "opened" - looks to "this.options.focus"
+         *      property and sets focus
+         */
+        _setFocus: function (position) {
+            var settings = this.settings,
+                focusableElements,
+                infelicity;
+
+            if (position === 'end') {
+                settings.$gallery.find(settings.closeIcon).focus();
+            } else if (position === 'start') {
+                infelicity = 2; //Constant for find last focusable element
+                focusableElements = settings.$gallery.find(':focusable');
+                focusableElements.eq(focusableElements.length - infelicity).focus();
+            }
+        },
+
         /**
          * Initializes gallery with configuration options.
          */
@@ -94,14 +189,17 @@ define([
             var breakpoints = {},
                 settings = this.settings,
                 config = this.config,
-                mainImage;
+                tpl = template(galleryTpl, {
+                    next: $t('Next'),
+                    previous: $t('Previous')
+                });
 
             if (settings.breakpoints) {
                 _.each(_.values(settings.breakpoints), function (breakpoint) {
                     var conditions;
                     _.each(_.pairs(breakpoint.conditions), function (pair) {
                         conditions = conditions ? conditions + ' and (' + pair[0] + ': ' + pair[1] + ')' :
-                            '(' + pair[0] + ': ' + pair[1] + ')';
+                        '(' + pair[0] + ': ' + pair[1] + ')';
                     });
                     breakpoints[conditions] = breakpoint.options;
                 });
@@ -115,21 +213,14 @@ define([
                 config.arrows = false;
             }
 
-            /**
-             * Returns index of main image.
-             */
-            mainImage = _.findIndex(config.data, function (obj) {
-                return obj.isMain === true;
-            });
-
             config.click = false;
             config.breakpoints = null;
-            config.startindex = mainImage;
             settings.currentConfig = config;
-            settings.$element.html(template);
-            settings.$element = $(settings.$element.children()[0]);
-            settings.$element.fotorama(config);
-            settings.fotoramaApi = settings.$element.data('fotorama');
+            settings.$element.html(tpl);
+            settings.$element.removeClass('_block-content-loading');
+            settings.$elementF = $(settings.$element.children()[0]);
+            settings.$elementF.fotorama(config);
+            settings.fotoramaApi = settings.$elementF.data('fotorama');
             $.extend(true, config, this.startConfig);
         },
 
@@ -153,7 +244,6 @@ define([
                          * Is triggered when breakpoint enties.
                          */
                         entry: function () {
-                            triggeredBreakpoints++;
                             $.extend(true, config, _.clone(startConfig));
 
                             settings.api.updateOptions(settings.defaultConfig.options, true);
@@ -170,16 +260,13 @@ define([
                          * Is triggered when breakpoint exits.
                          */
                         exit: function () {
-                            if (triggeredBreakpoints < 1) {
-                                $.extend(true, config, _.clone(startConfig));
-                                settings.api.updateOptions(settings.defaultConfig.options, true);
-
-                                if (settings.isFullscreen) {
-                                    settings.api.updateOptions(settings.fullscreenConfig, true);
-                                }
-                                settings.activeBreakpoint = {};
+                            $.extend(true, config, _.clone(startConfig));
+                            settings.api.updateOptions(settings.defaultConfig.options, true);
+
+                            if (settings.isFullscreen) {
+                                settings.api.updateOptions(settings.fullscreenConfig, true);
                             }
-                            triggeredBreakpoints--;
+                            settings.activeBreakpoint = {};
                         }
                     });
                 });
@@ -203,28 +290,28 @@ define([
                      * Displays the last image on preview.
                      */
                     last: function () {
-                        this.fotorama.show('>>');
+                        settings.fotoramaApi.show('>>');
                     },
 
                     /**
                      * Displays the first image on preview.
                      */
                     first: function () {
-                        this.fotorama.show('<<');
+                        settings.fotoramaApi.show('<<');
                     },
 
                     /**
                      * Displays previous element on preview.
                      */
                     prev: function () {
-                        this.fotorama.show('<');
+                        settings.fotoramaApi.show('<');
                     },
 
                     /**
                      * Displays next element on preview.
                      */
                     next: function () {
-                        this.fotorama.show('>');
+                        settings.fotoramaApi.show('>');
                     },
 
                     /**
@@ -237,7 +324,7 @@ define([
                             if (index > 0) {
                                 index -= 1;
                             }
-                            this.fotorama.show(index);
+                            settings.fotoramaApi.show(index);
                         }
                     },
 
@@ -264,7 +351,7 @@ define([
 
                             }
                             $.extend(true, settings.currentConfig.options, configuration);
-                            this.fotorama.setOptions(settings.currentConfig.options);
+                            settings.fotoramaApi.setOptions(settings.currentConfig.options);
                         }
                     },
 
@@ -274,16 +361,35 @@ define([
                      */
                     updateData: function (data) {
                         if (_.isArray(data)) {
-                            this.fotorama.load(data);
-                            $.extend(false, settings.defaultConfig, {
-                                data: data
+                            pushMainFirst(data);
+                            settings.fotoramaApi.load(data);
+
+                            $.extend(false, settings, {
+                                data: data,
+                                defaultConfig: data
                             });
                             $.extend(false, config, {
                                 data: data
                             });
                         }
+                    },
+
+                    /**
+                     * Returns current images list
+                     *
+                     * @returns {Array}
+                     */
+                    returnCurrentImages: function () {
+                        var images = [];
+
+                        _.each(this.fotorama.data, function (item) {
+                            images.push(_.omit(item, '$navThumbFrame', '$navDotFrame', '$stageFrame'));
+                        });
+
+                        return images;
                     }
                 };
+
             settings.$element.data('gallery', api);
             settings.api = settings.$element.data('gallery');
             settings.$element.trigger('gallery:loaded');
diff --git a/lib/web/mage/gallery/gallery.less b/lib/web/mage/gallery/gallery.less
index 9fd58e8b302eff033030a90c49a2b6a9fae546c1..f1a68415517b156a5c45b3b31f379961ae276a62 100644
--- a/lib/web/mage/gallery/gallery.less
+++ b/lib/web/mage/gallery/gallery.less
@@ -6,8 +6,8 @@
 @fotorama-duration-time: 0.3s;
 @fotorama-arw-size: 95px;
 @fotorama_close_size: 30px;
-@fotorama_fullscreen_button: 32px;
 @size-fotorama-block: 50px;
+@fotorama-thumb-arrow: 30px;
 
 @import '../../css/source/lib/_lib.less'; // Global lib
 @import '../../css/source/_theme.less'; // Theme overrides
@@ -20,23 +20,34 @@
     transform: translate3d(@x, @y, @z);
 }
 
+.fotorama-rotate (@deg) {
+    -webkit-transform: rotate(@deg);
+    -ms-transform: rotate(@deg);
+    transform: rotate(@deg);
+}
+
 .translateX(@value) {
+    -webkit-transform: translateX(@value);
     -ms-transform: translateX(@value);
     -o-transform: translateX(@value);
-    -webkit-transform: translateX(@value);
     transform: translateX(@value);
 }
 
 .translateY(@value) {
+    -webkit-transform: translateY(@value);
     -ms-transform: translateY(@value);
     -o-transform: translateY(@value);
-    -webkit-transform: translateY(@value);
     transform: translateY(@value);
 }
 
-.translate3d(@x, @y, @z) {
-    -webkit-transform: translate3d(@x, @y, @z);
-    transform: translate3d(@x, @y, @z);
+.fotorama-shadow-gradient(@x, @y) {
+    background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at @x @y, rgba(0, 0, 0, 0.4), transparent);
+}
+
+.fotorama-arrow-gradient(@d){
+    background-image: -webkit-linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
+    background-image: -ms-linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
+    background-image: linear-gradient(@d, rgba(255, 255, 255, .7), rgba(255, 255, 255, 0));
 }
 
 .fotorama-inline-block(@va: middle) {
@@ -48,6 +59,87 @@
     vertical-align: @va;
 }
 
+.fotorama__zoom-in,
+.fotorama__zoom-out {
+    display: none;
+}
+.fotorama__fullscreen {
+    .fotorama__zoom-in,
+    .fotorama__zoom-out {
+        position: absolute;
+        width: 50px;
+        height: 50px;
+        display: block;
+        margin-left: 20px;
+        z-index: 1000;
+    }
+    .fotorama__zoom-out {
+        top: 51px;
+        &:extend(.fotorama-sprite);
+        background-position: 0 (-@size-fotorama-block) !important;
+    }
+
+    .fotorama__zoom-in {
+        top: 0;
+        &:extend(.fotorama-sprite);
+        background-position: 0 0 !important;
+    }
+}
+
+.fotorama__zoom-in,
+.fotorama__zoom-out {
+    display: none;
+}
+.fotorama__fullscreen {
+    .fotorama__zoom-in,
+    .fotorama__zoom-out {
+        position: absolute;
+        width: 50px;
+        height: 50px;
+        display: block;
+        margin-left: 20px;
+        cursor: pointer;
+    }
+    .fotorama__zoom-out {
+        top: 51px;
+        &:extend(.fotorama-sprite);
+        background-position: 0 (-@size-fotorama-block) !important;
+    }
+
+    .fotorama__zoom-in {
+        top: 0;
+        &:extend(.fotorama-sprite);
+        background-position: 0 0 !important;
+    }
+}
+
+.fotorama__zoom-in,
+.fotorama__zoom-out {
+    display: none;
+}
+.fotorama__fullscreen {
+    .fotorama__zoom-in,
+    .fotorama__zoom-out {
+        position: absolute;
+        width: 50px;
+        height: 50px;
+        display: block;
+        margin-left: 20px;
+        cursor: pointer;
+    }
+    .fotorama__zoom-out {
+        top: 51px;
+        &:extend(.fotorama-sprite);
+        background-position: 0 (-@size-fotorama-block) !important;
+    }
+
+    .fotorama__zoom-in {
+        top: 0;
+        &:extend(.fotorama-sprite);
+        background-position: 0 0 !important;
+    }
+}
+
 .fotorama-stretch {
     bottom: 0;
     height: 100%;
@@ -58,16 +150,6 @@
     width: 100%;
 }
 
-.fotorama-image-reset {
-    border-radius: 0 !important;
-    box-shadow: none !important;
-    max-height: 99999px !important;
-    max-width: 99999px !important;
-    min-height: 0 !important;
-    min-width: 0 !important;
-    padding: 0 !important;
-}
-
 .fotorama-grab-cursor {
     cursor: move;
     cursor: -webkit-grab;
@@ -114,6 +196,7 @@
     height: 100%;
     position: absolute;
     width: 100%;
+    left:0;
 }
 
 .fotorama-transform-disabled {
@@ -202,8 +285,7 @@
 }
 
 .fotorama--fullscreen {
-    &:extend(.fotorama-image-reset);
-    background: @color-black;
+    background: @color-white;
     bottom: 0 !important;
     float: none !important;
     height: 100% !important;
@@ -214,9 +296,8 @@
     top: 0 !important;
     width: 100% !important;
     z-index: @z-index-10 !important;
-    .fotorama__stage,
-    .fotorama__nav {
-        background: @color-black;
+    .fotorama__wrap {
+        max-width: 100% !important;
     }
 }
 
@@ -357,7 +438,6 @@
     &:extend(.fotorama-focus);
     &:extend(.fotorama-inline-block);
     &:extend(.fotorama-no-tap);
-    cursor: pointer;
     position: relative;
 }
 
@@ -429,6 +509,7 @@
 }
 
 .fotorama__thumb {
+  background-color: @color-gray92;
     height: 100%;
     overflow: hidden;
     position: relative;
@@ -583,6 +664,14 @@
     &:extend(.fotorama-no-tap);
     cursor: pointer;
     position: absolute;
+}
+
+.fotorama__arr {
+    z-index: @z-index-9;
+
+}
+.fotorama__fullscreen-icon,
+.fotorama__video-close {
     z-index: @z-index-10;
 }
 
@@ -598,6 +687,9 @@
         .fotorama-abs-center();
         height: @size-fotorama-block;
         width: @size-fotorama-block;
+        .ie9 & {
+            margin: (-@size-fotorama-block/2) 0 0 (-@size-fotorama-block/2);
+        }
     }
 }
 
@@ -629,10 +721,12 @@
     right: 2px;
     top: 2px;
     width: @size-fotorama-block;
-    z-index: 20;
+    z-index: @z-index-10;
+    display:  none;
 }
 
 .fotorama__fullscreen-icon {
+    //display: none;
     &:focus {
         &:extend(.fotorama-focus);
         border-radius: 50%;
@@ -642,7 +736,8 @@
 
 .fotorama--fullscreen {
     .fotorama__fullscreen-icon {
-        background-position: (-@fotorama_fullscreen_button) (-@fotorama_fullscreen_button);
+        //display: inline-block;
+        background-position: (-@size-fotorama-block) 0;
     }
 }
 
@@ -686,7 +781,7 @@
     }
 
     .fotorama__wrap--css3 & {
-        .translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0);
+        .fotorama-translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0);
     }
 
     .fotorama__wrap--video & {
@@ -711,6 +806,60 @@
     }
 }
 
+.fotorama__wrap--toggle-arrows {
+    &:not(.fotorama__wrap--video) {
+        .fotorama__video-close {
+            display: none;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &.fotorama__wrap--video {
+        .fotorama__video-close {
+            top: 97px;
+            right: 93px;
+            opacity: 1;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &:not(.fotorama__wrap--video) {
+        .fotorama__video-close {
+            display: none;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &.fotorama__wrap--video {
+        .fotorama__video-close {
+            top: 97px;
+            right: 93px;
+            opacity: 1;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &:not(.fotorama__wrap--video) {
+        .fotorama__video-close {
+            display: none;
+        }
+    }
+}
+
+.fotorama__wrap--toggle-arrows {
+    &.fotorama__wrap--video {
+        .fotorama__video-close {
+            top: 97px;
+            right: 93px;
+            opacity: 1;
+        }
+    }
+}
+
 .fotorama__wrap--video {
     .fotorama__arr,
     .fotorama__fullscreen-icon {
@@ -739,24 +888,24 @@
 .fotorama__wrap--css3 {
     &.fotorama__wrap--no-controls.fotorama__wrap--slide.fotorama__wrap--toggle-arrows {
         .fotorama__fullscreen-icon:not(:focus) {
-            .translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0);
+            .fotorama-translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0);
         }
         .fotorama__arr--prev:not(:focus) {
-            .translate3d(-@fotorama-arw-size * 1.5, 0, 0);
+            .fotorama-translate3d(-@fotorama-arw-size * 1.5, 0, 0);
         }
         .fotorama__arr--next:not(:focus) {
-            .translate3d(@fotorama-arw-size * 1.5, 0, 0);
+            .fotorama-translate3d(@fotorama-arw-size * 1.5, 0, 0);
         }
     }
     &.fotorama__wrap--video {
         .fotorama__fullscreen-icon {
-            .translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0) !important;
+            .fotorama-translate3d(@fotorama-arw-size, -@fotorama-arw-size, 0) !important;
         }
         .fotorama__arr--prev {
-            .translate3d(-@fotorama-arw-size * 1.5, 0, 0) !important;
+            .fotorama-translate3d(-@fotorama-arw-size * 1.5, 0, 0) !important;
         }
         .fotorama__arr--next {
-            .translate3d(@fotorama-arw-size * 1.5, 0, 0) !important;
+            .fotorama-translate3d(@fotorama-arw-size * 1.5, 0, 0) !important;
         }
     }
 }
@@ -777,34 +926,59 @@
     &:after {
         &:extend(.fotorama-gpu);
         background-repeat: no-repeat;
-        background-size: 1px 100%, 5px 100%;
-        bottom: 0;
         content: '';
         display: block;
-        height: auto;
         pointer-events: none;
         position: absolute;
         text-decoration: none;
-        top: 0;
-        width: 10px;
         z-index: 10;
     }
     &:before {
-        background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at 0 50%, rgba(0, 0, 0, 0.4), transparent);
-        background-position: 0 0, 0 0;
         left: -10px;
-    }
-    &.fotorama__shadows--left:before {
-        left: 0;
+        top: -10px;
     }
     &:after {
-        background-image: linear-gradient(transparent, rgba(0, 0, 0, 0.2) 25%, rgba(0, 0, 0, 0.3) 75%, transparent), radial-gradient(farthest-side at 100% 50%, rgba(0, 0, 0, 0.4), transparent);
-        background-position: 100% 0, 100% 0;
         right: -10px;
+        bottom: -10px;
     }
+    &.fotorama__shadows--left:before,
     &.fotorama__shadows--right:after {
+        top: 0;
+        bottom: 0;
+        background-size: 1px 100%, 5px 100%;
+        height: auto;
+        width: 10px;
+    }
+    &.fotorama__shadows--top:before,
+    &.fotorama__shadows--bottom:after {
+        left: 0;
+        right:0;
+        background-size: 100% 1px, 100% 5px ;
+        height:10px;
+        width:auto;
+    }
+    &.fotorama__shadows--left:before {
+        .fotorama-shadow-gradient(0, 50%);
+        background-position: 0 0, 0 0;
+        left: 0;
+    }
+
+    &.fotorama__shadows--right:after {
+        .fotorama-shadow-gradient(100%, 50%);
+        background-position: 100% 0, 100% 0;
         right: 0;
     }
+    &.fotorama__shadows--top:before {
+        .fotorama-shadow-gradient(50%, 0);
+        background-position: 0 0, 0 0;
+        top:0;
+
+    }
+    &.fotorama__shadows--bottom:after {
+        .fotorama-shadow-gradient(50%, 100%);
+        background-position: 0 100%, 0 100%;
+        bottom:0;
+    }
 }
 
 .fotorama--fullscreen .fotorama__stage,
@@ -835,7 +1009,7 @@
             width: 100%;
         }
     }
-    .fotorama_horisontal_ratio {
+    .fotorama_horizontal_ratio {
         .fotorama__img {
             .translateX(-50%);
             height: 100%;
@@ -859,7 +1033,7 @@
     overflow: hidden;
     position: absolute;
     top: 0;
-    z-index: @z-index-10;
+    z-index: @z-index-8;
 }
 
 .magnify-lens {
@@ -905,10 +1079,10 @@
     text-align: center;
     .fotorama__img {
         height: auto;
+        width: auto;
         max-height: 100%;
         max-width: 100%;
         vertical-align: middle;
-        width: auto;
     }
 }
 
@@ -919,3 +1093,143 @@
 .magnify-hidden {
     display: none;
 }
+
+.fotorama__nav-wrap--vertical {
+    &.fotorama__nav-wrap {
+        display: inline-block;
+        position: absolute;
+        top: 0;
+        left: 0;
+    }
+
+    .fotorama__nav__shaft {
+        width: 100%;
+        background-color: white;
+        .fotorama__nav__frame--thumb {
+            display: block;
+            padding-bottom: inherit !important;
+        }
+    }
+}
+
+.fotorama--fullscreen {
+    .fotorama__stage__frame {
+        .fotorama__img {
+            bottom: 0;
+            left: 0;
+            margin: auto;
+            max-height: inherit;
+            max-width: inherit;
+            position: absolute;
+            right: 0;
+            top: 0;
+        }
+    }
+}
+
+.fotorama__nav-wrap--horizontal {
+    .fotorama__thumb__arr--left,
+    .fotorama__thumb__arr--right {
+        bottom: 0;
+        position: absolute;
+        top: 0;
+        width: @fotorama-thumb-arrow;
+        z-index: @z-index-10;
+        cursor: pointer;
+        .fotorama__thumb__arr {
+            width: 100%;
+            .fotorama-abs-center();
+        }
+    }
+    .fotorama__thumb__arr--left {
+        .fotorama-arrow-gradient(left);
+        left: 0;
+        .fotorama__thumb__arr {
+            background-position: (-@fotorama-thumb-arrow) (-@fotorama-thumb-arrow);
+        }
+    }
+    .fotorama__thumb__arr--right {
+        .fotorama-arrow-gradient(right);
+        right: 0;
+        .fotorama__thumb__arr {
+            background-position: (-@fotorama-thumb-arrow*2) (-@fotorama-thumb-arrow);
+        }
+    }
+}
+
+.fotorama__nav-wrap--vertical {
+    .fotorama__thumb__arr--left,
+    .fotorama__thumb__arr--right {
+        height: @fotorama-thumb-arrow;
+        left: 0;
+        position: absolute;
+        right: 0;
+        cursor: pointer;
+        z-index: @z-index-10;
+        .fotorama__thumb__arr {
+            .fotorama-rotate(90deg);
+            margin: auto;
+            width: @fotorama-thumb-arrow;
+        }
+    }
+    .fotorama__thumb__arr--left {
+        .fotorama-arrow-gradient(top);
+        top: 0;
+        .fotorama__thumb__arr {
+            background-position: (-@fotorama-thumb-arrow) (-@fotorama-thumb-arrow);
+        }
+    }
+    .fotorama__thumb__arr--right {
+        .fotorama-arrow-gradient(bottom);
+        bottom: 0;
+        .fotorama__thumb__arr {
+            background-position: (-@fotorama-thumb-arrow*2) (-@fotorama-thumb-arrow);
+        }
+    }
+}
+
+.fotorama__wrap--only-active {
+    .fotorama__stage,
+    .fotorama__nav {
+        max-width: 99999px !important;
+    }
+    .fotorama__stage__frame {
+        visibility: hidden;
+    }
+    .fotorama__stage__frame.fotorama__active {
+        visibility: visible;
+    }
+}
+
+.fotorama__thumb__arr {
+    &:extend(.fotorama-sprite);
+    background-size: 300%;
+    font-size: 0.001px;
+    padding-bottom: @fotorama-thumb-arrow;
+}
+
+.magnify-fullimage {
+    display: none;
+}
+
+.gallery-placeholder {
+    .loading-mask {
+        padding: 0 0 50%;
+        position: absolute;
+    }
+    .loader img {
+      position: absolute;
+    }
+}
+
+body.fotorama__fullscreen {
+    overflow-y: hidden;
+    .magnify-fullimage {
+        display: inline-block;
+    }
+    .fotorama__stage__shaft {
+        //.fotorama__img {
+        //    display: none;
+        //}
+    }
+}
diff --git a/lib/web/mage/requirejs/mixins.js b/lib/web/mage/requirejs/mixins.js
index c3cc36a4adf4a6406a6a2ee1a208f73b47924da8..89baa7933749f89753774a751fc5d64ec471d86f 100644
--- a/lib/web/mage/requirejs/mixins.js
+++ b/lib/web/mage/requirejs/mixins.js
@@ -89,6 +89,7 @@ define('mixins', [
     }
 
     return {
+
         /**
          * Loads specified module along with its' mixins.
          *
diff --git a/lib/web/mage/requirejs/plugin/id-normalizer.js b/lib/web/mage/requirejs/plugin/id-normalizer.js
deleted file mode 100644
index b9c44c68e33259d6c9347f0179607fa791ba0400..0000000000000000000000000000000000000000
--- a/lib/web/mage/requirejs/plugin/id-normalizer.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Copyright © 2015 Magento. All rights reserved.
- * See COPYING.txt for license details.
- */
-/*jshint globalstrict: true*/
-/*global define: false*/
-"use strict";
-
-/**
- * This is simple normalization plugin for RequireJS, which converts Magento modular references to normalized paths.
- * E.g. 'Magento_Catalog::js/scripts.js' -> 'Magento_Catalog/js/scripts.js'.
- */
-define({
-    /**
-     * Normalize Magento modular ID
-     */
-    normalize: function (name, normalize) {
-        return name.replace('::', '/');
-    },
-
-    /**
-     * load() is not needed for this plugin, but is required by RequireJS.
-     * So it is just proxy over default implementation.
-     */
-    load: function (name, parentRequire, onload, config) {
-        parentRequire([name], onload);
-    }
-});
diff --git a/lib/web/mage/requirejs/static.js b/lib/web/mage/requirejs/static.js
index cb579e80ece6820b87c6defe33ed9b3d3cbd63fb..a2ee644942a036102b8f3bcfbb451cabdee1d183 100644
--- a/lib/web/mage/requirejs/static.js
+++ b/lib/web/mage/requirejs/static.js
@@ -158,6 +158,7 @@ define('statistician', [
     }
 
     return {
+
         /**
          * Stores keys of 'modules' object to localStorage under 'all' namespace.
          *
diff --git a/lib/web/mage/utils/compare.js b/lib/web/mage/utils/compare.js
index 38ec53b205d842ba34132c44b5945f700e9db160..2cae7362a2109dc86c5f403b3ea661a8913ef38f 100644
--- a/lib/web/mage/utils/compare.js
+++ b/lib/web/mage/utils/compare.js
@@ -185,9 +185,11 @@ define([
             addChange(ns, name, 'update', current, old);
         }
     }
+
     /*eslint-enable max-depth*/
 
     return {
+
         /**
          *
          * @returns {Object}
diff --git a/lib/web/mage/utils/misc.js b/lib/web/mage/utils/misc.js
index 8885679a61c9334ec5435d2f0e49acb0728c7aa2..afbdf70ae4590a7945390c1d775f99e949e898d9 100644
--- a/lib/web/mage/utils/misc.js
+++ b/lib/web/mage/utils/misc.js
@@ -7,7 +7,15 @@ define([
 ], function (_) {
     'use strict';
 
-    var map = {
+    var defaultAttributes,
+        map;
+
+    defaultAttributes = {
+        method: 'post',
+        enctype: 'multipart/form-data'
+    };
+
+    map = {
         'D': 'DDD',
         'dd': 'DD',
         'd': 'D',
@@ -106,15 +114,21 @@ define([
          * @param {Object} options - Options object that consists of
          *      a 'url' and 'data' properties.
          */
-        submit: function (options) {
-            var form = document.createElement('form'),
-                data = this.serialize(options.data),
+        submit: function (options, attrs) {
+            var form        = document.createElement('form'),
+                data        = this.serialize(options.data),
+                attributes  = _.extend({}, defaultAttributes, attrs || {}),
                 field;
 
-            data.form_key = FORM_KEY;
+            if (!attributes.action) {
+                attributes.action = options.url;
+            }
+
+            data.form_key = window.FORM_KEY;
 
-            form.setAttribute('action', options.url);
-            form.setAttribute('method', 'post');
+            _.each(attributes, function (value, name) {
+                form.setAttribute(name, value);
+            });
 
             _.each(data, function (value, name) {
                 field = document.createElement('input');
diff --git a/lib/web/mage/utils/objects.js b/lib/web/mage/utils/objects.js
index 92b49508b4908312c4c677235d9278793e1f46a2..4ea214f0dca36c1dabe845a3d82d3426daa13748 100644
--- a/lib/web/mage/utils/objects.js
+++ b/lib/web/mage/utils/objects.js
@@ -326,8 +326,6 @@ define([
          * @param {Number} [maxDepth=7] - Max recursion depth.
          */
         forEachRecursive: function (data, action, maxDepth) {
-            var prop;
-
             maxDepth = typeof maxDepth === 'number' && !isNaN(maxDepth) ? maxDepth - 1 : 7;
 
             if (!_.isFunction(action) || _.isFunction(data) || maxDepth < 0) {
diff --git a/lib/web/mage/utils/strings.js b/lib/web/mage/utils/strings.js
index 89a9109f99e7a433c38aaf456c8032c65bdcb256..8c6f8d329f6619e7ebd0943c04c4d778780f02cd 100644
--- a/lib/web/mage/utils/strings.js
+++ b/lib/web/mage/utils/strings.js
@@ -10,6 +10,7 @@ define([
     var jsonRe = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/;
 
     return {
+
         /**
          * Attempts to convert string to one of the primitive values,
          * or to parse it as a valid json object.
@@ -95,7 +96,7 @@ define([
             return prefix ? prefix + '.' + part : part;
         },
 
-         /**
+        /**
          * Splits incoming string and returns its' part specified by offset.
          *
          * @param {String} parts
diff --git a/lib/web/mage/utils/template.js b/lib/web/mage/utils/template.js
index 85f2aeb5b037420e25f26bd6687bb00c3c3af7fa..9f0e5f656c96367ea7872526904382b2fa7284b9 100644
--- a/lib/web/mage/utils/template.js
+++ b/lib/web/mage/utils/template.js
@@ -30,6 +30,7 @@ define([
     })();
 
     if (hasStringTmpls) {
+
         /*eslint-disable no-unused-vars, no-eval*/
         /**
          * Evaluates template string using ES6 templates.
@@ -41,8 +42,10 @@ define([
         template = function (tmpl, $) {
             return eval('`' + tmpl + '`');
         };
+
         /*eslint-enable no-unused-vars, no-eval*/
     } else {
+
         /**
          * Fallback function used when ES6 templates are not supported.
          * Uses underscore templates renderer.
@@ -106,6 +109,7 @@ define([
     }
 
     return {
+
         /**
          * Applies provided data to the template.
          *
diff --git a/lib/web/mage/utils/wrapper.js b/lib/web/mage/utils/wrapper.js
index 51985cae41531c915ebacce392d37631c036f0e7..4a0253701aee32768d793439b76a458c0db1f9aa 100644
--- a/lib/web/mage/utils/wrapper.js
+++ b/lib/web/mage/utils/wrapper.js
@@ -43,6 +43,7 @@ define([
     var superReg = /\b_super\b/;
 
     return {
+
         /**
          * Wraps target function with a specified wrapper, which will recieve
          * reference to the original function as a first argument.
diff --git a/lib/web/mage/validation/url.js b/lib/web/mage/validation/url.js
new file mode 100644
index 0000000000000000000000000000000000000000..5361d9522787650bd470d9941153527b192ff781
--- /dev/null
+++ b/lib/web/mage/validation/url.js
@@ -0,0 +1,50 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+
+define([], function () {
+    'use strict';
+
+    return {
+
+        /**
+         * Redirects to the url if it is considered safe
+         *
+         * @param {String} path - url to be redirected to
+         */
+        redirect: function (path) {
+            path = this.sanitize(path);
+
+            if (this.validate(path)) {
+                window.location.href = path;
+            }
+        },
+
+        /**
+         * Validates url
+         *
+         * @param {Object} path - url to be validated
+         * @returns {Boolean}
+         */
+        validate: function (path) {
+            var hostname = window.location.hostname;
+
+            if (path.indexOf(hostname) === -1 ||
+                path.indexOf('javascript:') !== -1 ||
+                path.indexOf('vbscript:') !== -1) {
+                return false;
+            }
+        },
+
+        /**
+         * Sanitize url, replacing disallowed chars
+         *
+         * @param {Sring} path - url to be normalized
+         * @returns {String}
+         */
+        sanitize: function (path) {
+            return path.Replace('[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]', '');
+        }
+    };
+});
diff --git a/lib/web/magnifier/magnifier.js b/lib/web/magnifier/magnifier.js
index af08fb28fe48673f83efe81f0724e22e56fc5d5c..2a315a2b9bc6f3acae7e01c1a2699419306f9f14 100644
--- a/lib/web/magnifier/magnifier.js
+++ b/lib/web/magnifier/magnifier.js
@@ -4,6 +4,11 @@
  */
 
 ;(function ($) {
+    var onWheelCallback,
+        zoomWidthStep = 0,
+        zoomHeightStep = 0,
+        isDraggable = false;
+
     $.fn.magnify = function (options) {
         'use strict';
 
@@ -24,8 +29,9 @@
             $thumb,
             that = this,
             largeWrapper = options.largeWrapper ||  ".magnifier-preview",
-            $largeWrapper = $(largeWrapper);
-        curThumb = null,
+            $largeWrapper = $(largeWrapper),
+            zoomShown = false,
+            curThumb = null,
             currentOpts = {
                 x: 0,
                 y: 0,
@@ -96,7 +102,9 @@
 
         var MagnifyCls = {
             magnifyHidden: "magnify-hidden",
-            magnifyOpaque: "magnify-opaque"
+            magnifyOpaque: "magnify-opaque",
+            magnifyFull: "magnify-fullimage"
+
         };
 
 
@@ -116,41 +124,19 @@
             _init($box, options);
         };
 
-        /**
-         * Delete events and created block for magnify
-         *
-         */
-        that.destroy  = function () {
-            console.warn("API not implemented.");
-        };
-
-        /**
-         * @todo
-         */
-        that.zoomIn = function () {
-            console.warn("API not implemented.");
-        };
-
-        /**
-         * @todo
-         */
-        that.zoomOut = function () {
-            console.warn("API not implemented.");
-        };
-
-        /**
-         * @todo
-         */
-        that.show = function () {
-            console.warn("API not implemented.");
-        };
-
-        /**
-         * @todo
-         */
-        that.hide = function () {
-            console.warn("API not implemented.");
-        };
+        function _toBoolean (str) {
+            if (typeof  str === 'string') {
+                if (str === 'true') {
+                    return true;
+                } else if (str === 'false' || '') {
+                    return false;
+                } else {
+                    console.warn("Wrong type: can't be transformed to Boolean");
+                }
+            } else if (typeof str === 'boolean') {
+                return str;
+            }
+        }
 
         function createLens(thumb) {
             if ($(thumb).siblings('.magnify-lens').length) {
@@ -187,7 +173,7 @@
             data[idx].lensH = data[idx].lensH > $thumb.height() ? $thumb.height() : data[idx].lensH;
             lens.css({
                 width: data[idx].lensW + 1 + 'px',
-                height: data[idx].lensH + 'px'
+                height: data[idx].lensH + 0.5 + 'px'
             });
         }
 
@@ -238,7 +224,7 @@
 
 
         function onThumbEnter() {
-            if (enabled === true) {
+            if (_toBoolean(enabled)) {
                 currentOpts = data[curIdx];
                 curLens = $box.find('.magnify-lens');
 
@@ -277,7 +263,7 @@
         }
 
         function move() {
-            if (enabled === true) {
+            if (_toBoolean(enabled)) {
                 if (status !== currentOpts.status) {
                     onThumbEnter();
                 }
@@ -301,8 +287,8 @@
                     pos.l = pos.l <= 0 ? 0 : pos.l;
                     //pos.l = pos.l > 0 ? pos.l : pos.l;
                     curLens.css({
-                        left: pos.l + paddingX + 'px',
-                        top: pos.t + paddingY + 'px'
+                        left: pos.l + paddingX +'px',
+                        top: pos.t + paddingY + 1.75 + 'px'
                     });
 
                     if (lensbg) {
@@ -372,7 +358,8 @@
                 opts.thumb = $thumb;
                 enabled = opts.enabled;
 
-                if(enabled) {
+                if(_toBoolean(enabled)) {
+
                     $largeWrapper.show().css('display', '');
                     $largeWrapper.addClass(MagnifyCls.magnifyHidden);
                     set(opts);
@@ -386,13 +373,14 @@
 
         function hoverEvents(thumb) {
             $(thumb).on('mouseover', function (e) {
+
                 if (showWrapper) {
 
                     if (currentOpts.status !== 0) {
                         onThumbLeave();
                     }
                     handleEvents(e);
-                    isOverThumb = true;
+                    isOverThumb = inBounds;
                 }
             }).trigger('mouseover');
         }
@@ -479,7 +467,7 @@
                     ? options.onthumbmove
                     : currentOpts.onthumbmove;
 
-            largeUrl = gOptions.original || $thumb.attr('src');
+            largeUrl = gOptions.full || $thumb.attr('src');
 
             if (thumb.id === '') {
                 idx = thumb.id = 'magnifier-item-' + gId;
@@ -562,6 +550,10 @@
 
             getMousePos();
 
+            if (gEventType === 'hover') {
+                isOverThumb = inBounds;
+            }
+
             if (inBounds && isOverThumb) {
                 $largeWrapper.removeClass(MagnifyCls.magnifyHidden);
                 move();
@@ -572,6 +564,161 @@
             }
         }
 
+        function toggleZoomButtons($image) {
+            var path = $image.attr("src"),
+                imgSize;
+            if (path) {
+                imgSize = getImageSize(path);
+                if ((imgSize.rh > $image.parent().height()) || (imgSize.rw > $image.parent().width())) {
+                    $('.fotorama__zoom-in').show();
+                    $('.fotorama__zoom-out').show();
+                    zoomShown = true;
+                } else {
+                    $('.fotorama__zoom-in').hide();
+                    $('.fotorama__zoom-out').hide();
+                    zoomShown = false;
+                }
+            } else {
+                $('.fotorama__zoom-in').hide();
+                $('.fotorama__zoom-out').hide();
+                zoomShown = false;
+            }
+        }
+
+        function magnifierFullscreen () {
+            var isDragActive = false,
+                startX,
+                startY,
+                imagePosX,
+                imagePosY,
+                touch,
+                isTouchEnabled = 'ontouchstart' in document.documentElement;
+
+            $('[data-gallery-role="gallery"]').on('fotorama:fullscreenenter fotorama:showend fotorama:load', function () {
+                var $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img'),
+                    $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
+                    $imageContainer = $preview.parent(),
+                    gallery = $('[data-gallery-role="gallery"]');
+
+                gallery.on('fotorama:fullscreenexit', function () {
+                    $thumb.css({
+                        'top': '',
+                        'left': ''
+                    });
+                });
+
+                if (gallery.data('fotorama').fullScreen) {
+                    toggleZoomButtons($image);
+                    resetVars($('[data-gallery-role="stage-shaft"] .fotorama__img--full'));
+
+                    $('.fotorama__stage__frame .fotorama__img--full').each(function () {
+                        var path = $(this).attr("src"),
+                            imgSize;
+                        if (path) {
+                            imgSize = getImageSize(path);
+
+                            if ((imgSize.rh > $(this).parent().height()) || (imgSize.rw > $(this).parent().width())) {
+
+                                if (imgSize.rh / imgSize.rw < $(this).parent().height() / $(this).parent().width()) {
+                                    $(this).width($(this).parent().width());
+                                    $(this).height('auto');
+                                } else {
+                                    $(this).height($(this).parent().height());
+                                    $(this).width('auto');
+                                }
+
+                                $(this).css({
+                                    'top': '',
+                                    'left': ''
+                                });
+                            }
+                        }
+                    });
+                }
+
+                $image
+                    .off(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown')
+                    .on(isTouchEnabled ? 'touchstart' : 'pointerdown mousedown MSPointerDown', function (e) {
+                        if (gallery.data('fotorama').fullScreen && isDraggable) {
+                            e.preventDefault();
+                            $image.css('cursor', 'move');
+                            imagePosY = $image.offset().top;
+                            imagePosX = $image.offset().left;
+
+                            if (isTouchEnabled) {
+                                touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+                                e.clientX = touch.pageX;
+                                e.clientY = touch.pageY;
+                            }
+                            startX = e.clientX || e.originalEvent.clientX;
+                            startY = e.clientY || e.originalEvent.clientY;
+                            isDragActive = true;
+                        }
+                    });
+
+
+
+                $image
+                    .off(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove')
+                    .on(isTouchEnabled ? 'touchmove' : 'mousemove pointermove MSPointerMove', function (e) {
+                        if (gallery.data('fotorama').fullScreen && isDragActive && isDraggable) {
+
+                            var top,
+                                left,
+                                startOffset = $image.offset(),
+                                clientX = e.clientX || e.originalEvent.clientX,
+                                clientY = e.clientY || e.originalEvent.clientY;
+
+
+                            e.preventDefault();
+
+                            if (isTouchEnabled) {
+                                touch = e.originalEvent.touches[0] || e.originalEvent.changedTouches[0];
+                                e.clientX = touch.pageX;
+                                e.clientY = touch.pageY;
+                            }
+                            top = +imagePosY + (clientY - startY);
+                            left = +imagePosX + (clientX - startX);
+
+                            if ($image.height() > $imageContainer.height()) {
+
+                                if (($imageContainer.offset().top + $imageContainer.height()) > (top + $image.height())) {
+                                    top = $imageContainer.offset().top + $imageContainer.height() - $image.height();
+                                } else {
+                                    top = ($imageContainer.offset().top < top) ? 0 : top;
+                                }
+                                $image.offset({
+                                    'top': top
+                                });
+                            }
+
+                            if ($image.width() > $imageContainer.width()) {
+
+                                if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width())) {
+                                    left = $imageContainer.offset().left + $imageContainer.width() - $image.width();
+                                } else {
+                                    left = ($imageContainer.offset().left < left) ? $imageContainer.offset().left : left;
+                                }
+                                $image.offset({
+                                    'left': left
+                                });
+                            }
+                        }
+                    });
+
+                $image
+                    .off(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp')
+                    .on(isTouchEnabled ? 'touchend' : 'mouseup pointerup MSPointerUp', function (e) {
+                        if (gallery.data('fotorama').fullScreen && isDragActive && isDraggable) {
+                            isDragActive = false;
+                            $image.css('cursor', 'pointer');
+
+                            return false;
+                        }
+                    });
+            });
+        }
+
         function onScroll() {
 
             if (curThumb !== null) {
@@ -579,11 +726,260 @@
             }
         }
 
+        if ($('.fotorama-item').data('fotorama').fullScreen) {
+            $('.fotorama__stage__frame .fotorama__img--full').each(function () {
+                var image = new Image();
+                image.src = $(this).attr("src");
+
+                if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
+
+                    if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
+                        $(this).width($(this).parent().width());
+                        $(this).height('');
+                    } else {
+                        $(this).height($(this).parent().height());
+                        $(this).width('');
+                    }
+                }
+            });
+        }
+
         $(window).on('scroll', onScroll);
         $(window).resize(function() {
+
+            if ($('.fotorama-item').data('fotorama').fullScreen) {
+
+                $('.fotorama__stage__frame .fotorama__img--full').each(function () {
+                    var image = new Image();
+                    image.src = $(this).attr("src");
+
+                    if ( (image.height > $(this).parent().height()) || (image.width > $(this).parent().width()) ) {
+
+                        if (image.height / image.width < $(this).parent().height() / $(this).parent().width()) {
+                            $(this).width($(this).parent().width());
+                            $(this).height('');
+                        } else {
+                            $(this).height($(this).parent().height());
+                            $(this).width('');
+                        }
+                    }
+                });
+
+                toggleZoomButtons($('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'));
+            }
+
+
             _init($box, gOptions);
+
         });
+
+        function resetVars($image) {
+            zoomWidthStep = 0;
+            zoomHeightStep = 0;
+            isDraggable = false;
+            $image.css({
+                top: 0,
+                left: 0,
+                right: 0,
+                bottom: 0,
+                cursor: ''
+            });
+        }
+
+        function checkFullscreenImagePosition(widthStep, heightStep) {
+            var $preview, $image, $imageContainer, gallery, top, left;
+
+            if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
+
+                $preview = $('[data-gallery-role="stage-shaft"] [data-active="true"] img');
+                $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full');
+                $imageContainer = $preview.parent();
+                gallery = $('[data-gallery-role="gallery"]');
+                top = $image.offset().top;
+                left = $image.offset().left;
+
+                if ($image.height() > $imageContainer.height()) {
+                    if ($imageContainer.offset().top + $imageContainer.height() > top + $image.height() + heightStep/2) {
+                        top = $imageContainer.offset().top + $imageContainer.height() - $image.height() + heightStep/2;
+                    } else {
+                        top = ($imageContainer.offset().top <= top + heightStep/2 && heightStep > 0) ? 0 : top + heightStep/2;
+                    }
+                    $image.css({
+                        top: top,
+                        bottom: 'auto'
+                    });
+                } else {
+                    $image.css({
+                        top: 0,
+                        bottom: 0
+                    });
+                }
+
+                if ($image.width() > $imageContainer.width()) {
+                    if (($imageContainer.offset().left + $imageContainer.width()) > (left + $image.width() + widthStep/2)) {
+                        left = $imageContainer.offset().left + $imageContainer.width() - $image.width() + widthStep/2;
+                    } else {
+                        left = ($imageContainer.offset().left <= left + widthStep/2 && widthStep > 0) ? 0 : left - $imageContainer.offset().left + widthStep/2;
+                    }
+                    $image.css({
+                        left: left,
+                        right: 'auto'
+                    });
+                } else {
+                    $image.css({
+                        left: 0,
+                        right: 0
+                    });
+                }
+            }
+        }
+
+        function zoomIn(e) {
+            if (zoomShown) {
+                var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
+                    imgOriginalSize = $image.length ? getImageSize($image[0].src) : '',
+                    widthResult,
+                    heightResult;
+
+                if (!zoomWidthStep) {
+                    zoomWidthStep = Math.ceil((imgOriginalSize.rw - $image.width())/parseFloat(options.fullscreenzoom));
+                    zoomHeightStep = Math.ceil((imgOriginalSize.rh - $image.height())/parseFloat(options.fullscreenzoom));
+                }
+                widthResult = $image.width() + zoomWidthStep;
+                heightResult = $image.height() + zoomHeightStep;
+
+                if (widthResult >= imgOriginalSize.rw) {
+                    widthResult = imgOriginalSize.rw;
+                }
+                if (heightResult >= imgOriginalSize.rh) {
+                    heightResult = imgOriginalSize.rh;
+                }
+
+                if ( zoomShown ) {
+                    isDraggable = true;
+                }
+
+                if ($image.width() >= $image.height() && $image.width() !== imgOriginalSize.rw) {
+                    $image.css({
+                        width: widthResult,
+                        height: 'auto'
+                    });
+                    checkFullscreenImagePosition(-zoomWidthStep, -zoomHeightStep);
+                } else if ($image.width() < $image.height() && $image.height() !== imgOriginalSize.rh) {
+                    $image.css({
+                        width: 'auto',
+                        height: heightResult
+                    });
+                    checkFullscreenImagePosition(-zoomWidthStep, -zoomHeightStep);
+                }
+            }
+
+            return false;
+        }
+
+        function zoomOut(e) {
+            if (zoomShown) {
+                var $image = $('[data-gallery-role="stage-shaft"] [data-active="true"] .fotorama__img--full'),
+                    setedResult = $image.width() - zoomWidthStep,
+                    widthCheck = $image.width() - zoomWidthStep <= $image.parent().width(),
+                    heightCheck = $image.height() - zoomHeightStep <= $image.parent().height();
+
+                e.preventDefault();
+
+                if (widthCheck && heightCheck) {
+                    if ($image.width() >= $image.height()) {
+                        $image.trigger('fotorama:load');
+
+                        return false;
+                    } else if ($image.width() < $image.height()) {
+                        $image.trigger('fotorama:load');
+
+                        return false;
+                    }
+                }
+
+                $image.css({'width': setedResult, height: 'auto'});
+                checkFullscreenImagePosition(zoomWidthStep, zoomHeightStep);
+            }
+
+            return false;
+        }
+
+        /**
+         * Return width and height of original image
+         * @param src path for original image
+         * @returns {{rw: number, rh: number}}
+         */
+        function getImageSize(src) {
+            var img = new Image(),
+                imgSize = {
+                    rw: 0,
+                    rh: 0
+                };
+            img.src = src;
+            imgSize.rw = img.width;
+            imgSize.rh = img.height;
+            return imgSize;
+        }
+
+
+        function setEventOnce() {
+            $('.fotorama__zoom-in')
+                .off('mouseup')
+                .on('mouseup', zoomIn);
+            $('.fotorama__zoom-out')
+                .off('mouseup')
+                .on('mouseup', zoomOut);
+            $('.fotorama__zoom-in')
+                .off('touchstart')
+                .on('touchstart', zoomIn);
+            $('.fotorama__zoom-out')
+                .off('touchstart')
+                .on('touchstart', zoomOut);
+        }
+
         $(document).on('mousemove', onMousemove);
         _init($box, gOptions);
+        setEventOnce();
+        magnifierFullscreen();
+
+        if (!onWheelCallback) {
+            onWheelCallback = function onWheel(e) {
+                if ($('[data-gallery-role="gallery"]').data('fotorama').fullScreen) {
+                    e = e || window.event;
+
+
+                    var delta = e.deltaY || e.detail || e.wheelDelta;
+
+                    if (delta > 0) {
+                        zoomOut(e);
+                    } else {
+                        zoomIn(e);
+                    }
+
+                    e.preventDefault ? e.preventDefault() : (e.returnValue = false);
+                }
+            };
+        }
+        $('.fotorama-item').on('fotorama:load', function () {
+            if (document.querySelector('.fotorama__stage').addEventListener) {
+                if ('onwheel' in document) {
+                    // IE9+, FF17+, Ch31+
+                    document.querySelector('.fotorama__stage').removeEventListener("wheel", onWheelCallback);
+                    document.querySelector('.fotorama__stage').addEventListener("wheel", onWheelCallback);
+                } else if ('onmousewheel' in document) {
+                    document.querySelector('.fotorama__stage').removeEventListener("mousewheel", onWheelCallback);
+                    document.querySelector('.fotorama__stage').addEventListener("mousewheel", onWheelCallback);
+                } else {
+                    // Firefox < 17
+                    document.querySelector('.fotorama__stage').removeEventListener("MozMousePixelScroll", onWheelCallback);
+                    document.querySelector('.fotorama__stage').addEventListener("MozMousePixelScroll", onWheelCallback);
+                }
+            } else { // IE8-
+                document.querySelector('.fotorama__stage').detachEvent("onmousewheel", onWheelCallback);
+                document.querySelector('.fotorama__stage').attachEvent("onmousewheel", onWheelCallback);
+            }
+        });
+
     }
 }(jQuery));
diff --git a/lib/web/magnifier/magnify.js b/lib/web/magnifier/magnify.js
index a30a827aabdd3543f9cf69867caa89f5f67166e7..06a835ef9a2df3f6c540e854cbd000cadc6b7fbd 100644
--- a/lib/web/magnifier/magnify.js
+++ b/lib/web/magnifier/magnify.js
@@ -13,26 +13,59 @@ define([
         var isTouchEnabled = 'ontouchstart' in document.documentElement,
             gallerySelector = '[data-gallery-role="gallery"]',
             magnifierSelector = '[data-gallery-role="magnifier"]',
-            magnifierZoomSelector = '[data-gallery-role="magnifier-zoom"]';
+            magnifierZoomSelector = '[data-gallery-role="magnifier-zoom"]',
+            fullScreenIcon = '[data-gallery-role="fotorama__fullscreen-icon"]',
+            hideMagnifier,
+            behaveOnHover;
 
         if (isTouchEnabled) {
             $(element).on('fotorama:showend fotorama:load', function () {
                 $(magnifierSelector).remove();
+                $(magnifierZoomSelector).remove();
             });
-
-            return config;
         }
 
+        /**
+         * Hides magnifier preview and zoom blocks.
+         */
+        hideMagnifier = function () {
+            $(magnifierSelector).empty().hide();
+            $(magnifierZoomSelector).remove();
+        };
+
+        /**
+         * Hides magnifier on drag and while arrow click.
+         */
+        behaveOnHover = function (e, initPos) {
+            var pos = [e.pageX, e.pageY],
+                isArrow = $(e.target).data('gallery-role') === 'arrow',
+                isClick = initPos[0] === pos[0] && initPos[1] === pos[1];
+            if (isArrow || !isClick) {
+                hideMagnifier();
+            }
+        };
+
         if (config.magnifierOpts.eventType === 'click') {
             config.options.swipe = false;
+        } else if (config.magnifierOpts.eventType === 'hover') {
+            $(element).on('pointerdown mousedown MSPointerDown', function (e) {
+                var pos = [e.pageX, e.pageY];
+
+                $(element).on('mousemove pointermove MSPointerMove', function (ev) {
+                    navigator.msPointerEnabled ? hideMagnifier() : behaveOnHover(ev, pos);
+                });
+                $(document).on('mouseup pointerup MSPointerUp', function () {
+                    $(element).off('mousemove pointermove MSPointerMove');
+                });
+            });
         }
 
         $.extend(config.magnifierOpts, {
             zoomable: false,
-            thumb: '.fotorama__img',
+            thumb: '.fotorama__img:not(".fotorama__img--full")',
             largeWrapper: '[data-gallery-role="magnifier"]',
             height: config.magnifierOpts.height || function () {
-                return $('[data-active="true"]').width() / config.options.ratio;
+                return $('[data-active="true"]').height();
             },
             width: config.magnifierOpts.width || function () {
                 var productMedia = $(gallerySelector).parent().parent();
@@ -47,16 +80,16 @@ define([
             }
         });
 
-        $(element).on('fotorama:showend fotorama:load', function (e, fotorama) {
-            $(magnifierSelector).empty().hide();
-            $(magnifierZoomSelector).remove();
+        $(element).on('fotorama:showend fotorama:load fotorama:fullscreenexit fotorama:ready', function (e, fotorama) {
+            hideMagnifier();
             config.magnifierOpts.large = $(gallerySelector).data('fotorama').activeFrame.img;
-            config.magnifierOpts.original = fotorama.data[fotorama.activeIndex].original;
+            config.magnifierOpts.full = fotorama.data[fotorama.activeIndex].full;
             $($(gallerySelector).data('fotorama').activeFrame.$stageFrame).magnify(config.magnifierOpts);
         });
-        $(element).on('fotorama:show', function () {
-            $(magnifierSelector).empty().hide();
-            $(magnifierZoomSelector).remove();
+        $(element).on('gallery:loaded', function () {
+            $(element).find(gallerySelector).on('fotorama:show fotorama:fullscreenenter ', function () {
+                hideMagnifier();
+            });
         });
 
         return config;
diff --git a/setup/pub/magento/setup/readiness-check.js b/setup/pub/magento/setup/readiness-check.js
index e1c8a0ad9db5d043270cfbe46a5355e47ee7bdf8..f2b8cf9e48c5f3a1e4cb63d86cdec1249756ab75 100644
--- a/setup/pub/magento/setup/readiness-check.js
+++ b/setup/pub/magento/setup/readiness-check.js
@@ -291,7 +291,8 @@ angular.module('readiness-check', [])
                         item.fail();
                     });
             }
-            return $http.get(item.url, {timeout: 3000})
+            // setting 1 minute timeout to prevent system from timing out
+            return $http.get(item.url, {timeout: 60000})
                 .success(function(data) { item.process(data) })
                 .error(function(data, status) {
                     item.fail();
@@ -304,8 +305,10 @@ angular.module('readiness-check', [])
             angular.forEach($scope.items, function(item) {
                 item.show();
             });
+            var $delay = 0;
             angular.forEach($scope.items, function(item) {
-                $scope.query(item);
+                $timeout(function() { $scope.query(item); }, $delay * 1000);
+                $delay++;
             });
         };
 
diff --git a/setup/pub/magento/setup/select-version.js b/setup/pub/magento/setup/select-version.js
index 2b326019cb4627536ced6b38ca88c16fa12a78bb..b133fa59d46a1607294fbc105065be321e5a6d70 100644
--- a/setup/pub/magento/setup/select-version.js
+++ b/setup/pub/magento/setup/select-version.js
@@ -27,10 +27,29 @@ angular.module('select-version', ['ngStorage'])
         $http.get('index.php/select-version/systemPackage', {'responseType' : 'json'})
             .success(function (data) {
                 if (data.responseType != 'error') {
-                    $scope.versions = data.package.versions;
-                    $scope.packages[0].name = data.package.package;
-                    $scope.packages[0].version = $scope.versions[0].id;
-                    $scope.selectedOption = $scope.versions[0].id;
+                    $scope.selectedOption = [];
+                    $scope.versions = [];
+                    for (var i = 0; i < data.packages.length; i++) {
+                        angular.forEach(data.packages[i].versions, function (value, key) {
+                            $scope.versions.push({
+                                'versionInfo': angular.toJson({
+                                    'package': data.packages[i].package,
+                                    'version': value
+                                }), 'version': value
+                            });
+                        });
+                    }
+
+                    $scope.versions = $scope.versions.sort(function (a, b) {
+                        if (a.version.id < b.version.id) {
+                            return 1;
+                        }
+                        if (a.version.id > b.version.id) {
+                            return -1;
+                        }
+                        return 0;
+                    });
+                    $scope.selectedOption = $scope.versions[0].versionInfo;
                     $scope.upgradeReadyForNext = true;
 
                 } else {
@@ -135,7 +154,9 @@ angular.module('select-version', ['ngStorage'])
         };
 
         $scope.update = function() {
-            $scope.packages[0].version = $scope.selectedOption;
+            var selectedVersionInfo = angular.fromJson($scope.selectedOption);
+            $scope.packages[0]['name'] = selectedVersionInfo.package;
+            $scope.packages[0].version = selectedVersionInfo.version.id;
             if (angular.equals($scope.updateComponents.no, true)) {
                 if ($scope.totalForGrid > 0) {
                     $scope.packages.splice(1, $scope.totalForGrid);
diff --git a/setup/pub/styles/setup.css b/setup/pub/styles/setup.css
index e087bf2d51be50ed0db6cab894ee66ccabee0332..ebfc3c336164a2046dcf2123e4c325b9f5dddeac 100644
--- a/setup/pub/styles/setup.css
+++ b/setup/pub/styles/setup.css
@@ -3,4 +3,4 @@
  * See COPYING.txt for license details.
  */
 
-.abs-action-delete,.abs-icon,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before,.upgrade-home-item:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.validation-symbol:after{content:'*';color:#e22626;font-weight:400;margin-left:3px}.abs-modal-overlay,.modals-overlay{background:rgba(0,0,0,.35);bottom:0;left:0;position:fixed;right:0;top:0}.abs-action-delete>span,.abs-visually-hidden,.admin__control-fields .admin__field:nth-child(n+2):not(.admin__field-option)>.admin__field-label{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.abs-visually-hidden-reset{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.abs-clearfix:after,.abs-clearfix:before,.action-multiselect-wrap:after,.action-multiselect-wrap:before,.actions-split:after,.actions-split:before,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:before,.admin__data-grid-filters-footer:after,.admin__data-grid-filters-footer:before,.admin__data-grid-filters:after,.admin__data-grid-filters:before,.admin__data-grid-header-row:after,.admin__data-grid-header-row:before,.page-actions._fixed:after,.page-actions._fixed:before,.page-content:after,.page-content:before,.page-header-actions:after,.page-header-actions:before,.page-main-actions:not(._hidden):after,.page-main-actions:not(._hidden):before{content:"";display:table}.abs-clearfix:after,.action-multiselect-wrap:after,.actions-split:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-filters-footer:after,.admin__data-grid-filters:after,.admin__data-grid-header-row:after,.page-actions._fixed:after,.page-content:after,.page-header-actions:after,.page-main-actions:not(._hidden):after{clear:both}.abs-list-reset-styles{margin:0;padding:0;list-style:none}html{box-sizing:border-box;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}:focus{box-shadow:none;outline:0}._keyfocus :focus{box-shadow:0 0 0 1px #008bdb}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}embed,img,object,video{max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/light/opensans-300.eot);src:url(../fonts/opensans/light/opensans-300.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/light/opensans-300.woff2) format('woff2'),url(../fonts/opensans/light/opensans-300.woff) format('woff'),url(../fonts/opensans/light/opensans-300.ttf) format('truetype'),url('../fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/regular/opensans-400.eot);src:url(../fonts/opensans/regular/opensans-400.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/regular/opensans-400.woff2) format('woff2'),url(../fonts/opensans/regular/opensans-400.woff) format('woff'),url(../fonts/opensans/regular/opensans-400.ttf) format('truetype'),url('../fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');font-weight:400;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/semibold/opensans-600.eot);src:url(../fonts/opensans/semibold/opensans-600.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/semibold/opensans-600.woff2) format('woff2'),url(../fonts/opensans/semibold/opensans-600.woff) format('woff'),url(../fonts/opensans/semibold/opensans-600.ttf) format('truetype'),url('../fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');font-weight:600;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/bold/opensans-700.eot);src:url(../fonts/opensans/bold/opensans-700.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/bold/opensans-700.woff2) format('woff2'),url(../fonts/opensans/bold/opensans-700.woff) format('woff'),url(../fonts/opensans/bold/opensans-700.ttf) format('truetype'),url('../fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');font-weight:700;font-style:normal}html{font-size:62.5%}body{font-size:1.4rem;color:#333;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-weight:400;font-style:normal;line-height:1.36}h1{margin:0 0 2rem;font-size:2.8rem;color:#41362f;font-weight:400;line-height:1.2}h2{margin:0 0 2rem;font-size:2rem;color:#41362f;font-weight:400;line-height:1.2}h3{margin:0 0 2rem;font-size:1.7rem;color:#41362f;font-weight:600;line-height:1.2}h4,h5,h6{font-weight:600;margin-top:0}p{margin:0 0 1em}small{font-size:1.2rem}a{color:#008bdb;text-decoration:none}a:hover{color:#0fa7ff;text-decoration:underline}dl,ol,ul{padding-left:0}nav ol,nav ul{list-style:none;margin:0;padding:0}html{height:100%}body{background-color:#fff;min-height:100%;min-width:102.4rem}.page-wrapper{background-color:#fff;display:inline-block;margin-left:-4px;vertical-align:top;width:calc(100% - 8.8rem)}.page-content{padding-bottom:3rem;padding-left:3rem;padding-right:3rem}.notices-wrapper{margin:0 3rem}.notices-wrapper .messages{margin-bottom:0}@media (min-width:1024px){html{width:100vw}body{overflow-x:hidden}}.row{margin-left:0;margin-right:0}.row:after{content:"";display:table;clear:both}.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9,.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:0;padding-right:0}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}.row-gutter{margin-left:-1.5rem;margin-right:-1.5rem}.row-gutter>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.abs-clearer:after,.component-manager-content:after,.component-manager-title:after,.form-row:after,.header:after,.nav:after,body:after{content:"";display:table;clear:both}.ng-cloak{display:none!important}.hide.hide{display:none}.show.show{display:block}.text-center{text-align:center}.text-right{text-align:right}@font-face{font-family:Icons;src:url(../fonts/icons/icons.eot);src:url(../fonts/icons/icons.eot?#iefix) format('embedded-opentype'),url(../fonts/icons/icons.woff2) format('woff2'),url(../fonts/icons/icons.woff) format('woff'),url(../fonts/icons/icons.ttf) format('truetype'),url(../fonts/icons/icons.svg#Icons) format('svg');font-weight:400;font-style:normal}[class*=icon-]{display:inline-block;line-height:1}.icon-failed:before,.icon-success:before,[class*=icon-]:after{font-family:Icons}.icon-success{color:#79a22e}.icon-success:before{content:'\e62d'}.icon-failed{color:#e22626}.icon-failed:before{content:'\e632'}.icon-success-thick:after{content:'\e62d'}.icon-collapse:after{content:'\e615'}.icon-failed-thick:after{content:'\e632'}.icon-expand:after{content:'\e616'}.icon-warning:after{content:'\e623'}.icon-failed-round,.icon-success-round{border-radius:100%;color:#fff;font-size:2.5rem;height:1em;position:relative;text-align:center;width:1em}.icon-failed-round:after,.icon-success-round:after{bottom:0;font-size:.5em;left:0;position:absolute;right:0;top:.45em}.icon-success-round{background-color:#79a22e}.icon-success-round:after{content:'\e62d'}.icon-failed-round{background-color:#e22626}.icon-failed-round:after{content:'\e632'}dl,ol,ul{margin-top:0}.list{padding-left:0}.list>li{display:block;margin-bottom:.75em;position:relative}.list>li>.icon-failed,.list>li>.icon-success{font-size:1.6em;left:-.1em;position:absolute;top:0}.list>li>.icon-success{color:#79a22e}.list>li>.icon-failed{color:#e22626}.list-item-failed,.list-item-icon,.list-item-success,.list-item-warning{padding-left:3.5rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{left:-.1em;position:absolute}.list-item-success:before{color:#79a22e}.list-item-failed:before{color:#e22626}.list-item-warning:before{color:#ef672f}.list-definition{margin:0 0 3rem;padding:0}.list-definition>dt{clear:left;float:left}.list-definition>dd{margin-bottom:1em;margin-left:20rem}.btn-wrap{margin:0 auto}.btn-wrap .btn{width:100%}.btn{background:#e3e3e3;border:none;color:#514943;display:inline-block;font-size:1.6rem;font-weight:600;padding:.45em .9em;text-align:center}.btn:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.btn:active{background-color:#d6d6d6}.btn.disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.ie9 .btn.disabled,.ie9 .btn[disabled]{background-color:#f0f0f0;opacity:1;text-shadow:none}.btn-large{padding:.75em 1.25em}.btn-medium{font-size:1.4rem;padding:.5em 1.5em .6em}.btn-link{background-color:transparent;border:none;color:#008bdb;font-family:1.6rem;font-size:1.5rem}.btn-link:active,.btn-link:focus,.btn-link:hover{background-color:transparent;color:#0fa7ff}.btn-prime{background-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.btn-prime:hover{background-color:#f65405;background-repeat:repeat-x;background-image:linear-gradient(to right,#e04f00 0,#f65405 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e04f00', endColorstr='#f65405', GradientType=1);color:#fff}.btn-prime:active,.btn-prime:focus{background-color:#e04f00;background-repeat:repeat-x;background-image:linear-gradient(to right,#f65405 0,#e04f00 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f65405', endColorstr='#e04f00', GradientType=1);color:#fff}.ie9 .btn-prime.disabled,.ie9 .btn-prime[disabled]{background-color:#fd6e23}.ie9 .btn-prime.disabled:active,.ie9 .btn-prime.disabled:hover,.ie9 .btn-prime[disabled]:active,.ie9 .btn-prime[disabled]:hover{background-color:#fd6e23;-webkit-filter:none;filter:none}.btn-secondary{background-color:#514943;color:#fff}.btn-secondary:hover{background-color:#5f564f;color:#fff}.btn-secondary:active,.btn-secondary:focus{background-color:#574e48;color:#fff}.ie9 .btn-secondary.disabled,.ie9 .btn-secondary[disabled]{background-color:#514943}.ie9 .btn-secondary.disabled:active,.ie9 .btn-secondary.disabled:hover,.ie9 .btn-secondary[disabled]:active,.ie9 .btn-secondary[disabled]:hover{background-color:#514943;-webkit-filter:none;filter:none}[class*=btn-wrap-triangle]{overflow:hidden;position:relative}[class*=btn-wrap-triangle] .btn:after{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.btn-wrap-triangle-right{display:inline-block;padding-right:1.74rem;position:relative}.btn-wrap-triangle-right .btn{text-indent:.92rem}.btn-wrap-triangle-right .btn:after{border-color:transparent transparent transparent #e3e3e3;border-width:1.84rem 0 1.84rem 1.84rem;left:100%;margin-left:-1.74rem}.btn-wrap-triangle-right .btn:hover:after{border-left-color:#dbdbdb}.btn-wrap-triangle-right .btn:active:after{border-left-color:#d6d6d6}.btn-wrap-triangle-right .btn:not(.disabled):active,.btn-wrap-triangle-right .btn:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn.disabled:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:after{border-color:transparent transparent transparent #f0f0f0}.ie9 .btn-wrap-triangle-right .btn.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:hover:after{border-left-color:#f0f0f0}.btn-wrap-triangle-right .btn-prime:after{border-color:transparent transparent transparent #eb5202}.btn-wrap-triangle-right .btn-prime:hover:after{border-left-color:#f65405}.btn-wrap-triangle-right .btn-prime:active:after{border-left-color:#e04f00}.btn-wrap-triangle-right .btn-prime:not(.disabled):active,.btn-wrap-triangle-right .btn-prime:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:after{border-color:transparent transparent transparent #fd6e23}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:hover:after{border-left-color:#fd6e23}.btn-wrap-triangle-left{display:inline-block;padding-left:1.74rem}.btn-wrap-triangle-left .btn{text-indent:-.92rem}.btn-wrap-triangle-left .btn:after{border-color:transparent #e3e3e3 transparent transparent;border-width:1.84rem 1.84rem 1.84rem 0;margin-right:-1.74rem;right:100%}.btn-wrap-triangle-left .btn:hover:after{border-right-color:#dbdbdb}.btn-wrap-triangle-left .btn:active:after{border-right-color:#d6d6d6}.btn-wrap-triangle-left .btn:not(.disabled):active,.btn-wrap-triangle-left .btn:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn.disabled:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:after{border-color:transparent #f0f0f0 transparent transparent}.ie9 .btn-wrap-triangle-left .btn.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:hover:after{border-right-color:#f0f0f0}.btn-wrap-triangle-left .btn-prime:after{border-color:transparent #eb5202 transparent transparent}.btn-wrap-triangle-left .btn-prime:hover:after{border-right-color:#e04f00}.btn-wrap-triangle-left .btn-prime:active:after{border-right-color:#f65405}.btn-wrap-triangle-left .btn-prime:not(.disabled):active,.btn-wrap-triangle-left .btn-prime:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:after{border-color:transparent #fd6e23 transparent transparent}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:hover:after{border-right-color:#fd6e23}.btn-expand{background-color:transparent;border:none;color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700;padding:0;position:relative}.btn-expand.expanded:after{border-color:transparent transparent #303030;border-width:0 .285em .36em}.btn-expand.expanded:hover:after{border-color:transparent transparent #3d3d3d}.btn-expand:hover{background-color:transparent;border:none;color:#3d3d3d}.btn-expand:hover:after{border-color:#3d3d3d transparent transparent}.btn-expand:after{border-color:#303030 transparent transparent;border-style:solid;border-width:.36em .285em 0;content:'';height:0;left:100%;margin-left:.5em;margin-top:-.18em;position:absolute;top:50%;width:0}[class*=col-] .form-el-input,[class*=col-] .form-el-select{width:100%}.form-fieldset{border:none;margin:0 0 1em;padding:0}.form-row{margin-bottom:2.2rem}.form-row .form-row{margin-bottom:.4rem}.form-row .form-label{display:block;font-weight:600;padding:.6rem 2.1em 0 0;text-align:right}.form-row .form-label.required{position:relative}.form-row .form-label.required:after{color:#eb5202;content:'*';font-size:1.15em;position:absolute;right:.7em;top:.5em}.form-row .form-el-checkbox+.form-label:before,.form-row .form-el-radio+.form-label:before{top:.7rem}.form-row .form-el-checkbox+.form-label:after,.form-row .form-el-radio+.form-label:after{top:1.1rem}.form-row.form-row-text{padding-top:.6rem}.form-row.form-row-text .action-sign-out{font-size:1.2rem;margin-left:1rem}.form-note{font-size:1.2rem;font-weight:600;margin-top:1rem}.form-el-dummy{display:none}.fieldset{border:0;margin:0;min-width:0;padding:0}input:not([disabled]):focus,textarea:not([disabled]):focus{box-shadow:none}.form-el-input{border:1px solid #adadad;color:#303030;padding:.35em .55em .5em}.form-el-input:hover{border-color:#949494}.form-el-input:focus{border-color:#008bdb}.form-el-input:required{box-shadow:none}.form-label{margin-bottom:.5em}[class*=form-label][for]{cursor:pointer}.form-el-insider-wrap{display:table;width:100%}.form-el-insider-input{display:table-cell;width:100%}.form-el-insider{border-radius:2px;display:table-cell;vertical-align:top;padding:.43em .55em .5em 0}.form-legend,.form-legend-expand,.form-legend-light{display:block;margin:0}.form-legend,.form-legend-expand{margin-bottom:2.5em;padding-top:1.5em;font-weight:600;font-size:1.25em}.form-legend{width:100%;border-top:1px solid #ccc}.form-legend-light{margin-bottom:1.5em;font-size:1em}.form-legend-expand{cursor:pointer;transition:opacity .2s linear}.form-legend-expand:hover{opacity:.85}.form-legend-expand.expanded:after{content:'\e615'}.form-legend-expand:after{margin-left:.5em;font-weight:400;font-size:1.15em;font-family:Icons;content:'\e616';vertical-align:sub}.form-el-checkbox,.form-el-radio{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-el-checkbox.disabled+.form-label,.form-el-checkbox.disabled+.form-label:before,.form-el-checkbox[disabled]+.form-label,.form-el-checkbox[disabled]+.form-label:before,.form-el-radio.disabled+.form-label,.form-el-radio.disabled+.form-label:before,.form-el-radio[disabled]+.form-label,.form-el-radio[disabled]+.form-label:before{cursor:default;opacity:.5;pointer-events:none}.form-el-checkbox:not(.disabled)+.form-label:hover:before,.form-el-checkbox:not([disabled])+.form-label:hover:before,.form-el-radio:not(.disabled)+.form-label:hover:before,.form-el-radio:not([disabled])+.form-label:hover:before{border-color:#514943}.form-el-checkbox+.form-label,.form-el-radio+.form-label{font-weight:400;padding-left:2em;padding-right:0;position:relative;text-align:left;transition:border-color .1s linear}.form-el-checkbox+.form-label:before,.form-el-radio+.form-label:before{border:1px solid;content:'';left:0;position:absolute;top:.1rem;transition:border-color .1s linear}.form-el-checkbox+.form-label:before{background-color:#fff;border-color:#adadad;border-radius:2px;height:1.6rem;line-height:1.2;width:1.6rem;font-size:1.2rem}.form-el-checkbox:checked+.form-label::before{content:'\e62d';font-family:Icons}.form-el-radio+.form-label:before{background-color:#fff;border:1px solid #adadad;border-radius:100%;height:1.8rem;width:1.8rem}.form-el-radio+.form-label:after{background:0 0;border:.5rem solid transparent;border-radius:100%;content:'';height:0;left:.4rem;position:absolute;top:.5rem;transition:background .3s linear;width:0}.form-el-radio:checked+.form-label{cursor:default}.form-el-radio:checked+.form-label:after{border-color:#514943}.form-select-label{border:1px solid #adadad;color:#303030;cursor:pointer;display:block;overflow:hidden;position:relative;z-index:0}.form-select-label:hover,.form-select-label:hover:after{border-color:#949494}.form-select-label:active,.form-select-label:active:after,.form-select-label:focus,.form-select-label:focus:after{border-color:#008bdb}.form-select-label:after{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:2.36em;z-index:-2}.ie9 .form-select-label:after{display:none}.form-select-label:before{border-color:#303030 transparent transparent;border-style:solid;border-width:5px 4px 0;content:'';height:0;margin-right:-4px;margin-top:-2.5px;position:absolute;right:1.18em;top:50%;width:0;z-index:-1}.ie9 .form-select-label:before{display:none}.form-select-label .form-el-select{background:0 0;border:none;border-radius:0;content:'';display:block;margin:0;padding:.35em calc(2.36em + 10%) .5em .55em;width:110%}.ie9 .form-select-label .form-el-select{padding-right:.55em;width:100%}.form-el-select{background:#fff;border:1px solid #adadad;border-radius:2px;color:#303030;display:block;padding:.35em .55em}.multiselect-custom{position:relative;height:45.2rem;border:1px solid #adadad;overflow:auto;margin:0 0 1.5rem}.multiselect-custom ul{margin:0;padding:0;list-style:none;min-width:29rem}.multiselect-custom .item{padding:1rem 1.4rem}.multiselect-custom .selected{background-color:#e0f6fe}.multiselect-custom .form-label{margin-bottom:0}[class*=form-el-].invalid{border-color:#e22626}[class*=form-el-].invalid+.error-container{display:block}.error-container{background-color:#fffbbb;border:1px solid #ee7d7d;color:#514943;display:none;font-size:1.19rem;margin-top:.2rem;padding:.8rem 1rem .9rem}.check-result-message{margin-left:.5em;min-height:3.68rem;-webkit-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-flex;display:-ms-flexbox;display:flex}.check-result-text{margin-left:.5em}.container{display:block;margin:0 auto 4rem;max-width:100rem;padding:0 2rem}.abs-action-delete,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before,.upgrade-home-item:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.text-stretch{margin-bottom:1.5em}.page-title-jumbo{font-size:4rem;font-weight:300;letter-spacing:-.05em;margin-bottom:2.9rem}.page-title-jumbo-success:before{color:#79a22e;content:'\e62d';font-size:3.9rem;margin-left:-.3rem;margin-right:2.4rem}.list{margin-bottom:3rem}.list-dot .list-item{display:list-item;list-style-position:inside;margin-bottom:1.2rem}.list-title{color:#333;font-size:1.4rem;font-weight:700;letter-spacing:.025em;margin-bottom:1.2rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{font-family:Icons;font-size:1.6rem;top:0}.list-item-success:before{content:'\e62d';font-size:1.6rem}.list-item-failed:before{content:'\e632';font-size:1.4rem;left:.1rem;top:.2rem}.list-item-warning:before{content:'\e623';font-size:1.3rem;left:.2rem}.form-wrap{padding-top:2.1rem;margin-bottom:3.6rem}.form-el-label-horizontal{display:inline-block;font-size:1.3rem;font-weight:600;letter-spacing:.025em;margin-left:.4rem;margin-bottom:.4rem}.app-updater{min-width:768px}body._has-modal{height:100%;overflow:hidden;width:100%}.modals-overlay{z-index:899}.modal-popup,.modal-slide{bottom:0;min-width:0;pointer-events:none;position:fixed;right:0;top:0;visibility:hidden}.modal-popup._show,.modal-slide._show{visibility:visible}.modal-popup._show .modal-inner-wrap,.modal-slide._show .modal-inner-wrap{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-popup .modal-inner-wrap,.modal-slide .modal-inner-wrap{background-color:#fff;box-shadow:0 0 12px 2px rgba(0,0,0,.35);opacity:1;pointer-events:auto}.modal-slide{left:14.8rem;z-index:900}.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto}.modal-slide._inner-scroll .modal-inner-wrap{overflow-y:visible;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.modal-slide._inner-scroll .modal-footer,.modal-slide._inner-scroll .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-slide._inner-scroll .modal-content{overflow-y:auto}.modal-slide._inner-scroll .modal-footer{margin-top:auto}.modal-slide .modal-content,.modal-slide .modal-footer,.modal-slide .modal-header{padding:0 2.6rem 2.6rem}.modal-slide .modal-header{padding-bottom:2.1rem;padding-top:2.1rem}.modal-popup{left:0;overflow-y:auto;z-index:900}.modal-popup._show .modal-inner-wrap{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.modal-popup .modal-inner-wrap{box-sizing:border-box;height:auto;left:0;margin:5rem auto;position:absolute;right:0;-webkit-transform:translateY(-200%);-ms-transform:translateY(-200%);transform:translateY(-200%);transition-duration:.2s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:75%}.modal-popup._inner-scroll{overflow-y:visible}.ie10 .modal-popup._inner-scroll,.ie9 .modal-popup._inner-scroll{overflow-y:auto}.modal-popup._inner-scroll .modal-inner-wrap{max-height:90%}.ie10 .modal-popup._inner-scroll .modal-inner-wrap,.ie9 .modal-popup._inner-scroll .modal-inner-wrap{max-height:none}.modal-popup._inner-scroll .modal-content{overflow-y:auto}.modal-popup .modal-content,.modal-popup .modal-footer,.modal-popup .modal-header{padding-left:3rem;padding-right:3rem}.modal-popup .modal-footer,.modal-popup .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-popup .modal-header{padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer{margin-top:auto;padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer-actions{text-align:right}.modal-popup.confirm .modal-inner-wrap{left:50%;margin-left:-25rem;width:50rem}.modal-popup.confirm .modal-footer{text-align:right}.modal-popup._image-box .modal-inner-wrap{margin:5rem auto;max-width:78rem;position:static}.modal-popup._image-box .thumbnail-preview{padding-bottom:3rem;text-align:center}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image-block{border:1px solid #ccc;margin:0 auto 2rem;max-width:58rem;padding:2rem}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image{max-height:54rem}@media (max-width:768px){.modal-popup.modal-slide{left:14.8rem;z-index:900}.modal-popup.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-popup.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto;margin:0;max-height:none}}.admin__action-dropdown-wrap{display:inline-block;position:relative}.admin__action-dropdown-wrap .admin__action-dropdown-text:after{left:-6px;right:0}.admin__action-dropdown-wrap .admin__action-dropdown-menu{left:auto;right:0}.admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__action-dropdown-wrap.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin__action-dropdown-wrap._active .admin__action-dropdown-text:after,.admin__action-dropdown-wrap.active .admin__action-dropdown-text:after{background-color:#fff;content:'';height:6px;position:absolute;top:100%}.admin__action-dropdown-wrap._active .admin__action-dropdown-menu,.admin__action-dropdown-wrap.active .admin__action-dropdown-menu{opacity:1;visibility:visible}.admin__action-dropdown-wrap._disabled .admin__action-dropdown{cursor:default}.admin__action-dropdown-wrap._disabled:hover .admin__action-dropdown{color:#333}.admin__action-dropdown{box-shadow:none;background-color:#fff;border:1px solid transparent;border-bottom:none;border-radius:0;color:#333;display:inline-block;font-size:1.3rem;font-weight:400;letter-spacing:-.025em;padding:.7rem 3.3rem .8rem 1.5rem;position:relative;transition:border-color .15s ease;vertical-align:baseline;z-index:2}.admin__action-dropdown._active:after,.admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .admin__action-dropdown:after,.active .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin__action-dropdown:focus,.admin__action-dropdown:hover{background-color:#fff;color:#000;text-decoration:none}.admin__action-dropdown:after{right:1.5rem}.admin__action-dropdown:before{margin-right:1rem}.admin__action-dropdown-menu{opacity:0;visibility:hidden;background-color:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);line-height:1.36;margin-top:-1px;min-width:120%;padding:.5rem 1rem;position:absolute;top:100%;transition:all .15s ease;z-index:1}.admin__action-dropdown-menu>li{display:block}.admin__action-dropdown-menu>li>a{color:#333;display:block;text-decoration:none;padding:.6rem .5rem}.abs-actions-split-xl .action-default,.page-actions .actions-split .action-default{margin-right:4rem}.abs-actions-split-xl .action-toggle,.page-actions .actions-split .action-toggle{padding-right:4rem}.abs-actions-split-xl .action-toggle:after,.page-actions .actions-split .action-toggle:after{border-width:.9rem .6rem 0;margin-top:-.3rem;right:1.4rem}.actions-split{position:relative;z-index:200}.actions-split._active,.actions-split.active,.actions-split:hover{box-shadow:0 0 0 1px #007bdb}.actions-split._active .action-toggle.action-primary,.actions-split._active .action-toggle.primary,.actions-split.active .action-toggle.action-primary,.actions-split.active .action-toggle.primary{background-color:#ba4000;border-color:#ba4000}.actions-split._active .dropdown-menu,.actions-split.active .dropdown-menu{opacity:1;visibility:visible}.actions-split .action-default,.actions-split .action-toggle{float:left;margin:0}.actions-split .action-default._active,.actions-split .action-default.active,.actions-split .action-default:hover,.actions-split .action-toggle._active,.actions-split .action-toggle.active,.actions-split .action-toggle:hover{box-shadow:none}.actions-split .action-default{margin-right:3.3rem;min-width:9.3rem}.actions-split .action-toggle{padding-right:3.3rem;border-left-color:rgba(0,0,0,.2);bottom:0;padding-left:0;position:absolute;right:0;top:0}.actions-split .action-toggle._active:after,.actions-split .action-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.25rem;top:50%;transition:all .2s linear;width:0}._active .actions-split .action-toggle:after,.active .actions-split .action-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:hover:after{border-color:#000 transparent transparent}.actions-split .action-toggle.action-primary:after,.actions-split .action-toggle.action-secondary:after,.actions-split .action-toggle.primary:after,.actions-split .action-toggle.secondary:after{border-color:#fff transparent transparent}.actions-split .action-toggle>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-select-wrap{display:inline-block;position:relative}.action-select-wrap .action-select{padding-right:3.3rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#fff;font-weight:400;text-align:left}.action-select-wrap .action-select._active:after,.action-select-wrap .action-select.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.25rem;top:50%;transition:all .2s linear;width:0}._active .action-select-wrap .action-select:after,.active .action-select-wrap .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:hover:after{border-color:#000 transparent transparent}.action-select-wrap .action-select:hover,.action-select-wrap .action-select:hover:before{border-color:#878787}.action-select-wrap .action-select:before{background-color:#e3e3e3;border:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:3.3rem}.action-select-wrap .action-select._active{border-color:#007bdb}.action-select-wrap .action-select._active:before{border-color:#007bdb #007bdb #007bdb #adadad}.action-select-wrap._active{z-index:500}.action-select-wrap._active .action-select,.action-select-wrap._active .action-select:before{border-color:#007bdb}.action-select-wrap._active .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multiselect-wrap{display:inline-block;padding-top:1px;position:relative;height:1.6rem;width:3.1rem;z-index:200}.action-multiselect-wrap:hover .action-multiselect-toggle,.action-multiselect-wrap:hover .admin__control-checkbox+label:before{border-color:#878787}.action-multiselect-wrap._active .action-multiselect-toggle,.action-multiselect-wrap._active .admin__control-checkbox+label:before{border-color:#007bdb}.action-multiselect-wrap._active .action-menu{opacity:1;visibility:visible}.action-multiselect-wrap._disabled .admin__control-checkbox+label:before{background-color:#fff}.action-multiselect-wrap._disabled .action-multiselect-toggle,.action-multiselect-wrap._disabled .admin__control-checkbox+label:before{border-color:#adadad;opacity:1}.action-multiselect-wrap .action-multiselect-toggle,.action-multiselect-wrap .admin__control-checkbox,.action-multiselect-wrap .admin__control-checkbox+label{float:left}.action-multiselect-wrap .action-multiselect-toggle{border-radius:0 1px 1px 0;height:1.6rem;margin-left:-1px;padding:0;position:relative;transition:border-color .1s linear;width:1.6rem}.action-multiselect-wrap .action-multiselect-toggle._active:after,.action-multiselect-wrap .action-multiselect-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multiselect-wrap .action-multiselect-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .action-multiselect-wrap .action-multiselect-toggle:after,.active .action-multiselect-wrap .action-multiselect-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multiselect-wrap .action-multiselect-toggle:hover:after{border-color:#000 transparent transparent}.action-multiselect-wrap .action-multiselect-toggle:focus{border-color:#007bdb}.action-multiselect-wrap .action-multiselect-toggle:after{right:.3rem}.action-multiselect-wrap .action-multiselect-toggle>span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.action-multiselect-wrap .action-menu{left:-1.2rem;right:auto;text-align:left;margin-top:1px}.action-multiselect-wrap .action-menu-item{white-space:nowrap}.abs-action-delete,.abs-action-reset,.action-close,.notifications-close,.search-global-field._active .search-global-action{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0}.abs-action-delete:hover,.abs-action-reset:hover,.action-close:hover,.notifications-close:hover,.search-global-field._active .search-global-action:hover{background-color:transparent;border:none;box-shadow:none}.abs-action-default,.abs-action-pattern,.abs-action-primary,.abs-action-quaternary,.abs-action-secondary,.abs-action-tertiary,.action-default,.action-primary,.action-quaternary,.action-secondary,.action-tertiary,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button,.page-actions>button.action-primary,.page-actions>button.primary,button,button.primary,button.secondary,button.tertiary{border:1px solid;border-radius:0;display:inline-block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:1.36;padding:.6rem 1em;text-align:center;vertical-align:baseline}.abs-action-default.disabled,.abs-action-default[disabled],.abs-action-pattern.disabled,.abs-action-pattern[disabled],.abs-action-primary.disabled,.abs-action-primary[disabled],.abs-action-quaternary.disabled,.abs-action-quaternary[disabled],.abs-action-secondary.disabled,.abs-action-secondary[disabled],.abs-action-tertiary.disabled,.abs-action-tertiary[disabled],.action-default.disabled,.action-default[disabled],.action-primary.disabled,.action-primary[disabled],.action-quaternary.disabled,.action-quaternary[disabled],.action-secondary.disabled,.action-secondary[disabled],.action-tertiary.disabled,.action-tertiary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.disabled,.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions .page-actions-buttons>button[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.disabled,.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],.page-actions>button[disabled],button.disabled,button.primary.disabled,button.primary[disabled],button.secondary.disabled,button.secondary[disabled],button.tertiary.disabled,button.tertiary[disabled],button[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-l,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions button,.page-actions>button.action-primary,.page-actions>button.primary{font-size:1.6rem;letter-spacing:.025em;padding-bottom:.6875em;padding-top:.6875em}.abs-action-delete{display:inline-block;font-size:1.6rem;margin-left:1.2rem;padding-top:.7rem;text-decoration:none;vertical-align:middle}.abs-action-delete:after{color:#666;content:'\e630'}.abs-action-delete:hover:after{color:#35302c}.abs-action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.abs-action-default:active,.abs-action-default:focus,.abs-action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.abs-action-primary,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary,button.primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.abs-action-primary:active,.abs-action-primary:focus,.abs-action-primary:hover,.page-actions .page-actions-buttons>button.action-primary:active,.page-actions .page-actions-buttons>button.action-primary:focus,.page-actions .page-actions-buttons>button.action-primary:hover,.page-actions .page-actions-buttons>button.primary:active,.page-actions .page-actions-buttons>button.primary:focus,.page-actions .page-actions-buttons>button.primary:hover,.page-actions>button.action-primary:active,.page-actions>button.action-primary:focus,.page-actions>button.action-primary:hover,.page-actions>button.primary:active,.page-actions>button.primary:focus,.page-actions>button.primary:hover,button.primary:active,button.primary:focus,button.primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-primary.disabled,.abs-action-primary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],button.primary.disabled,button.primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-secondary,button.secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.abs-action-secondary:active,.abs-action-secondary:focus,.abs-action-secondary:hover,button.secondary:active,button.secondary:focus,button.secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-secondary:active,button.secondary:active{background-color:#35302c}.abs-action-tertiary,button.tertiary{background-color:transparent;border-color:transparent;text-shadow:none;color:#008bdb}.abs-action-tertiary:active,.abs-action-tertiary:focus,.abs-action-tertiary:hover,button.tertiary:active,button.tertiary:focus,button.tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#0fa7ff;text-decoration:underline}.abs-action-quaternary,.page-actions .page-actions-buttons>button,.page-actions>button{background-color:transparent;border-color:transparent;text-shadow:none;color:#333}.abs-action-quaternary:active,.abs-action-quaternary:focus,.abs-action-quaternary:hover,.page-actions .page-actions-buttons>button:active,.page-actions .page-actions-buttons>button:focus,.page-actions .page-actions-buttons>button:hover,.page-actions>button:active,.page-actions>button:focus,.page-actions>button:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#1a1a1a}.abs-action-menu,.actions-split .action-menu,.actions-split .dropdown-menu{opacity:0;visibility:hidden;background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:block;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%;transition:opacity .15s ease}.abs-action-menu._active,.actions-split .action-menu._active,.actions-split .dropdown-menu._active{opacity:1;visibility:visible}.abs-action-menu>li,.actions-split .action-menu>li,.actions-split .dropdown-menu>li{display:block;border:none;padding:0;transition:background-color .1s linear}.abs-action-menu>li>a:hover,.actions-split .action-menu>li>a:hover,.actions-split .dropdown-menu>li>a:hover{text-decoration:none}.abs-action-menu>li:hover,.actions-split .action-menu>li:hover,.actions-split .dropdown-menu>li:hover{background-color:#e3e3e3}.abs-action-menu>li:active,.actions-split .action-menu>li:active,.actions-split .dropdown-menu>li:active{background-color:#cacaca}.abs-action-menu .action-menu-item,.abs-action-menu .item,.actions-split .action-menu .action-menu-item,.actions-split .action-menu .item,.actions-split .dropdown-menu .action-menu-item,.actions-split .dropdown-menu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu a.action-menu-item,.actions-split .action-menu a.action-menu-item,.actions-split .dropdown-menu a.action-menu-item{color:#333}.abs-action-menu a.action-menu-item:focus,.actions-split .action-menu a.action-menu-item:focus,.actions-split .dropdown-menu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.abs-action-wrap-triangle{position:relative}.abs-action-wrap-triangle .action-default{width:100%}.abs-action-wrap-triangle .action-default:after,.abs-action-wrap-triangle .action-default:before{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.abs-action-wrap-triangle .action-default:active,.abs-action-wrap-triangle .action-default:focus,.abs-action-wrap-triangle .action-default:hover{box-shadow:none}._keyfocus .abs-action-wrap-triangle .action-default:focus{box-shadow:0 0 0 1px #007bdb}.ie10 .abs-action-wrap-triangle .action-default.disabled,.ie10 .abs-action-wrap-triangle .action-default[disabled],.ie9 .abs-action-wrap-triangle .action-default.disabled,.ie9 .abs-action-wrap-triangle .action-default[disabled]{background-color:#fcfcfc;opacity:1;text-shadow:none}.abs-action-wrap-triangle-right{display:inline-block;padding-right:1.6rem;position:relative}.abs-action-wrap-triangle-right .action-default:after,.abs-action-wrap-triangle-right .action-default:before{border-color:transparent transparent transparent #e3e3e3;border-width:1.7rem 0 1.6rem 1.7rem;left:100%;margin-left:-1.7rem}.abs-action-wrap-triangle-right .action-default:before{border-left-color:#949494;right:-1px}.abs-action-wrap-triangle-right .action-default:active:after,.abs-action-wrap-triangle-right .action-default:focus:after,.abs-action-wrap-triangle-right .action-default:hover:after{border-left-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-right .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-right .action-default[disabled]:after{border-color:transparent transparent transparent #fcfcfc}.abs-action-wrap-triangle-right .action-primary:after{border-color:transparent transparent transparent #eb5202}.abs-action-wrap-triangle-right .action-primary:active:after,.abs-action-wrap-triangle-right .action-primary:focus:after,.abs-action-wrap-triangle-right .action-primary:hover:after{border-left-color:#ba4000}.abs-action-wrap-triangle-left{display:inline-block;padding-left:1.6rem}.abs-action-wrap-triangle-left .action-default{text-indent:-.85rem}.abs-action-wrap-triangle-left .action-default:after,.abs-action-wrap-triangle-left .action-default:before{border-color:transparent #e3e3e3 transparent transparent;border-width:1.7rem 1.7rem 1.6rem 0;margin-right:-1.7rem;right:100%}.abs-action-wrap-triangle-left .action-default:before{border-right-color:#949494;left:-1px}.abs-action-wrap-triangle-left .action-default:active:after,.abs-action-wrap-triangle-left .action-default:focus:after,.abs-action-wrap-triangle-left .action-default:hover:after{border-right-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-left .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-left .action-default[disabled]:after{border-color:transparent #fcfcfc transparent transparent}.abs-action-wrap-triangle-left .action-primary:after{border-color:transparent #eb5202 transparent transparent}.abs-action-wrap-triangle-left .action-primary:active:after,.abs-action-wrap-triangle-left .action-primary:focus:after,.abs-action-wrap-triangle-left .action-primary:hover:after{border-right-color:#ba4000}.action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.action-default:active,.action-default:focus,.action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.action-primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.action-primary:active,.action-primary:focus,.action-primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-primary.disabled,.action-primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.action-secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.action-secondary:active,.action-secondary:focus,.action-secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-secondary:active{background-color:#35302c}.action-quaternary,.action-tertiary{background-color:transparent;border-color:transparent;text-shadow:none}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover,.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none}.action-tertiary{color:#008bdb}.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{color:#0fa7ff;text-decoration:underline}.action-quaternary{color:#333}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover{color:#1a1a1a}.action-close>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.action-close:before{content:'\e62f';transition:color .1s linear}.action-close:hover{cursor:pointer;text-decoration:none}.action-menu{opacity:0;visibility:hidden;background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:block;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%;transition:opacity .15s ease}.action-menu._active{opacity:1;visibility:visible}.action-menu>li{display:block;border:none;padding:0;transition:background-color .1s linear}.action-menu>li>a:hover{text-decoration:none}.action-menu>li:hover{background-color:#e3e3e3}.action-menu>li:active{background-color:#cacaca}.action-menu .action-menu-item,.action-menu .item{display:block;padding:.6875em 1em;cursor:pointer}.action-menu a.action-menu-item{color:#333}.action-menu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.messages .message:last-child{margin:0 0 2rem}.message{background:#fffbbb;border:none;border-radius:0;color:#333;font-size:1.4rem;margin:0 0 1px;padding:1.8rem 4rem 1.8rem 5.5rem;position:relative;text-shadow:none}.message:before{background:0 0;border:0;color:#007bdb;content:'\e61a';font-family:Icons;font-size:1.9rem;font-style:normal;font-weight:400;height:auto;left:1.9rem;line-height:inherit;margin-top:-1.3rem;position:absolute;speak:none;text-shadow:none;top:50%;width:auto}.message-notice:before{color:#007bdb;content:'\e61a'}.message-warning:before{color:#eb5202;content:'\e623'}.message-error{background:#fcc}.message-error:before{color:#e22626;content:'\e632';font-size:1.5rem;left:2.2rem;margin-top:-1rem}.message-success:before{color:#79a22e;content:'\e62d'}.message-spinner:before{display:none}.message-spinner .spinner{font-size:2.5rem;left:1.5rem;position:absolute;top:1.5rem}.message-in-rating-edit{margin-left:1.8rem;margin-right:1.8rem}.modal-popup .action-close,.modal-slide .action-close{color:#736963;position:absolute;right:0;top:0}.modal-popup .action-close:active,.modal-slide .action-close:active{-webkit-transform:none;-ms-transform:none;transform:none}.modal-popup .action-close:active:before,.modal-slide .action-close:active:before{font-size:1.8rem}.modal-popup .action-close:hover:before,.modal-slide .action-close:hover:before{color:#58504b}.modal-popup .action-close:before,.modal-slide .action-close:before{font-size:2rem}.modal-popup .modal-title{font-size:2.4rem;margin-right:6.4rem}.modal-popup .action-close{padding:3rem}.modal-popup .action-close:active,.modal-popup .action-close:focus{background:0 0;padding-right:3.1rem;padding-top:3.1rem}.modal-slide .modal-title{font-size:2.1rem;margin-right:5.7rem}.modal-slide .action-close{padding:2.1rem 2.6rem}.modal-slide .action-close:active{padding-right:2.7rem;padding-top:2.2rem}.modal-slide .page-main-actions{margin-bottom:.6rem;margin-top:2.1rem}.modal-title{font-weight:400;margin-bottom:0;min-height:1em}.spinner{display:inline-block;font-size:4rem;height:1em;margin-right:1.5rem;position:relative;width:1em}.spinner>span:nth-child(1){-webkit-animation-delay:.27s;animation-delay:.27s;-webkit-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}.spinner>span:nth-child(2){-webkit-animation-delay:.36s;animation-delay:.36s;-webkit-transform:rotate(-270deg);-ms-transform:rotate(-270deg);transform:rotate(-270deg)}.spinner>span:nth-child(3){-webkit-animation-delay:.45s;animation-delay:.45s;-webkit-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}.spinner>span:nth-child(4){-webkit-animation-delay:.54s;animation-delay:.54s;-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.spinner>span:nth-child(5){-webkit-animation-delay:.63s;animation-delay:.63s;-webkit-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.spinner>span:nth-child(6){-webkit-animation-delay:.72s;animation-delay:.72s;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.spinner>span:nth-child(7){-webkit-animation-delay:.81s;animation-delay:.81s;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.spinner>span:nth-child(8){-webkit-animation-delay:.9;animation-delay:.9;-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}@-webkit-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}.spinner>span{-webkit-transform:scale(0.4);-ms-transform:scale(0.4);transform:scale(0.4);-webkit-animation-name:fade;animation-name:fade;-webkit-animation-duration:.72s;animation-duration:.72s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-direction:linear;animation-direction:linear;background-color:#fff;border-radius:6px;clip:rect(0 .28571429em .1em 0);height:.1em;margin-top:.5em;position:absolute;width:1em}.ie9 .spinner{background:url(../images/ajax-loader.gif) center no-repeat}.ie9 .spinner>span{display:none}.popup-loading{background:rgba(255,255,255,.8);border-color:#ef672f;color:#ef672f;font-size:14px;font-weight:700;left:50%;margin-left:-100px;padding:100px 0 10px;position:fixed;text-align:center;top:40%;width:200px;z-index:1003}.popup-loading:after{background-image:url(../images/loader-1.gif);content:'';height:64px;left:50%;margin:-32px 0 0 -32px;position:absolute;top:40%;width:64px;z-index:2}.loading-mask,.loading-old{background:rgba(255,255,255,.4);bottom:0;left:0;position:fixed;right:0;top:0;z-index:2003}.loading-mask img,.loading-old img{display:none}.loading-mask p,.loading-old p{margin-top:118px}.loading-mask .loader,.loading-old .loader{background:url(../images/loader-1.gif) 50% 30% no-repeat #e5e2dd;border-radius:5px;bottom:0;color:#5e5b56;font-size:14px;font-weight:700;height:160px;left:0;margin:auto;opacity:.95;position:absolute;right:0;text-align:center;top:0;width:160px}.admin-user{float:right;line-height:1.36;margin-left:.3rem;z-index:390}.admin-user._active .admin__action-dropdown,.admin-user.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin-user .admin__action-dropdown{height:3.4rem;padding:.7rem 2.8rem .4rem 4rem}.admin-user .admin__action-dropdown._active:after,.admin-user .admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:after{border-color:#777 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.3rem;top:50%;transition:all .2s linear;width:0}._active .admin-user .admin__action-dropdown:after,.active .admin-user .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin-user .admin__action-dropdown:before{color:#777;content:'\e600';font-size:2rem;left:1.1rem;margin-top:-1.1rem;position:absolute;top:50%}.admin-user .admin__action-dropdown:hover:before{color:#333}.admin-user .admin__action-dropdown-menu{min-width:20rem;padding-left:1rem;padding-right:1rem}.admin-user .admin__action-dropdown-menu>li>a{padding-right:1.8rem;padding-left:.5em;white-space:nowrap;transition:background-color .1s linear}.admin-user .admin__action-dropdown-menu>li>a:hover{background-color:#e0f6fe;color:#333}.admin-user .admin__action-dropdown-menu>li>a:active{background-color:#c7effd;bottom:-1px;position:relative}.admin-user .admin__action-dropdown-menu .admin-user-name{text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:20rem;overflow:hidden;vertical-align:top}.admin-user-account-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:11.2rem}.search-global{float:right;margin-right:-.3rem;position:relative;z-index:380}.search-global-field{min-width:5rem}.search-global-field._active .search-global-input{background-color:#fff;border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);padding-right:4rem;width:25rem}.search-global-field._active .search-global-action{display:block;height:3.4rem;position:absolute;right:0;text-indent:-100%;top:0;width:5rem;z-index:3}.search-global-field .autocomplete-results{height:3.4rem;position:absolute;right:0;top:0;width:25rem}.search-global-field .search-global-menu{border:1px solid #007bdb;border-top-color:transparent;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin-top:-2px;padding:0;position:absolute;right:0;top:100%;z-index:2}.search-global-field .search-global-menu:after{background-color:#fff;content:'';height:5px;left:0;position:absolute;right:0;top:-5px}.search-global-field .search-global-menu>li{background-color:#fff;border-top:1px solid #ddd;display:block;font-size:1.2rem;padding:.8rem 1.4rem .6rem}.search-global-field .search-global-menu>li._active{background-color:#e0f6fe}.search-global-field .search-global-menu .title{display:block;font-size:1.4rem}.search-global-field .search-global-menu .type{color:#1a1a1a;display:block}.search-global-label{cursor:pointer;height:3.4rem;padding:.8rem 1.4rem .6rem;position:absolute;right:0;top:0;z-index:2}.search-global-label:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.search-global-label:hover:before{color:#000}.search-global-label:before{color:#777;content:'\e60c';font-size:2rem}.search-global-input{background-color:transparent;border:1px solid transparent;font-size:1.4rem;height:3.4rem;padding:.8rem 1.4rem .6rem;position:absolute;right:0;top:0;transition:all .1s linear,width .3s linear;width:5rem;z-index:1}.search-global-action{display:none}.notifications-wrapper{float:right;line-height:1;position:relative}.notifications-wrapper.active{z-index:400}.notifications-wrapper.active .notifications-action{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.notifications-wrapper.active .notifications-action:after{border:none;background-color:#fff;content:'';display:block;height:6px;left:-6px;margin-top:0;position:absolute;right:0;top:100%;width:auto}.notifications-wrapper .admin__action-dropdown-menu{padding:1rem 0 0;width:32rem}.notifications-action{color:#777;height:3.4rem;padding:.8rem 2rem .7rem}.notifications-action:after{display:none}.notifications-action:before{content:'\e607';font-size:1.9rem;margin-right:0}.notifications-action:active:before{position:relative;top:1px}.notifications-action .notifications-counter{background-color:#e22626;border-radius:1em;color:#fff;display:inline-block;font-size:1.1rem;font-weight:700;left:50%;margin-left:.3em;margin-top:-1.1em;padding:.3em .5em;position:absolute;top:50%}.notifications-entry{line-height:1.36;padding:.6rem 2rem .8rem;position:relative;transition:background-color .1s linear}.notifications-entry:hover{background-color:#e0f6fe}.notifications-entry.notifications-entry-last{margin:0 2rem;padding:.3rem 0 1.3rem;text-align:center}.notifications-entry.notifications-entry-last:hover{background-color:transparent}.notifications-entry+.notifications-entry-last{border-top:1px solid #ddd;padding-bottom:.6rem}.notifications-entry ._cutted{cursor:pointer}.notifications-entry ._cutted .notifications-entry-description-start:after{content:'...'}.notifications-entry-title{color:#ef672f;display:block;font-size:1.1rem;font-weight:700;margin-bottom:.7rem;margin-right:1em}.notifications-entry-description{color:#333;font-size:1.1rem;margin-bottom:.8rem}.notifications-entry-description-end{display:none}.notifications-entry-description-end._show{display:inline}.notifications-entry-time{color:#777;font-size:1.1rem}.notifications-close{line-height:1;padding:1rem;position:absolute;right:0;top:.6rem}.notifications-close:before{color:#ccc;content:'\e620';transition:color .1s linear}.notifications-close:hover:before{color:#b3b3b3}.notifications-close:active{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.page-header-actions{padding-top:1.1rem}.page-header-hgroup{padding-right:1.5rem}.page-title{color:#333;font-size:2.8rem;margin-bottom:0}.page-header{padding:1.5rem 3rem}.menu-wrapper{display:inline-block;position:relative;width:8.8rem;z-index:700}.menu-wrapper:before{background-color:#373330;bottom:0;content:'';left:0;position:fixed;top:0;width:8.8rem;z-index:699}.menu-wrapper._fixed{left:0;position:fixed;top:0}.menu-wrapper._fixed~.page-wrapper{margin-left:8.8rem}.menu-wrapper .logo{display:block;height:8.8rem;padding:2.4rem 0 2.2rem;position:relative;text-align:center;z-index:700}._keyfocus .menu-wrapper .logo:focus{background-color:#4a4542;box-shadow:none}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a{background-color:#373330}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a:after{display:none}.menu-wrapper .logo:hover .logo-img{-webkit-filter:brightness(1.1);filter:brightness(1.1)}.menu-wrapper .logo:active .logo-img{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.menu-wrapper .logo .logo-img{height:4.2rem;transition:-webkit-filter .2s linear,filter .2s linear,transform .1s linear;width:3.5rem}.admin__menu li{display:block}.admin__menu .level-0:first-child>a{position:relative}.admin__menu .level-0:first-child>a:after{background-color:#736963;content:'';display:block;height:1px;left:0;margin-left:16%;position:absolute;width:68%}.admin__menu .level-0:first-child._active>a:after{display:none}.admin__menu .level-0._active>a,.admin__menu .level-0:hover>a{color:#f7f3eb}.admin__menu .level-0._active>a{background-color:#524d49}.admin__menu .level-0:hover>a{background-color:#4a4542}.admin__menu .level-0>a{color:#aaa6a0;display:block;font-size:1rem;letter-spacing:.025em;min-height:6.2rem;padding:1.2rem .5rem .5rem;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;transition:background-color .1s linear;word-wrap:break-word;z-index:700}.admin__menu .level-0>a:focus{box-shadow:none}.admin__menu .level-0>a:before{content:'\e63a';display:block;font-size:2.2rem;height:2.2rem}.admin__menu .level-0>.submenu{background-color:#4a4542;box-shadow:0 0 3px #000;left:100%;min-height:calc(8.8rem + 2rem + 100%);padding:2rem 0 0;position:absolute;top:0;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-duration:.3s;transition-timing-function:ease-in-out;visibility:hidden;z-index:697}.admin__menu .level-0>.submenu._overlap{overflow-y:auto;height:100%}.admin__menu .level-0>.submenu._overlap::-webkit-scrollbar{width:0}.admin__menu .level-0._show>.submenu{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);visibility:visible;z-index:698}.admin__menu .level-1{margin-left:1.5rem;margin-right:1.5rem}.admin__menu [class*=level-]:not(.level-0) a{display:block;padding:1.25rem 1.5rem}.admin__menu [class*=level-]:not(.level-0) a:hover{background-color:#403934}.admin__menu [class*=level-]:not(.level-0) a:active{padding-top:1.35rem;padding-bottom:1.15rem;background-color:#322c29}.admin__menu .submenu li{min-width:23.8rem}.admin__menu .submenu a{color:#fcfcfc;transition:background-color .1s linear}.admin__menu .submenu a:focus,.admin__menu .submenu a:hover{box-shadow:none;text-decoration:none}._keyfocus .admin__menu .submenu a:focus{background-color:#403934}._keyfocus .admin__menu .submenu a:active{background-color:#322c29}.admin__menu .submenu .parent{margin-bottom:4.5rem}.admin__menu .submenu .parent .submenu-group-title,.admin__menu .submenu .parent>a{color:#a79d95;display:block;font-size:1.6rem;font-weight:600;margin-bottom:.7rem;padding:1.25rem 1.5rem;pointer-events:none}.admin__menu .submenu .column{display:table-cell}.admin__menu .submenu-title{color:#fff;display:block;font-size:2.2rem;font-weight:600;margin-bottom:4.2rem;margin-left:3rem;margin-right:5.8rem}.admin__menu .submenu-sub-title{color:#fff;display:block;font-size:1.2rem;margin:-3.8rem 5.8rem 3.8rem 3rem}.admin__menu .action-close{padding:2.4rem 2.8rem;position:absolute;right:0;top:0}.admin__menu .action-close:before{color:#a79d95;font-size:1.7rem}.admin__menu .action-close:hover:before{color:#fff}.admin__menu .item-dashboard>a:before{content:'\e604';font-size:1.8rem;padding-top:.4rem}.admin__menu .item-sales>a:before{content:'\e60b'}.admin__menu .item-catalog>a:before{content:'\e608'}.admin__menu .item-customer>a:before{content:'\e603';font-size:2.6rem;position:relative;top:-.4rem}.admin__menu .item-marketing>a:before{content:'\e609';font-size:2rem;padding-top:.2rem}.admin__menu .item-content>a:before{content:'\e602';font-size:2.4rem;position:relative;top:-.2rem}.admin__menu .item-report>a:before{content:'\e60a'}.admin__menu .item-stores>a:before{content:'\e60d';font-size:1.9rem;padding-top:.3rem}.admin__menu .item-system>a:before{content:'\e60e'}.admin__menu-overlay{bottom:0;left:0;position:fixed;right:0;top:0;z-index:697}.store-switcher{color:#333;float:left;font-size:1.3rem;margin-top:.7rem}.store-switcher .admin__action-dropdown{margin-left:.5em;background-color:#f8f8f8}.store-switcher .dropdown{display:inline-block;position:relative}.store-switcher .dropdown:after,.store-switcher .dropdown:before{content:"";display:table}.store-switcher .dropdown:after{clear:both}.store-switcher .dropdown .action.toggle{cursor:pointer;display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle:after{font-family:icons-blank-theme;content:'\e607';font-size:22px;line-height:2;color:#333;overflow:hidden;speak:none;font-weight:400;-webkit-font-smoothing:antialiased;display:inline-block;vertical-align:top;text-align:center;margin:0}.store-switcher .dropdown .action.toggle:active:after,.store-switcher .dropdown .action.toggle:hover:after{color:#333}.store-switcher .dropdown .action.toggle.active{display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle.active:after{font-family:icons-blank-theme;content:'\e618';font-size:22px;line-height:2;color:#333;overflow:hidden;speak:none;font-weight:400;-webkit-font-smoothing:antialiased;display:inline-block;vertical-align:top;text-align:center;margin:0}.store-switcher .dropdown .action.toggle.active:active:after,.store-switcher .dropdown .action.toggle.active:hover:after{color:#333}.store-switcher .dropdown .dropdown-menu{margin:4px 0 0;padding:0;list-style:none;box-sizing:border-box;background:#fff;border:1px solid #ada89e;position:absolute;z-index:100;top:100%;min-width:19.5rem;display:none;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.store-switcher .dropdown .dropdown-menu li{margin:0;padding:0}.store-switcher .dropdown .dropdown-menu li:hover{background:0 0;cursor:pointer}.store-switcher .dropdown.active{overflow:visible}.store-switcher .dropdown.active .dropdown-menu{display:block}.store-switcher .dropdown-menu{left:0;margin-top:.5em;padding-top:.25em}.store-switcher .dropdown-menu li{border:0;cursor:default}.store-switcher .dropdown-menu li:hover{cursor:default}.store-switcher .dropdown-menu li a,.store-switcher .dropdown-menu li span{color:#333;display:block;padding:.5rem 1.3rem}.store-switcher .dropdown-menu li a{text-decoration:none}.store-switcher .dropdown-menu li a:hover{background:#e9e9e9}.store-switcher .dropdown-menu li span{color:#adadad;cursor:default}.store-switcher .dropdown-menu li.current span{background:#eee;color:#333}.store-switcher .dropdown-menu .store-switcher-store a,.store-switcher .dropdown-menu .store-switcher-store span{padding-left:2.6rem}.store-switcher .dropdown-menu .store-switcher-store-view a,.store-switcher .dropdown-menu .store-switcher-store-view span{padding-left:3.9rem}.store-switcher .dropdown-menu .dropdown-toolbar{border-top:1px solid #ebebeb;margin-top:1rem}.store-switcher .dropdown-menu .dropdown-toolbar a:before{content:'\e60e';margin-right:.25em;position:relative;top:1px}.store-switcher-label{font-weight:700}.store-switcher-alt{display:inline-block;position:relative}.store-switcher-alt.active .dropdown-menu{display:block}.store-switcher-alt .dropdown-menu{margin-top:2px;white-space:nowrap}.store-switcher-alt .dropdown-menu ul{list-style:none;margin:0;padding:0}.store-switcher-alt strong{color:#a6a098;display:block;font-size:14px;font-weight:500;line-height:1.333;padding:5px 10px}.store-switcher-alt .store-selected{color:#676056;cursor:pointer;font-size:12px;font-weight:400;line-height:1.333}.store-switcher-alt .store-selected:after{color:#b3b0ad;content:'\e02c';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:400;margin:0 0 0 3px;speak:none;vertical-align:text-top}.store-switcher-alt .store-switcher-store,.store-switcher-alt .store-switcher-website{padding:0}.store-switcher-alt .store-switcher-store:hover,.store-switcher-alt .store-switcher-website:hover{background:0 0}.store-switcher-alt .manage-stores,.store-switcher-alt .store-switcher-all,.store-switcher-alt .store-switcher-store-view{padding:0}.store-switcher-alt .manage-stores>a,.store-switcher-alt .store-switcher-all>a{color:#676056;display:block;font-size:12px;padding:8px 15px;text-decoration:none}.store-switcher-website{margin:5px 0 0}.store-switcher-website>strong{padding-left:13px}.store-switcher-store{margin:1px 0 0}.store-switcher-store>strong{padding-left:20px}.store-switcher-store>ul{margin-top:1px}.store-switcher-store-view:first-child{border-top:1px solid #e5e5e5}.store-switcher-store-view>a{color:#333;display:block;font-size:13px;padding:5px 15px 5px 24px;text-decoration:none}.tooltip{margin-left:.5em}.tooltip .help a,.tooltip .help span{cursor:pointer;display:inline-block;height:22px;position:relative;vertical-align:middle;width:22px;z-index:2}.tooltip .help a:before,.tooltip .help span:before{color:#333;content:'\e633';font-size:1.7rem}.tooltip .help a span,.tooltip .help span span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tooltip .help a:hover{text-decoration:none}.tooltip .tooltip-content{background:#000;border-radius:3px;color:#fff;display:none;margin-left:-19px;margin-top:10px;max-width:200px;padding:4px 8px;position:absolute;text-shadow:none;z-index:20}.tooltip .tooltip-content:before{border-bottom:5px solid #000;border-left:5px solid transparent;border-right:5px solid transparent;content:'';height:0;left:20px;opacity:.8;position:absolute;top:-5px;width:0}.tooltip .tooltip-content.loading{position:absolute}.tooltip .tooltip-content.loading:before{border-bottom-color:rgba(0,0,0,.3)}.tooltip:hover>.tooltip-content{display:block}.page-actions._fixed,.page-main-actions:not(._hidden){background:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;padding:1.5rem}.page-main-actions{margin:0 0 3rem}.page-main-actions._hidden .store-switcher{display:none}.page-actions{float:right}.page-main-actions .page-actions._fixed{left:8.8rem;position:fixed;right:0;top:0;z-index:400}.page-main-actions .page-actions._fixed .page-actions-inner:before{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333;content:attr(data-title);float:left;font-size:2.8rem;margin-top:.3rem;max-width:50%}.page-actions .page-actions-buttons>button,.page-actions>button{float:right;margin-left:1.3rem}.page-actions .page-actions-buttons>button.action-back,.page-actions .page-actions-buttons>button.back,.page-actions>button.action-back,.page-actions>button.back{float:left;-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before{content:'\e626';margin-right:.5em;position:relative;top:1px}.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary{-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .page-actions-buttons>button.save:not(.primary),.page-actions>button.save:not(.primary){-ms-flex-order:1;-webkit-order:1;order:1}.page-actions .page-actions-buttons>button.delete,.page-actions>button.delete{-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .actions-split{float:right;margin-left:1.3rem;-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .actions-split .dropdown-menu .item{display:block}.page-actions-buttons{float:right;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;display:-webkit-flex;display:-ms-flexbox;display:flex}.customer-index-edit .page-actions-buttons{background-color:transparent}.admin__page-nav{background:#f1f1f1;border:1px solid #e3e3e3}.admin__page-nav._collapsed:first-child{border-bottom:none}.admin__page-nav._collapsed._show{border-bottom:1px solid #e3e3e3}.admin__page-nav._collapsed._show ._collapsible{background:#f1f1f1}.admin__page-nav._collapsed._show ._collapsible:after{content:'\e62b'}.admin__page-nav._collapsed._show ._collapsible+.admin__page-nav-items{display:block}.admin__page-nav._collapsed._hide .admin__page-nav-title-messages,.admin__page-nav._collapsed._hide .admin__page-nav-title-messages ._active{display:inline-block}.admin__page-nav+._collapsed{border-bottom:none;border-top:none}.admin__page-nav-title{border-bottom:1px solid #e3e3e3;color:#303030;display:block;font-size:1.4rem;line-height:1.2;margin:0 0 -1px;padding:1.8rem 1.5rem;position:relative;text-transform:uppercase}.admin__page-nav-title._collapsible{background:#fff;cursor:pointer;margin:0;padding-right:3.5rem;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-title._collapsible+.admin__page-nav-items{display:none;margin-top:-1px}.admin__page-nav-title._collapsible:after{content:'\e628';font-size:1.3rem;font-weight:700;position:absolute;right:1.8rem;top:2rem}.admin__page-nav-title._collapsible:hover{background:#f1f1f1}.admin__page-nav-title._collapsible:last-child{margin:0 0 -1px}.admin__page-nav-title strong{font-weight:700}.admin__page-nav-title .admin__page-nav-title-messages{display:none}.admin__page-nav-items{list-style-type:none;margin:0;padding:1rem 0 1.3rem}.admin__page-nav-item{border-left:3px solid transparent;margin-left:.7rem;padding:0;position:relative;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-item:hover{border-color:#e4e4e4}.admin__page-nav-item:hover .admin__page-nav-link{background:#e4e4e4;color:#303030;text-decoration:none}.admin__page-nav-item._active,.admin__page-nav-item.ui-state-active{border-color:#eb5202}.admin__page-nav-item._active .admin__page-nav-link,.admin__page-nav-item.ui-state-active .admin__page-nav-link{background:#fff;border-color:#e3e3e3;border-right:1px solid #fff;color:#303030;margin-right:-1px;font-weight:600}.admin__page-nav-item._loading:before,.admin__page-nav-item.ui-tabs-loading:before{display:none}.admin__page-nav-item._loading .admin__page-nav-item-message-loader,.admin__page-nav-item.ui-tabs-loading .admin__page-nav-item-message-loader{display:inline-block}.admin__page-nav-link{border:1px solid transparent;border-width:1px 0;color:#303030;display:block;font-weight:500;line-height:1.2;margin:0 0 -1px;padding:2rem 4rem 2rem 1rem;transition:border-color .1s ease-out,background-color .1s ease-out;word-wrap:break-word}.admin__page-nav-item-messages,.admin__page-nav-link._changed .admin__page-nav-item-message._changed,.admin__page-nav-link._error .admin__page-nav-item-message._error{display:inline-block}.admin__page-nav-item-messages .admin__page-nav-item-message{position:relative}.admin__page-nav-item-messages .admin__page-nav-item-message:hover{z-index:500}.admin__page-nav-item-messages .admin__page-nav-item-message:hover .admin__page-nav-item-message-tooltip{display:block}.admin__page-nav-item-messages .admin__page-nav-item-message._changed,.admin__page-nav-item-messages .admin__page-nav-item-message._error{display:none}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon{display:inline-block;font-size:1.4rem;padding-left:.8em;vertical-align:top}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon:after,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#666;content:'\e631'}.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#eb5202;content:'\e623'}.admin__page-nav-item-messages .admin__page-nav-item-message-loader{display:none;margin-top:-1rem;position:absolute;right:0;top:50%}.admin__page-nav-item-messages .admin__page-nav-item-message-loader .spinner{font-size:2rem;margin-right:1.5rem}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:3.7rem;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;left:-1rem;line-height:1.36;padding:2rem;position:absolute;text-transform:none;width:27rem;word-break:normal;z-index:2}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after,.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border:15px solid transparent;height:0;width:0;border-top-color:#f1f1f1;content:'';display:block;left:2rem;position:absolute;top:100%;z-index:3}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after{border-top-color:#f1f1f1;margin-top:-1px;z-index:4}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border-top-color:#bfbfbf}.data-grid-filters-actions-wrap{float:right}.data-grid-search-control-wrap{float:left;max-width:45.5rem;position:relative;width:50%}.data-grid-search-control-wrap :-ms-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-webkit-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-moz-placeholder{font-style:italic}.data-grid-search-control-wrap .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:.6rem 2rem .2rem;position:absolute;right:0;top:1px}.data-grid-search-control-wrap .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.data-grid-search-control-wrap .action-submit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.data-grid-search-control-wrap .action-submit:hover:before{color:#1a1a1a}._keyfocus .data-grid-search-control-wrap .action-submit:focus{box-shadow:0 0 0 1px #008bdb}.data-grid-search-control-wrap .action-submit:before{content:'\e60c';font-size:2rem;transition:color .1s linear}.data-grid-search-control-wrap .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.data-grid-search-control-wrap .action-menu{z-index:399;max-height:19.25rem;overflow-y:auto}.data-grid-search-control-wrap .action-menu-item._selected{background-color:#e0f6fe}.data-grid-search-control{padding-right:6rem;width:100%}.data-grid-filters-action-wrap{float:left;padding-left:2rem}.data-grid-filters-action-wrap .action-default{font-size:1.3rem;padding-left:1.7rem;padding-right:2.1rem;padding-top:.7rem}.data-grid-filters-action-wrap .action-default._active{background-color:#fff;border-bottom-color:#fff;border-right-color:#ccc;font-weight:600;margin-left:0;margin-right:0;margin-top:-.1rem;padding-bottom:1.9rem;padding-top:.8rem;position:relative;z-index:4}.data-grid-filters-action-wrap .action-default._active:after{background-color:#eb5202;bottom:100%;content:'';height:3px;left:-1px;position:absolute;right:-1px}.data-grid-filters-action-wrap .action-default:before{content:'\e605';font-size:1.8rem;margin-right:.4rem;position:relative;top:-1px;vertical-align:top}.admin__data-grid-filters-wrap{opacity:0;visibility:hidden;clear:both;font-size:1.3rem;max-height:0;transition:opacity .3s ease}.admin__data-grid-filters-wrap._show{opacity:1;visibility:visible;border-bottom:1px solid #ccc;border-top:1px solid #ccc;margin-bottom:.7rem;max-height:50rem;padding:3.6rem 0 3rem;position:relative;top:-1px;z-index:3}.admin__data-grid-filters-wrap._show .admin__data-grid-filters,.admin__data-grid-filters-wrap._show .admin__data-grid-filters-footer{display:block}.admin__data-grid-filters-wrap .admin__form-field-label,.admin__data-grid-filters-wrap .admin__form-field-legend{display:block;font-weight:700;margin:0 0 .3rem;text-align:left}.admin__data-grid-filters-wrap .admin__form-field{float:left;margin-bottom:2em;margin-left:0;padding-left:2rem;padding-right:2rem;width:25%}.admin__data-grid-filters-wrap .admin__form-field:nth-child(5n+1){clear:both}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field{float:none;margin-bottom:1.5rem;padding-left:0;padding-right:0;width:auto}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field:last-child{margin-bottom:0}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-label{border:1px solid transparent;float:left;font-weight:400;line-height:1.36;margin-bottom:0;padding-bottom:.6rem;padding-right:1em;padding-top:.6rem;width:25%}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-control{margin-left:25%}.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text,.admin__data-grid-filters-wrap .admin__form-field-label{font-size:1.3rem}.admin__data-grid-filters-wrap .admin__control-select{padding-top:.5rem;height:3.2rem}.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text.hasDatepicker{width:100%}.admin__data-grid-filters{display:none;margin-left:-2rem;margin-right:-2rem}.admin__filters-legend{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-filters-footer{display:none;font-size:1.4rem}.admin__data-grid-filters-footer .admin__footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-filters-footer .admin__footer-secondary-actions{float:left;width:50%}.admin__data-grid-filters-current{border-bottom:.1rem solid #ccc;border-top:.1rem solid #ccc;display:none;font-size:1.3rem;margin-bottom:.9rem;padding-bottom:.8rem;padding-top:1.1rem;width:100%}.admin__data-grid-filters-current._show{display:table;position:relative;top:-1px;z-index:3}.admin__data-grid-filters-current._show+.admin__data-grid-filters-wrap._show{margin-top:-1rem}.admin__current-filters-actions-wrap,.admin__current-filters-list-wrap,.admin__current-filters-title-wrap{display:table-cell;vertical-align:top}.admin__current-filters-title{margin-right:1em;white-space:nowrap}.admin__current-filters-list-wrap{width:100%}.admin__current-filters-list{margin-bottom:0}.admin__current-filters-list>li{display:inline-block;font-weight:600;margin:0 1rem .5rem;padding-right:2.6rem;position:relative}.admin__current-filters-list .action-remove{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0;line-height:1;position:absolute;right:0;top:1px}.admin__current-filters-list .action-remove:hover{background-color:transparent;border:none;box-shadow:none}.admin__current-filters-list .action-remove:hover:before{color:#949494}.admin__current-filters-list .action-remove:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__current-filters-list .action-remove:before{color:#adadad;content:'\e620';font-size:1.6rem;transition:color .1s linear}.admin__current-filters-list .action-remove>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__current-filters-actions-wrap .action-clear{border:none;padding-bottom:0;padding-top:0;white-space:nowrap}.admin__data-grid-pager-wrap{text-align:right}.admin__data-grid-pager{display:inline-block;margin-left:3rem}.admin__data-grid-pager .admin__control-text::-webkit-inner-spin-button,.admin__data-grid-pager .admin__control-text::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.admin__data-grid-pager .admin__control-text{-moz-appearance:textfield;text-align:center;width:4.4rem}.action-next,.action-previous{width:4.4rem}.action-next:before,.action-previous:before{font-weight:700}.action-next>span,.action-previous>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-previous{margin-right:2.5rem;text-indent:-.25em}.action-previous:before{content:'\e629'}.action-next{margin-left:1.5rem;text-indent:.1em}.action-next:before{content:'\e62a'}.admin__data-grid-action-bookmarks{opacity:.98}.admin__data-grid-action-bookmarks .admin__action-dropdown-text:after{right:-6px;left:0}.admin__data-grid-action-bookmarks._active{z-index:290}.admin__data-grid-action-bookmarks .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;max-width:15rem;min-width:4.9rem;vertical-align:top;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown:before{content:'\e60f'}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu{font-size:1.3rem;left:0;padding:1rem 0;right:auto}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li{padding:0 5rem 0 0;position:relative;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action){transition:background-color .1s linear}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action):hover{background-color:#e3e3e3}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item{max-width:23rem;min-width:18rem;white-space:normal;word-break:break-all}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit{display:none;padding-bottom:1rem;padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit .action-dropdown-menu-item-actions{padding-bottom:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action{padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action+.action-dropdown-menu-item-last{padding-top:.5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a{color:#008bdb;text-decoration:none;display:inline-block;padding-left:1.1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a:hover{color:#0fa7ff;text-decoration:underline}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-last{padding-bottom:0}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item{display:none}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item-edit{display:block}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._active .action-dropdown-menu-link{font-weight:600}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{font-size:1.3rem;min-width:15rem;width:calc(100% - 4rem)}.ie9 .admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{width:15rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-actions{border-left:1px solid #fff;bottom:0;position:absolute;right:0;top:0;width:5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-link{color:#333;display:block;text-decoration:none;padding:1rem 1rem 1rem 2.1rem}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit,.admin__data-grid-action-bookmarks .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;vertical-align:top}.admin__data-grid-action-bookmarks .action-delete:hover,.admin__data-grid-action-bookmarks .action-edit:hover,.admin__data-grid-action-bookmarks .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before{font-size:1.7rem}.admin__data-grid-action-bookmarks .action-delete>span,.admin__data-grid-action-bookmarks .action-edit>span,.admin__data-grid-action-bookmarks .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit{padding:.6rem 1.4rem}.admin__data-grid-action-bookmarks .action-delete:active,.admin__data-grid-action-bookmarks .action-edit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__data-grid-action-bookmarks .action-submit{padding:.6rem 1rem .6rem .8rem}.admin__data-grid-action-bookmarks .action-submit:active{position:relative;right:-1px}.admin__data-grid-action-bookmarks .action-submit:before{content:'\e625'}.admin__data-grid-action-bookmarks .action-delete:before{content:'\e630'}.admin__data-grid-action-bookmarks .action-edit{padding-top:.8rem}.admin__data-grid-action-bookmarks .action-edit:before{content:'\e631'}.admin__data-grid-action-columns._active{opacity:.98;z-index:290}.admin__data-grid-action-columns .admin__action-dropdown:before{content:'\e60e';font-size:1.8rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-columns-menu{color:#303030;font-size:1.3rem;overflow:hidden;padding:2.2rem 3.5rem 1rem;z-index:1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-header{border-bottom:1px solid #d1d1d1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-content{width:49.2rem}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-footer{border-top:1px solid #d1d1d1;padding-top:2.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content{max-height:22.85rem;overflow-y:auto;padding-top:1.5rem;position:relative;width:47.4rem}.admin__data-grid-action-columns-menu .admin__field-option{height:1.9rem;float:left;margin-bottom:1.5rem;padding:0 1rem 0 0;width:15.8rem}.admin__data-grid-action-columns-menu .admin__field-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-header{padding-bottom:1.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-footer{padding:1rem 0 2rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-secondary-actions{float:left;margin-left:-1em}.admin__data-grid-action-export._active{opacity:.98;z-index:290}.admin__data-grid-action-export .admin__action-dropdown:before{content:'\e635';font-size:1.7rem;left:.3rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-export-menu{padding-left:2rem;padding-right:2rem;padding-top:1rem}.admin__data-grid-action-export-menu .admin__action-dropdown-footer-main-actions{padding-bottom:2rem;padding-top:2.5rem;white-space:nowrap}.admin__data-grid-header{font-size:1.4rem}.admin__data-grid-header-row+.admin__data-grid-header-row{margin-top:1.1rem}.admin__data-grid-header-row:last-child{margin-bottom:2rem}.admin__data-grid-header-row .action-select-wrap{display:block}.admin__data-grid-header-row .action-select{width:100%}.admin__data-grid-actions-wrap{float:right;margin-left:1.1rem;margin-top:-.5rem;text-align:right}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap{position:relative;text-align:left}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._hide+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:first-child:after{display:none}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown-menu{border-color:#adadad}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after{border-left:1px solid #ccc;content:'';height:3.3rem;left:0;position:absolute;top:.5rem;z-index:3}.admin__data-grid-actions-wrap .admin__action-dropdown{padding-bottom:1.7rem;padding-top:1.2rem}.admin__data-grid-actions-wrap .admin__action-dropdown:after{margin-top:-.4rem}.admin__data-grid-outer-wrap{position:relative}.admin__data-grid-wrap{margin-bottom:2rem;max-width:100%;overflow-x:auto;padding-top:0}.admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:0;right:0;top:0;position:absolute;z-index:400}.admin__data-grid-loading-mask .grid-loader{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid{border-bottom:.1rem solid #d6d6d6;border-left:none;border-right:none;border-top:none;box-sizing:border-box;font-size:1.3rem;max-width:100%;margin-bottom:0;width:100%}.data-grid thead{background-color:transparent;color:#333}.data-grid tfoot th{padding:1rem}.data-grid tr:nth-child(even) td{background-color:#f5f5f5}.data-grid tr:nth-child(even) td._dragging{background-color:rgba(245,245,245,.95)}.data-grid tr.data-grid-tr-no-data:hover td{cursor:default;background-color:#fff}.data-grid tbody tr:active td{background-color:#e0f6fe}.data-grid tbody tr:hover td{background-color:#e5f7fe}.data-grid tbody tr ._clickable,.data-grid tbody tr._clickable{cursor:pointer}.data-grid td,.data-grid th{font-size:1.3rem;line-height:1.36;transition:background-color .1s linear;vertical-align:top}.data-grid td{background-color:#fff;border-left:.1rem dashed #d6d6d6;border-right:.1rem dashed #d6d6d6;color:#303030;padding:1rem}.data-grid td:first-child{border-left-style:solid}.data-grid td:last-child{border-right-style:solid}.data-grid td._dragging{color:rgba(48,48,48,.95);background-color:rgba(255,255,255,.95)}.data-grid td._dragging a{color:rgba(0,139,219,.95)}.data-grid td._dragging a:hover{color:rgba(15,167,255,.95)}.data-grid td .action-select-wrap{position:static}.data-grid td .action-select{color:#008bdb;text-decoration:none;background-color:transparent;border:none;font-size:1.3rem;padding:0 3rem 0 0}.data-grid td .action-select:hover{color:#0fa7ff;text-decoration:underline}.data-grid td .action-select:hover:after{border-color:#0fa7ff transparent transparent}.data-grid td .action-select:after{border-color:#008bdb transparent transparent;margin:.6rem 0 0 .7rem;right:auto;top:auto}.data-grid td .action-select:before{display:none}.data-grid td .action-menu{left:auto;min-width:10rem;right:0;top:auto;z-index:1}.data-grid th{background-color:#514943;border:.1rem solid #8a837f;border-left-color:transparent;color:#fff;font-weight:600;padding:0;text-align:left}.data-grid th:first-child{border-left-color:#8a837f}.data-grid th._dragover-left{box-shadow:inset 3px 0 0 0 #fff}.data-grid th._dragover-right{box-shadow:inset -3px 0 0 0 #fff}.data-grid .data-grid-th{color:#fff;padding:1rem;vertical-align:middle}.data-grid .data-grid-th._draggable{cursor:-webkit-grab;cursor:grab}.data-grid .data-grid-th._sortable{background-clip:padding-box;cursor:pointer;padding-right:2.7rem;position:relative;transition:background-color .1s linear;z-index:1}.data-grid .data-grid-th._sortable:focus,.data-grid .data-grid-th._sortable:hover{background-color:#5f564f}.data-grid .data-grid-th._sortable:active{padding-bottom:.9rem;padding-top:1.1rem}.data-grid .data-grid-th.required>span:after{content:'*';margin-left:.3rem;color:#f38a5e}.data-grid .data-grid-checkbox-cell{padding:0;width:5.2rem}.data-grid .data-grid-checkbox-cell:hover{cursor:default}.data-grid .data-grid-thumbnail-cell{width:7rem;text-align:center}.data-grid .data-grid-thumbnail-cell img{border:1px solid #d6d6d6;max-width:5rem}.data-grid .data-grid-multiselect-cell{padding:1rem 1rem .9rem;text-align:center;vertical-align:middle}.data-grid .data-grid-actions-cell{padding-left:2rem;padding-right:2rem;width:1%}.data-grid .data-grid-row-parent._active>td{background-color:#fff1ad;border-bottom:.1rem solid #d6d6d6;border-left-color:transparent;border-right-color:transparent;border-top:.1rem solid #d6d6d6}.data-grid .data-grid-row-parent._active>td:first-child{border-left-color:#d6d6d6}.data-grid .data-grid-row-parent._active>td:last-child{border-right-color:#d6d6d6}.data-grid .data-grid-row-child{display:none}.data-grid .data-grid-row-child._active{display:table-row}.data-grid .data-grid-row-child._active+tr:not(.data-grid-row-child) td{border-top:.1rem solid #d6d6d6}.data-grid .data-grid-row-child td,.data-grid .data-grid-row-parent~.data-grid-row-child td{background-color:#fffbe6;border-color:transparent}.data-grid .data-grid-row-child td:first-child,.data-grid .data-grid-row-parent~.data-grid-row-child td:first-child{border-left-color:#d6d6d6}.data-grid .data-grid-row-child td:last-child,.data-grid .data-grid-row-parent~.data-grid-row-child td:last-child{border-right-color:#d6d6d6}.data-grid._hidden{display:none}.data-grid.data-grid-draggable{background-color:#000}.data-grid._dragging-copy{background-color:#fff;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;opacity:.95;position:fixed;top:0;z-index:400}.data-grid._dragging-copy .data-grid-th{border:1px solid #007bdb;border-bottom:none}.data-grid._dragging-copy .data-grid-th,.data-grid._dragging-copy .data-grid-th._sortable{cursor:-webkit-grabbing;cursor:grabbing}.data-grid._dragging-copy tbody tr:last-child td{border-bottom:1px solid #007bdb}.data-grid._dragging-copy tbody td{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid-th._sortable._ascend:before,.data-grid-th._sortable._descend:before{position:absolute;right:1rem;top:50%;margin-top:-.75em}.data-grid-th._sortable._ascend:before{content:'\2193'}.data-grid-th._sortable._descend:before{content:'\2191'}.data-grid-checkbox-cell-inner{display:block;padding:1.1rem 1.8rem .9rem;text-align:right}.data-grid-checkbox-cell-inner:hover{cursor:pointer}.data-grid-row-parent._active>td .data-grid-checkbox-cell-inner:before{content:'\e62b'}.data-grid-row-parent>td .data-grid-checkbox-cell-inner{padding-left:3.7rem;position:relative}.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before{content:'\e628';font-size:1rem;font-weight:700;left:1.35rem;position:absolute;top:1.6rem}.data-grid-th._col-xs{width:1%}.admin__control-addon [class*=admin__control-]+[class*=admin__addon-]:before,.admin__control-file-label :before,.admin__control-multiselect,.admin__control-select,.admin__control-text,.admin__control-textarea{background-color:#fff;border-radius:1px;border:1px solid #adadad;color:#303030;font-size:1.4rem;font-weight:400;line-height:1.36;height:auto;width:auto;padding:.6rem 1rem;transition:border-color .1s linear;vertical-align:baseline}.admin__control-multiselect:hover,.admin__control-select:hover,.admin__control-text:hover,.admin__control-textarea:hover{border-color:#878787}.admin__control-addon [class*=admin__control-]:focus+[class*=admin__addon-]:before,.admin__control-file:active+.admin__control-file-label :before,.admin__control-file:focus+.admin__control-file-label :before,.admin__control-multiselect:focus,.admin__control-select:focus,.admin__control-text:focus,.admin__control-textarea:focus{border-color:#007bdb;box-shadow:none;outline:0}.admin__control-addon [class*=admin__control-][disabled]+[class*=admin__addon-]:before,.admin__control-file[disabled]+.admin__control-file-label :before,.admin__control-multiselect[disabled],.admin__control-select[disabled],.admin__control-text[disabled],.admin__control-textarea[disabled]{background-color:#e9e9e9;border-color:#adadad;color:#303030;opacity:.5;cursor:not-allowed}.admin__fieldset>.admin__field.admin__field-wide[class]>.admin__field-control{float:none;clear:left;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label{display:block;line-height:1.4rem;margin-bottom:.86rem;margin-top:-.14rem;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label:before{display:none}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span{padding-left:1.5rem}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span:after{left:0;margin-left:30px;top:.2rem}.admin__control-checkbox,.admin__control-radio{cursor:pointer;opacity:.01;overflow:hidden;position:absolute;vertical-align:top}.admin__control-checkbox:after,.admin__control-radio:after{display:none}.admin__control-checkbox+label,.admin__control-radio+label{cursor:pointer;display:inline-block}.admin__control-checkbox+label:before,.admin__control-radio+label:before{background-color:#fff;border:1px solid #adadad;color:transparent;float:left;height:1.6rem;text-align:center;vertical-align:top;width:1.6rem}.admin__control-checkbox+.admin__field-label,.admin__control-radio+.admin__field-label{padding-left:2.6rem}.admin__control-checkbox+.admin__field-label:before,.admin__control-radio+.admin__field-label:before{margin:1px 1rem 0 -2.6rem}.admin__control-checkbox:checked+label:before,.admin__control-radio:checked+label:before{color:#514943}.admin__control-checkbox.disabled+label,.admin__control-checkbox[disabled]+label,.admin__control-radio.disabled+label,.admin__control-radio[disabled]+label{cursor:default;color:#303030;opacity:.5}.admin__control-checkbox.disabled+label:before,.admin__control-checkbox[disabled]+label:before,.admin__control-radio.disabled+label:before,.admin__control-radio[disabled]+label:before{background-color:#e9e9e9;border-color:#adadad;cursor:default}._keyfocus .admin__control-checkbox:not(.disabled):focus+label:before,._keyfocus .admin__control-checkbox:not([disabled]):focus+label:before,._keyfocus .admin__control-radio:not(.disabled):focus+label:before,._keyfocus .admin__control-radio:not([disabled]):focus+label:before{border-color:#007bdb}.admin__control-checkbox:not(.disabled):hover+label:before,.admin__control-checkbox:not([disabled]):hover+label:before,.admin__control-radio:not(.disabled):hover+label:before,.admin__control-radio:not([disabled]):hover+label:before{border-color:#878787}.admin__control-radio+label:before{border-radius:1.6rem;content:'\e637';font-size:1rem;transition:border-color .1s linear,color .1s ease-in}.admin__control-radio.admin__control-radio+label:before{line-height:140%}.admin__control-radio:checked:not(.disabled):hover,.admin__control-radio:checked:not(.disabled):hover+label,.admin__control-radio:checked:not([disabled]):hover,.admin__control-radio:checked:not([disabled]):hover+label{cursor:default}.admin__control-radio:checked:not(.disabled):hover+label:before,.admin__control-radio:checked:not([disabled]):hover+label:before{border-color:#adadad}.admin__control-checkbox+label:before{border-radius:1px;content:'';font-size:0;transition:font-size .1s ease-out,color .1s ease-out,border-color .1s linear}.admin__control-checkbox:checked+label:before{content:'\e62d';font-size:1.1rem;line-height:125%}.admin__control-checkbox:not(:checked)._indeterminate+label:before,.admin__control-checkbox:not(:checked):indeterminate+label:before{color:#514943;content:'-';font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700}input[type=checkbox].admin__control-checkbox,input[type=radio].admin__control-checkbox{position:absolute;margin:0}.admin__control-select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-repeat:no-repeat;background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#adadad,#adadad);background-position:calc(100% - 12px) -34px,100%,calc(100% - 33px) 0;background-size:auto,3.3rem 100%,1px 100%;padding-right:4.4rem;transition:border-color .1s linear}.admin__control-select:hover{border-color:#878787;cursor:pointer}.admin__control-select:focus{background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#007bdb,#007bdb);background-position:calc(100% - 12px) 13px,100%,calc(100% - 33px) 0;border-color:#007bdb}.admin__control-select::-ms-expand{display:none}.ie9 .admin__control-select{background-image:none;padding-right:1rem}option:empty{display:none}.admin__control-multiselect{height:auto;padding:.6rem 1rem}.admin__control-file-wrapper{display:inline-block;padding:.5rem 1rem;position:relative;z-index:1}.admin__control-file-label :before{content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__control-file{position:relative;z-index:1;background:0 0;border:0;width:auto}.admin__control-support-text{border:1px solid transparent;display:inline-block;font-size:1.4rem;line-height:1.36;padding-top:.6rem;padding-bottom:.6rem}.admin__control-support-text+[class*=admin__control-],[class*=admin__control-]+.admin__control-support-text{margin-left:.7rem}.admin__control-textarea{height:8.48rem;line-height:1.18;padding-top:.8rem;resize:vertical}.admin__control-addon{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;display:inline-flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;position:relative;width:100%;z-index:1}.admin__control-addon>[class*=admin__addon-],.admin__control-addon>[class*=admin__control-]{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;position:relative;z-index:1}.admin__control-addon [class*=admin__control-]{appearence:none;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;box-shadow:none;background-color:transparent;border-color:transparent;-webkit-order:1;-ms-flex-order:1;order:1;vertical-align:top;width:auto}.admin__control-addon [class*=admin__control-] :focus{box-shadow:0}.admin__control-addon [class*=admin__control-]+[class*=admin__addon-]{padding-left:1rem;position:static!important;z-index:0}.admin__control-addon [class*=admin__control-]+[class*=admin__addon-]>*{position:relative;vertical-align:top;z-index:2}.admin__control-addon [class*=admin__control-]+[class*=admin__addon-]:before{bottom:0;box-sizing:border-box;content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__addon-prefix,.admin__addon-suffix{border:0;box-sizing:border-box;color:#858585;display:inline-block;font-size:1.4rem;font-weight:400;height:3.3rem;line-height:3.3rem;padding:0}.admin__addon-suffix{-webkit-order:3;-ms-flex-order:3;order:3}.admin__addon-suffix:last-child{padding-right:1rem}.admin__addon-prefix{-webkit-order:0;-ms-flex-order:0;order:0}.ie9 .admin__control-addon:after{clear:both;content:'';display:block;height:0;overflow:hidden}.ie9 .admin__addon{min-width:0;overflow:hidden;text-align:right;white-space:nowrap;width:auto}.ie9 .admin__addon [class*=admin__control-]{display:inline}.ie9 .admin__addon-prefix{float:left}.ie9 .admin__addon-suffix{float:right}.admin__control-table-wrapper{max-width:100%;overflow-x:auto;overflow-y:hidden}.admin__control-table{width:100%}.admin__control-table thead{background-color:transparent}.admin__control-table tbody td{vertical-align:middle}.admin__control-table tfoot th{padding-bottom:1.3rem}.admin__control-table tr:last-child td,.admin__control-table tr:last-child th{border-bottom:none}.admin__control-table td,.admin__control-table th{background-color:#efefef;border:0;border-bottom:1px solid #fff;padding:1.3rem 2.5rem 1.3rem 0;text-align:left;vertical-align:top}.admin__control-table td:first-child,.admin__control-table th:first-child{padding-left:1.5rem}.admin__control-table th{border:0;vertical-align:bottom;color:#303030;font-size:1.4rem;font-weight:600;padding-bottom:0}.admin__control-table th._required span:after{color:#eb5202;content:'*'}.admin__control-table .control-table-actions-th{white-space:nowrap}.admin__control-table .control-table-actions-cell{padding-top:1.8rem;text-align:center;width:1%}.admin__control-table .col-draggable{padding-top:2.2rem;width:1%}.admin__control-table .action-delete,.admin__control-table .action-delete:hover{background-color:transparent;border-color:transparent;box-shadow:none}.admin__control-table .action-delete:before{content:'\e630'}.admin__control-table .action-delete>span{display:none}.admin__field-tooltip{display:inline-block;margin-top:5px;overflow:visible;vertical-align:top;width:0}.admin__field-tooltip:hover{position:relative;z-index:500}.admin__field-option .admin__field-tooltip{margin-top:10px}.admin__field-tooltip .admin__field-tooltip-action{margin-left:20px;display:inline-block;text-decoration:none}.admin__field-tooltip .admin__field-tooltip-action:before{font-family:Icons;content:'\e633';font-size:2.2rem;line-height:1;color:#514943;overflow:hidden;speak:none;font-weight:400;-webkit-font-smoothing:antialiased;display:inline-block;vertical-align:middle;text-align:center}.admin__field-tooltip .admin__control-text:focus+.admin__field-tooltip-content,.admin__field-tooltip:hover .admin__field-tooltip-content{display:block}.admin__field-tooltip .admin__field-tooltip-content{bottom:42px;display:none;right:-70px}.admin__field-tooltip .admin__field-tooltip-content:after,.admin__field-tooltip .admin__field-tooltip-content:before{border:16px solid transparent;height:0;width:0;border-top-color:#afadac;content:"";display:block;position:absolute;right:20px;top:100%;z-index:3}.admin__field-tooltip .admin__field-tooltip-content:after{border-top-color:#fffbbb;margin-top:-1px;z-index:4}.abs-admin__field-tooltip-content,.admin__field-tooltip .admin__field-tooltip-content{box-shadow:0 2px 8px 0 rgba(0,0,0,.3);background:#fffbbb;border-radius:1px;border:1px solid #afadac;padding:15px 25px;position:absolute;width:320px;z-index:1}.admin__fieldset{border:0;margin:0;min-width:0;padding:0}.admin__fieldset>.admin__field{border:0;margin:0 0 0 -30px;padding:0}.admin__fieldset>.admin__field:after{content:"";display:table;clear:both}.admin__fieldset>.admin__field>.admin__field-control{width:calc((100%) * .4444444444444444 - 30px);float:left;margin-left:30px}.admin__fieldset>.admin__field>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px}.admin__form-field{border:0;margin:0;padding:0}.admin__field-control .admin__control-text,.admin__field-control .admin__control-textarea,.admin__form-field-control .admin__control-text,.admin__form-field-control .admin__control-textarea{width:100%}.admin__field-label{color:#303030;margin:0;text-align:right}.admin__field-label+br{display:none}.admin__field:not(.admin__field-option)>.admin__field-label{font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:3.2rem;padding:0;white-space:nowrap;word-wrap:break-word}.admin__field:not(.admin__field-option)>.admin__field-label:before{opacity:0;visibility:hidden;content:'.';margin-left:-7px;overflow:hidden}.admin__field:not(.admin__field-option)>.admin__field-label span{display:inline-block;line-height:1.2;vertical-align:middle;white-space:normal}._required>.admin__field-label span:after{color:#eb5202;content:'*';display:inline-block;font-size:1.6rem;font-weight:500;line-height:1;margin-left:10px;position:absolute;top:1.2rem;z-index:1}._disabled>.admin__field-label{color:#999}.admin__field{margin-bottom:0}.admin__field+.admin__field{margin-top:1.5rem}.admin__field:not(.admin__field-option)~.admin__field-option{margin-top:.5rem}.admin__field.admin__field-option~.admin__field-option{margin-top:.9rem}.admin__field~.admin__field-option:last-child{margin-bottom:.8rem}.admin__fieldset>.admin__field{margin-bottom:3rem;position:relative}.admin__field[data-config-scope]:before{color:gray;content:attr(data-config-scope);display:inline-block;font-size:1.2rem;left:calc((100%) * .7777777777777778 - 30px);line-height:3.2rem;margin-left:60px;position:absolute;width:calc((100%) * .2222222222222222 - 30px)}.admin__field-control .admin__field[data-config-scope]:nth-child(n+2):before{content:''}.admin__field._error .admin__field-control [class*=admin__addon-]:before,.admin__field._error .admin__field-control>[class*=admin__control-]{border-color:#e22626}.admin__field-control+.admin__field-control{margin-top:1.5rem}.admin__field-error{background:#fffbbb;border:1px solid #ee7d7d;box-sizing:border-box;color:#555;display:block;font-size:1.2rem;font-weight:400;line-height:1.2;margin:.2rem 0 0;padding:.8rem 1rem .9rem}.admin__field-note{color:#303030;font-size:1.2rem;margin:10px 0 0;padding:0}.admin__field-option{padding-top:.8rem}.admin__field-option .admin__field-label{text-align:left}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2),.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1){display:inline-block}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option{display:inline-block;margin-left:41px;margin-top:0}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option:before,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option:before{background:#cacaca;content:'';display:inline-block;height:20px;margin-left:-20px;position:absolute;width:1px}.admin__field-value{padding-top:.8rem}.admin__control-fields>.admin__field:first-child,[class*=admin__control-grouped]>.admin__field:first-child{position:static}.admin__control-fields>.admin__field:first-child>.admin__field-label,[class*=admin__control-grouped]>.admin__field:first-child>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px;cursor:pointer;left:0;opacity:0;position:absolute;top:0}.admin__control-fields .admin__field-label~.admin__field-control{width:100%}[class*=admin__control-grouped]{box-sizing:border-box;display:table;table-layout:fixed;width:100%}[class*=admin__control-grouped]>.admin__field{display:table-cell;vertical-align:top;width:50%}[class*=admin__control-grouped]>.admin__field>.admin__field-control{float:none;width:100%}[class*=admin__control-grouped]>.admin__field:nth-child(n+2){padding-left:20px}[class*=admin__control-grouped]>.admin__field:nth-child(n+2):not(.admin__field-option) .admin__field-label{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.admin__legend{float:left;position:static;width:100%}.admin__legend+br{display:block;height:0;overflow:hidden;clear:left}.message{margin-bottom:3rem}.message-icon-top:before{margin-top:0;top:1.8rem}.nav{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;display:none;padding:2.2rem 1.5rem 0 0}.nav .btn-group,.nav-bar-outer-actions{float:right;margin-bottom:1.7rem}.nav .btn-group .btn-wrap,.nav-bar-outer-actions .btn-wrap{float:right;margin-left:.5rem;margin-right:.5rem}.nav .btn-group .btn-wrap .btn,.nav-bar-outer-actions .btn-wrap .btn{padding-left:.5rem;padding-right:.5rem}.nav-bar-outer-actions{margin-top:-10.6rem;padding-right:1.5rem}.btn-wrap-try-again{width:9.5rem}.btn-wrap-next,.btn-wrap-prev{width:8.5rem}.nav-bar{counter-reset:i;float:left;margin:0 1rem 1.7rem 0;padding:0;position:relative;white-space:nowrap}.nav-bar:before{background-color:#d4d4d4;background-repeat:repeat-x;background-image:linear-gradient(to bottom,#d1d1d1 0,#d4d4d4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#d4d4d4', GradientType=0);border-bottom:1px solid #d9d9d9;border-top:1px solid #bfbfbf;content:'';height:1rem;left:5.15rem;position:absolute;right:5.15rem;top:.7rem}.nav-bar>li{display:inline-block;font-size:0;position:relative;vertical-align:top;width:10.3rem}.nav-bar>li:first-child:after{display:none}.nav-bar>li:after{background-color:#514943;content:'';height:.5rem;left:calc(-50% + .25rem);position:absolute;right:calc(50% + .7rem);top:.9rem}.nav-bar>li.disabled:before,.nav-bar>li.ui-state-disabled:before{bottom:0;content:'';left:0;position:absolute;right:0;top:0;z-index:1}.nav-bar>li.active~li:after,.nav-bar>li.ui-state-active~li:after{display:none}.nav-bar>li.active~li a:after,.nav-bar>li.ui-state-active~li a:after{background-color:transparent;border-color:transparent;color:#a6a6a6}.nav-bar>li.active a,.nav-bar>li.ui-state-active a{color:#000}.nav-bar>li.active a:hover,.nav-bar>li.ui-state-active a:hover{cursor:default}.nav-bar>li.active a:after,.nav-bar>li.ui-state-active a:after{background-color:#fff;content:''}.nav-bar a{color:#514943;display:block;font-size:1.2rem;font-weight:600;line-height:1.2;overflow:hidden;padding:3rem .5em 0;position:relative;text-align:center;text-overflow:ellipsis}.nav-bar a:hover{text-decoration:none}.nav-bar a:after{background-color:#514943;border:.4rem solid #514943;border-radius:100%;color:#fff;content:counter(i);counter-increment:i;height:1.5rem;left:50%;line-height:.6;margin-left:-.8rem;position:absolute;right:auto;text-align:center;top:.4rem;width:1.5rem}.nav-bar a:before{background-color:#d6d6d6;border:1px solid transparent;border-bottom-color:#d9d9d9;border-radius:100%;border-top-color:#bfbfbf;content:'';height:2.3rem;left:50%;line-height:1;margin-left:-1.2rem;position:absolute;top:0;width:2.3rem}.tooltip{display:block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.19rem;font-weight:400;line-height:1.4;opacity:0;position:absolute;visibility:visible;z-index:10}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-4px;padding:8px 0}.tooltip.right{margin-left:4px;padding:0 8px}.tooltip.bottom{margin-top:4px;padding:8px 0}.tooltip.left{margin-left:-4px;padding:0 8px}.tooltip-inner{background-color:#fff;border:1px solid #adadad;border-radius:0;box-shadow:1px 1px 1px #ccc;color:#41362f;max-width:20rem;padding:.5em 1em;text-decoration:none}.tooltip-arrow,.tooltip-arrow:after{border:solid transparent;height:0;position:absolute;width:0}.tooltip-arrow:after{content:'';position:absolute}.tooltip.top .tooltip-arrow,.tooltip.top .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:50%;margin-left:-8px}.tooltip.top-left .tooltip-arrow,.tooltip.top-left .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;margin-bottom:-8px;right:8px}.tooltip.top-right .tooltip-arrow,.tooltip.top-right .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:8px;margin-bottom:-8px}.tooltip.right .tooltip-arrow,.tooltip.right .tooltip-arrow:after{border-right-color:#949494;border-width:8px 8px 8px 0;left:1px;margin-top:-8px;top:50%}.tooltip.right .tooltip-arrow:after{border-right-color:#fff;border-width:6px 7px 6px 0;margin-left:0;margin-top:-6px}.tooltip.left .tooltip-arrow,.tooltip.left .tooltip-arrow:after{border-left-color:#949494;border-width:8px 0 8px 8px;margin-top:-8px;right:0;top:50%}.tooltip.bottom .tooltip-arrow,.tooltip.bottom .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:50%;margin-left:-8px;top:0}.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;margin-top:-8px;right:8px;top:0}.tooltip.bottom-right .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:8px;margin-top:-8px;top:0}.password-strength{display:block;margin:0 -.3rem 1em;white-space:nowrap}.password-strength.password-strength-too-short .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child+.password-strength-item{background-color:#e22626}.password-strength.password-strength-fair .password-strength-item:first-child,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item+.password-strength-item{background-color:#ef672f}.password-strength.password-strength-good .password-strength-item:first-child,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item+.password-strength-item,.password-strength.password-strength-strong .password-strength-item{background-color:#79a22e}.password-strength .password-strength-item{background-color:#ccc;display:inline-block;font-size:0;height:1.4rem;margin-right:.3rem;width:calc(20% - .6rem)}@-webkit-keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}.progress{background-color:#fafafa;border:1px solid #ccc;clear:left;height:3rem;margin-bottom:3rem;overflow:hidden}.progress-bar{background-color:#79a22e;color:#fff;float:left;font-size:1.19rem;height:100%;line-height:3rem;text-align:center;transition:width .6s ease;width:0}.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-text-description{margin-bottom:1.6rem}.progress-bar-text-progress{text-align:right}.page-columns .page-inner-sidebar{margin:0 0 3rem}.page-header{margin-bottom:2.7rem;padding-bottom:2.9rem;position:relative}.page-header:before{border-bottom:1px solid #e3e3e3;bottom:0;content:'';display:block;height:1px;left:3rem;position:absolute;right:3rem}.page-header .message{margin-bottom:1.8rem}.page-header .message+.message{margin-top:-1.5rem}.page-header .admin__action-dropdown,.page-header .search-global-input{transition:none}.page-title-wrapper{margin-top:1.1rem}.admin__menu .level-0:first-child>a{margin-top:1.6rem}.admin__menu .level-0:first-child>a:after{top:-1.6rem}.admin__menu .level-0>a{padding-top:1.3rem;padding-bottom:1.3rem}.admin__menu .level-0>a:before{margin-bottom:.7rem}.admin__menu .item-home>a:before{content:'\e611';font-size:2.3rem;padding-top:-.1rem}.admin__menu .item-component>a:before{content:'\e612'}.admin__menu .item-upgrade>a:before{content:'\e614'}.admin__menu .item-system-config>a:before{content:'\e610'}.admin__menu .item-tools>a:before{content:'\e613'}.modal-sub-title{font-size:1.7rem;font-weight:600}.modal-connect-signin .modal-inner-wrap{max-width:80rem}@-webkit-keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog{-webkit-overflow-scrolling:touch;bottom:0;box-sizing:border-box;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:999}.ngdialog *,.ngdialog:after,.ngdialog:before{box-sizing:inherit}.ngdialog.ngdialog-disabled-animation *{-webkit-animation:none!important;animation:none!important}.ngdialog.ngdialog-closing .ngdialog-content,.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s;background:rgba(0,0,0,.4);bottom:0;left:0;position:fixed;right:0;top:0}.ngdialog-content{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}body.ngdialog-open{overflow:hidden}.component-indicator{border-radius:50%;cursor:help;display:inline-block;height:20px;text-align:center;width:20px}.component-indicator::after,.component-indicator::before{background:#fff;display:block;opacity:0;position:absolute;transition:opacity .2s linear .1s;visibility:hidden}.component-indicator::before{border-radius:1px;border:1px solid #adadad;box-shadow:0 0 2px rgba(0,0,0,.4);content:attr(data-label);font-size:1.2rem;margin:34px 0 0 -10px;min-width:50px;padding:4px 5px}.component-indicator::after{border:1px solid #999;border-width:1px 0 0 1px;box-shadow:-1px -1px 1px rgba(0,0,0,.1);content:'';height:10px;margin:9px 0 0 5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.component-indicator:hover::after,.component-indicator:hover::before{opacity:1;transition:opacity .2s linear 0;visibility:visible}.component-indicator span{display:block;height:20px;overflow:hidden;width:20px}.component-indicator span:before{content:'';display:block;font-family:Icons;font-size:20px;height:100%;line-height:20px;width:100%}.component-indicator._on{background:#79a22e}.component-indicator._off{background:#e22626}.component-indicator._off span:before{background:#fff;height:4px;margin:8px auto 20px;width:12px}.component-indicator._info{background:0 0}.component-indicator._info span{width:21px}.component-indicator._info span:before{color:#008bdb;content:'\e61a';font-family:Icons;font-size:21px}.app-updater .nav{display:block;margin-bottom:3.1rem;margin-top:-2.8rem}.app-updater .nav-bar-outer-actions{margin-top:1rem;padding-right:0}.app-updater .nav-bar-outer-actions .btn-wrap-cancel{margin-right:2.6rem}.main{padding-bottom:2rem;padding-top:3rem}.header{display:none}.header .logo{float:left;height:4.1rem;width:3.5rem}.header-title{font-size:2.8rem;letter-spacing:.02em;line-height:1.4;margin:2.5rem 0 3.5rem 5rem}.page-sub-title{font-size:2rem}.accent-box{margin-bottom:2rem}.accent-box .btn-prime{margin-top:1.5rem}.page-landing{margin:7.6% auto 0;max-width:44rem;text-align:center}.page-landing .logo{height:5.6rem;margin-bottom:2rem;width:19.2rem}.page-landing .text-version{margin-bottom:3rem}.page-landing .text-welcome{margin-bottom:6.5rem}.page-landing .text-terms{margin-bottom:2.5rem;text-align:center}.page-landing .btn-submit,.page-license .license-text{margin-bottom:2rem}.page-license .page-license-footer{text-align:right}.readiness-check-item{margin-bottom:4rem}.readiness-check-title{font-size:1.4rem;font-weight:700;margin-bottom:.1rem;margin-left:7.5rem}.readiness-check-content{margin-left:7.5rem;margin-right:22rem}.readiness-check-content .readiness-check-title{margin-left:0}.readiness-check-content .list{margin-top:-.3rem}.readiness-check-side{float:right;padding-left:2.4rem;width:22rem}.readiness-check-side .side-title{margin-bottom:0}.readiness-check-icon{float:left}.page-web-configuration .form-el-insider-wrap{width:auto}.page-web-configuration .form-el-insider{width:15.4rem}.page-web-configuration .form-el-insider-input .form-el-input{width:16.5rem}.customize-your-store .customize-your-store-default .legend{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.customize-your-store .advanced-modules-count,.customize-your-store .advanced-modules-select{padding-left:1.5rem}.customize-your-store .customize-your-store-advanced{min-width:0}.customize-your-store .message-error:before{margin-top:0;top:1.8rem}.customize-your-store .message-error a{color:#333;text-decoration:underline}.customize-your-store .message-error .form-label:before{background:#fff}.customize-your-store .customize-database-clean p{margin-top:2.5rem}.content-install{margin-bottom:2rem}.console{border:1px solid #ccc;font-family:'Courier New',Courier,monospace;font-weight:300;height:20rem;margin:1rem 0 2rem;overflow-y:auto;padding:1.5rem 2rem 2rem;resize:vertical}.console .text-danger{color:#e22626}.console .text-success{color:#090}.console .hidden{display:none}.content-success .btn-prime{margin-top:1.5rem}.jumbo-title{font-size:3.6rem}.jumbo-title .jumbo-icon{font-size:3.8rem;margin-right:.25em;position:relative;top:.15em}.install-database-clean{margin-top:4rem}.install-database-clean .btn{margin-right:1rem}.page-sub-title{margin-bottom:2.1rem}.multiselect-custom{max-width:71.1rem}.content-install{margin-top:3.7rem}.home-page-inner-wrap{margin:0 auto;max-width:91rem}.upgrade-home-title{margin-bottom:3.9rem;padding-top:1.8rem;text-align:center}.upgrade-home-item{background-color:#fafafa;border:1px solid #ccc;color:#333;display:block;margin-bottom:2rem;margin-left:1.3rem;margin-right:1.3rem;min-height:30rem;padding:2rem;text-align:center}.upgrade-home-item:hover{border-color:#8c8c8c;color:#333;text-decoration:none;transition:border-color .1s linear}.upgrade-home-item:active{-webkit-transform:scale(0.99);-ms-transform:scale(0.99);transform:scale(0.99)}.upgrade-home-item:before{display:block;font-size:7rem;margin-bottom:3.3rem;margin-top:4rem}.upgrade-home-item-component:before{content:'\e612'}.upgrade-home-item-upgrade:before{content:'\e614'}.upgrade-home-item-configuration:before{content:'\e610'}.upgrade-home-item-title{display:block;font-size:1.8rem;letter-spacing:.025em;margin-bottom:1rem}.upgrade-home-item-description{display:block}.readiness-check-item{padding-top:.3rem}.readiness-check-icon{margin-left:2.4rem;margin-top:-.1rem}.readiness-check-icon.icon-success{font-size:2rem}.readiness-check-icon.icon-failed{font-size:1.6rem}.componenet-manager-wrap{border:1px solid #bbb;margin:0 0 4rem}.componenet-manager-wrap .componenet-manager-account{font-size:1.4rem;float:right;padding:.6rem 0 0}.componenet-manager-wrap .componenet-manager-account .sign-in-out{margin-left:2rem}.component-manager-title{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;color:#41362f;font-size:2rem;line-height:1.2;padding:2rem}.component-manager-content{padding:2.5rem 2rem 2rem}.componenet-manager-items{list-style:none;margin:0;text-align:center}.componenet-manager-items .btn{border:1px solid #adadad}.componenet-manager-items .item-title{margin:0 0 1.5rem}.componenet-manager-items .item-number{font-size:6rem;line-height:.8;margin:0 0 1.5rem}.componenet-manager-items .item-date{margin:0 0 3.7rem}.componenet-manager-items .item-install{margin:0 0 2rem}.componenet-manager-items .item-install .btn{background:0 0;border:0;display:inline;line-height:1.36;margin:0;padding:0;color:#008bdb;text-decoration:none;font-size:1.4rem;font-weight:400}.componenet-manager-items .item-install .btn:visited{color:#008bdb;text-decoration:none}.componenet-manager-items .item-install .btn:hover{text-decoration:underline}.componenet-manager-items .item-install .btn:active{color:#ff5501;text-decoration:underline}.componenet-manager-items .item-install .btn:hover{color:#0fa7ff}.componenet-manager-items .item-install .btn:active,.componenet-manager-items .item-install .btn:focus,.componenet-manager-items .item-install .btn:hover{background:0 0;border:0}.componenet-manager-items .item-install .btn.disabled,.componenet-manager-items .item-install .btn[disabled],fieldset[disabled] .componenet-manager-items .item-install .btn{color:#008bdb;text-decoration:underline;cursor:default;pointer-events:none;opacity:.5}.componenet-manager-items .item-install .btn.disabled{text-decoration:none}.sync-login-wrap{margin:-2.5rem 0 0;padding:0 10% 4rem}.sync-login-wrap .legend{font-size:2.6rem;color:#eb5202;float:left;font-weight:300;line-height:1.2;margin:-1rem 0 2.5rem;position:static;width:100%}.sync-login-wrap .legend._hidden{display:none}.sync-login-wrap .login-header{font-size:3.4rem;font-weight:300;margin:0 0 2rem}.sync-login-wrap .login-header span{display:inline-block;padding:.9rem 0 0;vertical-align:top}.sync-login-wrap .form-row .form-label{display:inline-block}.sync-login-wrap .form-row .form-label.required{padding-left:1.5rem}.sync-login-wrap .form-row .form-label.required:after{left:0;position:absolute;right:auto}.sync-login-wrap .form-row{max-width:28rem}.sync-login-wrap .form-actions{display:table;margin-top:-1.3rem}.sync-login-wrap .form-actions .links{display:table-header-group}.sync-login-wrap .form-actions .actions{padding:3rem 0 0}@media all and (max-width:1047px){.admin__menu .submenu li{min-width:19.8rem}.nav{padding-bottom:5.38rem;padding-left:1.5rem;text-align:center}.nav-bar{display:inline-block;float:none;margin-right:0;vertical-align:top}.nav .btn-group,.nav-bar-outer-actions{display:inline-block;float:none;margin-top:-8.48rem;text-align:center;vertical-align:top;width:100%}.nav-bar-outer-actions{padding-right:0}.nav-bar-outer-actions .outer-actions-inner-wrap{display:inline-block}.app-updater .nav{padding-bottom:1.7rem}.app-updater .nav-bar-outer-actions{margin-top:2rem}}@media all and (min-width:768px){.page-layout-admin-2columns-left .page-columns{margin-left:-30px}.page-layout-admin-2columns-left .page-columns:after{content:"";display:table;clear:both}.page-layout-admin-2columns-left .page-columns .main-col{width:calc((100%) * .75 - 30px);float:right}.page-layout-admin-2columns-left .page-columns .side-col{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9{float:left}.col-m-12{width:100%}.col-m-11{width:91.66666667%}.col-m-10{width:83.33333333%}.col-m-9{width:75%}.col-m-8{width:66.66666667%}.col-m-7{width:58.33333333%}.col-m-6{width:50%}.col-m-5{width:41.66666667%}.col-m-4{width:33.33333333%}.col-m-3{width:25%}.col-m-2{width:16.66666667%}.col-m-1{width:8.33333333%}.col-m-pull-12{right:100%}.col-m-pull-11{right:91.66666667%}.col-m-pull-10{right:83.33333333%}.col-m-pull-9{right:75%}.col-m-pull-8{right:66.66666667%}.col-m-pull-7{right:58.33333333%}.col-m-pull-6{right:50%}.col-m-pull-5{right:41.66666667%}.col-m-pull-4{right:33.33333333%}.col-m-pull-3{right:25%}.col-m-pull-2{right:16.66666667%}.col-m-pull-1{right:8.33333333%}.col-m-pull-0{right:auto}.col-m-push-12{left:100%}.col-m-push-11{left:91.66666667%}.col-m-push-10{left:83.33333333%}.col-m-push-9{left:75%}.col-m-push-8{left:66.66666667%}.col-m-push-7{left:58.33333333%}.col-m-push-6{left:50%}.col-m-push-5{left:41.66666667%}.col-m-push-4{left:33.33333333%}.col-m-push-3{left:25%}.col-m-push-2{left:16.66666667%}.col-m-push-1{left:8.33333333%}.col-m-push-0{left:auto}.col-m-offset-12{margin-left:100%}.col-m-offset-11{margin-left:91.66666667%}.col-m-offset-10{margin-left:83.33333333%}.col-m-offset-9{margin-left:75%}.col-m-offset-8{margin-left:66.66666667%}.col-m-offset-7{margin-left:58.33333333%}.col-m-offset-6{margin-left:50%}.col-m-offset-5{margin-left:41.66666667%}.col-m-offset-4{margin-left:33.33333333%}.col-m-offset-3{margin-left:25%}.col-m-offset-2{margin-left:16.66666667%}.col-m-offset-1{margin-left:8.33333333%}.col-m-offset-0{margin-left:0}.page-columns{margin-left:-30px}.page-columns:after{content:"";display:table;clear:both}.page-columns .page-inner-content{width:calc((100%) * .75 - 30px);float:right}.page-columns .page-inner-sidebar{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}}@media all and (min-width:1048px){.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9{float:left}.col-l-12{width:100%}.col-l-11{width:91.66666667%}.col-l-10{width:83.33333333%}.col-l-9{width:75%}.col-l-8{width:66.66666667%}.col-l-7{width:58.33333333%}.col-l-6{width:50%}.col-l-5{width:41.66666667%}.col-l-4{width:33.33333333%}.col-l-3{width:25%}.col-l-2{width:16.66666667%}.col-l-1{width:8.33333333%}.col-l-pull-12{right:100%}.col-l-pull-11{right:91.66666667%}.col-l-pull-10{right:83.33333333%}.col-l-pull-9{right:75%}.col-l-pull-8{right:66.66666667%}.col-l-pull-7{right:58.33333333%}.col-l-pull-6{right:50%}.col-l-pull-5{right:41.66666667%}.col-l-pull-4{right:33.33333333%}.col-l-pull-3{right:25%}.col-l-pull-2{right:16.66666667%}.col-l-pull-1{right:8.33333333%}.col-l-pull-0{right:auto}.col-l-push-12{left:100%}.col-l-push-11{left:91.66666667%}.col-l-push-10{left:83.33333333%}.col-l-push-9{left:75%}.col-l-push-8{left:66.66666667%}.col-l-push-7{left:58.33333333%}.col-l-push-6{left:50%}.col-l-push-5{left:41.66666667%}.col-l-push-4{left:33.33333333%}.col-l-push-3{left:25%}.col-l-push-2{left:16.66666667%}.col-l-push-1{left:8.33333333%}.col-l-push-0{left:auto}.col-l-offset-12{margin-left:100%}.col-l-offset-11{margin-left:91.66666667%}.col-l-offset-10{margin-left:83.33333333%}.col-l-offset-9{margin-left:75%}.col-l-offset-8{margin-left:66.66666667%}.col-l-offset-7{margin-left:58.33333333%}.col-l-offset-6{margin-left:50%}.col-l-offset-5{margin-left:41.66666667%}.col-l-offset-4{margin-left:33.33333333%}.col-l-offset-3{margin-left:25%}.col-l-offset-2{margin-left:16.66666667%}.col-l-offset-1{margin-left:8.33333333%}.col-l-offset-0{margin-left:0}}@media all and (min-width:1440px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-pull-12{right:100%}.col-xl-pull-11{right:91.66666667%}.col-xl-pull-10{right:83.33333333%}.col-xl-pull-9{right:75%}.col-xl-pull-8{right:66.66666667%}.col-xl-pull-7{right:58.33333333%}.col-xl-pull-6{right:50%}.col-xl-pull-5{right:41.66666667%}.col-xl-pull-4{right:33.33333333%}.col-xl-pull-3{right:25%}.col-xl-pull-2{right:16.66666667%}.col-xl-pull-1{right:8.33333333%}.col-xl-pull-0{right:auto}.col-xl-push-12{left:100%}.col-xl-push-11{left:91.66666667%}.col-xl-push-10{left:83.33333333%}.col-xl-push-9{left:75%}.col-xl-push-8{left:66.66666667%}.col-xl-push-7{left:58.33333333%}.col-xl-push-6{left:50%}.col-xl-push-5{left:41.66666667%}.col-xl-push-4{left:33.33333333%}.col-xl-push-3{left:25%}.col-xl-push-2{left:16.66666667%}.col-xl-push-1{left:8.33333333%}.col-xl-push-0{left:auto}.col-xl-offset-12{margin-left:100%}.col-xl-offset-11{margin-left:91.66666667%}.col-xl-offset-10{margin-left:83.33333333%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-8{margin-left:66.66666667%}.col-xl-offset-7{margin-left:58.33333333%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-5{margin-left:41.66666667%}.col-xl-offset-4{margin-left:33.33333333%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-2{margin-left:16.66666667%}.col-xl-offset-1{margin-left:8.33333333%}.col-xl-offset-0{margin-left:0}}@media all and (max-width:767px){.list-definition>dt{float:none}.list-definition>dd{margin-left:0}.form-row .form-label{text-align:left}.form-row .form-label.required:after{position:static}.nav{padding-bottom:0;padding-left:0;padding-right:0}.nav-bar-outer-actions{margin-top:0}.nav-bar{display:block;margin-bottom:0;margin-left:auto;margin-right:auto;width:30.9rem}.nav-bar:before{display:none}.nav-bar>li{float:left;min-height:9rem}.nav-bar>li:after{display:none}.nav-bar>li:nth-child(4n){clear:both}.nav-bar a{line-height:1.4}.tooltip{display:none!important}.readiness-check-content{margin-right:2rem}.form-el-insider,.form-el-insider-wrap,.page-web-configuration .form-el-insider-input,.page-web-configuration .form-el-insider-input .form-el-input{display:block;width:100%}}@media all and (max-width:479px){.nav-bar{width:23.175rem}.nav-bar>li{width:7.725rem}.nav .btn-group .btn-wrap-try-again,.nav-bar-outer-actions .btn-wrap-try-again{clear:both;display:block;float:none;margin-left:auto;margin-right:auto;margin-top:1rem;padding-top:1rem}}
+.abs-action-delete,.abs-icon,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.validation-symbol:after{content:'*';color:#e22626;font-weight:400;margin-left:3px}.abs-modal-overlay,.modals-overlay{background:rgba(0,0,0,.35);bottom:0;left:0;position:fixed;right:0;top:0}.abs-action-delete>span,.abs-visually-hidden,.admin__control-fields .admin__field:nth-child(n+2):not(.admin__field-option)>.admin__field-label,.admin__field-tooltip .admin__field-tooltip-action span,.selectmenu .action-delete>span,.selectmenu .action-edit>span,.selectmenu .action-save>span,.selectmenu-toggle span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.abs-visually-hidden-reset{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.abs-clearfix:after,.abs-clearfix:before,.action-multicheck-wrap:after,.action-multicheck-wrap:before,.actions-split:after,.actions-split:before,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:before,.admin__data-grid-filters-footer:after,.admin__data-grid-filters-footer:before,.admin__data-grid-filters:after,.admin__data-grid-filters:before,.admin__data-grid-header-row:after,.admin__data-grid-header-row:before,.page-actions._fixed:after,.page-actions._fixed:before,.page-content:after,.page-content:before,.page-header-actions:after,.page-header-actions:before,.page-main-actions:not(._hidden):after,.page-main-actions:not(._hidden):before{content:'';display:table}.abs-clearfix:after,.action-multicheck-wrap:after,.actions-split:after,.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content:after,.admin__data-grid-filters-footer:after,.admin__data-grid-filters:after,.admin__data-grid-header-row:after,.page-actions._fixed:after,.page-content:after,.page-header-actions:after,.page-main-actions:not(._hidden):after{clear:both}.abs-list-reset-styles{margin:0;padding:0;list-style:none}.abs-draggable-handle{cursor:-webkit-grab;cursor:move;font-size:0;margin-top:-4px;padding:0 1rem 0 0;vertical-align:middle;display:inline-block;text-decoration:none}.abs-draggable-handle:before{-webkit-font-smoothing:antialiased;font-size:1.8rem;line-height:inherit;color:#9e9e9e;content:'\e617';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.abs-draggable-handle:hover:before{color:#858585}html{box-sizing:border-box;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}*,:after,:before{box-sizing:inherit}:focus{box-shadow:none;outline:0}._keyfocus :focus{box-shadow:0 0 0 1px #008bdb}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}embed,img,object,video{max-width:100%}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/light/opensans-300.eot);src:url(../fonts/opensans/light/opensans-300.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/light/opensans-300.woff2) format('woff2'),url(../fonts/opensans/light/opensans-300.woff) format('woff'),url(../fonts/opensans/light/opensans-300.ttf) format('truetype'),url('../fonts/opensans/light/opensans-300.svg#Open Sans') format('svg');font-weight:300;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/regular/opensans-400.eot);src:url(../fonts/opensans/regular/opensans-400.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/regular/opensans-400.woff2) format('woff2'),url(../fonts/opensans/regular/opensans-400.woff) format('woff'),url(../fonts/opensans/regular/opensans-400.ttf) format('truetype'),url('../fonts/opensans/regular/opensans-400.svg#Open Sans') format('svg');font-weight:400;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/semibold/opensans-600.eot);src:url(../fonts/opensans/semibold/opensans-600.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/semibold/opensans-600.woff2) format('woff2'),url(../fonts/opensans/semibold/opensans-600.woff) format('woff'),url(../fonts/opensans/semibold/opensans-600.ttf) format('truetype'),url('../fonts/opensans/semibold/opensans-600.svg#Open Sans') format('svg');font-weight:600;font-style:normal}@font-face{font-family:'Open Sans';src:url(../fonts/opensans/bold/opensans-700.eot);src:url(../fonts/opensans/bold/opensans-700.eot?#iefix) format('embedded-opentype'),url(../fonts/opensans/bold/opensans-700.woff2) format('woff2'),url(../fonts/opensans/bold/opensans-700.woff) format('woff'),url(../fonts/opensans/bold/opensans-700.ttf) format('truetype'),url('../fonts/opensans/bold/opensans-700.svg#Open Sans') format('svg');font-weight:700;font-style:normal}html{font-size:62.5%}body{color:#333;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.36;font-size:1.4rem}h1{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2.8rem}h2{margin:0 0 2rem;color:#41362f;font-weight:400;line-height:1.2;font-size:2rem}h3{margin:0 0 2rem;color:#41362f;font-weight:600;line-height:1.2;font-size:1.7rem}h4,h5,h6{font-weight:600;margin-top:0}p{margin:0 0 1em}small{font-size:1.2rem}a{color:#008bdb;text-decoration:none}a:hover{color:#0fa7ff;text-decoration:underline}dl,ol,ul{padding-left:0}nav ol,nav ul{list-style:none;margin:0;padding:0}html{height:100%}body{background-color:#fff;min-height:100%;min-width:102.4rem}.page-wrapper{background-color:#fff;display:inline-block;margin-left:-4px;vertical-align:top;width:calc(100% - 8.8rem)}.page-content{padding-bottom:3rem;padding-left:3rem;padding-right:3rem}.notices-wrapper{margin:0 3rem}.notices-wrapper .messages{margin-bottom:0}@media (min-width:1024px){html{width:100vw}body{overflow-x:hidden}}.row{margin-left:0;margin-right:0}.row:after{clear:both;content:'';display:table}.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9,.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:0;padding-right:0}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}.row-gutter{margin-left:-1.5rem;margin-right:-1.5rem}.row-gutter>[class*=col-]{padding-left:1.5rem;padding-right:1.5rem}.abs-clearer:after,.component-manager-content:after,.component-manager-title:after,.form-row:after,.header:after,.nav:after,body:after{clear:both;content:'';display:table}.ng-cloak{display:none!important}.hide.hide{display:none}.show.show{display:block}.text-center{text-align:center}.text-right{text-align:right}@font-face{font-family:Icons;src:url(../fonts/icons/icons.eot);src:url(../fonts/icons/icons.eot?#iefix) format('embedded-opentype'),url(../fonts/icons/icons.woff2) format('woff2'),url(../fonts/icons/icons.woff) format('woff'),url(../fonts/icons/icons.ttf) format('truetype'),url(../fonts/icons/icons.svg#Icons) format('svg');font-weight:400;font-style:normal}[class*=icon-]{display:inline-block;line-height:1}.icon-failed:before,.icon-success:before,[class*=icon-]:after{font-family:Icons}.icon-success{color:#79a22e}.icon-success:before{content:'\e62d'}.icon-failed{color:#e22626}.icon-failed:before{content:'\e632'}.icon-success-thick:after{content:'\e62d'}.icon-collapse:after{content:'\e615'}.icon-failed-thick:after{content:'\e632'}.icon-expand:after{content:'\e616'}.icon-warning:after{content:'\e623'}.icon-failed-round,.icon-success-round{border-radius:100%;color:#fff;font-size:2.5rem;height:1em;position:relative;text-align:center;width:1em}.icon-failed-round:after,.icon-success-round:after{bottom:0;font-size:.5em;left:0;position:absolute;right:0;top:.45em}.icon-success-round{background-color:#79a22e}.icon-success-round:after{content:'\e62d'}.icon-failed-round{background-color:#e22626}.icon-failed-round:after{content:'\e632'}dl,ol,ul{margin-top:0}.list{padding-left:0}.list>li{display:block;margin-bottom:.75em;position:relative}.list>li>.icon-failed,.list>li>.icon-success{font-size:1.6em;left:-.1em;position:absolute;top:0}.list>li>.icon-success{color:#79a22e}.list>li>.icon-failed{color:#e22626}.list-item-failed,.list-item-icon,.list-item-success,.list-item-warning{padding-left:3.5rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{left:-.1em;position:absolute}.list-item-success:before{color:#79a22e}.list-item-failed:before{color:#e22626}.list-item-warning:before{color:#ef672f}.list-definition{margin:0 0 3rem;padding:0}.list-definition>dt{clear:left;float:left}.list-definition>dd{margin-bottom:1em;margin-left:20rem}.btn-wrap{margin:0 auto}.btn-wrap .btn{width:100%}.btn{background:#e3e3e3;border:none;color:#514943;display:inline-block;font-size:1.6rem;font-weight:600;padding:.45em .9em;text-align:center}.btn:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.btn:active{background-color:#d6d6d6}.btn.disabled,.btn[disabled]{cursor:default;opacity:.5;pointer-events:none}.ie9 .btn.disabled,.ie9 .btn[disabled]{background-color:#f0f0f0;opacity:1;text-shadow:none}.btn-large{padding:.75em 1.25em}.btn-medium{font-size:1.4rem;padding:.5em 1.5em .6em}.btn-link{background-color:transparent;border:none;color:#008bdb;font-family:1.6rem;font-size:1.5rem}.btn-link:active,.btn-link:focus,.btn-link:hover{background-color:transparent;color:#0fa7ff}.btn-prime{background-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.btn-prime:focus,.btn-prime:hover{background-color:#f65405;background-repeat:repeat-x;background-image:linear-gradient(to right,#e04f00 0,#f65405 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#e04f00', endColorstr='#f65405', GradientType=1);color:#fff}.btn-prime:active{background-color:#e04f00;background-repeat:repeat-x;background-image:linear-gradient(to right,#f65405 0,#e04f00 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f65405', endColorstr='#e04f00', GradientType=1);color:#fff}.ie9 .btn-prime.disabled,.ie9 .btn-prime[disabled]{background-color:#fd6e23}.ie9 .btn-prime.disabled:active,.ie9 .btn-prime.disabled:hover,.ie9 .btn-prime[disabled]:active,.ie9 .btn-prime[disabled]:hover{background-color:#fd6e23;-webkit-filter:none;filter:none}.btn-secondary{background-color:#514943;color:#fff}.btn-secondary:hover{background-color:#5f564f;color:#fff}.btn-secondary:active,.btn-secondary:focus{background-color:#574e48;color:#fff}.ie9 .btn-secondary.disabled,.ie9 .btn-secondary[disabled]{background-color:#514943}.ie9 .btn-secondary.disabled:active,.ie9 .btn-secondary[disabled]:active{background-color:#514943;-webkit-filter:none;filter:none}[class*=btn-wrap-triangle]{overflow:hidden;position:relative}[class*=btn-wrap-triangle] .btn:after{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.btn-wrap-triangle-right{display:inline-block;padding-right:1.74rem;position:relative}.btn-wrap-triangle-right .btn{text-indent:.92rem}.btn-wrap-triangle-right .btn:after{border-color:transparent transparent transparent #e3e3e3;border-width:1.84rem 0 1.84rem 1.84rem;left:100%;margin-left:-1.74rem}.btn-wrap-triangle-right .btn:focus:after,.btn-wrap-triangle-right .btn:hover:after{border-left-color:#dbdbdb}.btn-wrap-triangle-right .btn:active:after{border-left-color:#d6d6d6}.btn-wrap-triangle-right .btn:not(.disabled):active,.btn-wrap-triangle-right .btn:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn.disabled:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:after{border-color:transparent transparent transparent #f0f0f0}.ie9 .btn-wrap-triangle-right .btn.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn.disabled:focus:after,.ie9 .btn-wrap-triangle-right .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:focus:after,.ie9 .btn-wrap-triangle-right .btn[disabled]:hover:after{border-left-color:#f0f0f0}.btn-wrap-triangle-right .btn-prime:after{border-color:transparent transparent transparent #eb5202}.btn-wrap-triangle-right .btn-prime:focus:after,.btn-wrap-triangle-right .btn-prime:hover:after{border-left-color:#f65405}.btn-wrap-triangle-right .btn-prime:active:after{border-left-color:#e04f00}.btn-wrap-triangle-right .btn-prime:not(.disabled):active,.btn-wrap-triangle-right .btn-prime:not([disabled]):active{left:1px}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:after{border-color:transparent transparent transparent #fd6e23}.ie9 .btn-wrap-triangle-right .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-right .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-right .btn-prime[disabled]:hover:after{border-left-color:#fd6e23}.btn-wrap-triangle-left{display:inline-block;padding-left:1.74rem}.btn-wrap-triangle-left .btn{text-indent:-.92rem}.btn-wrap-triangle-left .btn:after{border-color:transparent #e3e3e3 transparent transparent;border-width:1.84rem 1.84rem 1.84rem 0;margin-right:-1.74rem;right:100%}.btn-wrap-triangle-left .btn:focus:after,.btn-wrap-triangle-left .btn:hover:after{border-right-color:#dbdbdb}.btn-wrap-triangle-left .btn:active:after{border-right-color:#d6d6d6}.btn-wrap-triangle-left .btn:not(.disabled):active,.btn-wrap-triangle-left .btn:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn.disabled:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:after{border-color:transparent #f0f0f0 transparent transparent}.ie9 .btn-wrap-triangle-left .btn.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn[disabled]:hover:after{border-right-color:#f0f0f0}.btn-wrap-triangle-left .btn-prime:after{border-color:transparent #eb5202 transparent transparent}.btn-wrap-triangle-left .btn-prime:focus:after,.btn-wrap-triangle-left .btn-prime:hover:after{border-right-color:#e04f00}.btn-wrap-triangle-left .btn-prime:active:after{border-right-color:#f65405}.btn-wrap-triangle-left .btn-prime:not(.disabled):active,.btn-wrap-triangle-left .btn-prime:not([disabled]):active{right:1px}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:after{border-color:transparent #fd6e23 transparent transparent}.ie9 .btn-wrap-triangle-left .btn-prime.disabled:active:after,.ie9 .btn-wrap-triangle-left .btn-prime.disabled:hover:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:active:after,.ie9 .btn-wrap-triangle-left .btn-prime[disabled]:hover:after{border-right-color:#fd6e23}.btn-expand{background-color:transparent;border:none;color:#303030;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700;padding:0;position:relative}.btn-expand.expanded:after{border-color:transparent transparent #303030;border-width:0 .285em .36em}.btn-expand.expanded:hover:after{border-color:transparent transparent #3d3d3d}.btn-expand:hover{background-color:transparent;border:none;color:#3d3d3d}.btn-expand:hover:after{border-color:#3d3d3d transparent transparent}.btn-expand:after{border-color:#303030 transparent transparent;border-style:solid;border-width:.36em .285em 0;content:'';height:0;left:100%;margin-left:.5em;margin-top:-.18em;position:absolute;top:50%;width:0}[class*=col-] .form-el-input,[class*=col-] .form-el-select{width:100%}.form-fieldset{border:none;margin:0 0 1em;padding:0}.form-row{margin-bottom:2.2rem}.form-row .form-row{margin-bottom:.4rem}.form-row .form-label{display:block;font-weight:600;padding:.6rem 2.1em 0 0;text-align:right}.form-row .form-label.required{position:relative}.form-row .form-label.required:after{color:#eb5202;content:'*';font-size:1.15em;position:absolute;right:.7em;top:.5em}.form-row .form-el-checkbox+.form-label:before,.form-row .form-el-radio+.form-label:before{top:.7rem}.form-row .form-el-checkbox+.form-label:after,.form-row .form-el-radio+.form-label:after{top:1.1rem}.form-row.form-row-text{padding-top:.6rem}.form-row.form-row-text .action-sign-out{font-size:1.2rem;margin-left:1rem}.form-note{font-size:1.2rem;font-weight:600;margin-top:1rem}.form-el-dummy{display:none}.fieldset{border:0;margin:0;min-width:0;padding:0}input:not([disabled]):focus,textarea:not([disabled]):focus{box-shadow:none}.form-el-input{border:1px solid #adadad;color:#303030;padding:.35em .55em .5em}.form-el-input:hover{border-color:#949494}.form-el-input:focus{border-color:#008bdb}.form-el-input:required{box-shadow:none}.form-label{margin-bottom:.5em}[class*=form-label][for]{cursor:pointer}.form-el-insider-wrap{display:table;width:100%}.form-el-insider-input{display:table-cell;width:100%}.form-el-insider{border-radius:2px;display:table-cell;vertical-align:top;padding:.43em .55em .5em 0}.form-legend,.form-legend-expand,.form-legend-light{display:block;margin:0}.form-legend,.form-legend-expand{margin-bottom:2.5em;padding-top:1.5em;font-weight:600;font-size:1.25em}.form-legend{width:100%;border-top:1px solid #ccc}.form-legend-light{margin-bottom:1.5em;font-size:1em}.form-legend-expand{cursor:pointer;transition:opacity .2s linear}.form-legend-expand:hover{opacity:.85}.form-legend-expand.expanded:after{content:'\e615'}.form-legend-expand:after{margin-left:.5em;font-weight:400;font-size:1.15em;font-family:Icons;content:'\e616';vertical-align:sub}.form-el-checkbox,.form-el-radio{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.form-el-checkbox.disabled+.form-label,.form-el-checkbox.disabled+.form-label:before,.form-el-checkbox[disabled]+.form-label,.form-el-checkbox[disabled]+.form-label:before,.form-el-radio.disabled+.form-label,.form-el-radio.disabled+.form-label:before,.form-el-radio[disabled]+.form-label,.form-el-radio[disabled]+.form-label:before{cursor:default;opacity:.5;pointer-events:none}.form-el-checkbox:not(.disabled)+.form-label:hover:before,.form-el-checkbox:not([disabled])+.form-label:hover:before,.form-el-radio:not(.disabled)+.form-label:hover:before,.form-el-radio:not([disabled])+.form-label:hover:before{border-color:#514943}.form-el-checkbox+.form-label,.form-el-radio+.form-label{font-weight:400;padding-left:2em;padding-right:0;position:relative;text-align:left;transition:border-color .1s linear}.form-el-checkbox+.form-label:before,.form-el-radio+.form-label:before{border:1px solid;content:'';left:0;position:absolute;top:.1rem;transition:border-color .1s linear}.form-el-checkbox+.form-label:before{background-color:#fff;border-color:#adadad;border-radius:2px;height:1.6rem;line-height:1.2;width:1.6rem;font-size:1.2rem}.form-el-checkbox:checked+.form-label::before{content:'\e62d';font-family:Icons}.form-el-radio+.form-label:before{background-color:#fff;border:1px solid #adadad;border-radius:100%;height:1.8rem;width:1.8rem}.form-el-radio+.form-label:after{background:0 0;border:.5rem solid transparent;border-radius:100%;content:'';height:0;left:.4rem;position:absolute;top:.5rem;transition:background .3s linear;width:0}.form-el-radio:checked+.form-label{cursor:default}.form-el-radio:checked+.form-label:after{border-color:#514943}.form-select-label{border:1px solid #adadad;color:#303030;cursor:pointer;display:block;overflow:hidden;position:relative;z-index:0}.form-select-label:hover,.form-select-label:hover:after{border-color:#949494}.form-select-label:active,.form-select-label:active:after,.form-select-label:focus,.form-select-label:focus:after{border-color:#008bdb}.form-select-label:after{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:2.36em;z-index:-2}.ie9 .form-select-label:after{display:none}.form-select-label:before{border-color:#303030 transparent transparent;border-style:solid;border-width:5px 4px 0;content:'';height:0;margin-right:-4px;margin-top:-2.5px;position:absolute;right:1.18em;top:50%;width:0;z-index:-1}.ie9 .form-select-label:before{display:none}.form-select-label .form-el-select{background:0 0;border:none;border-radius:0;content:'';display:block;margin:0;padding:.35em calc(2.36em + 10%) .5em .55em;width:110%}.ie9 .form-select-label .form-el-select{padding-right:.55em;width:100%}.form-el-select{background:#fff;border:1px solid #adadad;border-radius:2px;color:#303030;display:block;padding:.35em .55em}.multiselect-custom{position:relative;height:45.2rem;border:1px solid #adadad;overflow:auto;margin:0 0 1.5rem}.multiselect-custom ul{margin:0;padding:0;list-style:none;min-width:29rem}.multiselect-custom .item{padding:1rem 1.4rem}.multiselect-custom .selected{background-color:#e0f6fe}.multiselect-custom .form-label{margin-bottom:0}[class*=form-el-].invalid{border-color:#e22626}[class*=form-el-].invalid+.error-container{display:block}.error-container{background-color:#fffbbb;border:1px solid #ee7d7d;color:#514943;display:none;font-size:1.19rem;margin-top:.2rem;padding:.8rem 1rem .9rem}.check-result-message{margin-left:.5em;min-height:3.68rem;-webkit-align-items:center;-ms-align-items:center;-ms-flex-align:center;align-items:center;display:-webkit-flex;display:-ms-flexbox;display:flex}.check-result-text{margin-left:.5em}body:not([class]){min-width:0}.container{display:block;margin:0 auto 4rem;max-width:100rem;padding:0}.abs-action-delete,.action-close:before,.action-next:before,.action-previous:before,.admin-user .admin__action-dropdown:before,.admin__action-multiselect-search-label:before,.admin__control-checkbox+label:before,.admin__control-radio+label:before,.admin__control-table .action-delete:before,.admin__current-filters-list .action-remove:before,.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before,.admin__data-grid-action-bookmarks .admin__action-dropdown:before,.admin__data-grid-action-columns .admin__action-dropdown:before,.admin__data-grid-action-export .admin__action-dropdown:before,.admin__menu .level-0>a:before,.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon,.admin__page-nav-title._collapsible:after,.data-grid-filters-action-wrap .action-default:before,.data-grid-row-changed:after,.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before,.data-grid-search-control-wrap .action-submit:before,.icon-failed:before,.icon-success:before,.notifications-action:before,.notifications-close:before,.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before,.page-title-jumbo-success:before,.search-global-label:before,.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before,.setup-home-item:before,.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before,.store-switcher .dropdown-menu .dropdown-toolbar a:before,.tooltip .help a:before,.tooltip .help span:before{-webkit-font-smoothing:antialiased;font-family:Icons;line-height:1;font-style:normal;font-weight:400;speak:none}.text-stretch{margin-bottom:1.5em}.page-title-jumbo{font-size:4rem;font-weight:300;letter-spacing:-.05em;margin-bottom:2.9rem}.page-title-jumbo-success:before{color:#79a22e;content:'\e62d';font-size:3.9rem;margin-left:-.3rem;margin-right:2.4rem}.list{margin-bottom:3rem}.list-dot .list-item{display:list-item;list-style-position:inside;margin-bottom:1.2rem}.list-title{color:#333;font-size:1.4rem;font-weight:700;letter-spacing:.025em;margin-bottom:1.2rem}.list-item-failed:before,.list-item-success:before,.list-item-warning:before{font-family:Icons;font-size:1.6rem;top:0}.list-item-success:before{content:'\e62d';font-size:1.6rem}.list-item-failed:before{content:'\e632';font-size:1.4rem;left:.1rem;top:.2rem}.list-item-warning:before{content:'\e623';font-size:1.3rem;left:.2rem}.form-wrap{padding-top:2.1rem;margin-bottom:3.6rem}.form-el-label-horizontal{display:inline-block;font-size:1.3rem;font-weight:600;letter-spacing:.025em;margin-left:.4rem;margin-bottom:.4rem}.app-updater{min-width:768px}body._has-modal{height:100%;overflow:hidden;width:100%}.modals-overlay{z-index:899}.modal-popup,.modal-slide{bottom:0;min-width:0;pointer-events:none;position:fixed;right:0;top:0;visibility:hidden}.modal-popup._show,.modal-slide._show{visibility:visible}.modal-popup._show .modal-inner-wrap,.modal-slide._show .modal-inner-wrap{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}.modal-popup .modal-inner-wrap,.modal-slide .modal-inner-wrap{background-color:#fff;box-shadow:0 0 12px 2px rgba(0,0,0,.35);opacity:1;pointer-events:auto}.modal-slide{left:14.8rem;z-index:900}.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto}.modal-slide._inner-scroll .modal-inner-wrap{overflow-y:visible;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.modal-slide._inner-scroll .modal-footer,.modal-slide._inner-scroll .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-slide._inner-scroll .modal-content{overflow-y:auto}.modal-slide._inner-scroll .modal-footer{margin-top:auto}.modal-slide .modal-content,.modal-slide .modal-footer,.modal-slide .modal-header{padding:0 2.6rem 2.6rem}.modal-slide .modal-header{padding-bottom:2.1rem;padding-top:2.1rem}.modal-popup{left:0;overflow-y:auto;z-index:900}.modal-popup._show .modal-inner-wrap{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}.modal-popup .modal-inner-wrap{box-sizing:border-box;height:auto;left:0;margin:5rem auto;position:absolute;right:0;-webkit-transform:translateY(-200%);-ms-transform:translateY(-200%);transform:translateY(-200%);transition-duration:.2s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:75%}.modal-popup._inner-scroll{overflow-y:visible}.ie10 .modal-popup._inner-scroll,.ie9 .modal-popup._inner-scroll{overflow-y:auto}.modal-popup._inner-scroll .modal-inner-wrap{max-height:90%}.ie10 .modal-popup._inner-scroll .modal-inner-wrap,.ie9 .modal-popup._inner-scroll .modal-inner-wrap{max-height:none}.modal-popup._inner-scroll .modal-content{overflow-y:auto}.modal-popup .modal-content,.modal-popup .modal-footer,.modal-popup .modal-header{padding-left:3rem;padding-right:3rem}.modal-popup .modal-footer,.modal-popup .modal-header{-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0}.modal-popup .modal-header{padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer{margin-top:auto;padding-bottom:3rem;padding-top:3rem}.modal-popup .modal-footer-actions{text-align:right}.modal-popup.confirm .modal-inner-wrap{left:50%;margin-left:-25rem;width:50rem}.modal-popup.confirm .modal-footer{text-align:right}.modal-popup._image-box .modal-inner-wrap{margin:5rem auto;max-width:78rem;position:static}.modal-popup._image-box .thumbnail-preview{padding-bottom:3rem;text-align:center}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image-block{border:1px solid #ccc;margin:0 auto 2rem;max-width:58rem;padding:2rem}.modal-popup._image-box .thumbnail-preview .thumbnail-preview-image{max-height:54rem}@media (max-width:768px){.modal-popup.modal-slide{left:14.8rem;z-index:900}.modal-popup.modal-slide._show .modal-inner-wrap{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}.modal-popup.modal-slide .modal-inner-wrap{height:100%;overflow-y:auto;position:static;-webkit-transform:translateX(100%);-ms-transform:translateX(100%);transform:translateX(100%);transition-duration:.3s;transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-timing-function:ease-in-out;width:auto;margin:0;max-height:none}}.admin__action-dropdown-wrap{display:inline-block;position:relative}.admin__action-dropdown-wrap .admin__action-dropdown-text:after{left:-6px;right:0}.admin__action-dropdown-wrap .admin__action-dropdown-menu{left:auto;right:0}.admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__action-dropdown-wrap.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin__action-dropdown-wrap._active .admin__action-dropdown-text:after,.admin__action-dropdown-wrap.active .admin__action-dropdown-text:after{background-color:#fff;content:'';height:6px;position:absolute;top:100%}.admin__action-dropdown-wrap._active .admin__action-dropdown-menu,.admin__action-dropdown-wrap.active .admin__action-dropdown-menu{display:block}.admin__action-dropdown-wrap._disabled .admin__action-dropdown{cursor:default}.admin__action-dropdown-wrap._disabled:hover .admin__action-dropdown{color:#333}.admin__action-dropdown{background-color:#fff;border:1px solid transparent;border-bottom:none;border-radius:0;box-shadow:none;color:#333;display:inline-block;font-size:1.3rem;font-weight:400;letter-spacing:-.025em;padding:.7rem 3.3rem .8rem 1.5rem;position:relative;vertical-align:baseline;z-index:2}.admin__action-dropdown._active:after,.admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .admin__action-dropdown:after,.active .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin__action-dropdown:focus,.admin__action-dropdown:hover{background-color:#fff;color:#000;text-decoration:none}.admin__action-dropdown:after{right:1.5rem}.admin__action-dropdown:before{margin-right:1rem}.admin__action-dropdown-menu{background-color:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;line-height:1.36;margin-top:-1px;min-width:120%;padding:.5rem 1rem;position:absolute;top:100%;transition:all .15s ease;z-index:1}.admin__action-dropdown-menu>li{display:block}.admin__action-dropdown-menu>li>a{color:#333;display:block;text-decoration:none;padding:.6rem .5rem}.selectmenu{display:inline-block;position:relative;text-align:left;z-index:1}.selectmenu._active{z-index:500;border-color:#007bdb}.selectmenu .action-delete,.selectmenu .action-edit,.selectmenu .action-save{background-color:transparent;border-color:transparent;box-shadow:none;padding:0 1rem}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover,.selectmenu .action-save:hover{background-color:transparent;border-color:transparent;box-shadow:none}.selectmenu .action-delete:before,.selectmenu .action-edit:before,.selectmenu .action-save:before{content:'\e630'}.selectmenu .action-delete,.selectmenu .action-edit{border:0 solid #fff;border-left-width:1px;bottom:0;position:absolute;right:0;top:0;z-index:1}.selectmenu .action-delete:hover,.selectmenu .action-edit:hover{border:0 solid #fff;border-left-width:1px}.selectmenu .action-save:before{content:'\e625'}.selectmenu .action-edit:before{content:'\e631'}.selectmenu-value{display:inline-block}.selectmenu-value input[type=text]{-moz-appearance:none;-webkit-appearance:none;appearance:none;border:0;display:inline;margin:0;width:6rem}body._keyfocus .selectmenu-value input[type=text]:focus{box-shadow:none}.selectmenu-toggle{padding-right:3rem;background:0 0;border-width:0;bottom:0;float:right;position:absolute;right:0;top:0;width:0}.selectmenu-toggle._active:after,.selectmenu-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.1rem;top:50%;transition:all .2s linear;width:0}._active .selectmenu-toggle:after,.active .selectmenu-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.selectmenu-toggle:hover:after{border-color:#000 transparent transparent}.selectmenu-toggle:active,.selectmenu-toggle:focus,.selectmenu-toggle:hover{background:0 0}.selectmenu._active .selectmenu-toggle:before{border-color:#007bdb}body._keyfocus .selectmenu-toggle:focus{box-shadow:none}.selectmenu-toggle:before{background:#e3e3e3;border-left:1px solid #adadad;bottom:0;content:'';display:block;position:absolute;right:0;top:0;width:3.2rem}.selectmenu-items{background:#fff;border:1px solid #007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);display:none;float:left;left:-1px;margin-top:3px;max-width:20rem;min-width:calc(100% + 2px);position:absolute;top:100%}.selectmenu-items._active{display:block}.selectmenu-items ul{float:left;list-style-type:none;margin:0;min-width:100%;padding:0}.selectmenu-items li{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;transition:background .2s linear}.selectmenu-items li:hover{background:#e3e3e3}.selectmenu-items li:last-child .selectmenu-item-action,.selectmenu-items li:last-child .selectmenu-item-action:visited{color:#008bdb;text-decoration:none}.selectmenu-items li:last-child .selectmenu-item-action:hover{color:#0fa7ff;text-decoration:underline}.selectmenu-items li:last-child .selectmenu-item-action:active{color:#ff5501;text-decoration:underline}.selectmenu-item{position:relative;width:100%;z-index:1}li._edit>.selectmenu-item{display:none}.selectmenu-item-edit{display:none;padding:.3rem 4rem .3rem .4rem;position:relative;white-space:nowrap;z-index:1}li:last-child .selectmenu-item-edit{padding-right:.4rem}.selectmenu-item-edit .admin__control-text{width:5.4rem;margin:0}li._edit .selectmenu-item-edit{display:block}.selectmenu-item-action{-moz-appearance:none;-webkit-appearance:none;appearance:none;background:0 0;border:0;color:#333;display:block;font-size:1.4rem;font-weight:400;min-width:100%;padding:1rem 6rem 1rem 1.5rem;text-align:left;transition:background .2s linear;width:5rem}.selectmenu-item-action:focus,.selectmenu-item-action:hover{background:#e3e3e3}.abs-actions-split-xl .action-default,.page-actions .actions-split .action-default{margin-right:4rem}.abs-actions-split-xl .action-toggle,.page-actions .actions-split .action-toggle{padding-right:4rem}.abs-actions-split-xl .action-toggle:after,.page-actions .actions-split .action-toggle:after{border-width:.9rem .6rem 0;margin-top:-.3rem;right:1.4rem}.actions-split{position:relative;z-index:200}.actions-split._active,.actions-split.active,.actions-split:hover{box-shadow:0 0 0 1px #007bdb}.actions-split._active .action-toggle.action-primary,.actions-split._active .action-toggle.primary,.actions-split.active .action-toggle.action-primary,.actions-split.active .action-toggle.primary{background-color:#ba4000;border-color:#ba4000}.actions-split._active .dropdown-menu,.actions-split.active .dropdown-menu{opacity:1;visibility:visible;display:block}.actions-split .action-default,.actions-split .action-toggle{float:left;margin:0}.actions-split .action-default._active,.actions-split .action-default.active,.actions-split .action-default:hover,.actions-split .action-toggle._active,.actions-split .action-toggle.active,.actions-split .action-toggle:hover{box-shadow:none}.actions-split .action-default{margin-right:3.2rem;min-width:9.3rem}.actions-split .action-toggle{padding-right:3.2rem;border-left-color:rgba(0,0,0,.2);bottom:0;padding-left:0;position:absolute;right:0;top:0}.actions-split .action-toggle._active:after,.actions-split .action-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .actions-split .action-toggle:after,.active .actions-split .action-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.actions-split .action-toggle:hover:after{border-color:#000 transparent transparent}.actions-split .action-toggle.action-primary:after,.actions-split .action-toggle.action-secondary:after,.actions-split .action-toggle.primary:after,.actions-split .action-toggle.secondary:after{border-color:#fff transparent transparent}.actions-split .action-toggle>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-select-wrap{display:inline-block;position:relative}.action-select-wrap .action-select{padding-right:3.2rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#fff;font-weight:400;text-align:left}.action-select-wrap .action-select._active:after,.action-select-wrap .action-select.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.2rem;top:50%;transition:all .2s linear;width:0}._active .action-select-wrap .action-select:after,.active .action-select-wrap .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .action-select:hover:after{border-color:#000 transparent transparent}.action-select-wrap .action-select:hover,.action-select-wrap .action-select:hover:before{border-color:#878787}.action-select-wrap .action-select:before{background-color:#e3e3e3;border:1px solid #adadad;bottom:0;content:'';position:absolute;right:0;top:0;width:3.2rem}.action-select-wrap .action-select._active{border-color:#007bdb}.action-select-wrap .action-select._active:before{border-color:#007bdb #007bdb #007bdb #adadad}.action-select-wrap .action-select[disabled]{color:#333}.action-select-wrap .action-select[disabled]:after{border-color:#333 transparent transparent}.action-select-wrap._active{z-index:500}.action-select-wrap._active .action-select,.action-select-wrap._active .action-select:before{border-color:#007bdb}.action-select-wrap._active .action-select:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-select-wrap .abs-action-menu .action-submenu,.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu,.action-select-wrap .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu,.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu,.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:45rem;overflow-y:auto}.action-select-wrap .action-menu-items{left:0;position:absolute;right:0;top:100%}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu{min-width:100%;position:static}.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.abs-action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu,.action-select-wrap .action-menu-items>.action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .action-menu .action-submenu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu,.action-select-wrap .action-menu-items>.actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{position:absolute}.action-multicheck-wrap{display:inline-block;height:1.6rem;padding-top:1px;position:relative;width:3.1rem;z-index:200}.action-multicheck-wrap:hover .action-multicheck-toggle,.action-multicheck-wrap:hover .admin__control-checkbox+label:before{border-color:#878787}.action-multicheck-wrap._active .action-multicheck-toggle,.action-multicheck-wrap._active .admin__control-checkbox+label:before{border-color:#007bdb}.action-multicheck-wrap._active .abs-action-menu .action-submenu,.action-multicheck-wrap._active .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .action-menu,.action-multicheck-wrap._active .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu,.action-multicheck-wrap._active .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap._active .actions-split .dropdown-menu .action-submenu .action-submenu{opacity:1;visibility:visible;display:block}.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{background-color:#fff}.action-multicheck-wrap._disabled .action-multicheck-toggle,.action-multicheck-wrap._disabled .admin__control-checkbox+label:before{border-color:#adadad;opacity:1}.action-multicheck-wrap .action-multicheck-toggle,.action-multicheck-wrap .admin__control-checkbox,.action-multicheck-wrap .admin__control-checkbox+label{float:left}.action-multicheck-wrap .action-multicheck-toggle{border-radius:0 1px 1px 0;height:1.6rem;margin-left:-1px;padding:0;position:relative;transition:border-color .1s linear;width:1.6rem}.action-multicheck-wrap .action-multicheck-toggle._active:after,.action-multicheck-wrap .action-multicheck-toggle.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:after{border-color:#000 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;top:50%;transition:all .2s linear;width:0}._active .action-multicheck-wrap .action-multicheck-toggle:after,.active .action-multicheck-wrap .action-multicheck-toggle:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.action-multicheck-wrap .action-multicheck-toggle:hover:after{border-color:#000 transparent transparent}.action-multicheck-wrap .action-multicheck-toggle:focus{border-color:#007bdb}.action-multicheck-wrap .action-multicheck-toggle:after{right:.3rem}.action-multicheck-wrap .action-multicheck-toggle>span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.action-multicheck-wrap .abs-action-menu .action-submenu,.action-multicheck-wrap .abs-action-menu .action-submenu .action-submenu,.action-multicheck-wrap .action-menu,.action-multicheck-wrap .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu,.action-multicheck-wrap .actions-split .action-menu .action-submenu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu,.action-multicheck-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{left:-1.2rem;margin-top:1px;right:auto;text-align:left}.action-multicheck-wrap .action-menu-item{white-space:nowrap}.admin__action-multiselect-wrap{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.admin__action-multiselect-wrap.action-select-wrap:focus{box-shadow:none}.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .abs-action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .action-menu,.admin__action-multiselect-wrap.action-select-wrap .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .action-menu .action-submenu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu,.admin__action-multiselect-wrap.action-select-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{max-height:none;overflow-y:inherit}.admin__action-multiselect-wrap .action-menu-item{transition:background-color .1s linear}.admin__action-multiselect-wrap .action-menu-item._selected{background-color:#e3e3e3}.admin__action-multiselect-wrap .action-menu-item._hover{background-color:#e0f6fe}.admin__action-multiselect-wrap .admin__action-multiselect{border:1px solid #adadad;cursor:pointer;min-height:3.2rem;padding:.7rem 3.6rem .6rem 1em;white-space:normal}.admin__action-multiselect-wrap .admin__action-multiselect:after{bottom:1.25rem;top:auto}.admin__action-multiselect-wrap .admin__action-multiselect:before{height:3.2rem;top:auto;width:3.2rem}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{text-align:left}.admin__action-multiselect-label{position:relative;z-index:1}.admin__action-multiselect-label:before{margin-right:.5rem}.admin__action-multiselect-search-wrap{margin-bottom:1rem;padding:1rem;position:relative}.admin__action-multiselect-search-wrap+.admin__action-multiselect-menu-inner{border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;margin-bottom:1rem}.admin__action-multiselect-menu-inner{margin-bottom:0;max-height:17.2rem;overflow-y:auto}.admin__action-multiselect-search{padding-right:3rem;width:100%}.admin__action-multiselect-search-label{display:block;font-size:1.5rem;height:1em;overflow:hidden;position:absolute;right:2.2rem;top:1.7rem;width:1em}.admin__action-multiselect-search-label:before{content:'\e60c'}.admin__action-multiselect-actions-wrap{text-align:center}.admin__action-multiselect-actions-wrap .action-default{font-size:1.3rem;min-width:13rem}.admin__action-multiselect-crumb{background-color:#f5f5f5;border:1px solid #a79d95;border-radius:1px;display:inline-block;font-size:1.2rem;margin:-.3rem .9rem .5rem -1.1rem;padding:.3rem 2.4rem .4rem 1rem;position:relative;transition:border-color .1s linear}.admin__action-multiselect-crumb:hover{border-color:#908379}.admin__action-multiselect-crumb .action-close{bottom:0;font-size:.5em;position:absolute;right:0;top:0;width:2rem}.admin__action-multiselect-crumb .action-close:hover{color:#000}.admin__action-multiselect-crumb .action-close:active,.admin__action-multiselect-crumb .action-close:focus{background-color:transparent}.admin__action-multiselect-crumb .action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.abs-action-delete,.abs-action-reset,.action-close,.notifications-close,.search-global-field._active .search-global-action{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0}.abs-action-delete:hover,.abs-action-reset:hover,.action-close:hover,.notifications-close:hover,.search-global-field._active .search-global-action:hover{background-color:transparent;border:none;box-shadow:none}.abs-action-default,.abs-action-pattern,.abs-action-primary,.abs-action-quaternary,.abs-action-secondary,.abs-action-tertiary,.action-default,.action-primary,.action-quaternary,.action-secondary,.action-tertiary,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button,.page-actions>button.action-primary,.page-actions>button.primary,button,button.primary,button.secondary,button.tertiary{border:1px solid;border-radius:0;display:inline-block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:1.36;padding:.6rem 1em;text-align:center;vertical-align:baseline}.abs-action-default.disabled,.abs-action-default[disabled],.abs-action-pattern.disabled,.abs-action-pattern[disabled],.abs-action-primary.disabled,.abs-action-primary[disabled],.abs-action-quaternary.disabled,.abs-action-quaternary[disabled],.abs-action-secondary.disabled,.abs-action-secondary[disabled],.abs-action-tertiary.disabled,.abs-action-tertiary[disabled],.action-default.disabled,.action-default[disabled],.action-primary.disabled,.action-primary[disabled],.action-quaternary.disabled,.action-quaternary[disabled],.action-secondary.disabled,.action-secondary[disabled],.action-tertiary.disabled,.action-tertiary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.disabled,.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions .page-actions-buttons>button[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.disabled,.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],.page-actions>button[disabled],button.disabled,button.primary.disabled,button.primary[disabled],button.secondary.disabled,button.secondary[disabled],button.tertiary.disabled,button.tertiary[disabled],button[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-l,.page-actions .page-actions-buttons>button,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions button,.page-actions>button.action-primary,.page-actions>button.primary{font-size:1.6rem;letter-spacing:.025em;padding-bottom:.6875em;padding-top:.6875em}.abs-action-delete{display:inline-block;font-size:1.6rem;margin-left:1.2rem;padding-top:.7rem;text-decoration:none;vertical-align:middle}.abs-action-delete:after{color:#666;content:'\e630'}.abs-action-delete:hover:after{color:#35302c}.abs-action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.abs-action-default:active,.abs-action-default:focus,.abs-action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.abs-action-primary,.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary,button.primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.abs-action-primary:active,.abs-action-primary:focus,.abs-action-primary:hover,.page-actions .page-actions-buttons>button.action-primary:active,.page-actions .page-actions-buttons>button.action-primary:focus,.page-actions .page-actions-buttons>button.action-primary:hover,.page-actions .page-actions-buttons>button.primary:active,.page-actions .page-actions-buttons>button.primary:focus,.page-actions .page-actions-buttons>button.primary:hover,.page-actions>button.action-primary:active,.page-actions>button.action-primary:focus,.page-actions>button.action-primary:hover,.page-actions>button.primary:active,.page-actions>button.primary:focus,.page-actions>button.primary:hover,button.primary:active,button.primary:focus,button.primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-primary.disabled,.abs-action-primary[disabled],.page-actions .page-actions-buttons>button.action-primary.disabled,.page-actions .page-actions-buttons>button.action-primary[disabled],.page-actions .page-actions-buttons>button.primary.disabled,.page-actions .page-actions-buttons>button.primary[disabled],.page-actions>button.action-primary.disabled,.page-actions>button.action-primary[disabled],.page-actions>button.primary.disabled,.page-actions>button.primary[disabled],button.primary.disabled,button.primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.abs-action-secondary,button.secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.abs-action-secondary:active,.abs-action-secondary:focus,.abs-action-secondary:hover,button.secondary:active,button.secondary:focus,button.secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.abs-action-secondary:active,button.secondary:active{background-color:#35302c}.abs-action-tertiary,button.tertiary{background-color:transparent;border-color:transparent;text-shadow:none;color:#008bdb}.abs-action-tertiary:active,.abs-action-tertiary:focus,.abs-action-tertiary:hover,button.tertiary:active,button.tertiary:focus,button.tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#0fa7ff;text-decoration:underline}.abs-action-quaternary,.page-actions .page-actions-buttons>button,.page-actions>button{background-color:transparent;border-color:transparent;text-shadow:none;color:#333}.abs-action-quaternary:active,.abs-action-quaternary:focus,.abs-action-quaternary:hover,.page-actions .page-actions-buttons>button:active,.page-actions .page-actions-buttons>button:focus,.page-actions .page-actions-buttons>button:hover,.page-actions>button:active,.page-actions>button:focus,.page-actions>button:hover{background-color:transparent;border-color:transparent;box-shadow:none;color:#1a1a1a}.abs-action-menu,.actions-split .abs-action-menu .action-submenu,.actions-split .abs-action-menu .action-submenu .action-submenu,.actions-split .action-menu,.actions-split .action-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.actions-split .dropdown-menu{text-align:left;background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu._active,.actions-split .abs-action-menu .action-submenu .action-submenu._active,.actions-split .abs-action-menu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .action-menu._active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .actions-split .dropdown-menu .action-submenu._active,.actions-split .dropdown-menu._active{display:block}.abs-action-menu>li,.actions-split .abs-action-menu .action-submenu .action-submenu>li,.actions-split .abs-action-menu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .action-menu>li,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .actions-split .dropdown-menu .action-submenu>li,.actions-split .dropdown-menu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu>li>a:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .abs-action-menu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .action-menu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu>li>a:hover{text-decoration:none}.abs-action-menu>li._visible,.abs-action-menu>li:hover,.actions-split .abs-action-menu .action-submenu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu .action-submenu>li:hover,.actions-split .abs-action-menu .action-submenu>li._visible,.actions-split .abs-action-menu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .action-menu>li._visible,.actions-split .action-menu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .actions-split .dropdown-menu .action-submenu>li:hover,.actions-split .dropdown-menu>li._visible,.actions-split .dropdown-menu>li:hover{background-color:#e3e3e3}.abs-action-menu>li:active,.actions-split .abs-action-menu .action-submenu .action-submenu>li:active,.actions-split .abs-action-menu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .action-menu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .actions-split .dropdown-menu .action-submenu>li:active,.actions-split .dropdown-menu>li:active{background-color:#cacaca}.abs-action-menu>li._parent,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent,.actions-split .abs-action-menu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .action-menu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent,.actions-split .dropdown-menu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .abs-action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-menu-item,.abs-action-menu .item,.actions-split .abs-action-menu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu .item,.actions-split .abs-action-menu .action-submenu .item,.actions-split .action-menu .action-menu-item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .item,.actions-split .action-menu .item,.actions-split .actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .actions-split .dropdown-menu .action-submenu .item,.actions-split .dropdown-menu .action-menu-item,.actions-split .dropdown-menu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu,.ie9 .actions-split .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu a.action-menu-item,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .abs-action-menu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .action-menu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu a.action-menu-item{color:#333}.abs-action-menu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .abs-action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .action-menu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .actions-split .dropdown-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.abs-action-wrap-triangle{position:relative}.abs-action-wrap-triangle .action-default{width:100%}.abs-action-wrap-triangle .action-default:after,.abs-action-wrap-triangle .action-default:before{border-style:solid;content:'';height:0;position:absolute;top:0;width:0}.abs-action-wrap-triangle .action-default:active,.abs-action-wrap-triangle .action-default:focus,.abs-action-wrap-triangle .action-default:hover{box-shadow:none}._keyfocus .abs-action-wrap-triangle .action-default:focus{box-shadow:0 0 0 1px #007bdb}.ie10 .abs-action-wrap-triangle .action-default.disabled,.ie10 .abs-action-wrap-triangle .action-default[disabled],.ie9 .abs-action-wrap-triangle .action-default.disabled,.ie9 .abs-action-wrap-triangle .action-default[disabled]{background-color:#fcfcfc;opacity:1;text-shadow:none}.abs-action-wrap-triangle-right{display:inline-block;padding-right:1.6rem;position:relative}.abs-action-wrap-triangle-right .action-default:after,.abs-action-wrap-triangle-right .action-default:before{border-color:transparent transparent transparent #e3e3e3;border-width:1.7rem 0 1.6rem 1.7rem;left:100%;margin-left:-1.7rem}.abs-action-wrap-triangle-right .action-default:before{border-left-color:#949494;right:-1px}.abs-action-wrap-triangle-right .action-default:active:after,.abs-action-wrap-triangle-right .action-default:focus:after,.abs-action-wrap-triangle-right .action-default:hover:after{border-left-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-right .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-right .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-right .action-default[disabled]:after{border-color:transparent transparent transparent #fcfcfc}.abs-action-wrap-triangle-right .action-primary:after{border-color:transparent transparent transparent #eb5202}.abs-action-wrap-triangle-right .action-primary:active:after,.abs-action-wrap-triangle-right .action-primary:focus:after,.abs-action-wrap-triangle-right .action-primary:hover:after{border-left-color:#ba4000}.abs-action-wrap-triangle-left{display:inline-block;padding-left:1.6rem}.abs-action-wrap-triangle-left .action-default{text-indent:-.85rem}.abs-action-wrap-triangle-left .action-default:after,.abs-action-wrap-triangle-left .action-default:before{border-color:transparent #e3e3e3 transparent transparent;border-width:1.7rem 1.7rem 1.6rem 0;margin-right:-1.7rem;right:100%}.abs-action-wrap-triangle-left .action-default:before{border-right-color:#949494;left:-1px}.abs-action-wrap-triangle-left .action-default:active:after,.abs-action-wrap-triangle-left .action-default:focus:after,.abs-action-wrap-triangle-left .action-default:hover:after{border-right-color:#dbdbdb}.ie10 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie10 .abs-action-wrap-triangle-left .action-default[disabled]:after,.ie9 .abs-action-wrap-triangle-left .action-default.disabled:after,.ie9 .abs-action-wrap-triangle-left .action-default[disabled]:after{border-color:transparent #fcfcfc transparent transparent}.abs-action-wrap-triangle-left .action-primary:after{border-color:transparent #eb5202 transparent transparent}.abs-action-wrap-triangle-left .action-primary:active:after,.abs-action-wrap-triangle-left .action-primary:focus:after,.abs-action-wrap-triangle-left .action-primary:hover:after{border-right-color:#ba4000}.action-default,button{background:#e3e3e3;border-color:#adadad;color:#514943}.action-default:active,.action-default:focus,.action-default:hover,button:active,button:focus,button:hover{background-color:#dbdbdb;color:#514943;text-decoration:none}.action-primary{background-color:#eb5202;border-color:#eb5202;color:#fff;text-shadow:1px 1px 0 rgba(0,0,0,.25)}.action-primary:active,.action-primary:focus,.action-primary:hover{background-color:#ba4000;border-color:#b84002;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-primary.disabled,.action-primary[disabled]{cursor:default;opacity:.5;pointer-events:none}.action-secondary{background-color:#514943;border-color:#514943;color:#fff;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.action-secondary:active,.action-secondary:focus,.action-secondary:hover{background-color:#35302c;border-color:#35302c;box-shadow:0 0 0 1px #007bdb;color:#fff;text-decoration:none}.action-secondary:active{background-color:#35302c}.action-quaternary,.action-tertiary{background-color:transparent;border-color:transparent;text-shadow:none}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover,.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{background-color:transparent;border-color:transparent;box-shadow:none}.action-tertiary{color:#008bdb}.action-tertiary:active,.action-tertiary:focus,.action-tertiary:hover{color:#0fa7ff;text-decoration:underline}.action-quaternary{color:#333}.action-quaternary:active,.action-quaternary:focus,.action-quaternary:hover{color:#1a1a1a}.action-close>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-close:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.action-close:before{content:'\e62f';transition:color .1s linear}.action-close:hover{cursor:pointer;text-decoration:none}.abs-action-menu .action-submenu,.abs-action-menu .action-submenu .action-submenu,.action-menu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{background-color:#fff;border:1px solid #007bdb;border-radius:1px;box-shadow:1px 1px 5px rgba(0,0,0,.5);color:#333;display:none;font-weight:400;left:0;list-style:none;margin:2px 0 0;min-width:0;padding:0;position:absolute;right:0;top:100%}.abs-action-menu .action-submenu .action-submenu._active,.abs-action-menu .action-submenu._active,.action-menu .action-submenu._active,.action-menu._active,.actions-split .action-menu .action-submenu .action-submenu._active,.actions-split .action-menu .action-submenu._active,.actions-split .dropdown-menu .action-submenu .action-submenu._active,.actions-split .dropdown-menu .action-submenu._active{display:block}.abs-action-menu .action-submenu .action-submenu>li,.abs-action-menu .action-submenu>li,.action-menu .action-submenu>li,.action-menu>li,.actions-split .action-menu .action-submenu .action-submenu>li,.actions-split .action-menu .action-submenu>li,.actions-split .dropdown-menu .action-submenu .action-submenu>li,.actions-split .dropdown-menu .action-submenu>li{border:none;display:block;padding:0;transition:background-color .1s linear}.abs-action-menu .action-submenu .action-submenu>li>a:hover,.abs-action-menu .action-submenu>li>a:hover,.action-menu .action-submenu>li>a:hover,.action-menu>li>a:hover,.actions-split .action-menu .action-submenu .action-submenu>li>a:hover,.actions-split .action-menu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li>a:hover,.actions-split .dropdown-menu .action-submenu>li>a:hover{text-decoration:none}.abs-action-menu .action-submenu .action-submenu>li._visible,.abs-action-menu .action-submenu .action-submenu>li:hover,.abs-action-menu .action-submenu>li._visible,.abs-action-menu .action-submenu>li:hover,.action-menu .action-submenu>li._visible,.action-menu .action-submenu>li:hover,.action-menu>li._visible,.action-menu>li:hover,.actions-split .action-menu .action-submenu .action-submenu>li._visible,.actions-split .action-menu .action-submenu .action-submenu>li:hover,.actions-split .action-menu .action-submenu>li._visible,.actions-split .action-menu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu .action-submenu>li:hover,.actions-split .dropdown-menu .action-submenu>li._visible,.actions-split .dropdown-menu .action-submenu>li:hover{background-color:#e3e3e3}.abs-action-menu .action-submenu .action-submenu>li:active,.abs-action-menu .action-submenu>li:active,.action-menu .action-submenu>li:active,.action-menu>li:active,.actions-split .action-menu .action-submenu .action-submenu>li:active,.actions-split .action-menu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu .action-submenu>li:active,.actions-split .dropdown-menu .action-submenu>li:active{background-color:#cacaca}.abs-action-menu .action-submenu .action-submenu>li._parent,.abs-action-menu .action-submenu>li._parent,.action-menu .action-submenu>li._parent,.action-menu>li._parent,.actions-split .action-menu .action-submenu .action-submenu>li._parent,.actions-split .action-menu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent,.actions-split .dropdown-menu .action-submenu>li._parent{display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row}.abs-action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.abs-action-menu .action-submenu>li._parent>.action-menu-item,.action-menu .action-submenu>li._parent>.action-menu-item,.action-menu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .action-menu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu>li._parent>.action-menu-item,.actions-split .dropdown-menu .action-submenu>li._parent>.action-menu-item{min-width:100%}.abs-action-menu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .action-menu-item,.abs-action-menu .action-submenu .action-submenu .item,.abs-action-menu .action-submenu .item,.action-menu .action-menu-item,.action-menu .action-submenu .action-menu-item,.action-menu .action-submenu .item,.action-menu .item,.actions-split .action-menu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .action-menu-item,.actions-split .action-menu .action-submenu .action-submenu .item,.actions-split .action-menu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu .item,.actions-split .dropdown-menu .action-submenu .item{display:block;padding:.6875em 1em;cursor:pointer}.abs-action-menu .action-submenu .action-submenu,.action-menu .action-submenu,.actions-split .action-menu .action-submenu .action-submenu,.actions-split .dropdown-menu .action-submenu .action-submenu{bottom:auto;left:auto;margin-left:0;margin-top:-1px;position:absolute;right:auto;top:auto}.ie9 .abs-action-menu .action-submenu .action-submenu,.ie9 .abs-action-menu .action-submenu .action-submenu .action-submenu,.ie9 .action-menu .action-submenu,.ie9 .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu,.ie9 .actions-split .action-menu .action-submenu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu,.ie9 .actions-split .dropdown-menu .action-submenu .action-submenu .action-submenu{margin-left:99%;margin-top:-3.5rem}.abs-action-menu .action-submenu .action-submenu a.action-menu-item,.abs-action-menu .action-submenu a.action-menu-item,.action-menu .action-submenu a.action-menu-item,.action-menu a.action-menu-item,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .action-menu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item,.actions-split .dropdown-menu .action-submenu a.action-menu-item{color:#333}.abs-action-menu .action-submenu .action-submenu a.action-menu-item:focus,.abs-action-menu .action-submenu a.action-menu-item:focus,.action-menu .action-submenu a.action-menu-item:focus,.action-menu a.action-menu-item:focus,.actions-split .action-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .action-menu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu .action-submenu a.action-menu-item:focus,.actions-split .dropdown-menu .action-submenu a.action-menu-item:focus{background-color:#e3e3e3;box-shadow:none}.messages .message:last-child{margin:0 0 2rem}.message{background:#fffbbb;border:none;border-radius:0;color:#333;font-size:1.4rem;margin:0 0 1px;padding:1.8rem 4rem 1.8rem 5.5rem;position:relative;text-shadow:none}.message:before{background:0 0;border:0;color:#007bdb;content:'\e61a';font-family:Icons;font-size:1.9rem;font-style:normal;font-weight:400;height:auto;left:1.9rem;line-height:inherit;margin-top:-1.3rem;position:absolute;speak:none;text-shadow:none;top:50%;width:auto}.message-notice:before{color:#007bdb;content:'\e61a'}.message-warning:before{color:#eb5202;content:'\e623'}.message-error{background:#fcc}.message-error:before{color:#e22626;content:'\e632';font-size:1.5rem;left:2.2rem;margin-top:-1rem}.message-success:before{color:#79a22e;content:'\e62d'}.message-spinner:before{display:none}.message-spinner .spinner{font-size:2.5rem;left:1.5rem;position:absolute;top:1.5rem}.message-in-rating-edit{margin-left:1.8rem;margin-right:1.8rem}.modal-popup .action-close,.modal-slide .action-close{color:#736963;position:absolute;right:0;top:0}.modal-popup .action-close:active,.modal-slide .action-close:active{-webkit-transform:none;-ms-transform:none;transform:none}.modal-popup .action-close:active:before,.modal-slide .action-close:active:before{font-size:1.8rem}.modal-popup .action-close:hover:before,.modal-slide .action-close:hover:before{color:#58504b}.modal-popup .action-close:before,.modal-slide .action-close:before{font-size:2rem}.modal-popup .modal-title{font-size:2.4rem;margin-right:6.4rem}.modal-popup .action-close{padding:3rem}.modal-popup .action-close:active,.modal-popup .action-close:focus{background:0 0;padding-right:3.1rem;padding-top:3.1rem}.modal-slide .modal-title{font-size:2.1rem;margin-right:5.7rem}.modal-slide .action-close{padding:2.1rem 2.6rem}.modal-slide .action-close:active{padding-right:2.7rem;padding-top:2.2rem}.modal-slide .page-main-actions{margin-bottom:.6rem;margin-top:2.1rem}.modal-title{font-weight:400;margin-bottom:0;min-height:1em}.spinner{display:inline-block;font-size:4rem;height:1em;margin-right:1.5rem;position:relative;width:1em}.spinner>span:nth-child(1){-webkit-animation-delay:.27s;animation-delay:.27s;-webkit-transform:rotate(-315deg);-ms-transform:rotate(-315deg);transform:rotate(-315deg)}.spinner>span:nth-child(2){-webkit-animation-delay:.36s;animation-delay:.36s;-webkit-transform:rotate(-270deg);-ms-transform:rotate(-270deg);transform:rotate(-270deg)}.spinner>span:nth-child(3){-webkit-animation-delay:.45s;animation-delay:.45s;-webkit-transform:rotate(-225deg);-ms-transform:rotate(-225deg);transform:rotate(-225deg)}.spinner>span:nth-child(4){-webkit-animation-delay:.54s;animation-delay:.54s;-webkit-transform:rotate(-180deg);-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.spinner>span:nth-child(5){-webkit-animation-delay:.63s;animation-delay:.63s;-webkit-transform:rotate(-135deg);-ms-transform:rotate(-135deg);transform:rotate(-135deg)}.spinner>span:nth-child(6){-webkit-animation-delay:.72s;animation-delay:.72s;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg)}.spinner>span:nth-child(7){-webkit-animation-delay:.81s;animation-delay:.81s;-webkit-transform:rotate(-45deg);-ms-transform:rotate(-45deg);transform:rotate(-45deg)}.spinner>span:nth-child(8){-webkit-animation-delay:.9;animation-delay:.9;-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg)}@-webkit-keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}@keyframes fade{0%{background-color:#514943}100%{background-color:#fff}}.spinner>span{-webkit-transform:scale(0.4);-ms-transform:scale(0.4);transform:scale(0.4);-webkit-animation-name:fade;animation-name:fade;-webkit-animation-duration:.72s;animation-duration:.72s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-direction:linear;animation-direction:linear;background-color:#fff;border-radius:6px;clip:rect(0 .28571429em .1em 0);height:.1em;margin-top:.5em;position:absolute;width:1em}.ie9 .spinner{background:url(../images/ajax-loader.gif) center no-repeat}.ie9 .spinner>span{display:none}.popup-loading{background:rgba(255,255,255,.8);border-color:#ef672f;color:#ef672f;font-size:14px;font-weight:700;left:50%;margin-left:-100px;padding:100px 0 10px;position:fixed;text-align:center;top:40%;width:200px;z-index:1003}.popup-loading:after{background-image:url(../images/loader-1.gif);content:'';height:64px;left:50%;margin:-32px 0 0 -32px;position:absolute;top:40%;width:64px;z-index:2}.loading-mask,.loading-old{background:rgba(255,255,255,.4);bottom:0;left:0;position:fixed;right:0;top:0;z-index:2003}.loading-mask img,.loading-old img{display:none}.loading-mask p,.loading-old p{margin-top:118px}.loading-mask .loader,.loading-old .loader{background:url(../images/loader-1.gif) 50% 30% no-repeat #e5e2dd;border-radius:5px;bottom:0;color:#5e5b56;font-size:14px;font-weight:700;height:160px;left:0;margin:auto;opacity:.95;position:absolute;right:0;text-align:center;top:0;width:160px}.admin-user{float:right;line-height:1.36;margin-left:.3rem;z-index:390}.admin-user._active .admin__action-dropdown,.admin-user.active .admin__action-dropdown{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.admin-user .admin__action-dropdown{height:3.3rem;padding:.7rem 2.8rem .4rem 4rem}.admin-user .admin__action-dropdown._active:after,.admin-user .admin__action-dropdown.active:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:after{border-color:#777 transparent transparent;border-style:solid;border-width:.5rem .4rem 0;content:'';height:0;margin-top:-.2rem;position:absolute;right:1.3rem;top:50%;transition:all .2s linear;width:0}._active .admin-user .admin__action-dropdown:after,.active .admin-user .admin__action-dropdown:after{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.admin-user .admin__action-dropdown:hover:after{border-color:#000 transparent transparent}.admin-user .admin__action-dropdown:before{color:#777;content:'\e600';font-size:2rem;left:1.1rem;margin-top:-1.1rem;position:absolute;top:50%}.admin-user .admin__action-dropdown:hover:before{color:#333}.admin-user .admin__action-dropdown-menu{min-width:20rem;padding-left:1rem;padding-right:1rem}.admin-user .admin__action-dropdown-menu>li>a{padding-right:1.8rem;padding-left:.5em;white-space:nowrap;transition:background-color .1s linear}.admin-user .admin__action-dropdown-menu>li>a:hover{background-color:#e0f6fe;color:#333}.admin-user .admin__action-dropdown-menu>li>a:active{background-color:#c7effd;bottom:-1px;position:relative}.admin-user .admin__action-dropdown-menu .admin-user-name{text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:20rem;overflow:hidden;vertical-align:top}.admin-user-account-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;max-width:11.2rem}.search-global{float:right;margin-right:-.3rem;position:relative;z-index:380}.search-global-field{min-width:5rem}.search-global-field._active .search-global-input{background-color:#fff;border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5);padding-right:4rem;width:25rem}.search-global-field._active .search-global-action{display:block;height:3.3rem;position:absolute;right:0;text-indent:-100%;top:0;width:5rem;z-index:3}.search-global-field .autocomplete-results{height:3.3rem;position:absolute;right:0;top:0;width:25rem}.search-global-field .search-global-menu{border:1px solid #007bdb;border-top-color:transparent;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin-top:-2px;padding:0;position:absolute;right:0;top:100%;z-index:2}.search-global-field .search-global-menu:after{background-color:#fff;content:'';height:5px;left:0;position:absolute;right:0;top:-5px}.search-global-field .search-global-menu>li{background-color:#fff;border-top:1px solid #ddd;display:block;font-size:1.2rem;padding:.75rem 1.4rem .55rem}.search-global-field .search-global-menu>li._active{background-color:#e0f6fe}.search-global-field .search-global-menu .title{display:block;font-size:1.4rem}.search-global-field .search-global-menu .type{color:#1a1a1a;display:block}.search-global-label{cursor:pointer;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;z-index:2}.search-global-label:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.search-global-label:hover:before{color:#000}.search-global-label:before{color:#777;content:'\e60c';font-size:2rem}.search-global-input{background-color:transparent;border:1px solid transparent;font-size:1.4rem;height:3.3rem;padding:.75rem 1.4rem .55rem;position:absolute;right:0;top:0;transition:all .1s linear,width .3s linear;width:5rem;z-index:1}.search-global-action{display:none}.notifications-wrapper{float:right;line-height:1;position:relative}.notifications-wrapper.active{z-index:400}.notifications-wrapper.active .notifications-action{border-color:#007bdb;box-shadow:1px 1px 5px rgba(0,0,0,.5)}.notifications-wrapper.active .notifications-action:after{border:none;background-color:#fff;content:'';display:block;height:6px;left:-6px;margin-top:0;position:absolute;right:0;top:100%;width:auto}.notifications-wrapper .admin__action-dropdown-menu{padding:1rem 0 0;width:32rem}.notifications-action{color:#777;height:3.3rem;padding:.75rem 2rem .65rem}.notifications-action:after{display:none}.notifications-action:before{content:'\e607';font-size:1.9rem;margin-right:0}.notifications-action:active:before{position:relative;top:1px}.notifications-action .notifications-counter{background-color:#e22626;border-radius:1em;color:#fff;display:inline-block;font-size:1.1rem;font-weight:700;left:50%;margin-left:.3em;margin-top:-1.1em;padding:.3em .5em;position:absolute;top:50%}.notifications-entry{line-height:1.36;padding:.6rem 2rem .8rem;position:relative;transition:background-color .1s linear}.notifications-entry:hover{background-color:#e0f6fe}.notifications-entry.notifications-entry-last{margin:0 2rem;padding:.3rem 0 1.3rem;text-align:center}.notifications-entry.notifications-entry-last:hover{background-color:transparent}.notifications-entry+.notifications-entry-last{border-top:1px solid #ddd;padding-bottom:.6rem}.notifications-entry ._cutted{cursor:pointer}.notifications-entry ._cutted .notifications-entry-description-start:after{content:'...'}.notifications-entry-title{color:#ef672f;display:block;font-size:1.1rem;font-weight:700;margin-bottom:.7rem;margin-right:1em}.notifications-entry-description{color:#333;font-size:1.1rem;margin-bottom:.8rem}.notifications-entry-description-end{display:none}.notifications-entry-description-end._show{display:inline}.notifications-entry-time{color:#777;font-size:1.1rem}.notifications-close{line-height:1;padding:1rem;position:absolute;right:0;top:.6rem}.notifications-close:before{color:#ccc;content:'\e620';transition:color .1s linear}.notifications-close:hover:before{color:#b3b3b3}.notifications-close:active{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.page-header-actions{padding-top:1.1rem}.page-header-hgroup{padding-right:1.5rem}.page-title{color:#333;font-size:2.8rem;margin-bottom:0}.page-header{padding:1.5rem 3rem}.menu-wrapper{display:inline-block;position:relative;width:8.8rem;z-index:700}.menu-wrapper:before{background-color:#373330;bottom:0;content:'';left:0;position:fixed;top:0;width:8.8rem;z-index:699}.menu-wrapper._fixed{left:0;position:fixed;top:0}.menu-wrapper._fixed~.page-wrapper{margin-left:8.8rem}.menu-wrapper .logo{display:block;height:8.8rem;padding:2.4rem 0 2.2rem;position:relative;text-align:center;z-index:700}._keyfocus .menu-wrapper .logo:focus{background-color:#4a4542;box-shadow:none}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a{background-color:#373330}._keyfocus .menu-wrapper .logo:focus+.admin__menu .level-0:first-child>a:after{display:none}.menu-wrapper .logo:hover .logo-img{-webkit-filter:brightness(1.1);filter:brightness(1.1)}.menu-wrapper .logo:active .logo-img{-webkit-transform:scale(0.95);-ms-transform:scale(0.95);transform:scale(0.95)}.menu-wrapper .logo .logo-img{height:4.2rem;transition:-webkit-filter .2s linear,filter .2s linear,transform .1s linear;width:3.5rem}.abs-menu-separator,.admin__menu .item-partners>a:after,.admin__menu .level-0:first-child>a:after{background-color:#736963;content:'';display:block;height:1px;left:0;margin-left:16%;position:absolute;top:0;width:68%}.admin__menu li{display:block}.admin__menu .level-0:first-child>a{position:relative}.admin__menu .level-0:first-child._active>a:after{display:none}.admin__menu .level-0._active>a,.admin__menu .level-0:hover>a{color:#f7f3eb}.admin__menu .level-0._active>a{background-color:#524d49}.admin__menu .level-0:hover>a{background-color:#4a4542}.admin__menu .level-0>a{color:#aaa6a0;display:block;font-size:1rem;letter-spacing:.025em;min-height:6.2rem;padding:1.2rem .5rem .5rem;position:relative;text-align:center;text-decoration:none;text-transform:uppercase;transition:background-color .1s linear;word-wrap:break-word;z-index:700}.admin__menu .level-0>a:focus{box-shadow:none}.admin__menu .level-0>a:before{content:'\e63a';display:block;font-size:2.2rem;height:2.2rem}.admin__menu .level-0>.submenu{background-color:#4a4542;box-shadow:0 0 3px #000;left:100%;min-height:calc(8.8rem + 2rem + 100%);padding:2rem 0 0;position:absolute;top:0;-webkit-transform:translateX(-100%);-ms-transform:translateX(-100%);transform:translateX(-100%);transition-property:-webkit-transform,visibility;transition-property:transform,visibility;transition-duration:.3s;transition-timing-function:ease-in-out;visibility:hidden;z-index:697}.admin__menu .level-0._show>.submenu{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0);visibility:visible;z-index:698}.admin__menu .level-1{margin-left:1.5rem;margin-right:1.5rem}.admin__menu [class*=level-]:not(.level-0) a{display:block;padding:1.25rem 1.5rem}.admin__menu [class*=level-]:not(.level-0) a:hover{background-color:#403934}.admin__menu [class*=level-]:not(.level-0) a:active{padding-top:1.35rem;padding-bottom:1.15rem;background-color:#322c29}.admin__menu .submenu li{min-width:23.8rem}.admin__menu .submenu a{color:#fcfcfc;transition:background-color .1s linear}.admin__menu .submenu a:focus,.admin__menu .submenu a:hover{box-shadow:none;text-decoration:none}._keyfocus .admin__menu .submenu a:focus{background-color:#403934}._keyfocus .admin__menu .submenu a:active{background-color:#322c29}.admin__menu .submenu .parent{margin-bottom:4.5rem}.admin__menu .submenu .parent .submenu-group-title,.admin__menu .submenu .parent>a{color:#a79d95;display:block;font-size:1.6rem;font-weight:600;margin-bottom:.7rem;padding:1.25rem 1.5rem;pointer-events:none}.admin__menu .submenu .column{display:table-cell}.admin__menu .submenu-title{color:#fff;display:block;font-size:2.2rem;font-weight:600;margin-bottom:4.2rem;margin-left:3rem;margin-right:5.8rem}.admin__menu .submenu-sub-title{color:#fff;display:block;font-size:1.2rem;margin:-3.8rem 5.8rem 3.8rem 3rem}.admin__menu .action-close{padding:2.4rem 2.8rem;position:absolute;right:0;top:0}.admin__menu .action-close:before{color:#a79d95;font-size:1.7rem}.admin__menu .action-close:hover:before{color:#fff}.admin__menu .item-dashboard>a:before{content:'\e604';font-size:1.8rem;padding-top:.4rem}.admin__menu .item-sales>a:before{content:'\e60b'}.admin__menu .item-catalog>a:before{content:'\e608'}.admin__menu .item-customer>a:before{content:'\e603';font-size:2.6rem;position:relative;top:-.4rem}.admin__menu .item-marketing>a:before{content:'\e609';font-size:2rem;padding-top:.2rem}.admin__menu .item-content>a:before{content:'\e602';font-size:2.4rem;position:relative;top:-.2rem}.admin__menu .item-report>a:before{content:'\e60a'}.admin__menu .item-stores>a:before{content:'\e60d';font-size:1.9rem;padding-top:.3rem}.admin__menu .item-system>a:before{content:'\e60e'}.admin__menu .item-partners>a{padding-bottom:1rem}.admin__menu .item-partners>a:before{content:'\e612'}.admin__menu-overlay{bottom:0;left:0;position:fixed;right:0;top:0;z-index:697}.store-switcher{color:#333;float:left;font-size:1.3rem;margin-top:.7rem}.store-switcher .admin__action-dropdown{margin-left:.5em;background-color:#f8f8f8}.store-switcher .dropdown{display:inline-block;position:relative}.store-switcher .dropdown:after,.store-switcher .dropdown:before{content:'';display:table}.store-switcher .dropdown:after{clear:both}.store-switcher .dropdown .action.toggle{cursor:pointer;display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e607';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle:active:after,.store-switcher .dropdown .action.toggle:hover:after{color:#333}.store-switcher .dropdown .action.toggle.active{display:inline-block;text-decoration:none}.store-switcher .dropdown .action.toggle.active:after{-webkit-font-smoothing:antialiased;font-size:22px;line-height:2;color:#333;content:'\e618';font-family:icons-blank-theme;margin:0;vertical-align:top;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.store-switcher .dropdown .action.toggle.active:active:after,.store-switcher .dropdown .action.toggle.active:hover:after{color:#333}.store-switcher .dropdown .dropdown-menu{background:#fff;border:1px solid #ada89e;z-index:100;margin:4px 0 0;padding:0;list-style:none;box-sizing:border-box;position:absolute;top:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);min-width:19.5rem;display:none}.store-switcher .dropdown .dropdown-menu li{margin:0;padding:0}.store-switcher .dropdown .dropdown-menu li:hover{background:0 0;cursor:pointer}.store-switcher .dropdown.active{overflow:visible}.store-switcher .dropdown.active .dropdown-menu{display:block}.store-switcher .dropdown-menu{left:0;margin-top:.5em;padding-top:.25em}.store-switcher .dropdown-menu li{border:0;cursor:default}.store-switcher .dropdown-menu li:hover{cursor:default}.store-switcher .dropdown-menu li a,.store-switcher .dropdown-menu li span{color:#333;display:block;padding:.5rem 1.3rem}.store-switcher .dropdown-menu li a{text-decoration:none}.store-switcher .dropdown-menu li a:hover{background:#e9e9e9}.store-switcher .dropdown-menu li span{color:#adadad;cursor:default}.store-switcher .dropdown-menu li.current span{background:#eee;color:#333}.store-switcher .dropdown-menu .store-switcher-store a,.store-switcher .dropdown-menu .store-switcher-store span{padding-left:2.6rem}.store-switcher .dropdown-menu .store-switcher-store-view a,.store-switcher .dropdown-menu .store-switcher-store-view span{padding-left:3.9rem}.store-switcher .dropdown-menu .dropdown-toolbar{border-top:1px solid #ebebeb;margin-top:1rem}.store-switcher .dropdown-menu .dropdown-toolbar a:before{content:'\e60e';margin-right:.25em;position:relative;top:1px}.store-switcher-label{font-weight:700}.store-switcher-alt{display:inline-block;position:relative}.store-switcher-alt.active .dropdown-menu{display:block}.store-switcher-alt .dropdown-menu{margin-top:2px;white-space:nowrap}.store-switcher-alt .dropdown-menu ul{list-style:none;margin:0;padding:0}.store-switcher-alt strong{color:#a6a098;display:block;font-size:14px;font-weight:500;line-height:1.333;padding:5px 10px}.store-switcher-alt .store-selected{color:#676056;cursor:pointer;font-size:12px;font-weight:400;line-height:1.333}.store-switcher-alt .store-selected:after{color:#b3b0ad;content:'\e02c';-webkit-font-smoothing:antialiased;font-style:normal;font-weight:400;margin:0 0 0 3px;speak:none;vertical-align:text-top}.store-switcher-alt .store-switcher-store,.store-switcher-alt .store-switcher-website{padding:0}.store-switcher-alt .store-switcher-store:hover,.store-switcher-alt .store-switcher-website:hover{background:0 0}.store-switcher-alt .manage-stores,.store-switcher-alt .store-switcher-all,.store-switcher-alt .store-switcher-store-view{padding:0}.store-switcher-alt .manage-stores>a,.store-switcher-alt .store-switcher-all>a{color:#676056;display:block;font-size:12px;padding:8px 15px;text-decoration:none}.store-switcher-website{margin:5px 0 0}.store-switcher-website>strong{padding-left:13px}.store-switcher-store{margin:1px 0 0}.store-switcher-store>strong{padding-left:20px}.store-switcher-store>ul{margin-top:1px}.store-switcher-store-view:first-child{border-top:1px solid #e5e5e5}.store-switcher-store-view>a{color:#333;display:block;font-size:13px;padding:5px 15px 5px 24px;text-decoration:none}.tooltip{margin-left:.5em}.tooltip .help a,.tooltip .help span{cursor:pointer;display:inline-block;height:22px;position:relative;vertical-align:middle;width:22px;z-index:2}.tooltip .help a:before,.tooltip .help span:before{color:#333;content:'\e633';font-size:1.7rem}.tooltip .help a span,.tooltip .help span span{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.tooltip .help a:hover{text-decoration:none}.tooltip .tooltip-content{background:#000;border-radius:3px;color:#fff;display:none;margin-left:-19px;margin-top:10px;max-width:200px;padding:4px 8px;position:absolute;text-shadow:none;z-index:20}.tooltip .tooltip-content:before{border-bottom:5px solid #000;border-left:5px solid transparent;border-right:5px solid transparent;content:'';height:0;left:20px;opacity:.8;position:absolute;top:-5px;width:0}.tooltip .tooltip-content.loading{position:absolute}.tooltip .tooltip-content.loading:before{border-bottom-color:rgba(0,0,0,.3)}.tooltip:hover>.tooltip-content{display:block}.page-actions._fixed,.page-main-actions:not(._hidden){background:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;padding:1.5rem}.page-main-actions{margin:0 0 3rem}.page-main-actions._hidden .store-switcher{display:none}.page-actions{float:right}.page-main-actions .page-actions._fixed{left:8.8rem;position:fixed;right:0;top:0;z-index:400}.page-main-actions .page-actions._fixed .page-actions-inner:before{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#333;content:attr(data-title);float:left;font-size:2.8rem;margin-top:.3rem;max-width:50%}.page-actions .page-actions-buttons>button,.page-actions>button{float:right;margin-left:1.3rem}.page-actions .page-actions-buttons>button.action-back,.page-actions .page-actions-buttons>button.back,.page-actions>button.action-back,.page-actions>button.back{float:left;-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .page-actions-buttons>button.action-back:before,.page-actions .page-actions-buttons>button.back:before,.page-actions>button.action-back:before,.page-actions>button.back:before{content:'\e626';margin-right:.5em;position:relative;top:1px}.page-actions .page-actions-buttons>button.action-primary,.page-actions .page-actions-buttons>button.primary,.page-actions>button.action-primary,.page-actions>button.primary{-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .page-actions-buttons>button.save:not(.primary),.page-actions>button.save:not(.primary){-ms-flex-order:1;-webkit-order:1;order:1}.page-actions .page-actions-buttons>button.delete,.page-actions>button.delete{-ms-flex-order:-1;-webkit-order:-1;order:-1}.page-actions .actions-split{float:right;margin-left:1.3rem;-ms-flex-order:2;-webkit-order:2;order:2}.page-actions .actions-split .dropdown-menu .item{display:block}.page-actions-buttons{float:right;-webkit-justify-content:flex-end;-ms-flex-pack:end;justify-content:flex-end;display:-webkit-flex;display:-ms-flexbox;display:flex}.customer-index-edit .page-actions-buttons{background-color:transparent}.admin__page-nav{background:#f1f1f1;border:1px solid #e3e3e3}.admin__page-nav._collapsed:first-child{border-bottom:none}.admin__page-nav._collapsed._show{border-bottom:1px solid #e3e3e3}.admin__page-nav._collapsed._show ._collapsible{background:#f1f1f1}.admin__page-nav._collapsed._show ._collapsible:after{content:'\e62b'}.admin__page-nav._collapsed._show ._collapsible+.admin__page-nav-items{display:block}.admin__page-nav._collapsed._hide .admin__page-nav-title-messages,.admin__page-nav._collapsed._hide .admin__page-nav-title-messages ._active{display:inline-block}.admin__page-nav+._collapsed{border-bottom:none;border-top:none}.admin__page-nav-title{border-bottom:1px solid #e3e3e3;color:#303030;display:block;font-size:1.4rem;line-height:1.2;margin:0 0 -1px;padding:1.8rem 1.5rem;position:relative;text-transform:uppercase}.admin__page-nav-title._collapsible{background:#fff;cursor:pointer;margin:0;padding-right:3.5rem;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-title._collapsible+.admin__page-nav-items{display:none;margin-top:-1px}.admin__page-nav-title._collapsible:after{content:'\e628';font-size:1.3rem;font-weight:700;position:absolute;right:1.8rem;top:2rem}.admin__page-nav-title._collapsible:hover{background:#f1f1f1}.admin__page-nav-title._collapsible:last-child{margin:0 0 -1px}.admin__page-nav-title strong{font-weight:700}.admin__page-nav-title .admin__page-nav-title-messages{display:none}.admin__page-nav-items{list-style-type:none;margin:0;padding:1rem 0 1.3rem}.admin__page-nav-item{border-left:3px solid transparent;margin-left:.7rem;padding:0;position:relative;transition:border-color .1s ease-out,background-color .1s ease-out}.admin__page-nav-item:hover{border-color:#e4e4e4}.admin__page-nav-item:hover .admin__page-nav-link{background:#e4e4e4;color:#303030;text-decoration:none}.admin__page-nav-item._active,.admin__page-nav-item.ui-state-active{border-color:#eb5202}.admin__page-nav-item._active .admin__page-nav-link,.admin__page-nav-item.ui-state-active .admin__page-nav-link{background:#fff;border-color:#e3e3e3;border-right:1px solid #fff;color:#303030;margin-right:-1px;font-weight:600}.admin__page-nav-item._loading:before,.admin__page-nav-item.ui-tabs-loading:before{display:none}.admin__page-nav-item._loading .admin__page-nav-item-message-loader,.admin__page-nav-item.ui-tabs-loading .admin__page-nav-item-message-loader{display:inline-block}.admin__page-nav-link{border:1px solid transparent;border-width:1px 0;color:#303030;display:block;font-weight:500;line-height:1.2;margin:0 0 -1px;padding:2rem 4rem 2rem 1rem;transition:border-color .1s ease-out,background-color .1s ease-out;word-wrap:break-word}.admin__page-nav-item-messages,.admin__page-nav-link._changed .admin__page-nav-item-message._changed,.admin__page-nav-link._error .admin__page-nav-item-message._error{display:inline-block}.admin__page-nav-item-messages .admin__page-nav-item-message{position:relative}.admin__page-nav-item-messages .admin__page-nav-item-message:hover{z-index:500}.admin__page-nav-item-messages .admin__page-nav-item-message:hover .admin__page-nav-item-message-tooltip{display:block}.admin__page-nav-item-messages .admin__page-nav-item-message._changed,.admin__page-nav-item-messages .admin__page-nav-item-message._error{display:none}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon{display:inline-block;font-size:1.4rem;padding-left:.8em;vertical-align:top}.admin__page-nav-item-messages .admin__page-nav-item-message._changed .admin__page-nav-item-message-icon:after,.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#666;content:'\e631'}.admin__page-nav-item-messages .admin__page-nav-item-message._error .admin__page-nav-item-message-icon:after{color:#eb5202;content:'\e623'}.admin__page-nav-item-messages .admin__page-nav-item-message-loader{display:none;margin-top:-1rem;position:absolute;right:0;top:50%}.admin__page-nav-item-messages .admin__page-nav-item-message-loader .spinner{font-size:2rem;margin-right:1.5rem}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip{background:#f1f1f1;border:1px solid #f1f1f1;border-radius:1px;bottom:3.7rem;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;left:-1rem;line-height:1.36;padding:2rem;position:absolute;text-transform:none;width:27rem;word-break:normal;z-index:2}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after,.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border:15px solid transparent;height:0;width:0;border-top-color:#f1f1f1;content:'';display:block;left:2rem;position:absolute;top:100%;z-index:3}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:after{border-top-color:#f1f1f1;margin-top:-1px;z-index:4}.admin__page-nav-item-messages .admin__page-nav-item-message-tooltip:before{border-top-color:#bfbfbf}.admin__data-grid-wrap-static .data-grid{box-sizing:border-box}.admin__data-grid-wrap-static .data-grid thead{color:#333}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td{background-color:#f5f5f5}.admin__data-grid-wrap-static .data-grid tr:nth-child(even) td._dragging{background-color:rgba(245,245,245,.95)}.admin__data-grid-wrap-static .data-grid ul{padding-left:1rem;margin-left:1rem}.admin__data-grid-wrap-static .admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:0;position:absolute;right:0;top:0;z-index:401}.admin__data-grid-wrap-static .admin__data-grid-loading-mask .grid-loader{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-filters-actions-wrap{float:right}.data-grid-search-control-wrap{float:left;max-width:45.5rem;position:relative;width:50%}.data-grid-search-control-wrap :-ms-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-webkit-input-placeholder{font-style:italic}.data-grid-search-control-wrap ::-moz-placeholder{font-style:italic}.data-grid-search-control-wrap .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:.6rem 2rem .2rem;position:absolute;right:0;top:1px}.data-grid-search-control-wrap .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.data-grid-search-control-wrap .action-submit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.data-grid-search-control-wrap .action-submit:hover:before{color:#1a1a1a}._keyfocus .data-grid-search-control-wrap .action-submit:focus{box-shadow:0 0 0 1px #008bdb}.data-grid-search-control-wrap .action-submit:before{content:'\e60c';font-size:2rem;transition:color .1s linear}.data-grid-search-control-wrap .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.data-grid-search-control-wrap .abs-action-menu .action-submenu,.data-grid-search-control-wrap .abs-action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .action-menu,.data-grid-search-control-wrap .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu,.data-grid-search-control-wrap .actions-split .action-menu .action-submenu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu,.data-grid-search-control-wrap .actions-split .dropdown-menu .action-submenu .action-submenu{z-index:400;max-height:19.25rem;overflow-y:auto}.data-grid-search-control-wrap .action-menu-item._selected{background-color:#e0f6fe}.data-grid-search-control-wrap .data-grid-search-label{display:none}.data-grid-search-control{padding-right:6rem;width:100%}.data-grid-filters-action-wrap{float:left;padding-left:2rem}.data-grid-filters-action-wrap .action-default{font-size:1.3rem;margin-bottom:1rem;padding-left:1.7rem;padding-right:2.1rem;padding-top:.7rem}.data-grid-filters-action-wrap .action-default._active{background-color:#fff;border-bottom-color:#fff;border-right-color:#ccc;font-weight:600;margin:-.1rem 0 0;padding-bottom:1.6rem;padding-top:.8rem;position:relative;z-index:281}.data-grid-filters-action-wrap .action-default._active:after{background-color:#eb5202;bottom:100%;content:'';height:3px;left:-1px;position:absolute;right:-1px}.data-grid-filters-action-wrap .action-default:before{color:#333;content:'\e605';font-size:1.8rem;margin-right:.4rem;position:relative;top:-1px;vertical-align:top}.data-grid-filters-action-wrap .filters-active{display:none}.admin__data-grid-filters-wrap{opacity:0;visibility:hidden;clear:both;font-size:1.3rem;transition:opacity .3s ease}.admin__data-grid-filters-wrap._show{opacity:1;visibility:visible;border-bottom:1px solid #ccc;border-top:1px solid #ccc;margin-bottom:.7rem;padding:3.6rem 0 3rem;position:relative;top:-1px;z-index:280}.admin__data-grid-filters-wrap._show .admin__data-grid-filters,.admin__data-grid-filters-wrap._show .admin__data-grid-filters-footer{display:block}.admin__data-grid-filters-wrap .admin__form-field-label,.admin__data-grid-filters-wrap .admin__form-field-legend{display:block;font-weight:700;margin:0 0 .3rem;text-align:left}.admin__data-grid-filters-wrap .admin__form-field{display:inline-block;margin-bottom:2em;margin-left:0;padding-left:2rem;padding-right:2rem;vertical-align:top;width:calc(100% / 4 - 4px)}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field{display:block;float:none;margin-bottom:1.5rem;padding-left:0;padding-right:0;width:auto}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field:last-child{margin-bottom:0}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-label{border:1px solid transparent;float:left;font-weight:400;line-height:1.36;margin-bottom:0;padding-bottom:.6rem;padding-right:1em;padding-top:.6rem;width:25%}.admin__data-grid-filters-wrap .admin__form-field .admin__form-field .admin__form-field-control{margin-left:25%}.admin__data-grid-filters-wrap .admin__action-multiselect,.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text,.admin__data-grid-filters-wrap .admin__form-field-label{font-size:1.3rem}.admin__data-grid-filters-wrap .admin__control-select{padding-top:.5rem;height:3.2rem}.admin__data-grid-filters-wrap .admin__control-select,.admin__data-grid-filters-wrap .admin__control-text.hasDatepicker{width:100%}.admin__data-grid-filters{display:none;margin-left:-2rem;margin-right:-2rem}.admin__filters-legend{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-filters-footer{display:none;font-size:1.4rem}.admin__data-grid-filters-footer .admin__footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-filters-footer .admin__footer-secondary-actions{float:left;width:50%}.admin__data-grid-filters-current{border-bottom:.1rem solid #ccc;border-top:.1rem solid #ccc;display:none;font-size:1.3rem;margin-bottom:.9rem;padding-bottom:.8rem;padding-top:1.1rem;width:100%}.admin__data-grid-filters-current._show{display:table;position:relative;top:-1px;z-index:3}.admin__data-grid-filters-current._show+.admin__data-grid-filters-wrap._show{margin-top:-1rem}.admin__current-filters-actions-wrap,.admin__current-filters-list-wrap,.admin__current-filters-title-wrap{display:table-cell;vertical-align:top}.admin__current-filters-title{margin-right:1em;white-space:nowrap}.admin__current-filters-list-wrap{width:100%}.admin__current-filters-list{margin-bottom:0}.admin__current-filters-list>li{display:inline-block;font-weight:600;margin:0 1rem .5rem;padding-right:2.6rem;position:relative}.admin__current-filters-list .action-remove{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;padding:0;line-height:1;position:absolute;right:0;top:1px}.admin__current-filters-list .action-remove:hover{background-color:transparent;border:none;box-shadow:none}.admin__current-filters-list .action-remove:hover:before{color:#949494}.admin__current-filters-list .action-remove:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__current-filters-list .action-remove:before{color:#adadad;content:'\e620';font-size:1.6rem;transition:color .1s linear}.admin__current-filters-list .action-remove>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__current-filters-actions-wrap .action-clear{border:none;padding-bottom:0;padding-top:0;white-space:nowrap}.admin__data-grid-pager-wrap{text-align:right}.admin__data-grid-pager{display:inline-block;margin-left:3rem}.admin__data-grid-pager .admin__control-text::-webkit-inner-spin-button,.admin__data-grid-pager .admin__control-text::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.admin__data-grid-pager .admin__control-text{-moz-appearance:textfield;text-align:center;width:4.4rem}.action-next,.action-previous{width:4.4rem}.action-next:before,.action-previous:before{font-weight:700}.action-next>span,.action-previous>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.action-previous{margin-right:2.5rem;text-indent:-.25em}.action-previous:before{content:'\e629'}.action-next{margin-left:1.5rem;text-indent:.1em}.action-next:before{content:'\e62a'}.admin__data-grid-action-bookmarks{opacity:.98}.admin__data-grid-action-bookmarks .admin__action-dropdown-text:after{right:-6px;left:0}.admin__data-grid-action-bookmarks._active{z-index:290}.admin__data-grid-action-bookmarks .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;max-width:15rem;min-width:4.9rem;vertical-align:top;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown:before{content:'\e60f'}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu{font-size:1.3rem;left:0;padding:1rem 0;right:auto}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li{padding:0 5rem 0 0;position:relative;white-space:nowrap}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action){transition:background-color .1s linear}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu>li:not(.action-dropdown-menu-action):hover{background-color:#e3e3e3}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item{max-width:23rem;min-width:18rem;white-space:normal;word-break:break-all}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit{display:none;padding-bottom:1rem;padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-edit .action-dropdown-menu-item-actions{padding-bottom:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action{padding-left:1rem;padding-top:1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action+.action-dropdown-menu-item-last{padding-top:.5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a{color:#008bdb;text-decoration:none;display:inline-block;padding-left:1.1rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-action>a:hover{color:#0fa7ff;text-decoration:underline}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-last{padding-bottom:0}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item{display:none}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._edit .action-dropdown-menu-item-edit{display:block}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu ._active .action-dropdown-menu-link{font-weight:600}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{font-size:1.3rem;min-width:15rem;width:calc(100% - 4rem)}.ie9 .admin__data-grid-action-bookmarks .admin__action-dropdown-menu .admin__control-text{width:15rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-item-actions{border-left:1px solid #fff;bottom:0;position:absolute;right:0;top:0;width:5rem}.admin__data-grid-action-bookmarks .admin__action-dropdown-menu .action-dropdown-menu-link{color:#333;display:block;text-decoration:none;padding:1rem 1rem 1rem 2.1rem}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit,.admin__data-grid-action-bookmarks .action-submit{background-color:transparent;border:none;border-radius:0;box-shadow:none;margin:0;vertical-align:top}.admin__data-grid-action-bookmarks .action-delete:hover,.admin__data-grid-action-bookmarks .action-edit:hover,.admin__data-grid-action-bookmarks .action-submit:hover{background-color:transparent;border:none;box-shadow:none}.admin__data-grid-action-bookmarks .action-delete:before,.admin__data-grid-action-bookmarks .action-edit:before,.admin__data-grid-action-bookmarks .action-submit:before{font-size:1.7rem}.admin__data-grid-action-bookmarks .action-delete>span,.admin__data-grid-action-bookmarks .action-edit>span,.admin__data-grid-action-bookmarks .action-submit>span{clip:rect(0,0,0,0);overflow:hidden;position:absolute}.admin__data-grid-action-bookmarks .action-delete,.admin__data-grid-action-bookmarks .action-edit{padding:.6rem 1.4rem}.admin__data-grid-action-bookmarks .action-delete:active,.admin__data-grid-action-bookmarks .action-edit:active{-webkit-transform:scale(0.9);-ms-transform:scale(0.9);transform:scale(0.9)}.admin__data-grid-action-bookmarks .action-submit{padding:.6rem 1rem .6rem .8rem}.admin__data-grid-action-bookmarks .action-submit:active{position:relative;right:-1px}.admin__data-grid-action-bookmarks .action-submit:before{content:'\e625'}.admin__data-grid-action-bookmarks .action-delete:before{content:'\e630'}.admin__data-grid-action-bookmarks .action-edit{padding-top:.8rem}.admin__data-grid-action-bookmarks .action-edit:before{content:'\e631'}.admin__data-grid-action-columns._active{opacity:.98;z-index:290}.admin__data-grid-action-columns .admin__action-dropdown:before{content:'\e60e';font-size:1.8rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-columns-menu{color:#303030;font-size:1.3rem;overflow:hidden;padding:2.2rem 3.5rem 1rem;z-index:1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-header{border-bottom:1px solid #d1d1d1}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-content{width:49.2rem}.admin__data-grid-action-columns-menu._overflow .admin__action-dropdown-menu-footer{border-top:1px solid #d1d1d1;padding-top:2.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-content{max-height:22.85rem;overflow-y:auto;padding-top:1.5rem;position:relative;width:47.4rem}.admin__data-grid-action-columns-menu .admin__field-option{height:1.9rem;float:left;margin-bottom:1.5rem;padding:0 1rem 0 0;width:15.8rem}.admin__data-grid-action-columns-menu .admin__field-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-header{padding-bottom:1.5rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-menu-footer{padding:1rem 0 2rem}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-main-actions{margin-left:25%;text-align:right}.admin__data-grid-action-columns-menu .admin__action-dropdown-footer-secondary-actions{float:left;margin-left:-1em}.admin__data-grid-action-export._active{opacity:.98;z-index:290}.admin__data-grid-action-export .admin__action-dropdown:before{content:'\e635';font-size:1.7rem;left:.3rem;margin-right:.7rem;vertical-align:top}.admin__data-grid-action-export-menu{padding-left:2rem;padding-right:2rem;padding-top:1rem}.admin__data-grid-action-export-menu .admin__action-dropdown-footer-main-actions{padding-bottom:2rem;padding-top:2.5rem;white-space:nowrap}.sticky-header{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:8.8rem;right:0;margin-top:-1px;padding:.5rem 3rem 0;position:fixed;top:77px;z-index:400}.sticky-header .admin__data-grid-wrap{margin-bottom:0;overflow-x:visible;padding-bottom:0}.sticky-header .admin__data-grid-header-row{position:relative;text-align:right}.sticky-header .admin__data-grid-header-row:last-child{margin:0}.sticky-header .admin__data-grid-actions-wrap,.sticky-header .admin__data-grid-filters-wrap,.sticky-header .admin__data-grid-pager-wrap,.sticky-header .data-grid-filters-actions-wrap,.sticky-header .data-grid-search-control-wrap{display:inline-block;float:none;vertical-align:top}.sticky-header .action-select-wrap{float:left;margin-right:1.5rem;width:16.66666667%}.sticky-header .admin__control-support-text{float:left}.sticky-header .data-grid-search-control-wrap{margin:-.5rem 0 0 1.1rem;width:auto}.sticky-header .data-grid-search-control-wrap .data-grid-search-label{box-sizing:border-box;cursor:pointer;display:block;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;position:relative;text-align:center}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:before{color:#333;content:'\e60c';font-size:2rem;transition:color .1s linear}.sticky-header .data-grid-search-control-wrap .data-grid-search-label:hover:before{color:#000}.sticky-header .data-grid-search-control-wrap .data-grid-search-label span{display:none}.sticky-header .data-grid-filters-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-left:0;position:relative}.sticky-header .data-grid-filters-actions-wrap .action-default{background-color:transparent;border:1px solid transparent;box-sizing:border-box;min-width:3.8rem;padding:1.2rem .6rem 1.7rem;text-align:center;transition:all .15s ease}.sticky-header .data-grid-filters-actions-wrap .action-default span{display:none}.sticky-header .data-grid-filters-actions-wrap .action-default:before{margin:0}.sticky-header .data-grid-filters-actions-wrap .action-default._active{background-color:#fff;border-color:#adadad #adadad #fff;box-shadow:1px 1px 5px rgba(0,0,0,.5);z-index:210}.sticky-header .data-grid-filters-actions-wrap .action-default._active:after{background-color:#fff;content:'';height:6px;left:-2px;position:absolute;right:-6px;top:100%}.sticky-header .data-grid-filters-action-wrap{padding:0}.sticky-header .admin__data-grid-filters-wrap{background-color:#fff;border:1px solid #adadad;box-shadow:0 5px 5px 0 rgba(0,0,0,.25);left:0;padding-left:3.5rem;padding-right:3.5rem;position:absolute;top:100%;width:100%;z-index:209}.sticky-header .admin__data-grid-filters-current+.admin__data-grid-filters-wrap._show{margin-top:-6px}.sticky-header .filters-active{background-color:#e04f00;border-radius:10px;color:#fff;display:block;font-size:1.4rem;font-weight:700;padding:.1rem .7rem;position:absolute;right:-7px;top:0;z-index:211}.sticky-header .filters-active:empty{padding-top:0;padding-bottom:0}.sticky-header .admin__data-grid-actions-wrap{margin:-.5rem 0 0 1.1rem;padding-right:.3rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown{background-color:transparent;box-sizing:border-box;min-width:3.8rem;padding-left:.6rem;padding-right:.6rem;text-align:center}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown .admin__action-dropdown-text{display:inline-block;min-width:0;max-width:0;overflow:hidden}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:before{margin:0}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap{margin-right:1.1rem}.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after,.sticky-header .admin__data-grid-actions-wrap .admin__action-dropdown:after{display:none}.sticky-header .admin__data-grid-actions-wrap ._active .admin__action-dropdown{background-color:#fff}.sticky-header .admin__data-grid-action-bookmarks .admin__action-dropdown:before{position:relative;top:-3px}.sticky-header .admin__data-grid-filters-current{border-top:0;border-bottom:0;margin-bottom:0;padding-bottom:0;padding-top:0}.sticky-header .admin__data-grid-pager .admin__control-text,.sticky-header .admin__data-grid-pager-wrap .admin__control-support-text,.sticky-header .data-grid-search-control-wrap .action-submit,.sticky-header .data-grid-search-control-wrap .data-grid-search-control{display:none}.sticky-header .action-next{margin:0}.sticky-header .data-grid{margin-bottom:-1px}.data-grid-cap-left,.data-grid-cap-right{background-color:#f8f8f8;bottom:-2px;position:absolute;top:6rem;width:3rem;z-index:201}.data-grid-cap-left{left:0}.data-grid-cap-right{right:0}.admin__data-grid-header{font-size:1.4rem}.admin__data-grid-header-row+.admin__data-grid-header-row{margin-top:1.1rem}.admin__data-grid-header-row:last-child{margin-bottom:0}.admin__data-grid-header-row .action-select-wrap{display:block}.admin__data-grid-header-row .action-select{width:100%}.admin__data-grid-actions-wrap{float:right;margin-left:1.1rem;margin-top:-.5rem;text-align:right}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap{position:relative;text-align:left}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._hide+.admin__action-dropdown-wrap:after,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:first-child:after{display:none}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown,.admin__data-grid-actions-wrap .admin__action-dropdown-wrap._active .admin__action-dropdown-menu{border-color:#adadad}.admin__data-grid-actions-wrap .admin__action-dropdown-wrap:after{border-left:1px solid #ccc;content:'';height:3.2rem;left:0;position:absolute;top:.5rem;z-index:3}.admin__data-grid-actions-wrap .admin__action-dropdown{padding-bottom:1.7rem;padding-top:1.2rem}.admin__data-grid-actions-wrap .admin__action-dropdown:after{margin-top:-.4rem}.admin__data-grid-outer-wrap{min-height:8rem;position:relative}.admin__data-grid-wrap{margin-bottom:2rem;max-width:100%;overflow-x:auto;padding-bottom:1rem;padding-top:2rem}.admin__data-grid-loading-mask{background:rgba(255,255,255,.5);bottom:0;left:-3rem;position:absolute;right:-3rem;top:0;z-index:401}.admin__data-grid-loading-mask .spinner{font-size:4rem;left:50%;margin-left:-2rem;margin-top:-2rem;position:absolute;top:50%}.ie9 .admin__data-grid-loading-mask .spinner{background:url(../images/loader-2.gif) 50% 50% no-repeat;bottom:0;height:149px;left:0;margin:auto;position:absolute;right:0;top:0;width:218px}.data-grid-cell-content{overflow:hidden;width:100%;display:inline-block}body._in-resize{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;cursor:col-resize}body._in-resize *,body._in-resize .data-grid-th,body._in-resize .data-grid-th._draggable,body._in-resize .data-grid-th._sortable{cursor:col-resize!important}._layout-fixed{table-layout:fixed}.data-grid{border:none;font-size:1.3rem;margin-bottom:0;max-width:100%;width:100%}.data-grid:not(._dragging-copy) ._odd-row td._dragging{background-color:#d0d0d0}.data-grid:not(._dragging-copy) ._dragging{background-color:#d9d9d9;color:rgba(48,48,48,.95)}.data-grid:not(._dragging-copy) ._dragging a{color:rgba(0,139,219,.95)}.data-grid:not(._dragging-copy) ._dragging a:hover{color:rgba(15,167,255,.95)}.data-grid thead{background-color:transparent}.data-grid tfoot th{padding:1rem}.data-grid tr._odd-row td{background-color:#f5f5f5}.data-grid tr.data-grid-tr-no-data:hover td{background-color:#fff;cursor:default}.data-grid tr:active td{background-color:#e0f6fe}.data-grid tr:hover td{background-color:#e5f7fe}.data-grid tr:not(.data-grid-editable-row):last-child td{border-bottom:.1rem solid #d6d6d6}.data-grid tr ._clickable,.data-grid tr._clickable{cursor:pointer}.data-grid td,.data-grid th{font-size:1.3rem;line-height:1.36;transition:background-color .1s linear;vertical-align:top}.data-grid td._resizing,.data-grid th._resizing{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid td{background-color:#fff;border-left:.1rem dashed #d6d6d6;border-right:.1rem dashed #d6d6d6;color:#303030;padding:1rem}.data-grid td:first-child{border-left-style:solid}.data-grid td:last-child{border-right-style:solid}.data-grid td .action-select-wrap{position:static}.data-grid td .action-select{background-color:transparent;border:none;font-size:1.3rem;position:relative;color:#008bdb;text-decoration:none;padding:0 3rem 0 0}.data-grid td .action-select:hover{color:#0fa7ff;text-decoration:underline}.data-grid td .action-select:hover:after{border-color:#0fa7ff transparent transparent}.data-grid td .action-select:after{border-color:#008bdb transparent transparent;margin:.6rem 0 0 .7rem;right:auto;top:auto}.data-grid td .action-select:before{display:none}.data-grid td .abs-action-menu .action-submenu,.data-grid td .abs-action-menu .action-submenu .action-submenu,.data-grid td .action-menu,.data-grid td .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu,.data-grid td .actions-split .action-menu .action-submenu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu,.data-grid td .actions-split .dropdown-menu .action-submenu .action-submenu{left:auto;min-width:10rem;right:0;text-align:left;top:auto;z-index:1}.data-grid th{background-color:#514943;border:.1rem solid #8a837f;border-left-color:transparent;color:#fff;font-weight:600;padding:0;text-align:left}.data-grid th:first-child{border-left-color:#8a837f}.data-grid th._dragover-left{box-shadow:inset 3px 0 0 0 #fff;z-index:2}.data-grid th._dragover-right{box-shadow:inset -3px 0 0 0 #fff}.data-grid .shadow-div{cursor:col-resize;height:100%;margin-right:-5px;position:absolute;right:0;top:0;width:10px}.data-grid .data-grid-th{background-clip:padding-box;color:#fff;padding:1rem;position:relative;vertical-align:middle}.data-grid .data-grid-th._resize-visible .shadow-div{cursor:auto;display:none}.data-grid .data-grid-th._draggable{cursor:-webkit-grab;cursor:grab}.data-grid .data-grid-th._sortable{cursor:pointer;transition:background-color .1s linear;z-index:1}.data-grid .data-grid-th._sortable:focus,.data-grid .data-grid-th._sortable:hover{background-color:#5f564f}.data-grid .data-grid-th._sortable:active{padding-bottom:.9rem;padding-top:1.1rem}.data-grid .data-grid-th.required>span:after{color:#f38a5e;content:'*';margin-left:.3rem}.data-grid .data-grid-checkbox-cell{padding:0;vertical-align:top;width:5.2rem}.data-grid .data-grid-checkbox-cell:hover{cursor:default}.data-grid .data-grid-thumbnail-cell{text-align:center;width:7rem}.data-grid .data-grid-thumbnail-cell img{border:1px solid #d6d6d6;max-width:5rem}.data-grid .data-grid-multicheck-cell{padding:1rem 1rem .9rem;text-align:center;vertical-align:middle}.data-grid .data-grid-actions-cell{padding-left:2rem;padding-right:2rem;text-align:center;width:1%}.data-grid._hidden{display:none}.data-grid._dragging-copy{box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;opacity:.95;position:fixed;top:0;z-index:1000}.data-grid._dragging-copy .data-grid-th{border:1px solid #007bdb;border-bottom:none}.data-grid._dragging-copy .data-grid-th,.data-grid._dragging-copy .data-grid-th._sortable{cursor:-webkit-grabbing;cursor:grabbing}.data-grid._dragging-copy tr:last-child td{border-bottom:1px solid #007bdb}.data-grid._dragging-copy td{border-left:1px solid #007bdb;border-right:1px solid #007bdb}.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid._dragging-copy._in-edit .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:rgba(255,251,230,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td,.data-grid._dragging-copy._in-edit .data-grid-editable-row:hover td{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:after,.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{left:0;right:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:before{background-color:rgba(255,255,255,.95)}.data-grid._dragging-copy._in-edit .data-grid-editable-row td:only-child{border-left:1px solid #007bdb;border-right:1px solid #007bdb;left:0}.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-select,.data-grid._dragging-copy._in-edit .data-grid-editable-row .admin__control-text{opacity:.5}.data-grid._in-edit tr:hover td{background-color:#e6e6e6}.data-grid._in-edit ._odd-row.data-grid-editable-row td,.data-grid._in-edit ._odd-row.data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit ._odd-row td,.data-grid._in-edit ._odd-row:hover td{background-color:#dcdcdc}.data-grid._in-edit .data-grid-editable-row-actions td,.data-grid._in-edit .data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid._in-edit td{background-color:#e6e6e6;pointer-events:none}.data-grid._in-edit .data-grid-checkbox-cell{pointer-events:auto}.data-grid._in-edit .data-grid-editable-row{border:.1rem solid #adadad;border-bottom-color:#c2c2c2}.data-grid._in-edit .data-grid-editable-row:hover td{background-color:#fff}.data-grid._in-edit .data-grid-editable-row td{background-color:#fff;border-bottom-color:#fff;border-left-style:hidden;border-right-style:hidden;border-top-color:#fff;pointer-events:auto;vertical-align:middle}.data-grid._in-edit .data-grid-editable-row td:first-child{border-left-color:#adadad;border-left-style:solid}.data-grid._in-edit .data-grid-editable-row td:first-child:after,.data-grid._in-edit .data-grid-editable-row td:first-child:before{left:0}.data-grid._in-edit .data-grid-editable-row td:last-child{border-right-color:#adadad;border-right-style:solid;left:-.1rem}.data-grid._in-edit .data-grid-editable-row td:last-child:after,.data-grid._in-edit .data-grid-editable-row td:last-child:before{right:0}.data-grid._in-edit .data-grid-editable-row .admin__control-select,.data-grid._in-edit .data-grid-editable-row .admin__control-text{width:100%}.data-grid._in-edit .data-grid-bulk-edit-panel td{vertical-align:bottom}.data-grid .data-grid-editable-row td{border-left-color:#fff;border-left-style:solid;position:relative;z-index:1}.data-grid .data-grid-editable-row td:after{bottom:0;box-shadow:0 5px 5px rgba(0,0,0,.25);content:'';height:.9rem;left:0;margin-top:-1rem;position:absolute;right:0}.data-grid .data-grid-editable-row td:before{background-color:#fff;bottom:0;content:'';height:1rem;left:-10px;position:absolute;right:-10px;z-index:1}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td,.data-grid .data-grid-editable-row.data-grid-editable-row-actions:hover td{background-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:first-child{border-left-color:#fff;border-right-color:#fff}.data-grid .data-grid-editable-row.data-grid-editable-row-actions td:last-child{left:0}.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel td:before,.data-grid .data-grid-editable-row.data-grid-bulk-edit-panel:hover td{background-color:#fffbe6}.data-grid .data-grid-editable-row-actions{left:50%;margin-left:-12.5rem;margin-top:-2px;position:absolute;text-align:center}.data-grid .data-grid-editable-row-actions td{width:25rem}.data-grid .data-grid-editable-row-actions [class*=action-]{min-width:9rem}.data-grid-th._sortable._ascend,.data-grid-th._sortable._descend{padding-right:2.7rem}.data-grid-th._sortable._ascend:before,.data-grid-th._sortable._descend:before{margin-top:-1em;position:absolute;right:1rem;top:50%}.data-grid-th._sortable._ascend:before{content:'\2193'}.data-grid-th._sortable._descend:before{content:'\2191'}.data-grid-checkbox-cell-inner{display:block;padding:1.1rem 1.8rem .9rem;text-align:right}.data-grid-checkbox-cell-inner:hover{cursor:pointer}.data-grid-row-parent._active>td .data-grid-checkbox-cell-inner:before{content:'\e62b'}.data-grid-row-parent>td .data-grid-checkbox-cell-inner{padding-left:3.7rem;position:relative}.data-grid-row-parent>td .data-grid-checkbox-cell-inner:before{content:'\e628';font-size:1rem;font-weight:700;left:1.35rem;position:absolute;top:1.6rem}.data-grid-th._col-xs{width:1%}.data-grid-info-panel{box-shadow:0 0 5px rgba(0,0,0,.5);margin:2rem .1rem -2rem;padding:1rem}.data-grid-info-panel .messages{margin-bottom:1rem}.data-grid-info-panel-actions{text-align:right}.data-grid-editable-row .admin__field-control{position:relative}.data-grid-editable-row .admin__field-control._error:after{border-color:transparent #ee7d7d transparent transparent;border-style:solid;border-width:0 12px 12px 0;content:'';position:absolute;right:0;top:0}.data-grid-editable-row .admin__field-control._error .admin__control-text{border-color:#ee7d7d}.data-grid-editable-row .admin__field-control._focus:after{display:none}.data-grid-editable-row .admin__field-error{bottom:100%;box-shadow:1px 1px 5px rgba(0,0,0,.5);left:0;margin:0 auto 1.5rem;max-width:32rem;position:absolute;right:0}.data-grid-editable-row .admin__field-error:after,.data-grid-editable-row .admin__field-error:before{border-style:solid;content:'';left:50%;position:absolute;top:100%}.data-grid-editable-row .admin__field-error:after{border-color:#fffbbb transparent transparent;border-width:10px 10px 0;margin-left:-10px;z-index:1}.data-grid-editable-row .admin__field-error:before{border-color:#ee7d7d transparent transparent;border-width:11px 12px 0;margin-left:-12px}.data-grid-bulk-edit-panel .admin__field-label-vertical{display:block;font-size:1.2rem;margin-bottom:.5rem;text-align:left}.data-grid-row-changed{cursor:default;display:block;opacity:.5;position:relative;width:100%;z-index:1}.data-grid-row-changed:after{content:'\e631';display:inline-block}.data-grid-row-changed .data-grid-row-changed-tooltip{background:#f1f1f1;border-radius:1px;border:1px solid #f1f1f1;bottom:100%;box-shadow:0 3px 9px 0 rgba(0,0,0,.3);display:none;font-weight:400;line-height:1.36;margin-bottom:1.5rem;padding:1rem;position:absolute;right:-1rem;text-transform:none;width:27rem;word-break:normal;z-index:2}.data-grid-row-changed._changed{opacity:1;z-index:3}.data-grid-row-changed._changed:hover .data-grid-row-changed-tooltip{display:block}.data-grid-row-changed._changed:hover:before{background:#f1f1f1;border:1px solid #f1f1f1;bottom:100%;box-shadow:4px 4px 3px -1px rgba(0,0,0,.15);content:'';display:block;height:1.6rem;left:50%;margin:0 0 .7rem -.8rem;position:absolute;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:1.6rem;z-index:3}.ie9 .data-grid-row-changed._changed:hover:before{display:none}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before,.admin__control-file-label :before,.admin__control-multiselect,.admin__control-select,.admin__control-text,.admin__control-textarea,.selectmenu{background-color:#fff;border-radius:1px;border:1px solid #adadad;color:#303030;font-size:1.4rem;font-weight:400;line-height:1.36;height:auto;width:auto;padding:.6rem 1rem;transition:border-color .1s linear;vertical-align:baseline}.admin__control-multiselect:hover,.admin__control-select:hover,.admin__control-text:hover,.admin__control-textarea:hover,.selectmenu:hover,.selectmenu:hover .selectmenu-toggle:before{border-color:#878787}.admin__control-addon [class*=admin__control-][type]:focus+[class*=admin__addon-]:before,.admin__control-file:active+.admin__control-file-label :before,.admin__control-file:focus+.admin__control-file-label :before,.admin__control-multiselect:focus,.admin__control-select:focus,.admin__control-text:focus,.admin__control-textarea:focus,.selectmenu._focus,.selectmenu._focus .selectmenu-toggle:before{border-color:#007bdb;box-shadow:none;outline:0}.admin__control-addon [class*=admin__control-][type][disabled]+[class*=admin__addon-]:before,.admin__control-file[disabled]+.admin__control-file-label :before,.admin__control-multiselect[disabled],.admin__control-select[disabled],.admin__control-text[disabled],.admin__control-textarea[disabled]{background-color:#e9e9e9;border-color:#adadad;color:#303030;opacity:.5;cursor:not-allowed}.admin__fieldset>.admin__field.admin__field-wide[class]>.admin__field-control{float:none;clear:left;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label{display:block;line-height:1.4rem;margin-bottom:.86rem;margin-top:-.14rem;text-align:left;width:auto}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)>.admin__field-label:before{display:none}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span{padding-left:1.5rem}.admin__fieldset>.admin__field.admin__field-wide[class]:not(.admin__field-option)._required>.admin__field-label span:after{left:0;margin-left:30px;top:.2rem}.admin__legend{font-size:1.8rem;font-weight:600;margin-bottom:3rem}.admin__control-checkbox,.admin__control-radio{cursor:pointer;opacity:.01;overflow:hidden;position:absolute;vertical-align:top}.admin__control-checkbox:after,.admin__control-radio:after{display:none}.admin__control-checkbox+label,.admin__control-radio+label{cursor:pointer;display:inline-block}.admin__control-checkbox+label:before,.admin__control-radio+label:before{background-color:#fff;border:1px solid #adadad;color:transparent;float:left;height:1.6rem;text-align:center;vertical-align:top;width:1.6rem}.admin__control-checkbox+.admin__field-label,.admin__control-radio+.admin__field-label{padding-left:2.6rem}.admin__control-checkbox+.admin__field-label:before,.admin__control-radio+.admin__field-label:before{margin:1px 1rem 0 -2.6rem}.admin__control-checkbox:checked+label:before,.admin__control-radio:checked+label:before{color:#514943}.admin__control-checkbox.disabled+label,.admin__control-checkbox[disabled]+label,.admin__control-radio.disabled+label,.admin__control-radio[disabled]+label{cursor:default;color:#303030;opacity:.5}.admin__control-checkbox.disabled+label:before,.admin__control-checkbox[disabled]+label:before,.admin__control-radio.disabled+label:before,.admin__control-radio[disabled]+label:before{background-color:#e9e9e9;border-color:#adadad;cursor:default}._keyfocus .admin__control-checkbox:not(.disabled):focus+label:before,._keyfocus .admin__control-checkbox:not([disabled]):focus+label:before,._keyfocus .admin__control-radio:not(.disabled):focus+label:before,._keyfocus .admin__control-radio:not([disabled]):focus+label:before{border-color:#007bdb}.admin__control-checkbox:not(.disabled):hover+label:before,.admin__control-checkbox:not([disabled]):hover+label:before,.admin__control-radio:not(.disabled):hover+label:before,.admin__control-radio:not([disabled]):hover+label:before{border-color:#878787}.admin__control-radio+label:before{border-radius:1.6rem;content:'\e637';font-size:1rem;transition:border-color .1s linear,color .1s ease-in}.admin__control-radio.admin__control-radio+label:before{line-height:140%}.admin__control-radio:checked:not(.disabled):hover,.admin__control-radio:checked:not(.disabled):hover+label,.admin__control-radio:checked:not([disabled]):hover,.admin__control-radio:checked:not([disabled]):hover+label{cursor:default}.admin__control-radio:checked:not(.disabled):hover+label:before,.admin__control-radio:checked:not([disabled]):hover+label:before{border-color:#adadad}.admin__control-checkbox+label:before{border-radius:1px;content:'';font-size:0;transition:font-size .1s ease-out,color .1s ease-out,border-color .1s linear}.admin__control-checkbox:checked+label:before{content:'\e62d';font-size:1.1rem;line-height:125%}.admin__control-checkbox:not(:checked)._indeterminate+label:before,.admin__control-checkbox:not(:checked):indeterminate+label:before{color:#514943;content:'-';font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:700}input[type=checkbox].admin__control-checkbox,input[type=radio].admin__control-checkbox{position:absolute;margin:0}.admin__control-select{-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;background-repeat:no-repeat;background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#adadad,#adadad);background-position:calc(100% - 12px) -34px,100%,calc(100% - 3.2rem) 0;background-size:auto,3.2rem 100%,1px 100%;padding-bottom:.5rem;padding-right:4.4rem;padding-top:.5rem;transition:border-color .1s linear}.admin__control-select:hover{border-color:#878787;cursor:pointer}.admin__control-select:focus{background-image:url(../images/arrows-bg.svg),linear-gradient(#e3e3e3,#e3e3e3),linear-gradient(#007bdb,#007bdb);background-position:calc(100% - 12px) 13px,100%,calc(100% - 3.2rem) 0;border-color:#007bdb}.admin__control-select::-ms-expand{display:none}.ie9 .admin__control-select{background-image:none;padding-right:1rem}option:empty{display:none}.admin__control-multiselect{height:auto;padding:.6rem 1rem}.admin__control-file-wrapper{display:inline-block;padding:.5rem 1rem;position:relative;z-index:1}.admin__control-file-label :before{content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__control-file{position:relative;z-index:1;background:0 0;border:0;width:auto}.admin__control-support-text{border:1px solid transparent;display:inline-block;font-size:1.4rem;line-height:1.36;padding-top:.6rem;padding-bottom:.6rem}.admin__control-support-text+[class*=admin__control-],[class*=admin__control-]+.admin__control-support-text{margin-left:.7rem}.admin__control-textarea{height:8.48rem;line-height:1.18;padding-top:.8rem;resize:vertical}.admin__control-addon{-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;display:inline-flex;-webkit-flex-flow:row nowrap;-ms-flex-flow:row nowrap;flex-flow:row nowrap;position:relative;width:100%;z-index:1}.admin__control-addon>[class*=admin__addon-],.admin__control-addon>[class*=admin__control-]{-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;position:relative;z-index:1}.admin__control-addon [class*=admin__control-][type]{appearence:none;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;box-shadow:none;background-color:transparent;border-color:transparent;-webkit-order:1;-ms-flex-order:1;order:1;vertical-align:top;width:auto}.admin__control-addon [class*=admin__control-][type] :focus{box-shadow:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]{padding-left:1rem;position:static!important;z-index:0}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]>*{position:relative;vertical-align:top;z-index:2}.admin__control-addon [class*=admin__control-][type]+[class*=admin__addon-]:before{bottom:0;box-sizing:border-box;content:'';left:0;position:absolute;top:0;width:100%;z-index:0}.admin__addon-prefix,.admin__addon-suffix{border:0;box-sizing:border-box;color:#858585;display:inline-block;font-size:1.4rem;font-weight:400;height:3.2rem;line-height:3.2rem;padding:0}.admin__addon-suffix{-webkit-order:3;-ms-flex-order:3;order:3}.admin__addon-suffix:last-child{padding-right:1rem}.admin__addon-prefix{-webkit-order:0;-ms-flex-order:0;order:0}.ie9 .admin__control-addon:after{clear:both;content:'';display:block;height:0;overflow:hidden}.ie9 .admin__addon{min-width:0;overflow:hidden;text-align:right;white-space:nowrap;width:auto}.ie9 .admin__addon [class*=admin__control-]{display:inline}.ie9 .admin__addon-prefix{float:left}.ie9 .admin__addon-suffix{float:right}.admin__control-table-wrapper{max-width:100%;overflow-x:auto;overflow-y:hidden}.admin__control-table{width:100%}.admin__control-table thead{background-color:transparent}.admin__control-table tbody td{vertical-align:middle}.admin__control-table tfoot th{padding-bottom:1.3rem}.admin__control-table tr:last-child td,.admin__control-table tr:last-child th{border-bottom:none}.admin__control-table td,.admin__control-table th{background-color:#efefef;border:0;border-bottom:1px solid #fff;padding:1.3rem 2.5rem 1.3rem 0;text-align:left;vertical-align:top}.admin__control-table td:first-child,.admin__control-table th:first-child{padding-left:1.5rem}.admin__control-table th{border:0;vertical-align:bottom;color:#303030;font-size:1.4rem;font-weight:600;padding-bottom:0}.admin__control-table th._required span:after{color:#eb5202;content:'*'}.admin__control-table .control-table-actions-th{white-space:nowrap}.admin__control-table .control-table-actions-cell{padding-top:1.8rem;text-align:center;width:1%}.admin__control-table .col-draggable{padding-top:2.2rem;width:1%}.admin__control-table .action-delete,.admin__control-table .action-delete:hover{background-color:transparent;border-color:transparent;box-shadow:none}.admin__control-table .action-delete:before{content:'\e630'}.admin__control-table .action-delete>span{display:none}.admin__field-tooltip{display:inline-block;margin-top:5px;overflow:visible;vertical-align:top;width:0}.admin__field-tooltip:hover{position:relative;z-index:500}.admin__field-option .admin__field-tooltip{margin-top:10px}.admin__field-tooltip .admin__field-tooltip-action{margin-left:20px;display:inline-block;text-decoration:none}.admin__field-tooltip .admin__field-tooltip-action:before{-webkit-font-smoothing:antialiased;font-size:2.2rem;line-height:1;color:#514943;content:'\e633';font-family:Icons;vertical-align:middle;display:inline-block;font-weight:400;overflow:hidden;speak:none;text-align:center}.admin__field-tooltip .admin__control-text:focus+.admin__field-tooltip-content,.admin__field-tooltip:hover .admin__field-tooltip-content{display:block}.admin__field-tooltip .admin__field-tooltip-content{bottom:42px;display:none;right:-70px}.admin__field-tooltip .admin__field-tooltip-content:after,.admin__field-tooltip .admin__field-tooltip-content:before{border:16px solid transparent;height:0;width:0;border-top-color:#afadac;content:"";display:block;position:absolute;right:20px;top:100%;z-index:3}.admin__field-tooltip .admin__field-tooltip-content:after{border-top-color:#fffbbb;margin-top:-1px;z-index:4}.abs-admin__field-tooltip-content,.admin__field-tooltip .admin__field-tooltip-content{box-shadow:0 2px 8px 0 rgba(0,0,0,.3);background:#fffbbb;border-radius:1px;border:1px solid #afadac;padding:15px 25px;position:absolute;width:320px;z-index:1}.admin__fieldset{border:0;margin:0;min-width:0;padding:0}.admin__fieldset>.admin__field{border:0;margin:0 0 0 -30px;padding:0}.admin__fieldset>.admin__field:after{clear:both;content:'';display:table}.admin__fieldset>.admin__field>.admin__field-control{width:calc((100%) * .4444444444444444 - 30px);float:left;margin-left:30px}.admin__fieldset>.admin__field>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px}.admin__form-field{border:0;margin:0;padding:0}.admin__field-control .admin__control-text,.admin__field-control .admin__control-textarea,.admin__form-field-control .admin__control-text,.admin__form-field-control .admin__control-textarea{width:100%}.admin__field-label{color:#303030;margin:0;text-align:right}.admin__field-label+br{display:none}.admin__field:not(.admin__field-option)>.admin__field-label{font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.4rem;font-weight:600;line-height:3.2rem;padding:0;white-space:nowrap;word-wrap:break-word}.admin__field:not(.admin__field-option)>.admin__field-label:before{opacity:0;visibility:hidden;content:'.';margin-left:-7px;overflow:hidden}.admin__field:not(.admin__field-option)>.admin__field-label span{display:inline-block;line-height:1.2;vertical-align:middle;white-space:normal}._required>.admin__field-label span:after{color:#eb5202;content:'*';display:inline-block;font-size:1.6rem;font-weight:500;line-height:1;margin-left:10px;position:absolute;top:1.2rem;z-index:1}._disabled>.admin__field-label{color:#999}.admin__field{margin-bottom:0}.admin__field+.admin__field{margin-top:1.5rem}.admin__field:not(.admin__field-option)~.admin__field-option{margin-top:.5rem}.admin__field.admin__field-option~.admin__field-option{margin-top:.9rem}.admin__field~.admin__field-option:last-child{margin-bottom:.8rem}.admin__fieldset>.admin__field{margin-bottom:3rem;position:relative}.admin__field[data-config-scope]:before{color:gray;content:attr(data-config-scope);display:inline-block;font-size:1.2rem;left:calc((100%) * .7777777777777778 - 30px);line-height:3.2rem;margin-left:60px;position:absolute;width:calc((100%) * .2222222222222222 - 30px)}.admin__field-control .admin__field[data-config-scope]:nth-child(n+2):before{content:''}.admin__field._error .admin__field-control [class*=admin__addon-]:before,.admin__field._error .admin__field-control>[class*=admin__control-]{border-color:#e22626}.admin__field-control+.admin__field-control{margin-top:1.5rem}.admin__field-error{background:#fffbbb;border:1px solid #ee7d7d;box-sizing:border-box;color:#555;display:block;font-size:1.2rem;font-weight:400;line-height:1.2;margin:.2rem 0 0;padding:.8rem 1rem .9rem}.admin__field-note{color:#303030;font-size:1.2rem;margin:10px 0 0;padding:0}.admin__field-option{padding-top:.8rem}.admin__field-option .admin__field-label{text-align:left}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2),.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1){display:inline-block}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option{display:inline-block;margin-left:41px;margin-top:0}.admin__field-control>.admin__field-option:nth-child(1):nth-last-child(2)+.admin__field-option:before,.admin__field-control>.admin__field-option:nth-child(2):nth-last-child(1)+.admin__field-option:before{background:#cacaca;content:'';display:inline-block;height:20px;margin-left:-20px;position:absolute;width:1px}.admin__field-value{padding-top:.8rem}.admin__control-fields>.admin__field:first-child,[class*=admin__control-grouped]>.admin__field:first-child{position:static}.admin__control-fields>.admin__field:first-child>.admin__field-label,[class*=admin__control-grouped]>.admin__field:first-child>.admin__field-label{width:calc((100%) * .3333333333333333 - 30px);float:left;margin-left:30px;cursor:pointer;left:0;opacity:0;position:absolute;top:0}.admin__control-fields .admin__field-label~.admin__field-control{width:100%}[class*=admin__control-grouped]{box-sizing:border-box;display:table;table-layout:fixed;width:100%}[class*=admin__control-grouped]>.admin__field{display:table-cell;vertical-align:top;width:50%}[class*=admin__control-grouped]>.admin__field>.admin__field-control{float:none;width:100%}[class*=admin__control-grouped]>.admin__field:nth-child(n+2){padding-left:20px}[class*=admin__control-grouped]>.admin__field:nth-child(n+2):not(.admin__field-option) .admin__field-label{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.admin__field-control-group{margin-top:.8rem}.admin__field-control-group>.admin__field{padding:0}.admin__legend{float:left;position:static;width:100%}.admin__legend+br{display:block;height:0;overflow:hidden;clear:left}.message{margin-bottom:3rem}.message-icon-top:before{margin-top:0;top:1.8rem}.nav{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;border-top:1px solid #e3e3e3;display:none;margin-bottom:3rem;padding:2.2rem 1.5rem 0 0}.nav .btn-group,.nav-bar-outer-actions{float:right;margin-bottom:1.7rem}.nav .btn-group .btn-wrap,.nav-bar-outer-actions .btn-wrap{float:right;margin-left:.5rem;margin-right:.5rem}.nav .btn-group .btn-wrap .btn,.nav-bar-outer-actions .btn-wrap .btn{padding-left:.5rem;padding-right:.5rem}.nav-bar-outer-actions{margin-top:-10.6rem;padding-right:1.5rem}.btn-wrap-try-again{width:9.5rem}.btn-wrap-next,.btn-wrap-prev{width:8.5rem}.nav-bar{counter-reset:i;float:left;margin:0 1rem 1.7rem 0;padding:0;position:relative;white-space:nowrap}.nav-bar:before{background-color:#d4d4d4;background-repeat:repeat-x;background-image:linear-gradient(to bottom,#d1d1d1 0,#d4d4d4 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#d1d1d1', endColorstr='#d4d4d4', GradientType=0);border-bottom:1px solid #d9d9d9;border-top:1px solid #bfbfbf;content:'';height:1rem;left:5.15rem;position:absolute;right:5.15rem;top:.7rem}.nav-bar>li{display:inline-block;font-size:0;position:relative;vertical-align:top;width:10.3rem}.nav-bar>li:first-child:after{display:none}.nav-bar>li:after{background-color:#514943;content:'';height:.5rem;left:calc(-50% + .25rem);position:absolute;right:calc(50% + .7rem);top:.9rem}.nav-bar>li.disabled:before,.nav-bar>li.ui-state-disabled:before{bottom:0;content:'';left:0;position:absolute;right:0;top:0;z-index:1}.nav-bar>li.active~li:after,.nav-bar>li.ui-state-active~li:after{display:none}.nav-bar>li.active~li a:after,.nav-bar>li.ui-state-active~li a:after{background-color:transparent;border-color:transparent;color:#a6a6a6}.nav-bar>li.active a,.nav-bar>li.ui-state-active a{color:#000}.nav-bar>li.active a:hover,.nav-bar>li.ui-state-active a:hover{cursor:default}.nav-bar>li.active a:after,.nav-bar>li.ui-state-active a:after{background-color:#fff;content:''}.nav-bar a{color:#514943;display:block;font-size:1.2rem;font-weight:600;line-height:1.2;overflow:hidden;padding:3rem .5em 0;position:relative;text-align:center;text-overflow:ellipsis}.nav-bar a:hover{text-decoration:none}.nav-bar a:after{background-color:#514943;border:.4rem solid #514943;border-radius:100%;color:#fff;content:counter(i);counter-increment:i;height:1.5rem;left:50%;line-height:.6;margin-left:-.8rem;position:absolute;right:auto;text-align:center;top:.4rem;width:1.5rem}.nav-bar a:before{background-color:#d6d6d6;border:1px solid transparent;border-bottom-color:#d9d9d9;border-radius:100%;border-top-color:#bfbfbf;content:'';height:2.3rem;left:50%;line-height:1;margin-left:-1.2rem;position:absolute;top:0;width:2.3rem}.tooltip{display:block;font-family:'Open Sans','Helvetica Neue',Helvetica,Arial,sans-serif;font-size:1.19rem;font-weight:400;line-height:1.4;opacity:0;position:absolute;visibility:visible;z-index:10}.tooltip.in{opacity:.9}.tooltip.top{margin-top:-4px;padding:8px 0}.tooltip.right{margin-left:4px;padding:0 8px}.tooltip.bottom{margin-top:4px;padding:8px 0}.tooltip.left{margin-left:-4px;padding:0 8px}.tooltip p:last-child{margin-bottom:0}.tooltip-inner{background-color:#fff;border:1px solid #adadad;border-radius:0;box-shadow:1px 1px 1px #ccc;color:#41362f;max-width:20rem;padding:.5em 1em;text-decoration:none}.tooltip-arrow,.tooltip-arrow:after{border:solid transparent;height:0;position:absolute;width:0}.tooltip-arrow:after{content:'';position:absolute}.tooltip.top .tooltip-arrow,.tooltip.top .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:50%;margin-left:-8px}.tooltip.top-left .tooltip-arrow,.tooltip.top-left .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;margin-bottom:-8px;right:8px}.tooltip.top-right .tooltip-arrow,.tooltip.top-right .tooltip-arrow:after{border-top-color:#949494;border-width:8px 8px 0;bottom:0;left:8px;margin-bottom:-8px}.tooltip.right .tooltip-arrow,.tooltip.right .tooltip-arrow:after{border-right-color:#949494;border-width:8px 8px 8px 0;left:1px;margin-top:-8px;top:50%}.tooltip.right .tooltip-arrow:after{border-right-color:#fff;border-width:6px 7px 6px 0;margin-left:0;margin-top:-6px}.tooltip.left .tooltip-arrow,.tooltip.left .tooltip-arrow:after{border-left-color:#949494;border-width:8px 0 8px 8px;margin-top:-8px;right:0;top:50%}.tooltip.bottom .tooltip-arrow,.tooltip.bottom .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:50%;margin-left:-8px;top:0}.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;margin-top:-8px;right:8px;top:0}.tooltip.bottom-right .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow:after{border-bottom-color:#949494;border-width:0 8px 8px;left:8px;margin-top:-8px;top:0}.password-strength{display:block;margin:0 -.3rem 1em;white-space:nowrap}.password-strength.password-strength-too-short .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child,.password-strength.password-strength-weak .password-strength-item:first-child+.password-strength-item{background-color:#e22626}.password-strength.password-strength-fair .password-strength-item:first-child,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-fair .password-strength-item:first-child+.password-strength-item+.password-strength-item{background-color:#ef672f}.password-strength.password-strength-good .password-strength-item:first-child,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item,.password-strength.password-strength-good .password-strength-item:first-child+.password-strength-item+.password-strength-item+.password-strength-item,.password-strength.password-strength-strong .password-strength-item{background-color:#79a22e}.password-strength .password-strength-item{background-color:#ccc;display:inline-block;font-size:0;height:1.4rem;margin-right:.3rem;width:calc(20% - .6rem)}@-webkit-keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:4rem 0}to{background-position:0 0}}.progress{background-color:#fafafa;border:1px solid #ccc;clear:left;height:3rem;margin-bottom:3rem;overflow:hidden}.progress-bar{background-color:#79a22e;color:#fff;float:left;font-size:1.19rem;height:100%;line-height:3rem;text-align:center;transition:width .6s ease;width:0}.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-text-description{margin-bottom:1.6rem}.progress-bar-text-progress{text-align:right}.page-columns .page-inner-sidebar{margin:0 0 3rem}.page-header{margin-bottom:2.7rem;padding-bottom:2.9rem;position:relative}.page-header:before{border-bottom:1px solid #e3e3e3;bottom:0;content:'';display:block;height:1px;left:3rem;position:absolute;right:3rem}.container .page-header:before{content:normal}.page-header .message{margin-bottom:1.8rem}.page-header .message+.message{margin-top:-1.5rem}.page-header .admin__action-dropdown,.page-header .search-global-input{transition:none}.container .page-header{margin-bottom:0}.page-title-wrapper{margin-top:1.1rem}.container .page-title-wrapper{background:url(../../pub/images/logo.svg) no-repeat;min-height:41px;padding:4px 0 0 45px}.admin__menu .level-0:first-child>a{margin-top:1.6rem}.admin__menu .level-0:first-child>a:after{top:-1.6rem}.admin__menu .level-0>a{padding-top:1.3rem;padding-bottom:1.3rem}.admin__menu .level-0>a:before{margin-bottom:.7rem}.admin__menu .item-home>a:before{content:'\e611';font-size:2.3rem;padding-top:-.1rem}.admin__menu .item-component>a:before{content:'\e612'}.admin__menu .item-upgrade>a:before{content:'\e614'}.admin__menu .item-system-config>a:before{content:'\e610'}.admin__menu .item-tools>a:before{content:'\e613'}.modal-sub-title{font-size:1.7rem;font-weight:600}.modal-connect-signin .modal-inner-wrap{max-width:80rem}@-webkit-keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@keyframes ngdialog-fadeout{0%{opacity:1}100%{opacity:0}}@-webkit-keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}@keyframes ngdialog-fadein{0%{opacity:0}100%{opacity:1}}.ngdialog{-webkit-overflow-scrolling:touch;bottom:0;box-sizing:border-box;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:999}.ngdialog *,.ngdialog:after,.ngdialog:before{box-sizing:inherit}.ngdialog.ngdialog-disabled-animation *{-webkit-animation:none!important;animation:none!important}.ngdialog.ngdialog-closing .ngdialog-content,.ngdialog.ngdialog-closing .ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadeout .5s;animation:ngdialog-fadeout .5s}.ngdialog-overlay{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s;background:rgba(0,0,0,.4);bottom:0;left:0;position:fixed;right:0;top:0}.ngdialog-content{-webkit-backface-visibility:hidden;-webkit-animation:ngdialog-fadein .5s;animation:ngdialog-fadein .5s}body.ngdialog-open{overflow:hidden}.component-indicator{border-radius:50%;cursor:help;display:inline-block;height:20px;text-align:center;width:20px}.component-indicator::after,.component-indicator::before{background:#fff;display:block;opacity:0;position:absolute;transition:opacity .2s linear .1s;visibility:hidden}.component-indicator::before{border-radius:1px;border:1px solid #adadad;box-shadow:0 0 2px rgba(0,0,0,.4);content:attr(data-label);font-size:1.2rem;margin:34px 0 0 -10px;min-width:50px;padding:4px 5px}.component-indicator::after{border:1px solid #999;border-width:1px 0 0 1px;box-shadow:-1px -1px 1px rgba(0,0,0,.1);content:'';height:10px;margin:9px 0 0 5px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);width:10px}.component-indicator:hover::after,.component-indicator:hover::before{opacity:1;transition:opacity .2s linear;visibility:visible}.component-indicator span{display:block;height:20px;overflow:hidden;width:20px}.component-indicator span:before{content:'';display:block;font-family:Icons;font-size:20px;height:100%;line-height:20px;width:100%}.component-indicator._on{background:#79a22e}.component-indicator._off{background:#e22626}.component-indicator._off span:before{background:#fff;height:4px;margin:8px auto 20px;width:12px}.component-indicator._info{background:0 0}.component-indicator._info span{width:21px}.component-indicator._info span:before{color:#008bdb;content:'\e61a';font-family:Icons;font-size:21px}.app-updater .nav{display:block;margin-bottom:3.1rem;margin-top:-2.8rem}.app-updater .nav-bar-outer-actions{margin-top:1rem;padding-right:0}.app-updater .nav-bar-outer-actions .btn-wrap-cancel{margin-right:2.6rem}.main{padding-bottom:2rem;padding-top:3rem}.header{display:none}.header .logo{float:left;height:4.1rem;width:3.5rem}.header-title{font-size:2.8rem;letter-spacing:.02em;line-height:1.4;margin:2.5rem 0 3.5rem 5rem}.page-sub-title{font-size:2rem}.accent-box{margin-bottom:2rem}.accent-box .btn-prime{margin-top:1.5rem}.page-landing{margin:7.6% auto 0;max-width:44rem;text-align:center}.page-landing .logo{height:5.6rem;margin-bottom:2rem;width:19.2rem}.page-landing .text-version{margin-bottom:3rem}.page-landing .text-welcome{margin-bottom:6.5rem}.page-landing .text-terms{margin-bottom:2.5rem;text-align:center}.page-landing .btn-submit,.page-license .license-text{margin-bottom:2rem}.page-license .page-license-footer{text-align:right}.readiness-check-item{margin-bottom:4rem;min-height:2.5rem}.readiness-check-item .spinner{font-size:2.5rem;float:left;margin:-.4rem 0 0 1.7rem}.readiness-check-title{font-size:1.4rem;font-weight:700;margin-bottom:.1rem;margin-left:5.7rem}.readiness-check-content{margin-left:5.7rem;margin-right:22rem}.readiness-check-content .readiness-check-title{margin-left:0}.readiness-check-content .list{margin-top:-.3rem}.readiness-check-side{float:right;padding-left:2.4rem;width:22rem}.readiness-check-side .side-title{margin-bottom:0}.readiness-check-icon{float:left;margin-left:1.7rem;margin-top:.7rem}.page-web-configuration .form-el-insider-wrap{width:auto}.page-web-configuration .form-el-insider{width:15.4rem}.page-web-configuration .form-el-insider-input .form-el-input{width:16.5rem}.customize-your-store .customize-your-store-default .legend{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.customize-your-store .advanced-modules-count,.customize-your-store .advanced-modules-select{padding-left:1.5rem}.customize-your-store .customize-your-store-advanced{min-width:0}.customize-your-store .message-error:before{margin-top:0;top:1.8rem}.customize-your-store .message-error a{color:#333;text-decoration:underline}.customize-your-store .message-error .form-label:before{background:#fff}.customize-your-store .customize-database-clean p{margin-top:2.5rem}.content-install{margin-bottom:2rem}.console{border:1px solid #ccc;font-family:'Courier New',Courier,monospace;font-weight:300;height:20rem;margin:1rem 0 2rem;overflow-y:auto;padding:1.5rem 2rem 2rem;resize:vertical}.console .text-danger{color:#e22626}.console .text-success{color:#090}.console .hidden{display:none}.content-success .btn-prime{margin-top:1.5rem}.jumbo-title{font-size:3.6rem}.jumbo-title .jumbo-icon{font-size:3.8rem;margin-right:.25em;position:relative;top:.15em}.install-database-clean{margin-top:4rem}.install-database-clean .btn{margin-right:1rem}.page-sub-title{margin-bottom:2.1rem}.multiselect-custom{max-width:71.1rem}.content-install{margin-top:3.7rem}.home-page-inner-wrap{margin:0 auto;max-width:91rem}.setup-home-title{margin-bottom:3.9rem;padding-top:1.8rem;text-align:center}.setup-home-item{background-color:#fafafa;border:1px solid #ccc;color:#333;display:block;margin-bottom:2rem;margin-left:1.3rem;margin-right:1.3rem;min-height:30rem;padding:2rem;text-align:center}.setup-home-item:hover{border-color:#8c8c8c;color:#333;text-decoration:none;transition:border-color .1s linear}.setup-home-item:active{-webkit-transform:scale(0.99);-ms-transform:scale(0.99);transform:scale(0.99)}.setup-home-item:before{display:block;font-size:7rem;margin-bottom:3.3rem;margin-top:4rem}.setup-home-item-component:before{content:'\e612'}.setup-home-item-upgrade:before{content:'\e614'}.setup-home-item-configuration:before{content:'\e610'}.setup-home-item-title{display:block;font-size:1.8rem;letter-spacing:.025em;margin-bottom:1rem}.setup-home-item-description{display:block}.componenet-manager-wrap{border:1px solid #bbb;margin:0 0 4rem}.componenet-manager-wrap .componenet-manager-account{font-size:1.4rem;float:right;padding:.6rem 0 0}.componenet-manager-wrap .componenet-manager-account .sign-in-out{margin-left:2rem}.component-manager-title{background-color:#f8f8f8;border-bottom:1px solid #e3e3e3;color:#41362f;font-size:2rem;line-height:1.2;padding:2rem}.component-manager-content{padding:2.5rem 2rem 2rem}.componenet-manager-items{list-style:none;margin:0;text-align:center}.componenet-manager-items .btn{border:1px solid #adadad}.componenet-manager-items .item-title{margin:0 0 1.5rem}.componenet-manager-items .item-number{font-size:6rem;line-height:.8;margin:0 0 1.5rem}.componenet-manager-items .item-date{margin:0 0 3.7rem}.componenet-manager-items .item-install{margin:0 0 2rem}.componenet-manager-items .item-install .btn{line-height:1.36;margin:0;padding:0;color:#008bdb;text-decoration:none;background:0 0;border:0;display:inline;font-size:1.4rem;font-weight:400}.componenet-manager-items .item-install .btn:visited{color:#008bdb;text-decoration:none}.componenet-manager-items .item-install .btn:hover{text-decoration:underline}.componenet-manager-items .item-install .btn:active{color:#ff5501;text-decoration:underline}.componenet-manager-items .item-install .btn:hover{color:#0fa7ff}.componenet-manager-items .item-install .btn:active,.componenet-manager-items .item-install .btn:focus,.componenet-manager-items .item-install .btn:hover{background:0 0;border:0}.componenet-manager-items .item-install .btn.disabled,.componenet-manager-items .item-install .btn[disabled],fieldset[disabled] .componenet-manager-items .item-install .btn{color:#008bdb;opacity:.5;cursor:default;pointer-events:none;text-decoration:underline}.componenet-manager-items .item-install .btn.disabled{text-decoration:none}.sync-login-wrap{margin:-2.5rem 0 0;padding:0 10% 4rem}.sync-login-wrap .legend{font-size:2.6rem;color:#eb5202;float:left;font-weight:300;line-height:1.2;margin:-1rem 0 2.5rem;position:static;width:100%}.sync-login-wrap .legend._hidden{display:none}.sync-login-wrap .login-header{font-size:3.4rem;font-weight:300;margin:0 0 2rem}.sync-login-wrap .login-header span{display:inline-block;padding:.9rem 0 0;vertical-align:top}.sync-login-wrap .form-row .form-label{display:inline-block}.sync-login-wrap .form-row .form-label.required{padding-left:1.5rem}.sync-login-wrap .form-row .form-label.required:after{left:0;position:absolute;right:auto}.sync-login-wrap .form-row{max-width:28rem}.sync-login-wrap .form-actions{display:table;margin-top:-1.3rem}.sync-login-wrap .form-actions .links{display:table-header-group}.sync-login-wrap .form-actions .actions{padding:3rem 0 0}@media all and (max-width:1047px){.admin__menu .submenu li{min-width:19.8rem}.nav{padding-bottom:5.38rem;padding-left:1.5rem;text-align:center}.nav-bar{display:inline-block;float:none;margin-right:0;vertical-align:top}.nav .btn-group,.nav-bar-outer-actions{display:inline-block;float:none;margin-top:-8.48rem;text-align:center;vertical-align:top;width:100%}.nav-bar-outer-actions{padding-right:0}.nav-bar-outer-actions .outer-actions-inner-wrap{display:inline-block}.app-updater .nav{padding-bottom:1.7rem}.app-updater .nav-bar-outer-actions{margin-top:2rem}}@media all and (min-width:768px){.page-layout-admin-2columns-left .page-columns{margin-left:-30px}.page-layout-admin-2columns-left .page-columns:after{clear:both;content:'';display:table}.page-layout-admin-2columns-left .page-columns .main-col{width:calc((100%) * .75 - 30px);float:right}.page-layout-admin-2columns-left .page-columns .side-col{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}.col-m-1,.col-m-10,.col-m-11,.col-m-12,.col-m-2,.col-m-3,.col-m-4,.col-m-5,.col-m-6,.col-m-7,.col-m-8,.col-m-9{float:left}.col-m-12{width:100%}.col-m-11{width:91.66666667%}.col-m-10{width:83.33333333%}.col-m-9{width:75%}.col-m-8{width:66.66666667%}.col-m-7{width:58.33333333%}.col-m-6{width:50%}.col-m-5{width:41.66666667%}.col-m-4{width:33.33333333%}.col-m-3{width:25%}.col-m-2{width:16.66666667%}.col-m-1{width:8.33333333%}.col-m-pull-12{right:100%}.col-m-pull-11{right:91.66666667%}.col-m-pull-10{right:83.33333333%}.col-m-pull-9{right:75%}.col-m-pull-8{right:66.66666667%}.col-m-pull-7{right:58.33333333%}.col-m-pull-6{right:50%}.col-m-pull-5{right:41.66666667%}.col-m-pull-4{right:33.33333333%}.col-m-pull-3{right:25%}.col-m-pull-2{right:16.66666667%}.col-m-pull-1{right:8.33333333%}.col-m-pull-0{right:auto}.col-m-push-12{left:100%}.col-m-push-11{left:91.66666667%}.col-m-push-10{left:83.33333333%}.col-m-push-9{left:75%}.col-m-push-8{left:66.66666667%}.col-m-push-7{left:58.33333333%}.col-m-push-6{left:50%}.col-m-push-5{left:41.66666667%}.col-m-push-4{left:33.33333333%}.col-m-push-3{left:25%}.col-m-push-2{left:16.66666667%}.col-m-push-1{left:8.33333333%}.col-m-push-0{left:auto}.col-m-offset-12{margin-left:100%}.col-m-offset-11{margin-left:91.66666667%}.col-m-offset-10{margin-left:83.33333333%}.col-m-offset-9{margin-left:75%}.col-m-offset-8{margin-left:66.66666667%}.col-m-offset-7{margin-left:58.33333333%}.col-m-offset-6{margin-left:50%}.col-m-offset-5{margin-left:41.66666667%}.col-m-offset-4{margin-left:33.33333333%}.col-m-offset-3{margin-left:25%}.col-m-offset-2{margin-left:16.66666667%}.col-m-offset-1{margin-left:8.33333333%}.col-m-offset-0{margin-left:0}.page-columns{margin-left:-30px}.page-columns:after{clear:both;content:'';display:table}.page-columns .page-inner-content{width:calc((100%) * .75 - 30px);float:right}.page-columns .page-inner-sidebar{width:calc((100%) * .25 - 30px);float:left;margin-left:30px}}@media all and (min-width:1048px){.col-l-1,.col-l-10,.col-l-11,.col-l-12,.col-l-2,.col-l-3,.col-l-4,.col-l-5,.col-l-6,.col-l-7,.col-l-8,.col-l-9{float:left}.col-l-12{width:100%}.col-l-11{width:91.66666667%}.col-l-10{width:83.33333333%}.col-l-9{width:75%}.col-l-8{width:66.66666667%}.col-l-7{width:58.33333333%}.col-l-6{width:50%}.col-l-5{width:41.66666667%}.col-l-4{width:33.33333333%}.col-l-3{width:25%}.col-l-2{width:16.66666667%}.col-l-1{width:8.33333333%}.col-l-pull-12{right:100%}.col-l-pull-11{right:91.66666667%}.col-l-pull-10{right:83.33333333%}.col-l-pull-9{right:75%}.col-l-pull-8{right:66.66666667%}.col-l-pull-7{right:58.33333333%}.col-l-pull-6{right:50%}.col-l-pull-5{right:41.66666667%}.col-l-pull-4{right:33.33333333%}.col-l-pull-3{right:25%}.col-l-pull-2{right:16.66666667%}.col-l-pull-1{right:8.33333333%}.col-l-pull-0{right:auto}.col-l-push-12{left:100%}.col-l-push-11{left:91.66666667%}.col-l-push-10{left:83.33333333%}.col-l-push-9{left:75%}.col-l-push-8{left:66.66666667%}.col-l-push-7{left:58.33333333%}.col-l-push-6{left:50%}.col-l-push-5{left:41.66666667%}.col-l-push-4{left:33.33333333%}.col-l-push-3{left:25%}.col-l-push-2{left:16.66666667%}.col-l-push-1{left:8.33333333%}.col-l-push-0{left:auto}.col-l-offset-12{margin-left:100%}.col-l-offset-11{margin-left:91.66666667%}.col-l-offset-10{margin-left:83.33333333%}.col-l-offset-9{margin-left:75%}.col-l-offset-8{margin-left:66.66666667%}.col-l-offset-7{margin-left:58.33333333%}.col-l-offset-6{margin-left:50%}.col-l-offset-5{margin-left:41.66666667%}.col-l-offset-4{margin-left:33.33333333%}.col-l-offset-3{margin-left:25%}.col-l-offset-2{margin-left:16.66666667%}.col-l-offset-1{margin-left:8.33333333%}.col-l-offset-0{margin-left:0}}@media all and (min-width:1440px){.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9{float:left}.col-xl-12{width:100%}.col-xl-11{width:91.66666667%}.col-xl-10{width:83.33333333%}.col-xl-9{width:75%}.col-xl-8{width:66.66666667%}.col-xl-7{width:58.33333333%}.col-xl-6{width:50%}.col-xl-5{width:41.66666667%}.col-xl-4{width:33.33333333%}.col-xl-3{width:25%}.col-xl-2{width:16.66666667%}.col-xl-1{width:8.33333333%}.col-xl-pull-12{right:100%}.col-xl-pull-11{right:91.66666667%}.col-xl-pull-10{right:83.33333333%}.col-xl-pull-9{right:75%}.col-xl-pull-8{right:66.66666667%}.col-xl-pull-7{right:58.33333333%}.col-xl-pull-6{right:50%}.col-xl-pull-5{right:41.66666667%}.col-xl-pull-4{right:33.33333333%}.col-xl-pull-3{right:25%}.col-xl-pull-2{right:16.66666667%}.col-xl-pull-1{right:8.33333333%}.col-xl-pull-0{right:auto}.col-xl-push-12{left:100%}.col-xl-push-11{left:91.66666667%}.col-xl-push-10{left:83.33333333%}.col-xl-push-9{left:75%}.col-xl-push-8{left:66.66666667%}.col-xl-push-7{left:58.33333333%}.col-xl-push-6{left:50%}.col-xl-push-5{left:41.66666667%}.col-xl-push-4{left:33.33333333%}.col-xl-push-3{left:25%}.col-xl-push-2{left:16.66666667%}.col-xl-push-1{left:8.33333333%}.col-xl-push-0{left:auto}.col-xl-offset-12{margin-left:100%}.col-xl-offset-11{margin-left:91.66666667%}.col-xl-offset-10{margin-left:83.33333333%}.col-xl-offset-9{margin-left:75%}.col-xl-offset-8{margin-left:66.66666667%}.col-xl-offset-7{margin-left:58.33333333%}.col-xl-offset-6{margin-left:50%}.col-xl-offset-5{margin-left:41.66666667%}.col-xl-offset-4{margin-left:33.33333333%}.col-xl-offset-3{margin-left:25%}.col-xl-offset-2{margin-left:16.66666667%}.col-xl-offset-1{margin-left:8.33333333%}.col-xl-offset-0{margin-left:0}}@media all and (max-width:767px){.list-definition>dt{float:none}.list-definition>dd{margin-left:0}.form-row .form-label{text-align:left}.form-row .form-label.required:after{position:static}.nav{padding-bottom:0;padding-left:0;padding-right:0}.nav-bar-outer-actions{margin-top:0}.nav-bar{display:block;margin-bottom:0;margin-left:auto;margin-right:auto;width:30.9rem}.nav-bar:before{display:none}.nav-bar>li{float:left;min-height:9rem}.nav-bar>li:after{display:none}.nav-bar>li:nth-child(4n){clear:both}.nav-bar a{line-height:1.4}.tooltip{display:none!important}.readiness-check-content{margin-right:2rem}.form-el-insider,.form-el-insider-wrap,.page-web-configuration .form-el-insider-input,.page-web-configuration .form-el-insider-input .form-el-input{display:block;width:100%}}@media all and (max-width:479px){.nav-bar{width:23.175rem}.nav-bar>li{width:7.725rem}.nav .btn-group .btn-wrap-try-again,.nav-bar-outer-actions .btn-wrap-try-again{clear:both;display:block;float:none;margin-left:auto;margin-right:auto;margin-top:1rem;padding-top:1rem}}
\ No newline at end of file
diff --git a/setup/src/Magento/Setup/Console/Command/UpgradeCommand.php b/setup/src/Magento/Setup/Console/Command/UpgradeCommand.php
index e5605051d48d7c0f01b14ea9bf60b9869bc0d812..508b68e95281202950e3e59476518c8547c4a734 100644
--- a/setup/src/Magento/Setup/Console/Command/UpgradeCommand.php
+++ b/setup/src/Magento/Setup/Console/Command/UpgradeCommand.php
@@ -5,16 +5,22 @@
  */
 namespace Magento\Setup\Console\Command;
 
+use Magento\Framework\Setup\ConsoleLogger;
+use Magento\Setup\Model\InstallerFactory;
 use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
 use Symfony\Component\Console\Output\OutputInterface;
-use Magento\Setup\Model\InstallerFactory;
-use Magento\Framework\Setup\ConsoleLogger;
 
 /**
  * Command for updating installed application after the code base has changed
  */
 class UpgradeCommand extends AbstractSetupCommand
 {
+    /**
+     * Option to skip deletion of var/generation directory
+     */
+    const INPUT_KEY_KEEP_GENERATED = 'keep-generated';
+
     /**
      * Installer service factory
      *
@@ -38,10 +44,19 @@ class UpgradeCommand extends AbstractSetupCommand
      */
     protected function configure()
     {
+        $options = [
+            new InputOption(
+                self::INPUT_KEY_KEEP_GENERATED,
+                null,
+                InputOption::VALUE_NONE,
+                'Prevents generated code from being deleted. ' . PHP_EOL .
+                'We discourage using this option except when deploying to production. ' . PHP_EOL .
+                'Consult your system integrator or administrator for more information.'
+            )
+        ];
         $this->setName('setup:upgrade')
-            ->setDescription(
-                'Upgrades the Magento application, DB data, and schema'
-            );
+            ->setDescription('Upgrades the Magento application, DB data, and schema')
+            ->setDefinition($options);
         parent::configure();
     }
 
@@ -50,10 +65,13 @@ class UpgradeCommand extends AbstractSetupCommand
      */
     protected function execute(InputInterface $input, OutputInterface $output)
     {
+        $keepGenerated = $input->getOption(self::INPUT_KEY_KEEP_GENERATED);
         $installer = $this->installerFactory->create(new ConsoleLogger($output));
-        $installer->updateModulesSequence();
+        $installer->updateModulesSequence($keepGenerated);
         $installer->installSchema();
         $installer->installDataFixtures();
-        $output->writeln('<info>Please re-run Magento compile command</info>');
+        if (!$keepGenerated) {
+            $output->writeln('<info>Please re-run Magento compile command</info>');
+        }
     }
 }
diff --git a/setup/src/Magento/Setup/Controller/ComponentGrid.php b/setup/src/Magento/Setup/Controller/ComponentGrid.php
index 9351c9f7925ee733b7c5db4e82be0bca1a0e5696..128f3335cc7704d4efcacb13497102a0aff77c70 100644
--- a/setup/src/Magento/Setup/Controller/ComponentGrid.php
+++ b/setup/src/Magento/Setup/Controller/ComponentGrid.php
@@ -6,21 +6,10 @@
 
 namespace Magento\Setup\Controller;
 
-use Magento\Framework\Composer\ComposerInformation;
-use Magento\Framework\Module\FullModuleList;
-use Magento\Framework\Module\ModuleList;
-use Magento\Framework\Module\PackageInfo;
-use Magento\Setup\Model\ObjectManagerProvider;
-use Zend\Mvc\Controller\AbstractActionController;
-use Zend\View\Model\JsonModel;
-use Zend\View\Model\ViewModel;
-use Magento\Setup\Model\ConnectManager;
-use Magento\Setup\Model\UpdatePackagesCache;
-
 /**
  * Controller for component grid tasks
  */
-class ComponentGrid extends AbstractActionController
+class ComponentGrid extends \Zend\Mvc\Controller\AbstractActionController
 {
     /**
      * @var \Magento\Framework\Composer\ComposerInformation
@@ -35,7 +24,7 @@ class ComponentGrid extends AbstractActionController
     private $packageInfo;
 
     /**
-     * @var ConnectManager
+     * @var \Magento\Setup\Model\ConnectManager
      */
     private $connectManager;
 
@@ -57,23 +46,22 @@ class ComponentGrid extends AbstractActionController
     private $updatePackagesCache;
 
     /**
-     * @param ComposerInformation $composerInformation
-     * @param ObjectManagerProvider $objectManagerProvider
-     * @param ConnectManager $connectManager
-     * @param UpdatePackagesCache $updatePackagesCache
+     * @param \Magento\Framework\Composer\ComposerInformation $composerInformation
+     * @param \Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider
+     * @param \Magento\Setup\Model\ConnectManager $connectManager
+     * @param \Magento\Setup\Model\UpdatePackagesCache $updatePackagesCache
      */
     public function __construct(
-        ComposerInformation $composerInformation,
-        ObjectManagerProvider $objectManagerProvider,
-        UpdatePackagesCache $updatePackagesCache,
-        ConnectManager $connectManager
+        \Magento\Framework\Composer\ComposerInformation $composerInformation,
+        \Magento\Setup\Model\ObjectManagerProvider $objectManagerProvider,
+        \Magento\Setup\Model\UpdatePackagesCache $updatePackagesCache,
+        \Magento\Setup\Model\ConnectManager $connectManager
     ) {
         $this->composerInformation = $composerInformation;
         $objectManager = $objectManagerProvider->get();
         $this->enabledModuleList = $objectManager->get('Magento\Framework\Module\ModuleList');
         $this->fullModuleList = $objectManager->get('Magento\Framework\Module\FullModuleList');
-        $this->packageInfo = $objectManagerProvider->get()
-            ->get('Magento\Framework\Module\PackageInfoFactory')->create();
+        $this->packageInfo = $objectManager->get('Magento\Framework\Module\PackageInfoFactory')->create();
         $this->connectManager = $connectManager;
         $this->updatePackagesCache = $updatePackagesCache;
     }
@@ -81,11 +69,11 @@ class ComponentGrid extends AbstractActionController
     /**
      * Index page action
      *
-     * @return ViewModel
+     * @return \Zend\View\Model\ViewModel
      */
     public function indexAction()
     {
-        $view = new ViewModel();
+        $view = new \Zend\View\Model\ViewModel();
         $view->setTerminal(true);
         return $view;
     }
@@ -93,7 +81,7 @@ class ComponentGrid extends AbstractActionController
     /**
      * Get Components info action
      *
-     * @return JsonModel
+     * @return \Zend\View\Model\JsonModel
      * @throws \RuntimeException
      * @SuppressWarnings(PHPMD.NPathComplexity)
      */
@@ -108,7 +96,7 @@ class ComponentGrid extends AbstractActionController
             $components[$component['name']]['uninstall'] = false;
             $components[$component['name']]['moduleName'] = $this->packageInfo->getModuleName($component['name']);
             if ($this->composerInformation->isPackageInComposerJson($component['name'])
-                && ($component['type'] !== ComposerInformation::METAPACKAGE_PACKAGE_TYPE)) {
+                && ($component['type'] !== \Magento\Framework\Composer\ComposerInformation::METAPACKAGE_PACKAGE_TYPE)) {
                 $components[$component['name']]['uninstall'] = true;
                 if (isset($lastSyncData['packages'][$component['name']]['latestVersion'])
                     && version_compare(
@@ -119,7 +107,7 @@ class ComponentGrid extends AbstractActionController
                     $components[$component['name']]['update'] = true;
                 }
             }
-            if ($component['type'] === ComposerInformation::MODULE_PACKAGE_TYPE) {
+            if ($component['type'] === \Magento\Framework\Composer\ComposerInformation::MODULE_PACKAGE_TYPE) {
                 $components[$component['name']]['enable'] =
                     $this->enabledModuleList->has($components[$component['name']]['moduleName']);
                 $components[$component['name']]['disable'] = !$components[$component['name']]['enable'];
@@ -137,7 +125,7 @@ class ComponentGrid extends AbstractActionController
             isset($packagesForInstall['packages']) ? count($packagesForInstall['packages']) : 0;
         $lastSyncData['countOfUpdate'] = isset($lastSyncData['packages']) ? count($lastSyncData['packages']) : 0;
 
-        return new JsonModel(
+        return new \Zend\View\Model\JsonModel(
             [
                 'success' => true,
                 'components' => array_values($components),
@@ -150,7 +138,7 @@ class ComponentGrid extends AbstractActionController
     /**
      * Sync action
      *
-     * @return JsonModel
+     * @return \Zend\View\Model\JsonModel
      */
     public function syncAction()
     {
@@ -165,7 +153,7 @@ class ComponentGrid extends AbstractActionController
         $lastSyncData['countOfUpdate'] = isset($lastSyncData['packages']) ? count($lastSyncData['packages']) : 0;
 
 
-        return new JsonModel(
+        return new \Zend\View\Model\JsonModel(
             [
                 'success' => true,
                 'lastSyncData' => $lastSyncData
@@ -185,7 +173,7 @@ class ComponentGrid extends AbstractActionController
         foreach ($allModules as $module) {
             $moduleName = $this->packageInfo->getPackageName($module);
             $modules[$moduleName]['name'] = $moduleName;
-            $modules[$moduleName]['type'] = ComposerInformation::MODULE_PACKAGE_TYPE;
+            $modules[$moduleName]['type'] = \Magento\Framework\Composer\ComposerInformation::MODULE_PACKAGE_TYPE;
             $modules[$moduleName]['version'] = $this->packageInfo->getVersion($module);
         }
         return $modules;
diff --git a/setup/src/Magento/Setup/Controller/CustomizeYourStore.php b/setup/src/Magento/Setup/Controller/CustomizeYourStore.php
index fe24ddcd5e586cf03eeb205348fb1963e370f410..865bb0a110d9a9c577b0269749eedcf129bd9253 100644
--- a/setup/src/Magento/Setup/Controller/CustomizeYourStore.php
+++ b/setup/src/Magento/Setup/Controller/CustomizeYourStore.php
@@ -5,9 +5,8 @@
  */
 namespace Magento\Setup\Controller;
 
-use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\Filesystem;
-use Magento\Framework\Module\ModuleList;
+use Magento\Framework\Module\FullModuleList;
 use Magento\Framework\Setup\Lists;
 use Magento\Setup\Model\ObjectManagerProvider;
 use Zend\Mvc\Controller\AbstractActionController;
@@ -17,7 +16,7 @@ use Zend\View\Model\JsonModel;
 class CustomizeYourStore extends AbstractActionController
 {
     /**
-     * @var ModuleList
+     * @var FullModuleList
      */
     protected $moduleList;
 
@@ -32,11 +31,11 @@ class CustomizeYourStore extends AbstractActionController
     protected $objectManagerProvider;
 
     /**
-     * @param ModuleList $moduleList
+     * @param FullModuleList $moduleList
      * @param Lists $list
      * @param ObjectManagerProvider $objectManagerProvider
      */
-    public function __construct(ModuleList $moduleList, Lists $list, ObjectManagerProvider $objectManagerProvider)
+    public function __construct(FullModuleList $moduleList, Lists $list, ObjectManagerProvider $objectManagerProvider)
     {
         $this->moduleList = $moduleList;
         $this->list = $list;
@@ -50,10 +49,10 @@ class CustomizeYourStore extends AbstractActionController
     {
         $sampleDataDeployed = $this->moduleList->has('Magento_SampleData');
         if ($sampleDataDeployed) {
-            /** @var \Magento\SampleData\Model\SampleData $sampleData */
-            $sampleData = $this->objectManagerProvider->get()->get('Magento\SampleData\Model\SampleData');
-            $isSampleDataInstalled = $sampleData->isInstalledSuccessfully();
-            $isSampleDataErrorInstallation = $sampleData->isInstallationError();
+            /** @var \Magento\Framework\Setup\SampleData\State $sampleData */
+            $sampleData = $this->objectManagerProvider->get()->get('Magento\Framework\Setup\SampleData\State');
+            $isSampleDataInstalled = $sampleData->isInstalled();
+            $isSampleDataErrorInstallation = $sampleData->hasError();
         } else {
             $isSampleDataInstalled = false;
             $isSampleDataErrorInstallation = false;
@@ -63,7 +62,6 @@ class CustomizeYourStore extends AbstractActionController
             'timezone' => $this->list->getTimezoneList(),
             'currency' => $this->list->getCurrencyList(),
             'language' => $this->list->getLocaleList(),
-            'isSampledataEnabled' => $sampleDataDeployed,
             'isSampleDataInstalled' => $isSampleDataInstalled,
             'isSampleDataErrorInstallation' => $isSampleDataErrorInstallation
         ]);
diff --git a/setup/src/Magento/Setup/Controller/Install.php b/setup/src/Magento/Setup/Controller/Install.php
index 1677c45f8bbc3879195e75554919cb7aadc3d0e2..fe6f1f363bb7d7b6c4e0109d6870f787a4b1dc23 100644
--- a/setup/src/Magento/Setup/Controller/Install.php
+++ b/setup/src/Magento/Setup/Controller/Install.php
@@ -19,6 +19,7 @@ use Zend\Mvc\Controller\AbstractActionController;
 use Zend\View\Model\JsonModel;
 use Zend\View\Model\ViewModel;
 use Magento\Setup\Console\Command\InstallCommand;
+use Magento\SampleData;
 
 /**
  * Install controller
@@ -42,21 +43,29 @@ class Install extends AbstractActionController
      */
     private $progressFactory;
 
+    /**
+     * @var \Magento\Framework\Setup\SampleData\State
+     */
+    protected $sampleDataState;
+
     /**
      * Default Constructor
      *
      * @param WebLogger $logger
      * @param InstallerFactory $installerFactory
      * @param ProgressFactory $progressFactory
+     * @param \Magento\Framework\Setup\SampleData\State $sampleDataState
      */
     public function __construct(
         WebLogger $logger,
         InstallerFactory $installerFactory,
-        ProgressFactory $progressFactory
+        ProgressFactory $progressFactory,
+        \Magento\Framework\Setup\SampleData\State $sampleDataState
     ) {
         $this->log = $logger;
         $this->installer = $installerFactory->create($logger);
         $this->progressFactory = $progressFactory;
+        $this->sampleDataState = $sampleDataState;
     }
 
     /**
@@ -91,13 +100,13 @@ class Install extends AbstractActionController
                 $this->installer->getInstallInfo()[SetupConfigOptionsList::KEY_ENCRYPTION_KEY]
             );
             $json->setVariable('success', true);
+            if ($this->sampleDataState->hasError()) {
+                $json->setVariable('isSampleDataError', true);
+            }
             $json->setVariable('messages', $this->installer->getInstallInfo()[Installer::INFO_MESSAGE]);
         } catch (\Exception $e) {
             $this->log->logError($e);
             $json->setVariable('success', false);
-            if ($e instanceof \Magento\Setup\SampleDataException) {
-                $json->setVariable('isSampleDataError', true);
-            }
         }
         return $json;
     }
@@ -117,11 +126,11 @@ class Install extends AbstractActionController
             $percent = sprintf('%d', $progress->getRatio() * 100);
             $success = true;
             $contents = $this->log->get();
-        } catch (\Exception $e) {
-            $contents = [(string)$e];
-            if ($e instanceof \Magento\Setup\SampleDataException) {
+            if ($this->sampleDataState->hasError()) {
                 $json->setVariable('isSampleDataError', true);
             }
+        } catch (\Exception $e) {
+            $contents = [(string)$e];
         }
         return $json->setVariables(['progress' => $percent, 'success' => $success, 'console' => $contents]);
     }
diff --git a/setup/src/Magento/Setup/Controller/SelectVersion.php b/setup/src/Magento/Setup/Controller/SelectVersion.php
index 86b968336205fdd971f44999c16adff614994bd0..a11e81164907cc55bafea6b9a7f152265ad0cc4e 100644
--- a/setup/src/Magento/Setup/Controller/SelectVersion.php
+++ b/setup/src/Magento/Setup/Controller/SelectVersion.php
@@ -51,7 +51,7 @@ class SelectVersion extends AbstractActionController
     {
         $data = [];
         try {
-            $data['package'] = $this->systemPackage->getPackageVersions();
+            $data['packages'] = $this->systemPackage->getPackageVersions();
             $responseType = ResponseTypeInterface::RESPONSE_TYPE_SUCCESS;
         } catch (\Exception $e) {
             $responseType = ResponseTypeInterface::RESPONSE_TYPE_ERROR;
diff --git a/setup/src/Magento/Setup/Controller/Success.php b/setup/src/Magento/Setup/Controller/Success.php
index 5bb2dd9f6e056e5ba9640a64fe868a11ff0ddaf2..f10dbcd49290be247a33a687260d2611acb4141a 100644
--- a/setup/src/Magento/Setup/Controller/Success.php
+++ b/setup/src/Magento/Setup/Controller/Success.php
@@ -38,9 +38,9 @@ class Success extends AbstractActionController
     public function indexAction()
     {
         if ($this->moduleList->has('Magento_SampleData')) {
-            /** @var \Magento\SampleData\Model\SampleData $sampleData */
-            $sampleData = $this->objectManagerProvider->get()->get('Magento\SampleData\Model\SampleData');
-            $isSampleDataErrorInstallation = $sampleData->isInstallationError();
+            /** @var \Magento\Framework\Setup\SampleData\State $sampleData */
+            $sampleData = $this->objectManagerProvider->get()->get('Magento\Framework\Setup\SampleData\State');
+            $isSampleDataErrorInstallation = $sampleData->hasError();
         } else {
             $isSampleDataErrorInstallation = false;
         }
diff --git a/setup/src/Magento/Setup/Fixtures/EavVariationsFixture.php b/setup/src/Magento/Setup/Fixtures/EavVariationsFixture.php
index 13a9369b069c514e9d643e905178d0d0eeafdfe6..f734db98cb4f47df962d7be7b4e402b45de5bcef 100644
--- a/setup/src/Magento/Setup/Fixtures/EavVariationsFixture.php
+++ b/setup/src/Magento/Setup/Fixtures/EavVariationsFixture.php
@@ -29,8 +29,8 @@ class EavVariationsFixture extends Fixture
         }
         $this->fixtureModel->resetObjectManager();
 
-        /* @var $model \Magento\Catalog\Model\Resource\Eav\Attribute */
-        $model = $this->fixtureModel->getObjectManager()->create('Magento\Catalog\Model\Resource\Eav\Attribute');
+        /* @var $model \Magento\Catalog\Model\ResourceModel\Eav\Attribute */
+        $model = $this->fixtureModel->getObjectManager()->create('Magento\Catalog\Model\ResourceModel\Eav\Attribute');
         /** @var \Magento\Store\Model\StoreManager $storeManager */
         $storeManager = $this->fixtureModel->getObjectManager()->create('Magento\Store\Model\StoreManager');
         $stores = $storeManager->getStores();
diff --git a/setup/src/Magento/Setup/Fixtures/OrdersFixture.php b/setup/src/Magento/Setup/Fixtures/OrdersFixture.php
index 7f3810fea232d86498dd7731f2afe868425016d3..38d7217099cbe272850d73e98ce93434d3701bd5 100644
--- a/setup/src/Magento/Setup/Fixtures/OrdersFixture.php
+++ b/setup/src/Magento/Setup/Fixtures/OrdersFixture.php
@@ -6,7 +6,7 @@
 
 namespace Magento\Setup\Fixtures;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 
 /**
  * Class OrdersFixture
@@ -34,59 +34,59 @@ class OrdersFixture extends Fixture
 
         $quoteTableName = $this->getTableName(
             'quote',
-            'Magento\Quote\Model\Resource\Quote'
+            'Magento\Quote\Model\ResourceModel\Quote'
         );
         $quoteAddressTableName = $this->getTableName(
             'quote_address',
-            'Magento\Quote\Model\Resource\Quote\Address'
+            'Magento\Quote\Model\ResourceModel\Quote\Address'
         );
         $quoteItemTableName = $this->getTableName(
             'quote_item',
-            'Magento\Quote\Model\Resource\Quote\Item'
+            'Magento\Quote\Model\ResourceModel\Quote\Item'
         );
         $quoteItemOptionTableName = $this->getTableName(
             'quote_item_option',
-            'Magento\Quote\Model\Resource\Quote\Item\Option'
+            'Magento\Quote\Model\ResourceModel\Quote\Item\Option'
         );
         $quotePaymentTableName = $this->getTableName(
             'quote_payment',
-            'Magento\Quote\Model\Resource\Quote\Payment'
+            'Magento\Quote\Model\ResourceModel\Quote\Payment'
         );
         $quoteAddressRateTableName = $this->getTableName(
             'quote_shipping_rate',
-            'Magento\Quote\Model\Resource\Quote\Address\Rate'
+            'Magento\Quote\Model\ResourceModel\Quote\Address\Rate'
         );
         $reportEventTableName = $this->getTableName(
             'report_event',
-            'Magento\Reports\Model\Resource\Event'
+            'Magento\Reports\Model\ResourceModel\Event'
         );
         $salesOrderTableName = $this->getTableName(
             'sales_order',
-            'Magento\Sales\Model\Resource\Order'
+            'Magento\Sales\Model\ResourceModel\Order'
         );
         $salesOrderAddressTableName = $this->getTableName(
             'sales_order_address',
-            'Magento\Sales\Model\Resource\Order'
+            'Magento\Sales\Model\ResourceModel\Order'
         );
         $salesOrderGridTableName = $this->getTableName(
             'sales_order_grid',
-            'Magento\Sales\Model\Resource\Order\Grid'
+            'Magento\Sales\Model\ResourceModel\Order\Grid'
         );
         $salesOrderItemTableName = $this->getTableName(
             'sales_order_item',
-            'Magento\Sales\Model\Resource\Order\Item'
+            'Magento\Sales\Model\ResourceModel\Order\Item'
         );
         $salesOrderPaymentTableName = $this->getTableName(
             'sales_order_payment',
-            'Magento\Sales\Model\Resource\Order\Payment'
+            'Magento\Sales\Model\ResourceModel\Order\Payment'
         );
         $salesOrderStatusHistoryTableName = $this->getTableName(
             'sales_order_status_history',
-            'Magento\Sales\Model\Resource\Order\Status\History'
+            'Magento\Sales\Model\ResourceModel\Order\Status\History'
         );
         $eavEntityStoreTableName = $this->getTableName(
             'eav_entity_store',
-            '\Magento\Eav\Model\Resource\Entity\Store'
+            '\Magento\Eav\Model\ResourceModel\Entity\Store'
         );
         /** @var \Magento\Store\Model\StoreManager $storeManager */
         $storeManager = $this->fixtureModel->getObjectManager()->create('Magento\Store\Model\StoreManager');
@@ -127,9 +127,9 @@ class OrdersFixture extends Fixture
                     /** @var $productCategory \Magento\Catalog\Model\Category */
                     $productCategory = $this->fixtureModel->getObjectManager()->get('Magento\Catalog\Model\Category');
 
-                    /** @var $simpleProductCollection \Magento\Catalog\Model\Resource\Product\Collection */
+                    /** @var $simpleProductCollection \Magento\Catalog\Model\ResourceModel\Product\Collection */
                     $simpleProductCollection = $this->fixtureModel->getObjectManager()->create(
-                        'Magento\Catalog\Model\Resource\Product\Collection'
+                        'Magento\Catalog\Model\ResourceModel\Product\Collection'
                     );
 
                     $simpleProductCollection->addStoreFilter($storeId);
@@ -316,7 +316,7 @@ class OrdersFixture extends Fixture
     public function getConnection()
     {
         return $this->fixtureModel->getObjectManager()->get(
-            'Magento\Framework\App\Resource'
+            'Magento\Framework\App\ResourceConnection'
         )->getConnection();
     }
 }
diff --git a/setup/src/Magento/Setup/Fixtures/TaxRatesFixture.php b/setup/src/Magento/Setup/Fixtures/TaxRatesFixture.php
index 818da63a4ceacdff3267b58101430700bfc42ff7..1272979773be277cedb9ffdaeb455ae28a9ab0f3 100644
--- a/setup/src/Magento/Setup/Fixtures/TaxRatesFixture.php
+++ b/setup/src/Magento/Setup/Fixtures/TaxRatesFixture.php
@@ -27,9 +27,9 @@ class TaxRatesFixture extends Fixture
         }
         $this->fixtureModel->resetObjectManager();
         /** Clean predefined tax rates to maintain consistency */
-        /** @var $collection Magento\Tax\Model\Resource\Calculation\Rate\Collection */
+        /** @var $collection Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection */
         $collection = $this->fixtureModel->getObjectManager()
-            ->get('Magento\Tax\Model\Resource\Calculation\Rate\Collection');
+            ->get('Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection');
 
         /** @var $model Magento\Tax\Model\Calculation\Rate */
         $model = $this->fixtureModel->getObjectManager()
diff --git a/setup/src/Magento/Setup/Model/DependencyReadinessCheck.php b/setup/src/Magento/Setup/Model/DependencyReadinessCheck.php
index 7c785454d49b918e810fcba7b4b8363378e01df2..a4429ab18cac046f5d2436bdd07f0ee5ae1b77e6 100644
--- a/setup/src/Magento/Setup/Model/DependencyReadinessCheck.php
+++ b/setup/src/Magento/Setup/Model/DependencyReadinessCheck.php
@@ -37,6 +37,11 @@ class DependencyReadinessCheck
      */
     private $file;
 
+    /**
+     * @var MagentoComposerApplication
+     */
+    private $magentoComposerApplication;
+
     /**
      * Constructor
      *
@@ -55,6 +60,7 @@ class DependencyReadinessCheck
         $this->directoryList = $directoryList;
         $this->file = $file;
         $this->requireUpdateDryRunCommand = $composerAppFactory->createRequireUpdateDryRunCommand();
+        $this->magentoComposerApplication = $composerAppFactory->create();
     }
 
     /**
@@ -70,6 +76,18 @@ class DependencyReadinessCheck
         $this->file->copy($composerJson, $this->directoryList->getPath(DirectoryList::VAR_DIR) .  '/composer.json');
         $workingDir = $this->directoryList->getPath(DirectoryList::VAR_DIR);
         try {
+            foreach ($packages as $package) {
+                if (strpos($package, 'magento/product-enterprise-edition') !== false) {
+                    $this->magentoComposerApplication->runComposerCommand(
+                        [
+                            'command' => 'remove',
+                            'packages' => ['magento/product-community-edition'],
+                            '--no-update' => true
+                        ],
+                        $workingDir
+                    );
+                }
+            }
             $this->requireUpdateDryRunCommand->run($packages, $workingDir);
             return ['success' => true];
         } catch (\RuntimeException $e) {
diff --git a/setup/src/Magento/Setup/Model/Installer.php b/setup/src/Magento/Setup/Model/Installer.php
index 0afe71e591b6e5fb3a6837455a869a6aa69f44f9..c3b0b306b14be7224e9bac37fa55daea4996cc60 100644
--- a/setup/src/Magento/Setup/Model/Installer.php
+++ b/setup/src/Magento/Setup/Model/Installer.php
@@ -10,12 +10,12 @@ use Magento\Framework\App\DeploymentConfig\Writer;
 use Magento\Framework\App\DeploymentConfig\Reader;
 use Magento\Framework\App\Filesystem\DirectoryList;
 use Magento\Framework\App\MaintenanceMode;
-use Magento\Framework\App\Resource\Config;
+use Magento\Framework\App\ResourceConnection\Config;
 use Magento\Framework\Component\ComponentRegistrar;
 use Magento\Framework\Config\ConfigOptionsListConstants;
 use Magento\Framework\Filesystem;
 use Magento\Framework\Exception\FileSystemException;
-use Magento\Framework\Model\Resource\Db\Context;
+use Magento\Framework\Model\ResourceModel\Db\Context;
 use Magento\Framework\Module\ModuleList\Loader as ModuleLoader;
 use Magento\Framework\Module\ModuleListInterface;
 use Magento\Framework\Shell;
@@ -37,6 +37,7 @@ use Magento\Framework\App\State\CleanupFiles;
 use Magento\Setup\Console\Command\InstallCommand;
 use Magento\Setup\Validator\DbValidator;
 use \Magento\Backend\Setup\ConfigOptionsList as BackendConfigOptionsList;
+use Magento\SampleData;
 
 /**
  * Class Installer contains the logic to install Magento application.
@@ -205,6 +206,11 @@ class Installer
      */
     private $dataSetupFactory;
 
+    /**
+     * @var \Magento\Framework\Setup\SampleData\State
+     */
+    protected $sampleDataState;
+
     /**
      * Component Registrar
      *
@@ -233,6 +239,7 @@ class Installer
      * @param DbValidator $dbValidator
      * @param SetupFactory $setupFactory
      * @param DataSetupFactory $dataSetupFactory
+     * @param \Magento\Framework\Setup\SampleData\State $sampleDataState
      * @param ComponentRegistrar $componentRegistrar
      *
      * @SuppressWarnings(PHPMD.ExcessiveParameterList)
@@ -256,6 +263,7 @@ class Installer
         DbValidator $dbValidator,
         SetupFactory $setupFactory,
         DataSetupFactory $dataSetupFactory,
+        \Magento\Framework\Setup\SampleData\State $sampleDataState,
         ComponentRegistrar $componentRegistrar
     ) {
         $this->filePermissions = $filePermissions;
@@ -277,6 +285,7 @@ class Installer
         $this->dbValidator = $dbValidator;
         $this->setupFactory = $setupFactory;
         $this->dataSetupFactory = $dataSetupFactory;
+        $this->sampleDataState = $sampleDataState;
         $this->componentRegistrar = $componentRegistrar;
     }
 
@@ -297,6 +306,7 @@ class Installer
         }
         $script[] = ['Installing database schema:', 'installSchema', []];
         $script[] = ['Installing user configuration...', 'installUserConfig', [$request]];
+        $script[] = ['Enabling caches:', 'enableCaches', []];
         $script[] = ['Installing data...', 'installDataFixtures', []];
         if (!empty($request[InstallCommand::INPUT_KEY_SALES_ORDER_INCREMENT_PREFIX])) {
             $script[] = [
@@ -306,12 +316,7 @@ class Installer
             ];
         }
         $script[] = ['Installing admin user...', 'installAdminUser', [$request]];
-        $script[] = ['Enabling caches:', 'enableCaches', []];
-        if (!empty($request[InstallCommand::INPUT_KEY_USE_SAMPLE_DATA])
-            && $this->componentRegistrar->getPath(ComponentRegistrar::MODULE, 'Magento_SampleData') !== null
-        ) {
-            $script[] = ['Installing sample data:', 'installSampleData', [$request]];
-        }
+        $script[] = ['Caches clearing:', 'cleanCaches', []];
         $script[] = ['Disabling Maintenance Mode:', 'setMaintenanceMode', [0]];
         $script[] = ['Post installation file permissions check...', 'checkApplicationFilePermissions', []];
 
@@ -336,6 +341,9 @@ class Installer
         if ($this->progress->getCurrent() != $this->progress->getTotal()) {
             throw new \LogicException('Installation progress did not finish properly.');
         }
+        if ($this->sampleDataState->hasError()) {
+            $this->log->log('Sample Data is installed with errors. See log file for details');
+        }
     }
 
     /**
@@ -758,7 +766,7 @@ class Installer
         $this->assertDeploymentConfigExists();
         $this->assertDbAccessible();
 
-        $resource = new \Magento\Framework\Module\Resource($this->context);
+        $resource = new \Magento\Framework\Module\ModuleResource($this->context);
         $verType = $type . '-version';
         $installType = $type . '-install';
         $upgradeType = $type . '-upgrade';
@@ -923,27 +931,17 @@ class Installer
     /**
      * Updates modules in deployment configuration
      *
+     * @param bool $keepGeneratedCode Cleanup var/generation and reset ObjectManager
      * @return void
      */
-    public function updateModulesSequence()
+    public function updateModulesSequence($keepGeneratedCode = false)
     {
         $this->assertDeploymentConfigExists();
 
-        $this->clearCache();
+        $this->cleanCaches();
 
-        $this->log->log('File system cleanup:');
-        $messages = $this->cleanupFiles->clearCodeGeneratedClasses();
-        // unload Magento autoloader because it may be using compiled definition
-        foreach (spl_autoload_functions() as $autoloader) {
-            if ($autoloader[0] instanceof \Magento\Framework\Code\Generator\Autoloader) {
-                spl_autoload_unregister([$autoloader[0], $autoloader[1]]);
-                break;
-            }
-        }
-        // Corrected Magento autoloader will be loaded upon next get() call on $this->objectManagerProvider
-        $this->objectManagerProvider->reset();
-        foreach ($messages as $message) {
-            $this->log->log($message);
+        if (!$keepGeneratedCode) {
+            $this->cleanupGeneratedCode();
         }
         $this->log->log('Updating modules:');
         $this->createModulesConfig([]);
@@ -959,7 +957,7 @@ class Installer
         $this->log->log('Starting Magento uninstallation:');
 
         $this->cleanupDb();
-        $this->clearCache();
+        $this->cleanCaches();
 
         $this->log->log('File system cleanup:');
         $messages = $this->cleanupFiles->clearAllFiles();
@@ -972,18 +970,6 @@ class Installer
         $this->log->logSuccess('Magento uninstallation complete.');
     }
 
-    /**
-     * Clears cache
-     *
-     * @return void
-     */
-    private function clearCache()
-    {
-        $cache = $this->objectManagerProvider->get()->create('Magento\Framework\App\Cache');
-        $cache->clean();
-        $this->log->log('Cache cleared successfully');
-    }
-
     /**
      * Enables caches after installing application
      *
@@ -1003,6 +989,22 @@ class Installer
         $this->log->log(print_r($cacheManager->getStatus(), true));
     }
 
+    /**
+     * Clean caches after installing application
+     *
+     * @return void
+     *
+     * @SuppressWarnings(PHPMD.UnusedPrivateMethod) Called by install() via callback.
+     */
+    private function cleanCaches()
+    {
+        /** @var \Magento\Framework\App\Cache\Manager $cacheManager */
+        $cacheManager = $this->objectManagerProvider->get()->get('Magento\Framework\App\Cache\Manager');
+        $types = $cacheManager->getAvailableTypes();
+        $cacheManager->clean($types);
+        $this->log->log('Cache cleared successfully');
+    }
+
     /**
      * Enables or disables maintenance mode for Magento application
      *
@@ -1130,30 +1132,6 @@ class Installer
         }
     }
 
-    /**
-     * Run installation process for Sample Data
-     *
-     * @param array $request
-     * @return void
-     * @throws \Magento\Setup\SampleDataException
-     *
-     * @SuppressWarnings(PHPMD.UnusedPrivateMethod) Called by install() via callback.
-     */
-    private function installSampleData($request)
-    {
-        try {
-            $userName = isset($request[AdminAccount::KEY_USER]) ? $request[AdminAccount::KEY_USER] : '';
-            $this->objectManagerProvider->reset();
-            $sampleData = $this->objectManagerProvider->get()->get('Magento\SampleData\Model\SampleData');
-            $sampleData->install($this->objectManagerProvider->get(), $this->log, $userName);
-        } catch (\Exception $e) {
-            throw new \Magento\Setup\SampleDataException(
-                "Error during sample data installation: {$e->getMessage()}",
-                $e->getCode()
-            );
-        }
-    }
-
     /**
      * Get handler for schema or data install/upgrade/backup/uninstall etc.
      *
@@ -1196,7 +1174,7 @@ class Installer
     /**
      * Generates list of ModuleContext
      *
-     * @param \Magento\Framework\Module\Resource $resource
+     * @param \Magento\Framework\Module\ModuleResource $resource
      * @param string $type
      * @return ModuleContext[]
      * @throws \Magento\Setup\Exception
@@ -1220,4 +1198,30 @@ class Installer
         }
         return $moduleContextList;
     }
+
+    /**
+     * Clear var/generation and reset object manager
+     *
+     * @return void
+     */
+    private function cleanupGeneratedCode()
+    {
+        $this->log->log('File system cleanup:');
+        $messages = $this->cleanupFiles->clearCodeGeneratedClasses();
+
+        // unload Magento autoloader because it may be using compiled definition
+        foreach (spl_autoload_functions() as $autoloader) {
+            if ($autoloader[0] instanceof \Magento\Framework\Code\Generator\Autoloader) {
+                spl_autoload_unregister([$autoloader[0], $autoloader[1]]);
+                break;
+            }
+        }
+
+        // Corrected Magento autoloader will be loaded upon next get() call on $this->objectManagerProvider
+        $this->objectManagerProvider->reset();
+
+        foreach ($messages as $message) {
+            $this->log->log($message);
+        }
+    }
 }
diff --git a/setup/src/Magento/Setup/Model/InstallerFactory.php b/setup/src/Magento/Setup/Model/InstallerFactory.php
index 0266a9c5261ef1a97abd97d08929d7245bcb8a48..253c62ef626be25e58e0031690024a329ae1cb9f 100644
--- a/setup/src/Magento/Setup/Model/InstallerFactory.php
+++ b/setup/src/Magento/Setup/Model/InstallerFactory.php
@@ -62,16 +62,17 @@ class InstallerFactory
             $this->serviceLocator->get('Magento\Framework\App\MaintenanceMode'),
             $this->serviceLocator->get('Magento\Framework\Filesystem'),
             $this->serviceLocator->get('Magento\Setup\Model\ObjectManagerProvider'),
-            new \Magento\Framework\Model\Resource\Db\Context(
+            new \Magento\Framework\Model\ResourceModel\Db\Context(
                 $this->getResource(),
-                $this->serviceLocator->get('Magento\Framework\Model\Resource\Db\TransactionManager'),
-                $this->serviceLocator->get('Magento\Framework\Model\Resource\Db\ObjectRelationProcessor')
+                $this->serviceLocator->get('Magento\Framework\Model\ResourceModel\Db\TransactionManager'),
+                $this->serviceLocator->get('Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor')
             ),
             $this->serviceLocator->get('Magento\Setup\Model\ConfigModel'),
             $this->serviceLocator->get('Magento\Framework\App\State\CleanupFiles'),
             $this->serviceLocator->get('Magento\Setup\Validator\DbValidator'),
             $this->serviceLocator->get('Magento\Setup\Module\SetupFactory'),
             $this->serviceLocator->get('Magento\Setup\Module\DataSetupFactory'),
+            $this->serviceLocator->get('Magento\Framework\Setup\SampleData\State'),
             new \Magento\Framework\Component\ComponentRegistrar()
         );
     }
diff --git a/setup/src/Magento/Setup/Model/ModuleUninstaller.php b/setup/src/Magento/Setup/Model/ModuleUninstaller.php
index 161c3038ae500b779bec75448cdf17792ff4b953..ac0a0ff42fca5f095ba603a127d88dca5ebc92bf 100644
--- a/setup/src/Magento/Setup/Model/ModuleUninstaller.php
+++ b/setup/src/Magento/Setup/Model/ModuleUninstaller.php
@@ -63,7 +63,7 @@ class ModuleUninstaller
     {
         $uninstalls = $this->collector->collectUninstall($modules);
         $setupModel = $this->setupFactory->create();
-        $resource = $this->objectManager->get('Magento\Framework\Module\Resource');
+        $resource = $this->objectManager->get('Magento\Framework\Module\ModuleResource');
         foreach ($modules as $module) {
             if (isset($uninstalls[$module])) {
                 $output->writeln("<info>Removing data of $module</info>");
diff --git a/setup/src/Magento/Setup/Model/SystemPackage.php b/setup/src/Magento/Setup/Model/SystemPackage.php
index d7f45f6e7b5cf0d8bfa9fd98c0c479b02709dd97..c848334ef70fc68fbdcc3ae6567f36221500d618 100755
--- a/setup/src/Magento/Setup/Model/SystemPackage.php
+++ b/setup/src/Magento/Setup/Model/SystemPackage.php
@@ -54,51 +54,167 @@ class SystemPackage
      */
     public function getPackageVersions()
     {
-        $systemPackage = null;
+        $currentCE = '0';
+        $result = [];
+        $systemPackages = [];
+        $systemPackages = $this->getInstalledSystemPackages($systemPackages);
+        if (empty($systemPackages)) {
+            throw new \RuntimeException('System packages not found');
+        }
+        foreach ($systemPackages as $systemPackage) {
+            $versions = [];
+            $systemPackageInfo = $this->infoCommand->run($systemPackage);
+            if (!$systemPackageInfo) {
+                throw new \RuntimeException('System package not found');
+            }
 
-        $locker = $this->magentoComposerApplication->createComposer()->getLocker();
+            $versions = $this->getSystemPackageVersions($systemPackageInfo, $versions);
 
-        foreach ($locker->getLockedRepository()->getPackages() as $package) {
-            $packageName = $package->getName();
+            if ($systemPackageInfo['name'] == 'magento/product-community-edition') {
+                $currentCE = $systemPackageInfo[InfoCommand::CURRENT_VERSION];
+            }
+            if (count($versions) > 1) {
+                $versions[0]['name'] .= ' (latest)';
+            }
 
-            if ($this->composerInfo->isSystemPackage($packageName)) {
-                $systemPackage = $packageName;
-                break;
+            if (count($versions) >= 1) {
+                $versions[count($versions) - 1]['name'] .= ' (current)';
             }
+
+            $result[] = [
+                'package' => $systemPackageInfo['name'],
+                'versions' => $versions
+            ];
         }
 
-        $systemPackageInfo = $this->infoCommand->run($systemPackage);
+        if (!in_array('magento/product-enterprise-edition', $systemPackages)) {
+            $result = array_merge($this->getAllowedEnterpriseVersions($currentCE), $result);
+        }
+
+        return $result;
+    }
 
-        if (!$systemPackageInfo) {
-            throw new \RuntimeException('System package not found');
+    /**
+     * @param string $currentCE
+     * @return array
+     */
+    public function getAllowedEnterpriseVersions($currentCE)
+    {
+        $result = [];
+        $enterpriseVersions = $this->infoCommand->run('magento/product-enterprise-edition');
+        $eeVersions = [];
+        $maxVersion = '';
+        if (array_key_exists('available_versions', $enterpriseVersions)) {
+            $enterpriseVersions = $this->sortVersions($enterpriseVersions);
+            if (isset($enterpriseVersions['available_versions'][0])) {
+                $maxVersion = $enterpriseVersions['available_versions'][0];
+            }
+            $eeVersions = $this->filterEeVersions($currentCE, $enterpriseVersions, $maxVersion);
         }
 
-        $versions = [];
+        if (!empty($eeVersions)) {
+            $result[] = [
+                'package' => 'magento/product-enterprise-edition',
+                'versions' => $eeVersions
+            ];
+        }
+        return $result;
+    }
 
+    /**
+     * @param array $systemPackageInfo
+     * @param array $versions
+     * @return array
+     */
+    public function getSystemPackageVersions($systemPackageInfo, $versions)
+    {
+        $editionType = '';
+        if ($systemPackageInfo['name'] == 'magento/product-community-edition') {
+            $editionType .= 'CE';
+        } else if ($systemPackageInfo['name'] == 'magento/product-enterprise-edition') {
+            $editionType .= 'EE';
+        }
         foreach ($systemPackageInfo[InfoCommand::NEW_VERSIONS] as $version) {
-            $versions[] = ['id' => $version, 'name' => 'Version ' . $version];
+            $versions[] = ['id' => $version, 'name' => 'Version ' . $version . ' ' . $editionType];
         }
 
         if ($systemPackageInfo[InfoCommand::CURRENT_VERSION]) {
             $versions[] = [
                 'id' => $systemPackageInfo[InfoCommand::CURRENT_VERSION],
-                'name' => 'Version ' . $systemPackageInfo[InfoCommand::CURRENT_VERSION]
+                'name' => 'Version ' . $systemPackageInfo[InfoCommand::CURRENT_VERSION] . ' ' . $editionType
             ];
         }
+        return  $versions;
+    }
 
-        if (count($versions) > 1) {
-            $versions[0]['name'] .= ' (latest)';
-        }
+    /**
+     * @param array $systemPackages
+     * @return array
+     */
+    public function getInstalledSystemPackages($systemPackages)
+    {
+        $systemPackages = [];
+        $locker = $this->magentoComposerApplication->createComposer()->getLocker();
 
-        if (count($versions) >= 1) {
-            $versions[count($versions) - 1]['name'] .= ' (current)';
+        /** @var \Composer\Package\CompletePackage $package */
+        foreach ($locker->getLockedRepository()->getPackages() as $package) {
+            $packageName = $package->getName();
+            if ($this->composerInfo->isSystemPackage($packageName)) {
+                if ($packageName == 'magento/product-community-edition') {
+                    if ($this->composerInfo->isPackageInComposerJson($packageName)) {
+                        $systemPackages[] = $packageName;
+                    }
+                } else {
+                    $systemPackages[] = $packageName;
+                }
+            }
         }
+        return $systemPackages;
+    }
 
-        $result = [
-            'package' => $systemPackageInfo['name'],
-            'versions' => $versions
-        ];
+    /**
+     * @param array $enterpriseVersions
+     * @return array
+     */
+    public function sortVersions($enterpriseVersions)
+    {
+        usort($enterpriseVersions['available_versions'], function ($versionOne, $versionTwo) {
+            if (version_compare($versionOne, $versionTwo, '==')) {
+                return 0;
+            }
+            return (version_compare($versionOne, $versionTwo, '<')) ? 1 : -1;
+        });
 
-        return $result;
+        return $enterpriseVersions;
+    }
+
+    /**
+     * @param string $currentCE
+     * @param array $enterpriseVersions
+     * @param string $maxVersion
+     * @return array
+     */
+    public function filterEeVersions($currentCE, $enterpriseVersions, $maxVersion)
+    {
+        $eeVersions = [];
+        foreach ($enterpriseVersions['available_versions'] as $version) {
+            $requires = $this->composerInfo->getPackageRequirements('magento/product-enterprise-edition', $version);
+            if (array_key_exists('magento/product-community-edition', $requires)) {
+                /** @var \Composer\Package\Link $ceRequire */
+                $ceRequire = $requires['magento/product-community-edition'];
+                if (version_compare(
+                    $ceRequire->getConstraint()->getPrettyString(),
+                    $currentCE,
+                    '>='
+                )) {
+                    $name = 'Version ' . $version . ' EE';
+                    if ($maxVersion == $version) {
+                        $name .= ' (latest)';
+                    }
+                    $eeVersions[] = ['id' => $version, 'name' => $name];
+                }
+            }
+        }
+        return $eeVersions;
     }
 }
diff --git a/setup/src/Magento/Setup/Module/ConnectionFactory.php b/setup/src/Magento/Setup/Module/ConnectionFactory.php
index 8998c1c66189f0ca32a0febc479bb449adc241e8..8fdb1d0ff0b1e088db491cecc67eeb5281eeb087 100644
--- a/setup/src/Magento/Setup/Module/ConnectionFactory.php
+++ b/setup/src/Magento/Setup/Module/ConnectionFactory.php
@@ -7,11 +7,11 @@
  */
 namespace Magento\Setup\Module;
 
-use Magento\Framework\Model\Resource\Type\Db\Pdo\Mysql;
+use Magento\Framework\Model\ResourceModel\Type\Db\Pdo\Mysql;
 use Magento\Framework\Stdlib;
 use Zend\ServiceManager\ServiceLocatorInterface;
 
-class ConnectionFactory implements \Magento\Framework\Model\Resource\Type\Db\ConnectionFactoryInterface
+class ConnectionFactory implements \Magento\Framework\Model\ResourceModel\Type\Db\ConnectionFactoryInterface
 {
     /**
      * @var ServiceLocatorInterface
diff --git a/setup/src/Magento/Setup/Module/I18n/Dictionary/Phrase.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Phrase.php
index 011de2e22c01ae7a3414b8e73a28eb54914aecf5..55d060c895f8c6a381186585886658c0fd33e4bb 100644
--- a/setup/src/Magento/Setup/Module/I18n/Dictionary/Phrase.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Phrase.php
@@ -237,4 +237,41 @@ class Phrase
     {
         return $this->getPhrase() . '::' . $this->getContextType();
     }
+
+    /**
+     * Compile PHP string based on quotes type it enclosed with
+     *
+     * @return string
+     */
+    public function getCompiledPhrase()
+    {
+        return $this->getCompiledString($this->getPhrase());
+    }
+
+    /**
+     * Compile PHP string based on quotes type it enclosed with
+     *
+     * @return string
+     */
+    public function getCompiledTranslation()
+    {
+        return $this->getCompiledString($this->getTranslation());
+    }
+
+    /**
+     * Compile PHP string based on quotes type it enclosed with
+     *
+     * @param string $string
+     * @return string
+     *
+     * @SuppressWarnings(PHPMD.EvalExpression)
+     */
+    private function getCompiledString($string)
+    {
+        $encloseQuote = $this->getQuote() == Phrase::QUOTE_DOUBLE ? Phrase::QUOTE_DOUBLE : Phrase::QUOTE_SINGLE;
+
+        $evalString = 'return ' . $encloseQuote . $string . $encloseQuote . ';';
+        $result = @eval($evalString);
+        return is_string($result) ? $result :  $string;
+    }
 }
diff --git a/setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php b/setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php
index b77daa5fd3512e5fac1e0e0defe8e84362d3b088..a689fa41308f45d1b357e83b55c1a47ca848bc39 100644
--- a/setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php
+++ b/setup/src/Magento/Setup/Module/I18n/Dictionary/Writer/Csv.php
@@ -41,10 +41,7 @@ class Csv implements WriterInterface
      */
     public function write(Phrase $phrase)
     {
-        $fields = [$phrase->getPhrase(), $phrase->getTranslation()];
-        $encloseQuote = $phrase->getQuote() == Phrase::QUOTE_DOUBLE ? Phrase::QUOTE_DOUBLE : Phrase::QUOTE_SINGLE;
-        $fields[0] = $this->compileString($fields[0], $encloseQuote);
-        $fields[1] = $this->compileString($fields[1], $encloseQuote);
+        $fields = [$phrase->getCompiledPhrase(), $phrase->getCompiledTranslation()];
         if (($contextType = $phrase->getContextType()) && ($contextValue = $phrase->getContextValueAsString())) {
             $fields[] = $contextType;
             $fields[] = $contextValue;
@@ -53,22 +50,6 @@ class Csv implements WriterInterface
         fputcsv($this->_fileHandler, $fields, ',', '"');
     }
 
-    /**
-     * Compile PHP string based on quotes type it enclosed with
-     *
-     * @param string $string
-     * @param string $encloseQuote
-     * @return string
-     *
-     * @SuppressWarnings(PHPMD.EvalExpression)
-     */
-    protected function compileString($string, $encloseQuote)
-    {
-        $evalString = 'return ' . $encloseQuote . $string . $encloseQuote . ';';
-        $result = @eval($evalString);
-        return is_string($result) ? $result : $string;
-    }
-
     /**
      * Close file handler
      *
diff --git a/setup/src/Magento/Setup/Module/I18n/FilesCollector.php b/setup/src/Magento/Setup/Module/I18n/FilesCollector.php
index 3c01889dfd11d4d5b701ad6f3845086e3a02a409..581f8d1628d9062aa2497ea2b660e3fef3219d74 100644
--- a/setup/src/Magento/Setup/Module/I18n/FilesCollector.php
+++ b/setup/src/Magento/Setup/Module/I18n/FilesCollector.php
@@ -42,7 +42,7 @@ class FilesCollector
         try {
             $directoryIterator = new \RecursiveDirectoryIterator(
                 $path,
-                \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS
+                \FilesystemIterator::SKIP_DOTS | \FilesystemIterator::UNIX_PATHS | \FilesystemIterator::FOLLOW_SYMLINKS
             );
             $iterator = new \RecursiveIteratorIterator($directoryIterator);
         } catch (\UnexpectedValueException $valueException) {
diff --git a/setup/src/Magento/Setup/Module/I18n/Parser/Parser.php b/setup/src/Magento/Setup/Module/I18n/Parser/Parser.php
index 4d11c88ecb6c83a4bc43eb4f8fef226321277a1c..6d1d1611852b3349f90aa8354f106b1e776ebef2 100644
--- a/setup/src/Magento/Setup/Module/I18n/Parser/Parser.php
+++ b/setup/src/Magento/Setup/Module/I18n/Parser/Parser.php
@@ -37,13 +37,12 @@ class Parser extends AbstractParser
     protected function _addPhrase($phraseData)
     {
         try {
-            $phraseKey = $phraseData['phrase'];
-
-            $this->_phrases[$phraseKey] = $this->_factory->createPhrase([
+            $phrase = $this->_factory->createPhrase([
                 'phrase' => $phraseData['phrase'],
                 'translation' => $phraseData['phrase'],
                 'quote' => $phraseData['quote'],
             ]);
+            $this->_phrases[$phrase->getCompiledPhrase()] = $phrase;
         } catch (\DomainException $e) {
             throw new \DomainException(
                 "{$e->getMessage()} in {$phraseData['file']}:{$phraseData['line']}",
diff --git a/setup/src/Magento/Setup/Module/ResourceFactory.php b/setup/src/Magento/Setup/Module/ResourceFactory.php
index f16941abe74ed93e7af53cf1f4c4b35e170db90e..2833107bb6ba52d89345cda70f260f6d4a465080 100644
--- a/setup/src/Magento/Setup/Module/ResourceFactory.php
+++ b/setup/src/Magento/Setup/Module/ResourceFactory.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Setup\Module;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Setup\Module\Setup\ResourceConfig;
 use Zend\ServiceManager\ServiceLocatorInterface;
 
@@ -35,7 +35,7 @@ class ResourceFactory
     public function create(\Magento\Framework\App\DeploymentConfig $deploymentConfig)
     {
         $connectionFactory = $this->serviceLocator->get('Magento\Setup\Module\ConnectionFactory');
-        $resource = new Resource(
+        $resource = new ResourceConnection(
             new ResourceConfig(),
             $connectionFactory,
             $deploymentConfig
diff --git a/setup/src/Magento/Setup/Module/Setup/ResourceConfig.php b/setup/src/Magento/Setup/Module/Setup/ResourceConfig.php
index 5f363751a53d0e2b3f9adb1aa27ddc76b9aea177..a32524c1ce8a936fe658ccb53c240bc8005ed52e 100644
--- a/setup/src/Magento/Setup/Module/Setup/ResourceConfig.php
+++ b/setup/src/Magento/Setup/Module/Setup/ResourceConfig.php
@@ -8,13 +8,13 @@ namespace Magento\Setup\Module\Setup;
 /**
  * Simplified resource config for Setup tools
  */
-class ResourceConfig implements \Magento\Framework\App\Resource\ConfigInterface
+class ResourceConfig implements \Magento\Framework\App\ResourceConnection\ConfigInterface
 {
     /**
      * {@inheritdoc}
      */
     public function getConnectionName($resourceName)
     {
-        return \Magento\Framework\App\Resource::DEFAULT_CONNECTION;
+        return \Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION;
     }
 }
diff --git a/setup/src/Magento/Setup/Module/SetupFactory.php b/setup/src/Magento/Setup/Module/SetupFactory.php
index 386fedd04a9f529053943a7f5b8c3bb992e607df..4f602c31dbba05a2d1df9ff058a22d7b35970e26 100644
--- a/setup/src/Magento/Setup/Module/SetupFactory.php
+++ b/setup/src/Magento/Setup/Module/SetupFactory.php
@@ -5,7 +5,7 @@
  */
 namespace Magento\Setup\Module;
 
-use Magento\Framework\App\Resource;
+use Magento\Framework\App\ResourceConnection;
 use Magento\Setup\Model\ObjectManagerProvider;
 
 /**
@@ -31,14 +31,14 @@ class SetupFactory
     /**
      * Creates setup
      *
-     * @param Resource $appResource
+     * @param ResourceConnection $appResource
      * @return Setup
      */
-    public function create(Resource $appResource = null)
+    public function create(ResourceConnection $appResource = null)
     {
         $objectManager = $this->objectManagerProvider->get();
         if ($appResource === null) {
-            $appResource = $objectManager->get('Magento\Framework\App\Resource');
+            $appResource = $objectManager->get('Magento\Framework\App\ResourceConnection');
         }
         return new Setup($appResource);
     }
diff --git a/setup/src/Magento/Setup/Test/Unit/Controller/BackupActionItemsTest.php b/setup/src/Magento/Setup/Test/Unit/Controller/BackupActionItemsTest.php
index bc30f60a37e4272ba2f57b3d37799882e8b112ad..a22a3f96de6e1084ba0468bd340122b8a993bb07 100644
--- a/setup/src/Magento/Setup/Test/Unit/Controller/BackupActionItemsTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Controller/BackupActionItemsTest.php
@@ -48,8 +48,8 @@ class BackupActionItemsTest extends \PHPUnit_Framework_TestCase
         $this->directoryList = $this->getMock('Magento\Framework\App\Filesystem\DirectoryList', [], [], '', false);
         $this->objectManagerProvider = $this->getMock('Magento\Setup\Model\ObjectManagerProvider', [], [], '', false);
         $this->backupRollback = $this->getMock(
-            'Magento\\Setup\Model\\BackupRollback',
-            [],
+            'Magento\Setup\Model\BackupRollback',
+            ['getDBDiskSpace', 'dbBackup'],
             [],
             '',
             false
@@ -59,16 +59,33 @@ class BackupActionItemsTest extends \PHPUnit_Framework_TestCase
         $this->objectManagerProvider->expects($this->once())->method('get')->willReturn($objectManager);
         $this->log = $this->getMock('Magento\Setup\Model\WebLogger', [], [], '', false);
         $this->filesystem = $this->getMock('Magento\Framework\Backup\Filesystem', [], [], '', false);
+
         $this->controller = new BackupActionItems(
             $this->objectManagerProvider,
             $this->log,
             $this->directoryList,
             $this->filesystem
         );
+
+        $request = $this->getMock('\Zend\Http\PhpEnvironment\Request', [], [], '', false);
+        $response = $this->getMock('\Zend\Http\PhpEnvironment\Response', [], [], '', false);
+        $routeMatch = $this->getMock('\Zend\Mvc\Router\RouteMatch', [], [], '', false);
+
+        $mvcEvent = $this->getMock('\Zend\Mvc\MvcEvent', [], [], '', false);
+        $mvcEvent->expects($this->any())->method('setRequest')->with($request)->willReturn($mvcEvent);
+        $mvcEvent->expects($this->any())->method('setResponse')->with($response)->willReturn($mvcEvent);
+        $mvcEvent->expects($this->any())->method('setTarget')->with($this->controller)->willReturn($mvcEvent);
+        $mvcEvent->expects($this->any())->method('getRouteMatch')->willReturn($routeMatch);
+        $contentArray = '{"options":{"code":false,"media":false,"db":true}}';
+        $request->expects($this->any())->method('getContent')->willReturn($contentArray);
+
+        $this->controller->setEvent($mvcEvent);
+        $this->controller->dispatch($request, $response);
     }
 
     public function testCheckAction()
     {
+        $this->backupRollback->expects($this->once())->method('getDBDiskSpace')->willReturn(500);
         $this->directoryList->expects($this->once())->method('getPath')->willReturn(__DIR__);
         $this->filesystem->expects($this->once())->method('validateAvailableDiscSpace');
         $jsonModel = $this->controller->checkAction();
@@ -97,12 +114,13 @@ class BackupActionItemsTest extends \PHPUnit_Framework_TestCase
 
     public function testCreateAction()
     {
+        $this->backupRollback->expects($this->once())->method('dbBackup')->willReturn('backup/path/');
         $jsonModel = $this->controller->createAction();
         $this->assertInstanceOf('Zend\View\Model\JsonModel', $jsonModel);
         $variables = $jsonModel->getVariables();
         $this->assertArrayHasKey('responseType', $variables);
         $this->assertEquals(ResponseTypeInterface::RESPONSE_TYPE_SUCCESS, $variables['responseType']);
         $this->assertArrayHasKey('files', $variables);
-        $this->assertEquals([], $variables['files']);
+        $this->assertEquals(['backup/path/'], $variables['files']);
     }
 }
diff --git a/setup/src/Magento/Setup/Test/Unit/Controller/CustomizeYourStoreTest.php b/setup/src/Magento/Setup/Test/Unit/Controller/CustomizeYourStoreTest.php
index 84a69a4f67a3ee7f246ce8d664035ac295680736..e33211c68cc658a854a7c598186b146c0280acb0 100644
--- a/setup/src/Magento/Setup/Test/Unit/Controller/CustomizeYourStoreTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Controller/CustomizeYourStoreTest.php
@@ -16,12 +16,12 @@ class CustomizeYourStoreTest extends \PHPUnit_Framework_TestCase
     private $controller;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\SampleData\Model\SampleData
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Setup\SampleData\State
      */
-    private $sampleData;
+    private $sampleDataState;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Setup\Model\Lists
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Setup\Lists
      */
     private $lists;
 
@@ -31,7 +31,7 @@ class CustomizeYourStoreTest extends \PHPUnit_Framework_TestCase
     private $objectManager;
 
     /**
-     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Module\ModuleList
+     * @var \PHPUnit_Framework_MockObject_MockObject|\Magento\Framework\Module\FullModuleList
      */
     private $moduleList;
 
@@ -40,31 +40,32 @@ class CustomizeYourStoreTest extends \PHPUnit_Framework_TestCase
         $objectManagerProvider = $this->getMock('Magento\Setup\Model\ObjectManagerProvider', [], [], '', false);
         $this->objectManager = $this->getMock('Magento\Framework\App\ObjectManager', [], [], '', false);
         $objectManagerProvider->expects($this->any())->method('get')->willReturn($this->objectManager);
-        $this->sampleData = $this->getMock(
-            'Magento\SampleData\Model\SampleData',
-            ['isInstalledSuccessfully', 'isInstallationError'],
+        $this->sampleDataState = $this->getMock(
+            'Magento\Framework\Setup\SampleData\State',
+            [],
             [],
             '',
             false
         );
         $this->lists = $this->getMock('\Magento\Framework\Setup\Lists', [], [], '', false);
-        $this->moduleList = $this->getMock('Magento\Framework\Module\ModuleList', [], [], '', false);
+        $this->moduleList = $this->getMock('Magento\Framework\Module\FullModuleList', [], [], '', false);
         $this->controller = new CustomizeYourStore($this->moduleList, $this->lists, $objectManagerProvider);
     }
 
     /**
      * @param array $expected
+     * @param $withSampleData
      *
      * @dataProvider indexActionDataProvider
      */
-    public function testIndexAction($expected)
+    public function testIndexAction($expected, $withSampleData)
     {
-        if ($expected['isSampledataEnabled']) {
+        if ($withSampleData) {
             $this->moduleList->expects($this->once())->method('has')->willReturn(true);
-            $this->objectManager->expects($this->once())->method('get')->willReturn($this->sampleData);
-            $this->sampleData->expects($this->once())->method('isInstalledSuccessfully')
+            $this->objectManager->expects($this->once())->method('get')->willReturn($this->sampleDataState);
+            $this->sampleDataState->expects($this->once())->method('isInstalled')
                 ->willReturn($expected['isSampleDataInstalled']);
-            $this->sampleData->expects($this->once())->method('isInstallationError')
+            $this->sampleDataState->expects($this->once())->method('hasError')
                 ->willReturn($expected['isSampleDataErrorInstallation']);
         } else {
             $this->moduleList->expects($this->once())->method('has')->willReturn(false);
@@ -95,23 +96,19 @@ class CustomizeYourStoreTest extends \PHPUnit_Framework_TestCase
         $currency = ['currency' => ['USD'=>'US Dollar', 'EUR' => 'Euro']];
         $language = ['language' => ['en_US'=>'English (USA)', 'en_UK' => 'English (UK)']];
         $sampleData = [
-            'isSampledataEnabled' => false,
             'isSampleDataInstalled' => false,
             'isSampleDataErrorInstallation' => false
         ];
-        $sampleDataTrue = array_merge($sampleData, ['isSampledataEnabled' => true]);
-        $sampleDataFalse = array_merge($sampleData, ['isSampledataEnabled' => false]);
 
         return [
-            'with_all_data' => [array_merge($timezones, $currency, $language, $sampleDataTrue)],
-            'no_currency_data' => [array_merge($timezones, ['currency' => null], $language, $sampleDataTrue)],
-            'no_timezone_data' => [array_merge(['timezone' => null], $currency, $language, $sampleDataTrue)],
-            'no_language_data' => [array_merge($timezones, $currency, ['language' => null], $sampleDataTrue)],
-            'empty_currency_data' => [array_merge($timezones, ['currency' => []], $language, $sampleDataTrue)],
-            'empty_timezone_data' => [array_merge(['timezone' => []], $currency, $language, $sampleDataTrue)],
-            'empty_language_data' => [array_merge($timezones, $currency, ['language' => []], $sampleDataTrue)],
-            'false_sample_data' => [array_merge($timezones, $currency, $language, $sampleDataFalse)],
-            'no_sample_data' => [array_merge($timezones, $currency, $language, $sampleData)],
+            'with_all_data' => [array_merge($timezones, $currency, $language, $sampleData), true],
+            'no_currency_data' => [array_merge($timezones, ['currency' => null], $language, $sampleData), true],
+            'no_timezone_data' => [array_merge(['timezone' => null], $currency, $language, $sampleData), true],
+            'no_language_data' => [array_merge($timezones, $currency, ['language' => null], $sampleData), true],
+            'empty_currency_data' => [array_merge($timezones, ['currency' => []], $language, $sampleData), true],
+            'empty_timezone_data' => [array_merge(['timezone' => []], $currency, $language, $sampleData), true],
+            'empty_language_data' => [array_merge($timezones, $currency, ['language' => []], $sampleData), true],
+            'no_sample_data' => [array_merge($timezones, $currency, $language, $sampleData), false],
         ];
     }
 
diff --git a/setup/src/Magento/Setup/Test/Unit/Controller/DataOptionTest.php b/setup/src/Magento/Setup/Test/Unit/Controller/DataOptionTest.php
index c0eac84d87aa3e204eb946f620d49e34ce7caa3d..b544d1e068fc4bd24f75473594c983a82a5a148e 100644
--- a/setup/src/Magento/Setup/Test/Unit/Controller/DataOptionTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Controller/DataOptionTest.php
@@ -69,7 +69,7 @@ class DataOptionTest extends \PHPUnit_Framework_TestCase
 
     public function testNoHasUninstallAction()
     {
-        $this->request->expects($this->any())->method('getContent')->willReturn('');
+        $this->request->expects($this->any())->method('getContent')->willReturn('{}');
         $this->controller->setEvent($this->mvcEvent);
         $this->controller->dispatch($this->request, $this->response);
         $this->uninstallCollector->expects($this->never())->method('collectUninstall')->with(["some_module"]);
diff --git a/setup/src/Magento/Setup/Test/Unit/Controller/InstallTest.php b/setup/src/Magento/Setup/Test/Unit/Controller/InstallTest.php
index d5ff4a9f96128952d482fe9faca9676ab50f3be7..53ea5f5bd22461b9e3fcd65d738cbe49a3ac47f3 100644
--- a/setup/src/Magento/Setup/Test/Unit/Controller/InstallTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Controller/InstallTest.php
@@ -30,15 +30,26 @@ class InstallTest extends \PHPUnit_Framework_TestCase
      */
     private $controller;
 
+    /**
+     * @var \Magento\Framework\Setup\SampleData\State|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $sampleDataState;
+
     public function setUp()
     {
         $this->webLogger = $this->getMock('\Magento\Setup\Model\WebLogger', [], [], '', false);
         $installerFactory = $this->getMock('\Magento\Setup\Model\InstallerFactory', [], [], '', false);
         $this->installer = $this->getMock('\Magento\Setup\Model\Installer', [], [], '', false);
         $this->progressFactory = $this->getMock('\Magento\Setup\Model\Installer\ProgressFactory', [], [], '', false);
+        $this->sampleDataState = $this->getMock('\Magento\Framework\Setup\SampleData\State', [], [], '', false);
         $installerFactory->expects($this->once())->method('create')->with($this->webLogger)
             ->willReturn($this->installer);
-        $this->controller = new Install($this->webLogger, $installerFactory, $this->progressFactory);
+        $this->controller = new Install(
+            $this->webLogger,
+            $installerFactory,
+            $this->progressFactory,
+            $this->sampleDataState
+        );
     }
 
     public function testIndexAction()
@@ -66,31 +77,33 @@ class InstallTest extends \PHPUnit_Framework_TestCase
     {
         $this->webLogger->expects($this->once())->method('clear');
         $this->installer->expects($this->once())->method('install')
-            ->willThrowException($this->getMock('\Magento\Setup\SampleDataException'));
+            ->willThrowException($this->getMock('\Exception'));
         $jsonModel = $this->controller->startAction();
-        $this->assertTrue($jsonModel->getVariable('isSampleDataError'));
+        $this->assertNull($jsonModel->getVariable('isSampleDataError'));
     }
 
     public function testStartActionWithSampleDataError()
     {
         $this->webLogger->expects($this->once())->method('clear');
-        $this->webLogger->expects($this->once())->method('logError');
-        $this->installer->method('install')->will($this->throwException(new \LogicException));
+        $this->webLogger->expects($this->never())->method('logError');
+        $this->installer->method('install');
+        $this->sampleDataState->expects($this->once())->method('hasError')->willReturn(true);
         $jsonModel = $this->controller->startAction();
         $this->assertInstanceOf('\Zend\View\Model\JsonModel', $jsonModel);
         $variables = $jsonModel->getVariables();
         $this->assertArrayHasKey('success', $variables);
-        $this->assertFalse($variables['success']);
+        $this->assertTrue($variables['success']);
+        $this->assertTrue($jsonModel->getVariable('isSampleDataError'));
     }
 
     public function testProgressAction()
     {
-        $someNumber = 42;
+        $numValue = 42;
         $consoleMessages = ['key1' => 'log message 1', 'key2' => 'log message 2'];
         $progress = $this->getMock('\Magento\Setup\Model\Installer\Progress', [], [], '', false);
         $this->progressFactory->expects($this->once())->method('createFromLog')->with($this->webLogger)
             ->willReturn($progress);
-        $progress->expects($this->once())->method('getRatio')->willReturn($someNumber);
+        $progress->expects($this->once())->method('getRatio')->willReturn($numValue);
         $this->webLogger->expects($this->once())->method('get')->willReturn($consoleMessages);
         $jsonModel = $this->controller->progressAction();
         $this->assertInstanceOf('\Zend\View\Model\JsonModel', $jsonModel);
@@ -100,7 +113,7 @@ class InstallTest extends \PHPUnit_Framework_TestCase
         $this->assertArrayHasKey('console', $variables);
         $this->assertSame($consoleMessages, $variables['console']);
         $this->assertTrue($variables['success']);
-        $this->assertSame(sprintf('%d', $someNumber * 100), $variables['progress']);
+        $this->assertSame(sprintf('%d', $numValue * 100), $variables['progress']);
     }
 
     public function testProgressActionWithError()
@@ -120,15 +133,19 @@ class InstallTest extends \PHPUnit_Framework_TestCase
 
     public function testProgressActionWithSampleDataError()
     {
-        $this->progressFactory->expects($this->once())->method('createFromLog')
-            ->willThrowException($this->getMock('\Magento\Setup\SampleDataException'));
+        $numValue = 42;
+        $progress = $this->getMock('\Magento\Setup\Model\Installer\Progress', [], [], '', false);
+        $progress->expects($this->once())->method('getRatio')->willReturn($numValue);
+        $this->progressFactory->expects($this->once())->method('createFromLog')->willReturn($progress);
+        $this->sampleDataState->expects($this->once())->method('hasError')->willReturn(true);
         $jsonModel = $this->controller->progressAction();
         $this->assertInstanceOf('\Zend\View\Model\JsonModel', $jsonModel);
         $variables = $jsonModel->getVariables();
         $this->assertArrayHasKey('success', $variables);
         $this->assertArrayHasKey('console', $variables);
-        $this->assertFalse($variables['success']);
+        $this->assertTrue($variables['success']);
         $this->assertTrue($jsonModel->getVariable('isSampleDataError'));
+        $this->assertSame(sprintf('%d', $numValue * 100), $variables['progress']);
     }
 
     public function testDispatch()
diff --git a/setup/src/Magento/Setup/Test/Unit/Controller/SuccessTest.php b/setup/src/Magento/Setup/Test/Unit/Controller/SuccessTest.php
index e55d4430ee7cf8301307dfb88cfa52107c6e7634..6efff5d1ca88e4b3a988356d956e46122f36298e 100644
--- a/setup/src/Magento/Setup/Test/Unit/Controller/SuccessTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Controller/SuccessTest.php
@@ -17,11 +17,11 @@ class SuccessTest extends \PHPUnit_Framework_TestCase
         $objectManagerProvider = $this->getMock('Magento\Setup\Model\ObjectManagerProvider', [], [], '', false);
         $objectManager = $this->getMock('Magento\Framework\App\ObjectManager', [], [], '', false);
         $objectManagerProvider->expects($this->once())->method('get')->willReturn($objectManager);
-        $sampleData = $this->getMock('Magento\Setup\Model\SampleData', ['isInstallationError'], [], '', false);
-        $objectManager->expects($this->once())->method('get')->willReturn($sampleData);
+        $sampleDataState = $this->getMock('Magento\Framework\Setup\SampleData\State', ['hasError'], [], '', false);
+        $objectManager->expects($this->once())->method('get')->willReturn($sampleDataState);
         /** @var $controller Success */
         $controller = new Success($moduleList, $objectManagerProvider);
-        $sampleData->expects($this->once())->method('isInstallationError');
+        $sampleDataState->expects($this->once())->method('hasError');
         $viewModel = $controller->indexAction();
         $this->assertInstanceOf('Zend\View\Model\ViewModel', $viewModel);
         $this->assertTrue($viewModel->terminate());
diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php
index fc6914f44ad5a5c553bc2604857c802a005312be..2c277f66eeac30e877c24c362dd58b81f8c5ac78 100644
--- a/setup/src/Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/CartPriceRulesFixtureTest.php
@@ -42,9 +42,9 @@ class CartPriceRulesFixtureTest extends \PHPUnit_Framework_TestCase
             ->method('getId')
             ->will($this->returnValue('website_id'));
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $abstractDbMock = $this->getMockForAbstractClass(
-            '\Magento\Framework\Model\Resource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$contextMock],
             '',
             true,
diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php
index be8a7f156a43cf6aab89603b6058e557c5eddb74..2e6625e107abb257d7d3e71fa431acab49d34dce 100644
--- a/setup/src/Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/CatalogPriceRulesFixtureTest.php
@@ -47,9 +47,9 @@ class CatalogPriceRulesFixtureTest extends \PHPUnit_Framework_TestCase
             ->method('getWebsites')
             ->will($this->returnValue([$websiteMock]));
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $abstractDbMock = $this->getMockForAbstractClass(
-            '\Magento\Framework\Model\Resource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$contextMock],
             '',
             true,
diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php
index 0643f6cd40fec1ebc801f72d213f8d8a40f7c979..c5f8b6e18f691e5fa3407bf5d8fc7dd01ddc0bfd 100644
--- a/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/ConfigurableProductsFixtureTest.php
@@ -31,9 +31,9 @@ class ConfigurableProductsFixtureTest extends \PHPUnit_Framework_TestCase
     {
         $importMock = $this->getMock('\Magento\ImportExport\Model\Import', [], [], '', false);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $abstractDbMock = $this->getMockForAbstractClass(
-            '\Magento\Framework\Model\Resource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$contextMock],
             '',
             true,
diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/EavVariationsFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/EavVariationsFixtureTest.php
index 3e8e08002842f2dd053477aca718a30a775fbd06..214a534da97123cedc1cef9ec4c2a283b1d3d9da 100644
--- a/setup/src/Magento/Setup/Test/Unit/Fixtures/EavVariationsFixtureTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/EavVariationsFixtureTest.php
@@ -31,7 +31,7 @@ class EavVariationsFixtureTest extends \PHPUnit_Framework_TestCase
     public function testExecute()
     {
         $attributeMock = $this->getMock(
-            'Magento\Catalog\Model\Resource\Eav\Attribute',
+            'Magento\Catalog\Model\ResourceModel\Eav\Attribute',
             [
                 'setAttributeSetId',
                 'setAttributeGroupId',
@@ -63,7 +63,7 @@ class EavVariationsFixtureTest extends \PHPUnit_Framework_TestCase
         $cacheMock = $this->getMock('Magento\Framework\App\CacheInterface', [], [], '', false);
 
         $valueMap = [
-            ['Magento\Catalog\Model\Resource\Eav\Attribute', [], $attributeMock],
+            ['Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], $attributeMock],
             ['Magento\Store\Model\StoreManager', [], $storeManagerMock],
             ['Magento\Eav\Model\Entity\Attribute\Set', $setMock],
             ['Magento\Framework\App\CacheInterface', $cacheMock]
@@ -91,13 +91,13 @@ class EavVariationsFixtureTest extends \PHPUnit_Framework_TestCase
 
     public function testNoFixtureConfigValue()
     {
-        $attributeMock = $this->getMock('Magento\Catalog\Model\Resource\Eav\Attribute', [], [], '', false);
+        $attributeMock = $this->getMock('Magento\Catalog\Model\ResourceModel\Eav\Attribute', [], [], '', false);
         $attributeMock->expects($this->never())->method('save');
 
         $objectManagerMock = $this->getMock('Magento\Framework\ObjectManager\ObjectManager', [], [], '', false);
         $objectManagerMock->expects($this->never())
             ->method('create')
-            ->with($this->equalTo('Magento\Catalog\Model\Resource\Eav\Attribute'))
+            ->with($this->equalTo('Magento\Catalog\Model\ResourceModel\Eav\Attribute'))
             ->willReturn($attributeMock);
 
         $this->fixtureModelMock
diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php
index 364ba0c8f61e33ae7e6b1935ddfc68438fa9488c..0f787152d07c2139a855e28c662fd911aa3ff2b1 100644
--- a/setup/src/Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/OrdersFixtureTest.php
@@ -35,19 +35,19 @@ class OrdersFixtureTest extends \PHPUnit_Framework_TestCase
     public function testExecute()
     {
         $mockObjectNames = [
-            'Magento\Quote\Model\Resource\Quote',
-            'Magento\Quote\Model\Resource\Quote\Address',
-            'Magento\Quote\Model\Resource\Quote\Item',
-            'Magento\Quote\Model\Resource\Quote\Item\Option',
-            'Magento\Quote\Model\Resource\Quote\Payment',
-            'Magento\Quote\Model\Resource\Quote\Address\Rate',
-            'Magento\Reports\Model\Resource\Event',
-            'Magento\Sales\Model\Resource\Order',
-            'Magento\Sales\Model\Resource\Order\Grid',
-            'Magento\Sales\Model\Resource\Order\Item',
-            'Magento\Sales\Model\Resource\Order\Payment',
-            'Magento\Sales\Model\Resource\Order\Status\History',
-            '\Magento\Eav\Model\Resource\Entity\Store'
+            'Magento\Quote\Model\ResourceModel\Quote',
+            'Magento\Quote\Model\ResourceModel\Quote\Address',
+            'Magento\Quote\Model\ResourceModel\Quote\Item',
+            'Magento\Quote\Model\ResourceModel\Quote\Item\Option',
+            'Magento\Quote\Model\ResourceModel\Quote\Payment',
+            'Magento\Quote\Model\ResourceModel\Quote\Address\Rate',
+            'Magento\Reports\Model\ResourceModel\Event',
+            'Magento\Sales\Model\ResourceModel\Order',
+            'Magento\Sales\Model\ResourceModel\Order\Grid',
+            'Magento\Sales\Model\ResourceModel\Order\Item',
+            'Magento\Sales\Model\ResourceModel\Order\Payment',
+            'Magento\Sales\Model\ResourceModel\Order\Status\History',
+            '\Magento\Eav\Model\ResourceModel\Entity\Store'
         ];
         $mockObjects = [];
 
@@ -55,7 +55,7 @@ class OrdersFixtureTest extends \PHPUnit_Framework_TestCase
             $mockObject = $this->getMock($mockObjectName, ['getTable'], [], '', false);
             $path = explode('\\', $mockObjectName);
             $name = array_pop($path);
-            if (strcasecmp($mockObjectName, 'Magento\Sales\Model\Resource\Order') == 0) {
+            if (strcasecmp($mockObjectName, 'Magento\Sales\Model\ResourceModel\Order') == 0) {
                 $mockObject->expects($this->exactly(2))
                     ->method('getTable')
                     ->willReturn(strtolower($name) . '_table_name');
@@ -80,7 +80,7 @@ class OrdersFixtureTest extends \PHPUnit_Framework_TestCase
             ->method('getTableName')
             ->willReturn('table_name');
 
-        $resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $resourceMock->expects($this->exactly(15))
             ->method('getConnection')
             ->willReturn($connectionInterfaceMock);
@@ -132,9 +132,9 @@ class OrdersFixtureTest extends \PHPUnit_Framework_TestCase
             ->method('getStores')
             ->willReturn([$storeMock]);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $abstractDbMock = $this->getMockForAbstractClass(
-            '\Magento\Framework\Model\Resource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$contextMock],
             '',
             true,
@@ -173,7 +173,7 @@ class OrdersFixtureTest extends \PHPUnit_Framework_TestCase
 
         $selectMock = $this->getMock('\Magento\Framework\DB\Select', [], [], '', false);
 
-        $collectionMock = $this->getMock('\Magento\Catalog\Model\Resource\Product\Collection', [], [], '', false);
+        $collectionMock = $this->getMock('\Magento\Catalog\Model\ResourceModel\Product\Collection', [], [], '', false);
         $collectionMock->expects($this->once())
             ->method('getSelect')
             ->willReturn($selectMock);
@@ -186,8 +186,8 @@ class OrdersFixtureTest extends \PHPUnit_Framework_TestCase
             ['Magento\Store\Model\StoreManager', [], $storeManagerMock],
             ['Magento\Catalog\Model\Category', $categoryMock],
             ['Magento\Catalog\Model\Product', $productMock],
-            ['Magento\Framework\App\Resource', $resourceMock],
-            ['Magento\Catalog\Model\Resource\Product\Collection', [], $collectionMock]
+            ['Magento\Framework\App\ResourceConnection', $resourceMock],
+            ['Magento\Catalog\Model\ResourceModel\Product\Collection', [], $collectionMock]
         );
 
         $objectManagerMock = $this->getMock('Magento\Framework\ObjectManager\ObjectManager', [], [], '', false);
@@ -224,7 +224,7 @@ class OrdersFixtureTest extends \PHPUnit_Framework_TestCase
         $connectionMock->expects($this->never())
             ->method('query');
 
-        $resourceMock = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $resourceMock = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $resourceMock->expects($this->never())
             ->method('getConnection')
             ->with($this->equalTo('write'))
@@ -233,7 +233,7 @@ class OrdersFixtureTest extends \PHPUnit_Framework_TestCase
         $objectManagerMock = $this->getMock('Magento\Framework\ObjectManager\ObjectManager', [], [], '', false);
         $objectManagerMock->expects($this->never())
             ->method('get')
-            ->with($this->equalTo('Magento\Framework\App\Resource'))
+            ->with($this->equalTo('Magento\Framework\App\ResourceConnection'))
             ->willReturn($resourceMock);
 
         $this->fixtureModelMock
diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/SimpleProductsFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/SimpleProductsFixtureTest.php
index 163212dee20ef401a88c6b34b8b3fe70037019f0..9b144188510ff33a48fa5f7687e72992195eb401 100644
--- a/setup/src/Magento/Setup/Test/Unit/Fixtures/SimpleProductsFixtureTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/SimpleProductsFixtureTest.php
@@ -49,9 +49,9 @@ class SimpleProductsFixtureTest extends \PHPUnit_Framework_TestCase
 
         $importMock = $this->getMock('\Magento\ImportExport\Model\Import', [], [], '', false);
 
-        $contextMock = $this->getMock('\Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $contextMock = $this->getMock('\Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $abstractDbMock = $this->getMockForAbstractClass(
-            '\Magento\Framework\Model\Resource\Db\AbstractDb',
+            '\Magento\Framework\Model\ResourceModel\Db\AbstractDb',
             [$contextMock],
             '',
             true,
diff --git a/setup/src/Magento/Setup/Test/Unit/Fixtures/TaxRatesFixtureTest.php b/setup/src/Magento/Setup/Test/Unit/Fixtures/TaxRatesFixtureTest.php
index 1b7547afbd5e8da7897b0cef455b1581dfcccb23..426f071a8a7a25a3403ccaf492eda6c9a0e39e49 100644
--- a/setup/src/Magento/Setup/Test/Unit/Fixtures/TaxRatesFixtureTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Fixtures/TaxRatesFixtureTest.php
@@ -32,7 +32,8 @@ class TaxRatesFixtureTest extends \PHPUnit_Framework_TestCase
     {
         $rateMock = $this->getMock('Magento\Tax\Model\Calculation\Rate', ['setId', 'delete'], [], '', false);
 
-        $collectionMock = $this->getMock('Magento\Tax\Model\Resource\Calculation\Rate\Collection', [], [], '', false);
+        $collectionMock =
+            $this->getMock('Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection', [], [], '', false);
         $collectionMock->expects($this->once())
             ->method('getAllIds')
             ->willReturn([1]);
@@ -47,7 +48,7 @@ class TaxRatesFixtureTest extends \PHPUnit_Framework_TestCase
 
         $valueMap = [
             ['Magento\Tax\Model\Calculation\Rate', $rateMock],
-            ['Magento\Tax\Model\Resource\Calculation\Rate\Collection', $collectionMock]
+            ['Magento\Tax\Model\ResourceModel\Calculation\Rate\Collection', $collectionMock]
         ];
 
         $objectManagerMock = $this->getMock('Magento\Framework\ObjectManager\ObjectManager', [], [], '', false);
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/CronScriptReadinessCheckTest.php b/setup/src/Magento/Setup/Test/Unit/Model/CronScriptReadinessCheckTest.php
index de55f60784569a655e89cb5d21b2c2d901068ee2..7a881c2b7b47c08c1bbcdb44766edefa6c9e9db0 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/CronScriptReadinessCheckTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Model/CronScriptReadinessCheckTest.php
@@ -34,7 +34,7 @@ class CronScriptReadinessCheckTest extends \PHPUnit_Framework_TestCase
     {
         $this->read->expects($this->once())
             ->method('readFile')
-            ->willThrowException(new FileSystemException(new Phrase('')));
+            ->willThrowException(new FileSystemException(new Phrase('message')));
         $expected = [
             'success' => false,
             'error' => 'Cron job has not been configured yet' . CronScriptReadinessCheck::OTHER_CHECKS_WILL_FAIL_MSG
@@ -111,7 +111,7 @@ class CronScriptReadinessCheckTest extends \PHPUnit_Framework_TestCase
     {
         $this->read->expects($this->once())
             ->method('readFile')
-            ->willThrowException(new FileSystemException(new Phrase('')));
+            ->willThrowException(new FileSystemException(new Phrase('message')));
         $expected = ['success' => false, 'error' => 'Cron job has not been configured yet'];
         $this->assertEquals($expected, $this->cronScriptReadinessCheck->checkUpdater());
     }
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php b/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php
index 30d4ba681439f2a60eadcd44f3e6fa1f5872c32b..c2927df015d0b61317ade92a94160cecda9f0cd7 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Model/InstallerFactoryTest.php
@@ -58,12 +58,12 @@ class InstallerFactoryTest extends \PHPUnit_Framework_TestCase
                 $this->getMock('Magento\Setup\Model\ObjectManagerProvider', [], [], '', false),
             ],
             [
-                'Magento\Framework\Model\Resource\Db\TransactionManager',
-                $this->getMock('Magento\Framework\Model\Resource\Db\TransactionManager', [], [], '', false),
+                'Magento\Framework\Model\ResourceModel\Db\TransactionManager',
+                $this->getMock('Magento\Framework\Model\ResourceModel\Db\TransactionManager', [], [], '', false),
             ],
             [
-                'Magento\Framework\Model\Resource\Db\ObjectRelationProcessor',
-                $this->getMock('Magento\Framework\Model\Resource\Db\ObjectRelationProcessor', [], [], '', false),
+                'Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor',
+                $this->getMock('Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor', [], [], '', false),
             ],
             [
                 'Magento\Setup\Model\ConfigModel',
@@ -85,6 +85,10 @@ class InstallerFactoryTest extends \PHPUnit_Framework_TestCase
                 'Magento\Setup\Module\DataSetupFactory',
                 $this->getMock('Magento\Setup\Module\DataSetupFactory', [], [], '', false),
             ],
+            [
+                'Magento\Framework\Setup\SampleData\State',
+                $this->getMock('Magento\Framework\Setup\SampleData\State', [], [], '', false),
+            ],
         ];
         $serviceLocatorMock = $this->getMockForAbstractClass('Zend\ServiceManager\ServiceLocatorInterface', ['get']);
         $serviceLocatorMock
@@ -97,7 +101,7 @@ class InstallerFactoryTest extends \PHPUnit_Framework_TestCase
         $resourceFactoryMock
             ->expects($this->any())
             ->method('create')
-            ->will($this->returnValue($this->getMock('Magento\Framework\App\Resource', [], [], '', false)));
+            ->will($this->returnValue($this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false)));
         $installerFactory = new InstallerFactory($serviceLocatorMock, $resourceFactoryMock);
         $installer = $installerFactory->create($log);
         $this->assertInstanceOf('Magento\Setup\Model\Installer', $installer);
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php b/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php
index 2b752d96dc2854cabef00e7f34f14db6b97643d7..098e210824389a8848265a9d2b072d53fa24fd2d 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Model/InstallerTest.php
@@ -121,6 +121,11 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
      */
     private $dataSetupFactory;
 
+    /**
+     * @var \Magento\Framework\Setup\SampleData\State|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $sampleDataState;
+
     /**
      * @var \Magento\Framework\Component\ComponentRegistrar|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -139,7 +144,7 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
     ];
 
     /**
-     * @var \Magento\Framework\Model\Resource\Db\Context|\PHPUnit_Framework_MockObject_MockObject
+     * @var \Magento\Framework\Model\ResourceModel\Db\Context|\PHPUnit_Framework_MockObject_MockObject
      */
     private $contextMock;
 
@@ -166,12 +171,13 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
         $this->maintenanceMode = $this->getMock('Magento\Framework\App\MaintenanceMode', [], [], '', false);
         $this->filesystem = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
         $this->objectManager = $this->getMockForAbstractClass('Magento\Framework\ObjectManagerInterface');
-        $this->contextMock = $this->getMock('Magento\Framework\Model\Resource\Db\Context', [], [], '', false);
+        $this->contextMock = $this->getMock('Magento\Framework\Model\ResourceModel\Db\Context', [], [], '', false);
         $this->configModel = $this->getMock('Magento\Setup\Model\ConfigModel', [], [], '', false);
         $this->cleanupFiles = $this->getMock('Magento\Framework\App\State\CleanupFiles', [], [], '', false);
         $this->dbValidator = $this->getMock('Magento\Setup\Validator\DbValidator', [], [], '', false);
         $this->setupFactory = $this->getMock('Magento\Setup\Module\SetupFactory', [], [], '', false);
         $this->dataSetupFactory = $this->getMock('Magento\Setup\Module\DataSetupFactory', [], [], '', false);
+        $this->sampleDataState = $this->getMock('Magento\Framework\Setup\SampleData\State', [], [], '', false);
         $this->componentRegistrar = $this->getMock('Magento\Framework\Component\ComponentRegistrar', [], [], '', false);
         $this->object = $this->createObject();
     }
@@ -213,6 +219,7 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
             $this->dbValidator,
             $this->setupFactory,
             $this->dataSetupFactory,
+            $this->sampleDataState,
             $this->componentRegistrar
         );
     }
@@ -237,13 +244,14 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
         $table->expects($this->any())->method('setComment')->willReturn($table);
         $table->expects($this->any())->method('addIndex')->willReturn($table);
         $connection->expects($this->any())->method('newTable')->willReturn($table);
-        $resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->contextMock->expects($this->any())->method('getResources')->willReturn($resource);
         $resource->expects($this->any())->method('getConnection')->will($this->returnValue($connection));
         $dataSetup = $this->getMock('Magento\Setup\Module\DataSetup', [], [], '', false);
         $cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
-        $cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['foo', 'bar']);
+        $cacheManager->expects($this->any())->method('getAvailableTypes')->willReturn(['foo', 'bar']);
         $cacheManager->expects($this->once())->method('setEnabled')->willReturn(['foo', 'bar']);
+        $cacheManager->expects($this->any())->method('clean');
         $appState = (new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this))->getObject(
             'Magento\Framework\App\State'
         );
@@ -259,10 +267,12 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
             ->method('get')
             ->will($this->returnValueMap([
                 ['Magento\Framework\App\State', $appState],
+                ['Magento\Framework\App\Cache\Manager', $cacheManager]
             ]));
         $this->adminFactory->expects($this->once())->method('create')->willReturn(
             $this->getMock('Magento\Setup\Model\AdminAccount', [], [], '', false)
         );
+        $this->sampleDataState->expects($this->once())->method('hasError')->willReturn(true);
 
         $this->logger->expects($this->at(0))->method('log')->with('Starting Magento installation:');
         $this->logger->expects($this->at(1))->method('log')->with('File permissions check...');
@@ -277,16 +287,18 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
         $this->logger->expects($this->at(14))->method('log')->with("Module 'Foo_One':");
         $this->logger->expects($this->at(16))->method('log')->with("Module 'Bar_Two':");
         $this->logger->expects($this->at(19))->method('log')->with('Installing user configuration...');
-        $this->logger->expects($this->at(21))->method('log')->with('Installing data...');
-        $this->logger->expects($this->at(22))->method('log')->with('Data install/update:');
-        $this->logger->expects($this->at(23))->method('log')->with("Module 'Foo_One':");
-        $this->logger->expects($this->at(25))->method('log')->with("Module 'Bar_Two':");
-        $this->logger->expects($this->at(28))->method('log')->with('Installing admin user...');
-        $this->logger->expects($this->at(30))->method('log')->with('Enabling caches:');
-        $this->logger->expects($this->at(31))->method('log')->with('Current status:');
-        $this->logger->expects($this->at(34))->method('log')->with('Disabling Maintenance Mode:');
-        $this->logger->expects($this->at(36))->method('log')->with('Post installation file permissions check...');
-        $this->logger->expects($this->at(38))->method('logSuccess')->with('Magento installation complete.');
+        $this->logger->expects($this->at(21))->method('log')->with('Enabling caches:');
+        $this->logger->expects($this->at(25))->method('log')->with('Installing data...');
+        $this->logger->expects($this->at(26))->method('log')->with('Data install/update:');
+        $this->logger->expects($this->at(27))->method('log')->with("Module 'Foo_One':");
+        $this->logger->expects($this->at(29))->method('log')->with("Module 'Bar_Two':");
+        $this->logger->expects($this->at(32))->method('log')->with('Installing admin user...');
+        $this->logger->expects($this->at(34))->method('log')->with('Caches clearing:');
+        $this->logger->expects($this->at(37))->method('log')->with('Disabling Maintenance Mode:');
+        $this->logger->expects($this->at(39))->method('log')->with('Post installation file permissions check...');
+        $this->logger->expects($this->at(41))->method('logSuccess')->with('Magento installation complete.');
+        $this->logger->expects($this->at(43))->method('log')
+            ->with('Sample Data is installed with errors. See log file for details');
         $this->object->install($request);
     }
 
@@ -326,11 +338,6 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
 
     public function testUpdateModulesSequence()
     {
-        $allModules = [
-            'Foo_One' => [],
-            'Bar_Two' => [],
-            'New_Module' => [],
-        ];
         $this->cleanupFiles->expects($this->once())->method('clearCodeGeneratedClasses')->will(
             $this->returnValue(
                 [
@@ -338,39 +345,25 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
                 ]
             )
         );
+        $installer = $this->prepareForUpdateModulesTests();
 
-        $cache = $this->getMock('Magento\Framework\App\Cache', [], [], '', false);
-        $cache->expects($this->once())->method('clean');
-        $this->objectManager->expects($this->once())
-            ->method('create')
-            ->will($this->returnValueMap([
-                ['Magento\Framework\App\Cache', [], $cache],
-            ]));
-
-        $this->moduleLoader->expects($this->once())->method('load')->willReturn($allModules);
-
-        $expectedModules = [
-            ConfigFilePool::APP_CONFIG => [
-                'modules' => [
-                    'Bar_Two' => 0,
-                    'Foo_One' => 1,
-                    'New_Module' => 1
-                ]
-            ]
-        ];
-
-        $this->config->expects($this->atLeastOnce())->method('isAvailable')->willReturn(true);
-
-        $newObject = $this->createObject(false, false);
-        $this->configReader->expects($this->once())->method('load')
-            ->willReturn(['modules' => ['Bar_Two' => 0, 'Foo_One' => 1, 'Old_Module' => 0] ]);
-        $this->configWriter->expects($this->once())->method('saveConfig')->with($expectedModules);
         $this->logger->expects($this->at(0))->method('log')->with('Cache cleared successfully');
         $this->logger->expects($this->at(1))->method('log')->with('File system cleanup:');
         $this->logger->expects($this->at(2))->method('log')
             ->with('The directory \'/generation\' doesn\'t exist - skipping cleanup');
         $this->logger->expects($this->at(3))->method('log')->with('Updating modules:');
-        $newObject->updateModulesSequence();
+        $installer->updateModulesSequence(false);
+    }
+
+    public function testUpdateModulesSequenceKeepGenerated()
+    {
+        $this->cleanupFiles->expects($this->never())->method('clearCodeGeneratedClasses');
+
+        $installer = $this->prepareForUpdateModulesTests();
+
+        $this->logger->expects($this->at(0))->method('log')->with('Cache cleared successfully');
+        $this->logger->expects($this->at(1))->method('log')->with('Updating modules:');
+        $installer->updateModulesSequence(true);
     }
 
     public function testUninstall()
@@ -400,13 +393,13 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
             ->expects($this->at(1))
             ->method('log')
             ->with('No database connection defined - skipping database cleanup');
-        $cache = $this->getMock('Magento\Framework\App\Cache', [], [], '', false);
-        $cache->expects($this->once())->method('clean');
-        $this->objectManager->expects($this->once())
-            ->method('create')
-            ->will($this->returnValueMap([
-                ['Magento\Framework\App\Cache', [], $cache],
-            ]));
+        $cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
+        $cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['foo', 'bar']);
+        $cacheManager->expects($this->once())->method('clean');
+        $this->objectManager->expects($this->any())
+            ->method('get')
+            ->with('Magento\Framework\App\Cache\Manager')
+            ->willReturn($cacheManager);
         $this->logger->expects($this->at(2))->method('log')->with('Cache cleared successfully');
         $this->logger->expects($this->at(3))->method('log')->with('File system cleanup:');
         $this->logger
@@ -451,4 +444,48 @@ class InstallerTest extends \PHPUnit_Framework_TestCase
         $this->logger->expects($this->once())->method('log')->with('Cleaning up database `magento`');
         $this->object->cleanupDb();
     }
+
+    /**
+     * Prepare mocks for update modules tests and returns the installer to use
+     *
+     * @return Installer
+     */
+    private function prepareForUpdateModulesTests()
+    {
+
+        $allModules = [
+            'Foo_One' => [],
+            'Bar_Two' => [],
+            'New_Module' => [],
+        ];
+
+        $cacheManager = $this->getMock('Magento\Framework\App\Cache\Manager', [], [], '', false);
+        $cacheManager->expects($this->once())->method('getAvailableTypes')->willReturn(['foo', 'bar']);
+        $cacheManager->expects($this->once())->method('clean');
+        $this->objectManager->expects($this->any())
+            ->method('get')
+            ->will($this->returnValueMap([
+                ['Magento\Framework\App\Cache\Manager', $cacheManager]
+            ]));
+        $this->moduleLoader->expects($this->once())->method('load')->willReturn($allModules);
+
+        $expectedModules = [
+            ConfigFilePool::APP_CONFIG => [
+                'modules' => [
+                    'Bar_Two' => 0,
+                    'Foo_One' => 1,
+                    'New_Module' => 1
+                ]
+            ]
+        ];
+
+        $this->config->expects($this->atLeastOnce())->method('isAvailable')->willReturn(true);
+
+        $newObject = $this->createObject(false, false);
+        $this->configReader->expects($this->once())->method('load')
+            ->willReturn(['modules' => ['Bar_Two' => 0, 'Foo_One' => 1, 'Old_Module' => 0] ]);
+        $this->configWriter->expects($this->once())->method('saveConfig')->with($expectedModules);
+
+        return $newObject;
+    }
 }
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/ModuleUninstallerTest.php b/setup/src/Magento/Setup/Test/Unit/Model/ModuleUninstallerTest.php
index 89f00925458cf132160cffcd850cc9bcf88127a9..46fbdacb86406bc69d3ba59119098e38d4fb98b6 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/ModuleUninstallerTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Model/ModuleUninstallerTest.php
@@ -91,14 +91,14 @@ class ModuleUninstallerTest extends \PHPUnit_Framework_TestCase
             ->method('collectUninstall')
             ->willReturn(['moduleA' => $uninstall, 'moduleB' => $uninstall]);
 
-        $resource = $this->getMock('Magento\Framework\Module\Resource', [], [], '', false);
+        $resource = $this->getMock('Magento\Framework\Module\ModuleResource', [], [], '', false);
         $resource->expects($this->atLeastOnce())->method('getDbVersion')->willReturn('1.0');
 
         $this->output->expects($this->atLeastOnce())->method('writeln');
 
         $this->objectManager->expects($this->once())
             ->method('get')
-            ->with('Magento\Framework\Module\Resource')
+            ->with('Magento\Framework\Module\ModuleResource')
             ->willReturn($resource);
         $this->uninstaller->uninstallData($this->output, ['moduleA', 'moduleB']);
     }
diff --git a/setup/src/Magento/Setup/Test/Unit/Model/SystemPackageTest.php b/setup/src/Magento/Setup/Test/Unit/Model/SystemPackageTest.php
index 78d59aefd18db5bd3bfd143e1993d0eec5cddae9..e5f521061a5466676fa4f0ca37c6ff67259ae307 100644
--- a/setup/src/Magento/Setup/Test/Unit/Model/SystemPackageTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Model/SystemPackageTest.php
@@ -7,7 +7,6 @@
 namespace Magento\Setup\Test\Unit\Model;
 
 use Magento\Setup\Model\SystemPackage;
-use Magento\Composer\InfoCommand;
 
 class SystemPackageTest extends \PHPUnit_Framework_TestCase
 {
@@ -85,10 +84,17 @@ class SystemPackageTest extends \PHPUnit_Framework_TestCase
 
     public function testGetPackageVersions()
     {
-        $package = $this->getMock('\Composer\Package\Package', [], [], '', false);
-        $package->expects($this->once())->method('getName')->willReturn('magento/product-community-edition');
-        $this->composerInformation->expects($this->once())->method('isSystemPackage')->willReturn(true);
-        $this->repository->expects($this->once())->method('getPackages')->willReturn([$package]);
+        $communityPackage = $this->getMock('\Composer\Package\Package', [], [], '', false);
+        $communityPackage->expects($this->once())->method('getName')->willReturn('magento/product-community-edition');
+        $enterprisePackage = $this->getMock('\Composer\Package\Package', [], [], '', false);
+        $enterprisePackage->expects($this->once())->method('getName')->willReturn('magento/product-enterprise-edition');
+        $this->composerInformation->expects($this->any())->method('isSystemPackage')->willReturn(true);
+        $this->composerInformation->expects($this->once())->method('isPackageInComposerJson')->willReturn(true);
+        $this->repository
+            ->expects($this->once())
+            ->method('getPackages')
+            ->willReturn([$communityPackage, $enterprisePackage]);
+
         $this->locker->expects($this->once())->method('getLockedRepository')->willReturn($this->repository);
 
         $this->composer->expects($this->once())->method('getLocker')->willReturn($this->locker);
@@ -109,21 +115,33 @@ class SystemPackageTest extends \PHPUnit_Framework_TestCase
         $this->systemPackage = new SystemPackage($this->composerAppFactory, $this->composerInformation);
 
         $expected = [
-            'package' => 'magento/product-community-edition',
-            'versions' => [
-                ['id' => '1.2.0', 'name' => 'Version 1.2.0 (latest)'],
-                ['id' => '1.1.0', 'name' => 'Version 1.1.0'],
-                ['id' => '1.0.0', 'name' => 'Version 1.0.0 (current)']
+            [
+                'package' => 'magento/product-community-edition',
+                'versions' =>
+                    [
+                        ['id' => '1.2.0', 'name' => 'Version 1.2.0 CE (latest)'],
+                        ['id' => '1.1.0', 'name' => 'Version 1.1.0 CE'],
+                        ['id' => '1.0.0', 'name' => 'Version 1.0.0 CE (current)']
+                    ]
+            ],
+            [
+                'package' => 'magento/product-enterprise-edition',
+                'versions' =>
+                    [
+                        ['id' => '1.2.0', 'name' => 'Version 1.2.0 EE (latest)'],
+                        ['id' => '1.1.0', 'name' => 'Version 1.1.0 EE'],
+                        ['id' => '1.0.0', 'name' => 'Version 1.0.0 EE (current)']
+                    ]
             ]
         ];
 
-        $this->infoCommand->expects($this->once())
+        $this->infoCommand->expects($this->at(0))
             ->method('run')
             ->with('magento/product-community-edition')
             ->willReturn(
                 [
                     'name' => 'magento/product-community-edition',
-                    'descrip.' => 'eCommerce Platform for Growth (Community Edition)',
+                    'description' => 'eCommerce Platform for Growth (Enterprise Edition)',
                     'keywords' => '',
                     'versions' => '1.2.0, 1.1.0, * 1.0.0',
                     'type' => 'metapackage',
@@ -131,15 +149,27 @@ class SystemPackageTest extends \PHPUnit_Framework_TestCase
                     'source' => '[]',
                     'names' => 'magento/product-community-edition',
                     'current_version' => '1.0.0',
-                    'available_versions' => [
-                        1 => '1.2.0',
-                        2 => '1.1.0',
-                        3 => '1.0.0',
-                    ],
-                    'new_versions' => [
-                        '1.2.0',
-                        '1.1.0'
-                    ]
+                    'available_versions' => [1 => '1.2.0', 2 => '1.1.0', 3 => '1.0.0'],
+                    'new_versions' => ['1.2.0', '1.1.0']
+                ]
+            );
+
+        $this->infoCommand->expects($this->at(1))
+            ->method('run')
+            ->with('magento/product-enterprise-edition')
+            ->willReturn(
+                [
+                    'name' => 'magento/product-enterprise-edition',
+                    'description' => 'eCommerce Platform for Growth (Enterprise Edition)',
+                    'keywords' => '',
+                    'versions' => '1.2.0, 1.1.0, * 1.0.0',
+                    'type' => 'metapackage',
+                    'license' => 'OSL-3.0, AFL-3.0',
+                    'source' => '[]',
+                    'names' => 'magento/product-enterprise-edition',
+                    'current_version' => '1.0.0',
+                    'available_versions' => [1 => '1.2.0', 2 => '1.1.0', 3 => '1.0.0'],
+                    'new_versions' => ['1.2.0', '1.1.0']
                 ]
             );
 
@@ -152,12 +182,18 @@ class SystemPackageTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetPackageVersionsFailed()
     {
-        $package = $this->getMock('\Composer\Package\Package', [], [], '', false);
+        $communityPackage = $this->getMock('\Composer\Package\Package', [], [], '', false);
+        $enterprisePackage = $this->getMock('\Composer\Package\Package', [], [], '', false);
 
-        $package->expects($this->once())->method('getName')->willReturn('magento/product-community-edition');
-        $this->composerInformation->expects($this->once())->method('isSystemPackage')->willReturn(true);
+        $communityPackage->expects($this->once())->method('getName')->willReturn('magento/product-community-edition');
+        $enterprisePackage->expects($this->once())->method('getName')->willReturn('magento/product-enterprise-edition');
+        $this->composerInformation->expects($this->any())->method('isSystemPackage')->willReturn(true);
+        $this->composerInformation->expects($this->once())->method('isPackageInComposerJson')->willReturn(true);
 
-        $this->repository->expects($this->once())->method('getPackages')->willReturn([$package]);
+        $this->repository
+            ->expects($this->once())
+            ->method('getPackages')
+            ->willReturn([$communityPackage, $enterprisePackage]);
 
         $this->locker->expects($this->once())->method('getLockedRepository')->willReturn($this->repository);
 
@@ -185,4 +221,68 @@ class SystemPackageTest extends \PHPUnit_Framework_TestCase
 
         $this->systemPackage->getPackageVersions();
     }
+
+    /**
+     * @param string $ceCurrentVersion
+     * @param array $expectedResult
+     *
+     * @dataProvider getAllowedEnterpriseVersionsDataProvider
+     */
+    public function testGetAllowedEnterpriseVersions($ceCurrentVersion, $expectedResult)
+    {
+        $this->composerAppFactory->expects($this->once())
+            ->method('createInfoCommand')
+            ->willReturn($this->infoCommand);
+        $this->systemPackage = new SystemPackage($this->composerAppFactory, $this->composerInformation);
+        $this->infoCommand->expects($this->once())
+            ->method('run')
+            ->with('magento/product-enterprise-edition')
+            ->willReturn(['available_versions' => ['1.0.0', '1.0.1', '1.0.2']]);
+        $require = $this->getMock('\Composer\Package\Link', [], [], '', false);
+        $constraintMock = $this->getMock('\Composer\Package\LinkConstraint\VersionConstraint', [], [], '', false);
+        $constraintMock->expects($this->any())->method('getPrettyString')
+            ->willReturn('1.0.1');
+        $require->expects($this->any())
+            ->method('getConstraint')
+            ->willReturn($constraintMock);
+
+        $this->composerInformation->expects($this->any())
+            ->method('getPackageRequirements')
+            ->willReturn(['magento/product-community-edition' => $require]);
+        $this->assertEquals(
+            $expectedResult,
+            $this->systemPackage->getAllowedEnterpriseVersions($ceCurrentVersion)
+        );
+    }
+
+    /**
+     * @return array
+     */
+    public function getAllowedEnterpriseVersionsDataProvider()
+    {
+        return [
+            ['2.0.0', []],
+            ['1.0.0', [
+                [
+                    'package' => 'magento/product-enterprise-edition',
+                    'versions' => [
+                        [
+                            'id' => '1.0.2',
+                            'name' => 'Version 1.0.2 EE (latest)'
+                        ],
+                        [
+                            'id' => '1.0.1',
+                            'name' => 'Version 1.0.1 EE'
+                        ],
+                        [
+
+                            'id' => '1.0.0',
+                            'name' => 'Version 1.0.0 EE'
+                        ]
+                    ]
+                ]
+            ]
+            ]
+        ];
+    }
 }
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/DataSetupFactoryTest.php b/setup/src/Magento/Setup/Test/Unit/Module/DataSetupFactoryTest.php
index cdb1680dda96d4de364ace803d70a94192adad81..3ce150615c5534f00a86ed8a92c66f209a9c9411 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/DataSetupFactoryTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/DataSetupFactoryTest.php
@@ -11,7 +11,7 @@ class DataSetupFactoryTest extends \PHPUnit_Framework_TestCase
 {
     public function testCreate()
     {
-        $resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $filesystem = $this->getMock('Magento\Framework\Filesystem', [], [], '', false);
         $context = $this->getMock('Magento\Framework\Module\Setup\Context', [], [], '', false);
         $context->expects($this->once())->method('getEventManager');
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/CsvTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/CsvTest.php
index 5edc74cb629394097225f22bc7d8e42211d7fdd1..095d51ef3efa2b76fb41e9a30f9abdb80ede7210 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/CsvTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Dictionary/Writer/CsvTest.php
@@ -67,16 +67,16 @@ class CsvTest extends \PHPUnit_Framework_TestCase
         $this->_phraseFirstMock->expects(
             $this->once()
         )->method(
-            'getPhrase'
+            'getCompiledPhrase'
         )->will(
-            $this->returnValue("phrase1_quote\\'")
+            $this->returnValue("phrase1_quote'")
         );
         $this->_phraseFirstMock->expects(
             $this->once()
         )->method(
-            'getTranslation'
+            'getCompiledTranslation'
         )->will(
-            $this->returnValue("translation1_quote\\'")
+            $this->returnValue("translation1_quote'")
         );
         $this->_phraseFirstMock->expects(
             $this->once()
@@ -96,16 +96,16 @@ class CsvTest extends \PHPUnit_Framework_TestCase
         $this->_phraseSecondMock->expects(
             $this->once()
         )->method(
-            'getPhrase'
+            'getCompiledPhrase'
         )->will(
-            $this->returnValue("phrase2_quote\\'")
+            $this->returnValue("phrase2_quote'")
         );
         $this->_phraseSecondMock->expects(
             $this->once()
         )->method(
-            'getTranslation'
+            'getCompiledTranslation'
         )->will(
-            $this->returnValue("translation2_quote\\'")
+            $this->returnValue("translation2_quote'")
         );
         $this->_phraseSecondMock->expects(
             $this->once()
@@ -142,38 +142,26 @@ EXPECTED;
 
     public function testWriteWithoutContext()
     {
-        $this->_phraseFirstMock->expects($this->once())->method('getPhrase')->will($this->returnValue('phrase1'));
-        $this->_phraseFirstMock->expects(
-            $this->once()
-        )->method(
-            'getTranslation'
-        )->will(
-            $this->returnValue('translation1')
-        );
+        $this->_phraseFirstMock->expects($this->once())
+            ->method('getCompiledPhrase')
+            ->willReturn('phrase1');
+        $this->_phraseFirstMock->expects($this->once())
+            ->method('getCompiledTranslation')
+            ->willReturn('translation1');
         $this->_phraseFirstMock->expects($this->once())->method('getContextType')->will($this->returnValue(''));
 
-        $this->_phraseSecondMock->expects($this->once())->method('getPhrase')->will($this->returnValue('phrase2'));
-        $this->_phraseSecondMock->expects(
-            $this->once()
-        )->method(
-            'getTranslation'
-        )->will(
-            $this->returnValue('translation2')
-        );
-        $this->_phraseSecondMock->expects(
-            $this->once()
-        )->method(
-            'getContextType'
-        )->will(
-            $this->returnValue('context_type2')
-        );
-        $this->_phraseSecondMock->expects(
-            $this->once()
-        )->method(
-            'getContextValueAsString'
-        )->will(
-            $this->returnValue('')
-        );
+        $this->_phraseSecondMock->expects($this->once())
+            ->method('getCompiledPhrase')
+            ->willReturn('phrase2');
+        $this->_phraseSecondMock->expects($this->once())
+            ->method('getCompiledTranslation')
+            ->willReturn('translation2');
+        $this->_phraseSecondMock->expects($this->once())
+            ->method('getContextType')
+            ->willReturn('context_type2');
+        $this->_phraseSecondMock->expects($this->once())
+            ->method('getContextValueAsString')
+            ->willReturn('');
 
         $objectManagerHelper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
         /** @var \Magento\Setup\Module\I18n\Dictionary\Writer\Csv $writer */
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/ParserTest.php b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/ParserTest.php
index 5b03113a86248211a8c24a2910b57d142305a3b3..b6c2fdb0c4a2cf3138e6528633720fff3a60d5f5 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/ParserTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/I18n/Parser/ParserTest.php
@@ -42,10 +42,11 @@ class ParserTest extends \PHPUnit_Framework_TestCase
      * @param array $jsFiles
      * @param array $phpMap
      * @param array $jsMap
+     * @paran array $phraseFactoryMap
      * @param array $expectedResult
      * @dataProvider addPhraseDataProvider
      */
-    public function testAddPhrase($options, $phpFiles, $jsFiles, $phpMap, $jsMap, $expectedResult)
+    public function testAddPhrase($options, $phpFiles, $jsFiles, $phpMap, $jsMap, $phraseFactoryMap, $expectedResult)
     {
         // 1. Create mocks
         $phpAdapter = new AdapterStub;
@@ -59,16 +60,10 @@ class ParserTest extends \PHPUnit_Framework_TestCase
         $phpAdapter->setValueMap($phpMap);
         $jsAdapter->setValueMap($jsMap);
 
-        $this->factory->expects($this->any())->method('createPhrase')->with()->will($this->returnValueMap([
-            [['phrase' => 'php phrase111', 'translation' => 'php phrase111', 'quote' => "'"], 'php phrase111'],
-            [['phrase' => 'php phrase112', 'translation' => 'php phrase112', 'quote' => '"'], 'php phrase112'],
-            [['phrase' => 'php phrase121', 'translation' => 'php phrase121', 'quote' => "'"], 'php phrase121'],
-            [['phrase' => 'php phrase122', 'translation' => 'php phrase122', 'quote' => '"'], 'php phrase122'],
-            [['phrase' => 'js phrase111', 'translation' => 'js phrase111', 'quote' => "'"], 'js phrase111'],
-            [['phrase' => 'js phrase112', 'translation' => 'js phrase112', 'quote' => '"'], 'js phrase112'],
-            [['phrase' => 'js phrase121', 'translation' => 'js phrase121', 'quote' => "'"], 'js phrase121'],
-            [['phrase' => 'js phrase122', 'translation' => 'js phrase122', 'quote' => '"'], 'js phrase122'],
-        ]));
+        $this->factory->expects($this->any())
+            ->method('createPhrase')
+            ->with()
+            ->willReturnMap($phraseFactoryMap);
 
         //4. Set expectations
         $this->filesCollector->expects($this->any())
@@ -87,15 +82,33 @@ class ParserTest extends \PHPUnit_Framework_TestCase
      */
     public function addPhraseDataProvider()
     {
+        $phraseMock1 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseMock2 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseMock3 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseMock4 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseMock5 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseMock6 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseMock7 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
+        $phraseMock8 = $this->getMock('Magento\Setup\Module\I18n\Dictionary\Phrase', [], [], '', false);
+
+        $phraseMock1->expects($this->any())->method('getCompiledPhrase')->willReturn('php phrase111');
+        $phraseMock2->expects($this->any())->method('getCompiledPhrase')->willReturn('php phrase112');
+        $phraseMock3->expects($this->any())->method('getCompiledPhrase')->willReturn('php phrase121');
+        $phraseMock4->expects($this->any())->method('getCompiledPhrase')->willReturn('php phrase122');
+        $phraseMock5->expects($this->any())->method('getCompiledPhrase')->willReturn('js phrase111');
+        $phraseMock6->expects($this->any())->method('getCompiledPhrase')->willReturn('js phrase112');
+        $phraseMock7->expects($this->any())->method('getCompiledPhrase')->willReturn('js phrase121');
+        $phraseMock8->expects($this->any())->method('getCompiledPhrase')->willReturn('js phrase122');
+
         return [
             [
-                [
+                'options' => [
                     ['type' => 'php', 'paths' => ['php/path/1', 'php/path/2']],
                     ['type' => 'js', 'paths' => ['js/path/1', 'js/path/2']],
                 ],
-                ['php/path1/file11', 'php/path1/file12', 'php/path2/file21'],
-                ['js/path1/file11', 'js/path1/file12', 'js/path2/file21'],
-                [
+                'phpFiles' => ['php/path1/file11', 'php/path1/file12', 'php/path2/file21'],
+                'jsFiles' => ['js/path1/file11', 'js/path1/file12', 'js/path2/file21'],
+                'phpMap' => [
                     'php/path1/file11' => [
                         [
                             'phrase' => 'php phrase111',
@@ -116,7 +129,7 @@ class ParserTest extends \PHPUnit_Framework_TestCase
                     ],
                     'php/path2/file21' => []
                 ],
-                [
+                'jsMap' => [
                     'js/path1/file11' => [
                         [
                             'phrase' => 'js phrase111',
@@ -137,16 +150,26 @@ class ParserTest extends \PHPUnit_Framework_TestCase
                     ],
                     'js/path2/file21' => []
                 ],
-                [
-                    'php phrase111' => 'php phrase111',
-                    'php phrase112' => 'php phrase112',
-                    'php phrase121' => 'php phrase121',
-                    'php phrase122' => 'php phrase122',
-                    'js phrase111' => 'js phrase111',
-                    'js phrase112' => 'js phrase112',
-                    'js phrase121' => 'js phrase121',
-                    'js phrase122' => 'js phrase122',
-                ]
+                'phraseFactoryMap' => [
+                    [['phrase' => 'php phrase111', 'translation' => 'php phrase111', 'quote' => "'"], $phraseMock1],
+                    [['phrase' => 'php phrase112', 'translation' => 'php phrase112', 'quote' => '"'], $phraseMock2],
+                    [['phrase' => 'php phrase121', 'translation' => 'php phrase121', 'quote' => "'"], $phraseMock3],
+                    [['phrase' => 'php phrase122', 'translation' => 'php phrase122', 'quote' => '"'], $phraseMock4],
+                    [['phrase' => 'js phrase111', 'translation' => 'js phrase111', 'quote' => "'"], $phraseMock5],
+                    [['phrase' => 'js phrase112', 'translation' => 'js phrase112', 'quote' => '"'], $phraseMock6],
+                    [['phrase' => 'js phrase121', 'translation' => 'js phrase121', 'quote' => "'"], $phraseMock7],
+                    [['phrase' => 'js phrase122', 'translation' => 'js phrase122', 'quote' => '"'], $phraseMock8],
+                ],
+                'expectedResult' => [
+                    'php phrase111' => $phraseMock1,
+                    'php phrase112' => $phraseMock2,
+                    'php phrase121' => $phraseMock3,
+                    'php phrase122' => $phraseMock4,
+                    'js phrase111' => $phraseMock5,
+                    'js phrase112' => $phraseMock6,
+                    'js phrase121' => $phraseMock7,
+                    'js phrase122' => $phraseMock8,
+                ],
             ]
         ];
     }
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/ResourceFactoryTest.php b/setup/src/Magento/Setup/Test/Unit/Module/ResourceFactoryTest.php
index 6d196068994956fb8587cfc7baac329ed172d116..9e9c437cf22fc22ae515719c8b09cf90ab12db5e 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/ResourceFactoryTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/ResourceFactoryTest.php
@@ -33,6 +33,6 @@ class ResourceFactoryTest extends \PHPUnit_Framework_TestCase
         $resource = $this->resourceFactory->create(
             $this->getMock('Magento\Framework\App\DeploymentConfig', [], [], '', false)
         );
-        $this->assertInstanceOf('Magento\Framework\App\Resource', $resource);
+        $this->assertInstanceOf('Magento\Framework\App\ResourceConnection', $resource);
     }
 }
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/Setup/ResourceConfigTest.php b/setup/src/Magento/Setup/Test/Unit/Module/Setup/ResourceConfigTest.php
index 5a02c9c7c2e235cad549b4bdcd12d824bb4fe909..24dc37bc6b620403457a75e987cb7a664f8e341f 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/Setup/ResourceConfigTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/Setup/ResourceConfigTest.php
@@ -14,7 +14,7 @@ class ResourceConfigTest extends \PHPUnit_Framework_TestCase
      */
     public function testGetConnectionName($resourceName)
     {
-        $connectionName = \Magento\Framework\App\Resource::DEFAULT_CONNECTION;
+        $connectionName = \Magento\Framework\App\ResourceConnection::DEFAULT_CONNECTION;
         $resourceConfig = new \Magento\Setup\Module\Setup\ResourceConfig();
         $this->assertEquals($connectionName, $resourceConfig->getConnectionName($resourceName));
     }
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/SetupFactoryTest.php b/setup/src/Magento/Setup/Test/Unit/Module/SetupFactoryTest.php
index 84223f475c199570e29e09290241be23205d59a9..399d34318ff690078020dac3533dfa60fd6b99dc 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/SetupFactoryTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/SetupFactoryTest.php
@@ -14,8 +14,8 @@ class SetupFactoryTest extends \PHPUnit_Framework_TestCase
         $objectManager = $this->getMockForAbstractClass('Magento\Framework\ObjectManagerInterface', [], '', false);
         $objectManager->expects($this->once())
             ->method('get')
-            ->with('Magento\Framework\App\Resource')
-            ->willReturn($this->getMock('Magento\Framework\App\Resource', [], [], '', false));
+            ->with('Magento\Framework\App\ResourceConnection')
+            ->willReturn($this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false));
         $objectManagerProvider = $this->getMock('Magento\Setup\Model\ObjectManagerProvider', [], [], '', false);
         $objectManagerProvider->expects($this->once())->method('get')->willReturn($objectManager);
         $factory = new SetupFactory($objectManagerProvider);
@@ -26,7 +26,7 @@ class SetupFactoryTest extends \PHPUnit_Framework_TestCase
     {
         $objectManager = $this->getMockForAbstractClass('Magento\Framework\ObjectManagerInterface', [], '', false);
         $objectManager->expects($this->never())->method('get');
-        $resource = $this->getMock('Magento\Framework\App\Resource', [], [], '', false);
+        $resource = $this->getMock('Magento\Framework\App\ResourceConnection', [], [], '', false);
         $objectManagerProvider = $this->getMock('Magento\Setup\Model\ObjectManagerProvider', [], [], '', false);
         $objectManagerProvider->expects($this->once())->method('get')->willReturn($objectManager);
         $factory = new SetupFactory($objectManagerProvider);
diff --git a/setup/src/Magento/Setup/Test/Unit/Module/SetupTest.php b/setup/src/Magento/Setup/Test/Unit/Module/SetupTest.php
index 7c926f528f4d071cc9e23e16db12d9011a6654c2..205b145aabe3f784dee19d73d871b2db70f082dd 100644
--- a/setup/src/Magento/Setup/Test/Unit/Module/SetupTest.php
+++ b/setup/src/Magento/Setup/Test/Unit/Module/SetupTest.php
@@ -24,7 +24,7 @@ class SetupTest extends \PHPUnit_Framework_TestCase
 
     protected function setUp()
     {
-        $resourceModel = $this->getMock('\Magento\Framework\App\Resource', [], [], '', false);
+        $resourceModel = $this->getMock('\Magento\Framework\App\ResourceConnection', [], [], '', false);
         $this->connection = $this->getMockForAbstractClass('\Magento\Framework\DB\Adapter\AdapterInterface');
         $resourceModel->expects($this->any())
             ->method('getConnection')
diff --git a/setup/view/magento/setup/customize-your-store.phtml b/setup/view/magento/setup/customize-your-store.phtml
index e392296753f3f2b5875bc7a7551332b342570c6e..c5d7f17049558870fb668caffd4f22ffe190ff44 100644
--- a/setup/view/magento/setup/customize-your-store.phtml
+++ b/setup/view/magento/setup/customize-your-store.phtml
@@ -25,48 +25,34 @@
         <legend class="legend">
             Customize Your Store
         </legend>
+        <?php if ($this->isSampleDataInstalled || $this->isSampleDataErrorInstallation): ?>
         <div class="row form-row">
             <div class="col-m-3">
                 <label class="form-label">Sample Data</label>
             </div>
             <div class="col-m-6">
-                <p>
-                    Select “Use Sample Data" to create a sample store with sample products, customers, and payment settings. Our <a target="_blank" href="http://devdocs.magento.com/guides/v1.0/install-gde/install/sample-data.html">Guide to Using Sample Data</a> can help you get started.
-                </p>
-                <input
-                    id="useSampleData"
-                    class="form-el-checkbox"
-                    type="checkbox"
-                    ng-model="store.useSampleData"
-                    <?php echo $this->isSampledataEnabled ? '' : 'disabled' ?>
-                    >
-                <label class="form-label" for="useSampleData">
-                    Use Sample Data
-                </label>
-
-                <?php if ($this->isSampleDataInstalled || $this->isSampleDataErrorInstallation): ?>
-                    <div class="customize-database-clean">
-                        <p>
-                            <?php if ($this->isSampleDataInstalled): ?>
-                                You have already installed sample data. If you want to re-install it, your database has to be cleaned up
-                            <?php endif; ?>
-                            <?php if ($this->isSampleDataErrorInstallation): ?>
-                                Your sample data is broken. If you want to re-install it, your database has to be cleaned up
-                            <?php endif; ?>
-                        </p>
-                        <input
-                            type="checkbox"
-                            ng-model="store.cleanUpDatabase"
-                            class="form-el-checkbox"
-                            id="cleanUpDatabase"
-                            >
-                        <label class="form-label" for="cleanUpDatabase">
-                            Clean up automatically
-                        </label>
-                    </div>
-                <?php endif; ?>
+                <div class="customize-database-clean">
+                    <p>
+                        <?php if ($this->isSampleDataInstalled): ?>
+                            You have already installed sample data. If you want to re-install it, your database has to be cleaned up
+                        <?php endif; ?>
+                        <?php if ($this->isSampleDataErrorInstallation): ?>
+                            Your sample data is broken. If you want to re-install it, your database has to be cleaned up
+                        <?php endif; ?>
+                    </p>
+                    <input
+                        type="checkbox"
+                        ng-model="store.cleanUpDatabase"
+                        class="form-el-checkbox"
+                        id="cleanUpDatabase"
+                        >
+                    <label class="form-label" for="cleanUpDatabase">
+                        Clean up automatically
+                    </label>
+                </div>
             </div>
         </div>
+        <?php endif; ?>
 
         <div class="row form-row">
             <div class="col-m-3">
@@ -157,7 +143,7 @@
                 >
                 <div class="message-text">
                     <p>
-                        An error has occurred. 
+                        An error has occurred.
                         <a href="#"
                            ng-click="expandError()"
                            ng-class="{'expanded' : store.errorFlag}"
diff --git a/setup/view/magento/setup/home.phtml b/setup/view/magento/setup/home.phtml
index 4dd3b27962e6aa187f2dab585833e5eea1041a9a..42387438af536bcd846f9dd07974d3c1c553e495 100644
--- a/setup/view/magento/setup/home.phtml
+++ b/setup/view/magento/setup/home.phtml
@@ -6,27 +6,27 @@
 ?>
 
 <section class="home-page-inner-wrap ng-scope">
-    <p class="upgrade-home-title">
+    <p class="setup-home-title">
         Welcome to the Magento Setup Tool. Please choose a task below.
     </p>
 
     <div class="row" style="padding-left: 145px;" >
         <div class="col-m-4">
-            <a href="" class="upgrade-home-item upgrade-home-item-component" ui-sref="root.update">
-                <span class="upgrade-home-item-title">Component Manager</span>
-                <span class="upgrade-home-item-description">I want to manage my packages and modules.</span>
+            <a href="" class="setup-home-item setup-home-item-component" ui-sref="root.update">
+                <span class="setup-home-item-title">Component Manager</span>
+                <span class="setup-home-item-description">I want to manage my packages and modules.</span>
             </a>
         </div>
         <div class="col-m-4">
-            <a href="" class="upgrade-home-item upgrade-home-item-upgrade" ui-sref="root.upgrade">
-                <span class="upgrade-home-item-title">System Upgrade</span>
-                <span class="upgrade-home-item-description">I want to upgrade my Magento Admin version.</span>
+            <a href="" class="setup-home-item setup-home-item-upgrade" ui-sref="root.upgrade">
+                <span class="setup-home-item-title">System Upgrade</span>
+                <span class="setup-home-item-description">I want to upgrade my Magento Admin version.</span>
             </a>
         </div>
         <div class="col-m-4">
-            <a href="" class="upgrade-home-item upgrade-home-item-configuration" ui-sref="root.system-config">
-                <span class="upgrade-home-item-title">System Configuration</span>
-                <span class="upgrade-home-item-description">I want to change my Magento system configurations.</span>
+            <a href="" class="setup-home-item setup-home-item-configuration" ui-sref="root.system-config">
+                <span class="setup-home-item-title">System Configuration</span>
+                <span class="setup-home-item-description">I want to change my Magento system configurations.</span>
             </a>
         </div>
     </div>
diff --git a/setup/view/magento/setup/index.phtml b/setup/view/magento/setup/index.phtml
index d61e29b862ddae04ca0406757985ba40e22cb0f0..38b8de8cf8bd9f3f477b241b654a32e25ad7c0d1 100644
--- a/setup/view/magento/setup/index.phtml
+++ b/setup/view/magento/setup/index.phtml
@@ -4,12 +4,11 @@
  * See COPYING.txt for license details.
  */
 ?>
-
 <div ng-include="'index.php/navigation/side-menu'" style="display: inline-block"></div>
-<div class="page-wrapper">
+<div class="{{$state.current.type == 'installer' ? 'container' : 'page-wrapper'}}">
     <div ng-include="'index.php/navigation/header-bar'"></div>
     <main id="anchor-content" class="page-content">
-        <div style="display: inline-block"><?php echo $this->render('navigation/menu.phtml');?></div>
+        <?php echo $this->render('navigation/menu.phtml');?>
         <div
             id="main"
             class="{{class}}"
diff --git a/setup/view/magento/setup/landing.phtml b/setup/view/magento/setup/landing.phtml
index f8632bc04e76419841b2984a3840c4919fef85c5..f8fa886f73bc3fe3145c46973a55aabdc0147b2f 100644
--- a/setup/view/magento/setup/landing.phtml
+++ b/setup/view/magento/setup/landing.phtml
@@ -13,7 +13,9 @@
         <?php echo 'Version' . ' ' . $this->version; ?>
     </p>
     <p class="text-welcome">
-        <?php echo $this->welcomeMsg ?> <a href=<?php echo $this->docRef ?> target="_blank">Getting Started</a> to learn more.
+        Welcome to Magento Admin, your online store headquarters.
+        <br>
+        Click 'Agree and Set Up Magento' or read <a href="http://devdocs.magento.com/guides/v1.0/install-gde/install/install-web.html" target="_blank">Getting Started</a> to learn more.
     </p>
     <p class="text-terms">
         <a href="" ng-click="previousState()">Terms & Agreement</a>
@@ -22,5 +24,5 @@
         type="button"
         class="btn btn-large btn-prime btn-submit"
         ng-click="nextState()"
-        ><?php echo $this->agreeButtonText ?></button>
+        >Agree and Setup Magento</button>
 </section>
diff --git a/setup/view/magento/setup/navigation/menu.phtml b/setup/view/magento/setup/navigation/menu.phtml
index d3ea9768c9aa8a4d298a2ba055aefc8d5200a731..b69df93fae2d04ff926866186f68a1a480c3b585 100644
--- a/setup/view/magento/setup/navigation/menu.phtml
+++ b/setup/view/magento/setup/navigation/menu.phtml
@@ -17,8 +17,8 @@
 
 </head>
 
-<div>
-    <nav ng-controller="navigationController" id="menu" class="nav ng-scope show"
+
+<nav ng-controller="navigationController" id="menu" class="nav ng-scope show"
          ng-hide="$state.current.noMenu || $state.current.main || $state.current.default">
     <ul class="nav-bar">
         <li ng-repeat="menuState in menu | filter: {type: $state.current.type}:true"
@@ -29,4 +29,4 @@
         </li>
     </ul>
 </nav>
-</div>
+
diff --git a/setup/view/magento/setup/readiness-check.phtml b/setup/view/magento/setup/readiness-check.phtml
index 3a38cd65c00501a9d2453c1c5d2bcc2d26db0b1f..072ac38bda7da2a499418367db73729ce6391e56 100644
--- a/setup/view/magento/setup/readiness-check.phtml
+++ b/setup/view/magento/setup/readiness-check.phtml
@@ -33,7 +33,7 @@
     </div>
 </div>
 
-<h2 class="page-title">{{$state.current.header}}</h2>
+<h2 class="page-sub-title">{{$state.current.header}}</h2>
 <div ng-show="$state.is('root.readiness-check-' + $state.current.type)"
      ng-init="actionFrom='<?php echo $this->actionFrom ?>'" class="accent-box">
     <p>Let's check your environment for the correct PHP version, PHP extensions, file permissions and compatibility.</p>
diff --git a/setup/view/magento/setup/select-version.phtml b/setup/view/magento/setup/select-version.phtml
index 7a2f7db61910a64ff7fed4217645d252d97e38bc..b1a8367978eca34216985dc1a72da77e5d42a2aa 100644
--- a/setup/view/magento/setup/select-version.phtml
+++ b/setup/view/magento/setup/select-version.phtml
@@ -5,8 +5,6 @@
  */
 ?>
 
-<h2 class="page-title">{{$state.current.header}}</h2>
-
 <div class="nav-bar-outer-actions">
 
     <div class="outer-actions-inner-wrap">
@@ -30,6 +28,8 @@
     </div>
 </div>
 
+<h2 class="page-sub-title">{{$state.current.header}}</h2>
+
 <div class="row form-row">
     <div class="message message-spinner" ng-show="!upgradeProcessed">
         <span class="spinner">
@@ -54,7 +54,7 @@
                 id="selectVersion"
                 class="form-el-select"
                 ng-model="selectedOption"
-                ng-options="item.id as item.name for item in versions">
+                ng-options="item.versionInfo as item.version.name for item in versions">
             </select>
         </div>
     </div>
diff --git a/setup/view/magento/setup/success.phtml b/setup/view/magento/setup/success.phtml
index 9740868f019346843297807e9827b4415ca535ff..573d937274ebf3986d901979618492b5cae13898 100644
--- a/setup/view/magento/setup/success.phtml
+++ b/setup/view/magento/setup/success.phtml
@@ -66,7 +66,7 @@
     <p class="bold" ng-repeat="message in messages">{{message}}</p>
     <?php if ($this->isSampleDataErrorInstallation) : ?>
         <div class="message message-warning">
-            <span class="message-text"><strong>Something went wrong while installing sample data.</strong> Please check <code>var/log/installation.log</code> for details. You can retry installing the data now or just start using Magento.</span>
+            <span class="message-text"><strong>Something went wrong while installing sample data.</strong> Please check <code>var/log/system.log</code> for details. You can retry installing the data now or just start using Magento.</span>
         </div>
     <?php endif; ?>
     <div ng-show="config.address.actual_base_url">
diff --git a/setup/view/magento/setup/web-configuration.phtml b/setup/view/magento/setup/web-configuration.phtml
index d2c15d9426cc08d5a7f7fc64102969467611e63e..a87a668915f9fd59ec3667f5f44618a2ba43ed28 100644
--- a/setup/view/magento/setup/web-configuration.phtml
+++ b/setup/view/magento/setup/web-configuration.phtml
@@ -210,7 +210,7 @@ $hints = [
                     ng-model="config.rewrites.allowed"
                     >
                 <label class="form-label" for="apacheRewrites">
-                    Use Web Server Apache Rewrites
+                    Use Apache Web Server Rewrites
                 </label>
             </div>
         </div>